254 lines
8.5 KiB
Markdown
254 lines
8.5 KiB
Markdown
# 模型部署
|
||
|
||
模型部署是指将大模型运行在专属的计算资源上,使模型在独立的运行环境中高效、可靠地运行,并为业务应用提供推理服务。
|
||
|
||
## 概述
|
||
|
||
openMind Library提供了模型部署的方法,支持用户快速方便地在本地部署推理服务。当前支持的推理引擎包括:
|
||
|
||
- MindIE
|
||
- LMDeploy
|
||
- vLLM
|
||
|
||
openMind Library提供命令行接口(command-line interface, CLI),支持用户在shell环境下交互式实现部署流程。
|
||
|
||
openMind Library命令行接口内置于openMind Library中,安装openMind Library即可使用,详细步骤参考[openMind Library安装指南](../install.md)。
|
||
|
||
## 使用方法和参数配置
|
||
|
||
```shell
|
||
openmind-cli deploy model_name_or_path [--backend {mindie, lmdeploy, vllm}] [--port server_port] [--world_size world_size] [--device device] [--trust_remote_code {True, False}] [--backend_config vllm_args]
|
||
```
|
||
|
||
或者
|
||
|
||
```shell
|
||
openmind-cli deploy stop
|
||
```
|
||
|
||
- **--model_id**(`str`,*可选*,默认为`None`): openMind Library内置模型ID,支持backend为`lmdeploy`或者`vllm`。
|
||
- **model_name_or_path**(`str`,*必选*,默认为`None`):部署模型路径,支持魔乐社区模型ID或模型权重本地路径。当backend为mindie时,本地的模型来源必须为**下载清单中的模型的本地路径**。
|
||
- **--backend** (`str`,*可选*,默认为`mindie`):推理引擎,可以选择`mindie`、`lmdeploy`或者`vllm`。
|
||
- **--port**(`int`,*可选*,默认为`1025`):部署端口。
|
||
- **--world_size**(`int`,*可选*,默认为`1`):部署使用的npu卡的world_size,在backend为`mindie`时生效。world_size需要与npu_device_ids中指定的卡数目一致。
|
||
- **--device**(`str`,*可选*,默认为`0`):部署使用的npu卡号,在backend为`mindie`时生效。world_size需要与device中指定的卡数目一致。如果是需要部署多卡,传入格式如"0,1,2,3"。
|
||
- **--trust_remote_code**(`bool`,*可选*,默认为`False`):是否信任从远程下载的模型权重文件。
|
||
- **--backend_config**(`str`,*可选*,默认为`None`):在backend为`vllm`时生效,支持传入复数后端自定义参数(不同参数之间使用`,`隔开),格式参考`"tensor-parallel-size=4,dtype=bfloat16"`,支持输入json格式参数(注意使用单引号防止读取错误),格式参考`'rope-scaling={"rope_type":"dynamic","factor":2.0}'`,如:
|
||
- **tensor-parallel-size**(`int`,*可选*,默认为`1`):张量并行数,注意确保有足够的可用卡数,建议与`ASCEND_RT_VISIBLE_DEVICES`环境变量配套使用在指定卡上多卡部署。
|
||
- **dtype**(`str`,*可选*,默认为`auto`):模型权重和激活的数据类型,可选`auto`, `half`, `float16`, `bfloat16`, `float`, `float32`。
|
||
- 更多支持参数见[vllm引擎参数](https://docs.vllm.com.cn/en/latest/serving/engine_args.html).
|
||
- 使用`stop`命令可以停止MindIE的部署服务。
|
||
|
||
## MindIE
|
||
|
||
### 部署MindIE服务示例
|
||
|
||
- 从魔乐社区上获取模型`MindIE/llama2_7b`在默认端口1025上进行部署。
|
||
|
||
```shell
|
||
openmind-cli deploy MindIE/llama2_7b
|
||
```
|
||
|
||
- 使用本地`llama2_7b`模型在指定端口1025上进行部署,指定0,1号卡。
|
||
|
||
```shell
|
||
openmind-cli deploy /path/to/your/llama2_7b --backend mindie --port 1025 --world_size 2 --npu_device_ids '0,1'
|
||
```
|
||
|
||
- 停止MindIE服务
|
||
|
||
```shell
|
||
openmind-cli deploy stop
|
||
```
|
||
|
||
### 交互示例
|
||
|
||
部署成功(执行`npu-smi info`看到相关进程)后,可以在同服务器上使用curl进行交互。
|
||
|
||
- 查看模型列表`v1/models`
|
||
|
||
```shell
|
||
curl http://127.0.0.1:{port}/v1/models
|
||
```
|
||
|
||
- 对话`v1/chat/completions`
|
||
|
||
```shell
|
||
curl "http://127.0.0.1:{port}/v1/chat/completions" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"model": "llama2_7b",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "如何养生?"
|
||
}
|
||
],
|
||
"max_tokens": 128
|
||
}'
|
||
```
|
||
|
||
- 停止MindIE服务
|
||
|
||
```shell
|
||
openmind-cli deploy stop
|
||
```
|
||
|
||
## LMDeploy
|
||
|
||
### 环境准备
|
||
|
||
不同于openMind Library v1.0.0版本默认配套的PyTorch 2.1.0,当前该接口的LMDeploy部署能力依赖于PyTorch 2.3.1版本,即使用该功能需要修改环境中的PyTorch版本。对此,我们强烈建议用户创建新环境进行模型部署,新建环境可参考[openMind Library安装指南](../install.md)。
|
||
|
||
在安装LMDeploy之前,请确保环境中存在`setuptools`和`wheel`。另外,可执行以下命令检验torch_npu以及NPU环境是否可用,以确保LMDeploy顺利安装。
|
||
|
||
```shell
|
||
python -c "import torch_npu;print(torch_npu.npu.is_available());"
|
||
|
||
'''
|
||
True
|
||
'''
|
||
```
|
||
|
||
LMDeploy安装命令如下:
|
||
|
||
```shell
|
||
git clone -b v0.6.4 https://github.com/InternLM/lmdeploy.git
|
||
cd lmdeploy
|
||
pip install -e .
|
||
pip install dlinfer-ascend==0.1.7
|
||
```
|
||
|
||
主要版本配套说明如下:
|
||
|
||
| 软件 | 支持版本 |
|
||
|------------------|---------------------|
|
||
| torch | 2.3.1 |
|
||
| torch-npu | 2.3.1 |
|
||
| lmdeploy | 0.6.4 |
|
||
| dlinfer-ascend | 0.1.7 |
|
||
| transformers | 4.47.1 |
|
||
| accelerate | 1.0.0rc1 |
|
||
|
||
### 部署LMDeploy服务示例
|
||
|
||
- 从魔乐社区上获取模型`AI-Research/Qwen2-7B`在默认端口1025上进行部署。
|
||
|
||
```shell
|
||
openmind-cli deploy AI-Research/Qwen2-7B --backend lmdeploy
|
||
```
|
||
|
||
- 使用本地`Qwen2-7B`模型在指定端口1025上进行部署。
|
||
|
||
```shell
|
||
openmind-cli deploy /path/to/your/Qwen2-7B --backend lmdeploy --port 1025
|
||
```
|
||
|
||
### 交互示例
|
||
|
||
部署成功后,可以在同服务器上使用curl进行交互。
|
||
|
||
- 查看模型列表`v1/models`
|
||
|
||
```shell
|
||
curl http://127.0.0.1:1025/v1/models
|
||
```
|
||
|
||
- 对话`v1/chat/completions`
|
||
|
||
```shell
|
||
curl http://127.0.0.1:1025/v1/chat/completions \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{
|
||
"model": "AI-Research/Qwen2-7B",
|
||
"messages": "推荐一个海边度假的地方"
|
||
}'
|
||
```
|
||
|
||
## vLLM
|
||
|
||
### 环境准备
|
||
|
||
基于openMind Library基础环境,vLLM还需要满足以下软件配置要求:
|
||
|
||
- Python >= 3.9
|
||
- CANN == 8.1.RC1
|
||
- PyTorch == 2.6.0
|
||
- torch-npu == 2.6.0rc1
|
||
- vllm == 0.7.3
|
||
- vllm-ascend == 0.7.3rc2
|
||
|
||
确保固件驱动和CANN安装配置无误后,可以执行以下命令安装:
|
||
|
||
```shell
|
||
# 安装vllm和torch
|
||
pip install vllm==0.7.3
|
||
pip install torch==2.6.0
|
||
|
||
# 安装配套的torchvision, torchaudio和torch-npu
|
||
pip install torchvision==0.21.0
|
||
pip install torchaudio==2.6.0
|
||
pip install torch-npu==2.6.0rc1
|
||
|
||
#安装vllm-ascend
|
||
pip install vllm-ascend==0.7.3rc2
|
||
```
|
||
|
||
更加详细的安装教程可参考[vllm-ascend环境准备教程](https://github.com/vllm-project/vllm-ascend/blob/v0.7.3rc2/docs/source/installation.md)。
|
||
|
||
### 部署vLLM服务示例
|
||
|
||
- 从魔乐社区上获取模型`AI-Research/Qwen2.5-7B`在默认端口1025上进行部署。
|
||
|
||
```shell
|
||
openmind-cli deploy --model_name_or_path AI-Research/Qwen2.5-7B --backend vllm
|
||
```
|
||
|
||
- 使用本地`Qwen2.5-7B`模型在指定端口1025上进行多卡部署,指定0,1,2,3号卡,指定模型权重和激活的数据类型为bf16。
|
||
|
||
```shell
|
||
ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 openmind-cli deploy \
|
||
--model_name_or_path /path/to/your/Qwen2.5-7B \
|
||
--backend vllm \
|
||
--port 1025 \
|
||
--backend_config "tensor-parallel-size=4,dtype=bfloat16"
|
||
```
|
||
|
||
### 交互示例
|
||
|
||
部署成功后,可以在同服务器上使用curl进行交互。
|
||
|
||
- 查看模型列表`v1/models`
|
||
|
||
```shell
|
||
curl http://127.0.0.1:1025/v1/models | python3 -m json.tool
|
||
```
|
||
|
||
- 文本补全`v1/completions`
|
||
|
||
```shell
|
||
curl http://127.0.0.1:1025/v1/completions \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"model": "AI-Research/Qwen2.5-7B",
|
||
"prompt": "Beijing is a",
|
||
"max_tokens": 5,
|
||
"temperature": 0
|
||
}' | python3 -m json.tool
|
||
```
|
||
|
||
- 对话`v1/chat/completions`
|
||
|
||
```shell
|
||
curl http://127.0.0.1:1025/v1/chat/completions \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"model": "AI-Research/Qwen2.5-7B",
|
||
"messages": [{"role": "user", "content": "Recommend a place for a seaside holiday."}],
|
||
"max_tokens": 64,
|
||
"temperature": 0
|
||
}' | python3 -m json.tool
|
||
```
|
||
|
||
`openmind-cli deploy`的全量参数可以参考[openmind-cli deploy接口](../api_reference/apis/cli_api.md#openmind-cli-deploy接口)。
|