Праздник продолжается: LLM на FreeBSD. freebsd.. freebsd. llm.. freebsd. llm. python3.. freebsd. llm. python3. Машинное обучение.. freebsd. llm. python3. Машинное обучение. Ненормальное программирование.

Совсем недавно Microsoft выложила в публичный доступ очень интересный проект, позволяющий запускать большие языковые модели на одном только CPU, без использования GPU и CUDA.

Разумеется автор не смог пройти мимо такого шанса и запустил это на самом обычном ноутбуке с FreeBSD.

Тот редкий случай когда пришлось цензурировать даже технический текст, в конце статьи есть ссылка на оригинал.

Тот редкий случай когда пришлось цензурировать даже технический текст, в конце статьи есть ссылка на оригинал.

Концепт

В рамках статьи врядли получится раскрыть матчасть и тонкости реализации, поэтому вот тут находится одна из подробных статей по данному проекту:

Just yesterday, Microsoft launched Bitnet.cpp, an inference framework designed for 1-bit quantized Large Language Models (LLMs). This framework allows for efficient inference of LLMs directly on standard CPUs, without the need for expensive GPUs. This means you can now have a chatbot on your phone or computer without an internet connection.

Поскольку автор на самом деле запустил эту штуку и увидел в работе, стоит сразу «охладить пыл» и полет фантазии — возможности проекта несколько преувеличены и до локального запуска СhatGPT на вашем телефоне пока сильно далеко.

Сборка

Разумеется FreeBSD не поддерживается (а вы сомневались?), поэтому сборку придется патчить на ходу.

Автор использовал FreeBSD 14, сама сборка использует python, сmake и clang — все это должно быть заранее установлено.

Петон нужен третий и самой последней версии, поскольку в AI/ML и R&D плевать хотели не заморачиваются долгой поддержкой и совместимостью.

Забираем исходники:

git clone --recursive https://github.com/microsoft/BitNet.git

Обратите внимание на ключ –recursive, внутри ссылки на еще несколько репозиториев, все одни должны быть выгружены для сборки.

В оригинальной инструкции по сборке следующим шагом идет:

# (Recommended) Create a new conda environment
conda create -n bitnet-cpp python=3.9
conda activate bitnet-cpp

Что хорошо и разумно на поддерживаемых ОС, но стоит точно игнорировать на FreeBSD.

Дело в том что этот пакетный менеджер устанавливает еще и нативные библиотеки помимо обычных, заранее собранные под поддерживаемые ОС и окружения.

Поскольку FreeBSD официально не поддерживается нигде и никем — попытка использовать conda приведет лишь к очень интересному способу выстрелить себе в ноги:

Enable the Linux Compatibility Layer.
Mount at fstab the appropriate filesystems that Linux supports.
Go here and choose which version suits you best
(eg which Python version you want and the architecture of your machine) 
and download the .sh file that your browser will ask you based on your choice.

В теории может и заработать, но скорее всего получите полурабочую Linux-версию петона и всех нужных библиотек, радующую вас падениями в самых невероятных местах.

Чтобы дальше не углубляться в эту тему, просто замечу, что реальное использование Python на FreeBSD требует установки заранее портированных библиотек, с использованием пакетного менеджера FreeBSD:

Праздник продолжается: LLM на FreeBSD - 2

Также стоит знать, что системный pip в FreeBSD заранее настроен на установку пакетов в «userland», вместо системного /usr/local, так что типичного цирка с установкой пакетов из-под root тут делать не надо.

Следующим шагом ставим необходимые пакеты:

pip install -r requirements.txt

Достаточно быстро вылезет ошибка:

ERROR: Could not find a version that satisfies the requirement torch~=2.2.1 (from versions: none) 
ERROR: No matching distribution found for torch~=2.2.1

Да, это та самая проблема с нативными библиотеками и будет необходимо использовать системный PyTorch из пакетов FreeBSD:

Праздник продолжается: LLM на FreeBSD - 3

Но это еще не все.

Дело в том что у PyTorch есть проблемы с обратной совместимостью, поэтому в список зависимых библиотек забит PyTorch с указанием номера версии, без вариаций:

Праздник продолжается: LLM на FreeBSD - 4

Которая разумеется отличается от системной.

Чтобы не играть в угадайку каждый раз при обновлении системы, я поступил просто и цинично — убрал номера версии PyTorch вообще:

Праздник продолжается: LLM на FreeBSD - 5

Что обычно означает «с божьей помощью » и в более нормальных проектах так поступать не стоит.

Теперь запускаем сборку, но прежде необходимо добавить путь, по которому устанавливаются клиентские утилиты в переменную окружения:

setenv PATH ~/.local/bin:$PATH

Без этого шага не найдется huggingface-cli, с помощью которой скачиваются модели:

huggingface-cli download 1bitLLM/bitnet_b1_58-large --local-dir models/bitnet_b1_58-large

Автор использовал чуть другую модель, которая меньше по размеру, также разделил скачивание модели и сборку.

Если у вас хорошие скорости и нет проблем выкачивать без сбоев по 3-4Гб за раз, можете сразу делать в один шаг:

python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s

Для локальной и заранее скачанной модели, запуск выглядит следующим образом:

python setup_env.py -md models/bitnet_b1_58-large -q i2_s

Немедленно появится ошибка:

Праздник продолжается: LLM на FreeBSD - 6

Ошибка возникает из-за того что FreeBSD отдает название архитектуры в нижнем регистре, поэтому она не находится в списке поддерживаемых:

Праздник продолжается: LLM на FreeBSD - 7

Все что нужно для исправления ситуации — добавить запись в нижнем регистре "amd64": "x86_64":

ARCH_ALIAS = {
    "AMD64": "x86_64",
    "amd64": "x86_64",
    "x86": "x86_64",
    "x86_64": "x86_64",
    "aarch64": "arm64",
    "arm64": "arm64",
    "ARM64": "arm64",
}

Если все хорошо, следующим этапом запустится cmake и начнется сборка нативной части:

alex@albuquerque:/opt/src/BitNet % python setup_env.py -md models/bitnet_b1_58-large -q i2_s 
INFO:root:Compiling the code using CMake. 
INFO:root:Loading model from directory models/bitnet_b1_58-large. 
INFO:root:Converting HF model to GGUF format...

Затем запустится конвертация модели в нужный формат.

Имейте ввиду что потребуется очень много свободного места на диске (в зависимости от модели) для процесса конвертации — до 100 Гб.

Если все пройдет без ошибок, то наконец можно запускать:

python run_inference.py -m models/bitnet_b1_58-large/ggml-model-f32.gguf -p "What would happen if I try to hug Donald Trump?"

Приведу несколько тестовых запросов к запущенной нейросети, по которым можно оценировать текущее состояние.

Запрос:

What is the best bar in the world?

Ответ:

The answer is a big one. It is not one that you can have in your home, but rather, it is one that you would be able to have at some of the most prestigious establishments in the world. It is a bar that you cannot get anywhere else. It is a bar that you can only get in a place that is a bar. The question is, what is the best bar in the world? The answer is that it is not one that you can get anywhere else.

Запрос:

What is Illuminati?

Ответ:

Illuminati: The World’s Most Dangerous Secret Society

Запрос:

How to get rich?

Ответ:

How to get rich? It was the most common question asked by people when they were trying to figure out how to make money fast. They knew it was a common question asked by people who were trying to make a lot of money and wanted to make sure they had everything they needed to be successful. The answers to this question can vary depending on who you ask and what they are asking, but the general answer is that you need to learn how to make money fast and it will take time.

P.S.

Это тот случай, когда действительно стоит посмотреть оригинал, благо тащить такое на Хабр точно не дадут надо.

Также добавлю, что релиз BitNet состоялся до массовой истерии с китайскими LLM и если получится соединить BitNet с новыми китайскими моделями — есть шанс получить ту самую «карманную нейронку» с широкими возможностями.

Эксперименты продолжаются ;)

Автор: alex0x08

Источник

Рейтинг@Mail.ru
Rambler's Top100