Пакетировать модели – не скачивать кота в мешке
В 2026 году управление зависимостями для AI выглядит так: скачал модель с Hugging Face, установил пять версий PyTorch, сломал окружение, переустановил систему. Знакомая история? Проблема не в моделях, а в том, как мы их доставляем. Грубо, ненадежно, опасно.
Кто-то таскает 8-гигабайтные файлы вручную. Кто-то пишет скрипты, которые ломаются при первом обновлении. А потом в проекте появляются модели с сюрпризом, и приходится разгребать последствия.
Классический conda-build сегодня – это как ехать на работу на динозавре. Медленно, громоздко, и постоянно надо следить, чтобы он чего не натворил. Особенно с учетом того, что метаданные пакетов Conda и PyPI тормозят установку до невозможного.
Что такое rattler-build и зачем он вам
Rattler-build – это инструмент для сборки Conda-пакетов, написанный на Rust. Не путайте с кондой из 2020-х. Это полностью переписанный движок, который делает одну вещь: создает пакеты быстро, предсказуемо и безопасно.
Пока conda-build раздумывает над зависимостями, rattler-build уже собрал три пакета, проверил их цифровые подписи и записал в кэш. Скорость? В 5-15 раз выше. Безопасность? Встроенная проверка целостности и поддержка Sigstore для подписей. Кэширование? Умное, многоуровневое, не надо скачивать одно и то же по сто раз.
Что он умеет в 2026 году
- Версионирование моделей как зависимостей. Не просто "модель-v1", а четкая спецификация: архитектура, квантование, хеш файла. Можно зафиксировать точную версию и быть уверенным, что через месяц установится то же самое.
- Детерминированная сборка. Одинаковые исходники = одинаковый пакет, бит в бит. Никаких случайных временных меток или UUID.
- Встроенная безопасность цепочки поставок. Проверка подписей на каждом этапе. Помните атаки на цепочку поставок в AI-инструментах? Здесь такой номер не пройдет.
- Поддержка GGML, ONNX, Safetensors. Пакетируете whisper.cpp, Llama 3.3 90B, Stable Diffusion 3 – все работает из коробки.
- Кроссплатформенность без боли. Собрали под Linux – запускайте под macOS или Windows. Rattler-build сам разберется с системными библиотеками.
Чем он лучше старого conda-build
| Критерий | conda-build | rattler-build |
|---|---|---|
| Скорость сборки | Медленно. Очень. | В 5-15 раз быстрее |
| Детерминизм | Частичный | Полный, репроизводимые сборки |
| Безопасность | Базовая проверка хешей | Подписи Sigstore, изоляция сборки |
| Кэширование | Простое, часто сбрасывается | Многоуровневое, инкрементальное |
| Сложность конфига | meta.yaml на 100 строк | rattler-build.toml на 20-30 строк |
Альтернативы? Docker – слишком тяжелый для просто доставки модели. Poetry, pip – не умеют работать с бинарными зависимостями и системными библиотеками. Nix – круто, но кривая обучения как у ракеты. Rattler-build берет лучшее из мира Conda и добавляет скорость Rust.
Упакуем whisper.cpp за 5 минут
Допустим, вы хотите раздавать свою дообученную версию whisper.cpp команде. Без заморочек, чтобы все работало одинаково у всех.
1 Создаем структуру пакета
mkdir whisper-cpp-package
cd whisper-cpp-package
mkdir -p src/models
2 Пишем rattler-build.toml
[package]
name = "whisper-cpp-custom"
version = "1.2.0" # Ваша версия модели
channel = "my-ai-models"
[build]
script = "build.sh"
# Зависимости для сборки
[build.dependencies]
host = [
"cmake >=3.25",
"gcc >=12.2.0", # Или clang для macOS
]
# Зависимости для работы
[dependencies]
run = [
"libstdcxx-ng >=12.2.0",
]
# Файлы модели, которые войдут в пакет
[package.include]
models = [
{ path = "src/models/ggml-custom.bin", hash = "sha256:abcd1234..." },
{ path = "src/models/vocab.txt" },
]
# Метаданные
[about]
summary = "Custom fine-tuned Whisper.cpp model for speech recognition"
license = "MIT"
homepage = "https://internal.company.com/models"
Обратите внимание на поле hash. Это не опционально – это требование безопасности. Вы вычисляете SHA256 хеш вашей модели и фиксируете его. При установке rattler-build проверит, что файл не изменился. Никаких неожиданностей, как в том истории с trust_remote_code в vLLM.
3 Скрипт сборки build.sh
#!/bin/bash
# Клонируем whisper.cpp (можно и из локального кэша)
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
# Собираем с поддержкой CUDA, если нужно
cmake -B build -DWHISPER_CUBLAS=ON .
cmake --build build --config Release
# Копируем бинарники и модели
mkdir -p ${PREFIX}/bin
cp build/bin/main ${PREFIX}/bin/whisper-cpp
cp -r ../src/models ${PREFIX}/share/whisper-cpp/
# Создаем обертку для удобства
cat > ${PREFIX}/bin/whisper-run << 'EOF'
#!/bin/bash
exec ${PREFIX}/bin/whisper-cpp -m ${PREFIX}/share/whisper-cpp/models/ggml-custom.bin "$@"
EOF
chmod +x ${PREFIX}/bin/whisper-run
4 Собираем и подписываем
# Устанавливаем rattler-build (если нет)
cargo install rattler-build
# Собираем пакет
rattler-build --recipe rattler-build.toml
# Подписываем (требуется Sigstore)
rattler sign --key ~/.sigstore/key.pem whisper-cpp-custom-1.2.0.tar.bz2
# Пушим в свой канал Conda
rattler upload --channel https://conda.company.com/my-ai-models whisper-cpp-custom-1.2.0.tar.bz2
Все. Теперь любой в команде может установить вашу модель одной командой:
conda install -c https://conda.company.com/my-ai-models whisper-cpp-custom
И это будет именно ваша версия, с вашей дообучкой, без лишних телодвижений. И самое главное – безопасно. Не то что некоторые облачные решения, которые сливают данные при первом запросе.
Кому rattler-build жизненно необходим
- ML-инженерам в компаниях, которые развертывают модели на продакшн. Если у вас больше трех моделей в работе, и вы до сих пор копируете файлы по S3 – вы теряете недели на отладке.
- Разработчикам AI-приложений, особенно тех, кто делает десктопные инструменты вроде Open Cowork. Вам нужна простая установка для пользователей.
- Командам, которые занимаются воспроизводимостью исследований. Зафиксировали версии моделей и зависимостей – и через год можете повторить эксперимент.
- Всем, кто устал от сюрпризов при обновлении зависимостей. Rattler-build не даст установить пакет с неправильным хешем.
А теперь неприятная правда
Rattler-build не панацея. Если ваша модель весит 200 ГБ, проблемы с доставкой никуда не денутся. Да, кэширование поможет, но первый раз скачивать все равно придется.
Интеграция с существующими CI/CD требует времени. Нельзя просто взять и заменить conda-build на rattler-build в старом пайплайне. Придется переписывать рецепты.
И да, документация иногда отстает от реальности. Последний раз я проверял в феврале 2026 – с базовыми сценариями все ок, но с экзотическими вещами вроде квантования моделей на лету придется разбираться самому.
Не используйте rattler-build для одноразовых скриптов. Если вам нужно просто запустить модель один раз, проще использовать готовые решения вроде Newelle. Rattler-build – это про индустриальную доставку, а не про прототипы.
Мой прогноз? К 2027 году стандартом де-факто для дистрибуции моделей станет что-то вроде rattler-build. Либо он сам, либо аналогичный инструмент на Rust. Потому что Python-инструменты уже не справляются с объемами и требованиями безопасности. Особенно после всех этих историй со взломанными инструментами вроде OpenCode.
Начните с упаковки одной маленькой модели. Например, той же whisper.cpp. Почувствуйте разницу. Потом попробуйте собрать пакет с Llama 3.3. Если не сломаетесь – вы на правильном пути. Если сломаетесь – напишите в Issues. Там отвечают быстро.