Запускаем ИИ в командной строке OpenScaler без GPU

Большие языковые модели (large language models, LLM) прочно вошли в нашу жизнь. Применение таких моделей обширно и включает в себя перевод текстов с разных языков, поиск информации, написание текстов и ведение диалога. Подобные модели натренированы на огромном количестве текста и содержат большое количество параметров. Зачастую такие модели требуют мощного железа и GPU в качестве ускорителей, что может быть затруднительным для пользователей, не имеющих доступа к мощным серверам с GPU-ускорителями.

Существует решение данной проблемы: использование оптимизированных моделей на локальной машине без GPU-ускорителя. Рассмотрим как это сделать на примере ОС OpenScaler. Одними из наиболее популярных репозиториев с оптимизированными моделями являются llama.cpp и chatglm.cpp. llama.cpp поддерживает запуск значительного количества моделей, таких как LLaMa, Vicuna, Alpaca и т.д. chatglm.cpp предоставляет возможность запуска китайских моделей: ChatGLM, Baichuan, CodeGeeX2.

Модели наподобие LLaMa можно использовать для различных задач, связанных с текстом: суммаризация текста, перевод с другого языка, написание нового текста в качестве ответа на вопрос или на заданную тематику. Также модель можно использовать в качестве чат-бота, способного запоминать контекст непродолжительной беседы. Схожей функциональностью обладают и другие LLM, например Vicuna, Alpaca, OpenAssistant и др.

CodeGeeX2 способна выступать помощником при написании и отладки кода, написанного на наиболее популярных языках программирования (Python, JavaScript, C++). Модель способна генерировать код для описанной задачи, писать комментарии к уже написанному коду, “переводить” код с одного языка на другой, а также объяснять назначение указанного фрагмента кода

В качестве тестового полигона выступит сервер с ARM CPU (или x86) под управлением ОС OpenScaler 22.03 LTS SP2.

Подготовка

Для сборки понадобятся следующие пакеты:

  • git
  • make
  • cmake
  • g++
  • python3-devel

llama.cpp

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

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

Далее проведем сборку и переместим основной бинарник:

mkdir build && cd build
cmake .. && cmake –build . –config Release
mv bin/main ../ && cd ..

Далее нам необходимо скачать интересующую нас модель:

pip install huggingface-hub
higgungface-cli download The/Bloke/Llama-2-7b-Chat-GGUF llama-2-7b-chat.Q4_K_M.gguf –local-dir . –local-dir-use-symlinks False
mv llama-2-7b-chat.Q4_K_M.gguf ./models/

Следующей командой запускаем интерактивный режим:

./main -m ./models/llama-2-7b-chat.Q4_K_M.gguf -c 512 -b 1024 -n 256 –keep 48 –repeat_penalty 1.0 –color -i

Дополнительные параметры запуска можно посмотреть в репозитории.

Пример генерации:

chatglm.cpp

В первую очередь, загрузим необходимый репозиторий:

git clone –recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp

Далее установим необходимые для конвертации и оптимизации python-пакеты:

pip install transformers==4.27.1 torch tabulate tqdm accelerate sentencepiece cpm_kernels

Скрипт convert.py загрузит модель и сконвертирует в выбранном нами режиме. В качестве примера возьмем модель CodeGeeX2:

python3 chatglm_cpp/convert.py –i THUDM/codegeex2-6b –t q4_0 –o codegeex2-6b_q4_0.bin

Остается лишь собрать и запустить бинарный файл:

cmake -B –build
cmake –build build -j –config Release
./build/bin/main -m codegeex2-6b_q4_0.bin -i

Пример генерации кода с помощью CodeGeeX2:

OpenScaler 23.09

В openScaler версии 23.09 появилась возможность запуска LLM с помощью установки соответствующих пакетов, что позволит сократить время установки и настройки.

Установка и запуск ChatGLM выполняется следующим образом:

yum install chatglm-cpp
python3 /usr/bin/chatglm_convert.py -i THUDM/chatglm-6b –t q4_0 –o chatglm-ggml.bin
chatglm_cpp_main -m chatglm-ggml.bin -i

Для использования LLaMa необходимо скачать веса и указать путь к модели:

yum install llama.cpp
llama_cpp_main –m model_path –color –ctx-size 2048 -n -1 -ins -b 256 –top_k 10000 –temp 0.2 –repeat_penalty 1.1 -t 8