基于triton vllm 部署qwen

内容分享3周前发布
1 0 0

0x00 整体介绍

基于 triton 部署 qwen ,使用triton镜像中的 vllm 执行推理请求。
假设本地工作目录 /home/ubuntu/models, 用于最终映射到 triton 实例内部的 /models目录 
假设最终可请求的url 示例: http://10.1.1.10:8000/v2/models/qwen-7b/infer
上述url 中的 qwen-7b, 就对应 models路径下的 qwen-7b目录
但真正的大模型数据是保存在 qwen-7b/1/ 这个目录下

  • /home/ubuntu/models/qwen-7b/1

另外需要手动配置两个文件:

  • /home/ubuntu/models/qwen-7b/config.pbtxt
    主要负责定义对外的交互参数定义以及GPU设置
  • /home/ubuntu/models/qwen-7b/1/model.py
    定义大模型调用

0x01 下载模型和镜像

1.第一准备模型文件

下载来源: https://modelscope.cn/models/Qwen/Qwen-7B-Chat

官方提供了几种方案,实测采用 pip modelscope 指令下载还是比较快的

# 安装ModelScope
pip3 install modelscope

# 下载整个库到默认位置 ~/.cache/modelscope
modelscope download --model Qwen/Qwen-7B-Chat

# 下载整个库到指定
modelscope download --model Qwen/Qwen-7B-Chat  --local_dir ./qwen-7b

# 下载单文件到指定目录
modelscope download --model Qwen/Qwen-7B-Chat README.md --local_dir ./dir

真正执行代码如下:

mkdir -p /home/ubuntu/models/qwen-7b
cd /home/ubuntu/models/qwen-7b
modelscope download --model Qwen/Qwen-7B-Chat  --local_dir ./1

2. triton镜像下载

参考: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver/tags
计划在 triton 中使用vllm ,所以选择下面的版本:

docker pull nvcr.io/nvidia/tritonserver:25.07-vllm-python-py3

0x02 配置文件

第一准备文件:

cd /home/ubuntu/models/qwen-7b
touch config.pbtxt
mkdir 1
cd 1
touch model.py

编辑文件 config.pbtxt

name: "qwen-7b"
backend: "python"
max_batch_size: 1
input [
  {
    name: "prompt"
    data_type: TYPE_STRING
    dims: [1]
  }
]
output [
  {
    name: "output_text"
    data_type: TYPE_STRING
    dims: [1]
  }
]
instance_group [
  {
    kind: KIND_GPU
    count: 1
  }
]

编辑文件 1/model.py

import numpy as np
import triton_python_backend_utils as pb_utils
from vllm import LLM, SamplingParams

class TritonPythonModel:
    def initialize(self, args):
        model_dir = "/models/qwen-7b/1"
        self.llm = LLM(
            model=model_dir,
            tensor_parallel_size=1,
            trust_remote_code=True
        )
        self.sampling_params = SamplingParams(
            temperature=0.7,
            top_p=0.9,
            max_tokens=512
        )

    def execute(self, requests):
        responses = []

        for request in requests:
            # 1. 获取输入
            prompt_tensor = pb_utils.get_input_tensor_by_name(request, "prompt")
            prompt = prompt_tensor.as_numpy()[0].item().decode("utf-8")

            # 2. 调用 vLLM 生成
            outputs = self.llm.generate([prompt], self.sampling_params)
            text_out = outputs[0].outputs[0].text

            # 3. 封装输出为 numpy array
            out_array = np.array([text_out.encode("utf-8")], dtype=object)
            out_tensor = pb_utils.Tensor("output_text", out_array)
            responses.append(pb_utils.InferenceResponse(output_tensors=[out_tensor]))

        return responses

0x03 启动Docker实例

docker run --gpus all -itd -p 8000-8002:8000-8002 
  --name ai_triton 
  -v /home/ubuntu/models:/models 
  nvcr.io/nvidia/tritonserver:25.07-vllm-python-py3 
  tritonserver --model-repository=/models --log-verbose=1

0x04 请求验证

curl --request POST 
  --url http://10.1.1.10:8000/v2/models/qwen-7b/infer 
  --header  Content-Type: application/json  
  --header  User-Agent: insomnia/11.4.0  
  --data  {
  "inputs": [
    {
      "name": "prompt",
      "shape": [1,1],
      "datatype": "BYTES",
      "data": ["你好,请介绍一下你自己"]
    }
  ]
}
 

结果如图:

基于triton vllm 部署qwen

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...