Ray 训练基准测试#

下面我们记录了常见 Ray Train 任务和工作流的性能基准。

GPU 图像训练#

此任务使用 TorchTrainer 模块,通过 Pytorch ResNet 模型训练不同数量的数据。

我们在不同的集群规模和数据规模上测试性能。

备注

对于多主机分布式训练,在AWS上我们需要确保ec2实例在同一个VPC中,并且在安全组中所有端口都是开放的。

集群设置

数据大小

性能

命令

1 个 g3.8xlarge 节点(1 个工作节点)

1 GB (1623 张图片)

79.76 秒 (2 个周期, 40.7 张图像/秒)

python pytorch_training_e2e.py --data-size-gb=1

1 个 g3.8xlarge 节点(1 个工作节点)

20 GB (32460 张图片)

1388.33 秒 (2 个周期, 46.76 张图像/秒)

python pytorch_training_e2e.py --data-size-gb=20

4 个 g3.16xlarge 节点(16 个工作节点)

100 GB (162300 张图片)

434.95 秒 (2 个周期, 746.29 张图像/秒)

python pytorch_training_e2e.py --data-size-gb=100 --num-workers=16

Pytorch 训练一致性#

此任务检查原生 Pytorch Distributed 和 Ray Train 的分布式 TorchTrainer 之间的性能一致性。

我们展示了两个框架之间的性能相似(在2.5%以内)。性能在不同的模型、硬件和集群配置下可能会有很大差异。

报告的时间是针对原始训练时间的。两种方法都有几秒钟的未报告的常数设置开销,对于较长的训练运行来说可以忽略不计。

集群设置

数据集

性能

命令

4 个 m5.2xlarge 节点 (4 个工作节点)

FashionMNIST

196.64 秒(对比 Pytorch 的 194.90 秒)

python workloads/torch_benchmark.py run --num-runs 3 --num-epochs 20 --num-workers 4 --cpus-per-worker 8

4 个 m5.2xlarge 节点 (16 个工作节点)

FashionMNIST

430.88 秒(对比 Pytorch 的 475.97 秒)

python workloads/torch_benchmark.py run --num-runs 3 --num-epochs 20 --num-workers 16 --cpus-per-worker 2

4 个 g4dn.12xlarge 节点 (16 个工作进程)

FashionMNIST

149.80 秒(对比 Pytorch 的 146.46 秒)

python workloads/torch_benchmark.py run --num-runs 3 --num-epochs 20 --num-workers 16 --cpus-per-worker 4 --use-gpu

Tensorflow 训练一致性#

此任务检查原生 Tensorflow Distributed 和 Ray Train 的分布式 TensorflowTrainer 之间的性能一致性。

我们展示了两个框架之间的性能相似(差异在1%以内)。性能在不同模型、硬件和集群配置下可能会有很大差异。

报告的时间是针对原始训练时间的。两种方法都有几秒钟的未报告的常数设置开销,对于较长的训练运行来说可以忽略不计。

备注

批量大小和训练轮数对于GPU基准测试是不同的,这导致了更长的运行时间。

集群设置

数据集

性能

命令

4 个 m5.2xlarge 节点 (4 个工作节点)

FashionMNIST

78.81 秒(对比 Tensorflow 的 79.67 秒)

python workloads/tensorflow_benchmark.py run --num-runs 3 --num-epochs 20 --num-workers 4 --cpus-per-worker 8

4 个 m5.2xlarge 节点 (16 个工作节点)

FashionMNIST

64.57 秒(对比 Tensorflow 的 67.45 秒)

python workloads/tensorflow_benchmark.py run --num-runs 3 --num-epochs 20 --num-workers 16 --cpus-per-worker 2

4 个 g4dn.12xlarge 节点 (16 个工作进程)

FashionMNIST

465.16 秒(对比 Tensorflow 的 461.74 秒)

python workloads/tensorflow_benchmark.py run --num-runs 3 --num-epochs 200 --num-workers 16 --cpus-per-worker 4 --batch-size 64 --use-gpu

XGBoost 训练#

此任务使用 XGBoostTrainer 模块,在不同大小的数据上进行训练,并采用不同的并行度,以展示从分布式数据并行中获得的近线性扩展。

XGBoost 参数在本任务中保持为 xgboost==1.7.6 的默认设置。

集群设置

分布式训练工作者的数量

数据大小

性能

命令

1 个 m5.4xlarge 节点,配备 16 个 CPU

使用 12 个 CPU 训练工作器,为 Ray Data 任务留下 4 个 CPU

10 GB (2600万行)

310.22 秒

python train_batch_inference_benchmark.py "xgboost" --size=10GB

10 个 m5.4xlarge 节点

10 个训练工人(每个节点一个),使用 10x12 个 CPU,留下 10x4 个 CPU 用于 Ray Data 任务

100 GB (2.6亿行)

326.86 秒

python train_batch_inference_benchmark.py "xgboost" --size=100GB