110 lines
6.7 KiB
Markdown
110 lines
6.7 KiB
Markdown
# 大模型服务化部署-快速开始教程
|
||
|
||
*该部署工具是基于英伟达 Triton 框架专为服务器场景的大模型服务化部署而设计。它提供了支持 gRPC、HTTP 协议的服务接口,以及流式 Token 输出能力。底层推理引擎支持连续批处理、weight only int8、后训练量化(PTQ)等加速优化策略,为用户带来易用且高性能的部署体验。*
|
||
|
||
## 快速开始
|
||
|
||
基于预编译镜像部署,**使用飞桨静态图模型部署**。本节以a100/v100机器跑 meta-llama/Meta-Llama-3-8B-Instruct bf16 推理为例子。其他模型需按照要求导出为**静态图模型格式**。更多模型请参考[LLaMA](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/llama.md)、[Qwen](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/qwen.md)、[DeepSeek](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/deepseek.md)、[Mixtral](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/mixtral.md), 更细致的模型推理、量化教程可以参考[大模型推理教程](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/inference.md)
|
||
|
||
|
||
### 支持镜像
|
||
|
||
|cuda版本| 支持硬件架构|镜像地址|支持的典型设备|
|
||
|:------|:-:|:-:|:-:|
|
||
| cuda11.8 | 70 75 80 86 |ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda118-cudnn8-v2.3 |V100,T4,A100,A30,A10 |
|
||
| cuda12.4 | 80 86 89 90 |ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.3 |A100,A30,A10,L20,H20,H800 |
|
||
|
||
### 静态图快速部署
|
||
|
||
该方法仅支持[可一键跑通的模型列表](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/static_models.md)中的模型进行一键启动推理服务。
|
||
|
||
为了避免模型过大导致的下载时间过长问题,我们直接提供了自动下载的脚本(参考文档[服务化部署流程](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/deploy_usage_tutorial.md)),支持下载后再启动服务进行推理。进入容器后根据单机或多机模型进行静态图下载。
|
||
|
||
`MODEL_PATH` 为指定模型下载的存储路径,可自行指定
|
||
`model_name` 为指定下载模型名称,具体支持模型可查看[文档](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/static_models.md)
|
||
|
||
Note:
|
||
1. 请保证 shm-size >= 5,不然可能会导致服务启动失败
|
||
2. 部署前请确认模型所需要的环境和硬件,请参考[文档](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/static_models.md)
|
||
|
||
|
||
**A100部署示例**
|
||
```shell
|
||
export MODEL_PATH=${MODEL_PATH:-$PWD}
|
||
export model_name=${model_name:-"deepseek-ai/DeepSeek-R1-Distill-Llama-8B/weight_only_int8"}
|
||
docker run -i --rm --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \
|
||
-v $MODEL_PATH:/models -e "model_name=${model_name}" \
|
||
-dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.3 /bin/bash \
|
||
-c -ex 'start_server $model_name && tail -f /dev/null'
|
||
```
|
||
|
||
|
||
**V100部署示例**
|
||
>注意:float16精度下可能出现计算溢出,可以使用export FLAGS_blha_use_fp32_qk_sum=1 避免溢出
|
||
```shell
|
||
export MODEL_PATH=${MODEL_PATH:-$PWD}
|
||
export model_name=${model_name:-"meta-llama/Meta-Llama-3-8B-Instruct-Block-Attn/float16"}
|
||
docker run -i --rm --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \
|
||
-v $MODEL_PATH:/models -e "model_name=${model_name}" \
|
||
-dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda118-cudnn8-v2.3 /bin/bash \
|
||
-c -ex 'start_server $model_name && tail -f /dev/null'
|
||
```
|
||
|
||
### 服务测试
|
||
```
|
||
curl 127.0.0.1:9965/v1/chat/completions \
|
||
-H'Content-Type: application/json' \
|
||
-d'{"text": "hello, llm"}'
|
||
```
|
||
### 用户手动导出静态图部署
|
||
|
||
不支持一键导出的模型暂时仅支持用户自行导出进行服务化推理,可参考以下内容进行推理服务化部署
|
||
|
||
#### 模型导出
|
||
|
||
高性能部署需要先将动态图模型,导出为静态图推理格式,针对A100/V100机器的导出命令如下:
|
||
|
||
> MODEL_PATH #静态图模型存放地址
|
||
> --dtype #可选择导出精度
|
||
> --append_attn #仅sm>=80的机器支持
|
||
> --block_attn #支持sm<80的机器导出,如果append_attn无法推理可直接替换成block_attn
|
||
>[sm对应GPU型号查询](https://developer.nvidia.com/cuda-gpus)
|
||
|
||
**A100部署示例**
|
||
```shell
|
||
export MODEL_PATH=${MODEL_PATH:-$PWD}
|
||
docker run -i --rm --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \
|
||
-v $MODEL_PATH/:/models -dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.3 /bin/bash \
|
||
-c -ex 'cd /opt/source/PaddleNLP &&export PYTHONPATH=$PWD:$PYTHONPATH && cd llm && python3 predict/export_model.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --output_path /models --dtype bfloat16 --inference_model 1 --append_attn 1'\
|
||
&& docker logs -f $(docker ps -lq)
|
||
```
|
||
|
||
**V100部署示例**
|
||
>⚠️ v100由于硬件指令限制,仅支持float16
|
||
```shell
|
||
export MODEL_PATH=${MODEL_PATH:-$PWD}
|
||
docker run -i --rm --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \
|
||
-v $MODEL_PATH/:/models -dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda118-cudnn8-v2.3 /bin/bash \
|
||
-c -ex 'cd /opt/source/PaddleNLP &&export PYTHONPATH=$PWD:$PYTHONPATH&& cd llm && python3 predict/export_model.py --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --output_path /models --dtype float16 --inference_model 1 --block_attn'\
|
||
&& docker logs -f $(docker ps -lq)
|
||
```
|
||
|
||
### 服务化推理
|
||
具体的部署细节以及参数说明可以查看[文档](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/deploy_usage_tutorial.md)
|
||
|
||
>注意:v100在float16精度下可能出现计算溢出,可以使用export FLAGS_blha_use_fp32_qk_sum=1 避免溢出
|
||
```shell
|
||
export docker_img=ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.3
|
||
# v100 export docker_img=ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda118-cudnn8-v2.3
|
||
export MODEL_PATH=${MODEL_PATH:-$PWD}
|
||
docker run --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \
|
||
-v $MODEL_PATH/:/models -dit $docker_img /bin/bash \
|
||
-c -ex 'start_server && tail -f /dev/null'
|
||
```
|
||
|
||
|
||
**更多文档**
|
||
|
||
- 部署工具详细说明请查看[服务化部署流程](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/deploy_usage_tutorial.md)
|
||
- 静态图支持模型请查看[静态图模型下载支持](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/static_models.md)
|