Корейский прорыв, который не помещается в память
Solar-Open-100B - это не просто очередная большая языковая модель. Это корейский вызов всему миру open-source AI. 102 миллиарда параметров, архитектура Mixture of Experts (MoE), обучение на 19.7 триллионах токенов. Звучит впечатляюще, пока не попробуешь запустить это на своем компьютере.
Проблема в том, что 100 миллиардов параметров - это примерно 200 ГБ памяти в формате FP16. Даже если у вас есть 4 видеокарты A100 по 80 ГБ каждая, это не гарантирует успеха. Но есть llama.cpp - наш спаситель, который умеет сжимать этих гигантов до разумных размеров.
Не путайте Solar-Open-100B с Solar-10.7B. Это разные модели. 100B - это MoE-архитектура, где активируются только 12B параметров за раз. Хитро, но не так просто, как кажется.
Что вам понадобится (спойлер: много)
Давайте сразу к делу. Если вы думаете, что запустите Solar-Open-100B на ноутбуке с 16 ГБ оперативки, забудьте. Вот реальные требования:
| Компонент | Минимум | Рекомендуется | Почему |
|---|---|---|---|
| GPU VRAM | 48 ГБ | 80+ ГБ | Даже с квантованием Q4_K_M нужно место для контекста |
| Системная RAM | 64 ГБ | 128+ ГБ | Для оффлоадинга слоев из VRAM |
| Диск | 100 ГБ | 200 ГБ | Модель + кэш + место для маневра |
| CPU | 8 ядер | 16+ ядер | Для эффективного оффлоадинга |
Если у вас нет такого железа, не расстраивайтесь. Есть варианты: арендовать облачные инстансы (дорого), использовать llama.cpp RPC-server для распределенных вычислений или собрать мощную станцию за $15 000.
Подготовка: собираем все, что нужно
Перед тем как что-то запускать, нужно подготовить поле боя. Вот что должно быть установлено:
1 Собираем llama.cpp с поддержкой CUDA
Без CUDA вы будете ждать ответа модели несколько часов. Не делайте так.
# Клонируем репозиторий
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# Собираем с поддержкой CUDA
make clean
make LLAMA_CUBLAS=1 -j$(nproc)
# Проверяем, что собралось
./main --help | grep cuda
Если в выводе видите флаги, связанные с CUDA - все хорошо. Если нет, проверьте, что у вас установлены CUDA Toolkit и cuBLAS. На сборке llama.cpp можно споткнуться, особенно на нестандартных системах.
2 Качаем и конвертируем модель
Тут начинается самое интересное. Официальная модель лежит на Hugging Face, но в формате, который llama.cpp не понимает. Нужно конвертировать в GGUF.
Внимание! Полная модель весит около 200 ГБ. Убедитесь, что у вас достаточно места на диске. И терпения - конвертация может занять несколько часов.
# Устанавливаем Python зависимости
pip install torch transformers accelerate
# Клонируем скрипт конвертации
cd llama.cpp
python convert_hf_to_gguf.py \
--model-name-upstage/SOLAR-10.7B-v1.0 \
--outfile solar-100b.q4_0.gguf \
--outtype q4_0
Параметр --outtype определяет уровень квантования. Варианты:
q4_0- самое сильное сжатие, качество страдаетq4_K_M- баланс между размером и качеством (рекомендую)q5_K_M- почти оригинальное качество, но большой размерq8_0- почти без потерь, но зачем тогда квантовать?
Для Solar-Open-100B я рекомендую начать с q4_K_M. Модель будет весить около 50 ГБ вместо 200, а качество останется приемлемым.
Запуск: момент истины
Модель сконвертирована, llama.cpp собран. Пора запускать. И вот тут многие совершают ошибку - пытаются засунуть всю модель в VRAM.
# КАК НЕ НАДО ДЕЛАТЬ
./main -m solar-100b.q4_K_M.gguf -p "Расскажи о квантовой физике" -n 256
Скорее всего, вы получите ошибку out of memory. Потому что даже квантованная модель не помещается в память одной видеокарты (если только у вас не H100 80GB).
Правильный подход - использовать оффлоадинг:
# Загружаем столько слоев в VRAM, сколько помещается
./main -m solar-100b.q4_K_M.gguf \
-p "Объясни MoE-архитектуру простыми словами" \
-n 512 \
-c 2048 \
-ngl 40 \
--temp 0.7 \
--repeat-penalty 1.1
Ключевой параметр здесь -ngl 40. Он говорит llama.cpp загрузить 40 слоев в VRAM. Остальные будут в оперативной памяти. Как определить это число? Методом проб и ошибок.
Оптимизация: заставляем летать
Даже с оффлоадингом Solar-Open-100B может работать медленно. Вот несколько трюков для ускорения:
Используем несколько GPU
Если у вас несколько видеокарт, распределите слои между ними:
./main -m solar-100b.q4_K_M.gguf \
-p "Напиши код на Python для парсинга HTML" \
-ngl 80 \
-sm "0,1" \
-ts 0.8,0.8
Параметр -sm "0,1" распределяет вычисления между GPU 0 и 1. -ts 0.8,0.8 резервирует по 80% памяти каждой карты.
Настраиваем размер контекста
Solar-Open-100B поддерживает контекст 4096 токенов. Но чем больше контекст, тем больше памяти нужно. Для большинства задач хватит 2048:
-c 2048 # Вместо 4096
Используем кэширование K/V
Для интерактивных сессий это обязательно:
--prompt-cache solar.cache \
--prompt-cache-all
Первый запрос будет медленным, но последующие - значительно быстрее.
С чем сравнить? Альтернативы Solar-Open-100B
Если Solar-Open-100B кажется слишком тяжелой, есть варианты:
| Модель | Размер | Плюсы | Минусы |
|---|---|---|---|
| Solar-10.7B | 10.7B | Запускается на 24 ГБ VRAM, отличное качество | Не MoE, меньше знаний |
| Llama 3.1 70B | 70B | Лучше оптимизирована для llama.cpp | Тоже требует много памяти |
| Mixtral 8x7B | 47B (MoE) | Проверенная MoE-архитектура | Меньше параметров, чем у Solar |
Если нужна простая инструкция по загрузке моделей, посмотрите как скачать Llama 3.3 8B в GGUF - принцип тот же.
Кому это вообще нужно?
Запускать Solar-Open-100B на своем железе - это как держать тигра в квартире. Интересно, но непрактично. Вот кому это может быть полезно:
- Исследователи, которые хотят экспериментировать с MoE-архитектурами локально
- Компании с серьезными вычислительными ресурсами, которым нужна приватность
- Энтузиасты, у которых есть домашняя LLM-инфраструктура на 192 ГБ RAM
- Разработчики, создающие специализированные решения на основе больших моделей
Если вы из тех, кто любит запускать все локально, возможно, вам пригодится One-Click установщик для локальных LLM.
Правда в том, что 99% пользователей не нуждаются в Solar-Open-100B. Solar-10.7B справится с большинством задач и потребует в 10 раз меньше ресурсов. Но если хочется потестить корейский прорыв - почему нет?
Что делать, если ничего не работает
Такое бывает. Особенно с такими большими моделями. Вот checklist:
- Проверьте, что llama.cpp собран с
LLAMA_CUBLAS=1 - Убедитесь, что CUDA драйверы обновлены
- Попробуйте уменьшить
-ngl(возможно, вы переоценили объем свободной VRAM) - Проверьте, что модель действительно сконвертирована в GGUF (не в оригинальном формате)
- Попробуйте более агрессивное квантование (q4_0 вместо q4_K_M)
- Если все еще не работает - спросите в Issues llama.cpp на GitHub. Вы не первый.
И последнее: не ожидайте чудес скорости. Даже на 4x A100 80GB Solar-Open-100B будет генерировать текст со скоростью 2-5 токенов в секунду. Это нормально для модели такого размера.
Корейцы сделали интересную модель. Но запускать ее локально - это спорт для подготовленных. Если у вас нет подходящего железа, может, лучше начать с чего-то попроще? Или подождать, пока оптимизации в llama.cpp станут лучше. Или пока кто-то не сделает облачный API с нормальными тарифами.
А пока - удачи с вашим 100-миллиардным корейским другом. Он того стоит. Наверное.