推理服务
TUILI 是运行于墨芯计算卡上的类 vLLM 推理引擎,提供与 OpenAI 接口兼容的 API,支持高效部署大语言模型推理服务。
前提条件
安装 Python ≥ 3.7。
安装 SOLA Toolkit,具体请参见 SOLA Toolkit 安装指南。
安装 MOFFETT Container Toolkit ≥ 1.2.0,具体请参见 MOFFETT Container Toolkit 用户手册。
安装 MoffettHub CLI 工具,具体请参见 MoffettHub CLI。
准备环境
生成 CDI 规范文件。
注意
如果 SOLA Toolkit 版本发生变更,必须重复以下操作生成新的 CDI 规范文件。
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.3
wget https://moffett-release.tos-cn-guangzhou.volces.com/macs/macs-v1.10/tuili/tuili-v0.17.3.tar docker load -i tuili-v0.17.3.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.3 # 进入容器 docker exec -it tuili-test /bin/bash
须知
后续操作均在容器中进行。
设置 CPU 上执行任务的线程数。
lscpu # 查看 CPU 的数量,例如 CPU(s): 112 vim /home/moffett/workspace/repos/llama_backend/python/legacy/mf_spu_backend.cc # 修改 params.cpuparams.n_threads 为 CPU(s) 的数量,例如:112。
编译 backend。
cd /home/moffett/workspace/repos/llama_backend/ bash build.sh
设置推理策略及使用的模型。
vim /home/moffett/workspace/repos/server_config.yaml# 示例 serving: strategy: pd_auto model: /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B draft_model: /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
- strategy
推理策略,如下表所示。策略优先级从上到下依次降低,推荐使用
auto根据优先级自动选择策略。推理策略
说明
auto
按照优先级从高到低的顺序自动选择以下策略。
pd_separate
Prefill 阶段使用 PP(Pipeline Parallelism,流水线并行)模式,Decode 阶段使用 TP(Tensor Parallelism,张量并行)模式。
pd_auto
自动管理 Decode 和 Prefill 阶段的调度。
decode
Prefill 和 Decode 阶段使用同一套静态模型。
该策略不支持 DeepSeek-R1-Distill-Qwen-32B、Llama-3-70B 模型的并发测试。pd_separate_cpu
Prefill 阶段在 SPU 上使用 PP 模式运行,Decode 阶段在 CPU 上运行。
speculative_cpu
投机方案,在 SPU 上运行 target model,在 CPU 上运行 draft model。
该策略不支持并发测试。模型
支持的推理策略(单并发测试)
支持的推理策略(多并发测试)
Qwen/Qwen1.5-7B-Chat
pd_auto
pd_auto
Qwen/Qwen1.5-7B-Chat-w8a8
pd_auto
pd_auto
deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
pd_auto
pd_auto
deepseek-ai/DeepSeek-R1-Distill-Qwen-32B
pd_separate, pd_separate_cpu, decode, speculative_cpu
pd_separate, pd_separate_cpu
meta-llama/Llama-3-70B
pd_separate, decode
pd_separate
- 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 # 查看服务日志
注意
修改 server_config.yaml 中的模型及策略后,需重启推理服务,再进行推理测试。
测试推理服务
推理服务测试分为以下两种:
单并发测试
python3 tests/one_serving_benchmark.py --tokenizer <tokenizer>
多并发测试
python3 tests/multi_serving_benchmark.py --tokenizer <tokenizer> --n_requests <num>
- --tokenizer
模型的 tokenizer,可使用该模型任意策略的路径,例如:deepseek-ai/DeepSeek-R1-Distill-Qwen-32B 可使用
<model_path>/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/prefill。- --n_requests
并发数量,最大不超过 8。
测试过程中,可通过 tail -f stdout.log 命令查看服务日志;可执行 mx-smi list 命令查看运行的进程,如果未发现相关进程,请参见“启动推理服务”步骤重启服务。
注意
使用 DeepSeek-R1-Distill-Qwen-32B 模型推理需占用 16 个 Device。
使用 Llama-3-70B 模型推理需占用 32 个 Device,仅支持在部署了 8 张 S40 系列计算卡的服务器上运行。
测试示例
# 单并发测试
python3 tests/one_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/Qwen/Qwen1.5-7B-Chat/pd_auto/
python3 tests/one_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/Qwen/Qwen/Qwen1.5-7B-Chat-w8a8/
python3 tests/one_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B/pd_auto/
python3 tests/one_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/prefill/
python3 tests/one_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/meta-llama/Llama-3-70B/prefill/
# 多并发测试
python3 tests/multi_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/Qwen/Qwen1.5-7B-Chat/pd_auto/ --n_requests 8
python3 tests/multi_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/Qwen/Qwen1.5-7B-Chat-w8a8/pd_auto/ --n_requests 8
python3 tests/multi_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B/pd_auto/ --n_requests 8
python3 tests/multi_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/prefill/ --n_requests 8
python3 tests/multi_serving_benchmark.py --tokenizer /home/moffett/workspace/moffetthub_cache/meta-llama/Llama-3-70B/prefill/ --n_requests 8
结束推理服务
推理服务使用完成后,需在主机上结束相关进程,避免持续占用设备资源影响其他操作(如升级 SOLA Toolkit 版本)。步骤如下:
查询并结束运行中的推理服务相关进程。
mx-smi list sudo pkill python # 结束推理服务相关进程 sudo kill -9 <PID> # 结束其他进程
停用并删除推理服务的容器。
docker ps -a | grep <tuili-name> docker stop <tuili-name> && docker rm <tuili-name>