【发布时间】:2020-10-13 13:10:47
【问题描述】:
我可以访问多 GPU 机器,并且我正在运行网格搜索循环以进行参数优化。我想知道我是否可以同时在多个 gpu 上分发循环的多个迭代,如果可以,我该怎么做(我的机制是什么?线程?如果循环异步执行,如何收集结果?等等。 )
谢谢。
【问题讨论】:
标签: parallel-processing pytorch hyperparameters multi-gpu
我可以访问多 GPU 机器,并且我正在运行网格搜索循环以进行参数优化。我想知道我是否可以同时在多个 gpu 上分发循环的多个迭代,如果可以,我该怎么做(我的机制是什么?线程?如果循环异步执行,如何收集结果?等等。 )
谢谢。
【问题讨论】:
标签: parallel-processing pytorch hyperparameters multi-gpu
我建议使用Optuna 来处理超参数搜索,这通常比网格搜索执行得更好(尽管您仍然可以将它与网格采样一起使用)。我已将 Optuna distributed example 修改为每个进程使用一个 GPU。
# 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)
pip install optuna
optuna create-study --study-name "distributed-example" --storage "sqlite:///example.db"
python optimize.py 0
python optimize.py 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。
【讨论】: