返回開發人員最新消息

Summer of open source: building more efficient AI with PyTorch

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

註:特別感謝 Less Wright、Partner Engineer、Meta AI 針對這篇文章的評論和真知灼見。

這篇文章探討如何建立有效率的人工智慧 (AI),是「開放原始碼之夏」系列的第二篇。本系列旨在針對開放原始碼專案在整個 Meta 內外產生影響的領域,提供一些實用的資源和學習內容。歡迎和我們一起探究 Meta 開放原始碼推出有創意、能靈活擴充的工具後,將引領整個產業深入其他哪些領域。

PyTorch:從研發基礎技術到設立基金會

PyTorch 於 2016 年問世,此後在深度學習社群廣泛運用,原以研究為主要發展方向,現在則穩定擴大範疇,也開始投入於生產運用。在機器學習 (ML) 和人工智慧 (AI) 發展如火如荼的時代,與 AI 模式息息相關的新奇方法和使用案例越來越多,PyTorch 也已經展開歷史新頁,順利轉型為 Linux Foundation 旗下新設立的 PyTorch Foundation 獨立機構。這個基金會的治理委員會組成陣容相當多元,AMD、Amazon Web Services、Google Cloud、Microsoft Azure 和 Nvidia 皆在其中,委員會的發展目標則是著重於穩定擴大規模。這個基金會的宗旨包括推出不分廠商的專案、讓人人都能方便使用開放原始碼工具、資料庫及其他元件,以利推廣採用 AI 工具。轉型成為基金會之後,PyTorch 及其開放原始碼社群也將能夠繼續加快發展速度,從建立原型進化到投入於 AI 與 ML 生產。

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

PyTorch 是善用開放原始碼功能的典範。PyTorch 是早期開放原始碼深度學習架構的其中之一,從過去到現在已經輔助各種不同領域的用戶運用深度學習技術進行實驗,並且將自己的作品運用於相當廣泛的領域。支援從研究實驗自駕車開發透地雷達等各類用途,這些只是其中幾項較近期的應用領域。綜合豐富的 AI 工具資料庫結合開放原始碼社群的力量,讓這項工具大放異彩,也得以快速更新並大規模調整技術,以利運用於許多不同的用途。

AI 實施範圍越來越廣泛之後,相關模型的規模也開始大增,以利因應更加複雜的問題,但這同時也表示需要大幅增加用於訓練模型的資源。所幸,開發人員社群的許多用戶深知,不論從實務或環境立場來看,都有必要減少模型所使用的資源。這篇文章將探討 量化和其他類型的模型壓縮何以有機會提高 AI 的效率。

建立使用 PyTorch 的基準

這篇文章主要探討 PyTorch 的幾項中級和進階功能。若您是剛開始接觸的新手,或者是目前已經在使用其他資料庫的專家,最好先掌握一些基本概念再開始。請參閱 PyTorch 入門指南,其內容包含使用 Fashion MNIST 資料集的完整 ML 工作流程。

以下列舉一些適合剛接觸 PyTorch 的新手參考的其他資源:

  • PyTorch 社群故事:瞭解 PyTorch 如何在農業、教育、旅遊和其他各種產業發揮影響力
  • PyTorch 新手系列:瀏覽根本技術影片播放清單,包括開始使用在 PyTorch 使用 Tensor、建置模型、訓練,以及推論。

量化:將經過時間考驗的技術應用於 AI

許多方法能夠提高 AI 的效率。透過硬體和軟體程式碼設計的方式提升 AI 效能可以發揮相當高的成效,但要開發出最好的軟硬體解決方案相當耗費時間和資源。建立更快速、更精簡的架構是提高效率的另一個方法,但其中許多架構會因此少了大型模型所具備的準確度,至少現階段的情況仍是如此。較簡單的方式是設法減少訓練和提供現有模型所需的資源。在 PyTorch 領域中,使用量化透過模型壓縮的方式就能達到這個目的。

量化是一種數學技巧,向來用於建立會失真的數位音樂檔,以及將類比訊號轉換成數位訊號。量化是以減少精準度的前提執行數位計算,用於許多硬體平台均能大幅提升效能。使用量化提升 AI 效率的原因實驗結果顯示,在某些情況下,使用這種相對單純的技術能大幅提高模型推論速度(2-4 倍)。

構成深度學習模型的參數通常是符合浮點 (FP) 數精準度的十進位數字;每個參數各須佔用 16 位元或 32 位元的記憶體。使用量化時,通常會將數字轉換成 INT4 或 INT8,這種格式只須佔用 4 或 8 位元。這麼做能夠減少模型必須佔用的記憶體。此外,晶片製造商會加入特殊運算方式,讓使用整數運算的速度大於使用十進位運算。

訓練模型可用的量化方法共有 3 種:動態、靜態以及量化感知訓練 (QAT)。下表簡介這種方式的優缺點。要深入瞭解如何在 AI 工作流程中實作其中的每一項方法,請參閱 PyTorch 量化實務部落格文章。

量化方法

優點

缺點

動態

  • 簡單易用,使用一項 API 呼叫即可
  • 更穩定,能降低分佈偏離機率,略能提高準確度
  • 適用於長短期記憶 (LSTM) 和轉換程式模型

每一次正向傳遞都會額外增加耗損

靜態(亦稱為 PTQ)

  • 能減少耗損,推論速度比動態量化快

可能需要定期校準分佈偏離

量化感知訓練 (QAT)

  • 準確度高於靜態量化準確度
  • 推論速度比動態量化快

運算成本偏高

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

量化並不是唯一能提高 PyTorch AI 技術效率的方法。我們定期更新各項功能,以下列舉 PyTorch 有助於改善 AI 工作流程的其他幾種方式:

  • 推論模式:若您單純使用 PyTorch 程式碼執行推論,可以使用這種模式編寫程式碼。推論模式會隨著處理 Tensor 時的假設而改變,以利加快推論速度。只要在 PyTorch 中指定不使用 Tensor 的特定應用程式(在這個範例中是指 autograd),PyTorch 就會據以調整並加快這些特定案例中的程式碼執行速度。

  • 降低精準度:量化只適用於推論階段,也就是完成模型訓練之後。而在訓練過程中,PyTorch 會使用 AMP 或自動混合精準度訓練,根據所使用的 Tensor(FP16、FP32 或 BF16)找出最好的格式。PyTorch 中的低精準度深度學習有幾項優點。有助於縮小模型,因此能減少訓練模型必須佔用的記憶體,也能降低執行模型所需的功率。如需詳細資訊,請參閱這份合併運用 AMP 與 CUDA GPU 的教學課程。

  • 通道維持:處理視覺模型時,NHWC(亦稱「通道維持」在 PyTorch 中是速度較快的 Tensor 記憶體格式。以通道維持格式儲存資料能加快 PyTorch 運作速度。將輸入 Tensor 的格式設為通道維持格式有助於減少轉換不同格式類型的耗損,因此能加快推論速度。

  • 推論最佳化:這種 TorchScript 原型會實作幾項通用最佳化處理,這些處理應能加快模型在所有環境中的速度,而且也能做好模型的推論前置作業,不需要考慮特定建置設定。目前的主要使用案例包括 CPU(和 GPU)的視覺模型。由於這是原型,因此實際使用時可能會發生問題。如發生問題,請在 PyTorch GitHub 存放庫中提出。

讓 PyTorch 發揮新的潛力

PyTorch 部落格定期探討加速 AI 工作流程的新奇方法。歡迎經常參閱部落格文章,掌握各項最新技術,例如近期的 BetterTransformer,這項技術能讓通用轉換程式模型的速度和產能倍增。如有意瞭解在 PyTorch 中實作特定功能的方式,請瀏覽製程配方專頁,依模型最佳化、分散式訓練和互通功能等類別搜尋相關資訊。這篇貼文簡介 PyTorch 這類工具如何推動開放原始碼和 AI 技術的發展。

若要掌握 Meta 開放原始碼中有關人工智慧和機器學習的最新資訊,請前往我們的開放原始碼網站、訂閱我們的 YouTube 頻道,或在 FacebookTwitterLinkedIn 追蹤我們的最新消息。