这个镜像将会创建大模型推理加速SGLang框架所需的环境,同时将会采用Xinference作为模型管理工具。
SGLang简介
SGLang 是一个用于大语言模型(LLM)和视觉语言模型(VLM)的高效推理框架。它通过对后端运行时和前端语言的协同设计,使模型的交互更加快速和可控。其核心特性包括:
Xinference简介
Xinference 是一个功能强大且用途广泛的库,旨在为语言、语音识别和多模态模型提供服务。借助 Inference,您只需一个命令即可轻松部署和服务您的或最先进的内置模型。
🌟 模型部署简便化:简化大型语言模型、语音识别和多模态模型的部署过程。您可以通过单个命令完成模型的设置和部署,无论是实验还是生产环境。
⚡ 先进模型支持:通过单个命令即可体验尖端的内置模型。推理服务提供对最新开源模型的访问!
💻 异构硬件利用:通过ggml充分利用您的硬件资源。Xorbits Inference能智能地利用包括GPU和CPU在内的异构硬件,加速您的模型推理任务。
⚙️ 灵活的API和接口:提供多种与模型交互的接口,支持OpenAI兼容的RESTful API(包括函数调用API)、RPC、命令行界面(CLI)和网页界面(WebUI),实现无缝的模型管理和交互。
🌐 分布式部署:在分布式部署场景中表现出色,支持在多个设备或机器上无缝分配模型推理任务。
🔧 内置第三方库集成:Xorbits Inference无缝集成了流行的第三方库,包括LangChain、LlamaIndex、Dify和Chatbox。
显卡:4090
显存:24GB+
镜像中已经提供了一个可用的conda虚拟环境:sglang。若环境不可用或出现运行错误,可在新建的conda环境中执行以下命令:
# 安装必要依赖
pip install "xinference[sglang]"
pip install flashinfer -i https://flashinfer.ai/whl/cu124/torch2.4
# 如果出现缺少指定包,可执行以下命令安装(可选)
pip install sgl_kernel
pip install decord
pip install torchao
pip install outlines==0.0.45
在运行模型之前,需要执行以下命令启动Xinference服务:
# 启动Xinference
XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997
启动成功后,运行以下命令可以看到镜像中已经拉取的模型:
# 查看缓存模型
xinference cached
model_name | model_size_in_billions | model_format | quantization |
---|---|---|---|
qwen2.5-instruct | 0.5 | pytorch | 4-bit |
qwen2.5-instruct | 0.5 | pytorch | 8-bit |
qwen2.5-instruct | 0.5 | pytorch | none |
qwen2.5-instruct | 1.5 | pytorch | 4-bit |
qwen2.5-instruct | 1.5 | pytorch | 8-bit |
qwen2.5-instruct | 1.5 | pytorch | none |
qwen2.5-instruct | 32 | gptq | Int4 |
qwen2.5-instruct | 72 | gptq | Int4 |
已经缓存的模型
执行命令运行模型
# 模型启动命令,这个命令中就指定了我们使用的加速引擎为SGLang
xinference launch --model-engine sglang --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format pytorch
这个命令会部署模型,部署后的模型会被分配一个model-uid,默认与model-name相同。
查看运行中的模型:
# 查询命令
xinference list
UID | Type | Name | Format | Size (in billions) | Quantization |
---|---|---|---|---|---|
qwen2.5-instruct | LLM | qwen2.5-instruct | pytorch | 1.5 | none |
import openai
import sys
model_uid = "qwen2.5-instruct"
# Assume that the model is already launched.
# The api_key can't be empty, any string is OK.
client = openai.Client(api_key="not empty", base_url="http://0.0.0.0:9997/v1")
completion = client.chat.completions.create(
model=model_uid,
messages=[
{
"content": "What is the largest animal?",
"role": "user",
}
],
max_tokens=1024,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content:
word = chunk.choices[0].delta.content
sys.stdout.write(word)
sys.stdout.flush()