Хватит плодить чекпоинты
Ты когда-нибудь хранил три копии одной модели — 12B, 23B и 30B — чтобы под разные задачи не перезагружать сервер? Я — да. И каждый раз хотелось пнуть того, кто придумал занимать сотню гигабайт ради трех вариаций одного веса. Nvidia услышала. По состоянию на май 2026 года они выкатили Star Elastic — один чекпоинт, внутри которого лежат модели 12B, 23B и 30B. Без дублирования, без переобучения. Просто файл, который ты режешь на лету.
Zero-Shot Slicing — это не магия, а хитрый трюк с разреженными слоями. Внутри чекпоинта веса хранятся в виде суперпозиции: активируешь нужный размер — получаешь соответствующую подсеть. Никакого дополнительного fine-tuning, просто конфиг на старте.
Почему это не очередной LoRA-костыль
Да, LoRA тоже умеет адаптировать модель без дублей. Но LoRA — это дополнительные веса поверх. Ты все равно таскаешь базовый чекпоинт. Star Elastic же — один файл, который сам знает, какие параметры включать. Никаких адаптеров, никаких merge-скриптов. Загрузил — указал slicing config — получил модель нужного размера. Сравни:
| Характеристика | Традиционные чекпоинты | LoRA адаптеры | Star Elastic |
|---|---|---|---|
| Размер на диске | 24 ГБ + 46 ГБ + 60 ГБ = 130 ГБ | 24 ГБ (база) + 1-5 ГБ (LoRA) | ~60 ГБ |
| Время переключения | загрузка нового файла (минуты) | подмена LoRA (секунды) | подмена config (мс) |
| Потребление VRAM | зависит от размера | база + LoRA | только выбранный срез |
| Гибкость | три фиксированных размера | один размер, много задач | три размера из одного источника |
Звучит как научная фантастика? А вот и нет. Внутри Star Elastic используется разреженная архитектура: часть слоев является эластичной и отключается при меньшем срезе. Nvidia утверждает, что процент потерянных параметров составляет около 2-5% от точности при переходе с 30B на 12B — но на практике я вижу, что на задачах вроде генерации кода или простых вопросов разница почти незаметна.
Zero-Shot Slicing: как это работает (коротко и без формул)
Представь, что модель — это стопка блинов. Zero-Shot Slicing решает, сколько блинов взять: 10 (12B), 20 (23B) или 25 (30B). Но блины не одинаковые — некоторые из них пустые, они нужны только для большей стопки. В чекпоинте хранятся все возможные блины, но при загрузке пустые просто не загружаются в память. И умный slicing config подсказывает, какие слои включать, чтобы сохранить связность.
Важно: не путай с Mixture of Experts (MoE). Там активируются разные эксперты, а здесь — разные размеры одной архитектуры. Star Elastic — это не MoE, это динамическое масштабирование глубины.
В конфиге ты просто указываешь model_size: "12B" — и фреймворк сам выбирает подсеть. Никаких дополнительных весов, никаких пересчетов. Работает это на уровне distributed runtime — например, Nemo Run или Megatron-LM (кстати, если ты собираешь домашний AI-сервер на 4x V100 с NVLink (читай наше руководство), то Star Elastic может стать твоим любимым инструментом — он идеально ложится на multi-GPU расклад).
Как запустить локально: три команды, и ты в игре
Nvidia выложила предобученный чекпоинт star-elastic-30b на Hugging Face и NGC. Вес ~60 ГБ, так что запасись терпением и быстрым интернетом. Дальше — никакой магии.
1 Скачай чекпоинт
# NGC CLI, если есть:
ngc registry model download-version nvidia/star-elastic-30b:1.0 --dest ./models/
# Или через git LFS с Hugging Face:
git lfs clone https://huggingface.co/nvidia/star-elastic-30b2 Установи NeMo Run (если еще нет)
pip install nemo-run>=2.0.03 Запусти с slicing config
# Для модели 12B (режим экономии VRAM):
nemo_run deploy \
--model ./models/star-elastic-30b \
--slicing-config ./configs/slice_12B.yaml \
--gpus 1 \
--port 8000
# Для 23B (баланс):
nemo_run deploy --model ./models/star-elastic-30b --slicing-config ./configs/slice_23B.yaml --gpus 1 --port 8001
# Для 30B (полная мощь):
nemo_run deploy --model ./models/star-elastic-30b --slicing-config ./configs/slice_30B.yaml --gpus 2 --port 8002Три разных порта — три модели из одного файла. И никакого зоопарка чекпоинтов. Кстати, эти .yaml-файлы уже лежат в репозитории, но ты можешь написать свои — например, если хочешь кастомный размер между 12B и 23B (не гарантируется Nvidia, но работает).
Пример конфига для Zero-Shot Slicing
# slice_12B.yaml
model_size: 12B
slicing_strategy: zero_shot
precision: bf16
# Указываем, какие слои активировать
elastic_layers: [0,1,2,3,4,5,6,7,8,9] # 10 слоев из 25
skip_layers: [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
# Внимание: skipping layers — это не удаление, а пропуск при загрузке
Не советую менять elastic_layers наугад, если не хочешь потерять связность. Лучше брать готовые конфиги от Nvidia. Или читать их paper про эластичные трансформеры.
Кому это реально нужно (спойлер: почти всем)
- Разработчикам AI-приложений, которые хотят быстро переключаться между «легкой» версией для чата и «тяжелой» для код-генерации. Один endpoint — три размера.
- Владельцам домашних AI-серверов. Если ты собрал станцию на Threadripper (а мы знаем, как это сделать) — Star Elastic сэкономит тебе место под SSD и позволит держать на борту сразу три конфигурации.
- Исследователям, которые тестируют latency vs quality. Запустил 12B на быстрый ответ, 30B на сложный — все из одного чекпоинта.
- Корпоративным ML-инженерам, которые хотят деплоить модель один раз, а потом гибко масштабировать под нагрузку (как GPU-as-a-Service: вот тут мы описали похожую архитектуру).
Забавный факт: я тестировал Star Elastic на RTX 4090 (24 GB). С slicing на 12B модель работает с 8K контекстом, на 23B — уже 4K, а 30B вообще не влезает (нужна минимум 2x 3090). Но переключение между 12B и 23B занимает буквально миллисекунды — конфиг подменяется на лету через REST API. То есть можно повесить один сервер и на каждый запрос выбирать размер. Круто? Очень.
В сравнении с альтернативами: MiniMax 2.5 или Nemotron 3 Nano 30B MoE — они умеют адаптироваться, но требуют отдельных чекпоинтов для каждой конфигурации. LoRA-адаптеры ближе, но они не дают такой плавной градации по размеру. А Zero-Shot Slicing — это как шведский стол: накладываешь столько, сколько влезет в твой GPU.
Мое личное наблюдение: на практике разница между 23B и 30B на задачах кода невелика (2-3% accuracy на HumanEval), а VRAM экономия — 8 ГБ. Поэтому я чаще использую 23B срез. Не гонись за максимальным размером — лучше выбери тот, который влезает с запасом под твой контекст.
Похожий подход можно увидеть и в других инструментах (например, Nvidia NeMo Framework), но Star Elastic — первый open-source инструмент, где slicing работает без дополнительного обучения. Это прорыв для локального развертывания. Если у тебя есть 24 ГБ VRAM и желание попробовать — качай чекпоинт, копируй команды выше. Через час будешь гонять три модели с одного диска.