工業(yè)模型生物模型製作方案(àn)
因為(wéi)這些設備往往對計算資源和能耗有較大限中航產業團體招聘官網製,因此在高機能服務器上練習得到的神經(jīng)網(wǎng)絡模型(xíng)需要進行裁剪以縮小內存占用、晉升計算速度後,才能較好地在這些平(píng)台上運(yùn)行。練習(xí)結束後可以轉換至 QFloat 模型上,通過配置(zhì)不同的 Observer 和假量化算子來選(xuǎn)擇不同的量化參數(shù) scale 獲取方式,從而選擇進行 QAT 或 Calibration 後量化。
一(yī)般在通用計算平台上,浮點計算是最常用(yòng)的計算方式,所以大(dà)部門指令也是(shì)針對浮點計算的,這使得量化模型所需的定點計(jì)算機(jī)能往往並不理想,這就(jiù)需要針對各個平台優化其定(dìng)點(diǎn)計算(suàn)的機能。之後可以再轉換至 Q 模型上,通過 trace.dump 接口就可以 直接導(dǎo)出進行部署。
而對於(yú)不支持 VNNI 指令的 CPU,一般隻提供最低 int16 的數值類型支持,則通過使用(yòng) AVX2(Advanced Vector Extensions)這一向量格局,實現了 int8 推理機能與浮點機(jī)能持(chí)平。

使用:
除了底層實現上的加速與優化,在 Python 側練習部門,MegEngine 中航產業團體股票對接(jiē)口也有良多細節設計,使得整體代碼邏輯清楚簡潔。
如上圖,用戶首(shǒu)先在普(pǔ)通 Module 長進行正常的(de)模型(xíng)練(liàn)習工作。分別代表上文提及的帶假量化算子的 QFloat 模型與 Q 模型,並提供產業機理模型有哪(nǎ)幾種 普通(tōng) Module → QATModule → QuantizedModule 三階段的轉換接口。本文將扼要先容(róng)神經網絡量化中航(háng)產業團體財務(wù)有限責任公司西循分公(gōng)司 的原理,並與大家分享 MegEngine 量化方麵的設(shè)計思路與實操教程。
第一步在 MegEngine 框架的(de)“練習推理一體化”特性下(xià)得到了保證,而產業模(mó)型製作方案(àn)第二步則取決於不同的量化算法。
量化的目的是為了追求極致的推理計算速度,為此舍棄了數值表示的精度,直覺上會帶來較大的模型掉點,但是在使用一係(xì)列精細的量化處理之(zhī)後,其在推理時的掉點可以變得微乎(hū)其微,並能(néng)支持正常的部署應用(yòng)。
量化部門(mén)作為模型推理部署(shǔ)的重要步驟,是業界在大規模產業應用當(dāng)中極為關(guān)注(zhù)的部門,它(tā)在 MegEngine 的(de)底層優化中也占了很大的比重。
而(ér)對於 v8.2 之前(qián)的 ARM 處理器,MegEngine 則通過對 Conv 使用(yòng) nchw4中航產業團體財(cái)務有限公司4 的 layout 和(hé)細粒度優化,並(bìng)立異性地使用了 int8(而非傳統的 int6)下的 winograd 算法來加速 Conv 計算,最使實現能夠和浮點運算媲美的速度。
這樣實(shí)現(xiàn)的缺點在於用戶在(zài)使(shǐ)用時需要修改原(yuán)先的網重慶產業(yè)模(mó)型(xíng)絡結構,使用 fuse 好的 Module 搭建網絡,而好處則是用戶能更直接地控製網絡如何轉換,比猶如時存在需要 fuse 和不需要 fuse 的 Conv 算子,比擬提供一個冗長的白名單(dān),www.17C.com更(gèng)傾向於在網絡(luò)結構中顯式地控製,而一些默認會進行轉換的算子,也可以通過 disable_quantize 方法來控(kòng)製其不(bú)進(jìn)行(háng)轉換。

以上是對各個平台推理加速效果的整體先容,更多更細節的先容可以期待之後的係列文(wén)章。
近年來跟著邊沿計算和物聯網的興起與發展中航產業電子采購平台網址,很多移動終端(好比手機)成為(wéi)了深度學習應用的承載平台,甚至泛起了各(gè)式各(gè)樣專用的神經網絡(luò)計算芯(xīn)片。各個版本的(de)算子是逐一(yī)對應的,且通過公道的類繼建築模型製作書籍承免除了大(dà)量算子實現中的冗餘代碼,清楚簡潔(jié)。
一種(zhǒng)最直觀的裁剪方式就是用更少位數產業模型素材(cái)網站的(de)數值類型來存儲網絡參數,好(hǎo)比(bǐ)常見的做法是將 32 位浮點數模型轉換成 8 位整數模(mó)型,模型大小減少為 1/4,而運行在特定的設備上其計算速度也能晉升為 2~4 倍(bèi),這種模型轉換(huàn)方式叫做量化(Quantization)。
因為三者的(de)精度一般(bān)是 Float > QFloat > Q ,故量化算法也就分為兩步:
拉近 QFloat 中航產業團體電子采購平(píng)台和 Q:?這樣練習階段的精度可以作為終極 Q 精度的代辦代理指標(biāo),這一階段偏工程;
拔高 QFloat 迫臨 Float:?這樣中航產業618所招聘要求就可以將量(liàng)化模型機能盡可能(néng)恢複到 Float 的精度,這一階段偏算法。
在新一代(dài)至強(Xeon)處(chù)理器上,通過使用 VNNI(Vector Neural Network Instructions)指令,MegEngine 將(jiāng) CPU 的 int8 推理機能優化到了浮點機能的 2~3 倍。
產業模型生物模型製作方案
工程之道,曠視MegEngine產業級模型量化能力的構建與實戰
從練習(xí)到部署完整(zhěng)的量化支持,包(bāo)括量(liàng)化感知練習以及練習後量化,憑借(jiè)“練習(xí)推生物(wù)模型(xíng)製作方案(àn)理(lǐ)一(yī)體”的特(tè)性,MegEngine 更能保證量化(huà)之後的模型與部署之後(hòu)的效果一(yī)致。
CUDA 平台
CUDA 平台(tái)是指 NVIDIA 旗(qí)下 GPU 平台,因為提供 CUDNN 和 Toolkit 係列接口以及(jí) TensorRT 專用推理庫,大(dà)部門(mén)算子可以(yǐ)使用官方優化,而 MegEngine 則(zé)在此基(jī)礎長進行了更多細節的優化,好比如何更(gèng)好地利用 GPU 的 TensorCore 進行加速,不同型號之間一些差異的(de)處理等,終極效(xiào)果根據不(bú)同模(mó)型也有非常顯著的推理加速。
盡管不同量(liàng)化算法可能在假量化的詳細實現上有所(suǒ)區別,但是一般都會有一個“截斷”的操縱,即把數值範圍較大的浮點數轉(zhuǎn)換(huàn)成數值範圍較小的整數類型,好比下(xià)圖,輸入一個 [-1, 1) 範圍的浮點數,假如轉換為 4 位整型,則(zé)最多隻能表示 2^4 個值,所以需要將(jiāng)輸入的(de)範圍(wéi)劃分為 16 段,每段對應一個固定的輸出值,這樣就(jiù)形成了一個類似(sì)分段函數的圖像,計算公(gōng)式為:
另外,因(yīn)為(wéi)分段函數在分段點沒有梯度(dù),所認為了使假量化(huà)操縱不影響梯度回傳,就需要模擬一個梯度,最簡樸的方法就是用 y=x 來模擬這一分模型製作需要的材料段(duàn)函數,事實證實這麽做也是有效的,這種經典的操縱被稱為“Straight-Through-Estimator”(STE)。
針對推理優化中常用(yòng)的算子融合,MegEngine 提供了一(yī)係列已 fuse 好的 Module,其對應的 QuantizedModule 版本都會直接調用底層實現好的融合算(suàn)子(好比 conv_bias)。
www.17C.com在 Module 中額外引入了兩個基類:中航產業618所所長QATModule、QuantizedModule 。
實現量化的算法多種多樣,一般按照代價從低到高可(kě)以分為以下四種:
Type1 產業模型公司和 Type2 因為是在模型(xíng)浮點模型練習之(zhī)後參與,無需(xū)大量練習數據,故而轉(zhuǎn)換代價更低,被稱為?後量化(Post Quantization),區別在於是否(fǒu)需要(yào)小批量數據來?校(xiào)準(Calibration);
Type3 和 Type4 則需要在浮點(diǎn)模型(xíng)練習時就插入一些?假量(liàng)化(FakeQuantize)算子,模擬(nǐ)量化過程中數值截斷後精度(dù)降低的情(qíng)形,故(gù)而稱為?量化感知練習(Quantization Aware Training, QAT)。
另外我(wǒ)們(men)還明確了假量化算子(FakeQuantize)和 Observer 的職(zhí)責,前者將主要負責對輸入進行截斷處理的計算部門,而後者則隻會記實輸入的值(zhí),不會改變輸出,符合 Observer 的語義。

以常(cháng)用的 Type3 為例,一個完整的量化(huà)流程分為(wéi)三階段:(1)以一個練習完畢(bì)的浮點模型(稱為 Float 模型)為出發點;(2)包含假量化算子的用浮點操(cāo)縱(zòng)來模擬量化過程的新模型(Quantized-Float 模型中航產業團體宣傳片或 QFloat 模型);(3)可以(yǐ)直(zhí)接在終端設備(bèi)上運行的模型(Quantized 模型,簡稱 Q 模中航產業團體下屬公司型)。

ARM 平台
ARM 平台一般是指手(shǒu)機(jī)移動端,其係統架構和底層指令都不同於www.17C.com熟知的電腦 CPU,而跟著架構的變遷,不同架構之間的指令也存在不兼容的題(tí)目。
X86 平(píng)台

X86 平台是指 Intel CPU 平台,近年來跟著深度學習的發展,其也慢(màn)慢(màn)提供了針(zhēn)對定點運算更多的支持。為此,MegEngine 針對 ARM v8.2 前後版天職別中航產業(yè)團(tuán)體招聘 實現了不同(tóng)的優化:
ARM v8.2 主要的特性是提供了新的引入了(le)新的 fp16 運算和 int8 dot 指地球結構模型製作方(fāng)案令,MegEngine 基於此進行一係列細節優化(細節:四個 int8 放到一個 128 寄存(cún)器的 32 分塊裏一起算),終極實現南(nán)京產業模型了比浮點版本快 2~3 倍的速度晉升。在目前開源的版(bǎn)本中,針對三大平台(X86、CUDA、ARM)都有非常具體的支持,尤其是 ARM 平台。