Appearance
Xinference
本地部署大模型
本地部署平台比较
Ollama vs Xinference
Xinference
部署大模型
部署环境
我在MacBook Air M2
上使用Xinference
部署大模型。Mac
是内存显存共用的。
我们可以在MacBook Air
上运行一些量化后的大模型。
什么是量化后的大模型:
量化后的大模型是指在模型压缩和优化过程中,将深度学习模型的权重和激活值从原始的高精度(通常是32位浮点数,即FP32
)降低到较低精度(如8位整数、4位整数等)的过程。量化的目的是减少模型的内存占用和计算复杂度,从而加快推理速度并降低硬件要求,尤其是在资源受限的环境中。
量化版本是指通过降低模型参数的数值精度来减少模型大小和计算需求的技术。在深度学习中,模型通常使用高精度的浮点数(如32位浮点数,FP32)表示参数。量化技术将这些高精度参数转换为低精度表示(如8位整数,INT8),从而减小模型的存储空间和计算复杂度。
量化的主要目的包括:
减少存储需求:降低模型的存储空间,使其更适合在存储资源有限的设备上运行。
加速计算:低精度计算通常比高精度计算更快,尤其在硬件支持低精度运算时,能够提高推理速度。
降低能耗:低精度计算消耗的能量较少,有助于在移动设备等对能耗敏感的场景中应用。
常见的量化精度包括:
FP16(16位浮点数):相比FP32,内存占用减少一半,适用于需要较高精度的应用。
INT8(8位整数):进一步降低精度,显著减少模型大小和计算需求,适用于对精度要求不高的场景。
INT4(4位整数):极大地降低精度,进一步压缩模型,但可能导致较大的精度损失。
需要注意的是,量化可能会导致模型精度下降,因此在应用量化时需要权衡精度和效率之间的关系。
例如,GPTQ(Generalized Post-Training Quantization)是一种后训练量化技术,能够将模型的权重位宽降低到3-4位,在大幅减少模型大小和计算成本的同时还能保持模型性能。 BLOG.CSDN.NET
总之,量化版本通过降低模型参数的精度,实现了模型压缩和计算加速,是深度学习模型优化的重要技术之一。
FP16和BP16的区别:
FP16(半精度浮点数)和BP16(Brain浮点数)都是16位浮点数格式,但在表示方式和应用场景上有所不同。
FP16(半精度浮点数):
结构:1位符号位,5位指数位,10位尾数位。 精度与范围:提供较高的精度,适用于对精度要求较高的应用,如图像处理和科学计算。 应用:广泛用于深度学习的训练和推理过程中,尤其是在GPU和TPU上,提供更快的计算速度并减少内存使用,同时相对较少损失精度。 BLOG.CSDN.NET BP16(Brain浮点数):
结构:1位符号位,8位指数位,7位尾数位。 精度与范围:在指数范围方面与FP32相似,因此可以处理更大的数值范围,但尾数部分较少,导致精度比FP16稍低。 应用:主要适用于训练深度学习模型,尤其是在需要更高数值范围而不需要完全精确计算的情况下。 BLOG.CSDN.NET 总的来说,FP16适用于需要较高精度的任务,而BP16则在需要更大数值范围的深度学习训练中更为常见。
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