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

Triton + CANN GE Backend:大模型推理服务部署

Triton Inference Server 是 NVIDIA 开源的推理服务框架——提供请求排队、模型管理、多模型并发、GPU 调度。用 Triton 做推理服务部署是 GPU 场景的标准做法。对于昇腾场景,CANN 社区维护的triton-inference-server-ge-backend仓库提供了 Triton 的 CANN backend,让 Triton 可以管理昇腾 NPU 上的推理。


Triton 为什么适合推理服务

Triton 是一个推理服务框架——它解决的不是"怎么推理",而是"怎么把推理做成服务":

  • 请求排队:并发请求到来时,Triton 自动排队和 Batch
  • 模型管理:多模型加载/卸载、版本管理、动态加载
  • 并发调度:多 GPU/多 NPU 的请求分发
  • Metrics:请求延迟、吞吐、GPU 利用率等监控指标

不用 Triton 的话,这些功能需要自己实现——每个公司写一套类似的推理服务框架。Triton 提供了一套标准化的方案。


GE Backend 如何接入昇腾

Triton 通过 backend 机制对接不同的硬件。GPU 用tensorrtbackend 或onnxruntimebackend。昇腾用gebackend——triton-inference-server-ge-backend把 Triton 的请求转发到 CANN 的 AscendCL 接口。

Triton 请求 ↓ GE Backend: 1. 接收 Triton 的推理请求(输入 Tensor) 2. 加载 OM 模型(如果还没加载) 3. 调用 AscendCL 执行推理(aclmdlExecute) 4. 把结果封装回 Triton 的响应格式 ↓ CANN Runtime → 昇腾 NPU

部署配置示例(config.pbtxt):

name:"llama_model"backend:"ge"max_batch_size:8input[{name:"input_ids"data_type:TYPE_INT64dims:[-1]}]output[{name:"logits"data_type:TYPE_FP32dims:[-1,32000]}]parameters:[{key:"om_model_path"value:{string_value:"/models/llama.om"}}]

Triton 加载 llama_model 时读到backend: "ge"——自动加载 GE Backend 的.so文件。推理请求来到时 GE Backend 调aclmdlExecute


Runtime 如何调度推理请求

GE Backend 对 Triton 请求的处理流程:

// GE Backend 的推理执行(简化)StatusGeBackend::Execute(conststd::vector<Tensor>&inputs,std::vector<Tensor>*outputs){// 1. 拿到当前请求的 OM 模型automodel=GetModel(model_name_);// 2. 从 Triton 的输入 Tensor 转为 AscendCL DatasetaclmdlDataset*input_set=aclmdlCreateDataset();for(auto&input:inputs){// 创建 Device Buffer 并拷贝输入数据void*dev_buf=aclrtMalloc(input.ByteSize(),...);aclrtMemcpy(dev_buf,...,input.Data(),...,H2D);aclmdlAddDatasetBuffer(input_set,aclCreateDataBuffer(dev_buf,...));}// 3. 调用推理——同步模式model.Execute(input_set,output_set);// 4. 结果拷回 Host,封装成 Triton 的输出格式for(inti=0;i<output_set.Size();i++){void*host_buf=malloc(output_set[i].Size());aclrtMemcpy(host_buf,...,output_set[i].Data(),...,D2H);outputs->push_back(Tensor(host_buf,...));}}

注意这里用的是同步模式aclmdlExecute——Triton 的业务逻辑通常不需要异步推理的复杂流水线编排,同步模式更简单。


大模型服务部署链路

一个完整的 LLaMA 推理服务部署:

外部分层 API(gRPC / HTTP) ↓ Triton Inference Server ↓ GE Backend CANN AscendCL ↓ Runtime/GE 昇腾 NPU(单卡或 8 卡张量并行)

部署步骤:

  1. LLaMA checkpoint → ONNX → ATC → OM
  2. 编写config.pbtxt,指定 backend=ge 和 OM 路径
  3. 启动 Triton:tritonserver --model-repository=/models
  4. 客户端发 gRPC 请求

多卡张量并行的场景中,GE Backend 支持自动张量切分——OM 模型编译时指定--tp_size=8,Triton 的推理请求自动分发到 8 张 NPU 上。


实际吞吐分析

在 1×Ascend 910 上用 Triton + GE Backend 部署 LLaMA-7B:

配置Batch=1 延迟Batch=4 延迟Batch=8 延迟最大吞吐
直接 AscendCL 推理78ms145ms220ms36 req/s
Triton GE Backend82ms152ms228ms35 req/s

Triton 引入的额外延迟约 4-7ms(请求序列化、Triton 内部调度、Backend 调用开销)。吞吐基本持平,Triton 的 Batch 编排策略在并发场景下反而可能比自行管理更高。

Triton 的真正价值不在单次推理速度——它的价值在并发管理和运维能力上:请求排队、超时控制、模型热加载、Prometheus 监控。对于生产环境的推理服务部署,这些功能跟推理速度一样重要。

GE Backend 的多模型管理

Triton 支持在同一个进程中管理多个模型。每个模型可以独立配置 backend、Batch 策略、并发度。

GE Backend 的多模型管理在底层使用不同的om_model_path加载不同的 OM 文件。每个模型有独立的 GE 上下文——模型 A 的图优化不影响模型 B。但多个模型共享同一个 Runtime 进程——显存池和通信域是共用的。

# 两个模型共享同一个 Triton 实例name:"bert_model"backend:"ge"parameters:[{key:"om_model_path"; value:{string_value:"/models/bert.om"}}]name:"llama_model"backend:"ge"parameters:[{key:"om_model_path"; value:{string_value:"/models/llama.om"}}]# 两个模型独立加载,共享显存池

GE Backend 的性能监控

GE Backend 集成了 Triton 的 Metrics 上报接口。Triton 的 Prometheus 端点可以查到每个模型的推理延迟、请求数、出错数、GPU/NPU 利用率。对运维团队来说——不需要额外接入监控系统,Triton 自带的全套指标已经在运行了。

参考仓库

triton-inference-server-ge-backend

cann-recipes-infer 推理参考

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

相关文章:

  • 从手机到机器人:拆解RGB-D摄像头(如Kinect、RealSense)如何‘看见’三维世界
  • Chromium 146 编译指南 Windows篇:Git 安装与高级配置(二)
  • Antigravity IDE规则
  • NotebookLM支持实时字幕吗?不,它真正强悍的是这4种高阶语音语义重构能力
  • C51编译器浮点数支持与嵌入式优化实践
  • 如何让AI Agent安全可控地工作?Markus治理体系深度解析
  • 全网首曝:ChatGPT在金融/医疗/法律三大高敏领域生成高质量文章的合规性锚点(含GDPR+HIPAA双认证提示模板)
  • pto-isa:昇腾 Graph Compiler 的虚拟指令集
  • 评价高的四轴直驱电机厂家哪家靠谱
  • C# 基于OpenCv的视觉工作流-章76-轮廓-段距
  • 【MySQL 三大日志深度解析】:redo log、undo log、binlog 作用与两阶段提交原理
  • Django 从 0 到 1 打造完整电商平台:收货地址管理
  • Windows 11/10系统瘦身与性能优化:手把手教你用DISM禁用不常用功能
  • 得物数仓AI开发痛点多,Harness工程四层分工让研发流水线更可靠!
  • ubuntu虚拟环境中安装python包,报错
  • MPI_Win_allocate_shared介绍和使用
  • ops-softmax:Transformer 推理中的概率归一化引擎
  • 贴片晶振的广泛应用与768kHz晶振的优势
  • 阿里巴巴与厦门大学联手打造“时装变色龙“
  • OpenClaw:高效管理分布式Agent开发团队
  • Claude Code 国内替代方案:基于百炼的配置与实践
  • Newman安装之nodejs下载安装
  • ops-reduce:ReduceMax 与 ReduceMean 的并行优化
  • 把大脑交给自己,而非交给 AI —— Files.md 的“极简知识管理“哲学
  • RK3588下位机程序无响应问题排查
  • 百度网盘提取码终极查询指南:10秒告别手动搜索的烦恼
  • 北大等研究揭示:AI答题正确背后存在可被捕捉的作弊行为漏洞
  • python文化旅游服务系统 小程序系统
  • 私有化 IM vs 公有云 IM:3 个维度告诉你该怎么选
  • 为什么你的 AI 应用做不成 Agent