1. AI 框架部署方案之模型部署概述

        共 4871字,需瀏覽 10分鐘

         ·

        2021-05-29 18:19

        點(diǎn)藍(lán)色字關(guān)注“機(jī)器學(xué)習(xí)算法工程師

        設(shè)為星標(biāo),干貨直達(dá)!

        AI編輯:我是小將

        本文作者:OpenMMLab @小P家的 101101

        https://zhuanlan.zhihu.com/p/367042545

        本文已由原作者授權(quán)轉(zhuǎn)載


        0 概述

        模型訓(xùn)練重點(diǎn)關(guān)注的是如何通過(guò)訓(xùn)練策略來(lái)得到一個(gè)性能更好的模型,其過(guò)程似乎包含著各種“玄學(xué)”,被戲稱為“煉丹”。整個(gè)流程包含從訓(xùn)練樣本的獲取(包括數(shù)據(jù)采集與標(biāo)注),模型結(jié)構(gòu)的確定,損失函數(shù)和評(píng)價(jià)指標(biāo)的確定,到模型參數(shù)的訓(xùn)練,這部分更多是業(yè)務(wù)方去承接相關(guān)工作。一旦“煉丹”完成(即訓(xùn)練得到了一個(gè)指標(biāo)不錯(cuò)的模型),如何將這顆“丹藥”賦能到實(shí)際業(yè)務(wù)中,充分發(fā)揮其能力,這就是部署方需要承接的工作。

        因此,一般來(lái)說(shuō),學(xué)術(shù)界負(fù)責(zé)各種 SOTA(State of the Art) 模型的訓(xùn)練和結(jié)構(gòu)探索,而工業(yè)界負(fù)責(zé)將這些 SOTA 模型應(yīng)用落地,賦能百業(yè)。本文將要講述的是,在 CV 場(chǎng)景中,如何實(shí)現(xiàn)模型的快速落地,賦能到產(chǎn)業(yè)應(yīng)用中。模型部署一般無(wú)需再考慮如何修改訓(xùn)練方式或者修改網(wǎng)絡(luò)結(jié)構(gòu)以提高模型精度,更多的是需要明確部署的場(chǎng)景、部署方式(中心服務(wù)化還是本地終端部署)、模型的優(yōu)化指標(biāo),以及如何提高吞吐率和減少延遲等,接下來(lái)將逐一進(jìn)行介紹。

        1 模型部署場(chǎng)景

        這個(gè)問(wèn)題主要源于中心服務(wù)器云端部署和邊緣部署兩種方式的差異 云端部署常見的模式是,模型部署在云端服務(wù)器,用戶通過(guò)網(wǎng)頁(yè)訪問(wèn)或者 API 接口調(diào)用等形式向云端服務(wù)器發(fā)出請(qǐng)求,云端收到請(qǐng)求后處理并返回結(jié)果。邊緣部署則主要用于嵌入式設(shè)備,主要通過(guò)將模型打包封裝到 SDK,集成到嵌入式設(shè)備,數(shù)據(jù)的處理和模型推理都在終端設(shè)備上執(zhí)行。

        2 模型部署方式

        針對(duì)上面提到的兩種場(chǎng)景,分別有兩種不同的部署方案,Service 部署和 SDK 部署。 Service 部署:主要用于中心服務(wù)器云端部署,一般直接以訓(xùn)練的引擎庫(kù)作為推理服務(wù)模式。 SDK 部署:主要用于嵌入式端部署場(chǎng)景,以 C++ 等語(yǔ)言實(shí)現(xiàn)一套高效的前后處理和推理引擎庫(kù)(高效推理模式下的 Operation/Layer/Module 的實(shí)現(xiàn)),用于提供高性能推理能力。此種方式一般需要考慮模型轉(zhuǎn)換(動(dòng)態(tài)圖靜態(tài)化)、模型聯(lián)合編譯等進(jìn)行深度優(yōu)化。


        SDK 部署Service 部署
        部署環(huán)境SDK 引擎訓(xùn)練框架
        模型語(yǔ)義轉(zhuǎn)換需要進(jìn)行前后處理和模型的算子重實(shí)現(xiàn)一般框架內(nèi)部負(fù)責(zé)語(yǔ)義轉(zhuǎn)換
        前后處理對(duì)齊算子訓(xùn)練和部署對(duì)應(yīng)兩套實(shí)現(xiàn),需要進(jìn)行算子數(shù)值對(duì)齊共用算子
        計(jì)算優(yōu)化偏向于挖掘芯片編譯器的深度優(yōu)化能力利用引擎已有訓(xùn)練優(yōu)化能力



        3 部署的核心優(yōu)化指標(biāo)

        部署的核心目標(biāo)是合理把控成本、功耗、性價(jià)比三大要素。

        成本問(wèn)題是部署硬件的重中之重,AI 模型部署到硬件上的成本將極大限制用戶的業(yè)務(wù)承受能力。成本問(wèn)題主要聚焦于芯片的選型,比如,對(duì)比寒武紀(jì) MLU220 和 MLU270,MLU270 主要用作數(shù)據(jù)中心級(jí)的加速卡,其算力和功耗都相對(duì)于邊緣端的人工智能加速卡MLU220要低。至于 Nvida 推出的 Jetson 和 Tesla T4 也是類似思路,Tesla T4 是主打數(shù)據(jù)中心的推理加速卡,而 Jetson 則是嵌入式設(shè)備的加速卡。對(duì)于終端場(chǎng)景,還會(huì)根據(jù)對(duì)算力的需求進(jìn)一步細(xì)分,比如表中給出的高通驍龍芯片,除 GPU 的浮點(diǎn)算力外,還會(huì)增加 DSP 以增加定點(diǎn)算力,篇幅有限,不再贅述,主要還是根據(jù)成本和業(yè)務(wù)需求來(lái)進(jìn)行權(quán)衡。

        芯片型號(hào)算力功耗
        Snapdragon 8557 TOPS (DSP) + 954.7 GFLOPs(GPU FP32)10 W
        Snapdragon 86515 TOPS (DSP) + 1372.1 GFLOPs(GPU FP32)10 W
        MLU2208 TOPS (INT8)8.25 W
        MLU270-S4128 TOPS (INT8)70w
        Jetson-TX21.30 TOPS (FP16)7.5 W / 15 W
        T4130 TOPS (INT8)70 W

        在數(shù)據(jù)中心服務(wù)場(chǎng)景,對(duì)于功耗的約束要求相對(duì)較低;在邊緣終端設(shè)備場(chǎng)景,硬件的功耗會(huì)影響邊緣設(shè)備的電池使用時(shí)長(zhǎng)。因此,對(duì)于功耗要求相對(duì)較高,一般來(lái)說(shuō),利用 NPU 等專用優(yōu)化的加速器單元來(lái)處理神經(jīng)網(wǎng)絡(luò)等高密度計(jì)算,能節(jié)省大量功耗。

        不同的業(yè)務(wù)場(chǎng)景對(duì)于芯片的選擇有所不同,以達(dá)到更高的性價(jià)比。從公司業(yè)務(wù)來(lái)看,云端相對(duì)更加關(guān)注是多路的吞吐量?jī)?yōu)化需求,而終端場(chǎng)景則更關(guān)注單路的延時(shí)需要。在目前主流的 CV 領(lǐng)域,低比特模型相對(duì)成熟,且 INT8/INT4 芯片因成本低,且算力比高的原因已被廣泛使用;但在NLP或者語(yǔ)音等領(lǐng)域,對(duì)于精度的要求較高,低比特模型精度可能會(huì)存在難以接受的精度損失,因此 FP16 是相對(duì)更優(yōu)的選擇。在 CV 領(lǐng)域的芯片性價(jià)比選型上,在有 INT8/INT4 計(jì)算精度的芯片里,主打低精度算力的產(chǎn)品是追求高性價(jià)比的主要選擇之一,但這也為平衡精度和性價(jià)比提出了巨大的挑戰(zhàn)。

        4 部署流程

        上面簡(jiǎn)要介紹了部署的主要方式和場(chǎng)景,以及部署芯片的選型考量指標(biāo),接下來(lái)以 SDK 部署為例,給大家概括介紹一下 SenseParrots 在部署中的整體流程。SenseParrots 部署流程大致分為以下幾個(gè)步驟:模型轉(zhuǎn)換、模型量化壓縮、模型打包封裝 SDK。

        4.1 模型轉(zhuǎn)換

        模型轉(zhuǎn)換主要用于模型在不同框架之間的流轉(zhuǎn),常用于訓(xùn)練和推理場(chǎng)景的連接。目前主流的框架都以 ONNX 或者 caffe 為模型的交換格式,SenseParrots 也不例外。SenseParrots 的模型轉(zhuǎn)換主要分為計(jì)算圖生成和計(jì)算圖轉(zhuǎn)換兩大步驟,另外,根據(jù)需要,還可以在中間插入計(jì)算圖優(yōu)化,對(duì)計(jì)算機(jī)進(jìn)行推理加速(諸如常見的 CONV/BN 的算子融合)。

        計(jì)算圖生成是通過(guò)一次 inference 并追蹤記錄的方式,將用戶的模型完整地翻譯成靜態(tài)的表達(dá)。在模型 inference 的過(guò)程中,框架會(huì)記錄執(zhí)行算子的類型、輸入輸出、超參、參數(shù)和調(diào)用該算子的模型層次,最后把 inference 過(guò)程中得到的算子信息和模型信息結(jié)合得到最終的靜態(tài)計(jì)算圖。

        在計(jì)算圖生成之后與計(jì)算圖轉(zhuǎn)換之前,可以進(jìn)行計(jì)算圖優(yōu)化,例如去除冗余 op,計(jì)算合并等。SenseParrots 原生實(shí)現(xiàn)了一批計(jì)算圖的精簡(jiǎn)優(yōu)化 pass,也開放接口鼓勵(lì)用戶對(duì)計(jì)算圖進(jìn)行自定義的處理和優(yōu)化操作。

        計(jì)算圖轉(zhuǎn)換是指分析靜態(tài)計(jì)算圖的算子,對(duì)應(yīng)轉(zhuǎn)換到目標(biāo)格式。SenseParrots 支持了多后端的轉(zhuǎn)換,能夠轉(zhuǎn)換到各個(gè) opset 的 ONNX、原生 caffe 和多種第三方版本的 caffe??蚣芡ㄟ^(guò)算子轉(zhuǎn)換器繼承或重寫的方式,讓 ONNX 和 caffe 的不同版本的轉(zhuǎn)換開發(fā)變得更加簡(jiǎn)單。同時(shí),框架開放了自定義算子生成和自定義算子轉(zhuǎn)換器的接口,讓第三方框架開發(fā)者也能夠輕松地自主開發(fā)實(shí)現(xiàn) SenseParrots 到第三方框架的轉(zhuǎn)換。

        4.2 模型量化壓縮

        終端場(chǎng)景中,一般會(huì)有內(nèi)存和速度的考慮,因此會(huì)要求模型盡量小,同時(shí)保證較高的吞吐率。除了人工針對(duì)嵌入式設(shè)備設(shè)計(jì)合適的模型,如 MobileNet 系列,通過(guò) NAS(Neural Architecture Search) 自動(dòng)搜索小模型,以及通過(guò)蒸餾/剪枝的方式壓縮模型外,一般還會(huì)使用量化來(lái)達(dá)到減小模型規(guī)模和加速的目的。

        量化的過(guò)程主要是將原始浮點(diǎn) FP32 訓(xùn)練出來(lái)的模型壓縮到定點(diǎn) INT8(或者 INT4/INT1) 的模型,由于 INT8 只需要 8 比特來(lái)表示,因此相對(duì)于 32 比特的浮點(diǎn),其模型規(guī)模理論上可以直接降為原來(lái)的 1/4,這種壓縮率是非常直觀的。另外,大部分終端設(shè)備都會(huì)有專用的定點(diǎn)計(jì)算單元,通過(guò)低比特指令實(shí)現(xiàn)的低精度算子,速度上會(huì)有很大的提升,當(dāng)然,這部分還依賴協(xié)同體系結(jié)構(gòu)和算法來(lái)獲得更大的加速。

        量化的技術(shù)棧主要分為量化訓(xùn)練(QAT, Quantization Aware Training)離線量化(PTQ, Post Training Quantization), 兩者的主要區(qū)別在于,量化訓(xùn)練是通過(guò)對(duì)模型插入偽量化算子(這些算子用來(lái)模擬低精度運(yùn)算的邏輯),通過(guò)梯度下降等優(yōu)化方式在原始浮點(diǎn)模型上進(jìn)行微調(diào),從來(lái)調(diào)整參數(shù)得到精度符合預(yù)期的模型。離線量化主要是通過(guò)少量校準(zhǔn)數(shù)據(jù)集(從原始數(shù)據(jù)集中挑選 100-1000 張圖,不需要訓(xùn)練樣本的標(biāo)簽)獲得網(wǎng)絡(luò)的 activation 分布,通過(guò)統(tǒng)計(jì)手段或者優(yōu)化浮點(diǎn)和定點(diǎn)輸出的分布來(lái)獲得量化參數(shù),從而獲取最終部署的模型。兩者各有優(yōu)劣,量化訓(xùn)練基于原始浮點(diǎn)模型的訓(xùn)練邏輯進(jìn)行訓(xùn)練,理論上更能保證收斂到原始模型的精度,但需要精細(xì)調(diào)參且生產(chǎn)周期較長(zhǎng);離線量化只需要基于少量校準(zhǔn)數(shù)據(jù),因此生產(chǎn)周期短且更加靈活,缺點(diǎn)是精度可能略遜于量化訓(xùn)練。實(shí)際落地過(guò)程中,發(fā)現(xiàn)大部分模型通過(guò)離線量化就可以獲得不錯(cuò)的模型精度(1% 以內(nèi)的精度損失,當(dāng)然這部分精度的提升也得益于優(yōu)化策略的加持),剩下少部分模型可能需要通過(guò)量化訓(xùn)練來(lái)彌補(bǔ)精度損失,因此實(shí)際業(yè)務(wù)中會(huì)結(jié)合兩者的優(yōu)劣來(lái)應(yīng)用。

        量化主要有兩大難點(diǎn):一是如何平衡模型的吞吐率和精度,二是如何結(jié)合推理引擎充分挖掘芯片的能力。比特?cái)?shù)越低其吞吐率可能會(huì)越大,但其精度損失可能也會(huì)越大,因此,如何通過(guò)算法提升精度至關(guān)重要,這也是組內(nèi)的主要工作之一。另外,壓縮到低比特,某些情況下吞吐率未必會(huì)提升,還需要結(jié)合推理引擎優(yōu)化一起對(duì)模型進(jìn)行圖優(yōu)化,甚至有時(shí)候會(huì)反饋如何進(jìn)行網(wǎng)絡(luò)設(shè)計(jì),因此會(huì)是一個(gè)算法與工程迭代的過(guò)程。

        4.3 模型打包封裝 SDK

        實(shí)際業(yè)務(wù)落地過(guò)程中,模型可能只是產(chǎn)品流程中的一環(huán),用于實(shí)現(xiàn)某些特定功能,其輸出可能會(huì)用于流程的下一環(huán)。因此,模型打包會(huì)將模型的前后處理,一個(gè)或者多個(gè)模型整合到一起,再加入描述性的文件(前后處理的參數(shù)、模型相關(guān)參數(shù)、模型格式和版本等)來(lái)實(shí)現(xiàn)一個(gè)完整的功能。因此,SDK 除了需要一些通用前后處理的高效實(shí)現(xiàn),對(duì)齊訓(xùn)練時(shí)的前后處理邏輯,還需要具有足夠好的擴(kuò)展性來(lái)應(yīng)對(duì)不同的場(chǎng)景,方便業(yè)務(wù)線同學(xué)擴(kuò)展新的功能??梢钥吹?,模型打包過(guò)程更多是模型的進(jìn)一步組裝,將不同模型組裝在一起,當(dāng)需要使用的時(shí)候?qū)⑦@些內(nèi)容解析成整個(gè)流程(pipeline)的不同階段(stage),從而實(shí)現(xiàn)整個(gè)產(chǎn)品功能。

        另外,考慮到模型很大程度是研究員的研究成果,對(duì)外涉及保密問(wèn)題,因此會(huì)對(duì)模型進(jìn)行加密,以保證其安全性。加密算法的選擇需要根據(jù)實(shí)際業(yè)務(wù)需求來(lái)決定,諸如不同加密算法其加解密效率不一樣,加解密是否有中心驗(yàn)證服務(wù)器,其核心都是為了保護(hù)研究成果。



        推薦閱讀

        CPVT:一個(gè)卷積就可以隱式編碼位置信息

        DETR:基于 Transformers 的目標(biāo)檢測(cè)

        MoCo V3:我并不是你想的那樣!

        Transformer在語(yǔ)義分割上的應(yīng)用

        "未來(lái)"的經(jīng)典之作ViT:transformer is all you need!

        PVT:可用于密集任務(wù)backbone的金字塔視覺transformer!

        漲點(diǎn)神器FixRes:兩次超越ImageNet數(shù)據(jù)集上的SOTA

        Transformer為何能闖入CV界秒殺CNN?

        不妨試試MoCo,來(lái)替換ImageNet上pretrain模型!


        機(jī)器學(xué)習(xí)算法工程師


                                            一個(gè)用心的公眾號(hào)


         


        瀏覽 124
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. gay高潮痉挛哭叫 | 色999国产精品 | 免费又色又爽无遮挡的扒胸罩 | 免费欧美成人网站 | 91无码一区二区三区在线 |