Используется ли луч `num_cpus` для фактического распределения процессоров?

При использовании фреймворка ray можно выбрать количество ЦП, необходимое для этой задачи, как описано здесь.

Ex:

@ray.remote(num_cpus=4)
def f():
    return 1

Однако неясно, будет ли фактическое распределение ЦП:

  1. Функция будет буквально выделена 4CPU (используя, например, сходство CPU, как в команде taskset linux, или аргумент cpuset docker)
  2. Или планировщик будет использовать этот num_cpus только внутри, как метаданные планирования. Например, чтобы решить, может ли он начать новую задачу, требующую 16 процессоров, где осталось только 10. Задача по-прежнему будет иметь доступ ко всем процессорам и может «использовать» больше процессорного времени, чем запрошено в num_cpus.

Вариант 2 кажется более вероятным, но в документации об этом не сказано. Кроме того, кажется, что для графических процессоров существует своего рода вариант 1, который делает неясными намерения планировщика:

Ray автоматически установит переменную среды CUDA_VISIBLE_DEVICES для этого процесса.

Процесс настроен на использование определенного графического процессора (но может обойти его, сбросив CUDA_VISIBLE_DEVICES)

Итак, как используется num_cpus в ray?


person Phylliade    schedule 10.07.2019    source источник


Ответы (1)


Хороший вопрос — для процессоров выделение используется только как метаданные (вариант 2). Для графических процессоров выделение используется как метаданные, а также обеспечивает изоляцию. Документы будут обновлены очень скоро (и впоследствии обновят ответ).

person richliaw    schedule 12.07.2019