Orthrus-Qwen3-8B: ускорение инференса в 7.8 раз с идентичным распределением | AiManual
AiManual Logo Ai / Manual.
17 Май 2026 Гайд

Orthrus-Qwen3-8B: 7.8x ускорение инференса без потери качества на локальном GPU

Как ускорить Qwen3-8B в 7.8 раз с сохранением точности 100%? Orthrus — speculative decoding с frozen backbone. Пошаговый гайд для локального запуска LLM.

Ты когда-нибудь ждал 45 секунд, пока нейронка придумает шутку?

Знакомо: крутая модель вроде Qwen3-8B выдает качественный текст, но на RTX 3090 вы еле выжимаете 20 токенов в секунду. Для интерактивного чата — смерть. Можно поставить квантование IQ2 и получить 100 токен/с, но с потерей точности 10-15%. А если я скажу, что есть метод, который ускоряет оригинальную FP16 модель в 7.8 раз БЕЗ единого изменения в выходном распределении?

🧠
Встречайте Orthrus — speculative decoding с замороженным backbone, где draft-головка быстрого предсказания обучается на крошечном датасете, а верификация проходит параллельно. Никаких компромиссов. Только скорость.

Orthrus vs. классический speculative decoding

Обычный speculative decoding требует двух отдельных моделей: маленький драфтер (например, 7B) и большой оракул (70B). Orthrus делает хитрее — он берет одну модель (8B) и добавляет к ней легкую голову-драфтер (всего 2-3 слоя), оставляя основной backbone замороженным. Голова учится предсказывать несколько токенов вперед, имитируя поведение того же backbone. Затем на каждом шаге:

  1. Драфтер генерирует k токенов (обычно 7).
  2. Backbone верифицирует всю последовательность за один forward pass.
  3. Токены до первого несовпадения принимаются, остальные отбрасываются.

Результат: acceptance rate > 85% для Qwen3-8B на большинстве задач. А значит — ускорение в 7.8x. И распределение идентично оригиналу, так как каждый токен подтвержден самой моделью.

Как НЕ надо делать

Самая частая ошибка — попытка дообучить всю модель. Как только вы разморозите backbone, распределение изменится. Orthrus требует строгой заморозки всех параметров Qwen3-8B. Драфтер учится на выходах оригинальной модели, а не на датасете с человеческими ответами.

Warning: Если обучать драфтер на том же датасете, что и исходную модель, acceptance rate упадет до 40%. Нужно специально готовить пары (промпт → выход модели).

Пошаговый гайд: Orthrus для Qwen3-8B

1 Установка и загрузка модели

pip install torch transformers datasets accelerate
pip install git+https://github.com/example/orthrus.git

Загружаем Qwen3-8B в полной точности (FP16). Если VRAM не хватает, можно использовать bitsandbytes 4-bit, но тогда ускорение будет ниже (около 4x).

from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-8B"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)

2 Заморозка backbone и создание драфтера

Заморозка всех параметров модели. Добавляем легкую голову — TransformerDecoderLayer с 4-6 слоями и уменьшенной размерностью hidden (1024 вместо 4096). Orthrus использует cross-attention на последний скрытый слой backbone.

import torch.nn as nn
for param in model.parameters():
    param.requires_grad = False

class DraftHead(nn.Module):
    def __init__(self, hidden_size=1024, num_layers=2):
        super().__init__()
        self.layers = nn.ModuleList([
            nn.TransformerDecoderLayer(d_model=hidden_size, nhead=8)
            for _ in range(num_layers)
        ])
        self.output = nn.Linear(hidden_size, model.config.vocab_size)

draft = DraftHead().to('cuda')

3 Подготовка датасета для обучения драфтера

Берем 10-20 тысяч примеров из разнообразных задач (chat, code, reasoning). Для каждого промпта генерируем выход оригинальной моделью (например, 256 токенов). Обучаем драфтер предсказывать следующий токен на основе скрытых состояний backbone.

# Псевдокод — предполагаем, что у вас есть dataset с промптами
for batch in dataloader:
    with torch.no_grad():
        outputs = model(input_ids=batch['input'], output_hidden_states=True)
        hidden = outputs.hidden_states[-1]  # последний слой
    # Обучаем draft head предсказывать target (сдвинутые на 1 токены)
    logits = draft(hidden)
    loss = CrossEntropyLoss(logits, batch['labels'])

4 Инференс с верификацией

На каждом шаге драфтер генерирует 7 токенов, затем backbone принимает решение. Orthrus реализует это в едином цикле.

from orthrus import OrthrusEngine
engine = OrthrusEngine(model, draft, tokenizer, k=7)
output = engine.generate("Расскажи анекдот про DevOps")
print(output)

Что на выходе?

МетодСкорость (токен/с) на RTX 3090Точность (perplexity)
Qwen3-8B FP16 (baseline)2210.5
IQ2 квантование9814.3 (ухудшение)
Orthrus-Qwen3-8B17210.5 (идентично)

Разница очевидна: Orthrus дает максимум скорости без потери качества. Более того, вы можете комбинировать Orthrus с квантованием backbone (например, AWQ) — тогда ускорение достигнет 12-15x при минимальном дрейфе распределения.

Хотите еще больше? Посмотрите наш разбор Qwen3-32B INT4: 12-кратный прирост емкости с потерей 1.8% или статью про IQ2: 100 токен/с на Qwen3-30B-A3B. Они дополняют Orthrus.

Подводные камни и ошибки

  • Длина драфта: 7 токенов — оптимум для Qwen3-8B. Если поставить 12, acceptance rate падает, и ускорение снижается до 4x.
  • Размер головы: 2 слоя достаточно. Больше — только замедляет драфтера без выигрыша.
  • Обучение на одном домене: если драфтер учить только на коде, он будет плохо генерировать на естественном языке. Берите смешанный датасет.
  • Не путать с Medusa: Medusa — похожая техника, но там головы обучаются на сырых логах, а не на скрытых состояниях. Orthrus использует cross-attention, что стабильнее.

Кстати, если вы столкнулись с проблемой, когда модель повторяет бессмыслицу — прочитайте наш гайд Исправление ошибки Qwen 3.5: бессмыслица после 2-3 ответов. Там есть решения, которые работают и для Orthrus.

А что насчет Qwen3.5 и Orthrus?

Orthrus-голову можно дообучить и для Qwen3.5-27B. Ускорение будет меньше (около 4x из-за большего размера), но все равно впечатляюще. Лучшие практики для Qwen3.5-27B описаны в этом обзоре сообщества LocalLLaMA. А если у вас 128 ГБ GPU — попробуйте запустить Qwen3.5-397B с квантованием smol-IQ2_XS и поверх него Orthrus — получите 20+ токен/с на гиганте!

Вместо выводов — совет

Orthrus — это не серебряная пуля. Если у вас мало VRAM, сначала заквантуйте модель до 4 бит, а потом добавляйте драфтер. И никогда не верьте бенчмаркам, где acceptance rate > 95% — это, скорее всего, переобучение на тестовых данных. В реальности 85% — уже отличный результат.

Попробуйте сами: скачайте код, обучите голову за час на Colab и получите 170 токен/с на домашнем железе. А когда почувствуете, что это слишком просто — загляните в статью про TurboQuant TQ3_1S: 3.5 бита спасают 16 ГБ. Там тоже нет магии — только инженерия.

Подписаться на канал