Как заставить Tune запускать параллельные испытания на нескольких графических процессорах?

Я надеюсь заставить Tune запускать каждую пробу поиска по сетке параллельно на нескольких графических процессорах. У меня есть машина с 4 GPU и 24 VCPU. Когда я запускаю следующий код, я вижу, что nvidia-smi использует 3 графических процессора, но он запускает только одну пробную версию.

tune.run("PPO",   
            config={
                "env": "PongNoFrameskip-v4",
                "lr": tune.grid_search([0.01, 0.001, 0.0001]),
                "num_gpus": 3,
                "num_workers": 3
            }
        )

По пробегу я вижу, что Tune запускает только одну пробную версию.

== Status ==
Using FIFO scheduling algorithm.
Resources requested: 4/24 CPUs, 3/4 GPUs, 0.0/190.43 GiB heap, 0.0/12.84 GiB objects
Memory usage on this node: 5.4/220.4 GiB
Result logdir: /home//ray_results/PPO
Number of trials: 3 ({'RUNNING': 1, 'PENDING': 2})
PENDING trials:
 - PPO_PongNoFrameskip-v4_1_lr=0.001:   PENDING
 - PPO_PongNoFrameskip-v4_2_lr=0.0001:  PENDING
RUNNING trials:
 - PPO_PongNoFrameskip-v4_0_lr=0.01:    RUNNING

Я попытался установить resources_per_trial с "gpu":1, но Рэй выдал ошибку, чтобы очистить resources_per_trial.

ValueError: Resources for <class 'ray.rllib.agents.trainer_template.PPO'> have been automatically set to Resources(cpu=1, gpu=3, memory=0, object_store_memory=0, extra_cpu=3, extra_gpu=0, extra_memory=0, extra_object_store_memory=0, custom_resources={}, extra_custom_resources={}) by its `default_resource_request()` method. Please clear the `resources_per_trial` option.

Как сообщить Tune, что все три испытания должны выполняться параллельно?

Спасибо.


ray
person Keiji Kanazawa    schedule 21.11.2019    source источник
comment
Вы решили проблему?   -  person Dale    schedule 24.11.2019


Ответы (2)


Пытаться

tune.run("PPO",   
        config={
            "env": "PongNoFrameskip-v4",
            "lr": tune.grid_search([0.01, 0.001, 0.0001]),
            "num_gpus": 1,
            "num_workers": 3
        }
    )
person richliaw    schedule 23.11.2019
comment
Спасибо - просто подтверждаю, что это сработало. У меня есть один вопрос. Я обновил пример, чтобы у меня было 8 рабочих. Теперь каждое испытание говорит о 9 процессорах, 1 графическом процессоре. Считается ли голова как 1 процессор в каждом испытании? - person Keiji Kanazawa; 26.11.2019
comment
Думаю, да. - person richliaw; 27.11.2019
comment
@KeijiKanazawa Вы можете отметить ответ, как и ожидалось, поскольку это сработало для вас. - person Vishal Rangras; 19.05.2021

Объяснение к ответу ричилиау:

Обратите внимание, что важный бит в resources_per_trial - на пробу. Если, например, у вас есть 4 графических процессора, и ваш поиск по сетке содержит 4 комбинации, вы должны установить 1 графический процессор на пробу, если вы хотите, чтобы 4 из них работали параллельно.

Если вы установите значение 4, для каждой пробной версии потребуется 4 графических процессора, т.е. одновременно может работать только 1 пробная версия.

Это объясняется в документации по настройке лучей со следующими пример кода:

# If you have 8 GPUs, this will run 8 trials at once.
tune.run(trainable, num_samples=10, resources_per_trial={"gpu": 1})

# If you have 4 CPUs on your machine and 1 GPU, this will run 1 trial at a time.
tune.run(trainable, num_samples=10, resources_per_trial={"cpu": 2, "gpu": 1})
person fr_andres    schedule 28.05.2021