首頁 > AI資訊 > 行業動態 > 字節跳動開源分布式訓練框架BytePS,支持PyTorch、TensorFlow等

字節跳動開源分布式訓練框架BytePS,支持PyTorch、TensorFlow等

新火種    2023-11-01

機器之心報道

參與:戴一鳴、思源

最近,字節跳動發布了一款通用高性能分布式訓練框架 BytePS,該框架支持TensorFlow、Keras、PyTorch 和 MXNet,并且可以在 TCP 或 RDMA 網絡上運行。根據該項目的 GitHub 頁面,BytePS顯著優于目前的開源分布式訓練框架。例如在流行的公有云和同樣數量 GPU 上,BytePS 的訓練速度可以達到Horovod (NCCL) 的兩倍。

最近,字節跳動發布了一款通用高性能分布式訓練框架 BytePS,該框架支持 TensorFlow、Keras、PyTorch 和 MXNet,并且可以在 TCP 或 RDMA 網絡上運行。

BytePS GitHub 地址:https://github.com/bytedance/byteps

根據該項目的 GitHub 頁面,BytePS 顯著優于目前的開源分布式訓練框架。例如在流行的公有云和同樣數量 GPU 上,BytePS 的訓練速度可以達到 Horovod (NCCL) 的兩倍。

框架性能

開發團隊在 BytePS 上測試了兩個模型:VGG16(通信密集)和 Resnet50(計算密集)。測試使用了 Tesla V100 16GB GPU 集群,批大小都是 64。機器使用的是公有云上的虛擬機,每個機器有 8 個 GPU,集成了 NVLink。機器之間使用 20 Gbps TCP/IP 網絡互通。在測試上,BytePS 在 Resnet50 的表現較 Horovod(NCCL)提高 44%,在 VGG16 則提升了 100%。

字節跳動開源分布式訓練框架BytePS,支持PyTorch、TensorFlow等

在 VGG16 和 Resnet50 模型上,BytePS 和 NCCL 的性能對比。

作者提供了 Docker 文件,幫助用戶測試。

拋棄 MPI,迎接云計算

為什么 BytePS 的表現比 Horovod 好太多?主要原因是 BytePS 為云計算和共享集群設計,并拋棄了 MPI。

MPI 是高性能計算(High Performance Computing)的產物。當需要運行單一任務時,MPI 適合用于建立在同質化硬件的計算集群上。但是云計算(或者內部共享集群)是不一樣的。

團隊因此重新思考了最佳通信策略。總之,BytePS 不僅在機器內使用 NCCL,同時也重新部署了機器間的通信方式。

BytePS 同時繼承了許多加速技術,如分級策略、管道、張量分割、NUMA-aware 本地通信、基于優先級的調度機制等。

快速上手

使用 BytePS 前,假設你已經安裝了以下一種或更多框架:TensorFlow、Keras、PyTorch、MXNet 等。BytePS 基于 CUDA 和 NCCL。

復制 BytePS 和第三方依賴:

git clone --recurse-submodules https://github.com/bytedance/byteps

然后進入 BytePS 文件目錄,并安裝:

python setup.py install

注意:你可能需要設置 BYTEPS_USE_RDMA=1 來安裝 RDMA 支持。

現在你可以試試一些例子。假設你使用 MXNet,并想嘗試 ResNet50 的基本模型。

export NVIDIA_VISIBLE_DEVICES=0,1

DMLC_NUM_WORKER=1

DMLC_NUM_SERVER=1

DMLC_WORKER_ID=0

DMLC_ROLE=worker

DMLC_PS_ROOT_URI=10.0.0.1

DMLC_PS_ROOT_PORT=1234

DMLC_INTERFACE=eth0

python byteps/launcher/launch.py byteps/example/mxnet/train_imagenet_byteps.py --benchmark 1 --batch-size=32

對于分布式訓練,你可能需要建立一個服務器鏡像。團隊提供了 Docker 文件作為例子。你可以使用同樣的鏡像用于調度和提供服務。

更多啟動分布式任務和上手教程可參考:https://github.com/bytedance/byteps/tree/master/docs

在你的代碼中使用 BytePS

BytePS 和 Horovod 接口高度兼容。選擇 Horovod 可以降低測試工作量。

如果你的任務只依賴 Horovod 的 allreduce 和廣播,你可以在一分鐘內切換到 BytePS。

只需要用 import byteps.tensorflow as bps 替換 import horovod.tensorflow as hvd,并將代碼中所有的 hvd 替換成 bps。

項目計劃

BytePS 目前不支持單純的 CPU 訓練,一些底層邏輯可能不支持。你可以使用 CUDA 或 NCCL 來運行 BytePS。

BytePS 即將增加以下特性:

異步訓練 容錯機制 延遲減緩
相關推薦
免責聲明
本文所包含的觀點僅代表作者個人看法,不代表新火種的觀點。在新火種上獲取的所有信息均不應被視為投資建議。新火種對本文可能提及或鏈接的任何項目不表示認可。 交易和投資涉及高風險,讀者在采取與本文內容相關的任何行動之前,請務必進行充分的盡職調查。最終的決策應該基于您自己的獨立判斷。新火種不對因依賴本文觀點而產生的任何金錢損失負任何責任。

熱門文章