当前位置: 首页 > news >正文

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),仅供参考

http://www.jsqmd.com/news/786753/

相关文章:

  • 电磁屏蔽下的阻抗泄漏:硬件安全新挑战
  • 医疗AI系统安全设计:14项关键功能需求与风险缓解框架
  • 基于MCP与AI智能体的深度网络研究自动化系统构建指南
  • 开源AI智能体中心:一次定义,跨平台统一部署企业级AI助手
  • 2026年口碑好的淋膜白卡纸推荐厂家精选 - 品牌宣传支持者
  • 强化学习赋能空天地一体化网络:动态优化与智能决策实战解析
  • CANN/ops-math Fills填充算子
  • AI代码生成工具PawForge-AI:从原理到实战的深度解析
  • 技术解析与实战:NCMconverter如何突破音频格式的技术壁垒
  • 基于大语言模型的代码仓库自动化文档生成框架RepoAgent实战指南
  • Xbox成就解锁器完整指南:如何快速解锁Xbox游戏成就的免费工具
  • 2026年佛山工业省电空调厂家最新TOP实力排行:水冷环保空调/移动式环保空调/蒸汽冷水电空调 - 品牌策略师
  • 2026年知名的耐高温滤筒/耐腐蚀滤筒精选推荐公司 - 品牌宣传支持者
  • 对比同一任务在聚合平台与直连原厂的响应体感
  • PLL技术在卫星机顶盒立体声传输中的创新应用
  • AI辅助皮肤黑色素瘤诊断:前瞻性多中心临床研究揭示实战价值
  • 【2026年版|建议收藏】大模型应用开发三大岗位方向对比,小白/程序员入门必看
  • 基于MCP协议实现Docker容器AI化管理的开源工具docker-mcp详解
  • 构建企业级AI智能体安全体系:OpenClaw插件套件实战指南
  • 音频工程中的平衡与非平衡连接技术解析
  • AI最吃香岗位之一:智能体开发工程师
  • 魔兽争霸3终极优化指南:WarcraftHelper让你的经典游戏重获新生
  • Ava:基于llama.cpp的本地大语言模型桌面GUI应用实践指南
  • 新手入门教程使用curl命令直连Taotoken大模型API
  • Godot开源教程库:从核心概念到项目实战的系统学习指南
  • Docker-MCP:基于Model Context Protocol的容器智能管理实践
  • CANN/ops-cv一维线性上采样
  • 基于技能图谱的职业路径规划:从图算法到个性化推荐引擎
  • MCP协议与mcp-use工具:让AI助手拥有操作本地系统的能力
  • 为AI编程助手构建持久化记忆系统:告别上下文丢失,实现连续开发