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