【问题标题】:Parallel hyperparameter optimization with pytorch on a multi-gpu machine在多 GPU 机器上使用 pytorch 进行并行超参数优化
【发布时间】:2020-10-13 13:10:47
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: parallel-processing pytorch hyperparameters multi-gpu


    【解决方案1】:

    我建议使用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

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 2017-10-30
      相关资源
      最近更新 更多