huggingface_hub (команда hf); llama.cpp (собранный из исходников или готовый бинарник под вашу ОС); аккаунт Hugging Face и токен с правами Read — для моделей с ограниченным доступом; свободное место на диске не меньше удвоенного размера выбранного .gguf-файла.
git и git-lfs. Без LFS вместо файла модели вы получите текстовый указатель../models).Установка и проверка инструментов:
python3 --version
git --version
git lfs install
pip install -U "huggingface_hub[cli]"
hf --help
Пример: успешный вывод git lfs install — строка Git LFS initialized.; hf --help печатает список подкоманд (download, auth, upload).
Зачем: hf — официальный CLI для Hugging Face Hub, он умеет качать отдельные файлы из репозитория, не вытягивая весь репозиторий целиком. git-lfs нужен, потому что веса моделей хранятся через Git Large File Storage, а не как обычные файлы в git.
Если команда hf не найдена — в вашей версии пакета она может называться huggingface-cli; сверьтесь с документацией huggingface_hub.
python3 --version печатает версиюgit lfs install печатает Git LFS initialized.hf --help открывает справку без ошибокОбщий порядок действий для новичка разобран в гайде Как запустить ИИ-модель локально на своём компьютере: гайд для начинающих.
Что сделать: открыть https://huggingface.co/models и сузить выдачу фильтрами в левой колонке: Task → Text Generation, Library → GGUF, Size → диапазон параметров. Сортировку переключить на Most downloads. Затем зайти на страницу выбранной модели → вкладка Files → найти файлы *.gguf.
Зачем: GGUF — формат файла «одна модель в одном файле», его читают llama.cpp, llama-server и большинство локальных раннеров. Фильтр по библиотеке GGUF сразу отсекает репозитории с «сырыми» весами (safetensors), которые нельзя запустить одной командой без конвертации.
Пример: https://huggingface.co/<owner>/<model>-GGUF → вкладка Files → файл вида <model>-Q4_K_M.gguf. Имя файла кодирует квантизацию — степень сжатия весов.
| Суффикс в имени файла | Что означает | Когда выбирать |
|---|---|---|
| `Q8_0` | самое лёгкое сжатие из перечисленных, самый крупный файл | памяти достаточно, качество критично |
| `Q5_K_M` | среднее сжатие | компромисс между размером и качеством |
| `Q4_K_M` | сильнее сжатие, заметно меньше файл | типовой выбор для бытовой видеокарты |
| `Q3_K_M` / `Q2_K` | сильное сжатие | памяти мало, качество вторично |
Точные размеры файлов смотрите в колонке Size — они зависят от числа параметров модели, поэтому универсальной цифры нет.
Тот же поиск из Python, если не хочется кликать по интерфейсу:
from huggingface_hub import HfApi
api = HfApi()
for m in api.list_models(filter="gguf", sort="downloads", direction=-1, limit=10):
print(m.id, m.downloads)
for f in api.list_repo_files("<owner>/<model>-GGUF"):
if f.endswith(".gguf"):
print(f)
Пример вывода: идентификаторы вида owner/name-GGUF и имена файлов name-Q4_K_M.gguf, name-Q8_0.gguf.
Как проверить: в списке файлов есть хотя бы один .gguf с суффиксом квантизации. Если файл разбит на шарды (-00001-of-00003.gguf), качать нужно все части — по ним llama.cpp собирает модель.
Если тег gguf в list_models не сработал в вашей версии библиотеки — сверьтесь с документацией HfApi.

Что сделать: скачать ровно один нужный файл, проверить его целостность, собрать llama.cpp и запустить модель.
Скачивание одного файла по маске:
hf download <owner>/<model>-GGUF \
--include "*Q4_K_M.gguf" \
--local-dir ./models
Зачем: --include фильтрует файлы по glob-маске. В репозитории обычно лежат десятки квантизаций, и без фильтра вы скачаете несколько десятков гигабайт вместо одного файла.
Для моделей с ограниченным доступом сначала авторизуйтесь:
hf auth login
hf auth whoami
Пример: hf auth login спросит токен (вставка не отображается на экране), hf auth whoami печатает имя вашего аккаунта. Перед этим на странице модели нужно принять условия доступа — иначе скачивание вернёт 401.
Проверка файла — сигнатура формата:
ls -lh ./models/*.gguf
head -c 4 ./models/<model>-Q4_K_M.gguf; echo
Ожидаемый результат: ls показывает размер в гигабайтах, head печатает GGUF. Если вместо этого вы видите version https://git-lfs.github.com/spec/v1, файл не скачался — это LFS-указатель.
Сборка llama.cpp:
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config Release -j
Зачем: llama.cpp — движок инференса (то есть выполнения модели), который читает GGUF и умеет работать на CPU и GPU. Если cmake недоступен, возьмите готовый бинарник со страницы Releases проекта — сверьтесь с документацией.
Запуск в режиме одного запроса:
./build/bin/llama-cli -m ../models/<model>-Q4_K_M.gguf \
-p "Напиши одну строку о себе" -n 64
Запуск как локальный HTTP-сервер с OpenAI-совместимым API:
./build/bin/llama-server -m ../models/<model>-Q4_K_M.gguf \
--host 127.0.0.1 --port 8080 -ngl 0
Зачем: -ngl — число слоёв, выгружаемых на GPU (offload). -ngl 0 означает «только CPU»: так модель точно запустится, но медленнее. Если модель не влезает в память одной карты, порядок действий с offload разобран в гайде Как запустить модель на 125B параметров на RTX 4090: квантизация, offload и 100 токенов в секунду.
Как проверить: в логе сервера появляется строка о прослушивании порта — вида server is listening on http://127.0.0.1:8080. Процесс не завершился, терминал занят.

Что сделать: отправить запрос к локальному API и убедиться, что приходит осмысленный ответ.
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Скажи ok"}],"max_tokens":16}'
Зачем: это тот же формат, что у OpenAI API, поэтому ваш локальный сервер подключается в существующий код заменой base_url. Ответ в JSON означает, что модель загрузилась, токенизатор работает и порт доступен.
Пример ожидаемого вывода (сокращённо):
{"choices":[{"message":{"role":"assistant","content":"ok"}}]}
Точный набор полей зависит от сборки — важны choices и непустой content.
Проверка из Python:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="none")
r = client.chat.completions.create(
model="local",
messages=[{"role": "user", "content": "Привет"}],
)
print(r.choices[0].message.content)
Зачем: поле api_key локальный сервер не проверяет, поэтому подойдёт плейсхолдер none; поле model тоже игнорируется — сервер обслуживает ту модель, с которой запущен.
Как проверить, что всё получилось:
ls -lh ./models/*.gguf показывает реальный размер, а не несколько байтGGUF127.0.0.1:8080curl вернул JSON с непустым contentcurl -s http://127.0.0.1:8080/health возвращает статус OK (если эндпоинт отсутствует в вашей сборке — сверьтесь с документацией)Проблема. Скачивание падает с отказом доступа
401 Client Error: 401 Unauthorized for url: https://huggingface.co/<owner>/<model>-GGUF/resolve/main/...hf auth login, вставьте токен и проверьте hf auth whoami. После этого повторите hf download ... в новой сессии терминала.Проблема. Вместо весов скачался текстовый файл на пару сотен байт
head -c 4 печатает vers, а файл начинается со строки version https://git-lfs.github.com/spec/v1; при клонировании возможен smudge filter lfs failedgit lfs install, затем в каталоге репозитория git lfs pull. Надёжнее — качать через hf download <owner>/<model>-GGUF --include "*<квантизация>.gguf" --local-dir ./models.Проблема. Модель не влезает в видеопамять
CUDA error: out of memory или ggml_backend_cuda_buffer_type_alloc_buffer: allocating ... failed-ngl выгружает на GPU больше слоёв, чем помещается в память, либо слишком велик контекст.-ngl шагами (например, -ngl 20, затем -ngl 10, затем -ngl 0 — только CPU) и уменьшите контекст: ./build/bin/llama-server -m ../models/<model>.gguf --host 127.0.0.1 --port 8080 -ngl 10 -c 2048. Если и -ngl 0 не работает — возьмите более сильную квантизацию (Q4_K_M вместо Q8_0).Вы прошли путь от фильтра GGUF на Hugging Face до рабочего локального эндпоинта http://127.0.0.1:8080/v1. Дальше имеет смысл подобрать квантизацию и -ngl под свою видеокарту, а для запуска на телефоне — перейти к гайду Как запустить ИИ-модель локально на Android: приложения и настройка.
Чем GGUF отличается от safetensors и почему нужен именно он?
Safetensors — формат хранения «сырых» весов, его обычно требуют фреймворки обучения и тяжёлые инференс-стеки. GGUF — упакованный файл «модель + метаданные» для llama.cpp и совместимых раннеров, поэтому для локального запуска одной командой берут именно .gguf.
Сколько места на диске нужно?
Ориентируйтесь на размер файла в колонке Size на вкладке Files: он зависит от числа параметров модели и выбранной квантизации. Практическое правило — свободного места должно быть минимум в два раза больше размера файла, чтобы хватило на скачивание и распаковку.
Можно ли запустить без видеокарты?
Да, -ngl 0 переводит все слои на CPU, и модель будет работать — медленнее, чем на GPU. Скорость зависит от процессора, объёма RAM и размера модели; конкретных цифр без замера на вашей машине назвать нельзя.
Какую квантизацию выбрать для 8 ГБ видеопамяти?
Универсальной рекомендации нет: сравните размеры файлов Q4_K_M, Q5_K_M и Q8_0 на странице модели и возьмите самый крупный, который оставляет запас памяти под контекст. Начните с -ngl 0, затем увеличивайте -ngl, пока не упрётесь в лимит памяти.