阿里云国际代理商:人工智能平台 PAI-Triton Inference Server镜像部署

Triton Inference Server是NVIDIA开发的推理服务引擎,支持TensorRT、TensorFlow、PyTorch、ONNX等多种AI框架的模型部署为在线推理服务,并提供多模型管理和自定义backend能力。您可以在PAI-EAS上快速部署基于Triton的推理服务。

前提条件

  • 与 PAI 同地域的对象存储 OSS Bucket。

  • 已训练好的模型文件(如 .pt.onnx.plan.savedmodel)。

快速入门:部署单模型服务

步骤一:准备模型仓库

Triton 要求在对象存储 OSS Bucket 中使用特定的目录结构。
请按以下格式创建目录。

oss://your-bucket/models/triton/
└── your_model_name/
    ├── 1/                    # 版本目录(必须为数字)
    │   └── model.pt          # 模型文件
    └── config.pbtxt          # 模型配置文件

关键要求:

  • 版本目录必须使用数字命名(123 等)。

  • 数字越大表示版本越新。

  • 每个模型都需要一个 config.pbtxt 配置文件。

步骤二:创建模型配置文件

创建 config.pbtxt 文件,配置模型的基础信息。

配置参数说明

参数

是否必选

说明

name

模型名称。如指定,必须与模型目录名一致。

platform

模型框架。可选值:pytorch_libtorchtensorflow_savedmodeltensorflow_graphdeftensorrt_planonnxruntime_onnx

backend

platform 的替代配置。使用 python 可自定义推理逻辑。

max_batch_size

最大批处理大小。设为 0 表示禁用批处理。

input

输入张量配置:name(名称)、data_type(数据类型)、dims(维度)。

output

输出张量配置:name(名称)、data_type(数据类型)、dims(维度)。

instance_group

指定推理设备:KIND_GPU 或 KIND_CPU(配置示例见前文config.pbtxt文件)。

version_policy

控制加载哪些模型版本(配置示例见前文config.pbtxt文件)。

重要

platform 和 backend 至少配置一项。

步骤三:部署服务

  1. 登录PAI控制台,在页面上方选择目标地域。

  2. 在左侧导航栏单击模型在线服务(EAS),选择目标工作空间,然后单击部署服务

  3. 场景化模型部署区域,单击Triton部署

  4. 配置部署参数:

    • 服务名称:自定义服务名称。

    • 模型配置:配置类型选择对象存储(OSS),填写模型仓库路径(如 oss://your-bucket/models/triton/)。

    • 副本数资源规格按需选择。估算模型部署所需显存您可参考估算大模型所需显存。

  5. 单击部署,等待服务启动完成。

步骤四:启用gRPC(可选)

默认情况下,Triton 在端口 8000 提供 HTTP 服务。如需使用 gRPC:

  1. 单击服务配置页面右上角的切换为自定义部署

  2. 环境信息区域,将端口号修改为 8001

  3. 服务功能 > 高级网络下,启用gRPC

  4. 单击部署

模型部署成功后即可调用服务。

部署多模型服务

如需在单个 Triton 实例中部署多个模型,只需将多个模型放在同一仓库目录下:

oss://your-bucket/models/triton/
├── resnet50_pytorch/
│   ├── 1/
│   │   └── model.pt
│   └── config.pbtxt
├── densenet_onnx/
│   ├── 1/
│   │   └── model.onnx
│   └── config.pbtxt
└── classifier_tensorflow/
    ├── 1/
    │   └── model.savedmodel/
    │       ├── saved_model.pb
    │       └── variables/
    └── config.pbtxt

部署步骤与单模型相同。Triton 会自动加载仓库中的所有模型。

使用Python Backend自定义推理逻辑

当您需要自定义预处理、后处理或推理逻辑时,可以使用 Triton 的 Python Backend。

目录结构

your_model_name/
├── 1/
│   ├── model.pt          # 模型文件
│   └── model.py          # 自定义推理逻辑
└── config.pbtxt

实现Python Backend

创建 model.py 文件,定义 TritonPythonModel 类.

重要:

当使用Python Backend时,Triton的某些行为会发生改变,请务必注意:

  • max_batch_size 失效config.pbtxt中的max_batch_size参数对Python Backend的动态批处理无效。您必须在execute方法中自行遍历requests列表,手动拼接Batch进行推理。

  • instance_group 失效config.pbtxt中的instance_group无法控制Python Backend使用CPU或GPU。您必须在initializeexecute方法中,通过代码(如 pytorch_tensor.to(torch.device("cuda")))显式地将模型和数据移动到目标设备。

还可参考示例,更新配置文件。

部署服务

使用Python backend必须设置共享内存。在自定义模型部署 > JSON独立部署填写如下JSON配置并部署。

{
  "metadata": {
    "name": "triton_server_test",
    "instance": 1
  },
  "cloud": {
        "computing": {
            "instance_type": "ml.gu7i.c8m30.1-gu30",
            "instances": null
        }
    },
  "containers": [
    {
      "command": "tritonserver --model-repository=/models",
      "image": "eas-registry-vpc.<region>.cr.aliyuncs.com/pai-eas/tritonserver:25.03-py3",
      "port": 8000,
      "prepare": {
        "pythonRequirements": [
          "torch==2.0.1"
        ]
      }
    }
  ],
  "storage": [
    {
      "mount_path": "/models",
      "oss": {
        "path": "oss://oss-test/models/triton_backend/"
      }
    },
    {
      "empty_dir": {
        "medium": "memory",
        // 配置共享内存为1 GB。
        "size_limit": 1
      },
      "mount_path": "/dev/shm"
    }
  ]
}

关键JSON配置说明

  • containers[0].image: Triton官方镜像。请将 cn-hangzhou 替换为您服务所在的地域。

  • containers[0].prepare.pythonRequirements: 在此列出您的Python依赖库,EAS会在服务启动前自动安装。

  • storage: 包含两个挂载项。

    • 第一个将您的OSS模型仓库路径挂载到容器的 /models 目录。

    • 第二个是必须配置的共享内存。Triton Server与Python Backend进程之间通过共享内存 /dev/shm 传递张量数据以实现零拷贝,从而最大化性能。size_limit 单位为GB,请根据模型和并发量估算所需大小。

调用服务

获取服务端点和Token

  1. 进入模型在线服务(EAS)页面,单击服务名称。

  2. 服务详情页签,单击查看调用信息,复制公网调用地址Token

发送HTTP请求

端口号配置为8000时,服务支持发送HTTP请求。

发送gRPC请求

端口号配置为8001,并添加gRPC相关配置后,服务支持发送gRPC请求。

重要

注意:gRPC的访问地址和HTTP的不相同,请重新从服务详情页面获取。

调试技巧

启用详细日志

设置 verbose=True 可打印请求和响应的 JSON 数据:

client = httpclient.InferenceServerClient(url=url, verbose=True)

在线调试

可以直接在控制台的在线调试功能中进行测试,请求地址补全为/api/predict/triton_test/v2/models/resnet50_pt/versions/1/infer,Body使用详细日志中的 JSON 请求数据。

发送请求后返回 Status Code 200,响应 Body 中包含 model_version:"1",输出名称为 OUTPUT__0,数据类型为 FP32,shape 为 [1,1000],data 为浮点数数组,表明推理请求成功。

压测服务

以单个数据压测为例,操作步骤如下。更多压测说明请参见服务压测:

  1. 压测任务页签,单击添加压测任务,选择已部署的Triton服务,并填写压测地址。

  2. 数据来源选择单个数据,并参考如下代码将JSON请求体转换为Base64编码的字符串。

    import base64
    
    # 已有的 JSON 请求体字符串
    json_str = '{"inputs":[{"name":"INPUT__0","shape":[1,3,32,32],"datatype":"FP32","data":[1.0,1.0,.....,1.0]}]}'
    # 直接编码
    base64_str = base64.b64encode(json_str.encode('utf-8')).decode('ascii')
    print(base64_str)

    添加压测任务页面完成以下配置:

    • 所属服务:选择目标 Triton 服务。

    • 压测地址:路径部分填写为 /api/predict/triton_xxx/v2/models/resnet50_pt/versions/1/infer

    • 单个数据:将上述 Base64 编码结果粘贴至文本框。

    • 压测时长上限:300 秒。

    • 压测 QPS 上限:64000。

常见问题

Q:出现报错:CUDA error: no kernel image is available for execution on the device,怎么办?

出现该报错的原因是镜像版本与GPU的兼容性问题,您可以尝试更换其他GPU型号的规格,如:A10、T4。

Q:使用HTTP调用报错:tritonclient.utils.InferenceServerException: url should not include the scheme,怎么解决?

出现该报错的原因是服务的url填写错误。获取服务端点的格式为:http://17519301*******.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/wen*****注意,其与gRPC的访问地址不同),请去掉开头的http://

Q:使用gRPC调用报错:DNS resolution failed for wenyu****.175193***43.cn-hangzhou.pai-eas.aliyuncs.com/:80,怎么解决?

出现该报错的原因是服务的host填写错误。获取服务端点的格式为:http://we*****.1751930*****.cn-hangzhou.pai-eas.aliyuncs.com/注意,其与HTTP的访问地址不同),请去掉开头的http:// 以及末尾的/,然后在末尾补:80,最终变成:we*****.1751930*****.cn-hangzhou.pai-eas.aliyuncs.com:80

 

相关新闻

联系我们

联系我们

电报:@yunshuguoji

邮件:yunshuguoji@outlook.com

工作时间:早上8:00-晚上11:00

认准电报
认准电报
分享本页
返回顶部