# 大语言模型推理服务 `TUILI` 是运行于墨芯计算卡上的类 vLLM 推理引擎,提供与 OpenAI Chat Completions 兼容的应用程序编程接口(Application Programming Interface,API)子集,支持通过 `/v1/chat/completions` 发起流式或非流式大语言模型推理请求。 ## 前提条件 - 安装 Python ≥ 3.7。 - 安装 SOLA Toolkit,详见[《SOLA Toolkit 安装指南》](../installation/sola-toolkit-installation-guide.md)。 - 安装 MOFFETT Container Toolkit ≥ 1.2.0,详见[《MOFFETT Container Toolkit 用户手册》](../AI-Native/mct.md)。 - 安装 MoffettHub CLI 工具,详见 MoffettHub CLI。 ## 准备环境 1. 生成容器设备接口(Container Device Interface,CDI)规范文件。 ```{include} ../_includes/cdi-environment-change.inc ``` ````{tabs} ```{tab} SOLA 驱动安装在主机上 ```bash sudo moffett-ctk cdi generate --driver-root / --output=/etc/cdi/moffett.yaml ``` ```{tab} SOLA 驱动通过 SPU Operator 容器镜像安装 ```bash sudo moffett-ctk cdi generate --driver-root /run/moffett/driver --output=/etc/cdi/moffett.yaml ``` ```` 2. 获取模型。 ```bash moffetthub-cli list # 查看支持的模型及对应的推理策略 moffetthub-cli download [--strategy ] [--output-dir ] # 下载模型 ``` : 模型名称。 --strategy : 模型推理策略。默认下载该模型支持的全部策略文件集。 --output-dir : 模型存储路径,默认为 home 目录下的 `.moffetthub_cache`,例如:`/home/moffett/.moffetthub_cache`。 3. 获取推理服务镜像。 ````{tabs} ```{tab} 在线拉取 ```bash docker pull moffett/tuili:v0.17.4 ``` ```{tab} 离线导入 ```bash 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 ``` ```` ## 部署推理服务 1. 启动并进入名为 `tuili-test` 的容器(以墨芯的 home 目录(`/home/moffett`)为例)。 ```bash # 启动容器 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 ``` ```{admonition} 须知 :class: note 后续编译、配置和服务启动操作均在容器中进行。 ``` 2. (可选)使用 `pd_separate_cpu` 或 `speculative_cpu` 策略时,设置 CPU 上执行任务的线程数。 ```bash lscpu # 查看逻辑 CPU 数量,例如 CPU(s): 112 vim /home/moffett/workspace/repos/llama_backend/python/legacy/mf_spu_backend.cc # 将 params.cpuparams.n_threads 修改为逻辑 CPU 数量,例如:112。 ``` 3. 编译 backend。 ```bash cd /home/moffett/workspace/repos/llama_backend/ bash build.sh ``` 4. 设置推理策略及使用的模型。 ```bash vim /home/moffett/workspace/repos/server_config.yaml ``` 仅修改以下字段,保留 `server_config.yaml` 中的其他字段及其原值: ```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 路径,格式为`容器内挂载的模型路径 + `,例如:`/home/moffett/workspace/moffetthub_cache/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B`。 draft_model(可选) : draft model 路径。仅当模型支持 `speculative_cpu` 策略时使用,格式同 `model`。 (start-tuili-service)= 5. 启动并检查推理服务状态。 ```bash cd /home/moffett/workspace/repos export PYTHONPATH=$PYTHONPATH:. # 将当前路径添加到 PYTHONPATH python examples/server.py > stdout.log 2>&1 & # 启动推理服务 tail -f stdout.log # 查看服务日志 ``` 保持推理服务运行。在主机上打开新的终端,执行以下命令检查容器状态,并观察设备进程: ```bash docker ps --filter name=tuili-test mx-smi list ``` 容器的 `STATUS` 列显示 `Up` 时,表示容器正在运行。`mx-smi list` 输出的进程信息可用于辅助确认设备进程状态。服务是否能够正常推理,继续执行{ref}`测试推理服务 `中的推理请求。 ```{admonition} 注意 :class: caution 修改 `server_config.yaml` 中的模型及策略后,需重启推理服务,再进行推理测试。 ``` (test-tuili-service)= ## 测试推理服务 1. 在主机上打开新的终端,进入已启动的推理服务容器。 ```bash docker exec -it tuili-test /bin/bash ``` 2. 运行测试命令。 - 单并发测试 ```bash python3 tests/one_serving_benchmark.py ``` - 多并发测试 ```bash python3 tests/multi_serving_benchmark.py --n_requests # n_requests 指定并发数量,最大不超过 8 # 示例 python3 tests/multi_serving_benchmark.py --n_requests 4 ``` 测试过程中,可通过 `tail -f stdout.log` 命令查看服务日志;可执行 `mx-smi list` 命令查看运行的进程,如果未发现相关进程,参见{ref}`“启动推理服务”步骤 `重启服务。 (stop-tuili-service)= ## 停止推理服务 推理服务使用完成后,在主机上停止并删除专用容器,避免服务持续占用设备资源: ```bash docker stop tuili-test docker rm tuili-test ``` 执行以下命令确认容器已删除且设备资源已释放: ```bash docker ps -a --filter name=tuili-test mx-smi list ``` `docker ps` 输出中不包含 `tuili-test`,且 `mx-smi list` 输出中不包含该推理服务的进程时,表示推理服务及其专用容器已停止,设备资源已释放。