news 2026/5/10 2:35:27

CANN/triton-inference-server-ge-backend快速入门指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/triton-inference-server-ge-backend快速入门指南

快速开始

【免费下载链接】triton-inference-server-ge-backendge-backend基于triton inference server框架实现对接NPU生态,快速实现传统CV\NLP等模型的服务化。项目地址: https://gitcode.com/cann/triton-inference-server-ge-backend

本文档通过实例,展示模型文件制作、服务启动、尝试推理、性能测试整个流程,帮助用户快速熟悉、使用本插件。

环境准备

若使用910B或310P,可以直接在AscendHub获取相关容器运行,其余型号可根据以下教程制作。

AscendHub 镜像获取

登录昇腾镜像仓库 https://www.hiascend.com/developer/ascendhub
搜索 "triton-inference-server-ge-backend"
根据昇腾卡片信息选择选择相应的镜像版本(目前仅上传910B、310P基于cann8.3.rc1的版本,其余版本需要用户自行生成镜像)

自制镜像

项目中提供了910B的镜像制作文件,可参考项目中的'Dockerfile' 进行创建。若使用不同型号、不同版本cann,需自行更换初始镜像。

进入容器

执行以下命令进入容器:

docker run -itd --privileged --name=triton_npu --net=host --shm-size=500g \ --device /dev/davinci1 \ --device /dev/davinci_manager \ --device /dev/devmm_svm \ --device /dev/hisi_hdc \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \ -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /data/:/data/ \ -v /home/:/home/ \ -it {镜像名称} bash docker exec -it triton_npu bash

编译 ge backend

若使用AscendHub镜像,相关二进制已放在/opt/tritonserver 相关目录下,无需二次编译。
若自行编译,需参考Dockerfile进行环境配置后,执行以下指令进行编译:

git clone https://gitcode.com/cann/triton-inference-server-ge-backend.git cd triton-inference-server-ge-backend export TRITON_HOME_PATH=/opt/tritonserver bash build.sh

执行完成后,会在{TRITON_HOME_PATH}的backends目录下创建npu_ge文件夹以及相关的.so文件

执行推理

目前项目统一需要将模型转换为onnx或TensorFlow的冻结图pb文件进行在线编译。

Torch模型转换为onnx

因昇腾目前适配并不支持最新的onnx版本,相关模型若要在NPU上推理需要用户自行导出,不要使用官方下载的onnx文件,有可能会导致模型编译、推理报错!!!
可使用torch自带能力进行导出,导出

import torch.onnx torch.onnx.export(model, (image, text), 'model.onnx', input_names=['image','text'], output_names=['unnorm_image_features',"unnorm_text_features"], dynamic_axes={ 'image':{0:"bs", 2:"width", 3:"height"}, 'text':{0:"bs"}, 'unnorm_image_features':{0:"bs", 2:"width", 3:"height"}, 'unnorm_text_features':{0:"bs", 2:"width", 3:"height"} }, export_params=True, do_constant_folding=False, opset_version=14, verbose=True)

其中: model.onnx 为生成的onnx文件名称;
input_names 为对应的入参名称;
output_names 为对应的出参名称;
opset_version 为使用的编译版本,默认建议选择14版本。具体请参考昇腾文档;
dynamic_axes 为动态轴,比如image 的第0轴为 batchsize,则需要声明 {0:"bs"}。 其余字段若有疑问请参考官方文档 torch.onnx.export 接口说明。

注意:
当前版本仅支持0轴为bs。 非0轴支持动态,但为了支持NPU计算过程,需要声明时满足output中出现的轴名称在input中存在,或output中的轴名称为计算过程,可以通过input中已存在的值进行计算得出

  • 例1:output值 'unnorm_text_features':{0:"bs", 2:"width", 3:"height"} 中出现的所有动态轴名称在input中均存在;
  • 例2:output值 'unnorm_text_features':{0:"bs", 2:"width3600/2+height"} 中2轴为计算公式,可以通过计算得出相应的轴大小。当前仅支持 +-/() 运算符。

执行完成后会在当前路径下生成 model.onnx 模型文件。

生成的onnx文件可以使用 onnxsim 工具进行优化。

pip install onnxsim onnxsim model.onnx new_model.onnx

执行完成后会输出前后节点对比。

附录:插件支持shape类型
onnx文件shape示例config配置情况支持情况
全静态[1, 3, 224, 224]手动配置为[1,3,224,224]支持动态图、静态图
全静态[1, 3, 224, 224]未配置支持动态图、静态图
0轴为Batch轴,其余固定shape[bs, 3, 224, 224]手动配置为[1,3,224,224]支持动态图、静态图
0轴为Batch轴,其余固定shape[bs, 3, 224, 224]手动配置为[-1,3,224,224]支持动态图、静态图(拆分多batch为多个1batch进行计算)
0轴为Batch轴,其余固定shape[bs, 3, 224, 224]未配置支持动态图、静态图(拆分多batch为多个1batch进行计算)
0轴为Batch轴,其余轴有-1[bs, 3, width, height]手动配置为[1,3,224,224]支持动态图、静态图
0轴为Batch轴,其余轴有-1[bs, 3, width, height]手动配置为[-1,3,224,224]支持动态图、静态图(拆分多batch为多个1batch进行计算)
0轴为Batch轴,其余轴有-1[bs, 3, width, height]手动配置为[-1,3,-1, -1]支持动态图,静态图不支持
无batch轴,存在-1input0[m,k]、input1[k,n]、output[m,n]手动配置为静态[2,3],[3,4]支持动态图,静态图
无batch轴,存在-1input0[m,k]、input1[k,n]、output[m,n]手动配置为[-1, -1],[-1, -1]支持动态图,静态图不支持
无batch轴,存在-1input0[m,k]、input1[k,n]、output[m,n]未配置支持动态图,静态图不支持

TensorFlow模型转换为pb

TensorFlow保存图graph、权重weights的过程称为freezing,在保存过程中会产生一个protobuf文件,简称pb文件。导出并保存pb文件的方法使用的是原生TensorFlow框架的能力,下面仅简要给出一些步骤示例。

  1. 保存SavedModel模型。
tf.saved_model.save(network, "save_path")

在save_path文件夹下会生成如下文件/文件夹:

|--- save_model.pb # 保存网络结构 |--- variables # 权重参数存储目录 |--- assets # 所需的外部文件存储目录,例如初始化的词汇表文件
  1. 冻结pb模型。
    加载上述步骤导出的SavedModel模型,并将SavedModel模型冻结为带权重的pb模型,代码示例如下。
import tensorflow as tf from tensorflow import keras from tensorflow.keras import models from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2 from tensorflow.python.framework import graph_util # 加载SavedModel模型 saved_model_dir = "save_path" model = tf.saved_model.load(saved_model_dir) # 初始化signatures infer = model.signatures["serving_default"] # 冻结带权重的pb文件 frozen_func = convert_variables_to_constants_v2(infer) tf.io.write_graph(graph_or_graph_def=frozen_func.graph, logdir="./", name="frozen_graph.pb", as_text=False)

详细Tensorflow迁移请参考 TensorFlow模型迁移。

尝试运行

模型文件获取后,即可尝试使用triton inference server进行推理服务。
根据triton inference server规范,模型需要按照如下规范创建相应说明文件。

模型目录创建

创建一个模型文件夹类似如下结构。

models └── cnclip ├── 1 │ └── model.onnx # 或 model.pb └── config.pbtxt

其中 : cnclip 为模型名称 1 为模型版本
model.onnx 或 model.pb 为需要执行推理的模型文件
config.pbtxt 为模型描述,具体填写内容如下:

name: "cnclip" backend: "npu_ge" max_batch_size: 128 input [ { name: "image" data_type: TYPE_FP32 dims: [3, 224, 224 ] } ] output [ { name: "unnorm_image_features" data_type: TYPE_FP32 dims: [512 ] } ] instance_group [{ count: 1 } ] parameters: [ { key: "device_ids", value: {string_value: "2"} } ]

其中:
name 为模型名称、与models内文件夹名称保持一致
backend: 需填写npu_ge ,引导server 使用该backend对模型进行推理 max_batch_size 最大bs,当第0轴为bs时填写,若采用静态图,该字段需删除 input、output 模型输入、输出名称、形状、类型等信息。需与onnx模型中的输入输出一致。否则会报错!!!
input、output 若不填写,则程序会尝试从onnx文件中读取,支持动态轴方式,但要满足限制条件,详情请参考 模型转换为onnx。Tensorflow 目前不支持自动获取。
instance_group.count 实例数量,测试阶段可设置为1,若后期采用多流并行方案,或者多卡推理时,需要根据需要调整实例个数
parameters.device_ids 模型使用的卡id,若为多卡比如 2卡、3卡,则填写 2,3

当前版本支持动态bs,以及全静态方式。静态图通常拥有更好的性能,用户可根据业务需要进行选择:

1,若bs 为动态,可以通过配置 max_batch_size 限定最大batch, input、output中第0轴不需要声明,比如上面示例中,image 为4维,0轴为bs,不需要声明。规范跟随triton inference server。
2,若bs为静态,则需要去掉 max_batch_size 并在input,output中声明第0轴的大小,如上例子 dims: [1,3, 224, 224 ],静态图需要用户自行填写input、output。

在input、output全为固定shape的情况下,可以添加参数开启静态图推理:

parameters: [ { key: "static_model", value: {string_value: "1"} } ]
模型启动

注:运行server时工作目录不要在models文件夹下执行,因执行过程中会生成meta文件导致server读取模型执行报错。
模型文件夹生成后,即可执行如下命令尝试运行推理服务:

/opt/tritonserver/bin/tritonserver --model-repository {/path/to/models} \ --http-port=9000 --grpc-port=9002 \ --backend-config=npu_ge,ge.aicoreNum="12|10" \ --backend-config=npu_ge,static_model="1" \ --backend-config=npu_ge,profiling="dynamic" \ --backend-config=npu_ge,dump_graph="1"

--model-repository 为模型文件夹路径,如上章节介绍,应填写 models 的路径。 可用参数可参考 triton inference server 相关文档。
在官方基础上,该插件新增了如下参数:
--backend-config=npu_ge,ge.aicoreNum 可以配置在启用静态图时,单stream使用cube、vector核数量,| 左边为cube数量,右边为vector数量,建议根据模型cv使用情况进行调整。默认关闭。
--backend-config=npu_ge,static_model 是否开启ge静态图,只有在shape全部为固定值时才能开启,config.pbtxt 也可以配置,只需配置一个。默认不开启。
--backend-config=npu_ge,profiling 是否开启profiling,若为ture,则采用静态采集,程序运行后立刻开始,若为dynamic,则需要使用另一线程,具体可参考昇腾文档。 开启后会在当前目录下生成profiling文件夹。默认关闭。
--backend-config=npu_ge,dump_graph 是否dump GE图,默认关闭。
注意:ge参数分全局、session、graph 参数,当直接填写ge.xxx 时会被作为全局参数;当添加 session.ge.xxx 或 graph.ge.xxx 是会分别被作为 session、graph 参数。具体支持哪些参数请参考 Ascend Graph构图接口 options参数说明 。

启动完成后,在输出中可看到相应的 http端口信息。

I1113 03:06:28.108960 4560 grpc_server.cc:2519] Started GRPCInferenceService at 0.0.0.0:10002 I1113 03:06:28.109231 4560 http_server.cc:4637] Started HTTPService at 0.0.0.0:10001 I1113 03:06:28.150615 4560 http_server.cc:320] Started Metrics Service at 0.0.0.0:8002
client 调用

工程中自带example,用户可以调用其中的client 进行服务测试。具体使用方法请参考 triton inference server 相关文档。

python client.py

调用成功后会输出output信息。

性能测试

可以使用NVIDIA官方工具 perf_analyzer 测试 triton-inference-server 性能。
拉取镜像

export RELEASE=23.02 docker pull nvcr.io/nvidia/tritonserver:${RELEASE}-py3-sdk docker run --rm --privileged -it --net=host nvcr.io/nvidia/tritonserver:${RELEASE}-py3-sdk

进入容器后,即可调用工具对模型进行测试:

perf_analyzer -m clip \ -x 1 \ -i http \ -u localhost:9090 \ -b 1 \ --shape image:3,224,224 \ --shape text:512 \ --concurrency-range 16

参数如下:
-m 设置模型名称,如 clip
-x 设置模型版本,根据想要测试模型的版本如实设置,如 1
-i 设置通信协议,选择有 http|grpc
-u 设置通信地址url,如 localhost:9090
-b 设置batch size ,如果是静态shape,则不填此参数
--shape 指定模型输入,以输入名称区分,如 image:3,224,224 如果填写了 -b 参数,则bs维度不需要写出
--concurrency-range 设置并发量,可以设定为单一值,如 16;也可以通过区间加步长进行设置,如1:1:16(start:step:end)
-v -v 打开详细日志

执行成功后,会打印出相应的吞吐信息。

【免费下载链接】triton-inference-server-ge-backendge-backend基于triton inference server框架实现对接NPU生态,快速实现传统CV\NLP等模型的服务化。项目地址: https://gitcode.com/cann/triton-inference-server-ge-backend

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 2:34:52

收藏!小白程序员必看:如何利用AI三层架构实现大模型落地价值?

通用型大模型因缺乏专业深度,难以解决具体应用场景问题。本文提出“AI三层架构”,即通用型大模型、特定领域型AI小模型平台和具体任务型AI智能体,以实现AI应用价值。特定领域型AI小模型平台作为中介机制,通过知识蒸馏与微调技术&a…

作者头像 李华
网站建设 2026/5/10 2:31:43

SpriteDicing:基于纹理分块去重的游戏美术资源优化方案

1. 项目概述与核心价值在游戏开发,尤其是2D游戏和视觉小说这类美术资源密集型的项目中,美术资源的管理和优化是贯穿始终的挑战。我们常常会遇到一个令人头疼的问题:角色立绘、场景背景或UI元素中存在大量重复的纹理区域。比如,一个…

作者头像 李华
网站建设 2026/5/10 2:31:40

CANN/pypto循环展开函数文档

pypto.loop_unroll 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Atlas A3 训练系列产品/Atlas A3 推理系列产品√…

作者头像 李华
网站建设 2026/5/10 2:30:40

使用curl命令快速测试Taotoken平台不同模型的响应效果

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用curl命令快速测试Taotoken平台不同模型的响应效果 基础教程类,本文面向需要在无SDK环境或进行快速验证的开发者&am…

作者头像 李华
网站建设 2026/5/10 2:29:41

基于大语言模型的代码仓库自动化文档生成框架RepoAgent实战指南

1. 项目概述:当大模型遇上代码仓库,如何实现文档的“自动驾驶”?接手一个新项目,最头疼的是什么?对我而言,除了理解复杂的业务逻辑,就是面对一个庞大但文档稀疏、甚至过时的代码仓库。你需要在成…

作者头像 李华
网站建设 2026/5/10 2:26:43

ChatLLM:本地化大语言模型应用框架开发指南

1. 项目概述:ChatLLM,一个面向开发者的本地化大语言模型应用框架如果你正在寻找一个能让你快速将各种大语言模型(LLM)集成到本地应用,特别是基于私有知识库进行智能问答的工具,那么ChatLLM这个项目值得你花…

作者头像 李华