前言
轉(zhuǎn)載翻譯Medium上一篇關(guān)于分布式深度學(xué)習(xí)框架的文章 https://medium.com/@mlblogging.k/9-libraries-for-parallel-distributed-training-inference-of-deep-learning-models-5faa86199c1fmedium.com/@mlblogging.k/9-libraries-for-parallel-distributed-training-inference-of-deep-learning-models-5faa86199c1f
一、訓(xùn)練大模型的基礎(chǔ)
大型深度學(xué)習(xí)模型在訓(xùn)練時需要大量內(nèi)存來存儲中間激活、權(quán)重等參數(shù),導(dǎo)致某些模型只能在單個 GPU 上使用非常小的批大小進行訓(xùn)練,甚至無法在單個 GPU上進行訓(xùn)練,使得模型訓(xùn)練在某些情況下非常低效和不可能。
在大規(guī)模深度學(xué)習(xí)模型訓(xùn)練中有個主要范式:
- 數(shù)據(jù)并行
- 模型并行
我們將討論大規(guī)模深度學(xué)習(xí)模型訓(xùn)練中的核心概念以及在模型訓(xùn)練領(lǐng)域的最新進展和改進方法,然后分享一些實現(xiàn)這些方法的可用庫。
1.數(shù)據(jù)并行
應(yīng)用數(shù)據(jù)并行最常見的場景是模型尺寸能夠被 GPU 內(nèi)存容納,數(shù)據(jù)批大小會增加模型訓(xùn)練的難度。解決方案是讓模型的不同實例在不同的 GPU 和不同批數(shù)據(jù)上運行,如下圖所示。
模型的每個實例都使用相同的參數(shù)進行初始化,但在前向傳遞期間,不同批次的數(shù)據(jù)被發(fā)送到每個模型。 收集來自每個模型實例的梯度并計算梯度更新。,然后更新模型參數(shù)并將其作為更新發(fā)送到每個模型實例。
2.模型并行
當單個 GPU無法容納模型尺寸時,模型并行性變得必要,有必要將模型拆分到多個 GPU 上進行訓(xùn)練。
通過把一個大模型拆分到多個 GPU 上訓(xùn)練,可以實現(xiàn)模型尺寸超過單個 GPU顯存的深度學(xué)習(xí)模型訓(xùn)練。 這種方法的問題是計算使用效率不高,因為在任何時間點只有一個 GPU 正在使用,而其他 GPU 處于空閑狀態(tài)。
二、進階演化
上述兩個并行訓(xùn)練范式已有各種優(yōu)化和增強方法,使訓(xùn)練/推理變得高效,包含如下:
- TensorParallel
- Pipeline Model Parallel
- Zero Redundancy Optimizer (ZeRO)
- Sharded DDP
三、主流框架
1. Megatron-LM
Megatron 是由 NVIDIA 深度學(xué)習(xí)應(yīng)用研究團隊開發(fā)的大型 Transformer 語言模型,該模型用于研究大規(guī)模訓(xùn)練大型語言模型。Megatron 支持transformer模型的模型并行(張量、序列和管道)和多節(jié)點預(yù)訓(xùn)練,同時還支持 BERT、GPT 和 T5 等模型。
2.DeepSpeed
DeepSpeed是微軟的深度學(xué)習(xí)庫,已被用于訓(xùn)練 Megatron-Turing NLG 530B 和 BLOOM等大型模型。DeepSpeed的創(chuàng)新體現(xiàn)在三個方面:訓(xùn)練 ,推理 ,壓縮
DeepSpeed具備以下優(yōu)勢:
- 訓(xùn)練/推理具有數(shù)十億或數(shù)萬億個參數(shù)的密集或稀疏模型
- 實現(xiàn)出色的系統(tǒng)吞吐量并有效擴展到數(shù)千個 GPU
- 在資源受限的 GPU 系統(tǒng)上訓(xùn)練/推理
- 為推理實現(xiàn)前所未有的低延遲和高吞吐量
- 以低成本實現(xiàn)極致壓縮,實現(xiàn)無與倫比的推理延遲和模型尺寸縮減
3. FairScale
FairScale(由 Facebook 研究)是一個用于高性能和大規(guī)模訓(xùn)練的 PyTorch 擴展庫。 FairScale 的愿景如下:
- 可用性:用戶應(yīng)該能夠以最小的認知代價理解和使用 FairScale API。
- 模塊化:用戶應(yīng)該能夠?qū)⒍鄠€ FairScale API 無縫組合為訓(xùn)練循環(huán)的一部分。
- 性能:airScale API 在擴展和效率方面提供了最佳性能。
FairScale 支持Fully Sharded Data Parallel (FSDP),這是擴展大型神經(jīng)網(wǎng)絡(luò)訓(xùn)練的推薦方式。
FSDP workflow from https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/
4. ParallelFormers
Parallelformers 是一個基于 Megatron-LM 的庫。 它與 Huggingface 庫很好地集成在一起。 Huggingface 庫中的模型可以用一行代碼并行化。 目前它只支持推理。
from transformers import AutoModelForCausalLM, AutoTokenizer
from parallelformers import parallelize
model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-neo-2.7B")
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neo-2.7B")
parallelize(model, num_gpus=2, fp16=True, verbose='detail')
5. ColossalAI
Colossal-AI提供了一組并行組件,可以用來實現(xiàn)定制化的分布式/并行訓(xùn)練,包含以下并行化策略和增強功能:
- Data Parallelism
- Pipeline Parallelism
- **1D,2D,2.5D,****3D**Tensor Parallelism
- Sequence Parallelism
- Zero Redundancy Optimizer (ZeRO)
- Heterogeneous Memory Management (PatrickStar)
- For Inference**Energon-AI**
6. Alpa
Alpa是一個用于訓(xùn)練和服務(wù)大規(guī)模神經(jīng)網(wǎng)絡(luò)的系統(tǒng),具備如下特點:
- 自動并行化:Alpa基于數(shù)據(jù)、運算符和管道并行機制自動化地實現(xiàn)單設(shè)備代碼在分布式集群并行化。
- 完美的表現(xiàn):Alpa 在分布式集群上實現(xiàn)了數(shù)十億參數(shù)的訓(xùn)練模型的線性縮放。
- 與機器學(xué)習(xí)生態(tài)系統(tǒng)緊密集成:Alpa由開源、高性能和生產(chǎn)就緒的庫(如 Jax、XLA 和 Ray)提供支持。
7. Hivemind
Hivemind是一個在互聯(lián)網(wǎng)上使用 Pytorch 進行去中心化深度學(xué)習(xí)的庫。 它主要服務(wù)場景是在來自不同大學(xué)、公司和志愿者的數(shù)百臺計算機上訓(xùn)練一個大型模型。
其主要特點是:
- 沒有主節(jié)點的分布式訓(xùn)練:分布式哈希表允許連接分散網(wǎng)絡(luò)中的計算機。
- 容錯反向傳播:即使某些節(jié)點沒有響應(yīng)或響應(yīng)時間過長,前向和后向傳遞也會成功。
- 分散的參數(shù)平均:迭代地聚合來自多個工作人員的更新,而無需在整個網(wǎng)絡(luò)中同步(論文)。
- 訓(xùn)練任意大小的神經(jīng)網(wǎng)絡(luò):它們的部分層通過分散的專家混合(論文)分布在參與者之間。
8. OneFlow
OneFlow 是一個深度學(xué)習(xí)框架,旨在實現(xiàn)用戶友好、可擴展和高效。 使用 OneFlow,很容易:
- 使用類似 PyTorch 的 API 編寫模型
- 使用 Global View API 將模型縮放到 n 維并行/分布式執(zhí)行
- 使用靜態(tài)圖編譯器加速/部署模型。
9. Mesh-Tensorflow
根據(jù) github 頁面:Mesh TensorFlow (mtf) 是一種用于分布式深度學(xué)習(xí)的語言,能夠指定廣泛的分布式張量計算類別。 這里的“Mesh”是指處理器或計算設(shè)備的互連網(wǎng)絡(luò)。文章來源:http://www.zghlxwxcb.cn/news/detail-702838.html
其他
1.引用
- Survey on Large Scale Neural Network Training
- Dive into Big Model Training
- How to Train Really Large Models on Many GPUs?
- https://github.com/qhliu26/BM-Training
- https://huggingface.co/docs/transformers/v4.17.0/en/parallelism
- https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html
- https://pytorch.org/tutorials/intermediate/model_parallel_tutorial.html
- https://pytorch.org/tutorials/i
2.參考
https://zhuanlan.zhihu.com/p/582498905文章來源地址http://www.zghlxwxcb.cn/news/detail-702838.html
到了這里,關(guān)于AI框架:9大主流分布式深度學(xué)習(xí)框架簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!