Transformers documentation
BitNet
BitNet
BitNet заменяет традиционные линейные слои в Multi-Head Attention и полносвязных сетях на специализированные слои BitLinear. Слои BitLinear квантуют веса с использованием тернарной точности (со значениями -1, 0 и 1) и квантуют активации до 8-битной точности.
Модели BitNet нельзя квантовать «на лету». Их необходимо квантовать в ходе предобучения или дообучения, поскольку это метод обучения с учётом квантования (QAT). Во время обучения веса квантуются до тернарных значений с использованием симметричного квантования на уровне тензора.
- Вычислите среднее значение абсолютных величин весовой матрицы и используйте его в качестве масштаба.
- Разделите веса на масштаб, округлите значения, ограничьте их диапазоном от -1 до 1 и масштабируйте обратно, чтобы продолжить работу в полной точности.
- Активации квантуются до заданной разрядности (8 бит) с помощью квантования absmax (симметричное квантование по каналам). Это предполагает масштабирование активаций в диапазон [−128,127].
См. этот PR, чтобы выполнить предобучение или дообучение модели с точностью 1,58 бита с помощью Nanotron. Для дообучения конвертируйте модель из формата Hugging Face в формат Nanotron. Шаги конвертации описаны в этом PR.
Загрузите квантованную модель BitNet с помощью from_pretrained().
from transformers import AutoModelForCausalLM
path = "/path/to/model"
model = AutoModelForCausalLM.from_pretrained(path, device_map="auto")Ядра
@torch.compile используется для распаковки весов и выполнения прямого прохода. Его реализация очень проста, а он обеспечивает значительное ускорение. В будущих версиях будут интегрированы дополнительные оптимизированные ядра.
Ресурсы
Ознакомьтесь со статьёй Fine-tuning LLMs to 1.58bit: extreme quantization made easy, чтобы узнать больше о том, как модели BitNet обучаются и дообучаются.
Update on GitHub