Забудьте про квадратичную сложность. Tencent выкатила на Hugging Face модель с новой архитектурой внимания — HiLS-Attention. Разреженная, чанковая, без потери контекста. Разбираемся, почему это может стать стандартом для локальных LLM.
Квадратичный ад — и как из него выбраться
Каждый, кто запускал LLM локально, знает эту боль. Модель в 7B параметров, токенов 2048 — ещё терпимо. Пытаешься впихнуть 32K контекста — и память улетает в космос, а время генерации превращается в ожидание автобуса на окраине города. Всё из-за того, что стандартный механизм внимания растёт как O(n²) с длиной последовательности.
Tencent решили эту проблему не традиционным путём (слайдинг-окно, как в Mistral), а через разреженное внимание с умной стратификацией. Их решение называется HiLS-Attention — Hierarchical Layer-wise Sparse Attention (ну или просто «Хайлс», если не хотите ломать язык).
Суть: модель разбивает входной текст на чанки (chunks), внутри каждого считает полное внимание, а между чанками — разреженное по специально выбранным ключевым токенам. Звучит сложно, но на практике даёт до 4x ускорения при сохранении качества на длинных контекстах.
Как устроен HiLS-Attention? Заглядываем под капот
Вместо того чтобы считать attention-карту для всех пар токенов, HiLS делает четыре простых (на бумаге) шага:
- Чанкование — последовательность режется на фиксированные блоки (скажем, по 512 токенов).
- Внутричановое внимание — внутри каждого блока полный softmax, никаких компромиссов.
- Межчановое разрежение — из каждого блока выбираются K «голосующих» токенов (по важности score). Только они участвуют в перекрёстном внимании между блоками.
- Агрегация — результаты смешиваются через лёгкую сеть, чтобы не потерять связанные идеи.
Результат — сложность O(n * chunk_size + n * K), где K можно выставить хоть 16. Это почти линейно, ребята. Причём Tencent утверждают, что K=32 хватает, чтобы не уронить качество даже на задачах retrieval.
Сравнение с альтернативами: HiLS против Sliding Window, FlashAttention и других
На рынке уже есть способы бороться с квадратичным вниманием. Давайте приложим HiLS к линейке:
| Метод | Сложность | Качество на длинных контекстах | Простота интеграции |
|---|---|---|---|
| HiLS-Attention | ~O(n) при K=32 | Отличное (почти полное) | Средняя (нужна доработка архитектуры) |
| Sliding Window (Mistral) | O(n*window) | Плохое для связи удалённых токенов | Лёгкая |
| FlashAttention (распространённая оптимизация) | O(n²) с I/O оптимизацией | Оригинальное (не снижает) | Средняя (patch для CUDA) |
| Sparse-фиксация (BigBird) | O(n*log n) / O(n√n) | Хорошее, но может терять детали | Сложная (ручной выбор паттернов) |
| WeDLM (диффузия) | O(n) на шаг, но много шагов | Среднее (чуть уступает авторегрессии) | Средняя (специфичный тренинг) |
HiLS здесь — компромисс, который во многих сценариях выигрывает. Он не требует кастомных CUDA-ядер (как FlashAttention), не режет окно (как Mistral) и не заставляет сеть учить фиксированные паттерны (как BigBird). Всё решается на уровне дизайна трансформера.
Пример: как запустить модель HiLS-7B локально
Tencent выложила на Hugging Face 7B модель, обученную с HiLS-Attention. Пока она в виде исследовательского релиза, но попробовать можно уже сейчас. Установка стандартная через Transformers:
pip install transformers accelerate torch
Загружаем модель и токенизатор:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "tencent/HiLS-7B" # примерное имя
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="auto",
torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "Напиши короткое эссе о влиянии разреженного внимания на скорость LLM."
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
# Генерация с контекстом до 8192 токенов (тут HiLS раскрывается)
outputs = model.generate(**inputs, max_new_tokens=512, do_sample=True)
print(tokenizer.decode(outputs[0]))
Важный момент: модель использует кастомную конфигурацию attention. В Transformers нужно передать attn_implementation="eager" или дождаться интеграции HiLS в библиотеку. Tencent обещают PR в ближайшие недели. Пока можно форкнуть их репозиторий на Hugging Face.
Кому это реально нужно? (Спойлер: не только дата-сайентистам)
- Локальщикам: если у вас видеокарта с 8-12 ГБ VRAM, вы сможете обрабатывать контексты в 16K+ токенов без out-of-memory. Раньше это было возможно только через квантизацию и чанкинг с потерей связности.
- Разработчикам edge-устройств: HiLS требует меньше операций — меньше энергии. Отлично для нейроморфных чипов (кстати, конвертация в SNN тоже может выиграть от разреженности).
- Исследователям: хотите понять, как работает разреженное внимание без тонны математики? Модель с открытым кодом — идеальный подопытный кролик.
- Продакшн-инженерам: если вам нужно держать высокий throughput на CPU или слабых GPU, HiLS — кандидат на замену стандартного attention. А ещё Tentec уже показали Penguin-VL, так что видно вектор компании на эффективные модели.
Кому НЕ подойдёт: если вам нужно абсолютное качество на задачах, где каждый токен в истории важен (например, обработка научных статей с перекрёстными ссылками) — HiLS может чуть регрессировать из-за разрежения. Но для 99% чатов, суммаризаций и кода разница незаметна.
Прогноз: HiLS станет стандартом для локальных LLM?
У Tencent получилось то, что не удавалось многим: сделать разреженное внимание простым в реализации и одновременно достаточно качественным. Мы уже видели, как архитектуры LLM весны 2026 уходят от чистого dense внимания. Mistral со Sliding Window, Microsoft с LongRoPE, а теперь Tencent с HiLS. Если модель покажет себя надёжно на бенчмарках (Tencent обещает результаты на MMLU и LongBench), то я ставлю на то, что через год HiLS-подобные механизмы будут в каждом мало-мальски уважающем себя 7B релизе. Tencent уже показали, что умеют ускорять генерацию в 6 раз на математике — с HiLS это может стать нормой.
А что делать, если модель не выложена или нужно дообучить свою? Tencent планируют открыть код тренировочного фреймворка. Пока можно использовать OpenLumara как легковесного агента для работы с такими моделями — он умеет динамически переключать длину контекста в зависимости от задачи.