大语言模型推理服务
TUILI 是运行于墨芯计算卡上的类 vLLM 推理引擎,提供与 OpenAI Chat Completions 兼容的应用程序编程接口(Application Programming Interface,API)子集,支持通过 /v1/chat/completions 发起流式或非流式大语言模型推理请求。
前提条件
安装 Python ≥ 3.7。
安装 SOLA Toolkit,详见《SOLA Toolkit 安装指南》。
安装 MOFFETT Container Toolkit ≥ 1.2.0,详见《MOFFETT Container Toolkit 用户手册》。
安装 MoffettHub CLI 工具,详见 MoffettHub CLI。
准备环境
生成容器设备接口(Container Device Interface,CDI)规范文件。
注意
更换、增加或移除计算卡,设备编号发生变化,或 SOLA Toolkit 版本、安装路径发生变化后,必须重新生成 CDI 规范文件,并在主机上执行
sudo systemctl restart docker重启 Docker 服务(可能中断其他容器业务),确保设备映射和挂载路径与当前主机环境一致。sudo moffett-ctk cdi generate --driver-root / --output=/etc/cdi/moffett.yaml
sudo moffett-ctk cdi generate --driver-root /run/moffett/driver --output=/etc/cdi/moffett.yaml
获取模型。
moffetthub-cli list # 查看支持的模型及对应的推理策略 moffetthub-cli download <model_name> [--strategy <value>] [--output-dir <output_dir>] # 下载模型
- <model_name>
模型名称。
- --strategy
模型推理策略。默认下载该模型支持的全部策略文件集。
- --output-dir
模型存储路径,默认为 home 目录下的
.moffetthub_cache,例如:/home/moffett/.moffetthub_cache。
获取推理服务镜像。
docker pull moffett/tuili:v0.17.4
wget https://moffett-release.tos-cn-guangzhou.volces.com/macs/macs-v1.11/tuili/tuili-v0.17.4.tar docker load -i tuili-v0.17.4.tar
部署推理服务
启动并进入名为
tuili-test的容器(以墨芯的 home 目录(/home/moffett)为例)。# 启动容器 docker run -itd \ --device moffett.ai/spu=all \ --net=host \ --name tuili-test \ -v /home/moffett/.moffetthub_cache:/home/moffett/workspace/moffetthub_cache \ moffett/tuili:v0.17.4 # 进入容器 docker exec -it tuili-test /bin/bash
须知
后续编译、配置和服务启动操作均在容器中进行。
(可选)使用
pd_separate_cpu或speculative_cpu策略时,设置 CPU 上执行任务的线程数。lscpu # 查看逻辑 CPU 数量,例如 CPU(s): 112 vim /home/moffett/workspace/repos/llama_backend/python/legacy/mf_spu_backend.cc # 将 params.cpuparams.n_threads 修改为逻辑 CPU 数量,例如:112。
编译 backend。
cd /home/moffett/workspace/repos/llama_backend/ bash build.sh
设置推理策略及使用的模型。
vim /home/moffett/workspace/repos/server_config.yaml仅修改以下字段,保留
server_config.yaml中的其他字段及其原值:# 示例 serving: strategy: pd_auto model: /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B draft_model:
- strategy
推理策略。本文示例使用
pd_auto加载模型目录中的pd_auto策略文件。也可设置为auto,由服务按照pd_separate、pd_auto、decode、pd_separate_cpu、speculative_cpu的优先级,选择模型目录中可用的策略文件。- model
target model 路径,格式为
容器内挂载的模型路径 + <model_name>,例如:/home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B。- draft_model(可选)
draft model 路径。仅当模型支持
speculative_cpu策略时使用,格式同model。
启动并检查推理服务状态。
cd /home/moffett/workspace/repos export PYTHONPATH=$PYTHONPATH:. # 将当前路径添加到 PYTHONPATH python examples/server.py > stdout.log 2>&1 & # 启动推理服务 tail -f stdout.log # 查看服务日志
保持推理服务运行。在主机上打开新的终端,执行以下命令检查容器状态,并观察设备进程:
docker ps --filter name=tuili-test mx-smi list
容器的
STATUS列显示Up时,表示容器正在运行。mx-smi list输出的进程信息可用于辅助确认设备进程状态。服务是否能够正常推理,继续执行测试推理服务中的推理请求。
注意
修改 server_config.yaml 中的模型及策略后,需重启推理服务,再进行推理测试。
测试推理服务
在主机上打开新的终端,进入已启动的推理服务容器。
docker exec -it tuili-test /bin/bash
运行测试命令。
单并发测试
python3 tests/one_serving_benchmark.py多并发测试
python3 tests/multi_serving_benchmark.py --n_requests <num> # n_requests 指定并发数量,最大不超过 8 # 示例 python3 tests/multi_serving_benchmark.py --n_requests 4
测试过程中,可通过
tail -f stdout.log命令查看服务日志;可执行mx-smi list命令查看运行的进程,如果未发现相关进程,参见“启动推理服务”步骤重启服务。
停止推理服务
推理服务使用完成后,在主机上停止并删除专用容器,避免服务持续占用设备资源:
docker stop tuili-test
docker rm tuili-test
执行以下命令确认容器已删除且设备资源已释放:
docker ps -a --filter name=tuili-test
mx-smi list
docker ps 输出中不包含 tuili-test,且 mx-smi list 输出中不包含该推理服务的进程时,表示推理服务及其专用容器已停止,设备资源已释放。