【问题标题】:Running multiple neural networks in parallel on cpu在 cpu 上并行运行多个神经网络
【发布时间】:2022-01-02 06:11:59
【问题描述】:

我正在尝试在 pytorch 中运行相同神经网络训练的多个实例,但使用不同的超参数。例如不同的学习率、优化器等。 我尝试创建一个 multiprocessing.Pool,但出现错误:

Runtime error: Unable to handle autograd's threading in combination with fork-based multiprocessing. See https://github.com/pytorch/pytorch/wiki/Autograd-and-Fork

下面是示例代码,让您了解我在做什么:

def run_one_instance(idx=0):
    lr = choose_random([0.001, 0.01, 0.1, 1])
    optimizer = choose_random(["SGD", "Adam"])
    num_hidden_layers = choose_random([2,3,4,5])
    model = create_model(num_hidden_layers, lr, optimizer)
    model.train()
    return model.evaluate()

def run_multiple_instances(num_instances=40):
    pool_obj = multiprocessing.Pool()
    result = pool_obj.map(run_one_instance, range(0, num_instances))
    return result

那么我做错了什么吗?有没有其他方法可以并行运行多个神经网络(在 cpu 或 gpu 上)?

【问题讨论】:

    标签: python parallel-processing pytorch multiprocessing


    【解决方案1】:

    作为the link in the error message explains,使用Python 的多处理的spawn 上下文而不是fork 上下文。像这样:

    import multiprocessing as mp
    
    
    ctx = mp.get_context('spawn')
    
    
    def run_one_instance(idx=0):
        lr = choose_random([0.001, 0.01, 0.1, 1])
        optimizer = choose_random(["SGD", "Adam"])
        num_hidden_layers = choose_random([2,3,4,5])
        model = create_model(num_hidden_layers, lr, optimizer)
        model.train()
        return model.evaluate()
    
    def run_multiple_instances(num_instances=40):
        pool_obj = ctx.Pool()
        result = pool_obj.map(run_one_instance, range(0, num_instances))
        return result
    

    ctx 对象与多处理模块具有相同的 API。有关多处理上下文的更多信息,请参阅 the Python multiprocessing docs(例如 spawnfork)。

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 2020-06-06
      • 2018-03-26
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 2018-06-18
      • 2018-05-24
      • 1970-01-01
      相关资源
      最近更新 更多