Компіляція моделі.
Огляд
Model Compiler надає інструмент командного рядка LLiMa під назвою llima-compile, який використовується для
компіляції моделей із файлів Hugging Face safetensors, GGUF, або попередньо квантованих
моделей compressed-tensors (GPTQ/AutoRound):
llima-compile [options] <model_path>
Формати вхідних даних для моделі.
LLiMa приймає три шляхи для введення даних у модель. Оберіть один із них, виходячи з наявності контрольних точок, вимог до точності та того, чи є модель LLM або VLM.
| Вхідні дані | Опис. | Коли використовувати. |
|---|---|---|
| Оригінал Hugging Face safetensors | Контрольна точка FP/BF16, яка LLiMa виконує квантування під час компіляції. | Немає точної попередньо квантованої відповідності, або потрібні оригінальні значення параметрів. |
| Попередньо квантовані Hugging Face safetensors (GPTQ/AutoRound) | Контрольна точка, квантовані ваги якої повторно використовуються LLiMa. | Рекомендується використовувати, коли колекція містить точну відповідність. |
| GGUF | Наявна квантована контрольна точка LLM. | Зручний варіант резервного копіювання LLM; не підтриму ється для VLM. |
Один лише формат вхідних даних не забезпечує сумісність. Архітектура моделі, її розмір, токенізатор і будь-які мультимодальні компоненти також повинні підтримуватися.
Почніть з SiMa.ai попередньо квантована модель
Перш ніж завантажувати оригінальні ваги Hugging Face або GGUF, перевірте колекцію попередньо квантованих моделей SiMa.ai . Використ овуйте точну відповідність для потрібної архітектури, розміру параметрів, варіанту та модальності, якщо така є.
Пункти збору даних залежать від конкретної моделі та попередньо налаштовані.LLiMa compressed-tensors
артефакти, які можна безпосередньо передавати до llima-compileВони дозволяють уникнути додаткового етапу компіляції, який передбачає перетворення чисел із рухомою комою на квантовані значення, і містять інформацію про походження квантування, необхідну для розуміння їхньої точності та структури. Вони є вхідними даними для компілятора, а не скомпільованим кодом. Modalix моделі.
Для індивідуального налаштування існуючої підтримуваної моделі відповідний репозиторій може містити специфічні для цієї моделі дані. quantize.py,
recipe.yamlі versions.txtПерегляньте інформаційну картку моделі для цього репозиторію та використовуйте
документований скрипт, що там наведено; не використовуйте повторно рецепт, який підходить лише для дещо схожої моделі.
hf download simaai/<model-repository> \
--revision <immutable-revision> \
--local-dir <prequantized-model-directory>
llima-compile <prequantized-model-directory> -o <output-directory>
Опишіть модель. Агент з LLiMa набір навичок, який це передбачає.
SiMa.ai LLiMa підтримує компіляцію моделі для агентів одразу після встановлення, за допомогою навичок, що входять до складу середовища розробки Neat (Neat SDK). Ці навички надають агентам, що виконують кодування, контекст для оцінки сумісності LLM та VLM, вибору точного попередньо квантованого вхідного значення, якщо воно доступне, використання встановленого CLI LLiMa та дотримання процесу розгортання та валідації Modalix.
Рекомендований процес для агентів може компілювати модель, розгортати її на доступному Modalix DevKit, перевіряти результати та діагностику, а також вдосконалювати компіляцію. Традиційна компіляція через CLI залишається паралельним шляхом для безпосереднього керування за допомогою тих самих інструментів. Обидва способи створюють стандартні, доступні для перевірки артефакти LLiMa, тому ви можете переглянути вибрану модель, команди, параметри та вихідні дані або переходити між двома процесами в міру зміни вимог. Див. Налаштування Neat SDK, щоб увімкнути компіляцію для агентів.
Запитайте повний процес природною мовою, наприклад:
Compile <model ID or local path> with LLiMa, deploy it to my Modalix at
<user@host>, and smoke-test it. Prefer an exact SiMa.ai pre-quantized
checkpoint when available.
Агент фіксує інформацію про модель і джерело рецепту, дотримується правил командного рядка (CLI) встановленої версії та повідомляє про будь-які непідтримувані межі моделі або недоступність апаратного забезпечення для перевірки, замість того щоб непомітно замінювати іншу модель або формат.
Результат компіляції.
За замовчуванням, повний процес обробки даних створює таку структуру каталогів:
output_directory/
└── sima_files/ # Compiled model files
├── devkit/ # Runtime configuration and model data
│ ├── tokenizer.json
│ ├── vlm_config.json
│ └── ...
├── mpk/ # MPK archives with compiled binaries
│ ├── layer_0.tar.gz
│ └── ...
├── npy_files/ # LoRA adapter weights (only when compiled with LoRA)
│ ├── <adapter_name>/
│ │ └── *.npy
│ └── ...
└── ...
Аргументи командного рядка
Інструмент llima-compile приймає різні аргументи для налаштування процесу компіляції. Наступні таблиці містять опис доступних параметрів:
| Аргумент | Опис. |
|---|---|
model_path | Шлях до вхідної моделі (каталог HuggingFace, файл GGUF або каталог із попередньо квантованими стиснутими тензорами). |
-o, --output | Директорія для збереження скомпільованих файлів. За замовчуванням використовується назва моделі. |
-c, --configuration_file | Скрипт Python, який використовується для налаштування точності для кожного шару (наприклад, для використання змішаної точності). |
--max_num_tokens | Максимальна довжина контексту. Має бути кратна 1024. Значення за замовчуванням: 4096. |
--resume | Продовжуйте перервані процеси збирання, пропускаючи наявні файли. |
-j, --jobs | Кількість паралельних процесів компіляції. За замовчуванням: кількість фізичних ядер процесора. |
--log_level | Рівень реєстрації (DEBUG, INFO, WARNING, ERROR). За замовчуванням: WARNING. |
--input_height | Висота вхідного зображення в пікселях. Має бути вказана разом із --input_width. Обов’язково для моделей Qwen 2 VL, Qwen 3 VL, Qwen3.5 та Gemma 4; необов’язково для зміни встановленого розміру моделі SigLIP2. |
--input_width | Ширина вхідного зображення в пікселях. Має бути вказана разом із --input_height. Обов’язково для моделей Qwen 2 VL, Qwen 3 VL, Qwen3.5 та Gemma 4; необов’язково для зміни встановленого розміру моделі SigLIP2. |
--system_prompt | Системне повідомлення, яке потрібно зберегти для використання в режимі командного рядка та для попереднього завантаження моделі. |
--system_prompt_file | Шлях до текстового файлу, що містить системне повідомлення. |
--chat_template | Рядок шаблону чату, який зберігатиметься в скомпільованій моделі. Не сумісний з --chat_template_file. |
--chat_template_file | Шлях до файлу, що містить шаблон чату. Не сумісний з --chat_template. |
Більшість моделей підтримують довжину контексту до 8192 токенів. Використовуйте --max_num_tokens 8192, щоб увімкнути контекст довжиною 8K.
| Розширений аргумент. | Опис. |
|---|---|
--language_group_size | Розмір пакета для паралельної обробки токенів під час попереднього заповнення. Більші значення (наприклад, 256) можуть покращити час до отримання першого токена (TTFT) для великих вхідних запитів, але можуть погіршити його для менших вхідних запитів. Значення за замовчуванням: 128. |
--future_token_mask_size | Розмір маски для повторного використання скомпільованих моделей для різних позицій токенів. Більші значення зменшують кількість скомпільованих бінарних файлів, але можуть зменшити кількість токенів за секунду (TPS). Значення за замовчуванням: 128. |
--no-quantize_embeddings | Вимкніть квантування таблиці вбудовувань, яке за замовчуванням увімкнено для підтримуваних LLM та VLM. |
--no-quantize_kv_cache | Вимкніть квантування кешу KV, яке за замовчуванням увім кнено. |
--return_logits | Повертайте значення логітів на виході останнього шару (необхідно для оцінювача моделі). |
--draft_model_path | Шлях до сумісної чернеткової моделі EAGLE3, Gemma4 MTP або DFlash. Метод визначається автоматично. |
--speculative_block_size | Ширина перевірки DFlash: 4, 8 або 16. За замовчуванням: 8. |
--lora_name | Назва для адаптера LoRA, який компілюється разом із базовою моделлю. |
--lora_path | Шлях до каталогу адаптера LoRA, який використовуватиметься для компіляції разом із базовою моделлю. |
--compile_lora, --no-compile_lora | Увімкніть або вимкніть компіляцію ваг адаптера, коли вказано шляхи до LoRA. За замовчуванням увімкнено. |
Для DFlash розмір групи попереднього заповнення має перевищувати розмір блока, а довжина контексту має бути кратною розміру групи:
llima-compile <target-model-path> --draft_model_path <dflash-draft-path> \
--speculative_block_size 16
Системні підказки.
Використовуйте --system_prompt або --system_prompt_file для збереження системного запиту в скомпільованій конфігурації моделі. Ці параметри є взаємовиключними.
sima-user@docker-image-id:/home/docker$ llima-compile Llama-3.2-3B-Instruct \
--system_prompt "You are a concise technical assistant." \
-o Llama-3.2-3B-Instruct_out
У режимі командного рядка (CLI) це стає стандартним системним запитом. Його можна замінити на set system <prompt> або видалити за допомогою clear system під час сеансу.
У веб-режимі/GenAIServer, збережений запит використовується під час підготовки моделі та може бути збережений у кеші для першого запиту. Він не додається автоматично до API-запитів. Клієнт повинен включити системний запит у масив messages першого запиту та кожного наступного запиту.
Файл конфігурації
Файл конфігурації дозволяє налаштувати процес компіляції для кожного модуля компілятора, забезпечуючи можливість використання змішаної точності та вибіркової компіляції.
LLM процес обчислень складається з двох окремих етапів, і компілятор генерує оптимізовані моделі для кожного з них:
- Попереднє заповнення (групові моделі): обробляє вхідний запит партіями, використовуючи
language_group_size(наприклад, 128 токенів за один раз). На цьому етапі визначається час отримання першого токена (TTFT), і він оптимізовано для забезпечення високої продуктивності. - Декодування (моделі, що працюють з окремими токенами): генерує токени вихідного тексту по черзі, використовуючи авторегресивний підхід. На цьому етапі визначається показник TPS (кількість токенів, що генеруються за секунду), і він оптимізовано для забезпечення мінімальної затримки під час генерації.
Оскільки ці фази мають різні характеристики продуктивності, ви можете застосувати різні стратегії квантування до кожної з них, використовуючи прапорець is_group у функції конфігурації.
Вхідні параметри
Функція get_layer_configuration викликається для кожного модуля компілятора та
отримує:
-
model_properties: словник із такими полями:"num_hidden_layers": кількість мовних шарів"is_draft_model":Trueпід час налаштування чернеткової моделі для спекулятивного декодування
-
layer: Словник, що містить:"part": Логічний компонент, наприклад,"PRE","CACHE","POST"."VISION","DRAFT_FC"або"PER_LAYER". Моделі Mixture-of-Experts додають"ROUTER","EXPERT"та"WEIGHTEDSUM"."is_group": значенняTrueвикористовується для варіанта, що містить кілька токенів/групу токенів, іFalseв інших випадках."index": Індекс даного модуля компілятора. Для"PRE"та"POST"це зазвичай відповідає шару трансформатора. Для"CACHE"він визначає кеш або варіант, що враховує позицію токена, а не шар трансформатора."expert_idx": індекс експерта в межах шару для записів"EXPERT". Для всіх інших частин, зокрема для всіх щільних моделей, значення становить-1.
Читайте потрібні значення за ключем. У майбутніх випусках можуть додаватися нові ключі, тому не розпаковуйте цей словник у фіксований список аргументів і не перевіряйте точну відповідність набору ключів.
Повернені значення
Функція повертає словник, що містить:
-
"precision": Рівень квантування (необов’язково, за замовчуванням:"BF16")."BF16": Максимальна точність – найкраща якість, найбільший розмір, найповільніша швидкість."A_BF16_W_INT8": Квантування середнього рівня – хороша якість, помірний розмір."A_BF16_W_INT4": Високе квантування – прийнятна якість, найменший розмір, найвища швидкість.
-
"compile": Встановіть значенняFalse, щоб пропустити компіляцію цього шару (необов’язково, за замовчуванням:True). -
"lora": режим LoRA для цього шару (необов’язково, за замовчуванням:"LORA_DISABLED")."LORA_DISABLED": Для цього шару не передбачено підтримки LoRA. Це значення за замовчуванням, яке використовується, коли не надано файл конфігурації, в результаті чого створюється стандартна модель без додаткових накладних витрат, пов’язаних з адаптером."LORA_BRANCH": Компілює паралельні гілки LoRA з нульовими вагами разом із базовою моделлю. Ваги адаптера завантажуються з файлів.npyпід час роботи, що дає змогу динамічно перемикатися між адаптерами без перезапуску моделі. Використовуйте цей режим, коли потрібно швидко змінювати адаптери."LORA_MERGED": Ваги LoRA об’єднуються з вагами базової моделі під час роботи. Адаптер стає постійно активним протягом сесії, і його неможливо вимкнути або видалити. Використовуйте цей режим, коли вам завжди потрібно, щоб адаптер був застосований, і вам не потрібне динамічне перемикання.
Рекомендована практика: використовуйте INT8 (A_BF16_W_INT8) для групових шарів, щоб підтримувати якість під час попереднього заповнення, INT4 (A_BF16_W_INT4) для шарів, що обробляють окремі токени, для швидкої генерації, і BF16 для візуальних кодувальників, щоб зберегти якість розпізнавання зображень. Для більшості моделей ця конфігурація забезпечує оптимальний баланс між точністю моделі, продуктивністю та використанням пам’яті.