我正在查看这里的文档: https://github.com/Microsoft/CNTK/wiki/Multiple-GPUs-and-machines
根据文字:"数据并行SGD可以使用或不使用1bit-SGD。"
然而,在本文档中,只有使用1位SGD的数据并行相关部分:"数据并行训练使用1位SGD"使用以下代码:
distributed_learner = distributed.data_parallel_distributed_learner(
learner = learner,
num_quantization_bits = 1,
distributed_after = distributed_after) # warm start: don't use 1-bit SGD for first epoch
如果我选择不使用1位SGD(跳过上面调用中的相关参数),我认为我仍然应该获得data_parallel_distributed_learner的并行化优势。你能确认是这种情况吗?
谢谢
答案 0 :(得分:1)
您可以将num_quantization_bits
设置为32,它将是直接同步并行学习。
您应该收到警告,根据您的网络,将num_quantization_bits
设置为32可能会降低您的培训速度。
如果你的CNTK版本支持NCCL,那么使用32位不会减慢太多。 1位SGD本身具有您应该注意的计算成本(用于量化)。