BytePS


BytePS是一個高性能通用的分布式訓練框架。支持TensorFlow,Keras,PyTorch和MXNet,可以跑在TCP和RDMA(Remote Direct Memory Access,遠程直接內存訪問)網絡上。BytePS的性能比現有的開源分布式訓練框架都好很多,例如,在流行的公有雲上,用相同數量的GPU,BytePS的訓練速度是Horovod+NCCL的兩倍。

 

為了證明,我們測試兩個模型:VGG16(通信敏感)和Resnet50(計算敏感),兩個模型都是用fp32訓練。

我們使用Tesla V100 16GB GPU,並且設置每個GPU的batch size為64。訓練機器是雲上的虛擬機,每台機器8個GPU,並且開着NVLink。機器之間用20Gbps的TCP/IP網絡互連。

BytePS的性能比Horovod+NCCL在Resnet50上好44%,在VGG16上好100%。

你可以用我們提供的Dockerfiles和樣例腳本來復現上述結果。

在RDMA網絡上的評估可以查看performance.md。 

 

BytePS的性能為什么可以比Horovod好這么多?一個主要的原因是,BytePS棄用了MPI,基於雲和共享集群設計。 

MPI產生於HPC,適用於同質硬件構建的一個集群,以及跑單個任務。但是,雲(或者大量共享集群)就不一樣了。

這讓我們重新思考最好的通信策略。簡而言之,BytePS只在機器內部使用NCCL,而重新實現了機器之間的通信。 

BytePS還集成了很多加速技術,如分層策略,pipelining,張量分區,NUMA-aware本地通信,基於優先級的調度等等。

 

我們為你提供了一個step-by-step的教程,來跑訓練任務的benchmark。BytePS依賴CUDA和NCCL,而且需要gcc>=4.9。 

 

可以使用pypi源來構建BytePS。

 

可以使用源代碼來構建BytePS。

git clone --recurse-submodules https://github.com/bytedance/byteps
cd byteps
python setup.py install

你可以設置BYTEPS_USE_RDMA=1來安裝RDMA支持,前提是RDMA驅動要裝好。關於你的服務器和調度器節點,我們強烈推薦你只使用我們提前構建好的docker鏡像bytepsimage/byteps_server。否則,你就得手動編譯我們修改過得MXNet。鏡像中沒有RDMA支持。

 

雖然核心完全不一樣,但是BytePS高度兼容Horovod的接口

如果你的任務只依賴Horovod的allreduce和broadcast,那么可以很快切換到BytePS,用import byteps.tensorflow as bps替換import horovod.tensorflow as hvd,再用bps替換hvd。如果你原來直接用了hvd.allreduce,那么還需要替換成bps.push_pull。

 

BytePS目前不支持純的CPU訓練。以下特性還沒支持:

稀疏模型訓練。

異步訓練。

容錯。

Straggler-mitigation。

 

參考鏈接:

https://github.com/bytedance/byteps

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM