Ray Tune 的可扩展性和开销基准测试#
我们进行了一系列微基准测试,评估了 Ray Tune 的可扩展性并分析了我们观察到的性能开销。这些基准测试的结果反映在文档中,例如,当我们提出 如何消除性能瓶颈的建议 时。
本页概述了我们进行的一系列实验。对于每个实验,其目标都是检查实验的总运行时间,并在观察到的开销与最小理论时间相比过高时(例如,超过20%的开销)解决相关问题。
在一些实验中,我们调整了默认设置以实现最大吞吐量,例如通过禁用试验同步或结果日志记录。如果是这种情况,将在相应的基准描述中说明。
变量 |
# 试验次数 |
每秒结果/试验 |
# 节点数 |
# 每节点CPU |
试验时长 (秒) |
观察到的运行时间 |
---|---|---|---|---|---|---|
10,000 |
|
|
16 |
|
715.27
(625 最低)
|
|
1,000 |
0.1 |
16 |
64 |
100 |
168.18 |
|
96 |
10 |
|
96 |
100 |
168.94 |
|
200 |
|
200 |
2 |
300 |
2280.82 |
|
16 |
结果: 1/60
检查点: 1/900
|
|
16 |
86,400 |
88687.41 |
|
持久可训练 的链接 |
16 |
10/60
使用 10MB CP
|
16 |
2 |
300 |
392.42 |
下面我们讨论一些关于结果的见解,在这些结果中我们观察到大量的开销。
结果吞吐量#
结果吞吐量描述了 Ray Tune 在给定时间段内可以处理的结果数量(例如,“每秒结果数”)。吞吐量越高,可以在不造成重大延迟的情况下处理更多的并发结果。
结果吞吐量受处理结果所需时间的限制。当一个试验报告结果时,它只有在试验执行器重新触发远程训练函数后才会继续训练。如果许多试验同时报告结果,每个后续的远程训练调用只有在处理完该试验的结果后才会被触发。
为了加快进程,Ray Tune 自适应地缓冲结果,因此如果许多试验并行运行并且同时报告许多结果,试验训练会更早继续。尽管如此,对于数十或数百个试验,每个试验处理数百个结果可能会成为瓶颈。
主要见解:当试验处理成为瓶颈时,Ray Tune 会发出警告。如果您注意到这成为一个问题,请遵循我们在 常见问题解答 中概述的指南。通常建议不要同时报告太多结果。考虑将报告间隔增加 5-10 倍。
下面我们展示关于结果吞吐性能的更详细结果。
基准测试许多并发 Tune 试验#
在此设置中,日志记录器(CSV、JSON 和 TensorBoardX)和试验同步功能被禁用,除非特别说明。
在这个实验中,我们在一个集群上运行许多并发试验(最多1,000个)。然后我们调整试验的报告频率(每秒的结果数量)来测量吞吐量限制。
当日志记录和同步功能被禁用时,大约每秒500个总结果似乎是可接受性能的阈值。启用了日志记录功能后,每秒大约50-100个结果仍可以在不过多增加开销的情况下处理,但之后应考虑采取措施减少传入的结果。
# 试验次数 |
结果 / 每秒 / 试验 |
# 节点 |
# 每节点CPU |
试用期长度。 |
当前 |
---|---|---|---|---|---|
1,000 |
10 |
16 |
64 |
100s |
248.39 |
1,000 |
|
16 |
64 |
100s |
175.00 |
1,000 |
0.1 带日志记录 |
16 |
64 |
100s |
168.18 |
384 |
10 |
16 |
64 |
100s |
125.17 |
256 |
50 |
16 |
64 |
100s |
307.02 |
256 |
20 |
16 |
64 |
100s |
146.20 |
256 |
10 |
16 |
64 |
100s |
113.40 |
256 |
10 带日志记录 |
16 |
64 |
100s |
436.12 |
256 |
0.1 带日志记录 |
16 |
64 |
100s |
106.75 |
在单个节点上对多个Tune结果进行基准测试#
在此设置中,除了明确指出时,日志记录器(CSV、JSON 和 TensorBoardX)被禁用。
在这个实验中,我们在单个节点上运行96个并发试验。然后我们调整试验的报告频率(每秒的结果数量)以找到吞吐量限制。与集群实验设置相比,我们报告的频率更高,因为我们运行的总试验数量较少。
在单个节点上,吞吐量似乎略高。启用日志记录时,每秒处理1000个结果在开销方面似乎是可以接受的,尽管您可能仍应设定一个较低的目标值。
# 试验次数 |
结果 / 每秒 / 试验 |
# 节点 |
# 每节点CPU |
试用期长度。 |
当前 |
---|---|---|---|---|---|
96 |
500 |
|
96 |
100s |
959.32 |
96 |
100 |
|
96 |
100s |
219.48 |
96 |
80 |
|
96 |
100s |
197.15 |
96 |
50 |
|
96 |
100s |
110.55 |
96 |
50 带日志记录 |
|
96 |
100s |
702.64 |
96 |
10 |
|
96 |
100s |
103.51 |
96 |
10 带日志记录 |
|
96 |
100s |
168.94 |
Ray Tune 中的网络开销#
在分布式设置上运行 Ray Tune 会导致网络通信开销。这主要是由于试验同步,其中结果和检查点会定期同步并通过网络发送。默认情况下,这是通过 SSH 完成的,每次连接初始化可能需要 1 到 2 秒。由于这是一个按试验进行的阻塞操作,因此运行许多并发试验很快就会因这种同步而成为瓶颈。
在这个实验中,我们在一个集群上运行了多次试验。每个试验都在一个单独的节点上运行。我们改变了并发试验(和节点)的数量,以观察网络通信对总运行时间的影响。
主要见解:在分布式设置中运行许多并发试验时,考虑使用 云端检查点 进行检查点同步。另一种选择是使用共享存储并禁用同步到驱动程序。最佳实践在 此处描述了 Kubernetes 设置,但适用于任何类型的设置。
在下表中,我们展示了关于网络通信开销的更详细结果。
# 试验次数 |
结果 / 每秒 / 试验 |
# 节点 |
# 每节点CPU |
试用期长度 |
当前 |
---|---|---|---|---|---|
200 |
|
200 |
2 |
300秒 |
2280.82 |
100 |
|
100 |
2 |
300秒 |
1470 |
100 |
0.01 |
100 |
2 |
300秒 |
473.41 |
50 |
|
50 |
2 |
300秒 |
474.30 |
50 |
0.1 |
50 |
2 |
300秒 |
441.54 |
10 |
|
10 |
2 |
300秒 |
334.37 |