Tensorflow 在Cloud ML中使用分布式学习时自定义集群配置的基本规则
我正在调查中使用自定义比例层 现在,我不知道如何精确地设计我的自定义层!我基本上使用的是CIFAR类型的模型,我决定使用: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'] =
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%,这是显著的,但不是爆炸性的
- 对于我的具体问题,基本上,对于我的问题来说,大型和昂贵的单元是多余的。我能得到的最佳价值是使用“复杂模型”
- 该模型看起来像cifar示例,但包含大量训练数据。我使用平均值、衰减梯度以及辍学
- “配置”命名(希望)是明确的:基本上是
。对于参数服务器,我总是使用“大_模型”'M{masterCost}PS{nParameterServer}x{parameterServerCost}W{nWorker}x{workerCost}
- “速度”是“全局步数”
- “成本”是总毫升单位
- 我把“效率”称为“全局步长/秒/ML单位”
- 我做了几个小实验,可能值得分享。我的设置不是100%干净,但我认为粗略的想法是正确的
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%,这是显著的,但不是爆炸性的
- 对于我的具体问题,基本上,对于我的问题来说,大型和昂贵的单元是多余的。我能得到的最佳价值是使用“复杂模型”
CIFAR
这样的小型计算机,实际上你可以使用一台大型计算机,我也在寻找速度:-)但我会尝试各种方法。一般来说,几台大机器比许多小机器好。原因是,所有现有的实用NN方法都使用数据并行(参数服务器)跨机器并行,这显示出递减的回报。例如,对于GoogleNet来说,50台机器比10台好一点,而使用100台机器并没有带来任何改进。模型并行性(即CIFAR中不同GPU上的不同塔)没有这种递减特性,但对通信延迟很敏感经验法则是假设您的工作人员的网络容量为1Gbps。计算/基准测试每个worker进行迭代的速度,从中计算每秒发送的数据量,并确定给定数量的worker需要多少个参数服务器碎片谢谢您的回答。我有一个小问题:你宁愿使用少量的大型计算机,还是大量的小型计算机?我想这取决于成本,对于像CIFAR
这样的小型计算机,实际上你可以使用一台大型计算机,我也在寻找速度:-)但我会尝试各种方法。一般来说,几台大机器比许多小机器好。原因是,所有现有的实用NN方法都使用数据并行(参数服务器)跨机器并行,这显示出递减的回报。例如,对于GoogleNet来说,50台机器比10台好一点,而使用100台机器并没有带来任何改进。模型并行性(即CIFAR中不同GPU上的不同塔)没有这种递减特性,但对通信延迟很敏感