Tensorflow 在Cloud ML中使用分布式学习时自定义集群配置的基本规则

Tensorflow 在Cloud ML中使用分布式学习时自定义集群配置的基本规则,tensorflow,google-cloud-ml,Tensorflow,Google Cloud Ml,我正在调查中使用自定义比例层 现在,我不知道如何精确地设计我的自定义层!我基本上使用的是CIFAR类型的模型,我决定使用: if args.distributed: config['trainingInput']['scaleTier'] = 'CUSTOM' config['trainingInput']['masterType'] = 'complex_model_m' config['trainingInput']['workerType'] =

我正在调查中使用自定义比例层

现在,我不知道如何精确地设计我的自定义层!我基本上使用的是CIFAR类型的模型,我决定使用:

   if args.distributed:
      config['trainingInput']['scaleTier']  = 'CUSTOM'
      config['trainingInput']['masterType'] = 'complex_model_m'
      config['trainingInput']['workerType'] = 'complex_model_m'
      config['trainingInput']['parameterServerType'] = 'large_model'
      config['trainingInput']['workerCount'] = 12
      config['trainingInput']['parameterServerCount'] = 4

    yaml.dump(config, file('custom_config.yaml', 'w'))
但是,我几乎找不到任何关于如何正确标注集群的信息。有什么“经验法则”吗?还是我们必须尝试和测试


非常感谢

我做了几个小实验,可能值得分享。我的设置不是100%干净,但我认为粗略的想法是正确的

  • 该模型看起来像cifar示例,但包含大量训练数据。我使用平均值、衰减梯度以及辍学
  • “配置”命名(希望)是明确的:基本上是
    'M{masterCost}PS{nParameterServer}x{parameterServerCost}W{nWorker}x{workerCost}
    。对于参数服务器,我总是使用“大_模型”
  • “速度”是“全局步数”
  • “成本”是总毫升单位
  • 我把“效率”称为“全局步长/秒/ML单位”
以下是部分结果:

          config  cost  speed  efficiency
0             M1     1    0.5        0.50
1  M6_PS1x3_W2x6    21   10.0        0.48
2  M6_PS2x3_W2x6    24   10.0        0.42
3  M3_PS1x3_W3x3    15   11.0        0.73
4  M3_PS1x3_W5x3    21   15.9        0.76
5  M3_PS2x3_W4x3    21   15.1        0.72
6  M2_PS1x3_W5x2    15    7.7        0.51
我知道我应该做更多的实验,但我没有时间做这个。 如果我有时间,我会挖得更深

主要结论如下:

  • 在少量迭代中尝试一些设置可能是值得的,只是为了在进行超参数调优之前决定使用哪个配置

  • 好的是,变化非常有限。从0.5到0.75,效率提高了50%,这是显著的,但不是爆炸性的

  • 对于我的具体问题,基本上,对于我的问题来说,大型和昂贵的单元是多余的。我能得到的最佳价值是使用“复杂模型”


    • 我做了几个小实验,可能值得分享。我的设置不是100%干净,但我认为粗略的想法是正确的

      • 该模型看起来像cifar示例,但包含大量训练数据。我使用平均值、衰减梯度以及辍学
      • “配置”命名(希望)是明确的:基本上是
        'M{masterCost}PS{nParameterServer}x{parameterServerCost}W{nWorker}x{workerCost}
        。对于参数服务器,我总是使用“大_模型”
      • “速度”是“全局步数”
      • “成本”是总毫升单位
      • 我把“效率”称为“全局步长/秒/ML单位”
      以下是部分结果:

                config  cost  speed  efficiency
      0             M1     1    0.5        0.50
      1  M6_PS1x3_W2x6    21   10.0        0.48
      2  M6_PS2x3_W2x6    24   10.0        0.42
      3  M3_PS1x3_W3x3    15   11.0        0.73
      4  M3_PS1x3_W5x3    21   15.9        0.76
      5  M3_PS2x3_W4x3    21   15.1        0.72
      6  M2_PS1x3_W5x2    15    7.7        0.51
      
      我知道我应该做更多的实验,但我没有时间做这个。 如果我有时间,我会挖得更深

      主要结论如下:

      • 在少量迭代中尝试一些设置可能是值得的,只是为了在进行超参数调优之前决定使用哪个配置

      • 好的是,变化非常有限。从0.5到0.75,效率提高了50%,这是显著的,但不是爆炸性的

      • 对于我的具体问题,基本上,对于我的问题来说,大型和昂贵的单元是多余的。我能得到的最佳价值是使用“复杂模型”


      一条经验法则是假设您的员工的网络容量为1Gbps。计算/基准测试每个worker进行迭代的速度,从中计算每秒发送的数据量,并确定给定数量的worker需要多少个参数服务器碎片谢谢您的回答。我有一个小问题:你宁愿使用少量的大型计算机,还是大量的小型计算机?我想这取决于成本,对于像
      CIFAR
      这样的小型计算机,实际上你可以使用一台大型计算机,我也在寻找速度:-)但我会尝试各种方法。一般来说,几台大机器比许多小机器好。原因是,所有现有的实用NN方法都使用数据并行(参数服务器)跨机器并行,这显示出递减的回报。例如,对于GoogleNet来说,50台机器比10台好一点,而使用100台机器并没有带来任何改进。模型并行性(即CIFAR中不同GPU上的不同塔)没有这种递减特性,但对通信延迟很敏感经验法则是假设您的工作人员的网络容量为1Gbps。计算/基准测试每个worker进行迭代的速度,从中计算每秒发送的数据量,并确定给定数量的worker需要多少个参数服务器碎片谢谢您的回答。我有一个小问题:你宁愿使用少量的大型计算机,还是大量的小型计算机?我想这取决于成本,对于像
      CIFAR
      这样的小型计算机,实际上你可以使用一台大型计算机,我也在寻找速度:-)但我会尝试各种方法。一般来说,几台大机器比许多小机器好。原因是,所有现有的实用NN方法都使用数据并行(参数服务器)跨机器并行,这显示出递减的回报。例如,对于GoogleNet来说,50台机器比10台好一点,而使用100台机器并没有带来任何改进。模型并行性(即CIFAR中不同GPU上的不同塔)没有这种递减特性,但对通信延迟很敏感