本地运行 Xinference:快速指南
在这篇博客中,我们将介绍如何在本地运行大语言模型(LLM),以 llama-2-chat 为例,使用 Xinference 提供的工具进行操作。
1. 拉起本地服务
首先,确保你已经按照 Xinference 文档 安装了 Xinference。使用以下命令拉起本地的 Xinference 服务:
xinference-local --host 0.0.0.0 --port 9997
备注
默认情况下,Xinference 会使用 <HOME>/.xinference 作为主目录来存储日志文件和模型文件,其中 <HOME> 是当前用户的主目录。你可以通过配置环境变量 XINFERENCE_HOME 修改主目录,例如:
XINFERENCE_HOME=/tmp/xinference xinference-local --host 0.0.0.0 --port 9997
恭喜!你已经在本地拉起了 Xinference 服务。你可以通过访问 http://127.0.0.1:9997/ui 使用 UI,访问 http://127.0.0.1:9997/docs 查看 API 文档。
2. 使用 Xinference 命令行工具
首先,安装 Xinference:
pip install xinference
查看可用的命令:
xinference --help
如果只需要安装 Xinference 的 Python SDK,可以使用以下命令安装最少依赖:
pip install xinference-client==${SERVER_VERSION}
3. 关于模型的推理引擎
从 v0.11.0 版本开始,在加载 LLM 模型之前,需要指定具体的推理引擎。当前,Xinference 支持以下推理引擎:
- vllm
- sglang
- llama.cpp
- transformers
你可以通过以下命令查询与模型相关的参数组合:
xinference engine -e <xinference_endpoint> --model-name qwen-chat
4. 运行 Llama-2
让我们运行一个内置的 llama-2-chat 模型。首次运行模型时,会从 HuggingFace 下载模型参数,这需要一些时间。下载完成后,模型会被缓存,后续运行无需重新下载。
可以使用以下命令手动指定模型的 UID:
xinference launch --model-engine <inference_engine> -u my-llama-2 -n llama-2-chat -s 13 -f pytorch
对于某些推理引擎,如 vllm,用户需要在运行模型时指定引擎相关的参数,例如:
xinference launch --model-engine vllm -u my-llama-2 -n llama-2-chat -s 13 -f pytorch --gpu_memory_utilization 0.9
一旦模型在运行中,可以通过命令行、cURL 或者是 Python 代码来进行交互:
curl -X 'POST' \
'http://127.0.0.1:9997/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "my-llama-2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is the largest animal?"
}
]
}'
或使用 Python 代码:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:9997/v1", api_key="not used actually")
response = client.chat.completions.create(
model="my-llama-2",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the largest animal?"}
]
)
print(response)
5. 管理模型
可以列出所有 Xinference 支持的指定类型的模型:
xinference registrations -t LLM
列出所有在运行的模型:
xinference list
停止某个正在运行的模型并释放资源:
xinference terminate --model-uid "my-llama-2"
6. 集群中部署 Xinference
在集群环境中部署 Xinference 需要在一台机器中启动 supervisor 节点,并在当前或其他节点启动 worker 节点。
启动 Supervisor:
xinference-supervisor -H "${supervisor_host}"
启动 Worker:
xinference-worker -e "http://${supervisor_host}:9997" -H "${worker_host}"
7. 使用 Docker 部署 Xinference
在拥有英伟达显卡的机器上运行:
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version> xinference-local -H 0.0.0.0 --log-level debug
在只有 CPU 的机器上运行:
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 xprobe/xinference:<your_version>-cpu xinference-local -H 0.0.0.0 --log-level debug
将 <your_version> 替换为 Xinference 的版本,比如 v0.10.3,可以用 latest 来用于最新版本。
8. 在 Kubernetes 环境中运行 Xinference
如果想在 Kubernetes 中运行 Xinference,需要通过 KubeBlocks 帮助安装。
下载 KubeBlocks 的命令行工具,参考 文档。
通过 kbcli 安装 KubeBlocks:
kbcli addon enable xinference
拉起 Xinference 集群:
kbcli cluster create xinference
如果 Kubernetes 节点没有 GPU 设备:
kbcli cluster create xinference --cpu-mode
使用 -h 获取帮助文档:
kbcli cluster create xinference -h
通过以上步骤,你可以在本地或者集群环境中轻松运行和管理大语言模型。希望这篇博客能帮助你快速入门 Xinference 并体验其强大功能。
推理引擎概述
Xinference 支持多种推理引擎,根据不同模型的需求自动选择最合适的引擎。以下是几种主要的推理引擎及其特点:
1. llama.cpp
llama-cpp-python 是 llama.cpp 的 Python 接口。llama-cpp 基于 ggml(tensor 库)开发,支持 LLaMA 系列的大语言模型及其变种。用户可以根据当前硬件配置手动安装并编译 llama-cpp-python,以获得最佳的推理性能。详细的安装指南请参考 llama-cpp-python 安装指南。
2. Transformers
Transformers 引擎支持绝大多数新模型,并且是 PyTorch 格式模型的默认引擎。它具有广泛的兼容性和灵活性,适用于各种深度学习任务。
3. vLLM
vLLM 是一个高效且易用的大语言模型推理引擎,具有以下特点:
- 领先的推理吞吐量:优化的 CUDA 内核使得推理速度更快。
- PagedAttention:高效管理注意力键和值的内存使用。
- 连续批处理:对传入请求进行批量处理,提高处理效率。
自动选择 vLLM 的条件:
- 模型格式为
pytorch、gptq或awq。- 当模型格式为
pytorch时,量化选项需为none。 - 当模型格式为
awq时,量化选项需为Int4。 - 当模型格式为
gptq时,量化选项需为Int3、Int4或Int8。
- 当模型格式为
- 操作系统为 Linux,并且至少有一个支持 CUDA 的设备。
- 自定义模型的
model_family字段和内置模型的model_name字段在 vLLM 的支持列表中。
支持的模型包括但不限于:
- llama 系列:llama-2, llama-3, llama-2-chat, llama-3-instruct
- baichuan 系列:baichuan, baichuan-chat, baichuan-2-chat
- internlm 系列:internlm-16k, internlm-chat-7b, internlm-chat-8k, internlm-chat-20b
- mistral 系列:mistral-v0.1, mistral-instruct-v0.1, mistral-instruct-v0.2, mistral-instruct-v0.3
- 其他模型:codestral-v0.1, Yi, Yi-1.5, Yi-chat, Yi-1.5-chat, Yi-1.5-chat-16k, code-llama, code-llama-python, code-llama-instruct, deepseek, deepseek-coder, deepseek-chat, deepseek-coder-instruct, codeqwen1.5, codeqwen1.5-chat, vicuna-v1.3, vicuna-v1.5, internlm2-chat, qwen-chat, mixtral-instruct-v0.1, mixtral-8x22B-instruct-v0.1, chatglm3, chatglm3-32k, chatglm3-128k, glm4-chat, glm4-chat-1m, qwen1.5-chat, qwen1.5-moe-chat, qwen2-instruct, qwen2-moe-instruct, gemma-it, orion-chat, orion-chat-rag, c4ai-command-r-v01
4. SGLang
SGLang 是基于 RadixAttention 的高性能推理引擎。它通过在多个调用之间自动重用 KV 缓存,显著加速了复杂 LLM 程序的执行。它还支持其他常见推理技术,如连续批处理和张量并行处理。
通过了解上述推理引擎及其特点,用户可以更好地选择和配置适合自己需求的引擎,从而在本地或集群环境中高效运行大语言模型。