Appearance
Xinference
本地部署大模型
本地部署平台比较
Ollama vs Xinference
Xinference
部署大模型
部署环境
我在MacBook Air M2
上使用Xinference
部署大模型。Mac
是内存显存共用的。
我们可以在MacBook Air
上运行一些量化后的大模型。
什么是量化后的大模型:
量化后的大模型是指在模型压缩和优化过程中,将深度学习模型的权重和激活值从原始的高精度(通常是32位浮点数,即FP32
)降低到较低精度(如8位整数、4位整数等)的过程。量化的目的是减少模型的内存占用和计算复杂度,从而加快推理速度并降低硬件要求,尤其是在资源受限的环境中。
Python
环境
conda env list
conda create -n xinference python=3.11.7
conda activate xinference
conda env list
安装Xinference
Mac
安装Xinference
的先决条件:
conda install -c conda-forge pynini=2.1.5
//安装Xinference
pip install "xinference[all]" -i https://pypi.mirrors.ustc.edu.cn/simple/
可能的报错:
Field name "schema" shadows a BaseModel attribute
解决:
pip install openai==1.39.0
安装成功后,使用以下命令查看xinference
的安装路径
pip show xinference
启动Xinference
xinference-local --host 0.0.0.0 --port 9997
启动成功后,可以通过访问 http://127.0.0.1:9997/ui 来使用 UI,访问 http://127.0.0.1:9997/docs 来查看 API 文档。
部署大模型
查询与 qwen1.5-chat
模型相关的参数组合,以决定它能够怎样跑在各种推理引擎上。
xinference engine -e http://127.0.0.1:9997 --model-name qwen1.5-chat
Name Engine Format Size (in billions) Quantization
------------ ------------ -------- -------------------- --------------
qwen1.5-chat Transformers pytorch 0_5 4-bit
qwen1.5-chat Transformers pytorch 0_5 8-bit
qwen1.5-chat Transformers pytorch 0_5 none
qwen1.5-chat Transformers pytorch 1_8 4-bit
qwen1.5-chat Transformers pytorch 1_8 8-bit
qwen1.5-chat Transformers pytorch 1_8 none
qwen1.5-chat Transformers pytorch 4 4-bit
qwen1.5-chat Transformers pytorch 4 8-bit
qwen1.5-chat Transformers pytorch 4 none
qwen1.5-chat Transformers pytorch 7 4-bit
qwen1.5-chat Transformers pytorch 7 8-bit
qwen1.5-chat Transformers pytorch 7 none
qwen1.5-chat Transformers pytorch 14 4-bit
qwen1.5-chat Transformers pytorch 14 8-bit
qwen1.5-chat Transformers pytorch 14 none
qwen1.5-chat Transformers pytorch 32 4-bit
qwen1.5-chat Transformers pytorch 32 8-bit
qwen1.5-chat Transformers pytorch 32 none
qwen1.5-chat Transformers pytorch 72 4-bit
qwen1.5-chat Transformers pytorch 72 8-bit
qwen1.5-chat Transformers pytorch 72 none
qwen1.5-chat Transformers pytorch 110 4-bit
qwen1.5-chat Transformers pytorch 110 8-bit
qwen1.5-chat Transformers pytorch 110 none
qwen1.5-chat Transformers gptq 0_5 Int4
qwen1.5-chat Transformers gptq 0_5 Int8
qwen1.5-chat Transformers gptq 1_8 Int4
qwen1.5-chat Transformers gptq 1_8 Int8
qwen1.5-chat Transformers gptq 4 Int4
qwen1.5-chat Transformers gptq 4 Int8
qwen1.5-chat Transformers gptq 7 Int4
qwen1.5-chat Transformers gptq 7 Int8
qwen1.5-chat Transformers gptq 14 Int4
qwen1.5-chat Transformers gptq 14 Int8
qwen1.5-chat Transformers gptq 32 Int4
qwen1.5-chat Transformers gptq 72 Int4
qwen1.5-chat Transformers gptq 72 Int8
qwen1.5-chat Transformers gptq 110 Int4
qwen1.5-chat Transformers awq 0_5 Int4
qwen1.5-chat Transformers awq 1_8 Int4
qwen1.5-chat Transformers awq 4 Int4
qwen1.5-chat Transformers awq 7 Int4
qwen1.5-chat Transformers awq 14 Int4
qwen1.5-chat Transformers awq 32 Int4
qwen1.5-chat Transformers awq 72 Int4
qwen1.5-chat Transformers awq 110 Int4
qwen1.5-chat llama.cpp ggufv2 0_5 q2_k
qwen1.5-chat llama.cpp ggufv2 0_5 q3_k_m
qwen1.5-chat llama.cpp ggufv2 0_5 q4_0
qwen1.5-chat llama.cpp ggufv2 0_5 q4_k_m
qwen1.5-chat llama.cpp ggufv2 0_5 q5_0
qwen1.5-chat llama.cpp ggufv2 0_5 q5_k_m
qwen1.5-chat llama.cpp ggufv2 0_5 q6_k
qwen1.5-chat llama.cpp ggufv2 0_5 q8_0
qwen1.5-chat llama.cpp ggufv2 1_8 q2_k
qwen1.5-chat llama.cpp ggufv2 1_8 q3_k_m
qwen1.5-chat llama.cpp ggufv2 1_8 q4_0
qwen1.5-chat llama.cpp ggufv2 1_8 q4_k_m
qwen1.5-chat llama.cpp ggufv2 1_8 q5_0
qwen1.5-chat llama.cpp ggufv2 1_8 q5_k_m
qwen1.5-chat llama.cpp ggufv2 1_8 q6_k
qwen1.5-chat llama.cpp ggufv2 1_8 q8_0
qwen1.5-chat llama.cpp ggufv2 4 q2_k
qwen1.5-chat llama.cpp ggufv2 4 q3_k_m
qwen1.5-chat llama.cpp ggufv2 4 q4_0
qwen1.5-chat llama.cpp ggufv2 4 q4_k_m
qwen1.5-chat llama.cpp ggufv2 4 q5_0
qwen1.5-chat llama.cpp ggufv2 4 q5_k_m
qwen1.5-chat llama.cpp ggufv2 4 q6_k
qwen1.5-chat llama.cpp ggufv2 4 q8_0
qwen1.5-chat llama.cpp ggufv2 7 q2_k
qwen1.5-chat llama.cpp ggufv2 7 q3_k_m
qwen1.5-chat llama.cpp ggufv2 7 q4_0
qwen1.5-chat llama.cpp ggufv2 7 q4_k_m
qwen1.5-chat llama.cpp ggufv2 7 q5_0
qwen1.5-chat llama.cpp ggufv2 7 q5_k_m
qwen1.5-chat llama.cpp ggufv2 7 q6_k
qwen1.5-chat llama.cpp ggufv2 7 q8_0
qwen1.5-chat llama.cpp ggufv2 14 q2_k
qwen1.5-chat llama.cpp ggufv2 14 q3_k_m
qwen1.5-chat llama.cpp ggufv2 14 q4_0
qwen1.5-chat llama.cpp ggufv2 14 q4_k_m
qwen1.5-chat llama.cpp ggufv2 14 q5_0
qwen1.5-chat llama.cpp ggufv2 14 q5_k_m
qwen1.5-chat llama.cpp ggufv2 14 q6_k
qwen1.5-chat llama.cpp ggufv2 14 q8_0
qwen1.5-chat llama.cpp ggufv2 32 q2_k
qwen1.5-chat llama.cpp ggufv2 32 q3_k_m
qwen1.5-chat llama.cpp ggufv2 32 q4_0
qwen1.5-chat llama.cpp ggufv2 32 q4_k_m
qwen1.5-chat llama.cpp ggufv2 32 q5_0
qwen1.5-chat llama.cpp ggufv2 32 q5_k_m
qwen1.5-chat llama.cpp ggufv2 32 q6_k
qwen1.5-chat llama.cpp ggufv2 32 q8_0
qwen1.5-chat llama.cpp ggufv2 72 q2_k
qwen1.5-chat llama.cpp ggufv2 72 q3_k_m
qwen1.5-chat llama.cpp ggufv2 72 q4_k_m
llama.cpp
一般运行的是量化的模型 速度快 但是质量肯定有损失 就像 ollama
, 而 transformers
就是加载原版的模型 需要大显存才能跑起来。
模型量化等级和最低GPU要求参考,以GLM为例
上下文128k
,上下文通常指的是模型在处理输入时所能支持的最大令牌(token
)数量为 128,000 个。这个 k
指的是 千
(1,000)。
大模型的调用
curl -X 'POST' \
'http://127.0.0.1:9997/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen1.5-chat",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is the largest animal?"
}
]
}'
Dify配置本地大模型
补充知识:xinference
模型显存使用量计算
xinference cal-model-mem -s 1_8 -f pytorch -c 128000 -n qwen1.5-chat