ray `num_cpus` 用于实际分配 CPU 吗?
Is ray `num_cpus` used to actually allocate CPUs?
使用 ray 框架时,可以选择 select 此任务所需的 CPU 数量,如 here 所述。
例如:
@ray.remote(num_cpus=4)
def f():
return 1
然而,尚不清楚是否会有实际的 CPU 分配:
- 该函数将随机分配
4
CPUs(例如使用 CPU affinity,就像在 taskset
linux 命令中一样,或者cpuset
docker 参数)
- 或者调度程序将仅在内部使用此
num_cpus
作为调度元数据。让 ex 决定他是否可以开始一项需要 16 个 cpu 的新任务,而这里只剩下 10 个。该任务仍然可以访问所有 CPU,并且可以 'use' 比 num_cpus
中请求的时间多 CPU
选项 2 似乎更有可能,但这在文档中没有说明。
此外,GPU 似乎有一种选项 1,这使得调度程序的意图不清楚:
Ray will automatically set the environment variable
CUDA_VISIBLE_DEVICES for that process.
该进程被配置为使用某个 GPU(但可以绕过它,通过重置 CUDA_VISIBLE_DEVICES
)
那么,num_cpus
在ray中是如何使用的呢?
好问题 - 对于 CPU,分配仅用作元数据(选项 2)。对于 GPU,分配既用作元数据又提供隔离。文档会很快更新(之后会更新答案)。
使用 ray 框架时,可以选择 select 此任务所需的 CPU 数量,如 here 所述。
例如:
@ray.remote(num_cpus=4)
def f():
return 1
然而,尚不清楚是否会有实际的 CPU 分配:
- 该函数将随机分配
4
CPUs(例如使用 CPU affinity,就像在taskset
linux 命令中一样,或者cpuset
docker 参数) - 或者调度程序将仅在内部使用此
num_cpus
作为调度元数据。让 ex 决定他是否可以开始一项需要 16 个 cpu 的新任务,而这里只剩下 10 个。该任务仍然可以访问所有 CPU,并且可以 'use' 比num_cpus
中请求的时间多 CPU
选项 2 似乎更有可能,但这在文档中没有说明。 此外,GPU 似乎有一种选项 1,这使得调度程序的意图不清楚:
Ray will automatically set the environment variable CUDA_VISIBLE_DEVICES for that process.
该进程被配置为使用某个 GPU(但可以绕过它,通过重置 CUDA_VISIBLE_DEVICES
)
那么,num_cpus
在ray中是如何使用的呢?
好问题 - 对于 CPU,分配仅用作元数据(选项 2)。对于 GPU,分配既用作元数据又提供隔离。文档会很快更新(之后会更新答案)。