Skip to content

Xinference 本地部署大模型

本地部署平台比较

Ollama vs Xinference

对比

Xinference部署大模型

部署环境

我在MacBook Air M2上使用Xinference部署大模型。Mac是内存显存共用的。

MacBook

我们可以在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配置本地大模型

Dify配置本地大模型

Dify配置本地大模型

补充知识:xinference 模型显存使用量计算

xinference cal-model-mem -s 1_8 -f pytorch -c 128000 -n qwen1.5-chat