默认情况下,Bazel 以并行方式运行测试以加快速度。但是,由于 GPU 内存限制,我有一个资源(GPU)无法处理并行作业。有没有办法强制 Bazel 以串行方式(即非并行方式)运行测试?
谢谢。
--jobs 1
会将 Bazel 运行的并行作业数量限制为 1。
您还可以修改测试目标并添加
tags = ["exclusive"]
以防止特定测试并行运行(请参阅https://bazel.build/reference/test-encyclopedia)。
--local_test_jobs=1
在本地一次仅运行一个测试作业。
同时运行的本地测试作业的最大数量。接受一个整数或一个关键字(“auto”、“HOST_CPUS”、“HOST_RAM”),可选地后跟一个操作([-|]),例如。 “自动”,“HOST_CPUS.5”。 0 表示本地资源将限制同时运行的本地测试作业的数量。将其设置为大于 --jobs 的值是无效的
tags = ["exclusive"]
在缓存方面还需要考虑 其他并发症。--jobs
将序列化整个构建过程,而不仅仅是测试,因此它不太理想。Bazel 将遵守两种资源的限制:RAM 和 CPU。您可以劫持一个(可能是 RAM)来代表 GPU,因为它们可用于运行并且是测试所需的。 (由于硬件资源有限,我没有这样做,因为感觉不太优雅,但我想不出它不应该工作的原因。)
当设置 --local_extra_resources=gpu=1 时,包含该更改的版本应该支持额外的资源标签,例如“resources:GPU:1”。这应该使 GPU 测试能够受到有限数量的 GPU 的约束,并且使它们能够非独占地运行,并且不限制 --jobs 或“test_jobs”的总数