最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

嗶哩嗶哩大規(guī)模AI模型推理實(shí)踐

2023-06-13 12:04 作者:嗶哩嗶哩技術(shù)  | 我要投稿

本期作者

一、背景


  • AI算法復(fù)雜度逐年上升,需要高效的方式支持AI模型的推理和部署。

  • 隨著應(yīng)用規(guī)模的擴(kuò)大,算力資源消耗也在快速增長(zhǎng),對(duì)線上資源產(chǎn)生極大的壓力。

  • B站AI涉及計(jì)算機(jī)視覺(CV)、自然語言處理(NLP)、語音等多個(gè)場(chǎng)景,服務(wù)于內(nèi)容安全審核、內(nèi)容理解和創(chuàng)作的上百個(gè)應(yīng)用場(chǎng)景。


二、挑戰(zhàn)和目標(biāo)


挑戰(zhàn)


  • 線上資源隨著流量線性增長(zhǎng),在降本增效的背景下,希望控制線上資源的增長(zhǎng)。

  • 隨著大語言模型在工業(yè)界的推廣和落地,NLP場(chǎng)景部署了BERT,GPT,T5-Large模型,模型復(fù)雜度明顯提升。

  • 幀級(jí)別的視頻處理。例如,在OCR(Optical character recognition) 場(chǎng)景下,24小時(shí)內(nèi)累計(jì)處理超過10億張720p圖片。這給模型推理和模型服務(wù)帶來了極大的壓力。



  • 流量的增長(zhǎng)和算法復(fù)雜度的提升給線上服務(wù)的Response Time和QPS帶來了巨大的挑戰(zhàn)。

  • 大量長(zhǎng)尾場(chǎng)景需要有統(tǒng)一的方式接入。


目標(biāo)


  • 提高推理的吞吐,降低資源增長(zhǎng)速度。

  • 改進(jìn)Response Time,提升服務(wù)的質(zhì)量。

  • 擴(kuò)展新業(yè)務(wù),落地更多場(chǎng)景。


三、InferX推理框架 介紹


針對(duì)上述的問題,我們自研了推理框架,內(nèi)部研發(fā)代號(hào)InferX。架構(gòu)圖如下所示。

通用推理框架可以拆分為Interpreter, ?Graph Optimizer和Backend等組件。除了上述組件之外,InferX支持若干模型計(jì)算前鏈路優(yōu)化,例如稀疏化和量化。



近期InferX迭代主要包括了如下幾個(gè)方面。

  • 支持ONNX鏈路,通過ONNX鏈路支持Tensorflow和paddle模型。提高模型的部署效率。

  • 改進(jìn)InferX運(yùn)行時(shí),優(yōu)化資源獲取方式,減少了CPU占用

  • 模型前鏈路優(yōu)化的能力:支持int8和sparsity

  • 擴(kuò)展了圖像算子的能力。


四、InferX推理框架計(jì)算前鏈路


InferX計(jì)算前鏈路指模型在上線前進(jìn)行的若干離線處理,當(dāng)前主要包括量化和稀疏化。


模型量化:


  • 相比于FP16, INT8 TensorCore的性能翻倍。

  • InferX實(shí)現(xiàn)了量化SDK,能夠較為方便地進(jìn)行模型量化。

  • PTQ量化已經(jīng)在OCR和版權(quán)場(chǎng)景落地。

  • 上圖展示了InferX量化的流程。需要注意的是,InferX實(shí)現(xiàn)了TensorRT Lowering Graph Optimizer。如果跳過上述的Graph Optimizer,量化的模型將會(huì)沒有任何加速。

  • 下圖顯示了量化在版權(quán)模型推理場(chǎng)景的收益。量化模型精度近乎無損,同時(shí)實(shí)現(xiàn)了2x的加速比。



?模型結(jié)構(gòu)化稀疏:


  • NVidia從Ampere架構(gòu)開始支持2:4稀疏方案,2:4 Sparsity能夠利用Sparsity TensorCore的性能。

  • 訓(xùn)練后pruning,與算法協(xié)同完成sparsity模型的鏈路

  • 支持稀疏化構(gòu)建

  • 相比于dense的TensorCore,稀疏化TensorCore加速比為2x。但是由于稀疏化tensor-core只能作用于卷積,linear算子,因此,模型總體的加速比低于2x。例如,下圖中,長(zhǎng)尾kernel無法使用sparsity-tensorcore進(jìn)行優(yōu)化。



  • FP16 sparsity tensor-core在部分模型上有精度的問題,工程上可以通過混合精度計(jì)算解決。


五、使用InferX優(yōu)化重點(diǎn)場(chǎng)景?—— 以O(shè)CR為例


項(xiàng)目背景:


  • OCR是審核能力的重要組成部分。

  • OCR需要進(jìn)行逐幀的處理,需要消耗大量的計(jì)算資源。

需要注意的是,本章節(jié)討論了如何優(yōu)化一個(gè)重點(diǎn)場(chǎng)景,涉及到的技術(shù)不限于InferX。


模型適配:


由于OCR中存在第三方的算子,無法直接導(dǎo)出,針對(duì)這一缺陷,InferX支持了ONNX作為模型的交換格式,實(shí)現(xiàn)了ONNX Parser將ONNX模型轉(zhuǎn)換為圖中間表示。同時(shí)由于OCR中有第三方的算子可變形卷積(deformable convolution),需要在后端中添加算子的實(shí)現(xiàn)。后續(xù)deformable convolution這一技術(shù)在多個(gè)檢測(cè)場(chǎng)景中都得到了復(fù)用。


基于CUDA的可變形卷積的實(shí)現(xiàn)


  • 通過優(yōu)化cuda算子提高性能

  • 實(shí)現(xiàn)了NHWC 版本 deformable convolution,改進(jìn)了im2col 操作的訪存效率。

  • 實(shí)現(xiàn)內(nèi)存對(duì)齊,將矩陣乘法的m/n/k補(bǔ)齊到8的倍數(shù),確保使用tensor-core進(jìn)行計(jì)算(需要注意的是,這是CUDA11之前的約束,CUDA11之后,TensorCore的使用已經(jīng)沒有了上述限制)。

  • 下圖中展示NCHW和NHWC Layout在進(jìn)行im2col時(shí)的差別,相比于原始的NCHW內(nèi)存布局,NHWC是更加內(nèi)存和Cache友好的內(nèi)存布局,能夠進(jìn)行合并的內(nèi)存訪問(Memory Coalescing)。



基于結(jié)構(gòu)化稀疏的模型加速

  • InferX支持稀疏化模型的構(gòu)建并且支持顯式定義層精度,解決精度問題。

  • 識(shí)別模型加速大約為25%。


基于CUDA的JPEG Decoder優(yōu)化


  • libjpeg的decode是CPU密集型任務(wù), 過高的CPU占用會(huì)影響服務(wù)的穩(wěn)定性并且由于libjpeg已經(jīng)非常成熟,很難優(yōu)化。

  • 實(shí)現(xiàn)了inferx_cv 解碼庫(kù),封裝了nvjpeg,支持硬件解碼,CUDA解碼和CPU解碼。

  • 使用CUDA進(jìn)行jpeg解碼, cuda以非常低的GPU利用率解碼jpeg,耗時(shí)僅為CPU的1/4。


視頻/直播OCR資源復(fù)用和同步化改造


  • 舊的架構(gòu)中,視頻/直播OCR是不同的模型服務(wù)。

  • 舊的架構(gòu)為異步執(zhí)行的GRPC,但是視頻/直播OCR的協(xié)議不同。

  • 通過模型服務(wù)的同步改造,統(tǒng)一了協(xié)議,視頻和直播共享模型服務(wù),Response Time和服務(wù)的穩(wěn)定性都得到了提升。

  • 模型服務(wù)增加優(yōu)先級(jí)的支持,直播請(qǐng)求有更高的優(yōu)先級(jí)。

  • 通過利用視頻和直播服務(wù)的流量趨勢(shì)的差異,大幅提高了線上機(jī)器的GPU利用率。

基于上述優(yōu)化的OCR服務(wù),能夠以80%的GPU利用率穩(wěn)定運(yùn)行,并且保證服務(wù)具有較低的response Time。與未優(yōu)化前相比,總資源數(shù)節(jié)省了63%。


六、Triton模型服務(wù)介紹


相比于推理框架,模型服務(wù)的關(guān)注點(diǎn)是不同的,更加側(cè)重于提高吞吐和并行,提升整體資源利用率。



挑戰(zhàn):

  • 對(duì)于不同業(yè)務(wù)使用的不用類型的模型,提供統(tǒng)一的工程鏈路幫助模型快速上線。

  • 部門自研的推理加速框架InferX能縮短推理時(shí)間,但同樣需要提高吞吐以增加GPU資源利用率。

  • 很多業(yè)務(wù)使用了多個(gè)模型,模型間會(huì)有邏輯及依賴關(guān)系,需要對(duì)模型串聯(lián)/并聯(lián)提供編排能力。

針對(duì)上述問題,我們調(diào)研了常用的開源框架(Triton, TF-Serving等),最終選擇了基于Nvidia Triton Inference Server的模型推理服務(wù),它提供了以下功能:

  • 支持多種深度學(xué)習(xí)框架,包括Pytorch,Tensorflow,ONNX,Python,DALI,TensorRT等框架生成的模型均可部署。并支持自定義的模型框架。

  • 支持模型編排BLS。對(duì)于多模型串聯(lián)/并聯(lián)場(chǎng)景可以使用Python編寫模型編排代碼來完成(1)前處理,(2)分發(fā)tensor到各個(gè)模型推理并回收結(jié)果,(3)后處理的整個(gè)流程。

  • 支持動(dòng)態(tài)batch。即向模型服務(wù)發(fā)送請(qǐng)求不需要提前組batch,Triton可以根據(jù)需要自動(dòng)完成組batch操作,并且可以配置batch的參數(shù),如prefered batch size,queue size,default timeout等。

  • 提供HTTP/gRPC client,可以方便推理服務(wù)上游分發(fā)側(cè)接入。

  • 支持Metrics,自動(dòng)采集服務(wù)實(shí)時(shí)QPS,錯(cuò)誤數(shù),耗時(shí),GPU利用率等參數(shù)。


七、Triton模型服務(wù)+InferX推理框架


我們將InferX推理框架集成進(jìn)Triton模型服務(wù),則構(gòu)成了AI模型推理的終極狀態(tài):低延時(shí)+高吞吐。



推理過程:


  • 模型并發(fā)http/gRPC請(qǐng)求到達(dá)Triton后進(jìn)入模型隊(duì)列,根據(jù)請(qǐng)求到達(dá)時(shí)間動(dòng)態(tài)組成batch,其實(shí)現(xiàn)效率遠(yuǎn)高于手動(dòng)組batch,能使請(qǐng)求更加均衡。

  • batch請(qǐng)求通過模型編排腳本bls的方式,異步分發(fā)到各個(gè)子模型上,使用InferX推理框架的子模型通過推理加速,在最短的時(shí)間內(nèi)完成推理請(qǐng)求。

  • 對(duì)于多模型并聯(lián)的場(chǎng)景,同樣的輸入tensor,多個(gè)模型實(shí)現(xiàn)完美的并行操作,并在內(nèi)部異步回收結(jié)果,對(duì)外整體仍是同步接口。

  • 對(duì)于多模型串聯(lián)的場(chǎng)景,通過流水線復(fù)用覆蓋了多個(gè)請(qǐng)求的網(wǎng)絡(luò)傳輸及隊(duì)列等待時(shí)間,使得GPU能夠盡量少的處于idle狀態(tài)。

  • 同步返回推理結(jié)果,并且統(tǒng)一上報(bào)監(jiān)控指標(biāo)。


性能收益:


  • AI目前已經(jīng)大量部署了Triton模型服務(wù),相比于手寫的python服務(wù)框架,平均單實(shí)例的吞吐都有3-8倍的提高,節(jié)省了50%的GPU卡數(shù),壓力測(cè)試下實(shí)現(xiàn)GPU利用率>90%。

  • 結(jié)合InferX推理框架4-7倍的推理加速,基本上把顯卡的性能壓榨到極致,在不增加GPU采購(gòu)的情況下支持業(yè)務(wù)流量增長(zhǎng)。


八、總結(jié)


通過自研InferX推理框架+Triton模型服務(wù)部署,顯著提升了計(jì)算資源使用效率,降低資源成本,保證服務(wù)響應(yīng)時(shí)間和穩(wěn)定,同時(shí)降低了ai服務(wù)開發(fā)部署成本,更快捷地支持各類型業(yè)務(wù)落地。


嗶哩嗶哩大規(guī)模AI模型推理實(shí)踐的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平舆县| 太仓市| 廉江市| 保山市| 永清县| 盐亭县| 盐边县| 贺州市| 营山县| 沅江市| 宁都县| 轮台县| 凤冈县| 洪江市| 卢龙县| 镇原县| 西畴县| 锡林郭勒盟| 凉城县| 嘉义县| 玉树县| 祁东县| 宝山区| 吉木萨尔县| 托克托县| 墨江| 洛扎县| 睢宁县| 威信县| 滕州市| 台湾省| 湖南省| 青田县| 武隆县| 富民县| 东台市| 旅游| 多伦县| 收藏| 沅江市| 喀喇沁旗|