Перейти к содержанию
Публикация AiManual

llama.cpp 1.0.0: что даёт первый стабильный API и как обновление повлияет на локальный запуск моделей

llama.cpp 1.0.0 впервые закрепляет semver: ломающие изменения API и ABI теперь видны по номеру версии. Разбираем, какие 35 функций удалили, что дают FP8 для KV-

Коротко

Что будет в материале

  1. 01

    Что такое llama.cpp 1.0.0 и почему это не просто очередной релиз

  2. 02

    Что сломается при обновлении: удалённые функции и перестройка кода

  3. 03

    Что 1.0.0 даёт для локального запуска моделей

  4. 04

    Станет ли быстрее: что релиз не обещает

Что такое llama.cpp 1.0.0 и почему это не просто очередной релиз

llama.cpp 1.0.0 вышла как первая стабильная версия библиотек llama.cpp и ggml. Смысл релиза в правилах версионирования: проект закрепляет обязательства по semver, и теперь несовместимые изменения API и ABI отмечаются повышением мажорной версии, например переходом с 1.0.0 на 2.0.0. Подробности перечислены в описании релиза.

Вместе с llama.cpp обновился ggml, компонент, который выполняет математические вычисления. Проекты поставляют две библиотеки: libllama и libggml, и обе живут по новым правилам совместимости.

Нумерация версий существовала и до 1.0.0. Этот релиз закрепляет обещания совместимости, поэтому единица в начале номера теперь означает конкретную вещь: в пределах мажорной ветки API ломать не будут.

Что закрепляет semver: мажорная, минорная и патч-версия

Схема semver раскладывает номер на три части, и каждая отвечает за свой тип изменений.

  • Мажорная версия (первая цифра): несовместимые изменения API и ABI. Переход с 1.0.0 на 2.0.0 означает, что часть кода придётся править.
  • Минорная версия (вторая цифра): совместимые дополнения. Новые функции появляются, старые вызовы продолжают работать.
  • Патч (третья цифра): исправления ошибок без изменения API.

Практическая польза для тех, кто собирает приложения на libllama или libggml: риск обновления видно по номеру ещё до чтения списка изменений. Мажорный скачок означает проверку кода и тестов, минорный даёт обычное обновление.

Дальше работает обычная дисциплина зависимостей: фиксируйте версию в манифесте, например 1.0.0 без диапазона или с ограничением на мажор, обновляйтесь осознанно и держите тесты, которые ловят поломку API. Пиннинг не спасает от багов, зато гарантирует, что несовместимый код не приедет в проект в момент пересборки.

Чем 1.0.0 отличается от pre-1.0 сборок

До 1.0.0 API мог меняться без формальных предупреждений: функции удаляли, сигнатуры правили, а приложение узнавало об этом на этапе сборки или, хуже, в рантайме. Теперь ломающие изменения отделены от совместимых на уровне номера версии.

Второй момент важнее для ожиданий: llama.cpp 1.0.0 не обещает ускорения моделей. Общего сравнения производительности команда не публиковала, а стабильность API и скорость генерации токенов - разные вещи.

Что сломается при обновлении: удалённые функции и перестройка кода

Обновление потребует правок в коде. Заметных изменений три: чистка устаревшего API, удаление настройки «прогрева» модели и перестройка мультимодального кода.

Удалённые 35 функций в llama.h

Из llama.h убрали 35 устаревших функций, об этом прямо сказано в сообщении о версии 1.0.0. Для стабилизации это ожидаемый шаг: публичный заголовочный файл избавляют от балласта, который тянулся с ранних версий.

Что делать: собрать список мест, где приложение обращается к llama.h, и сверить вызовы с актуальным заголовком. Точный перечень удалённых функций смотрите в исходниках релиза, угадывать по именам бессмысленно: часть замен неоднозначна. Поиск по коду и компилятор с новым заголовком дают более надёжный список правок, чем чтение заметок.

Удаление настройки «прогрева» модели

«Прогрев» - это подготовительные вычисления перед основной работой модели. Отдельную функцию настройки этого процесса удалили. Если в коде остался вызов, он не соберётся, поэтому участок нужно убрать или переписать под актуальный интерфейс.

Чем именно заменили эту настройку, в исходном описании релиза не уточняется. Сверяйтесь с релизными заметками и заголовками конкретной версии, чтобы не поймать сюрприз на этапе тестов.

Объединение кода для изображений и звука

Код для изображений и звука объединили в одном компоненте. Это структурное изменение, а не новая возможность: меняется организация мультимодальных частей.

Если приложение собирало или линковало части для работы с картинками и аудио по отдельности, проверьте сборочные скрипты и зависимости. Проекты на чисто текстовом инференсе изменения, скорее всего, не затронут.

Что 1.0.0 даёт для локального запуска моделей

Практическая часть релиза касается памяти и запуска. Разбирать стоит три вещи: формат KV-кеша, поведение MoE-моделей и список поддерживаемых архитектур.

FP8 для KV-кеша: что это даёт на практике

KV-кеш хранит состояния внимания для уже обработанных токенов. Чем длиннее контекст и чем больше слоёв у модели, тем больше памяти он занимает. На длинных диалогах кеш нередко съедает больше VRAM, чем сами веса в квантованном виде.

В 1.0.0 для KV-кеша добавили формат FP8. Это ещё один вариант хранения кеша, то есть дополнительная ручка для настройки расхода памяти.

Конкретной экономии в гигабайтах источник не приводит, и её нельзя вывести из названия формата: результат зависит от модели, длины контекста и остальных настроек. Влияние на качество ответов проверяйте на своих задачах, особенно на длинных контекстах, где кеш разрастается сильнее всего.

MoE-модели и частичный вынос вычислений на CPU

Механика из описания релиза такая: основные данные MoE-модели могут храниться в оперативной памяти, а часто используемые эксперты дополнительно держатся в памяти видеокарты. Если нужного эксперта в VRAM нет, после заполнения кеша часть вычислений можно поручить CPU вместо пересылки данных на GPU.

Смысл в компромиссе: вы платите скоростью за возможность запустить модель, которая целиком в видеопамять не влезает. Для домашнего сервера с большим объёмом RAM и одной-двумя видеокартами это рабочий сценарий, но прироста скорости он не даёт по определению: вычисления на CPU идут медленнее, чем на GPU.

Параметры выноса подбираются под конкретную модель и железо. Замерять токены в секунду до и после правки конфигурации полезнее, чем ориентироваться на ожидания.

Более 150 архитектур: что это значит для выбора модели

По данным команды, инструмент поддерживает более 150 архитектур. Для пользователя это означает более широкий выбор моделей без ожидания отдельного патча под каждую новинку.

Совместимость архитектуры и качество работы - разные вещи. Конкретную модель стоит проверять на своих задачах: поддержка в llama.cpp гарантирует, что веса загрузятся и инференс пойдёт, но не гарантирует, что результат вам подойдёт.

Станет ли быстрее: что релиз не обещает

Короткий ответ: гарантий ускорения нет. Общего сравнения производительности команда не публиковала, поэтому релиз не даёт оснований ждать роста токенов в секунду.

Что действительно меняется: правила совместимости API и ABI, набор форматов хранения кеша, механика запуска MoE-моделей, список архитектур и поведение llama-server. Эти вещи влияют на удобство и спектр сценариев. Скорость зависит от другого набора факторов: модель, квантизация, конфигурация GPU и CPU, длина контекста, включён ли вынос вычислений на CPU.

Разумный порядок действий: записать текущие показатели на своём сценарии (промпты, длина контекста, потребление VRAM, токены в секунду), обновиться и повторить замер на том же наборе. Разница между двумя прогонами на одной машине информативнее любых общих заявлений.

Если нужен ориентир, как оценивать новинки без шума вокруг релизов, пригодится практический чек-лист: он помогает сравнить модели по качеству, скорости и потреблению памяти до смены рабочего стека.

Изменения в llama-server: TTS, интерфейс и новые разрешения

llama-server принимает запросы от браузера или приложения и передаёт их модели. В 1.0.0 у него появились новые функции и, что важнее для эксплуатации, новые разрешения.

OpenAI-совместимый запрос озвучивания текста

В llama-server добавили OpenAI-совместимый способ запрашивать озвучивание текста. Для тех, у кого клиент уже умеет работать с OpenAI-подобным API, это означает возможность встроить TTS в существующий пайплайн без переписывания клиентской части.

Какие голоса и модели озвучивания доступны, в описании релиза не раскрыто. Проверяйте на своём инстансе: набор зависит от сборки и загруженных файлов.

Что изменилось в браузерном интерфейсе

Три изменения:

  • Группы чатов. Несколько диалогов можно держать вместе, не смешивая их с остальными.
  • Предпросмотр оформления сообщений. Разметку видно до отправки.
  • Улучшенное отображение на телефонах. Веб-интерфейсом становится удобнее пользоваться с мобильного.

Для домашнего сервера это практично: открыть llama-server с телефона в локальной сети и продолжить диалог без отдельного клиента.

Новые разрешения: инструменты, медиа из внутренней сети и токен Hugging Face

Три сюжета про безопасность, и все они требуют внимания после обновления. Детали перечислены в обзоре изменений 1.0.0.

  • Запуск инструментов. Если сервер доступен с других устройств без API-ключа, запуск инструментов теперь требует отдельного разрешения. Это защита от того, чтобы кто-то в сети выполнил на вашей машине нежелательные действия.
  • Медиа из внутренней сети. Загрузка изображений и других файлов из локальной сети требует явного разрешения. Без него такие загрузки не пройдут.
  • Ключ Hugging Face. Токен больше не передаётся автоматически на произвольные адреса загрузки моделей. По умолчанию он отправляется только на huggingface.co, другой доверенный адрес можно задать вручную.

Практический вывод: после обновления пройдитесь по своим сценариям и выдайте разрешения там, где они действительно нужны. Включить всё «на всякий случай» проще, но смысл этих ограничений именно в том, чтобы доступ был осознанным.

Как мигрировать на 1.0.0: пошаговый чек-лист

  1. Зафиксируйте текущую версию и сохраните конфигурацию. Запишите, откуда вы ставили llama.cpp: способ обновления и отката зависит от канала.
  2. Определите тип использования. Приложение на libllama и libggml требует правок в коде, CLI и llama-server в основном проверки настроек.
  3. Сверьте код с новым llama.h. Уберите вызовы 35 удалённых функций и настройки «прогрева» модели.
  4. Проверьте сборку мультимодальных частей после объединения кода изображений и звука.
  5. Для llama-server проверьте разрешения на запуск инструментов и загрузку медиа из внутренней сети, задайте доверенный адрес для токена Hugging Face, если используете зеркало.
  6. Прогоните свои сценарии и сравните поведение до и после: длину контекста, потребление VRAM, скорость, качество ответов.

Разработчики перечисляют восемь каналов распространения обновления: от готовых файлов на GitHub до каталогов установки программ и наборов для приложений. Полный список в исходном описании обрывается, поэтому ориентируйтесь на свой канал: пакетный менеджер, готовый бинарник и самостоятельная сборка из исходников дают разные пути отката.

Если вы используете libllama как зависимость

Главный риск здесь - ломающие изменения API и ABI. Рабочий порядок такой: зафиксировать текущую версию, прочитать релизные заметки, обновиться в отдельной ветке, собрать проект и прогнать тесты, затем вливать в основную ветку. Мажорная цифра в номере версии теперь заранее сообщает, что часть кода придётся править, и это главное практическое приобретение от релиза.

Если вы просто запускаете модели через CLI или llama-server

Риск ниже: своего кода нет, сборка не ломается. Остаются новые разрешения и изменения интерфейса. Обновитесь через свой канал, проверьте запуск инструментов и загрузку медиа, при необходимости задайте доверенный адрес для токена Hugging Face. Базовые вещи про кванты и запуск llama-cli разобраны в гайде по llama.cpp на CPU.

Стоит ли обновляться сейчас: развилка решений

Когда обновление оправдано

  • Нужен FP8 для KV-кеша и вы работаете с длинным контекстом на ограниченной VRAM.
  • Хотите запускать MoE-модель, которая не влезает в видеопамять целиком, и готовы к компромиссу по скорости.
  • Нужна конкретная архитектура из расширенного списка, а ждать отдельного патча не хочется.
  • Используете llama-server и вам полезны озвучивание текста или новый браузерный интерфейс.
  • Важна предсказуемость API: semver упрощает планирование обновлений на месяцы вперёд.

Когда можно подождать

  • Рабочее приложение собрано на старом API, а ресурсов на миграцию и тесты сейчас нет.
  • Критична стабильность сервера, а новые разрешения требуют проверки сценариев.
  • Ждёте ускорения: его никто не обещал, сначала измерьте свой сценарий.

semver как раз и делает отсрочку осознанной: ломающие изменения приедут только с мажорной версией, и переход можно планировать. Откат выполняется возвратом к предыдущей версии из вашего канала распространения, поэтому перед обновлением сохраните рабочую сборку или её точный номер.

Начните с одного действия: выпишите текущие версии libllama и libggml и решите, обновляетесь вы сегодня или после тестового прогона на копии конфигурации.

Подписаться на канал