愛鋒貝

標(biāo)題: 模型加速與 AI compiler 介紹 [打印本頁]

作者: 毛屌屌    時間: 2023-4-4 09:03
標(biāo)題: 模型加速與 AI compiler 介紹
目標(biāo)

AI 從業(yè)者的定義:深度參與過模型的訓(xùn)練優(yōu)化或推理部署。
不涉及什么
背景介紹

當(dāng)我們談到深度學(xué)習(xí)時,可能在談什么

(, 下載次數(shù): 172)
出自: https://www.modb.pro/doc/48500 飛槳:源于產(chǎn)業(yè)實踐的開源深度學(xué)習(xí)平臺 -藍翔 _百度
模型訓(xùn)練的速度 - from paper

Model NameTraining Time時間HardwareData sizePaper Link
Transformer12h2017.068 P100 GPU37000 tokenhttp://arxiv.org/abs/1706.03762
BERT81.4h2018.1016 TPU3.3B word corpushttps://arxiv.org/abs/1810.04805
BERT76 min2019.41024 TPU3.3B word corpushttps://arxiv.org/abs/1904.00962
XLNet2.5days2019.6512 TPU v3 chips32.89Bhttps://arxiv.org/abs/1906.08237
Resnet502.2 min2018.11TPU v3 PodImageNethttps://arxiv.org/abs/1811.06992
Resnet5075s2019.32048 GPU v100ImageNethttps://arxiv.org/abs/1903.12650
GPTmonth2018.68 GPUBooksCorpus 800M wordshttps://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
GPT-2week2019.2256 of Google's Cloud TPU v323 million URLsover 10 million HTML pageshttps://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
BigGAN24~48h2018.9TPU v3 PodImageNethttps://arxiv.org/abs/1809.11096
ResNet 10132*16D22days2018.5336GPU3.5 billion imageshttps://research.fb.com/wp-content/uploads/2018/05/exploring_the_limits_of_weakly_supervised_pretraining.pdf
RoBERTa1day2019.71024 v1004倍 XLNet, 40倍 BERThttps://arxiv.org/pdf/1907.11692.pdf
ELMo2weeks2018.23 GTX 10805.5B tokenshttps://arxiv.org/abs/1802.05365
模型訓(xùn)練 vs 推理部署

深度學(xué)習(xí)框架的數(shù)量,那可以太多了。
訓(xùn)練框架
推理框架
國產(chǎn)框架:

深度學(xué)習(xí)框架簡史:https://syncedreview.com/2020/12/14/a-brief-history-of-deep-learning-frameworks/
總結(jié)要點:
模型部署的軟件棧

百度 PaddlePaddle 的工具鏈
出自: https://www.modb.pro/doc/48500

(, 下載次數(shù): 165)

(, 下載次數(shù): 184)
Paddle 賺錢

(, 下載次數(shù): 141)
華為 MindSpore
來自 https://www.slideshare.net/Huawei/introduction-to-huaweis-fullstack-ai-portfolio

(, 下載次數(shù): 156)

(, 下載次數(shù): 169)

(, 下載次數(shù): 153)
來自 https://www.mindspore.cn/tutorial/zh-CN/r1.2/introduction.html

(, 下載次數(shù): 164)
寒武紀(jì)軟件棧介紹

(, 下載次數(shù): 166)
Cambricon PyTorch 訓(xùn)推一體:系統(tǒng)架構(gòu)分為前端和后端兩部分,前端指的是 Torch 和 Catch 中的各種算子接口,后端指的是 CNNL 和 MagicMind ;
CNNL:寒武紀(jì)人工智能計算庫,支持豐富基本算子、可變輸入推理、量化訓(xùn)練和混合精度訓(xùn)練;
MagicMind:寒武紀(jì)推理加速引擎,支持靈活輸入維度、多種量化模式、多種圖優(yōu)化算法,給用戶帶來極致推理性能;
高性能計算入門

軟件工程師需要了解的硬件特性
要點總結(jié):
From https://zhuanlan.zhihu.com/p/613611390
從 CPU 到 GPU 是 2015、2016 年左右,從 GPU 到 TPU 是 2019 年左右。

(, 下載次數(shù): 191)
優(yōu)質(zhì)讀物

高性能計算的研究內(nèi)容
高性能計算,主要針對科學(xué)計算。研究的核心是如何加速 nested loops。
科學(xué)計算的特點,是大量的數(shù)據(jù)運算 -> 大量 nested loops
優(yōu)化 nested loops 的手段,主要是并行計算。
并行計算分 4(or many) 類:
前 3 類的優(yōu)化,非?;A(chǔ),需要懂 hardware & Linux kernel。
第 4 類,比較常見。其中,分布式內(nèi)存的,通俗的說,就是分布式計算了。
高性能計算入門的 Hello world:矩陣乘 (General matrix multiply),簡稱 GEMM。
加速的方法論
維基百科 - Amdahl's law
在問題總量不變的前提下,提升并行度帶來的加速收益,越來越小。

(, 下載次數(shù): 173)
維基百科 - Gustafson's law
Amdahl's Law 假定了問題的規(guī)模(計算量)不變,實際上,隨著資源利用率的改善,工程師們總是會增加新的計算需求進來,提升了問題規(guī)模。
因此,不能被并行優(yōu)化的部分,隨著問題規(guī)模的增長,對系統(tǒng)總體速度的影響,越來越小。
Roofline Model paper
一套算法,用于評估:
計算量為 A 且訪存量為 B 的模型在算力為 c 且?guī)挒?D 的計算平臺所能達到的理論性能上限E是多少。

(, 下載次數(shù): 165)
streetlight 方法
A policeman sees a drunk looking under a streetlight,
and asks what he is looking for.
The drunk says he has lost his keys.
The policeman can't find them either,
and asks if he lost them under the streetlight.
The drunk replies:
"No, but this is where the light is best."
總結(jié):只做會的,不做對的。
Why AI compiler

問題:AI compiler 會不會成為下一個被 AI 革了命的領(lǐng)域?
深度學(xué)習(xí)模型的加速手段

模型的表示 - DAG

Deep learning 模型就是一個 DAG 圖 Directed acyclic graph,有向無環(huán)圖。
建模方法:
Node: operator (運算,粗略理解,就是函數(shù))
Edge:  Tensor (張量,即,數(shù)據(jù)。粗略理解,就是函數(shù)的輸入?yún)?shù)和輸出數(shù)據(jù),一個函數(shù)的輸出,同時又是下一個函數(shù)的輸入)
可視化工具:https://github.com/lutzroeder/netron
另一個古老的 caffe 工具:https://dgschwend.github.io/netscope/#/preset/inceptionv4

(, 下載次數(shù): 163)
如何讓模型跑的更快

工程上,就是 2 個 layer 的工作:
編譯器優(yōu)化 loop optimization 三板斧:
算法上,深度學(xué)習(xí)圈研究的比較多:
原理:
模型中只有小部分參數(shù)起了核心作用,其他的大部分參數(shù)是無效參數(shù),可以去除掉。即,矩陣稀疏化。
不能去掉的參數(shù)中,很多參數(shù)在推理時的狀態(tài)空間非常少,用 int8 就足以區(qū)分開。不需要 fp32。即,量化。

(, 下載次數(shù): 153)
Transformer 類模型的加速

加速方法,詳見 https://scale.com/blog/pytorch-improvements
2 個自測題:
Transformer 架構(gòu)的算力特征
Attention Is All You Need Arxiv
【李沐精讀】https://www.bilibili.com/video/BV1pu411o7BE
比論文更好讀的 blog: The Annotated Transformer
Transformer 架構(gòu)圖:

(, 下載次數(shù): 157)
作為對比,LSTM 架構(gòu)圖

(, 下載次數(shù): 162)
CNN 架構(gòu)

(, 下載次數(shù): 152)
CNN 和 transformer,都用一組結(jié)構(gòu)相同但 weight 不同的 block 去學(xué)習(xí),
block 之間相互不依賴,可以 parallel 執(zhí)行。
LSTM 為代表的 RNN,都是 sequential 的處理,每一個 block 都要接收前序 block 的 output,存在數(shù)據(jù)依賴,很難并行。
詳細(xì)解釋:https://voidful.medium.com/why-transformer-faster-then-lstm-on-generation-c3f30977d747
總結(jié):
LSTM 一直被算力鎖死了學(xué)習(xí)能力,換成 transformer 以后,學(xué)習(xí)能力就碾壓了。
CNN 被算力鎖死的比較輕,原本就發(fā)展的很厲害了。
用 cache 加速 transformer
實現(xiàn)參考:
https://github.com/alex-matton/causal-transformer-decoder
https://github.com/hpcaitech/CachedEmbedding
名詞解釋:decoder 時,每生成 1 個輸出 token 的過程,叫 timestep。
Input sequence length M, decode N tokens。
時間復(fù)雜度,input * output self-attention + output * output self-attention
優(yōu)化前: O(MN2 + N3)
優(yōu)化后: O(MN + N2)
實驗結(jié)果
We compare our three different implementations

(, 下載次數(shù): 177)
深入 AI compiler - TVM

詳細(xì)介紹:https://mlc.ai/summer22/schedule
TVM Stack

AI compiler 如何理解模型?
TVM 的方法是:分 4 層 IR

(, 下載次數(shù): 172)
From https://zhuanlan.zhihu.com/p/613611390
TVM 的圖優(yōu)化


(, 下載次數(shù): 173)
解釋:
整體思路:
以 TFLite 用的方案為例,
參考 Paper: https://arxiv.org/abs/2001.03288  2020-google-efficient-memory-management.pdf
研究的問題:Mobile and embedded device: inferior physical memory
目標(biāo):Smaller memory footprint
結(jié)果:11% smaller memory footprint than the state-of-the-art
弊端:
建模的核心抽象,完整的 pipeline 分為如下 4 個 stage,每個時刻 t 可以執(zhí)行 1 個 stage。
- L(load) : load data from LLB->L1
- R(Compute): compute on L1
- S(Store): store result from L1->LLB
- F(Free): free data on L1
優(yōu)化理論的 2 大流派:
自動駕駛的 motion planning,路線之爭的時間線:
個人理解:
優(yōu)化問題的經(jīng)典教科書:An Introduction to Optimization
Introduction to Optimization, 4th Edition.pdf
TensorIR 優(yōu)化

在 2-3 層,loop optimization 三板斧:
From https://mlc.ai/summer22/slides/2-TensorProgram.pdf P12 頁開始看

(, 下載次數(shù): 162)
優(yōu)化效果如下圖,F(xiàn)rom https://zhuanlan.zhihu.com/p/613611390
右圖還可以看出,NV 認(rèn)真手動優(yōu)化了 resnet50 和 bert,但 mobilenet 優(yōu)化的少。

(, 下載次數(shù): 169)
MLIR codegen arxiv 總結(jié)不錯,要點:

(, 下載次數(shù): 157)
注:
Async dispatch 就是 split 成多個 block,進行 task parallel 的執(zhí)行。在 GPU,NPU 上很常見。
Blockwise 運算,不是 elementwise 的?;邦悓?Blockwise 運算做 split 時,一般要處理數(shù)據(jù)重疊問題。
Conv 算子的例子:

(, 下載次數(shù): 161)
要點:split 之后,相鄰兩份數(shù)據(jù)有依賴。導(dǎo)致 task parallel 時更復(fù)雜。
深入理解,需要了解 conv 算子的原理,推薦 https://www.youtube.com/watch?v=FmpDIaiMIeA&t=1099s
局限性 & 研究方向

主要的研究難點
其他 AI compiler

現(xiàn)在 ai compiler 可能比 dl 框架還多。這么下去,得做個 compiler for compiler 了  
要點總結(jié):

(, 下載次數(shù): 171)
XLA

XLA 基于 LLVM 框架開發(fā)的,前端的輸入是 Graph,前端沒有將 Graph 直接轉(zhuǎn)化為 LLVM IR
特點:
相比于 TVM 和 MLIR,xla 就是一個早期的探索,
Fusion is XLA's single most important optimization
MLIR

全稱: Multi-Level Intermediate Representation
Chris 繼 LLVM、CLang、Swift 之后第 4 個重磅項目。且有 Google 背書。
The “multi-level” aspect is very important in MLIR: adding new levels of abstraction is intended to be easy and common. Not only this makes it very convenient to model a specific domain, it also opens up a lot of creativity and brings a significant amount of freedom to play with various designs for your compiler: it is actually a lot of fun!
MLIR v.s. TVM
TVM 通過劃分 4 層 IR 的方法,大大的簡化了問題,& 推動了早期的技術(shù)發(fā)展。
但 4 層 IR 之間的信息隔離,導(dǎo)致一些優(yōu)化無法實施,無法跨層搜索 global 的最優(yōu)解。
MLIR 的 multi-level 可以很好的解決這個問題。
個人感覺,這種設(shè)計是雙刃劍。
太過于靈活,放在一般團隊里,如果用不好,過于靈活 == 沒有設(shè)計。
如果是比較優(yōu)秀的團隊,靈活性高則是極好的。
如何入門

通常,大家都會推薦這些書:
編譯原理 links
體系結(jié)構(gòu) links
LLVM links
補充說明:
更實際的,我的 1 年技術(shù)計劃如下,目前進展 50%,感覺比較實際。

(, 下載次數(shù): 149)

-----------------------------
作者: 林宥嘉    時間: 2023-4-4 10:51
[捂臉]感覺能明白其中一半,就很厲害了
作者: 馬小胖    時間: 2023-4-4 12:42
學(xué)習(xí)目標(biāo)造火箭,實際進度省略一千字
作者: 你牛了    時間: 2023-4-4 14:17
一年竟然能學(xué)完這么多




歡迎光臨 愛鋒貝 (http://m.7gfy2te7.cn/) Powered by Discuz! X3.4