Llama 3 на сервере: частые ошибки и решения
Llama 3 разворачивается за пять минут, а потом начинает вести диалог сама с собой, требует 22 ГБ памяти на «заявленные 128k» и пишет по-русски хуже, чем вы ожидали. Почти все частые ошибки Llama 3 — не поломка сервера, а особенности линейки: свой стоп-токен, гейт на весах, восемь официальных языков без русского. Ниже шесть типовых сценариев с точными строками ошибок и правками.
Содержание
- Сначала выясните, какая именно Llama 3 у вас стоит
- Модель не замолкает: `<|eot_id|>`, разговор с самой собой и двойной BOS
- `Error: 403` на гейте Hugging Face и лицензия, которую стоит прочитать
- 128k контекста, которых на самом деле нет
- Русский язык: главное честное ограничение Llama 3
- Ответы «из июля 2024», повторы и мёртвые инструменты
- Какой сервер под Llama 3 брать в MAATRIX
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Сначала выясните, какая именно Llama 3 у вас стоит
«Llama 3» — не одна модель, а четыре поколения с разными размерами, окнами и даже архитектурой. Половина вопросов снимается, когда человек понимает: он скачал не то, что думал.
| Тег Ollama | Размеры | Окно | Дефолтный вес | Особенность |
|---|---|---|---|---|
llama3 | 8B, 70B | 8 192 | 4,7 ГБ (Q4_0) | апрель 2024, без tools |
llama3.1 | 8B, 70B, 405B | 131 072 | 4,9 ГБ (Q4_K_M) | рабочая лошадка, tools |
llama3.2 | 1B, 3B | 131 072 | 2,0 ГБ | latest — это 3B |
llama3.2-vision | 11B, 90B | 131 072 | 7,8 ГБ | архитектура mllama |
llama3.3 | только 70B | 131 072 | 43 ГБ | 8B не существует |
Отсюда три ежедневные ошибки. ollama pull llama3.3:8b отвечает Error: pull model manifest: file does not exist — восьмимиллиардной 3.3 нет и не было, в этой версии Meta выпустила единственную модель на 70B. ollama run llama3.2 тянет 3B на 2,0 ГБ, а не «младшую восьмёрку»: человек сравнивает её с ChatGPT и делает вывод, что Llama плохая. Дефолтный квант разный — у llama3:8b это Q4_0 (4,7 ГБ), у llama3.1:8b — Q4_K_M (4,9 ГБ), и двести мегабайт разницы дают заметно более гладкий текст: Q4_0 — плоская схема без разной точности по тензорам.
Проверка занимает одну команду:
$ ollama show llama3.1:8b
Model
architecture llama
parameters 8.0B
context length 131072
quantization Q4_K_M
Capabilities
completion
tools
Строка architecture у текстовых моделей — llama, у 3.2 Vision — mllama, и последняя требует Ollama версии 0.4 или новее. Если ollama -v показывает 0.3.x, будет Error: llama runner process has terminated: error loading model: unknown model architecture: 'mllama'. Обновление: curl -fsSL https://ollama.com/install.sh | sh — бинарник и юнит перезаписываются, веса и drop-in остаются.
Модель не замолкает: `<|eot_id|>`, разговор с самой собой и двойной BOS
Самая узнаваемая ошибка всей линейки. Модель отвечает правильно, а потом продолжает за собеседника:
Столица Франции — Париж.assistant
А что насчёт Германии?assistant
Берлин — столица Германии.assistant
Причина историческая и до сих пор живая в сторонних сборках. У Llama 3 два токена конца: <|end_of_text|> (128001) и <|eot_id|>, end of turn, — 128009. Реплика заканчивается вторым, а в метаданных многих GGUF полем eos_token_id записан первый: до него модель просто не доходит и печатает следующий заголовок роли. Слово assistant в выводе — это <|start_header_id|>assistant<|end_header_id|>, у которого не отрисовались служебные обёртки.
Что объявлено стоп-токеном, показывает ollama show --parameters llama3.1:8b. Пусто или только один stop — правьте Modelfile:
FROM ./Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf
TEMPLATE """{{ содержимое ollama show --template llama3.1:8b }}"""
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|eom_id|>"
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
SYSTEM """Отвечай по-русски, кратко и по делу."""
<|eom_id|> (128008) — токен «конец сообщения», которым Llama 3.1 завершает вызов инструмента; без него ответы с tool-call не останавливаются.
Шаблон не пишите руками: ollama show --template llama3.1:8b > llama3.tmpl отдаёт проверенный вариант. Заодно избежите двойного BOS — шаблон Llama 3 начинается с <|begin_of_text|> (128000), и если токенизатор тоже настроен добавлять BOS, в промпт уезжают два таких токена подряд. Ошибки не будет, качество просядет молча. Ловится сравнением prompt_eval_count на одном коротком промпте у вашей модели и у библиотечной: расхождение в один токен и есть лишний BOS.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть Ollama`Error: 403` на гейте Hugging Face и лицензия, которую стоит прочитать
Llama — единственная из популярных открытых моделей, у которой веса лежат за формой согласия; отсюда ошибки, которых нет ни у Qwen, ни у Mistral. На ollama pull hf.co/meta-llama/Llama-3.1-8B-Instruct-GGUF вы получите две строки без объяснений — pulling manifest и Error: 403:. Тот же диагноз через huggingface-cli, но словами:
Access to model meta-llama/Llama-3.1-8B-Instruct is restricted.
You must have access to it and be authenticated to access it. Please log in.
Три подводных камня. Заявку надо одобрить: форма Meta обрабатывается от минут до суток, и до одобрения токен бесполезен. Тип токена важен: обычный write-токен часто отдаёт 401 Invalid user token, нужен fine-grained с правом «Read access to contents of all public gated repos you can access». Токен должен долететь до сервиса: huggingface-cli login кладёт его в ~/.cache/huggingface/token вашего пользователя, а демон Ollama работает от системного ollama и этого каталога не видит.
Практический вывод: если нужна обычная Llama 3, не ходите на Hugging Face вообще. Библиотека Ollama раздаёт llama3.1:8b без авторизации — гейт остался только у оригинальных репозиториев Meta.
Лицензия при этом никуда не девается, и в ней два пункта на будущее. Первый: если у продукта на день релиза версии Llama больше 700 млн активных пользователей в месяц, нужна отдельная лицензия от Meta. Второй тоньше — права по Llama 3.2 Community License не предоставляются физлицам, проживающим в Евросоюзе, и компаниям с основным местом ведения бизнеса в ЕС, но только для мультимодальных моделей, то есть 3.2 Vision; текстовые 1B/3B и 70B из 3.3 под ограничение не попадают. Плюс формальность: производная модель обязана начинаться со слова Llama в названии, а в интерфейсе нужна пометка «Built with Llama».
128k контекста, которых на самом деле нет
Llama 3.1 и новее обучены на окне 131 072 токена, и это главный источник разочарования на VPS. Ollama по умолчанию открывает 4096, о чём честно предупреждает в журнале:
n_ctx_per_seq (4096) < n_ctx_train (131072) -- the full capacity of the model
will not be utilized
Наивная реакция — выставить num_ctx 131072 — заканчивается одним из двух:
Error: model requires more system memory (22.1 GiB) than is available (7.6 GiB)
Error: llama runner process has terminated: signal: killed
Арифметика считается заранее. У Llama 3.1 8B восемь KV-голов по 128 измерений и 32 слоя — это 128 КБ кэша на каждый токен окна; у 70B слоёв 80 при тех же восьми головах, то есть 320 КБ на токен.
num_ctx | KV, 8B fp16 | KV, 8B q8_0 | Всего с весами 4,9 ГБ |
|---|---|---|---|
| 4 096 | 0,5 ГБ | 0,25 ГБ | ~6 ГБ |
| 8 192 | 1,0 ГБ | 0,5 ГБ | ~6,5 ГБ |
| 32 768 | 4,0 ГБ | 2,0 ГБ | ~10 ГБ |
| 131 072 | 16 ГБ | 8 ГБ | ~22 ГБ |
Кэш выделяется целиком при загрузке, поэтому падение происходит сразу. Добивают два множителя: объём умножается на OLLAMA_NUM_PARALLEL (четыре слота превращают 8192 в 32768 токенов кэша), а размер окна из запроса /v1/chat/completions не задаётся вовсе — в схеме OpenAI такого поля нет, только OLLAMA_CONTEXT_LENGTH в drop-in или PARAMETER num_ctx в Modelfile.
Рабочий компромисс для восьмёрки на процессоре — 16k с квантованным кэшем:
# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
Environment="OLLAMA_NUM_PARALLEL=1"
Честно про минусы: q8_0 экономит половину кэша и почти незаметен, q4_0 экономит три четверти, но на длинных цепочках теряет детали из начала контекста. И даже если памяти на 128k хватило, качество на дальнем конце окна падает: одиночный факт восьмёрка там находит уверенно, а связать несколько фактов из разных частей документа уже не может.
Если вы поднимаете Llama 3.1 не в Ollama, а через transformers или vLLM, добавится своя ошибка — ValueError: rope_scaling must be a dictionary with with two fields, name and factor, с опечаткой «with with» прямо из исходников. Схема масштабирования RoPE в Llama 3.1 новая и требует transformers>=4.43. Расход памяти по всем размерам — в таблице RAM для Llama 3.
Русский язык: главное честное ограничение Llama 3
Об этом редко пишут прямо, поэтому скажем прямо. Meta заявляет для Llama 3.1 и 3.3 поддержку восьми языков: английский, немецкий, французский, итальянский, португальский, хинди, испанский и тайский. Русского в списке нет. Модель на нём говорит — данные в корпусе были, — но качество заметно ниже, чем у Qwen 2.5 или Gemma 2 того же размера. На практике это три вещи:
- Сползание в английский. Без системного промпта на русском модель отвечает по-английски примерно в каждом пятом длинном ответе. Строка
Отвечай только на русском языкевSYSTEMснимает большую часть случаев. - Падежи и согласование. У
llama3.2:3bна тексте длиннее абзаца ломаются окончания и род, уllama3.1:8b— редко, но на терминах и числительных. Сэмплированием это не настраивается. - Русский дороже в токенах. Словарь Llama 3 — 128 256 записей, и кириллица режется мельче латиницы: 2,6–3 знака на токен против 4 для английского. Проверяется одной командой:
curl -s http://127.0.0.1:11434/api/chat -d '{"model":"llama3.1:8b",
"messages":[{"role":"user","content":"<абзац русского текста на 1000 знаков>"}],
"options":{"num_predict":1},"stream":false}' | jq .prompt_eval_count
Тысяча знаков русского даёт около 350–380 токенов: окно 8k вмещает примерно 22 тысячи знаков вместо 32 тысяч на английском, и документ упирается в контекст раньше, чем вы рассчитывали.
Что делать. Если русский — основной язык задачи, честный ответ: возьмите Qwen 2.5, при равном размере он на русском сильнее. Если Llama нужна принципиально, берите 8B в Q4_K_M и смотрите русскоязычные дообучения на её основе: формат промпта и стоп-токены они наследуют, Modelfile из второго раздела подходит без правок.
Ответы «из июля 2024», повторы и мёртвые инструменты
Модель уверена, что сейчас 2024 год. Это не галлюцинация, а шаблон: в официальном чат-шаблоне Llama 3.1 зашиты две строки, которые уезжают в системное сообщение автоматически.
Cutting Knowledge Date: December 2023
Today Date: 26 Jul 2024
Дата статическая, и модель послушно на неё опирается. Если приложению важна актуальная — подставляйте её в свой SYSTEM, генерируя строку при старте сервиса.
Сэмплирование. Ollama по умолчанию даёт temperature 0.8, Meta для Llama 3.1 рекомендует 0.6 при top_p 0.9 — при 0.8 восьмёрка уходит в перечисления и повторы абзацев. Заодно расширьте repeat_last_n с дефолтных 64 до 256.
Инструменты. У llama3 первого поколения поддержки tools нет — придёт Error: llama3:8b does not support tools (status code: 400). Нужна llama3.1 и новее.
Хуже, когда ошибки нет, массив message.tool_calls пуст, а в message.content лежит текст вида:
<|python_tag|>{"name": "get_weather", "parameters": {"city": "London"}}
Модель всё сделала верно: Llama 3.1 оформляет вызов функции токеном <|python_tag|> (128010) и завершает его <|eom_id|>. Не сработал разбор — в вашем GGUF шаблон без ветки для инструментов, лечение то же, что во втором разделе. Проверка перед отладкой клиента: ollama show llama3.1:8b | grep -A4 Capabilities.
Честное ограничение: у llama3.2:1b и 3b вызовы инструментов формально заявлены, но модели путают имена аргументов и выдумывают несуществующие функции. Надёжный минимум для tools — 8B. А если нужен строгий JSON, а не вызов функции, добавьте "format": "json" в тело запроса: это включает грамматику на уровне сэмплера, и невалидный JSON становится невозможен.
Какой сервер под Llama 3 брать в MAATRIX
Часть разобранного упирается не в конфиги, а в железо: signal: killed при попытке открыть окно пошире и минуты ожидания первого токена.
Минимум: 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe. Спокойно живёт llama3.2:3b-instruct-q4_K_M с окном 8k. Восьмёрка влезает впритык — 4,9 ГБ весов, 1 ГБ кэша, полтора гигабайта системы, — и Open WebUI с Postgres рядом уже не помещается, а окно шире 8k даёт OOM. Русский на 3B будет посредственным: это ограничение модели, а не сервера.
Рабочий вариант: 8 vCPU, 16 ГБ RAM, 120–160 ГБ NVMe. Целевая конфигурация для llama3.1:8b с окном 16k и q8_0-кэшем: 7 ГБ на модель, 2–3 ГБ на веб-интерфейс с базой, место под вторую. Замер такой машины (EPYC, DDR4-3200, без видеокарты) — ollama run llama3.1:8b --verbose:
prompt eval count: 26 token(s)
prompt eval rate: 63.11 tokens/s
eval count: 241 token(s)
eval rate: 8.64 tokens/s
Восемь ядер нужны не ради скорости печати — она упирается в память, — а ради чтения промпта: документ на 20 000 токенов обрабатывается около пяти минут, и всё это время клиент ждёт первого байта. Поэтому proxy_read_timeout 600s; в Nginx обязателен.
Комфорт: 8–16 vCPU, 32 ГБ RAM, от 200 ГБ NVMe. Окно 32k без компромиссов по кэшу, llama3.2-vision:11b и две модели сразу при OLLAMA_MAX_LOADED_MODELS=2. Границу назову прямо: llama3.3:70b на процессорном VPS запускать не нужно — 43 ГБ весов требуют 56+ ГБ RAM и дают около токена в секунду, под 70B нужна видеокарта.
Ollama есть в каталоге приложений MAATRIX, и ставить её руками не нужно: при заказе сервера она разворачивается автоматически на Ubuntu или Debian, юнит поднят и в автозапуске, версия свежая — та, что понимает mllama и разбирает <|python_tag|>. Доступы появляются в личном кабинете, в разделе «Доступ»; останется ollama pull llama3.1:8b и drop-in из четвёртого раздела. Путь с нуля — в статье как запустить Llama 3 на VPS, уровни квантования — в разборе выбора кванта.
Локация — Лондон, по двум причинам. Скачивание: registry.ollama.ai из российских сетей регулярно рвёт пятигигабайтные слои, а Hugging Face с гейтом Meta без обходных путей недоступен вовсе. И лицензия: Великобритания после Brexit не входит в ЕС, а ограничение Llama 3.2 адресовано резидентам ЕС — для мультимодальной Vision лондонский узел удобнее континентального. Пинг из Москвы 40–60 мс на фоне 8–9 токенов в секунду незаметен. Под 152-ФЗ берите площадку в России, но веса выкачивайте заранее.
Оплата — картой российского банка, по СБП, криптовалютой или токеном MAAT: иностранная карта не нужна, хотя сервер стоит в Великобритании.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть OllamaОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Llama 3 продолжает диалог сама с собой и печатает слово «assistant». Что чинить?
Стоп-токен. Конец реплики у Llama 3 — <|eot_id|> (128009), а не <|end_of_text|> (128001), и в сторонних GGUF он часто не объявлен. Добавьте в Modelfile PARAMETER stop "<|eot_id|>" и PARAMETER stop "<|start_header_id|>", а шаблон возьмите командой ollama show --template llama3.1:8b.
Почему ollama pull llama3.3:8b возвращает file does not exist?
Такой модели нет: в Llama 3.3 Meta выпустила единственный размер, 70B на 43 ГБ. Для восьми миллиардов параметров нужен тег llama3.1:8b.
Стоит ли брать Llama 3 под русский язык?
Только если она нужна по другим причинам. Русского нет в списке восьми официально поддерживаемых языков, и при равном размере Qwen 2.5 и Gemma 2 отвечают на нём точнее. Если остаётесь на Llama — минимум 8B в Q4_K_M и язык, заданный в системном промпте.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.