Суть проблемы: квантизация и стоимость памяти
Запуск локальных LLM требует огромных объемов ОЗУ. Стандартный путь — квантизация моделей, обученных в FP32, до INT4. Однако полный переход на низкую разрядность (например, INT4) на этапе обучения приводит к нестабильности градиентов и застреванию в локальных минимумах. Поэтому чувствительные параметры (градиенты, состояния оптимизатора Adam) часто оставляют в FP32/BF16, что нивелирует экономию.
Альтернатива — обучение моделей с изначально низкой точностью. Автор статьи исследует переход к тернарной логике (тритам), где веса принимают значения -1, 0, +1, что теоретически снижает требования к памяти и вычислительным ресурсам.
Фундамент: бит, трит и интерпретация данных
Статья подчеркивает, что аппаратно поддерживаются лишь бинарные операции. Все сложные форматы (FP32, INT8) — это надстройки над битами. Информационная емкость измеряется в битах, но количество состояний может быть другим. Например, трит имеет 3 состояния, что соответствует 1.585 бита информации на символ (log₂3).
Важно различать INT2 (интерпретация 2 бит как целого числа) и квадрит (информационная единица с 4 состояниями). Квадрит не привязан к бинарной системе и может представлять любые 4 значения, тогда как INT2 жестко фиксирован (например, -2, -1, 0, 1 в дополнительном коде).
Сравнение форматов данных
Ниже приведена сводная таблица форматов, упомянутых в обзоре, с акцентом на емкость и диапазон значений:
| Формат / Система | Емкость (бит) | Кол-во состояний | Примерный диапазон |
|---|---|---|---|
| Binary (Бит) | 1 | 2 | 0, 1 |
| Ternary (Трит) | 1.585 | 3 | −1, 0, +1 |
| Quaternary (Квадрит) | 2 | 4 | −2, −1, +1, +2 (условно) |
| INT2 | 2 | 4 | −2 … +1 (доп. код) |
| INT4 | 4 | 16 | −8 … +7 |
| FP8 E4M3 | 8 | 256 | ≈ −448 … +448 |
| BF16 | 16 | 65 536 | ≈ ±3.39×10³⁸ |
| FP32 | 32 | 4.29×10⁹ | ≈ ±3.403×10³⁸ |
Почему это важно для C# и локального AI
Реализация тернарной нейросети на C# демонстрирует, что можно создавать эффективные инференс-движки, работающие с нестандартными форматами. Использование тритов (B1.58) позволяет сократить объем весов модели по сравнению с INT4, сохраняя при этом бинарную природу вычислений на уровне битовых операций. Это открывает путь к запуску более сложных моделей на слабом железе без использования тяжелых библиотек квантизации.
Вывод
Переход от FP32 к тернарным весам — это не просто сжатие, а изменение архитектуры обучения. Хотя полная замена FP32 на INT4/INT4 нестабильна, гибридные подходы и использование тритов предлагают новый баланс между размером модели и качеством инференса, что особенно актуально для разработчиков на C#, стремящихся оптимизировать локальный AI.
Источник: Habr ↗
