bitnet.cpp — официальная платформа вывода для 1-битных LLM (например, BitNet b1.58). Он предлагает набор оптимизированных ядер, которые поддерживают быстрый и без потерь вывод 1,58-битных моделей на ЦП (следующей станет поддержка NPU и GPU).
Первый выпуск bitnet.cpp предназначен для поддержки вывода на процессорах. bitnet.cpp обеспечивает ускорение от 1,37x до 5,07x на процессорах ARM, при этом более крупные модели демонстрируют больший прирост производительности. Кроме того, это снижает потребление энергии на 55,4–70,0 % , что еще больше повышает общую эффективность. На процессорах x86 ускорение варьируется от 2,37x до 6,17x , а снижение энергопотребления составляет от 71,9% до 82,2% . Кроме того, bitnet.cpp может запускать модель BitNet b1.58 объемом 100 байт на одном процессоре, достигая скорости, сравнимой с человеческим чтением (5–7 токенов в секунду), что значительно расширяет возможности запуска LLM на локальных устройствах. Более подробную информацию можно найти в техническом отчете.
Протестированные модели представляют собой фиктивные настройки, используемые в исследовательском контексте для демонстрации производительности вывода bitnet.cpp.
Демо-версия bitnet.cpp с моделью BitNet b1.58 3B на Apple M2:
21.10.2024 1-bit AI Infra: Часть 1.1, Fast and Lossless BitNet b1.58 Вывод на процессорах
17.10.2024 выпущена версия bitnet.cpp 1.0.
21.03.2024 Эра 1-бита LLM__Training_Tips_Code_FAQ
27.02.2024 Эра 1-битных LLM: все модели больших языков выполнены в 1,58 битах
17.10.2023 BitNet: Масштабирование 1-битных преобразователей для больших языковых моделей
Этот проект основан на платформе llama.cpp. Мы хотели бы поблагодарить всех авторов за их вклад в сообщество открытого исходного кода. Кроме того, ядра bitnet.cpp построены на основе методологий таблиц поиска, впервые использованных в T-MAC. Для вывода общих низкобитовых LLM за пределами троичных моделей мы рекомендуем использовать T-MAC.
❗️ Мы используем существующие 1-битные LLM, доступные на Hugging Face, чтобы продемонстрировать возможности вывода bitnet.cpp. Эти модели не обучаются и не выпускаются Microsoft. Мы надеемся, что выпуск bitnet.cpp вдохновит на разработку 1-битных LLM в крупномасштабных условиях с точки зрения размера модели и обучающих токенов.
Модель | Параметры | Процессор | Ядро | ||
---|---|---|---|---|---|
I2_S | TL1 | ТУ2 | |||
bitnet_b1_58-большой | 0,7Б | х86 | ✔ | ✘ | ✔ |
РУКА | ✔ | ✔ | ✘ | ||
bitnet_b1_58-3B | 3.3Б | х86 | ✘ | ✘ | ✔ |
РУКА | ✘ | ✔ | ✘ | ||
Лама3-8B-1,58-100B-токенов | 8.0Б | х86 | ✔ | ✘ | ✔ |
РУКА | ✔ | ✔ | ✘ |
питон>=3.9
cmake>=3.22
лязг>=18
Desktop-разработка на C++
Инструменты C++-CMake для Windows
Git для Windows
Компилятор C++-Clang для Windows
Поддержка MS-Build для набора инструментов LLVM (clang)
Для пользователей Windows установите Visual Studio 2022. В программе установки включите как минимум следующие параметры (это также автоматически установит необходимые дополнительные инструменты, такие как CMake):
Для пользователей Debian/Ubuntu вы можете загрузить скрипт автоматической установки.
bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
Конда (очень рекомендую)
Важный
Если вы используете Windows, не забывайте всегда использовать командную строку разработчика/PowerShell для VS2022 для следующих команд.
Клонировать репозиторий
git clone --recursive https://github.com/microsoft/BitNet.gitcd BitNet
Установите зависимости
# (рекомендуется) Создайте новую среду condaconda create -n bitnet-cpp python=3.9 Конда активирует битнет-cpp pip install -r требования.txt
Создать проект
# Загрузите модель из Hugging Face, преобразуйте ее в квантованный формат gguf и создайте проект. Python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s# Или вы можете вручную загрузить модель и запустить с локальным pathhuggingface-cli скачать HF1BitLLM/Llama3-8B-1.58-100B-токены --local-dir модели/Llama3-8B-1.58-100B-токены python setup_env.py -md модели/Llama3-8B-1.58-100B-токены -q i2_s
использование: setup_env.py [-h] [--hf-repo {1bitLLM/bitnet_b1_58-large,1bitLLM/bitnet_b1_58-3B,HF1BitLLM/Llama3-8B-1.58-100B-токены}] [--model-dir MODEL_DIR] [ --log-dir LOG_DIR] [--quant-type {i2_s,tl1}] [--quant-embd] [--use-pretuned] Настройте среду для выполнения вывода необязательные аргументы: -h, --help показать это справочное сообщение и выйти --hf-repo {1bitLLM/bitnet_b1_58-large,1bitLLM/bitnet_b1_58-3B,HF1BitLLM/Llama3-8B-1.58-100B-токенов}, -hr {1bitLLM/bitnet_b1_58-large,1bitLLM/bitnet_b1_58-3B,HF1BitLLM/Llama3- 8B-1,58-100B-токенов} Модель, используемая для вывода --model-dir МОДЕЛЬ_КАТАЛ, -md МОДЕЛЬ_КАТАЛ Каталог для сохранения/загрузки модели --log-dir LOG_DIR, -ld LOG_DIR Каталог для сохранения информации журнала --quant-type {i2_s,tl1}, -q {i2_s,tl1} Тип квантования --quant-embd Квантовать вложения до f16 --use-pretuned, -p Использовать предварительно настроенные параметры ядра
# Выполните вывод с помощью квантованного modelpython run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Дэниел вернулся в сад. Мэри отправилась на кухню. Сандра отправилась на кухню. Сандра пошла в коридор. Джон пошел в спальню. Мэри вернулась в сад. Где Мэри? nОтвет:" -n 6 -temp 0# Выход:# Дэниел вернулся в сад. Мэри отправилась на кухню. Сандра отправилась на кухню. Сандра вышла в коридор. Джон пошел в спальню. Мэри вернулась в сад. Где Мэри?# Ответ: Мэри в саду.
использование: run_inference.py [-h] [-m МОДЕЛЬ] [-n N_PREDICT] -p PROMPT [-t THREADS] [-c CTX_SIZE] [-temp ТЕМПЕРАТУРА] Выполнить вывод необязательные аргументы: -h, --help показать это справочное сообщение и выйти -m МОДЕЛЬ, --model МОДЕЛЬ Путь к файлу модели -n N_PREDICT, --n-предсказать N_PREDICT Количество токенов, которые нужно предсказать при генерации текста -p ПОДСКАЗКА, --prompt ПОДСКАЗКА Подскажите сгенерировать текст из -t ПОТОКИ, --threads ПОТОКИ Количество потоков для использования -c CTX_SIZE, --ctx-size CTX_SIZE Размер контекста подсказки -temp ТЕМПЕРАТУРА, --temperature ТЕМПЕРАТУРА Температура — гиперпараметр, который контролирует случайность генерируемого текста.
Мы предоставляем сценарии для запуска эталонного теста, предоставляющего модель.
usage: e2e_benchmark.py -m MODEL [-n N_TOKEN] [-p N_PROMPT] [-t THREADS] Setup the environment for running the inference required arguments: -m MODEL, --model MODEL Path to the model file. optional arguments: -h, --help Show this help message and exit. -n N_TOKEN, --n-token N_TOKEN Number of generated tokens. -p N_PROMPT, --n-prompt N_PROMPT Prompt to generate text from. -t THREADS, --threads THREADS Number of threads to use.
Вот краткое объяснение каждого аргумента:
-m
, --model
: путь к файлу модели. Это обязательный аргумент, который необходимо указать при запуске сценария.
-n
, --n-token
: количество токенов, которые будут сгенерированы во время вывода. Это необязательный аргумент со значением по умолчанию 128.
-p
, --n-prompt
: количество токенов подсказки, которые будут использоваться для генерации текста. Это необязательный аргумент со значением по умолчанию 512.
-t
, --threads
: количество потоков, используемых для выполнения вывода. Это необязательный аргумент со значением по умолчанию 2.
-h
, --help
: показать справочное сообщение и выйти. Используйте этот аргумент для отображения информации об использовании.
Например:
python utils/e2e_benchmark.py -m /путь/к/модели -n 200 -p 256 -t 4
Эта команда запустит тест вывода, используя модель, расположенную в /path/to/model
, генерируя 200 токенов из приглашения на 256 токенов, используя 4 потока.
Для макета модели, который не поддерживается ни одной общедоступной моделью, мы предоставляем сценарии для создания фиктивной модели с заданным макетом модели и запускаем тест на вашем компьютере:
python utils/generate-dummy-bitnet-model.py models/bitnet_b1_58-large --outfile models/dummy-bitnet-125m.tl1.gguf --outtype tl1 --model-size 125M# Запустите тест с сгенерированной моделью, используйте -m, чтобы указать путь к модели, -p, чтобы указать обрабатываемое приглашение, -n, чтобы указать количество генерируемых токенов.