在多GPU机器上使用pytorch进行并行超参数优化

我可以使用多GPU机器,并且正在运行网格搜索循环以优化参数。我想知道是否可以同时在多个gpu上分布循环的多个迭代,如果可以的话,我该怎么做(我是什么机制?线程化?如果循环异步执行,如何收集结果?等等。 )

谢谢。

iCMS 回答:在多GPU机器上使用pytorch进行并行超参数优化

我建议使用Optuna来处理超参数搜索,通常它的性能比网格搜索更好(尽管您仍然可以将其与网格采样一起使用)。我修改了Optuna distributed example,使其每个进程使用一个GPU。

  1. 创建一个训练脚本,例如:
# optimize.py

import sys
import optuna
import your_model


DEVICE = 'cuda:' + sys.argv[1]

def objective(trial):
    hidden_size = trial.suggest_int('hidden_size',8,64,log=True)
    # define other hyperparameters

    return your_model.score(hidden_size=hidden_size,device=DEVICE)


if __name__ == '__main__':
    study = optuna.load_study(study_name='distributed-example',storage='sqlite:///example.db')
    study.optimize(objective,n_trials=100)
  1. 在终端机中:
pip install optuna
optuna create-study --study-name "distributed-example" --storage "sqlite:///example.db"
  1. 然后针对每个GPU设备:
python optimize.py 0
python optimize.py 1
...
  1. 最后,可以轻松找到最佳结果:
import optuna

study = optuna.create_study(study_name='distributed-example',storage='sqlite:///example.db',load_if_exists=True)

print(study.best_params)
print(study.best_value)

甚至是visualized

本文链接:https://www.f2er.com/2074143.html

大家都在问