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



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

谢谢。

我建议使用 Optuna 来处理超参数搜索,这通常应该比网格搜索表现得更好(不过您仍然可以将其与网格采样一起使用(。我已经修改了 Optuna 分布式示例,为每个进程使用一个 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)

甚至可视化。

最新更新