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": ["你好,请介绍一下你自己"]
}
]
}
'
结果如图:
image.png
0x05 251210更新: vllm 运行Qwen3-Coder
- 下载模型
modelscope download --model Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8
- 执行:
python -m vllm.entrypoints.openai.api_server \
--model ~/.cache/modelscope/hub/models/Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8 \
--dtype auto \
--max-model-len 32768 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.95 \
--port 8000
- 测试
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-Coder-30B",
"messages": [{"role": "user", "content": "用 Python 写一个快速排序"}],
"max_tokens": 500,
"temperature": 0.3
}'












网友评论