Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
275 changes: 257 additions & 18 deletions 04.MindSpore_LLM_Infer_Course/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<div align=center>
<h1>课程名称</h1>
<h1>vLLM-MindSpore推理部署课程</h1>
<p><a href="./README.md">View English</a></p>
</div>

(1-2句话点名项目核心价值)项目仓介绍
本课程旨在帮助开发者快速掌握基于MindSpore Transformers和vLLM-MindSpore的大模型推理部署技术,涵盖从环境搭建、服务化启动到高级特性配置的全流程实践

## 📢 最新消息

- 2025-10-21 「课程更新」:新增XXX课程,包含完整视频、课件及代码案例。([查看详情](xxxx))
- 2025-10-18 「功能优化」:项目仓完成重构,查找课程资源更清晰,新增PR检查门禁,合入内容更规范。([查看详情](xxx))
- 2025-10-10 「Bug修复」:修复xxxxxx问题,感谢@username的PR贡献。([查看详情](xxxx))
- 2025-12-21 「课程更新」:新增vLLM-MindSpore服务化部署课程,支持Multi-LoRA与Function Call特性。([查看详情](#))
- 2025-12-18 「功能优化」:项目仓完成重构,优化文档结构,新增混合并行部署示例。([查看详情](#))
- 2025-12-10 「Bug修复」:修复vLLM-MindSpore启动脚本中的参数解析问题,感谢社区贡献。([查看详情](#))

## 前置知识

Expand Down Expand Up @@ -42,21 +42,260 @@ pip install requirements.txt

## 课程内容

| 序号 | 课节 | 简介 | 课程资源 | 能力认证入口 |
| :-- | :------ | :--------------- | :----------------------- | :---------- |
| 1 | xxx | xxx | [PPT](跳转链接) · [代码](跳转链接) · [视频](跳转链接) · [云沙箱实验](跳转链接) · [学习路径](跳转链接) | |
| 2 | xxx | xxx | [PPT](跳转链接) · [代码](跳转链接) · [视频](跳转链接) · [云沙箱实验](跳转链接) · [学习路径](跳转链接) | [初级认证入口](xxxx) |
| 3 | xxx | xxx | [PPT](跳转链接) · [代码](跳转链接) · [视频](跳转链接) · [云沙箱实验](跳转链接) · [学习路径](跳转链接) | |
| 4 | xxx | xxx | [PPT](跳转链接) · [代码](跳转链接) · [视频](跳转链接) · [云沙箱实验](跳转链接) · [学习路径](跳转链接) | [中级认证入口](xxxx) |
| 序号 | 课节 | 简介 | 视频 |
| :-- | :------ | :--------------- | :----------------------- |
| 1 | vLLM-MindSpore服务化部署 | 学习vLLM-MindSpore的安装、启动及参数配置。 | [观看](https://www.bilibili.com/video/BV1Ys1aBxEFD/?share_source=copy_web&vd_source=fd4588b77d7b0209a532d9279088f606) |
| 2 | 大模型推理高级特性 | 深入理解Chunked Prefill、Prefix Caching等优化技术。 | [观看](https://www.bilibili.com/video/BV1Ys1aBxEFD/?share_source=copy_web&vd_source=fd4588b77d7b0209a532d9279088f606) |
| 3 | 混合并行与量化推理 | 掌握混合并行部署及模型量化推理的最佳实践。 | [观看](https://www.bilibili.com/video/BV1Ys1aBxEFD/?share_source=copy_web&vd_source=fd4588b77d7b0209a532d9279088f606) |

# 服务化部署与评测指导

## 目录
- [安装部署](#安装部署)
- [服务化启动参数](#服务化启动参数)
- [关键特性配置](#关键特性配置)
- [Prefix Caching](#prefix-caching)
- [Chunked Prefill](#chunked-prefill)
- [Multi-LoRA](#multi-lora)
- [Function Call](#function-call)
- [混合并行服务化部署示例](#混合并行服务化部署示例)
- [量化推理](#量化推理)
- [评测工具使用](#评测工具使用)
- [精度评测](#精度评测)
- [性能评测](#性能评测)
- [启动服务](#启动服务)
- [发送请求](#发送请求)


## 安装部署

详细安装步骤请参考官方文档:[安装指南](https://www.mindspore.cn/vllm_mindspore/docs/zh-CN/master/getting_started/installation/installation.html)


## 关键特性配置

### Prefix Caching

#### 示例命令
```bash
python -m vllm.entrypoints.openai.api_server \
--model /path/to/model \
--tensor-parallel-size=2 \
--enable-prefix-caching
```

### Chunked Prefill

#### 示例命令

```bash
export VLLM_USE_V1=0

vllm-mindspore serve Qwen3-8B \
--trust-remote-code \
--max-num-seqs 32 \
--max-model-len 16384 \
--block-size 128 \
--gpu-memory-utilization 0.9 \
--max-num-batched-tokens 2048 \
--enable-chunked-prefill
```

### Multi-LoRA
#### Multi-LoRA服务化部署示例

**启动服务**
```bash
vllm-mindspore serve /home/ckpt/qwen2.5-7b-hf \
--tensor_parallel_size=1 \
--gpu-memory-utilization=0.9 \
--max_model_len=800 \
--enable-lora \
--lora-modules lora1='/home/ckpt/qwen2.5-7b-lora-law' lora2='/home/ckpt/qwen2.5-7b-lora-medical' \
--max_loras=3 \
--max_lora_rank=64
```

**服务化示例**
```bash
# 请求1
curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d \
'{"model": "/home/ckpt/qwen2.5-7b-hf", "prompt": "违章停车与违法停车是否有区别?", \
"model": "lora1", "max_tokens": 20, "temperature": 0, "top_p": 1.0, "top_k": -1, \
"repetition_penalty": 1.0}'

# 请求2
curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d \
'{"model": "/home/ckpt/qwen2.5-7b-hf", "prompt": "血液有哪些成分?", "model": "lora2", \
"max_tokens": 20, "temperature": 0, "top_p": 1.0, "top_k": -1, \
"repetition_penalty": 1.0}'
```

### Function Call
#### Function Call 服务化部署示例

**启动服务**
```bash
vllm-mindspore serve /hf_quant_ckpt/V3-0324-A8W8 \
--trust_remote_code \
--tensor_parallel_size=16 \
--max-num-seqs=192 \
--max_model_len=65536 \
--max-num-batched-tokens=4096 \
--block-size=128 \
--gpu-memory-utilization=0.9 \
--quantization golden-stick \
--enable-chunked-prefill \
--enable-auto-tool-choice \
--tool-call-parser deepseek_v3 \
--chat-template tool_chat_template.jinja
```

## 混合并行服务化部署示例

#### 示例1:Ray启动
**Step1:主节点启动ray**
```bash
ray start --head --port=<port-to-ray>
```

**Step2:从节点通过ray链接主节点**
```bash
ray start --address=<head_node_ip>:<port>
ray status
```

**Step3:主节点启动服务**
```bash
vllm-mindspore serve /data/dsr1-w8a8 \
--trust-remote-code \
--max-num-seqs=256 \
--max-model-len=16384 \
--max-num-batched-tokens 2048 \
--block-size=128 \
--gpu-memory-utilization=0.93 \
--tensor-parallel-size 4 \
--data-parallel-size 4 \
--data-parallel-size-local 2 \
--data-parallel-backend=ray \
--enable-expert-parallel \
--additional-config '{"expert_parallel": 4}' \
--quantization ascend
```

#### 示例2:Multiprocess启动
**Step1:主节点启动命令**
```bash
vllm-mindspore serve /data/dsr1-w8a8/ \
--trust_remote_code --host 0.0.0.0 --port 8000 \
--max-num-seqs 256 --max-num-batched-tokens 2048 \
--max_model_len 16384 --block-size 128 \
--gpu-memory-utilization 0.93 --quantization ascend \
--tensor-parallel-size 4 --data-parallel-size 4 \
--data-parallel-size-local 2 --data-parallel-start-rank 0 \
--data-parallel-address {head_node_ip} \
--data-parallel-rpc-port 8888 \
--enable-expert-parallel \
--additional-config '{"expert_parallel": 4}'
```

**Step2:从节点启动命令**
```bash
vllm-mindspore serve /data/dsr1-w8a8/ \
--trust_remote_code --host 0.0.0.0 --port 8000 \
--max-num-seqs 256 --max-num-batched-tokens 2048 \
--max_model_len 16384 --block-size 128 \
--gpu-memory-utilization 0.93 --quantization ascend \
--tensor-parallel-size 4 --data-parallel-size 4 \
--data-parallel-size-local 2 --data-parallel-start-rank 2 \
--data-parallel-address {head_node_ip} \
--data-parallel-rpc-port 8888 \
--enable-expert-parallel --headless \
--additional-config '{"expert_parallel": 4}'
```


## 量化推理

#### 调用命令

**金箍棒量化的权重:**
```bash
vllm-mindspore serve Qwen3-32B-gs-A8W8 \
--port 8888 \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.75 \
--max-num-batched-tokens 4096 \
--block_size 32 \
--quantization golden-stick
```

**ModelSlim量化的权重:**
```bash
vllm-mindspore serve Qwen3-32B-modelslim \
--port 8888 \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.75 \
--max-num-batched-tokens 4096 \
--block_size 32 \
--quantization ascend
```

## 评测工具使用

ais_bench 是昇腾提供的 AI 性能测试工具,用于对模型进行基准测试。

**仓库地址:** [https://gitee.com/aisbench/benchmark](https://gitee.com/aisbench/benchmark)

### 精度评测
```bash
# 修改配置文件
# 配置文件位于 ais_bench 仓库中:ais_bench/benchmark/configs/models/vllm_api/vllm_api_general_chat.py
# 建议先克隆仓库并安装依赖

# 启动评测
# run_benchmark.py 是工具包中的主程序脚本
python run_benchmark.py --models vllm_api_general --datasets gsm8k_gen_0_shot_cot_str
```

### 性能评测
```bash
# 修改配置文件
# 配置文件位于 ais_bench 仓库中:ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py

# 启动性能评测
python run_benchmark.py --mode perf
```

## 启动服务
```bash
vllm-mindspore serve ${MODEL_PATH} \
--trust-remote-code \
--max-num-seqs 32 \
--max-model-len 4096 \
--block-size 128 \
--gpu-memory-utilization 0.9
```

## 发送请求
```bash
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/home/ckpt/Qwen3-8B",
"temperature": 0,
"max_tokens": 20,
"prompt": "Qwen3 is"
}'
```

## 版本维护

项目随昇思MindSpore及昇思MindSpore NLP套件迭代同步发布版本,本项目仓每**半年**进行版本发布。
项目随昇思MindSpore及vllm-mindspore迭代同步发布版本,本项目仓每**半年**进行版本发布。

| 版本名 | Python | MindSpore | MindSpore NLP |
| :----- | :----- |:------ |:------ |
| master | xxx | xxx | xxx |
| r1.0 | xxx | xxx | xxx |
| 版本名 | Python | MindSpore | MindFormers | vllm|
| :----- | :----- |:------ |:------ | :------ |
| r0.3.0 | 3.11 | r2.7.0 | r1.6.0 | v0.8.3|

## 常见问题(FAQ)

Expand All @@ -75,7 +314,7 @@ pip install requirements.txt
向本项目的贡献者们致以最诚挚的感谢!

<div align=center style="margin-top: 30px;">
<a href="https://github.com/mindspore-courses/MindSpore-Compatible-Distributed-Training-Principles-and-Practices/graphs/contributors">
<img src="https://contrib.rocks/image?repo=mindspore-courses/MindSpore-Compatible-Distributed-Training-Principles-and-Practices" />
<a href="https://github.com/mindspore-lab/step_into_llm/graphs/contributors">
<img src="https://contrib.rocks/image?repo=mindspore-lab/step_into_llm" />
</a>
</div>