机器学习编译入门课程学习笔记第一讲 机器学习编译概述
文章目錄
- 1. 課程簡介
- 2. 本節(jié)課內容大綱
- 3. 機器學習編譯的定義
- 4. 機器學習編譯的目標
- 5. 為什么要學習機器學習編譯?
- 6. 機器學習編譯的核心要素
- 6.1. 備注:抽象和實現(xiàn)
- 7. 總結
1. 課程簡介
??該門課程是由XGBoost的作者陳天奇進行授課的。 從2022年6月18日正式開始(新鮮出爐的),每周講授一節(jié)課程。具體內容可參考鏈接:中文官網(wǎng)或者英文官網(wǎng)。如果有相關問題也可以在討論區(qū)進行留言:中文討論區(qū)、英文討論區(qū)。
課程目錄如下所示:
??客觀來說,本課程并不適合機器學習或者深度學習的初學者。但強烈推薦同學們先學習第一課:機器學習編譯概述。然后再決定是否進行更加深入的學習。
??本節(jié)課的slides鏈接如下:https://mlc.ai/summer22-zh/slides/1-Introduction.pdf;notes鏈接如下:https://mlc.ai/zh/chapter_introduction/。
2. 本節(jié)課內容大綱
3. 機器學習編譯的定義
??機器學習編譯 (machine learning compilation, MLC) 是指,將機器學習算法從開發(fā)形態(tài),通過變換和優(yōu)化算法,使其變成部署形態(tài)。簡單來說,就是將訓練好的機器學習模型應用落地,部署在特定的系統(tǒng)環(huán)境之中的過程。
#mermaid-svg-3XmHl123LLsU371Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3XmHl123LLsU371Y .error-icon{fill:#552222;}#mermaid-svg-3XmHl123LLsU371Y .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3XmHl123LLsU371Y .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3XmHl123LLsU371Y .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3XmHl123LLsU371Y .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3XmHl123LLsU371Y .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3XmHl123LLsU371Y .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3XmHl123LLsU371Y .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3XmHl123LLsU371Y .marker.cross{stroke:#333333;}#mermaid-svg-3XmHl123LLsU371Y svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3XmHl123LLsU371Y .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3XmHl123LLsU371Y .cluster-label text{fill:#333;}#mermaid-svg-3XmHl123LLsU371Y .cluster-label span{color:#333;}#mermaid-svg-3XmHl123LLsU371Y .label text,#mermaid-svg-3XmHl123LLsU371Y span{fill:#333;color:#333;}#mermaid-svg-3XmHl123LLsU371Y .node rect,#mermaid-svg-3XmHl123LLsU371Y .node circle,#mermaid-svg-3XmHl123LLsU371Y .node ellipse,#mermaid-svg-3XmHl123LLsU371Y .node polygon,#mermaid-svg-3XmHl123LLsU371Y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3XmHl123LLsU371Y .node .label{text-align:center;}#mermaid-svg-3XmHl123LLsU371Y .node.clickable{cursor:pointer;}#mermaid-svg-3XmHl123LLsU371Y .arrowheadPath{fill:#333333;}#mermaid-svg-3XmHl123LLsU371Y .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3XmHl123LLsU371Y .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3XmHl123LLsU371Y .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-3XmHl123LLsU371Y .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-3XmHl123LLsU371Y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3XmHl123LLsU371Y .cluster text{fill:#333;}#mermaid-svg-3XmHl123LLsU371Y .cluster span{color:#333;}#mermaid-svg-3XmHl123LLsU371Y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3XmHl123LLsU371Y :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}轉換開發(fā)形態(tài)部署形態(tài)??開發(fā)形態(tài)是指我們在開發(fā)機器學習模型時使用的形態(tài)。典型的開發(fā)形式包括用 PyTorch、TensorFlow 或 JAX(主要指的是深度學習學習模型)等通用框架編寫的模型描述,以及與之相關的權重。
??部署形態(tài)是指執(zhí)行機器學習應用程序所需的形態(tài)。它通常涉及機器學習模型的每個步驟的支撐代碼、管理資源(例如內存)的控制器,以及與應用程序開發(fā)環(huán)境的接口(例如用于Android 應用程序的Java API)。
??不同的AI應用對應的部署環(huán)境是互不相同的。以下圖為例:電商平臺不可或缺的推薦系統(tǒng)算法通常是部署在云平臺(服務器)上;自動駕駛算法通常是部署在車輛上的專用計算設備;手機的各種APP以語音轉文字的輸入法為例,最終是部署在手機上的計算設備的。
??在進行機器學習模型部署時,不僅要考慮硬件系統(tǒng)環(huán)境,與此同時也需要考慮軟件環(huán)境(如操作系統(tǒng)環(huán)境、機器學習平臺環(huán)境等)。
4. 機器學習編譯的目標
??機器學習編譯的直接目標包括兩點:最小化依賴和利用硬件加速。機器學習編譯的最終目的是實現(xiàn)性能(時間復雜度、空間復雜度)優(yōu)化。
??最小化依賴可以認為是集成(Integration)的一部分,提取出與應用相關的庫(刪除與應用無關的庫),從而減少應用的大小,達到節(jié)省空間的目的。
??利用硬件加速指的是利用硬件本身的特性進行加速。可以通過構建調用原生加速庫的部署代碼或生成利用原生指令(如 TensorCore)的代碼來做到這一點。
5. 為什么要學習機器學習編譯?
- 構建機器學習部署的解決方案。
- 對現(xiàn)有機器學習框架形成更加深刻的理解。
6. 機器學習編譯的核心要素
-
張量 (Tensor) 是執(zhí)行中最重要的元素。張量是表示神經(jīng)網(wǎng)絡模型執(zhí)行的輸入、輸出和中間結果的多維數(shù)組。
-
張量函數(shù) (Tensor functions) 神經(jīng)網(wǎng)絡的“知識”被編碼在權重和接受張量和輸出張量的計算序列中。我們將這些計算稱為張量函數(shù)。值得注意的是,張量函數(shù)不需要對應于神經(jīng)網(wǎng)絡計算的單個步驟。部分計算或整個端到端計算也可以看作張量函數(shù)。也就是說,不僅單個函數(shù)可以認為是張量函數(shù),也可以把其中一部分(或者整個整體)看作是張量函數(shù)。
??下圖中舉了個實際的例子,第一個linear層和relu計算被折疊成一個linear_relu 函數(shù),這需要有一個特定的linear_relu的詳細實現(xiàn)。
6.1. 備注:抽象和實現(xiàn)
??對同樣的目標有不同顆粒度的表示。例如對linear_relu而言,既可以使用左邊兩個框圖進行表示,也可以用右邊的循環(huán)進行表示。
??我們使用抽象 (Abstraction)來表示我們用來表示相同張量函數(shù)的方式。不同的抽象可能會指定一些細節(jié),而忽略其他實現(xiàn)(Implementations)細節(jié)。例如,linear_relu 可以使用另一個不同的 for 循環(huán)來實現(xiàn)。
??抽象和實現(xiàn)可能是所有計算機系統(tǒng)中最重要的關鍵字。抽象指定“做什么”,實現(xiàn)提供“如何”做。沒有具體的界限。根據(jù)我們的看法,for 循環(huán)本身可以被視為一種抽象,因為它可以使用 python 解釋器實現(xiàn)或編譯為本地匯編代碼。
??機器學習編譯實際上是在相同或不同抽象下轉換和組裝張量函數(shù)的過程。我們將研究張量函數(shù)的不同抽象類型,以及它們如何協(xié)同工作以解決機器學習部署中的挑戰(zhàn)。
??在后續(xù)課程中分別會涉及到四種類型的抽象:
- 計算圖
- 張量程序
- 庫(運行時)
- 硬件專用指令
7. 總結
-
機器學習編譯的目標
- 集成與最小化依賴
- 利用硬件加速
- 通用優(yōu)化
-
為什么學習機器學習編譯
- 構建機器學習部署解決方案
- 深入了解現(xiàn)有機器學習框架
- 為新興硬件建立軟件棧
-
機器學習編譯的關鍵要素
- 張量和張量函數(shù)
- 抽象和實現(xiàn)是值得思考的工具
總結
以上是生活随笔為你收集整理的机器学习编译入门课程学习笔记第一讲 机器学习编译概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 营业执照生成_0跑动,3步注册,48小时
- 下一篇: udp测试android,如何在安卓系统