Optimum + ONNX Runtime: 更容易、更快地訓(xùn)練你的 Hugging Face 模型

介紹
基于語言、視覺和語音的 Transformer 模型越來越大,以支持終端用戶復(fù)雜的多模態(tài)用例。增加模型大小直接影響訓(xùn)練這些模型所需的資源,并隨著模型大小的增加而擴展它們。Hugging Face 和微軟的 ONNX Runtime 團隊正在一起努力,在微調(diào)大型語言、語音和視覺模型方面取得進步。Hugging Face 的 ?? Optimum 庫,通過和 ONNX Runtime 的集成進行訓(xùn)練,為許多流行的 Hugging Face 模型提供了一個開放的解決方案,可以將?訓(xùn)練時間縮短 35% 或更多。我們展現(xiàn)了 Hugging Face Optimum 和 ONNX Runtime Training 生態(tài)系統(tǒng)的細節(jié),性能數(shù)據(jù)突出了使用 Optimum 庫的好處。
?? Optimum 庫文檔:
https://hf.co/docs/optimum/index
性能測試結(jié)果
下面的圖表表明,當?使用 ONNX Runtime 和 DeepSpeed ZeRO Stage 1進行訓(xùn)練時,用 Optimum 的 Hugging Face 模型的加速?從 39% 提高到 130%。性能測試的基準運行是在選定的 Hugging Face PyTorch 模型上進行的,第二次運行是只用 ONNX Runtime 訓(xùn)練,最后一次運行是 ONNX Runtime + DeepSpeed ZeRO Stage 1,圖中顯示了最大的收益?;€ PyTorch 運行所用的優(yōu)化器是 AdamW Optimizer,ORT 訓(xùn)練用的優(yōu)化器是 Fused Adam Optimizer。這些運行是在帶有 8 個 GPU 的單個 NVIDIA A100 節(jié)點上執(zhí)行的。

更多關(guān)于開啟 ?? Optimum 進行訓(xùn)練加速的配置細節(jié)可以在指南中找到。用于這些運行的版本信息如下:
?? Optimum 訓(xùn)練配置指南:
https://hf.co/docs/optimum/onnxruntime/usage_guides/trainer
PyTorch:?1.14.0.dev20221103+cu116;?ORT:?1.14.0.dev20221103001+cu116;?DeepSpeed:?0.6.6;?HuggingFace:?4.24.0.dev0;?Optimum:?1.4.1.dev0;?Cuda:?11.6.2
Optimum 庫
Hugging Face 是一個快速發(fā)展的開放社區(qū)和平臺,旨在將優(yōu)秀的機器學(xué)習(xí)大眾化。隨著 ?? Transformers 庫的成功,我們將模態(tài)從 NLP 擴展到音頻和視覺,現(xiàn)在涵蓋了跨機器學(xué)習(xí)的用例,以滿足我們社區(qū)的需求。現(xiàn)在在 Hugging Face Hub 上,有超過 12 萬個免費和可訪問的模型 checkpoints 用于各種機器學(xué)習(xí)任務(wù),1.8 萬個數(shù)據(jù)集和 2 萬個機器學(xué)習(xí)演示應(yīng)用。然而,將 Transformer 模型擴展到生產(chǎn)中仍然是工業(yè)界的一個挑戰(zhàn)。盡管準確性很高,但基于 Transformer 的模型的訓(xùn)練和推理可能耗時且昂貴。
?? Transformers 文檔:
https://hf.co/docs/transformers/index
Hugging Face 模型庫:
https://hf.co/models
為了滿足這些需求,Hugging Face 構(gòu)建了兩個開源庫:??? Accelerate?和??? Optimum。?? Accelerate 專注于開箱即用的分布式訓(xùn)練,而 ?? Optimum 作為 Transformer 的擴展,通過利用用戶目標硬件的最大效率來加速模型訓(xùn)練和推理。Optimum 集成了機器學(xué)習(xí)加速器如 ONNX Runtime,和專業(yè)的硬件如英特爾的 Habana Gaudi,因此用戶可以從訓(xùn)練和推理的顯著加速中受益。此外,?? Optimum 無縫集成了其他 Hugging Face 的工具,同時繼承了 Transformer 的易用性。開發(fā)人員可以輕松地調(diào)整他們的工作,以更少的計算能力實現(xiàn)更低的延遲。
?? Accelerate 文檔:
https://hf.co/docs/accelerate/index
?? Optimum 文檔:
https://hf.co/docs/optimum/index
英特爾 Habana Gaudi 性能介紹:
https://hf.co/blog/habana-gaudi-2-benchmark
ONNX Runtime 訓(xùn)練
ONNX Runtime 加速大型模型訓(xùn)練,單獨使用時將吞吐量提高40%,與 DeepSpeed 組合后將吞吐量提高130%,用于流行的基于Hugging Face Transformer 的模型。ONNX Runtime 已經(jīng)集成為 ?? Optimum 的一部分,并通過 Hugging Face 的 ?? Optimum 訓(xùn)練框架實現(xiàn)更快的訓(xùn)練。
加速大型模型訓(xùn)練的示例文檔:
https://onnxruntime.ai/docs/get-started/training-pytorch.htmlDeepSpeed ZeRO 使用教程:
https://www.deepspeed.ai/tutorials/zero/
ONNX Runtime Training 通過一些內(nèi)存和計算優(yōu)化實現(xiàn)了這樣的吞吐量改進。內(nèi)存優(yōu)化使 ONNX Runtime 能夠最大化批大小并有效利用可用的內(nèi)存,而計算優(yōu)化則加快了訓(xùn)練時間。這些優(yōu)化包括但不限于,高效的內(nèi)存規(guī)劃,內(nèi)核優(yōu)化,適用于 Adam 優(yōu)化器的多張量應(yīng)用 (將應(yīng)用于所有模型參數(shù)的按元素更新分批到一個或幾個內(nèi)核啟動中),F(xiàn)P16 優(yōu)化器 (消除了大量用于主機內(nèi)存拷貝的設(shè)備),混合精度訓(xùn)練和圖優(yōu)化,如節(jié)點融合和節(jié)點消除。ONNX Runtime Training 支持 NVIDIA 和 AMD GPU,并提供自定義操作的可擴展性。
使用 NVIDIA GPU 進行 ONNX Runtime Training:
https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/accelerate-pytorch-transformer-model-training-with-onnx-runtime/ba-p/2540471
使用 AMD GPU 進行 ONNX Runtime Training:
https://cloudblogs.microsoft.com/opensource/2021/07/13/onnx-runtime-release-1-8-1-previews-support-for-accelerated-training-on-amd-gpus-with-the-amd-rocm-open-software-platform/
簡而言之,它使 AI 開發(fā)人員能夠充分利用他們熟悉的生態(tài)系統(tǒng),如 PyTorch 和 Hugging Face,并在他們選擇的目標設(shè)備上使用 ONNX Runtime 進行加速,以節(jié)省時間和資源。
Optimum 中的 ONNX Runtime Training
Optimum 提供了一個?ORTTrainer
?API,它擴展了 Transformer 中的?Trainer
,以使用 ONNX Runtime 作為后端進行加速。ORTTrainer
?是一個易于使用的 API,包含完整的訓(xùn)練循環(huán)和評估循環(huán)。它支持像超參數(shù)搜索、混合精度訓(xùn)練和多 GPU 分布式訓(xùn)練等功能。ORTTrainer
?使 AI 開發(fā)人員在訓(xùn)練 Transformer 模型時能夠組合 ONNX Runtime 和其他第三方加速技術(shù),這有助于進一步加速訓(xùn)練,并充分發(fā)揮硬件的作用。例如,開發(fā)人員可以將 ONNX Runtime Training 與 Transformer 訓(xùn)練器中集成的分布式數(shù)據(jù)并行和混合精度訓(xùn)練相結(jié)合。此外,ORTTrainer
?使你可以輕松地將 DeepSpeed ZeRO-1 和 ONNX Runtime Training 組合,通過對優(yōu)化器狀態(tài)進行分區(qū)來節(jié)省內(nèi)存。在完成預(yù)訓(xùn)練或微調(diào)后,開發(fā)人員可以保存已訓(xùn)練的 PyTorch 模型,或使用 ?? Optimum 實現(xiàn)的 API 將其轉(zhuǎn)為 ONNX 格式,以簡化推理的部署。和?Trainer
?一樣,ORTTrainer
?與 Hugging Face Hub 完全集成: 訓(xùn)練結(jié)束后,用戶可以將他們的模型 checkpoints 上傳到 Hugging Face Hub 賬戶。
因此具體來說,用戶應(yīng)該如何利用 ONNX Runtime 加速進行訓(xùn)練?如果你已經(jīng)在使用?Trainer
,你只需要修改幾行代碼就可以從上面提到的所有改進中受益。主要有兩個替換需要應(yīng)用。首先,將?Trainer
?替換為?ORTTrainer
,然后將?TrainingArguments
?替換為ORTTrainingArguments
,其中包含訓(xùn)練器將用于訓(xùn)練和評估的所有超參數(shù)。ORTTrainingArguments
?擴展了?TrainingArguments
,以應(yīng)用 ONNX Runtime 授權(quán)的一些額外參數(shù)。例如,用戶可以使用 Fused Adam 優(yōu)化器來獲得額外的性能收益。下面是一個例子:
展望未來
Hugging Face 團隊正在開源更多的大型模型,并通過訓(xùn)練和推理的加速工具以降低用戶從模型中獲益的門檻。我們正在與 ONNX Runtime Training 團隊合作,為更新和更大的模型架構(gòu)帶來更多的訓(xùn)練優(yōu)化,包括 Whisper 和 Stable Diffusion。微軟還將其最先進的訓(xùn)練加速技術(shù)打包在 PyTorch 的 Azure 容器中。這是一個輕量級的精心營造的環(huán)境,包括 DeepSpeed 和 ONNX Runtime,以提高 AI 開發(fā)者使用 PyTorch 訓(xùn)練的生產(chǎn)力。除了大型模型訓(xùn)練外,ONNX Runtime Training 團隊還在為邊緣學(xué)習(xí)構(gòu)建新的解決方案——在內(nèi)存和電源受限的設(shè)備上進行訓(xùn)練。
準備開始
我們邀請你查看下面的鏈接,以了解更多關(guān)于 Hugging Face 模型的 Optimum ONNX Runtime Training,并開始使用。
Optimum ONNX Runtime Training 文檔:
https://hf.co/docs/optimum/onnxruntime/usage_guides/trainer
Optimum ONNX Runtime Training 示例:
https://github.com/huggingface/optimum/tree/main/examples/onnxruntime/training
Optimum Github 倉庫:
https://github.com/huggingface/optimum/tree/main
ONNX Runtime Training 示例:
https://github.com/microsoft/onnxruntime-training-examples/
ONNX Runtime Training Github 倉庫:
https://github.com/microsoft/onnxruntime/tree/main/orttraining
ONNX Runtime:
https://onnxruntime.ai/
DeepSpeed 和 ZeRO 教程:
https://www.deepspeed.ai/tutorials/zero/
PyTorch 的 Azure 容器:
https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/enabling-deep-learning-with-azure-container-for-pytorch-in-azure/ba-p/3650489
感謝閱讀!如果你有任何問題,請通過 Github 或論壇隨時聯(lián)系我們。你也可以在 Twitter 或 LinkedIn 上聯(lián)系我。
GitHub 反饋鏈接:
https://github.com/huggingface/optimum/issues
Hugging Face 論壇版塊:
https://discuss.huggingface.co/c/optimum/Twitter:
https://twitter.com/Jhuaplin
LinkedIn:
https://www.linkedin.com/in/jingya-huang-96158b15b/
原文: https://hf.co/blog/optimum-onnxruntime-training
作者: Jingya、Kshama Pawar (guest)、Vincent Wang (guest)、Zhijiang Xu (guest)
譯者: AIboy1993 (李旭東)
審校、排版: zhongdongy (阿東)