Transformers documentation

BitNet

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

BitNet

BitNet заменяет традиционные линейные слои в Multi-Head Attention и полносвязных сетях на специализированные слои BitLinear. Слои BitLinear квантуют веса с использованием тернарной точности (со значениями -1, 0 и 1) и квантуют активации до 8-битной точности.

Alt Text
Архитектура BitNet с слоями BitLinear.

Модели BitNet нельзя квантовать «на лету». Их необходимо квантовать в ходе предобучения или дообучения, поскольку это метод обучения с учётом квантования (QAT). Во время обучения веса квантуются до тернарных значений с использованием симметричного квантования на уровне тензора.

  1. Вычислите среднее значение абсолютных величин весовой матрицы и используйте его в качестве масштаба.
  2. Разделите веса на масштаб, округлите значения, ограничьте их диапазоном от -1 до 1 и масштабируйте обратно, чтобы продолжить работу в полной точности.
  3. Активации квантуются до заданной разрядности (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