当前位置:   article > 正文

xinference搭建

xinference

简介

Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。

帮助文档https://inference.readthedocs.io/zh-cn/latest/models/index.html

配置项

# 修改存储目录(模型及日志文件)
export XINFERENCE_HOME=/tmp/xinference
# 可以使用的显卡(使用nvidia-smi查看)
export CUDA_VISIBLE_DEVICES=0,1,2,3,4
# 从modelscopde下载模型
export XINFERENCE_MODEL_SRC=modelscope
# 设置token(部分模型需要授权)
export HUGGING_FACE_HUB_TOKEN=your_token_here
# 模型缓存目录,默认值是~/.cache/modelscope/hub
export MODELSCOPE_CACHE=<model_saved_path>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运维

# 查看支持的某种类型所有模型(LLM/embedding/image/audio/rerank)
xinference registrations -t LLM
# 查看在运行的模型
xinference list
# 终止某个模型
xinference terminate --model-uid "my-llama-2"
# 重启
ps -ef | grep xinference | grep -v grep | awk '{print $2}' | xargs kill -9
ps -ef | grep xinference | grep -v grep | wc -l
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

vLLM加速

LLM 是一个支持高并发的高性能大模型推理引擎。当满足以下条件时,Xinference 会自动选择 vllm 作为引擎来达到更高的吞吐量:

  • 模型格式为 pytorchgptq 或者 awq
  • 当模型格式为 pytorch 时,量化选项需为 none
  • 当模型格式为 gptqawq 时,量化选项需为 Int4
  • 操作系统为 Linux 并且至少有一个支持 CUDA 的设备
  • 自定义模型的 model_family 字段和内置模型的 model_name 字段在 vLLM 的支持列表中。

基于Docker部署

1. 安装docker & nvidia gpu toolkit

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动docker
sudo systemctl start docker

# 安装gpu toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo yum install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# 关闭ecc可以提升速度和可用显存,需要重启
nvidia-smi -e 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2. 安装python

  • 升级openSSL
# 检查openSSL version>=1.1.1
openssl version

# 升级openSSL
sudo yum install -y gcc make perl-core zlib-devel
curl -L https://www.openssl.org/source/openssl-3.2.1.tar.gz -o openssl-3.2.1.tar.gz
tar -zxf openssl-3.2.1.tar.gz
cd openssl-3.2.1
./config --prefix=/usr/local/openssl-3.2.1
make
sudo make install

# 备份
sudo mv /usr/bin/openssl /usr/bin/openssl_old
sudo mv /usr/include/openssl /usr/include/openssl_old

# 安装与更新动态链接库缓存
sudo ln -sf /usr/local/openssl-3.2.1/bin/openssl /usr/bin/openssl
sudo ln -sf /usr/local/openssl-3.2.1/include/openssl /usr/include/openssl
sudo ldconfig /usr/local/openssl-3.2.1/lib64

# 校验
openssl version
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 安装python
sudo yum install bzip2-devel openssl-devel readline-devel sqlite-devel ncurses-devel tk-devel libuuid-devel
curl -L https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz -o Python-3.12.2.tar.xz
tar -xf Python-3.12.2.tar.xz
cd Python-3.12.2
./configure --prefix=/usr/local/python3
make
make install
# 设置软链
ln -sf /usr/local/python3/bin/python3 /usr/bin/python3
# centos yum不支持python3,不能加这个软链
ln -sf /usr/bin/python3 /usr/bin/python

make clean
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3. 安装conda(可选)

wget https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-Linux-x86_64.sh
chmod +x Miniconda3-py312_24.1.2-0-Linux-x86_64.sh
./Miniconda3-py312_24.1.2-0-Linux-x86_64.sh -b -f -p /usr/local/conda
ln -s /usr/local/conda/bin/conda /usr/bin/conda

# 初始化
conda init
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.从ModelScope下载模型(可选)

执行MODELSCOPE_CACHE=/data/modelscope/hub改变缓存目录,默认值是~/.cache/modelscope/hub

mkdir -p /data/modelscope/hub
cd /data/modelscope/hub
pip install modelscope 

python
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen1.5-32B-Chat-AWQ', cache_dir='/data/modelscope/hub')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5. 启动xinference

# 拉取镜像,速度慢可以使用镜像站:docker.nju.edu.cn/xprobe/xinference:v0.10.1
# 阿里云使用它的容器镜像服务加速
docker pull xprobe/xinference:v0.10.1

# 启动,所有卡可以用 --gpus all
docker run -d -e XINFERENCE_MODEL_SRC=modelscope -e MODELSCOPE_CACHE=/data/modelscope/hub -v /data:/data -p 9997:9997 --shm-size=16g --gpus '"device=0,1"' xprobe/xinference:v0.10.1 xinference-local -H 0.0.0.0 --log-level debug
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6. 进入xinference启动模型,也可以用页面启动

docker exec -it <containerId> /bin/bash
nvidia-smi
xinference launch -u qwen1.5-chat-32b -n qwen1.5-chat -f awq -s 32 -q Int4 -r 1 --n-gpu 2 --max_model_len 32768 --gpu_memory_utilization 0.9 --enforce_eager True

# 检查
xinference list
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

直接部署

# 1. 安装
pip install "xinference[all]"

# 2. 启动
# 默认情况下,Xinference 会使用 <HOME>/.xinference 作为主目录来存储一些必要的信息,比如日志文件和模型文件
xinference-local --host 0.0.0.0 --port 9997

# 3. 使用命令行运行模型(不指定-u/--model-uid会随机生成一个)
# -u --model-uid 不指定会自动生成一个唯一id(默认跟模型名一样)
# -n --model-name 模型名
# -f model format
# -s 模型大小(billions)
# -e --endpoint xinference地址
# -r --replica 副本数
# --n-gpu 使用多少个gpu
# 在使用具体的加速框架时,可以增加对应的参数,如vllm支持的--max_model_len 8192
xinference launch -u my-llama-2 -n llama-2-chat -s 13 -f pytorch -r 1 --n-gpu 2 --gpu-idx 3,4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

内置模型以及调用示例:https://inference.readthedocs.io/zh-cn/latest/models/builtin/llm/index.html

调用

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?"
        }
    ]
  }'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

自定义模型

参考文档:https://inference.readthedocs.io/zh-cn/latest/models/custom.html

vim codeqwen1_5.json

{
  "version": 1,
  "context_length": 65536,
  "model_name": "codeqwen1.5",
  "model_lang": [
    "en"
  ],
  "model_ability": [
    "generate"
  ],
  "model_family": "llama-2",
  "model_specs": [
    {
      "model_format": "pytorch",
      "model_size_in_billions": "7",
      "quantizations": [
        "4-bit",
        "8-bit",
        "none"
      ],
      "model_uri": "file:///data/modelscope/hub/qwen/CodeQwen1___5-7B"
    }
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

启动

xinference register --model-type LLM --file codeqwen1_5.json --persist
xinference launch -u codeqwen1.5 -n codeqwen1.5 -f pytorch -s 7 -q none -r 1 --n-gpu 2 --max_model_len 65536 --gpu_memory_utilization 0.95 --enforce_eager True
# 取消注册模型
xinference unregister -n codeqwen1.5-7b
  • 1
  • 2
  • 3
  • 4

调试

Embedding模型

import os
from xinference.client import Client

client = Client(os.environ.get("XINFERENCE_ENDPOINT","http://localhost:9997"))
model = client.get_model("bge-m3")

input_text = "What is the capital of China?"
model.create_embedding(input_text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/807903
推荐阅读
相关标签
  

闽ICP备14008679号