Triton Inference Server具有以下的特性:

支持多種開源框架的部署,包括TensorFlow/PyTorch/ONNX Runtime/TensorRT等,同時也支持用戶提供自定義的服務后端(backend);支持多個模型同時運行在GPU上,以提高GPU設備的利用率;支持HTTP/gRPC通信協(xié)議,提供二進制格式擴展來壓縮發(fā)送請求大小;支持Dynamic Batching功能,提升服務的吞吐;支持兼容KFServing的API標準。

什么是PAI-EAS?

阿里云機器學習平臺PAI,旨在為阿里云的用戶提供輕量化、高性價比的云原生機器學習。為了幫助用戶打通模型訓練到模型部署的通路,針對在線推理場景提供了新一代AI推理平臺:PAI-EAS(Elastic Algorithm Service),

目前已經穩(wěn)定支持阿里巴巴集團多個BU的深度學習模型預測服務以及大量公有云客戶的在線預測服務。

下圖為PAI-EAS總體架構:

Triton推理服務器在阿里云機器學習PAI-EAS公測啦

從圖中可以看出PAI-EAS支持以下特性:

支持基于異構硬件(CPU和GPU)的模型部署;支持通用機器學習/深度學習框架模型一鍵部署成在線服務,也提供兼容開源Serving的服務部署方式;與云原生產品深度整合,支持模型服務管理,服務監(jiān)控,日志采集查詢,網(wǎng)絡鏈路優(yōu)化等功能;自研的高性能服務引擎,對下層異構推理引擎透明支持模型預熱,自動Batch,流量鏡像等能力;分層架構設計,可提供簡單易用的微服務開發(fā)接口,用戶可用多種語言開發(fā)自定義的推理業(yè)務邏輯。

為什么將Triton部署在EAS上

將Triton Inference Server部署在EAS上,一方面可以使EAS的用戶能夠方便的使用Triton在NVIDIA GPU設備上多框架多模型部署的能力。另一方面可以充分利用EAS在云原生產品上的深度整合,借助基于云原生的負載均衡,服務管理,網(wǎng)絡鏈路優(yōu)化,資源彈性伸縮等能力。兩方面相結合,獲得了1+1>2的效果,使得用戶可以方便地獲取穩(wěn)定且性能優(yōu)異的預測服務,支持多種多樣的使用場景,未來還可以使用我們集成到EAS中的針對不同框架模型的通用優(yōu)化能力,例如Blade等。

如何使用Triton on EAS

使用準備工作

使用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”

}

]

開通阿里云對象存儲服務對象存儲服務OSS,完成配置后,使用ossutil將準備好的模型文件夾整個上傳到特定的OSS路徑中;

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

開通EAS的專屬資源組,目前只有專屬資源組支持部署Triton服務。

在做完前置的準備工作之后,先要在EAS上部署Triton服務,然后再去請求已經部署好的服務,獲取推理預測的結果。

如何在EAS上部署Triton服務

Triton部署于EAS采用了內置processor的部署形式,processor是EAS服務的必要元素,一般意義下是包含了服務對請求的完整處理邏輯。相比于一般的EAS內置processor部署方式,除了指定processor類型為”triton”以外,只需要新增一個processor_params字段將Triton啟動時支持的參數(shù)傳入即可。

下面為我們創(chuàng)建一個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”:””

}

}

注意:

model-repository參數(shù)需要直接傳入OSS路徑,但是目前不支持直接從用戶bucket根目錄直接加載模型,推薦將模型上傳到bucket下的某個目錄中。當前僅支持使用EASCMD創(chuàng)建Triton服務

下面是使用EASCMD創(chuàng)建服務時,我們可以命令行中看到的輸出,最后可以看到服務的URL以及token,以及服務創(chuàng)建過程中的狀態(tài)變化

./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社區(qū)提供的Python Client,下面我們以社區(qū)提供的Inception模型為例,說明如何來向部署在EAS上的Triton服務發(fā)起請求。首先我們按照Triton官方提供的方式,來安裝Python Client。

pip3 install nvidia-pyindex

pip3 install tritonclient[all]

完成Triton服務部署之后,如果沒有保存EASCMD命令行中輸出的URL以及token,還可以在PAI控制臺–模型部署–EAS-模型在線服務頁面可以看到類似以下的服務詳情,其中也可以查到服務的URL以及訪問服務需要使用的授權token。

Triton推理服務器在阿里云機器學習PAI-EAS公測啦

填充代碼中的URL以及token,即可使用使用這個demo,對Triton的服務中的Inception模型發(fā)起請求。

import numpy as np

import time

import tritonclient.http as httpclient

from tritonclient.utils import InferenceServerException

URL = “”

HEADERS = {“Authorization”: “”}

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()

執(zhí)行之后,我們可以獲得以下的輸出,在第一次運行時,還額外打印了模型以及輸出的相應信息,確認了對模型的調用請求是如我們期望的。

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已經在上海區(qū)域開始公測,歡迎大家在阿里云官網(wǎng)搜索“機器學習平臺PAI”來踴躍試用。我們也將基于Triton,提供更多的深度學習在線部署能力給用戶。Triton on EAS將支持更多的功能,保證用戶在EAS上使用Triton的體驗:

支持gRPC協(xié)議,支持Java Client(Coming very soon!)支持Blade優(yōu)化接入Triton。

分享到

songjy

相關推薦