Проект 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