Умный чат на собственном компьютере.

Сколько шума было вокруг ChatGPT? Я лично его так и не пробовал. Не знаю грустно это или весело — не знаю. Но можно запустить прям дома, только вот параметры компа нужны тоже достаточно… нормальные. Лично я запускал на 6 ядрах и 16ГБ ОЗУ, но об этом далее.

Подготовка

Для начала немного разберемся что у нас есть. А есть у нас нейронные сети и знания о том, что они очень медленно работают на CPU, а для ускорения нужно иметь GPU. Но хочется на CPU.

Далее есть ОС «Форточка» и «Пингвин». Я буду делать в пингвинах.

Теперь нужны программы для работы. Я использовал llama.cpp и koboldcpp. Первая нужна для подготовки моделей, а вторая для их непосредственного запуска. Можно и в первой запускать модели, но есть, как оказывается, нюансы.

Закидываем к себе в закладки Hugging Face, так как отсюда будем забирать модели.

И так, у меня на текущий момент установлен Debian 12, а это значит, что будем ставить пакеты в нем. Ставим недостающие пакеты:

sudo apt install build-essential libopenblas-dev git git-lfs python3-pip

Для питона, если еще не сделано, то создаем файл ~/.config/pip/pip.conf и записываем в него следующее содержимое:

[global]
break-system-packages = true

Этот файл нужен, чтобы можно было установить пакеты питона, если не удается их установить, а они понадобятся (благо их немного).

Компиляция

Качаем софт:

git clone https://github.com/ggerganov/llama.cpp

git clone https://github.com/LostRuins/koboldcpp

Переходим в директорию llama.cpp и ставим пакеты:

pip install -r requirements.txt

И собираем саму приложуху.

make

Теперь переходим в koboldcpp и ставим пакеты оттуда:

pip install -r requirements.txt

И собираем пакет:

LLAMA_OPENBLAS=1 make

Вот тут есть нюанс. Дело в том, что в Linux нужна дополнительная для работы этого движка (если честно я не сильно разобрался). Но… openBLAS нам подходит. Можно собрать с поддержкой cuBLAS, но нужно установить CUDA, а для этого видеокарта должна поддерживать технологию. Кроме того нужно много библиотек и свежие драйвера. Если интересно как ставить, то идем сюда. Тут много умных слов, так что читаем и изучаем, если еще не в курсе. А это все нужно для установки компилятора nvcc и без него никак.

Модели

Я покажу 2 способа использования моделей.

Сборка модели из PyTorch

Есть модели, которые построены в PyTorch, но их нужно конвертировать в формат ggml. Для начала скачаем модель. Для этого рядом с директориями llama.cpp и koboldcpp, создадим директорию models и перейдем в нее. Теперь скачаем модель:

git clone https://huggingface.co/IlyaGusev/llama_7b_ru_turbo_alpaca_lora_merged

После скачивания перейдем обратно в llama.cpp и сделаем конвертирование:

python3 convert-pth-to-ggml.py ../models/llama_7b_ru_turbo_alpaca_lora_merged 1

Этой коммандой мы переводим формат PyTorch в GGML F16 (float16)

./quantize ../models/llama_7b_ru_turbo_alpaca_lora_merged/ggml-model.bin ../models/alpaca-7b-ru-q4_1.bin 3

Этой коммандой мы делаем «квантование», тем самым уменьшая объем модели. Да, в качестве мы тоже теряем, но нужна производительность.

Готовые модели

Вернемся в директорию models и загрузим нужные модели:

git clone https://huggingface.co/IlyaGusev/llama_7b_ru_turbo_alpaca_lora_llamacpp

git clone https://huggingface.co/IlyaGusev/llama_13b_ru_turbo_alpaca_lora_llamacpp

Соответственно первая весит 4ГБ, вторая около 8ГБ. Чтобы определить какая больше понравится, нужно поиграться с обеими.

Запуск

Теперь вернемся в koboldcpp и запустим какую-нибудь модель (у нас их 3):

python3 koboldcpp.py —model ../models/llama_7b_ru_turbo_alpaca_lora_llamacpp/7B/ggml-model-q4_0.bin —host 0.0.0.0 —port 8085

Это пример запуска модели. Можно открыть в браузере адрес localhost:8085 и пользоваться. Соответственно другие модели запускаются так же.

Пример работы модели Alpaca 7B ru как умного чата

Нюанс

Если модель сконвертировать в llama.cpp, то можно запустить прямо в ней, но вот модели, загруженные уже готовыми то llama.cpp их не запустить (у меня падала с ошибкой) и вот тут приходит на помощь koboldcpp. К тому же мне показалось, что у него и возможностей побольше и поинтереснее (если ковырнуть UI и параметры которые он отправляет в запросе).

Ложка дёгтя

Во первых — это не оригинальный ChatGPT, во вторых модели 7B и 13B все же маленькие по сравнению с большими братьями, и в третьих llama — проект другой компании со своей лицензией.

Выводы

Проектов нейронных сетей в конкретно этом направлении достаточно много. В частности для этого кода основные, которые я лично нашел, 3 — llama, alpaca и vicuna. У Alpaca есть доученный русский корпус и он достаточно адекватен (на 7B и 13B).

Вообще такую модель можно запустить и на домашнем сервере.

Поделиться
Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Вы должны быть авторизованы, чтобы разместить комментарий.