欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊


    器之心整理

    參與:張倩、蛋醬

    從 2016 年起,機器之心每年都會盤點全年的精華教程。去年就有小伙伴留言說要在 2019 年上半年把 2018 年的教程合集「啃下來」。現在都 2020 了,不知道這位朋友啃完沒有?要是 flag 沒倒,不妨再來一份?

    與往年類似,今年的盤點分為入門解惑、優質教材及課程、語言、工具、GitHub 項目、經驗分享幾大板塊。無論你是剛邁入 AI 領域的萌新,還是工作多年的數據分析師、煉丹師、碼農,這份合集都能幫到你。

    如果這些都學完了還沒盡興,可以跳到文末鏈接找出往年教程合集。

    入門解惑

    去年,教育部公布了 35 所新增 AI 本科高校名單,為想學 AI 的同學提供了更多選擇。對于這部分剛邁入 AI 領域的萌新,我們提供了一系列完備的學習路線和入門教程:

    • 完備的 AI 學習路線,最詳細的中英文資源整理
    • 不交學費也能成為數據科學家,這里有一條免費學習路徑
    • 機器學習成才之路:這是一條 GitHub 高贊的學習路徑
    • 入門機器學習,照這個課程清單按順序學就對了
    • 18 個月自學 AI,2 年寫就三萬字長文,過來人教你如何掌握這幾個 AI 基礎概念
    • 機器學習必學 10 大算法
    • 機器學習基礎:相似度和距離度量究竟是什么
    • p 值是什么?數據科學家用最簡單的方式告訴你
    • Distribution is all you need:這里有 12 種做 ML 不可不知的分布
    • 計算機視覺入門大全:基礎概念、運行原理、應用案例詳解
    • NLP 技術路線詳解:這是從數學到算法的藝術
    • 深度強化學習入門難?這份資料手把手教會你
    • 數據清洗&預處理入門完整指南
    • 不要只關注算法與模型,這里有份產品級深度學習開發指南
    • 沒人告訴你的大規模部署 AI 高效流程!
    • 用純 NumPy 碼一個 RNN、LSTM:這是最好的入門方式了
    • 為什么我的 CV 模型不好用?沒想到原因竟如此簡單……
    • 3 天上手,30 天精通!——深度學習 FPGA 加速器設計
    • 預訓練語言模型關系圖+必讀論文列表,清華榮譽出品
    • 學習 GAN 模型量化評價,先從掌握 FID 開始吧
    • 生成式模型入門:訓練似然模型的技巧
    • 如何入門 CUDA 并行計算?
    • 圖像配準的前世今生:從人工設計特征到深度學習

    當然,在搞定 AI 之前,你必須要先搞定數學:

    • 像堆樂高一樣:從零開始解釋神經網絡的數學過程
    • 刷臉背后,卷積神經網絡的數學原理原來是這樣的
    • 1900 頁數學基礎:面向 CS 的線性代數、拓撲、微積分和最優化
    • 人工智能中的線性代數:如何理解并更好地應用它
    • 新手上路:圖文解讀助你理解和使用正則表達式
    • 不可不知的數據科學入門數學指南
    • 數學還能這么學?高中要有這個網站我早就及格了
    • 淺顯易懂!「高中數學」讀懂梯度下降的數學原理
    • 高中就開始學的正態分布,原來如此重要

    接下來是一些簡短而全面的教程,「一文讀懂」基本概念:

    • 卷積有多少種?一文讀懂深度學習中的各種卷積
    • 從 ReLU 到 GELU,一文概覽神經網絡的激活函數
    • 關于圖算法 & 圖分析的基礎知識概覽
    • 圖論與圖學習(一):圖的基本概念
    • 圖論與圖學習(二):圖算法
    • PageRank、最小生成樹:ML 開發者應該了解的五種圖算法
    • 一文讀懂:圖卷積在基于骨架的動作識別中的應用
    • HyperparameterHunter 3.0:一文教你學會自動化特征工程

    相比于文字,圖解教程能夠幫助你更直觀、快速地領會知識的精髓:

    • 圖解神經機器翻譯中的注意力機制
    • 圖解人工智能,這群大學生做了個有趣的交互項目(中文版)
    • 圖解 NumPy,這是理解數組最形象的一份教程了
    • 完全圖解 GPT-2:看完這篇就夠了(一)
    • 完全圖解 GPT-2:看完這篇就夠了(二)
    • 透過現象看本質,圖解支持向量機
    • 能「看到」的張量運算:因子圖可視化
    • BERT 模型超酷炫,上手又太難?請查收這份 BERT 快速入門指南!
    • 包學包會,這些動圖和代碼讓你一次讀懂「自注意力」
    • 手把手教你將矩陣&概率畫成圖
    • 手把手教你將矩陣畫成張量網絡圖
    • 看得見的高斯過程:這是一份直觀的入門解讀

    優質教材、課程

    如果你去購物網站、在線課程網站直接搜索,會發現與「人工智能」相關的圖書資料有上萬種,課程也有數百種。在學習資料異常豐富的今天,挑出優質的教材、課程也成了一大難題。不過不用擔心,在機器之心編輯部和讀者的共同努力下,今年的優質參考書、課程都已經篩選好了:

    開卷有益

    2019 年,周志華等多位老師聯合撰寫的《演化學習:理論與算法進展》問世;李航老師的《統計學習方法》第二版上線;李沐老師的《動手學深度學習》有了 TF 2.0、PyTorch 版本;貝葉斯之父 Judea Pearl 的《The Book of Why》也有了中文版本……要獲取這些優質教材的新動向,關注機器之心就夠了:

    • 十四年的 NYU 教學精華,開放書《機器學習基礎》第二版可以下載啦
    • 李航《統計學習方法》第二版上線,6 年耕耘增加無監督學習(新書贈送)
    • 學它!李航《統計學習方法》課件,清華大學深圳研究院教授制作
    • 實戰入門深度學習,李沐中文新書贈送
    • 全新版本,李沐《動手學深度學習》TF2.0 版本來了
    • PyTorch 版《動手學深度學習》開源了,最美 DL 書遇上最贊 DL 框架
    • 開放下載!復旦大學邱錫鵬教授發布教科書《神經網絡與深度學習》
    • 「機器學習基礎與趨勢」系列叢書最新成員:140 頁《深度強化學習入門》發布
    • 南大周志華、俞揚、錢超最新力作:《演化學習:理論與算法進展》正式上線
    • 線性代數與數據學習:MIT 教授 Gilbert Strang 幫你打下堅實的數學基礎
    • 沉浸式學習線性代數!這里有一本全交互的線性代數書
    • 一圖勝千言,這本交互式線代教科書讓你分分鐘理解復雜概念,佐治亞理工出品
    • 一場因果革命,Judea Pearl 最新力作《為什么》中文版發布(贈書)
    • 為機器學習插上因果推理的翅膀:這是一本系統的因果推理開源書
    • 500 頁開放書搞定概率圖建模,圖靈獎得主 Judea Pearl 推薦
    • 集 20 年之大成,這是一本開源的算法教科書
    • 從六大概念總結吳恩達新書:做好工程實踐應該這樣走
    • 從算法到 HPC:最全優秀編程書籍列表
    • 如何用 Julia 做數據統計?這里有一本全面教材(附代碼圖示)
    • 系統探討「跨語言詞嵌入」,這是一本剛出爐新書

    站在巨人的肩膀上

    除了以上經典教材,還有些優質課程可以參考。這些課程來自麻省理工學院、斯坦福大學、多倫多大學、哥倫比亞大學等多所國內外知名高校,授課者包括 Bengio、吳恩達、李宏毅等名師:

    • 最強學習資料:國內多所重點大學課程攻略
    • 最全中科大計算機學院課程資源(含答案)
    • 做個愛學習的孩子!收藏 2019 知名機器學習暑期學校大列表
    • 選機器學習課程怕踩雷?有人幫你選出了 top 5 優質課
    • 硬核暑假要學習:Imperial College London 開放 ML 暑期課程視頻
    • 中文課程!臺大李宏毅機器學習公開課 2019 版上線
    • 李宏毅機器學習完整筆記發布,AI 界「最熱視頻博主」中文課程筆記全開源
    • MIT 2019 深度學習課程開課,第一課視頻&PPT 已放出
    • 14 周無監督學習課程,UC 伯克利出品,含課件、視頻
    • 吳恩達深度學習課最新補充教程:交互式 demo 助你輕松理解神經網絡
    • Bengio、Sutton 的深度學習&強化學習暑期班又來了,2019 視頻已放出
    • 2019 年最佳計算機視覺課程推薦
    • 多倫多大學出品:Coursera 宣布首個自動駕駛專項課程
    • 時隔兩年,斯坦福 NLP 標準公開課 CS224N 將再次開放視頻
    • 學習時間!2019 斯坦福 CS224n、CMU NLP 公開課視頻開放啦
    • 只知道 CS224N?斯坦福最新推出 NLU 公開課 CS224U
    • 社科 NLP 課程來了:斯坦福開年公開課主講 NLP 和社交網絡應用
    • 想快速學會數據可視化?這里有一門 4 小時的 Kaggle 微課程
    • 如何自學 MIT 的應用數學課程?這里有個參照給你

    溫故而知新

    教程、課程看完一遍很容易忘記,這時候就需要筆記來幫忙了。在過去的一年中,我們發現了以下幾份優秀的筆記項目,可以作為學習的輔助材料。

    • 80 頁筆記看遍機器學習基本概念、算法、模型,幫新手少走彎路
    • 百頁課程筆記,統計物理視角下的深度學習
    • 周志華西瓜書詳細公式推導,Datawhale 開源 pumpkin-book 項目
    • 一日千星的「機器學習系統設計指南」,這個英偉達小姐姐的項目火了

    語言

    去年 11 月,地產大佬潘石屹突然宣布開始學 Python,眾讀者紛紛驚呼:居然不是廣告?從這串長長的列表來看,你大概能夠體會到 Python 有多火了,畢竟它也是最有益于保持頭發濃密的語言之一。在這部分,我們列舉了 Python 的官方文檔、使用技巧、實用工具包等有用信息(誰幫忙 @ 一下潘總?)。

    • Python 用不好?看官方中文文檔啦
    • Python 從入門到精通:一個月就夠了!
    • 微軟出品,文科生也能學得懂的 Python 免費入門視頻
    • 編程大神進階之路:Python 技巧小貼士
    • 30 段極簡 Python 代碼:這些小技巧你都 Get 了么
    • 學 Python,從列表推導到 zip() 函數,這五種技巧應知應會
    • 迭代列表不要 For 循環,這是 Python 列表推導式最基本的概念
    • 7 個 Python 特殊技巧,助力你的數據分析工作之路
    • Python 3.8 即將到來,這是你需要關注的幾大新特性
    • 詳解 Python 3.8 的海象算子:大幅提高程序執行效率
    • Python 初學者常犯的 5 個錯誤,布爾型竟是整型的子類
    • Python 的高級特征你知多少?來對比看看
    • 新手如何發布第一個 Python 項目開源包?這里有一份詳細指南
    • 如何從 C++轉 Python:改變你的思維方式
    • 用半勵志的方式告訴你,怎么學習 Python 開發
    • 平均 3293 顆星的 34 個年度開源 Python 庫
    • 這里有 8 個流行的 Python 可視化工具包,你喜歡哪個?
    • 一文讀懂 Python 裝飾器,這是一個會打扮的裝飾器
    • 哪種 Python IDE 最適合你?這里有一份優缺點列表
    • 人生苦短,我用 PyCharm
    • Python 新工具:用三行代碼提取 PDF 表格數據
    • 想成為高效數據科學家?不會 Pandas 怎么行
    • DeBug Python 代碼全靠 print 函數?換用這個一天 2K+Star 的工具吧
    • 如何將 Numpy 加速 700 倍?用 CuPy 呀
    • 用 Python 登錄主流網站,我們的數據爬取少不了它
    • Windows 文件名非用反斜杠?Python 小技巧幫你解決這個麻煩
    • 如何在 Windows 上做 Python 開發?微軟出了官方教程
    • 在 Win 上做 Python 開發?當然是用官方的 MS Terminal 和 VS Code 了
    • 40 行 Python 代碼,實現卷積特征可視化
    • Heartrate:如追綜心跳般實時動態可視化監測 Python 程序運行
    • 四種高性能數據類型,Python collections 助你優化代碼、簡潔任務
    • PySpark 源碼解析,教你用 Python 調用高效 Scala 接口,搞定大規模數據分析

    工具及技巧

    古人說過,「工欲善其事,必先利其器」。工具的好壞及使用技巧與我們的學習效果息息相關。要列舉 AI 學習中用到的重要工具,首先要從深度學習框架說起。

    深度學習框架

    2019 年,ML 框架之爭中只剩兩個實力玩家:PyTorch 和 TensorFlow。研究者大批涌向 PyTorch,而業界的首選仍然是 TensorFlow。因此,這部分著重篩選出這兩個框架的相關教程。

    • TensorFlow 與 PyTorch 之爭,哪個框架最適合深度學習
    • PyTorch 稱霸學界,TensorFlow 固守業界,ML 框架之爭將走向何方?
    • 一行代碼切換 TensorFlow 與 PyTorch,模型訓練也能用倆框架
    • Texar-PyTorch:在 PyTorch 中集成 TensorFlow 的最佳特性

    1. TensorFlow

    • 英文教程太難啃?這里有一份 TensorFlow2.0 中文教程(持續更新中)
    • TensorFlow 2.0 中文開源書項目:日贊 700,登上 GitHub 熱榜
    • 請快點粘貼復制,這是一份好用的 TensorFlow 代碼集
    • 你真的會正確地調試 TensorFlow 代碼嗎?
    • Tensorflow Lite 人體姿勢跟蹤功能上線:基于 PosNet 的實時人體姿態估計
    • 如何在 TensorFlow 2.0 中構建強化學習智能體
    • TensorFlow 2.0 中的 tf.keras 和 Keras 有何區別?為什么以后一定要用 tf.keras?

    2.PyTorch

    • 萬字綜述,核心開發者全面解讀 PyTorch 內部機制
    • 60 分鐘入門 PyTorch,官方教程手把手教你訓練第一個深度學習模型
    • 點贊收藏:PyTorch 常用代碼段整理合集
    • LeCun 力薦,PyTorch 官方權威教程書來了,意外的通俗易懂
    • PyTorch 進階之路(一):張量與梯度
    • PyTorch 進階之路(二):如何實現線性回歸
    • PyTorch 進階之路(三):使用 logistic 回歸實現圖像分類
    • PyTorch 進階之路(四):在 GPU 上訓練深度神經網絡
    • PyTorch 最佳實踐,怎樣才能寫出一手風格優美的代碼
    • 分布式入門,怎樣用 PyTorch 實現多 GPU 分布式訓練
    • 五天入門深度學習,這里有一份 PyTorch 實戰課程
    • 三四行代碼打造元學習核心,PyTorch 元學習庫 L2L 現已開源
    • 超原版速度 110 倍,針對 PyTorch 的 CPU 到 GPU 張量遷移工具開源
    • 基于 PyTorch 的「Keras」:除了核心邏輯通通都封裝
    • 基于 PyTorch 的 CV 模型框架,北大學生出品 TorchCV

    其他工具

    1. 神奇的編輯器

    • 世界上最好的編輯器 Vim:1700 多頁數學筆記是如何實時完成的
    • 最好用的文字與公式編輯器,這套數學筆記神器送給你
    • 免費數學神器 Mathpix 發布移動版,一起來寫更快的公式
    • 公式免費轉 LaTex 代碼,截圖、轉換一氣呵成,每月 1000 次全免費
    • 寫下 LaTeX 代碼就要看結果?這款編輯器讓你「所見即所得」
    • 向 Excel 說再見,神級編輯器統一表格與 Python

    2. 代碼補全利器

    • DL 時代的代碼補全利器,北大出品,效果遠超語言模型
    • 你是一個成熟的 AI 了,應該自己學會補全 Python 代碼了
    • AI 加持,Kite 增加智能代碼補全功能:減少一半操作,實時補全

    3.Git

    • 如何優雅地向別人介紹高端大氣上檔次的 Git
    • 你可能不太會用的 10 個 Git 命令
    • 走在前沿的弄潮兒,怎能不會 Git 的那些奇技淫巧
    • 根據 Git 推算程序員大佬作息:同樣是熬夜,為什么他發量那么多?

    4. 筆記本

    • 是時候聯盟 Jupyter 與 PyCharm 了,Jupytext 就是你需要的
    • 只有想不到,「99」種擴展 Jupyter 功能的好方法
    • Jupyter Notebook 界面也可以如此炫酷?有人把 Notebook 玩出了新花樣
    • 增強 Jupyter Notebook 的功能,這里有四個妙招
    • Netflix 開源 Polynote:對標 Jupyter,一個筆記本運行多種語言

    5. 其他

    • 命令行忘性大?這個開源備忘工具一次解決你的所有煩惱
    • 50 種常用的 matplotlib 可視化,再也不用擔心模型背著我亂跑了
    • 新模型學到頭禿?gobbli 統一模型庫幫你快速上手文本分類,內置 BERT、fastText 等
    • 集成圖網絡模型實現、基準測試,清華推出圖表示學習工具包
    • 強化學習、聯邦學習、圖神經網絡,飛槳全新工具組件詳解
    • 更改形狀和背景色、自定義風格、顏色流動…這款詞云工具都能做到

    技巧

    這里還有一些小技巧,可以幫助你解決一些「令人頭禿」的問題:

    • 模型秒變 API 只需一行代碼,支持 TensorFlow 等框架
    • 圖像轉換 3D 模型只需 5 行代碼,英偉達推出 3D 深度學習工具 Kaolin
    • 如何讓計算機工作環境更便捷?幾行簡單的命令即可
    • GitHub 最熱!碼代碼不得不知的所有定律法則
    • 數據科學家易犯的十大編碼錯誤,你中招了嗎?
    • 5 種高效利用 value-counts 函數的方法,一鍵提升數據挖掘姿勢水平
    • 數據處理遇到麻煩不要慌,5 個優雅的 Numpy 函數助你走出困境
    • 內存不足、錢包不鼓怎么辦?三種技巧助你擺脫內存使用困境
    • 26 秒單 GPU 訓練 CIFAR10,Jeff Dean 也點贊的深度學習優化技巧
    • 還在為數據清洗抓狂?這里有一個簡單實用的清洗代碼集

    GitHub 年度精選

    作為全球最大的同性交友網站,GitHub 上幾乎能找到你想要的一切。「我在 GitHub 上北大,他在 Pornhub 考研究生」這句話不是說說而已(忽略后半句):

    • 這是一份專為程序員編寫的英語學習指南
    • Github 近 5 萬贊的計算機專業課程,從小白到大牛的學習之路
    • GitHub 上 Star 量最高的 5 個機器學習項目
    • GitHub 不為人知的小秘密…讓你的工作更高效

    同時,GitHub 上還有很多神奇項目,讓我們流連忘返,唱、跳、Rap、籃球,應有盡有:

    • 我這個人不懂什么 CPU,于是我用代碼模擬出了一個
    • 框一下就能從視頻隱身,這是現實版的「隱身衣」?
    • 在瀏覽器訓練個剪刀石頭布探測器,你的小電腦也可以
    • 漫畫漢化組福音:深度學習工具一鍵摳圖
    • 你跳宅舞的樣子很專業:不,這都是 AI 合成的結果
    • 用自己的風格教 AI 說話,語言生成模型可以這樣學
    • 破解神經網絡、攻擊 GPU,AI 黑客教程來了,已登 GitHub 熱榜
    • 老婆問「我今天穿什么合適」?讓 AI 來幫你想答案吧
    • Github 中文項目排行榜,你永遠想不到開發者都用它干了什么
    • 只需單擊三次,讓中文 GPT-2 為你生成定制故事
    • 決戰春運之巔,我們用這個項目搶到了火車票
    • 真工程師:20 塊錢做了張「名片」,可以跑 Linux 和 Python
    • 3D 模型學會了「唱、跳、Rap、籃球」,GitHub 網友也沉迷「雞你太美」
    • 使用 Python 和 Mask R-CNN 自動尋找停車位,這是什么神操作?
    • 用霍夫變換&SCNN 碼一個車道追蹤器
    • 驚為天人,NumPy 手寫全部主流機器學習模型,代碼超 3 萬行
    • 讓大衛雕塑跳舞、蒙娜麗莎說話,英偉達視頻合成有如此多「騷操作」
    • 大小僅 1MB,超輕量級通用人臉檢測模型登上 GitHub 趨勢榜
    • 讓二次元妹子動起來,用一張圖生成動態虛擬主播

    一個靠譜的數據集會讓模型訓練工作事半功倍,這一年里,我們分享過這些優質 GitHub 數據集:

    • 情人節:一本正經地為單身狗推薦這個 158 萬張圖像的鑒黃數據集
    • DeepFashion2 數據集:87.3 萬對買家秀-賣家秀圖像+海量標注
    • 神經網絡也能解數學題,DeepMind 發布千萬數學題海數據集
    • 280 萬分割掩碼,谷歌 Open Images 數據集再更新
    • 找不到合適的數據?這里有 281 個計算機視覺數據集任你選
    • 打擊換臉技術濫用,谷歌發布大型數據集對抗 deepfake
    • 圖神經網絡的 ImageNet?斯坦福大學等開源百萬量級 OGB 基準測試數據集
    • 20 個安全可靠的免費數據源,各領域數據任你挑
    • 開放的一天,吳恩達、谷歌、Facebook 紛紛開源數據集

    經驗分享,「深度好文」

    最后,我們總結了一系列經驗分享,涵蓋讀博、面試、職場經驗等多個方面。低頭趕路的時候,也要抬頭看看遠方。

    讀博那點事兒

    • 博士生的 deadline 血淚史,這是一份來自 Nature 的避坑指南
    • 守住發際線:南大蔣炎巖談讀博那些事兒
    • 成為數據科學家,到底需要怎樣的學歷?
    • 讀博一時爽,不聽這些建議會一直爽……
    • 畢業論文無從下手?一文幫你理清頭緒
    • Science「勸退文」:讀博壓力山大,是時候退學了
    • 讀博熬不住了,拿個碩士學位投身業界如何?看過來人怎么說

    備戰春招

    • 準備好春招了么?上科大小哥的面試題與復習資料祝你寒假無憂
    • 春招已近,這份 GitHub 萬星的 ML 算法面試大全請收下
    • 春招苦短,我用百道 Python 面試題備戰
    • 技術面試中,當面試官「套路」你時,怎么「反套路」回去?
    • 如何把薪資談高一倍?請看大廠 offer 拿到手軟的 ML 大神自述
    • 2019 高考編程卷:谷歌面試編程題及解題技巧(MIT 版)
    • 準備程序員面試?你需要了解這 14 種編程面試模式
    • 備戰秋招:國內大廠技術面試指南,GitHub 六千星
    • 百道 Python 面試題實現,搞定 Python 編程就靠它

    職業生涯回顧與行業展望

    • 陳天奇:深度學習編譯技術的現狀和未來
    • 數據科學崗位將在未來 5 年內重新洗牌,你準備好轉型了嗎?
    • 微軟沈向洋自述:在實現職業目標的道路上,我得到了七個教訓
    • 在 12 家科技創業公司工作后,這是我的 8 條經驗
    • 這是一篇關于如何成為一名 AI 算法工程師的長文
    • 谷歌高級研究員 Nature 發文:避開機器學習三大「坑」
    • 香儂科技李紀為:初入 NLP 領域的一些小建議
    • 我從資深軟件工程師學到的避坑大法
    • 五個給機器學習和數據科學入門者的學習建議
    • 獨立研究中頂會 Spotlight,從讀博就業無門到一舉成名,這位小哥的經驗分享火了

    碼農的自我修養

    • 高級碼農反思錄:我當菜鳥時不懂的七件事
    • 谷歌軟件工程師分享編程經驗:有效的流程很關鍵
    • 你已經是一個成熟的碼農了,這些思維習慣你要有
    • 經驗之談:代碼該怎樣寫才能干凈整潔(36 頁)
    • 如何把自己包裝成程序員大佬?這里有一份「裝 X 指南」
    • 16 歲成為全棧開發者:我從開發游戲到寫加密貨幣投資機器人的心路歷程
    • 脫發、禿頭防不勝防?這里有一份給碼農的減壓指南

    參賽、參會經驗貼

    • 年輕人的第一塊金牌:我是如何成為 Kaggle 全網第一的
    • 半年 5 戰 5 金:Kaggle 史上最快 GrandMaster 是如何煉成的
    • 7 年斬獲 15 金,最高全球第 8:Kaggle Grandmaster 分享競賽經驗
    • 想在 Kaggle 中脫穎而出?先聽聽這位 GrandMaster 怎么說
    • Kaggle 首戰斬獲第三,看深度學習菜鳥團隊如何一鳴驚人
    • 想快速學會數據可視化?這里有一門 4 小時的 Kaggle 微課程
    • 僅需 10 分鐘:開啟你的機器學習之路
    • 除了 Kaggle,這里還有一些高質量的數據科學競賽平臺
    • 如何在 9000 多人的 NeurIPS 會場優雅地展示 Poster
    • 數千人頂會的干貨,ICML、CVPR2019 演講視頻資源在此

    往年教程盤點

    • 2018:新年大禮包:機器之心 2018 高分教程合集
    • 2017:靈魂追問 | 教程那么多,你……看完了嗎?
    • 2016:人工智能從入門到進階,機器之心高分技術文章全集

    過去幾年的干貨都在這里了,flag 是不是也該立起來了?

    明年想上墻的朋友歡迎留言。

    機器之心發布

    機器之心編輯部

    深度推薦模型(DLRMs)已經成為深度學習在互聯網公司應用的最重要技術場景,如視頻推薦、購物搜索、廣告推送等流量變現業務,極大改善了用戶體驗和業務商業價值。但海量的用戶和業務數據,頻繁地迭代更新需求,以及高昂的訓練成本,都對 DLRM 訓練提出了嚴峻挑戰。

    在 DLRM 中,需要先在嵌入表(EmbeddingBags)中進行查表(lookup),再完成下游計算。嵌入表常常貢獻 DLRM 中 99% 以上的內存需求,卻只貢獻 1% 的計算量。借助于 GPU 片上高速內存(High Bandwidth Memory)和強大算力的幫助,GPU 成為 DLRM 訓練的主流硬件。但是,隨著推薦系統研究的深入,日益增長的嵌入表大小和有限的 GPU 顯存形成顯著矛盾。如何讓利用 GPU 高效訓練超大 DLRM 模型,同時突破 GPU 內存墻的限制,已成為 DLRM 領域亟待解決的關鍵問題。

    Colossal-AI此前已成功利用異構策略將相同硬件上訓練NLP模型的參數容量提升上百倍,近期成功將其拓展到推薦系統中,通過軟件緩存(Cache)方法在 CPU 和 GPU 內存中動態存儲嵌入表。基于軟件 Cache 設計,Colossal-AI 還添加流水預取,通過觀察未來即將輸入的訓練數據,降低軟件 Cache 檢索和數據移動開銷。同時,它以同步更新方式在 GPU 上訓練整個 DLRM 模型,結合廣泛使用的混合并行訓練方法,可以擴展到多個 GPU。實驗表明,Colossal-AI 僅需在 GPU 中保留 1% 的嵌入參數,仍能保持優秀的端到端訓練速度。相比 PyTorch 其他方案,顯存需求降低一個數量級,單塊顯卡即可訓練 TB 級推薦模型。成本優勢顯著,例如僅需 5GB 顯存即可訓練占據 91GB 空間 Embedding Bag 的 DLRM,訓練硬件成本從兩張約 20 萬元的 A100,降低百倍至僅需 2000 元左右的 RTX 3050 等入門級顯卡。

    開源地址:https://github.com/hpcaitech/ColossalAI

    現有的嵌入表擴展技術

    嵌入表將離散的整型特征映射成連續的浮點特征向量,下圖展示了 DLRM 中的嵌入表訓練過程。首先,在嵌入表中對每個特征查找 Embedding Table 對應的行,然后通過規約操作,比如 max,mean, sum 操作,變成一個特征向量,傳遞給后續的稠密神經網絡。可見,DLRM 的嵌入表訓練過程主要是不規則的內存訪問操作,因此嚴重受限于硬件訪存速度。

    而工業級 DLRM 的嵌入表可能達到數百 GB 甚至 TB 級別,遠超單 GPU 最高數十 GB 的顯存容量。突破單 GPU 的內存墻來增大 DLRM 的嵌入表規模有很多方法。根據下圖展示的 GPU 集群的內存層級圖為例,讓我們來分析幾種常見方案的優劣。

    GPU 模型并行:將嵌入表切分后分布在多個 GPU 的內存中,訓練中通過 GPU 之間互聯網絡同步中間結果。這種方式的缺點首先是嵌入表切分負載并不均勻,擴展性問題難以解決。其次,增加 GPU 的前期硬件成本大,而且 DLRM 訓練時 GPU 的計算能力并沒有被充分利用,而是僅僅利用了它的 HBM 帶寬優勢,導致 GPU 使用率不高。

    CPU 部分訓練:將嵌入表分割成兩部分,一部分在 GPU 上訓練,另一部分在 CPU 上訓練。通過利用數據分布的長尾效應,我們可以讓 CPU 計算比例盡可能少,讓 GPU 計算比例盡可能大。但是,隨著 batch size 增大,讓 mini-batch 的數據全部命中 CPU 或者 GPU 很困難,如果同時命中 CPU 或 GPU 這種方法很難處理。另外,由于 DDR 帶寬和 HBM 相差一個數據量級,即使 10% 的輸入數據在 CPU 上訓練,整個系統也會有至少一半速度下降。此外,CPU 和 GPU 需要傳輸中間結果,這也有不小的通信開銷,進一步拖慢訓練速度。因此,研究人員設計了異步更新等方式來避免這些性能缺陷,但是異步方式會造成訓練結果的不確定性,在實踐中并不是算法工程師的首選方案。

    軟件 Cache:保證訓練全部在 GPU 上進行,嵌入表存在 CPU 和 GPU 組成的異構空間中,每次通過軟件 Cache 方式,將需要的部分換入 GPU。這種方式可以廉價擴展存儲資源,滿足嵌入表不斷增大的需求。而且,相比使用 CPU 來計算,這種方式的整個訓練過程完全在 GPU 上完成,充分利用 HBM 帶寬優勢。但 Cache 的查詢、數據移動會帶來額外性能損耗。

    目前已經有一些針對嵌入表優秀的軟件 Cache 方案實現,但是它們往往使用定制的 EmbeddingBags Kernel 實現,比如 fbgemm,或者借助第三方深度學習框架。而 Colossal-AI 在原生 PyTorch 基礎上不做任何 Kernel 層次改動,提供了一套開箱用的軟件 Cache EmbeddingBags 實現,還進一步針對 DLRM 訓練流程進行優化,提出預取流水來進一步降低 Cache 開銷。

    Memory Hierarchy

    Colossal-AI 的嵌入表軟件 Cache

    Colossal-AI 實現了一個軟件 Cache 并封裝成 nn.Module 提供給用戶在自己模型中使用。DLRM 的嵌入表,一般是由多個 Embedding 組成的 EmbeddingBags,駐留在 CPU 內存中。這部分內存空間被命名為 CPU Weight。而 EmbeddingBags 一小部分數據存儲在 GPU 內存中,它包括即將被訓練用到的數據。這部分內存空間被命名為 CUDA Cached Weight。在 DLRM 訓練期間,首先需要確定本次迭代輸入 mini-batch 的數據所對應嵌入表的行,如果有的行不在 GPU 中,需要將它們從 CPU Weight 傳輸到 CUDA Cached Weight 中。如果 GPU 中沒有足夠的空間,它會使用 LFU 算法,根據訪問緩存的歷史頻率來淘汰被使用最少數據。

    為了實現 Cache 的檢索,需要一些輔助數據結構幫忙:cached_idx_map 是一維數組,存儲 CPU Weight 中行號和 CUDA Cached Weight 的行號對應關系,以及對應行在 GPU 被訪問的頻率信息。CUDA Cached Weight 大小與 CPU Weight 大小的比值命名為 cache_ratio,默認為 1.0%。

    Cache 在每個迭代 forward 之前運行,以調整 CUDA Weight 中的數據,具體來說分三個步驟。

    Step1:CPU 索引:檢索 CPU Weight 中需要被 Cache 的行號

    它需要對輸入 mini-batch 的 input_ids 和 cached_idx_map 取交集,找到 CPU Weight 中需要從 CPU 移動到 GPU 的行號。

    Step2:GPU 索引:根據使用頻率找到 CUDA Weight 中可以被驅逐的行

    這需要我們根據頻率以從低到高順序,對 cache_idx_map 和 input_ids 取差集合之后的部分進行 top-k(取最大值 k 個數)操作。

    Step3:數據搬運:

    將 CUDA Cached Weight 中的對應行移動到 CPU Weight 中,然后將 CPU Weight 中的對應行移動到 CUDA Weight 中。

    數據傳輸模塊負責 CUDA Cached Weight 和 CPU Weight 之間的數據雙向傳輸。不同于低效的逐行傳輸,它采用先緩存再集中傳輸方式來提升 PCI-e 的帶寬利用率。分散在內存中的嵌入行在源設備的本地內存中集中為連續的數據塊,然后塊在 CPU 和 GPU 之間傳輸,并分散到目標內存的相應位置。以塊為單位移動數據可以提高 PCI-e 帶寬利用率,merge 和 scatter 操作只涉及 CPU 和 GPU 的片上內存訪問,因此開銷并不是很大。

    Colossal-AI 用一個尺寸受限的緩沖區來傳輸 CPU 和 GPU 之間數據。在最壞的情況下,所有輸入 id 都未命中緩存 cache,那就需要需要傳輸大量元素。為了防止緩沖區占用過多內存,緩沖區大小被嚴格限制。如果傳輸的數據大于緩沖區,會分為多次完成傳輸。

    Cached EmbeddingBag Workflow

    軟件 Cache 性能分析

    上述 Cache Step1 和 Step2 的操作都是訪存密集的。因此為了能利用 GPU 的 HBM 的帶寬,它們是在 GPU 上運行的,并使用深度學習框架封裝好的 API 來實現。盡管如此,與嵌入表在 GPU 上的訓練操作相比,Cache 操作的開銷尤為突出。

    比如在一次總計 199 秒訓練任務中,Cache 操作的開銷為 99 秒,占比總計算時間接近 50%。經過分析,Cache 的主要開銷主要是 Step1 和 Step2 引起。下圖 base 位置展示了此時的 Cache 開銷時間分解,Cache 的 step1,2 紅色和橙色兩階段占 Cache 總開銷的 70%。

    Cache 操作的時間分解

    而上述問題的原因,是因為傳統的 Cache 策略有些“短視”,只能根據當前 mini-batch 情況調整 Cache,因此大部分時間浪費在查詢操作上。

    Cache 流水預取

    為了縮減 Cache 的開銷,Colossal-AI 設計了一套 “高瞻遠矚” 的 Cache 機制。與其只對前 mini-batch 進行 Cache 操作,Colossal-AI 預取后續將會被使用的若干 mini-batch,統一進行 Cache 查詢操作。

    如下圖所示,Colossal-AI 使用預取來合并多個 mini-batch 數據統一進行 Cache 操作,同時采用流水線方式來重疊數據讀取和計算的開銷。例子中預取 mini-batch 數量是 2。在開始訓練前,先從磁盤讀取 mini-batch 0,1 數據到 GPU 內存,隨后開始 Cache 操作,然后執行這兩個 mini-batch 的正、反向傳播和參數更新。與此同時,可以和對 mini-batch 2,3 的開始數據讀取,這部分開銷可以和計算重疊。

    和 baseline Cache 執行方式相比,圖【Cache 操作的時間分解】對比了 prefetch 8 個 mini-batch 和 baseline 的 Cache 時間分解。訓練總時間從 201 秒下降到 120 秒,圖中所示的 Cache 階段操作時間占比也顯著下降。可以看到和每個 mini-batch 獨立進行 Cache 操作相比,各部分時間都減少了,尤其是 Cache 的前兩步操作。

    總結起來,Cache 流水預取帶來兩個好處。

    a.攤薄 Cache 索引開銷

    預取最顯而易見的好處是減少了 Step1 和 Step2 的開銷,使這個兩步操作在總的訓練過程占比小于 5%。如【Cache 操作的時間分解】所示,通過預取 8 個 mini-batch 數據,和沒有預取的 baseline 相比,Cache 查詢的開銷顯著降低。

    b.增加 CPU-GPU 數據移動帶寬

    通過集中更多數據,提升數據傳輸粒度,從而充分利用 CPU-GPU 傳輸帶寬。對于上面例子,CUDA->CPU 帶寬從 860MB/s 提升到 1477 MB/s,CPU->CUDA 帶寬從 1257 MB/s 提升到 2415 MB/s,幾乎帶來了近一倍的性能增益。

    便捷使用

    和 Pytorch EmbeddingBag 用法一致,在構建推薦模型時,僅需如下數行代碼進行初始化,即可大幅提升嵌入表容納量,低成本實現 TB 級超大推薦模型訓練。

    Bash
    from colossalai.nn.parallel.layers.cache_embedding import CachedEmbeddingBag
    
    
    emb_module=CachedEmbeddingBag(
            num_embeddings=num_embeddings,
            embedding_dim=embedding_dim,
            mode="sum"
            include_last_offset=True,
            sparse=True,
            _weight=torch.randn(num_embeddings, embedding_dim),
            warmup_ratio=0.7,
            cache_ratio=0.01,
        )

    性能測試

    在 NVIDIA A100 GPU (80GB)和 AMD EPYC 7543 32-Core Processor (512GB)硬件平臺上,Colossal-AI 以 Meta 的 DLRM 模型作為測試目標,用超大數據集 Cretio 1TB 和 Meta 的 dlrm_datasets 生成數據集作為測試模型。實驗中采用將嵌入表全部存儲 GPU 上的 PyTorch 訓練速度作為 baseline。

    Cretio 1TB

    Cretio 1TB嵌入表總共 177944275 行,設置 embedding dim=128,其嵌入表內存需求 91.10 GB。想把 EmbeddingBags 全部存儲在單個 GPU 內存中,即使是最高端的英偉達 A100 80GB 也無法滿足其內存需求。

    但使用 Colossal-AI 仍然在單 GPU 上完成訓練,當 cache ratio=0.05,顯存消耗僅為 5.01 GB,直接降低約 18 倍,可進一步擴展到在單張 GPU 上實現 TB 級推薦系統模型的訓練。在訓練速度上,如下圖所示,展示了不同 batch size 下訓練 100M 個樣本的延遲。綠色 Prefetch1 是不使用預取,藍色 Prefetch8 是使用預取(prefetch mini-batch=8)的延遲,可見預取流水優化對整體性能提升發揮了重要作用。圖中每個柱子深色部分為 Cache 開銷,使用預取后,Cache 開銷控制在訓練總時間的 15% 范圍內。

    多 GPU 擴展性

    用 8192 作為全局 batch size,在 8 張 GPU 卡上使用 table-wise sharding 作為 EmbeddingBags 并行方式訓練 DLRM,訓練 100M samples。此時設置 Prefetch 大小為 4,ColossalAI-mem-cr0.05 是 cache ratio=0.05,ColossalAI-mem-cr0.5=0.5。下圖展示了不同 GPU 情況下的訓練延遲。除了 1 GPU 時 PyTorch OOM 無法訓練之外,其余情況 PyTorch 和 Colossal-AI 訓練時間類似。可以觀察到使用 4 和 8 GPU 并沒有帶來明顯性能提升,這是因為,1. 同步結果需要通信開銷巨大。2. table-wise sharding 會導致切分負載不均衡。也說明使用多 GPU 來擴展 embedding table 訓練擴展性并不是很好。

    下圖展示了顯存使用,顯存使用在不同卡上并不相同,這里展示最大顯存數值。在僅使用一張 GPU 時,只有 Colossal-AI 的軟件 Cache 方法可以訓練,多卡并行的占用內存也顯著減少數倍。

    Meta Research 的合成數據集 dlrm_datasets 模仿了工業界嵌入表的訓練訪問行為,因此常在研究中作為推薦系統相關的軟硬件設計的測試參考。選取其中的 5 億行嵌入表項的作為子數據集,構造 256GB 和 128GB 大小的兩個 EmbeddingBags 用于測試。

    PyTorch 由于顯存內存不足無法在單卡 A100 上訓練。作為對比, Colossal-AI 的軟件 cache 將顯著降低 GPU 內存需求,足以訓練大至 256GB 的嵌入表,并可進一步擴展至 TB 級別。而且,流水預取也能體現出加速效果,當預取數為 32 時,相比沒有預取總時間下降 60%,而且對 GPU 的存儲的需求卻沒有增大。

    One More Thing


    面向大模型時代的通用深度學習系統 Colossal-AI,通過多項自研領先技術如高效多維自動并行、異構內存管理、大規模優化庫、自適應任務調度等實現高效快速部署 AI 大模型訓練和推理,降低 AI 大模型應用成本。

    Colossal-AI 相關解決方案已成功在自動駕駛、云計算、零售、醫藥、芯片等行業知名廠商落地應用,廣受好評。

    Colossal-AI 注重開源社區建設,提供中文教程,開放用戶社群及論壇,對于用戶反饋進行高效交流與迭代更新,不斷添加 PaLM、AlphaFold、OPT 等前沿應用。

    自然開源以來,Colossal-AI 已經多次在 GitHub 及 Papers With Code 熱榜位列世界第一,與眾多已有數萬 star 的明星開源項目一起受到海內外關注!

    項目開源地址:https://github.com/hpcaitech/ColossalAI

    參考鏈接:

    [1] https://ai.facebook.com/blog/dlrm-an-advanced-open-source-deep-learning-recommendation-model/

    [2] https://medium.com/@yangyou_berkeley/embedding-training-with-1-gpu-memory-and-10-times-less-budget-an-open-source-solution-for-6b4c3aba07a8

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有