引言

近些年来,随着GPU等计算设备算力的飞速提升,对算力要求较高的深度学习模型逐步开始在网购、医疗、音视频领域有了越来越广泛的应用。如何结合深度学习框架,用好高算力的GPU设备,是我们在AI基础建设中遇到的一个至关重要的问题。英伟达公司从硬件厂商的角度出发推出了Trition推理服务器,阿里云PAI平台从云原生服务角度出发,推出了PAI-EAS云原生弹性推理服务平台,目的都是为了更好地帮助用户更好更方便地部署深度学习,提供优质的在线预测服务。

首先我们来了解一下Triton和EAS具体是什么,以及我们为什么要将两者进行有机的结合。

什么是Triton?

Triton推理服务器(NVIDIA Triton Inference Server) 是英伟达公司推出的开源推理框架,为用户提供在云和边缘推理上部署的解决方案。下图为Triton的架构图:

Triton Inference Server具有以下的特性:

  • 支持多种开源框架的部署,包括TensorFlow/PyTorch/ONNX Runtime/TensorRT等,同时也支持用户提供自定义的服务后端(backend);
  • 支持多个模型同时运行在GPU上,以提高GPU设备的利用率;
  • 支持HTTP/gRPC通信协议,提供二进制格式扩展来压缩发送请求大小;
  • 支持Dynamic Batching功能,提升服务的吞吐;
  • 支持兼容KFServing的API标准。

什么是PAI-EAS?

阿里云机器学习平台PAI,旨在为阿里云的用户提供轻量化、高性价比的云原生机器学习。为了帮助用户打通模型训练到模型部署的通路,针对在线推理场景提供了新一代AI推理平台:PAI-EAS(Elastic Algorithm Service),

目前已经稳定支持阿里巴巴集团多个BU的深度学习模型预测服务以及大量公有云客户的在线预测服务。

下图为PAI-EAS总体架构:

从图中可以看出PAI-EAS支持以下特性:

  • 支持基于异构硬件(CPU和GPU)的模型部署;
  • 支持通用机器学习/深度学习框架模型一键部署成在线服务,也提供兼容开源Serving的服务部署方式;
  • 与云原生产品深度整合,支持模型服务管理,服务监控,日志采集查询,网络链路优化等功能;
  • 自研的高性能服务引擎,对下层异构推理引擎透明支持模型预热,自动Batch,流量镜像等能力;
  • 分层架构设计,可提供简单易用的微服务开发接口,用户可用多种语言开发自定义的推理业务逻辑。

为什么将Triton部署在EAS上

将Triton Inference Server部署在EAS上,一方面可以使EAS的用户能够方便的使用Triton在NVIDIA GPU设备上多框架多模型部署的能力。另一方面可以充分利用EAS在云原生产品上的深度整合,借助基于云原生的负载均衡,服务管理,网络链路优化,资源弹性伸缩等能力。两方面相结合,获得了1+1>2的效果,使得用户可以方便地获取稳定且性能优异的预测服务,支持多种多样的使用场景,未来还可以使用我们集成到EAS中的针对不同框架模型的通用优化能力,例如Blade等。

如何使用Triton on EAS

使用准备工作

  1. 使用Triton github repo中提供的脚本,下载Inception模型,同时准备好以下的配置文件来声明部署模型的输入输出等信息,并将模型文件、配置文件以及模型对应的label文件都放置在一个目录中;

name: "inception_graphdef"

platform: "tensorflow_graphdef"

max_batch_size: 128

input [

{

name: "input"

data_type: TYPE_FP32

format: FORMAT_NHWC

dims: [ 299, 299, 3 ]

}

]

output [

{

name: "InceptionV3/Predictions/Softmax"

data_type: TYPE_FP32

dims: [ 1001 ]

label_filename: "inception_labels.txt"

}

]

  1. 开通阿里云对象存储服务对象存储服务OSS,完成配置后,使用ossutil将准备好的模型文件夹整个上传到特定的OSS路径中;

./ossutil cp inception_graphdef/ oss://triton-model-repo/models

  1. 开通EAS的专属资源组,目前只有专属资源组支持部署Triton服务。

在做完前置的准备工作之后,先要在EAS上部署Triton服务,然后再去请求已经部署好的服务,获取推理预测的结果。

如何在EAS上部署Triton服务

Triton部署于EAS采用了内置processor的部署形式,processor是EAS服务的必要元素,一般意义下是包含了服务对请求的完整处理逻辑。相比于一般的EAS内置processor部署方式,除了指定processor类型为"triton"以外,只需要新增一个processor_params字段将Triton启动时支持的参数传入即可。

下面为我们创建一个Triton服务时使用的配置文件的示例:

{

"name": "triton_test",

"processor": "triton",

"processor_params": [

"--model-repository=oss://triton-model-repo/models",

"--allow-http=true",

],

"metadata": {

"instance": 1,

"cpu": 4,

"gpu": 1,

"memory": 10000,

"resource":"<your resource id>"

}

}

注意:

  1. model-repository参数需要直接传入OSS路径,但是目前不支持直接从用户bucket根目录直接加载模型,推荐将模型上传到bucket下的某个目录中。
  2. 当前仅支持使用EASCMD创建Triton服务

下面是使用EASCMD创建服务时,我们可以命令行中看到的输出,最后可以看到服务的URL以及token,以及服务创建过程中的状态变化

./eascmd create triton.config

[RequestId]: AECDB6A4-CB69-4688-AA35-BA1E020C39E6

+-------------------+------------------------------------------------------------------------------------------------+

| Internet Endpoint | http://****************.cn-shanghai.pai-eas.aliyuncs.com/api/predict/test_triton_processor     |

| Intranet Endpoint | http://****************.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/test_triton_processor |

|             Token | MmY3M2ExZG***********************WM1ZTBiOWQ3MGYxZGNkZQ==                                       |

+-------------------+------------------------------------------------------------------------------------------------+

[OK] Service is now deploying

[OK] Successfully synchronized resources

[OK] Waiting [Total: 1, Pending: 1, Running: 0]

[OK] Waiting [Total: 1, Pending: 1, Running: 0]

[OK] Running [Total: 1, Pending: 0, Running: 1]

[OK] Service is running

如何访问EAS上的Triton服务

Triton on EAS完全兼容Triton社区提供的Python Client,下面我们以社区提供的Inception模型为例,说明如何来向部署在EAS上的Triton服务发起请求。首先我们按照Triton官方提供的方式,来安装Python Client。

pip3 install nvidia-pyindex

pip3 install tritonclient[all]

完成Triton服务部署之后,如果没有保存EASCMD命令行中输出的URL以及token,还可以在PAI控制台--模型部署--EAS-模型在线服务页面可以看到类似以下的服务详情,其中也可以查到服务的URL以及访问服务需要使用的授权token。

填充代码中的URL以及token,即可使用使用这个demo,对Triton的服务中的Inception模型发起请求。

import numpy as np

import time

import tritonclient.http as httpclient

from tritonclient.utils import InferenceServerException

URL = "<servcice url>"

HEADERS = {"Authorization": "<service token>"}

input_img = httpclient.InferInput("input", [1, 299, 299, 3], "FP32")

rand_img = np.random.rand(1, 299, 299, 3).astype(np.float32)

input_img.set_data_from_numpy(rand_img, binary_data=True)

output = httpclient.InferRequestedOutput(

"InceptionV3/Predictions/Softmax", binary_data=True

)

triton_client = httpclient.InferenceServerClient(url=URL, verbose=False)

start = time.time()

for i in range(10):

results = triton_client.infer(

"inception_graphdef", inputs=[input_img], outputs=[output], headers=HEADERS

)

res_body = results.get_response()

elapsed_ms = (time.time() - start) * 1000

if i == 0:

print("model name: ", res_body["model_name"])

print("model version: ", res_body["model_version"])

print("output name: ", res_body["outputs"][0]["name"])

print("output shape: ", res_body["outputs"][0]["shape"])

print("[{}] Avg rt(ms): {:.2f}".format(i, elapsed_ms))

start = time.time()

执行之后,我们可以获得以下的输出,在第一次运行时,还额外打印了模型以及输出的相应信息,确认了对模型的调用请求是如我们期望的。

model name:  inception_graphdef

model version:  1

output name:  InceptionV3/Predictions/Softmax

output shape:  [1, 1001]

[0] Avg rt(ms): 76.29

[1] Avg rt(ms): 43.45

[2] Avg rt(ms): 37.30

[3] Avg rt(ms): 34.17

[4] Avg rt(ms): 32.26

[5] Avg rt(ms): 30.52

[6] Avg rt(ms): 30.34

[7] Avg rt(ms): 29.13

[8] Avg rt(ms): 23.56

[9] Avg rt(ms): 23.42

结语

目前Triton on EAS已经在上海区域开始公测,欢迎大家在阿里云官网搜索“机器学习平台PAI”来踊跃试用。我们也将基于Triton,提供更多的深度学习在线部署能力给用户。Triton on EAS将支持更多的功能,保证用户在EAS上使用Triton的体验:

  • 支持gRPC协议,支持Java Client(Coming very soon!)
  • 支持Blade优化接入Triton

Triton推理服务器在阿里云机器学习PAI-EAS公测啦!!!相关推荐

  1. 阿里云机器学习PAI构建AI集团军作战,联手Intel在AI软硬件领域发力

    第一届"英特尔创新大师杯"深度学习挑战赛已在阿里云天池平台如火如荼的进行中.本次大赛由英特尔主办,阿里云计算平台机器学习 PAI 联合达摩院以及中文信息协会等组织机构联合承办,共有 ...

  2. 互联网日报 | 3月23日 星期二 | 京东集团8亿美元增持达达集团;阿里云盘正式启动公测;快手进军二手电商...

    今日看点 ✦ 京东集团8亿美元增持达达集团,持股比例增至51% ✦ 字节跳动收购游戏公司沐瞳科技,继续扩展海外游戏市场 ✦ 快手正式宣布进军二手交易,3个月累积订单超63万 ✦ 阿里云盘正式启动公测: ...

  3. AI推理服务平台升级,阿里云机器学习PAI推出新规格

    随着生成式AI模型不断拓宽AI应用的场景边界,模型在线服务的数量级快速增长,AI推理环节亟需精细化的资源管理. 近日,阿里云机器学习平台PAI宣布全面升级模型服务平台PAI-EAS,面向文图生成.大语 ...

  4. 阿里云机器学习PAI介绍

    机器学习大致可以分三类: 有监督学习:指每个样本都有对应的期望值,通过模型搭建,完成从输入的特征向量到目标值的映射,典型的例子是回归和分类问题,例如:逻辑回归.随机森林.决策树. 无监督学习:指在所有 ...

  5. 阿里云机器学习PAI开源中文NLP算法框架EasyNLP,助力NLP大模型落地

    作者:临在.岑鸣.熊兮 一 导读 随着 BERT.Megatron.GPT-3 等预训练模型在NLP领域取得瞩目的成果,越来越多团队投身到超大规模训练中,这使得训练模型的规模从亿级别发展到了千亿甚至万 ...

  6. 阿里云机器学习PAI发布基于HLO的全自动分布式系统 TePDist,并宣布开源!

    作者:品曲,宗雁,佀畅,侠雕,伟林 导读 一直以来,大模型在模型效果上被证明具有显著优势.而ChatGPT的出现,证明了其在工业生产工具方面具有巨大潜力.毫无疑问,大模型的训练需要巨大的算力,这对分布 ...

  7. 重磅!容器集群监控利器 阿里云Prometheus 正式免费公测

    Prometheus 作为容器生态下集群监控的首选方案,是一套开源的系统监控报警框架.它启发于 Google 的 borgmon 监控系统,并于 2015 年正式发布.2016 年,Prometheu ...

  8. 重磅!阿里云时空数据库正式免费公测

    目前随着移动互联网和物联网的广泛应用,90%以上的数据是和时间+空间相关的,而越来越多的数据应用场景与时间和空间信息密不可分.时间+空间维度的数据(我们称之为时空数据)是一种高维数据,需要更为高效的数 ...

  9. 2017阿里云代码管理服务公测上线

    代码是 DevOps 流程的起点,是所有研发流程的基础,代码托管能为代码"保驾护航",确保代码的安全性.可用性,同时提供围绕代码的一些基础服务,如 MR . Issue 等等. 国 ...

最新文章

  1. Python 图像处理篇-利用opencv库展示本地图片实例演示
  2. 思维、视角、设计丨产品经理的三板斧
  3. 搞懂正则表达式之进阶篇
  4. 【linux】【firewalld】防火墙设置
  5. 终端软件_DMSTerminal现场管控终端软件正式发布
  6. VBScript基础教程之一什么是 VBScript
  7. 洛谷 P2167 [SDOI2009]Bill的挑战
  8. My97DatePicker 组件使用方法---My97DatePicker
  9. Opengl学习笔记——顶点数组
  10. 震惊:selenium竟然不是自动化测试工具
  11. mysql 导入导出 csv_mysql文件导入导出为csv格式
  12. matlab画图不显示中文_[过时] [LaTeX 使用] 升级 macOS 10.15 后 ctex 文档不显示中文的临时方案...
  13. python字符串前缀
  14. 合肥工业大学暑期“三下乡”——探访悠悠古村 发扬传统文化
  15. 奥创手机群控安装到魅蓝3的流程
  16. 【中科三方】什么是云解析DNS?云解析DNS有必要购买吗?
  17. 影响力在职场的重要性
  18. 中国杰出前十大程序员_10个值得关注的杰出青少年应用程序开发人员
  19. discuz 获取会员头像
  20. android 系统提醒功能,Android 向系统日历中添加提醒(踩坑)

热门文章

  1. uni-app:开发过程中的磕磕绊绊---经验总结
  2. Hyperf 引入支付宝app支付遇到的坑
  3. php判断一个数组是另一个数组的子集
  4. python keyshot_keyshot 8下载|keyshot 8中文版 v8.0.247 免费版 - 软件下载 - 绿茶软件园|33LC.com...
  5. 清明节做了个画板App
  6. linux中find命令的常见用法
  7. python爬取视频评论数据
  8. 操作系统原理--学习笔记2
  9. progressdialog进度框_进度对话框 ProgressDialog 用法总结
  10. 用matlab提取文件名,及删除后缀