Chatglm.cpp может количественно оценить модели серии ChatGLM, чтобы они соответствовали требованиям вывода на машинах с низкой производительностью. Руководство по его использованию выглядит следующим образом.
git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp
Модели, поддерживающие количественную оценку, включают: ChatGLM-6B, ChatGLM2-6B, CodeGeeX2 и их Количественную модель.
-i
Параметр указывает исходную модель, которая может быть моделью на HuggingFace или моделью на локальном пути.
-t <type>
:
q4_0
: 4-bit integer quantization with fp16 scales.q4_1
: 4-bit integer quantization with fp16 scales and minimum values.q5_0
: 5-bit integer quantization with fp16 scales.q5_1
: 5-bit integer quantization with fp16 scales and minimum values.q8_0
: 8-bit integer quantization with fp16 scales.f16
: half precision floating point weights without quantization.f32
: single precision floating point weights without quantization. -l <lora_model_name_or_path>
可以合并 LoRA weights к базовой модели.
python3 chatglm_cpp/convert.py -i THUDM/chatglm-6b -t q4_0 -o chatglm-ggml.bin
Инструменты компиляции
cmake -B build
cmake --build build -j --config Release
бегать
./build/bin/main -m chatglm-ggml.bin -p Привет
Интерактивный, в этом режиме история чата будет перенесена на следующий разговор.
./build/bin/main -m chatglm-ggml.bin -i
Установите библиотеки Python.
Уведомление: В текущем каталоге есть каталог с именем Chatglm_cpp.,То же имя, что и у импортированной зависимости.,Использовать этот пакет позже,Будут конфликты,Вам нужно поместить скрипт запуска в другой каталог запуска.,И обратите внимание на путь загруженной модели. Или переименуйте каталог Chatglm_cpp после установки.,Например, измените его наchatglm_cpp.origin.
pip install -U chatglm-cpp
При загрузке модели этот ответ не является потоковым.
import chatglm_cpp
pipeline = chatglm_cpp.Pipeline("../chatglm-ggml.bin")
конвейер.чат(["Привет"])
'Привет👋! Я помощник искусственного интеллекта ChatGLM-6B,Рад встрече,Не стесняйтесь задавать мне любые вопросы. '
запуститьcli_chat.py в каталоге example/
python3 cli_chat.py -m ../chatglm-ggml.bin -i
# python3 cli_chat.py -m ../chatglm2-ggml.bin -p Привет --temp 0.8 --top_p 0.8 # CLI demo
runweb_demo.py в каталоге example/.
python3 web_demo.py -m ../chatglm-ggml.bin
# python3 web_demo.py -m ../chatglm2-ggml.bin --temp 0.8 --top_p 0.8 # web demo
Путь модели может быть HuggingFace или локальным путем.
import chatglm_cpp
pipeline = chatglm_cpp.Pipeline("THUDM/chatglm-6b", dtype="q4_0")
конвейер.чат(["Привет"])
# 'Привет👋! Я помощник искусственного интеллекта ChatGLM-6B,Рад встрече,Не стесняйтесь задавать мне любые вопросы. '
pip install 'chatglm-cpp[api]'
Если есть конфликты зависимостей, создайте новую среду conda, переустановите зависимости и выполните запуск. Обратите внимание на имя и адрес модифицированной квантованной модели.
MODEL=./chatglm-ggml.bin uvicorn chatglm_cpp.langchain_api:app --host 127.0.0.1 --port 8000
API тестирования завитка
curl http://127.0.0.1:8000 -H 'Content-Type: application/json' -d '{"prompt": "Привет"}'
Клиент использует тест LangChain
from langchain.llms import ChatGLM
llm = ChatGLM(endpoint_url="http://127.0.0.1:8000")
llm.predict("Привет")
'Привет👋! Я помощник искусственного интеллекта ChatGLM2-6B,Рад встрече,Не стесняйтесь задавать мне любые вопросы. '
Если есть конфликты зависимостей, создайте новую среду conda, переустановите зависимости и выполните запуск. Обратите внимание на имя и адрес модифицированной квантованной модели.
MODEL=./chatglm-ggml.bin uvicorn chatglm_cpp.openai_api:app --host 127.0.0.1 --port 8000
API тестирования завитка
curl http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' \
-d '{"messages": [{"role": "user", "content": "Привет"}]}'
Клиент использует тест OpenAI
import openai
openai.api_base = "http://127.0.0.1:8000/v1"
response = openai.ChatCompletion.create(model="default-model", messages=[{"role": "user", "content": "Привет"}])
response["choices"][0]["message"]["content"]
'Привет👋! Я помощник искусственного интеллекта ChatGLM2-6B,Рад встрече,Не стесняйтесь задавать мне любые вопросы. '
Потоковый вывод клиента
OPENAI_API_BASE=http://127.0.0.1:8000/v1 python3 examples/openai_client.py --stream --prompt Привет
среда:
ChatGLM-6B:
Q4_0 | Q4_1 | Q5_0 | Q5_1 | Q8_0 | F16 | F32 | |
---|---|---|---|---|---|---|---|
ms/token (CPU @ Platinum 8260) | 74 | 77 | 86 | 89 | 114 | 189 | 357 |
ms/token (CUDA @ V100 SXM2) | 10 | 9.8 | 10.7 | 10.6 | 14.6 | 19.8 | 34.2 |
file size | 3.3GB | 3.7GB | 4.0GB | 4.4GB | 6.2GB | 12GB | 23GB |
mem usage | 4.0GB | 4.4GB | 4.7GB | 5.1GB | 6.9GB | 13GB | 24GB |
ChatGLM2-6B:
Q4_0 | Q4_1 | Q5_0 | Q5_1 | Q8_0 | F16 | F32 | |
---|---|---|---|---|---|---|---|
ms/token (CPU @ Platinum 8260) | 64 | 71 | 79 | 83 | 106 | 189 | 372 |
ms/token (CUDA @ V100 SXM2) | 9.7 | 9.4 | 10.3 | 10.2 | 14 | 19.1 | 33 |
ms/token (MPS @ M2 Ultra) | 11 | 11.7 | N/A | N/A | N/A | 32.1 | N/A |
file size | 3.3GB | 3.7GB | 4.0GB | 4.4GB | 6.2GB | 12GB | 24GB |
mem usage | 3.4GB | 3.8GB | 4.1GB | 4.5GB | 6.2GB | 12GB | 23GB |