百度跨平臺(tái)AI推理加速引擎--Anakin
一、前言
AI 技術(shù)包含訓(xùn)練和推理兩個(gè)階段。推理階段的性能好壞既關(guān)系到用戶體驗(yàn),又關(guān)系到企業(yè)的服務(wù)成本,甚至在一些極端應(yīng)用上(比如無(wú)人駕駛)直接關(guān)系到個(gè)人生命財(cái)產(chǎn)安全。目前 AI 落地面臨的挑戰(zhàn)主要來(lái)源于兩方面,一方面是 AI 算法的日新月異,帶來(lái)了計(jì)算量的猛增,從 AlexNet 到 AlphaGo,5 年多的時(shí)間里計(jì)算量提升了 30w 倍。另一方面是底層硬件異構(gòu)化的趨勢(shì)愈發(fā)明顯,近年來(lái)涌現(xiàn)出非常多優(yōu)秀的架構(gòu)來(lái)解決 AI 計(jì)算力問(wèn)題。推理引擎的首要任務(wù)就是將性能優(yōu)異且計(jì)算量龐大的深度學(xué)習(xí)框架快速部署到不同的硬件架構(gòu)之上,并且能夠保持性能相對(duì)高效。然而縱觀開(kāi)源社區(qū)和閉源解決方案,沒(méi)有任何一款推理引擎可以同時(shí)滿足開(kāi)源、跨平臺(tái)、高性能三個(gè)特性。因此,我們結(jié)合百度實(shí)際業(yè)務(wù)的需求、百度優(yōu)秀工程師的研發(fā)能力以及行業(yè)合作伙伴的大力支持共同完成了百度自己的推理引擎 Anakinv0.1.0。Anakin 目前支持 Intel-CPU、NVIDIA-GPU、AMD-GPU 和 ARM 平臺(tái),后續(xù)將支持更多平臺(tái)如寒武紀(jì)、比特大陸等。今天 Anakin 正式開(kāi)源,期望能夠借助社區(qū)的力量把 Anakin 打造的更加精美!
二、 Anakin 架構(gòu)
圖 1 Anakin 框架
Anakin 框架的核心邏輯如圖 1 所示,主要由 Parser,Framework 和 Saber 組成。Parser 是獨(dú)立解析器,用于將不同訓(xùn)練框架生成的模型轉(zhuǎn)化為統(tǒng)一的 Anakin 圖描述。Framework 是框架主體,使用 C++ 實(shí)現(xiàn),用于完成硬件無(wú)關(guān)的所有操作,比如構(gòu)建網(wǎng)絡(luò)、圖融合、資源復(fù)用、計(jì)算調(diào)度等。Saber 是一個(gè)高效的跨平臺(tái)計(jì)算庫(kù),包括大量的匯編級(jí)優(yōu)化代碼,并支持眾多國(guó)際行業(yè)合作伙伴的架構(gòu),如 Intel-cpu,NV-gpu,AMD-gpu 和 ARM 等,同時(shí)以后還將支持寒武紀(jì) MLU100 和比特大陸 BM1682 這兩款優(yōu)秀的國(guó)產(chǎn)芯片。
三、 Anakin 功能特性
Anakin v0.1.0 具有開(kāi)源、跨平臺(tái)、高性能三個(gè)特性,它可以在不同硬件平臺(tái)實(shí)現(xiàn)深度學(xué)習(xí)的高速推理功能。Anakin 在 NV、Intel、ARM 和 AMD-GPU 架構(gòu)上,體現(xiàn)了低功耗、高速預(yù)測(cè)的特點(diǎn)。
1. 支持眾多異構(gòu)平臺(tái)-跨平臺(tái)
Anakin 廣泛的和各個(gè)硬件廠商合作,采用聯(lián)合開(kāi)發(fā)或者部分計(jì)算底層自行設(shè)計(jì)和開(kāi)發(fā)的方式,為 Anakin 打造不同硬件平臺(tái)的計(jì)算引擎。目前 Anakin 已經(jīng)支持了多種硬件架構(gòu),如 Intel-CPU、NVIDIA-GPU、AMD-GPU、ARM 等,未來(lái)將會(huì)陸續(xù)支持比特大陸、寒武紀(jì)深度學(xué)習(xí)芯片等等不同硬件架構(gòu)。我們希望 Anakin 可以為用戶提供更靈活的底層選擇,更方便簡(jiǎn)單的部署方式,并在不同底層硬件上達(dá)到***性能。
2. 高性能
Anakin 在眾多硬件平臺(tái)都有很好的性能收益, 本文列舉了一些實(shí)驗(yàn)對(duì)比測(cè)試數(shù)據(jù),更詳盡的數(shù)據(jù)請(qǐng)參見(jiàn) GitHub 上的 benchmark 數(shù)據(jù)。
- 在 NV 架構(gòu)上,我們選擇 Anakin v0.1.0、TensorRT v3.0.0、Tensorflow v1.7.0 和 Caffe v1.0.0 進(jìn)行了對(duì)比,具體的對(duì)比結(jié)果如圖 2 所示。
測(cè)試平臺(tái) Nvidia-P4 信息:
· GPU ArchitectureNVIDIA Pascal™
· Single-Precision Performance5.5 TFLOPS
· GPU Memory 8 GB
- 在 Intel 架構(gòu)上,我們選取 Tensorflow-v1.8.0 進(jìn)行對(duì)比,具體的對(duì)比結(jié)果如圖 3 所示。
圖 3 Anakin andTensorflow on CPU
測(cè)試平臺(tái)信息:
· i7-7700:Intel (R) Core (TM) i7-7700 CPU @ 3.60GHz
· 2650-v4:Intel (R) Xeon (R) CPU E5-2650 v4 @ 2.20GHz
· 2620-v4:Intel (R) Xeon (R) CPU E5-2620 v4 @ 2.10GHz
- 在移動(dòng)端 ARM 上,我們選取 Tensorflow-lite 進(jìn)行對(duì)比,具體的對(duì)比結(jié)果如圖 4 所示:
圖 4 Anakin and TFlite on ARM
測(cè)試平臺(tái)信息:
· 榮耀 v9(root):處理器:麒麟 960, 4 big cores in2.36GHz, 4 little cores in 1.8GHz
· 高通 835,4 big cores in 2.36GHz, 4 little cores in 1.9GHz
- 在 AMD-GPU 架構(gòu)上,我們選取 Anakin-v0.1.0 進(jìn)行橫向?qū)Ρ?,具體的對(duì)比結(jié)果如圖 5 所示:
圖 5 MI8 and P4 on VGG16 model
測(cè)試平臺(tái)信息:
· MI8: AMDRadeon Instinct MI8
single-Precision Performance8.192 TFLOPS
GPU Memory 4 GB
· P4: GPU Architecture NVIDIAPascal™
Single-Precision Performance5.5 TFLOPS
GPU Memory 8 GB
圖 5 中的折線圖表示 MI8 和 P4 的執(zhí)行效率的相對(duì)比例,具體的計(jì)算公式:
P4_Latency * P4_TFLOPS / (MI8_Latency* MI8_TFLOPS);
從圖上的折線可知 Anakin 在 MI8 和 P4 上執(zhí)行效率非常接近,在 Thread_num 大于 2 時(shí) Anakin_MI8 效率更高。
3. 匯編級(jí)的 kernel 優(yōu)化
Anakin 追求的目標(biāo)是***,因此它提供了一套基于 NVIDIAGPU SASS 匯編級(jí)優(yōu)化的庫(kù)。SASS 庫(kù)支持多種(如 sm61,sm50)NVIDA GPU 架構(gòu)的匯編實(shí)現(xiàn)的 conv 和 gemm 的核心計(jì)算。由于和 NVIDIA 商業(yè)保密協(xié)議規(guī)定,目前只能開(kāi)源編譯好的 SASS 庫(kù)
四、Anakin 值得一提的技術(shù)亮點(diǎn)
- 輕量的 dashboard
Anakin v0.1.0 框架中的 Parser 提供了一個(gè)額外的小功能,可以讓開(kāi)發(fā)者查看 Anakin 優(yōu)化前后的網(wǎng)絡(luò)結(jié)構(gòu)及參數(shù),如圖 6 和圖 7 所示。這將有助于開(kāi)發(fā)者方便的分析模型。同時(shí),在優(yōu)化后的 Anakin 執(zhí)行圖中會(huì)添加相應(yīng)的優(yōu)化標(biāo)記,主要包括 memory 復(fù)用、op 融合、并行度分析、執(zhí)行順序分析、存儲(chǔ)器使用以及同步標(biāo)記等。例如,在圖 7 中,對(duì)于標(biāo)記了 New 標(biāo)簽的地方,在代碼運(yùn)行過(guò)程中,將只會(huì)對(duì)這些內(nèi)容分配內(nèi)存。這種處理方式將使得 Anakin 運(yùn)行時(shí)所需的 memory 更少。
圖 6 優(yōu)化前的網(wǎng)絡(luò)結(jié)構(gòu)圖
圖 7 優(yōu)化后的網(wǎng)絡(luò)結(jié)構(gòu)圖
- Anakin-lite 輕量的移動(dòng)端版本
Anakin 還提供了在移動(dòng)端運(yùn)行的輕量版本 anakin-lite, 我們借助上層圖優(yōu)化機(jī)制,幫助深度學(xué)習(xí)模型 code 自動(dòng)生成,針對(duì)具體模型自動(dòng)生成的可執(zhí)行文件,并且結(jié)合針對(duì) ARM 專(zhuān)門(mén)設(shè)計(jì)的一套輕量接口,合并編譯生成模型的 lite 版本。
Anakin-lite 保持精簡(jiǎn)化,全底層庫(kù)大小經(jīng)過(guò)剪裁只有 150K 左右,加上自動(dòng)生成的深度學(xué)習(xí)模型模塊,總大小在 200K。模型參數(shù)不再采用 protobuf 而是精簡(jiǎn)的 weights 堆疊的方式,盡可能減小 model 尺寸。同時(shí),anakin-lite 依然保有上層 anakin 框架的優(yōu)化分析信息(比如存儲(chǔ)復(fù)用等),最終可以做到內(nèi)存消耗相對(duì)較小,模型尺寸相對(duì)精簡(jiǎn)。
- Anakin 多層次的應(yīng)用
***個(gè)層次:Anakin 可以是一個(gè)計(jì)算庫(kù);
第二個(gè)層次:Anakin 可以是一個(gè)獨(dú)立的推理引擎;
第三個(gè)層次:Anakin 可以通過(guò) Anakin-rpc 構(gòu)建一個(gè)完整的推理服務(wù)?! ?nbsp;
五、Anakin 的發(fā)展前景
Anakin v0.1.0 具有開(kāi)源、跨平臺(tái)、高性能三個(gè)特性,它可以在不同硬件平臺(tái)實(shí)現(xiàn)深度學(xué)習(xí)的高速推理功能。對(duì)于每個(gè)開(kāi)發(fā)廠商,僅僅使用一套 Anakin 框架,就能在不同的硬件服務(wù)器上實(shí)現(xiàn)快速推理。
Anakin 的***目標(biāo)是幫助實(shí)際業(yè)務(wù)模型快速迭代和上線,為深度學(xué)習(xí)模型產(chǎn)業(yè)化落地掃清障礙,從而讓廣大的工程師更專(zhuān)注算法設(shè)計(jì),從繁重的優(yōu)化和工程中解脫出來(lái),進(jìn)而推動(dòng)深度學(xué)習(xí)的哪怕一點(diǎn)點(diǎn)的進(jìn)步,這就是我們***的愿望。