llama.cpp и ggml 1.0.0: стабильный API для локального инференса

Проект llama.cpp, позволяющий запускать мультимодальные LLM на оборудовании от потребительских машин до серверов, выпустил библиотеки версии 1.0.0. Вместе с ним до 1.0.0 доросла и ggml — тензорная библиотека, на которой работает движок инференса. Повод не косметический: за 3,5 года с момента появления проекта от его интерфейсов зависят многие сторонние приложения, и команда официально берёт на себя обязательство держать эти интерфейсы предсказуемыми.

Главное изменение касается нумерации версий. Начиная с 1.0.0 и llama.cpp, и ggml будут отражать несовместимости API и ABI повышением мажорного номера. По мере роста числа интеграций авторы обещают строже следить за тем, чтобы такие границы были видны тем, кто использует библиотеки в своих продуктах.

Что именно версионируется

Публичные заголовочные файлы у двух библиотек разные: у libllama это llama.cpp/include/, у libggml — ggml/include/. Правила семантического версионирования, общие для всех проектов ggml-org, выглядят так:

  • MAJOR — ломающее изменение публичного C API в ./include;
  • MINOR — обратно совместимая возможность, обновление бэкенда, поддержка новой модели или добавление в API;
  • PATCH — исправление ошибки без изменения API.

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

Каналы поставки

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

  • предрелизные сборки — Linux, macOS, Windows, Android, iOS;
  • Docker и Debian — Linux;
  • Homebrew — macOS и Linux;
  • conda-forge — Windows, macOS, Linux;
  • MacPorts — macOS;
  • Winget — Windows;
  • XCFramework — iOS и macOS.

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

Бэкенды, модели и CI

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

Скорость разработки команда подкрепляет вложениями в CI. Инфраструктуру удалось масштабировать с помощью технологий Hugging Face — HF Buckets и HF Jobs, — чтобы проверять корректность каждого изменения, попадающего в ветку master. Аппаратную поддержку оказывают NVIDIA, AMD, Qualcomm, Arm, IBM и Intel: парк собственных раннеров продолжает расти на всех основных платформах.

Для чего это локальному админу

llama.cpp остаётся одним из немногих способов поднять приватный инференс на уже имеющемся железе: переносимая реализация на C/C++, квантизация и оптимизированные бэкенды. Версия 1.0.0 здесь важна не новыми функциями, а обещанием, что обновление библиотеки не сломает сборку незаметно. Если вы держите внутренний сервис на llama.cpp, стоит зафиксировать версию в зависимостях и читать мажорный номер перед обновлением — теперь он несёт смысл.

Отдельно команда отмечает вклад сообщества и давних мейнтейнеров проекта, без которых этот рубеж не был бы достигнут. Для желающих познакомиться с проектом ближе опубликованы примеры использования llama.cpp, а также страницы ggml-org на Hugging Face и GitHub.

Частые вопросы

Что конкретно изменилось в llama.cpp с версией 1.0.0?

Появилось формальное правило: несовместимые изменения публичного C API в ./include повышают мажорный номер. До этого ориентироваться на версию при обновлении зависимостей было нельзя.

Какие библиотеки получили версию 1.0.0?

Две: libllama (LLM-инференс на C/C++) и libggml (тензорная библиотека для машинного обучения). Заголовки первой лежат в llama.cpp/include/, второй — в ggml/include/.

Чем MINOR отличается от PATCH?

MINOR — обратно совместимое добавление: новая функция, обновление бэкенда, поддержка модели или расширение API. PATCH — только исправление ошибки, API при этом не меняется.

Как поставить llama.cpp в Linux?

Готовые каналы для Linux — предрелизные артефакты, Docker, Debian, Homebrew и conda-forge. Выбор зависит от того, как вы управляете пакетами на сервере.

Есть ли сборка под Windows?

Да, несколько: предрелизные артефакты, conda-forge и Winget.

Сколько архитектур моделей поддерживается?

Более 150 вариантов архитектур, плюс все основные методы спекулятивного декодирования.

Как проверяется качество изменений?

CI масштабирован на технологиях Hugging Face — HF Buckets и HF Jobs; каждый коммит в master проходит проверку корректности. Собственные раннеры проекта работают на железе NVIDIA, AMD, Qualcomm, Arm, IBM и Intel.

Что делать, если обновиться нельзя?

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

Подходит ли llama.cpp для приватного инференса на своём железе?

Да, это одна из целей проекта: переносимая реализация на C/C++, квантизация и оптимизированные бэкенды позволяют запускать мультимодальные LLM от потребительских машин до серверов. Подробности о работе с конкретными моделями разобраны в материале о NVIDIA Dory 4B в llama.cpp.

Где искать примеры использования?

На страницах ggml-org на Hugging Face и GitHub, а также в репозитории примеров llama.cpp — ссылки на них приведены в релизном посте. Для тех, кто строит агентные сценарии поверх локальных моделей, полезен и разбор BotPsy от Tether.

Источник: huggingface.co