返回開發人員最新消息

Summer of open source: building more efficient AI with PyTorch

2022年9月20日發佈者:Suraj Subramanian

備註:特別感謝 Meta AI 合作夥伴工程師 Less Wright 審閱帖子內容,並提供更多深入見解。

這則帖子介紹如何建立高效人工智能(AI),是「開放原始碼之夏」系列中的第二篇。開放原始碼專案為 Meta 內外帶來不少影響,而本系列旨在針對這些領域提供一些實用的資源和學習內容。跟隨我們探索其他領域,了解 Meta 開放原始碼如何分享各種創新且可靈活調整的工具,大力推動業界發展。

PyTorch:從基礎性技術到基金會

自 2016 年推出初始版本以來,PyTorch 已廣泛應用於深度學習社群,其研究基礎不斷擴大,現可運用於生產場景。在機器學習(ML)和人工智能(AI)發展迅速的這段時期,AI 模型的新穎方法和使用案例持續增加,而 PyTorch 則把握機會轉移到 Linux 基金會旗下且新成立的獨立 PyTorch 基金會,開啟了歷史新篇章。此基金會由多元化規管委員會組成,而委員會包括來自 AMD、Amazon Web Services、Google Cloud、Microsoft Azure 和 Nvidia 的代表,並有意在一段時間後擴大。基金會的使命包括透過供應商中立專案推動 AI 工具的採用,以及向所有人提供開放原始碼工具、資料庫及其他元件。在轉移到基金會後,PyTorch 及其開放原始碼社群還可繼續加快 AI 和 ML 從原型設計到生產的進程。

使用 Meta 開放原始碼簡化 AI 流程

PyTorch 是呈現開放原始碼強大效能的好例子PyTorch 是早期開放原始碼的深度學習框架之一,已幫助不同學科的用戶完成深度學習試驗,並將其工作成果應用於大量領域。PyTorch 支援搜尋應用程式試驗自動駕駛汽車開發以至透地雷達等一切項目,上述例子只是幾個較新的應用案例。在用途廣泛的 AI 工具庫與開放原始碼社群的共同支援下,我們可以為眾多不同的應用情況大規模地快速修正並調整相關技術。

隨著 AI 的採用範圍日益廣泛,各個模型有變大的趨勢以處理更複雜的問題,但這也意味著訓練這些模型所需的資源大幅增加。幸好,開發人員社群的許多人已意識到,從實用性和環境的角度來看,各種模型需要使用較少資源。這則帖子會探索量化及其他類型的模型壓縮為什麼有助推動高效 AI 的誕生。

制定使用 PyTorch 的基準

在這則帖子中,大部分內容都是探索 PyTorch 的一些中級和高級功能。如果您是想了解入門功能的新手或目前正在使用其他資料庫的專家,從一些基本知識著手是最簡單的做法。請參閱 PyTorch 新手指南,當中介紹了如何使用 Fashion MNIST 資料集完成 ML 工作流程。

如果您是 PyTorch 新手,則可參閱下列一些其他資源:

  • PyTorch 社群動態:了解 PyTorch 對農業、教育、旅遊等不同行業產生的影響
  • PyTorch 新手系列影片:探索基本技術的影片播放清單,其中包括張量入門指南、在 PyTorch 中構建模型、訓練與推斷。

量化:將久經考驗的技術應用於 AI

提高 AI 效率的途徑有很多。共同設計硬件和軟件來優化 AI 可以是非常高效的做法,但開發定制硬件及軟件解決方案需要大量時間和資源。建立更快而且更小的架構是提高效率的另一途徑,但與較大的模型相比,這些架構中有很多都存在準確率下降問題,至少目前情況如此。更簡單的方法就是設法減少訓練和處理現有模型所需的資源。PyTorch 會透過量化方式壓縮模型,進而減少模型所需資源。

量化是一種數學方法,使用此方法可建立有損數碼音樂檔案,以及將類比訊號轉換為數碼訊號。透過以較低的精度進行數學計算,量化可顯著提高許多硬件平台的性能。使用量化為什麼可以提高 AI 的效率?結果顯示,在某些情況下,使用此相對簡單的方法可顯著加快模型推理速度(2-4 倍)。

深度學習模型的參數通常是浮點(FP)精度小數;每個參數都需要 16 位元或 32 位元記憶體。量化方法通常會將數字轉化為 INT4 或 INT8,因此只需佔用 4 位或 8 位元記憶體。這樣可減少模型需要佔用的記憶體量。此外,晶片製造商還加入了特殊演算法,使整數運算比小數運算快。

可用於訓練模型的量化方法有 3 種:動態、靜態和量化感知訓練(QAT)。下表簡述了這些方法的優勢和劣勢。如需了解如何在 AI 工作流程中實施這些方法,請參閱博文 PyTorch 中的可行量化方法

量化方法

優勢

劣勢

動態

  • 僅需單個 API 呼叫,十分易用
  • 分佈趨勢更穩定,準確率略微提高
  • 很適合長短時記憶(LSTM)模型和 Transformer 模型

每次向前傳遞都需要耗費額外性能

靜態(也稱為 PTQ)

  • 與動態量化相比,因無需考慮性能消耗,所以推理速度更快

分佈趨勢可能需要定期重新校準

量化感知訓練(QAT)

  • 準確率比靜態量化高
  • 推理速度比動態量化快

計算成本高

加快 AI 工作流程速度的其他功能

對於採用 PyTorch 的 AI 而言,量化並不是提高效率的唯一方法。各種功能都會定期更新,PyTorch 改善 AI 工作流程的一些其他方法如下:

  • 推理模式:如果僅使用代碼運行推理,可使用此模式編寫 PyTorch 代碼。使用張量加快推理速度時,使用推理模式可更改某些假設條件。在通知 PyTorch 稍後不對某些應用程式使用張量(此時使用 autograd)後,此框架會在這些特定場景下作出調整,提高代碼運行速度。

  • 低精度:僅在推理時(即在訓練模型後)進行量化處理。在訓練過程中,PyTorch 使用 AMP(自動混合精度)訓練,以根據使用的張量找到最佳格式(格式FP16、FP32 或 BF16)。PyTorch 中的低精度深度學習具有一些優勢。此功能有助於縮減模型大小,減少訓練模型所需的記憶體,以及降低運行模型所需的性能。如需了解更多資訊,請參閱有關對支持 CUDA 的 GPU 使用 AMP 的教程。

  • 通道在後:使用視覺模型時,NHWC(另稱為「通道在後」)是 PyTorch 中的一種速度較快的張量記憶體格式。以通道在後格式儲存資料可加快 PyTorch 中的運行速度。如果將輸入張量的格式設置為通道在後格式,可減少在不同格式類型之間轉換所需的性能消耗,從而提高推理速度。

  • 推理優化:此 TorchScript 原型可實現某些通用優化,以在各種環境下加速模型,還可使用特定版本設定準備模型進行推理。目前主要用例包括在 CPU(和 GPU)上運行的視覺模型。由於是原型,用戶可能會遇到問題。您可提出 PyTorch GitHub 儲存庫的相關問題。

發現 PyTorch 的新潛力

PyTorch 網誌會定期探討加快 AI 工作流程速度的新方法。您可在此及時了解最新技術,例如 BetterTransformer,在通常的運行場景下,該技術可使 Transformer 模型的速度和輸送量最多提高 2 倍。如果有興趣了解如何在 PyTorch 中實現特定功能,請參閱技巧頁面,您可按類別搜尋內容,例如模型優化、分散式訓練和可解讀性。本帖子只介紹了 PyTorch 等工具如何推動開放原始碼和 AI 發展。

如需及時掌握 Meta 開放原始碼項目最新動向,了解人工智能和機器學習,請瀏覽我們的開放原始碼網站、訂閱我們的 YouTube 頻道,或在 FacebookTwitterLinkedIn 上追蹤我們。