0

我正在调查Cloud Machine Learning API中自定义缩放层的使用。

现在,我不知道如何设计我的自定义层!我基本上使用 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'))

但我几乎找不到任何关于如何正确确定集群尺寸的信息。那里有任何“经验法则”吗?还是我们必须尝试和测试?

提前谢谢了!

4

1 回答 1

2

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

  • 该模型看起来像 cifar 示例,但包含大量训练数据。我使用平均、衰减梯度和 dropout。
  • “配置”命名(希望)是明确的:基本上'M{masterCost}_PS{nParameterServer}x{parameterServerCost}_W{nWorker}x{workerCost}'. 对于参数服务器,我总是使用“large_model”。
  • “速度”是 'global_step/s'
  • “成本”是总 ML 单位
  • 我将“效率”称为“global_step/second/ML unit”的数量

以下是部分结果:

          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% 的效率提升,它是显着的,但不是爆炸性的。

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

于 2016-10-12T20:41:12.760 回答