При использовании фреймворка ray можно выбрать количество ЦП, необходимое для этой задачи, как описано здесь.
Ex:
@ray.remote(num_cpus=4)
def f():
return 1
Однако неясно, будет ли фактическое распределение ЦП:
- Функция будет буквально выделена
4
CPU (используя, например, сходство CPU, как в командеtaskset
linux, или аргументcpuset
docker) - Или планировщик будет использовать этот
num_cpus
только внутри, как метаданные планирования. Например, чтобы решить, может ли он начать новую задачу, требующую 16 процессоров, где осталось только 10. Задача по-прежнему будет иметь доступ ко всем процессорам и может «использовать» больше процессорного времени, чем запрошено вnum_cpus
.
Вариант 2 кажется более вероятным, но в документации об этом не сказано. Кроме того, кажется, что для графических процессоров существует своего рода вариант 1, который делает неясными намерения планировщика:
Ray автоматически установит переменную среды CUDA_VISIBLE_DEVICES для этого процесса.
Процесс настроен на использование определенного графического процессора (но может обойти его, сбросив CUDA_VISIBLE_DEVICES
)
Итак, как используется num_cpus
в ray?