Ray Tune 的可扩展性和开销基准测试#

我们进行了一系列微基准测试,评估了 Ray Tune 的可扩展性并分析了我们观察到的性能开销。这些基准测试的结果反映在文档中,例如,当我们提出 如何消除性能瓶颈的建议 时。

本页概述了我们进行的一系列实验。对于每个实验,其目标都是检查实验的总运行时间,并在观察到的开销与最小理论时间相比过高时(例如,超过20%的开销)解决相关问题。

在一些实验中,我们调整了默认设置以实现最大吞吐量,例如通过禁用试验同步或结果日志记录。如果是这种情况,将在相应的基准描述中说明。

Ray Tune 可扩展性基准概述#

变量

# 试验次数

每秒结果/试验

# 节点数

# 每节点CPU

试验时长 (秒)

观察到的运行时间

试验簿记/调度开销

10,000

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

16

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

715.27
(625 最低)

结果吞吐量(多次试验)

1,000

0.1

16

64

100

168.18

结果吞吐量(多结果)

96

10

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100

168.94

网络通信开销

200

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

200

2

300

2280.82

长时间运行,3.75 GB 检查点

16

结果: 1/60
检查点: 1/900

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

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

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

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

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

959.32

96

100

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

219.48

96

80

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

197.15

96

50

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

110.55

96

50 带日志记录

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

702.64

96

10

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

103.51

96

10 带日志记录

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

96

100s

168.94

Ray Tune 中的网络开销#

在分布式设置上运行 Ray Tune 会导致网络通信开销。这主要是由于试验同步,其中结果和检查点会定期同步并通过网络发送。默认情况下,这是通过 SSH 完成的,每次连接初始化可能需要 1 到 2 秒。由于这是一个按试验进行的阻塞操作,因此运行许多并发试验很快就会因这种同步而成为瓶颈。

在这个实验中,我们在一个集群上运行了多次试验。每个试验都在一个单独的节点上运行。我们改变了并发试验(和节点)的数量,以观察网络通信对总运行时间的影响。

主要见解:在分布式设置中运行许多并发试验时,考虑使用 云端检查点 进行检查点同步。另一种选择是使用共享存储并禁用同步到驱动程序。最佳实践在 此处描述了 Kubernetes 设置,但适用于任何类型的设置。

在下表中,我们展示了关于网络通信开销的更详细结果。

# 试验次数

结果 / 每秒 / 试验

# 节点

# 每节点CPU

试用期长度

当前

200

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

200

2

300秒

2280.82

100

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

100

2

300秒

1470

100

0.01

100

2

300秒

473.41

50

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

50

2

300秒

474.30

50

0.1

50

2

300秒

441.54

10

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

10

2

300秒

334.37