我在这里查看文档:
https://github.com/Microsoft/CNTK/wiki/Multiple-GPUs-and-machines
根据文本:“可以使用带有或不带有1bit-SGD的数据并行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的并行化优势。您能确认是这种情况吗?
谢谢
最佳答案
您可以将num_quantization_bits
设置为32,这将是直接同步并行学习。
请注意,根据您的网络,将num_quantization_bits
设置为32可能会减慢您的训练速度。
如果您的CNTK版本支持NCCL,那么使用32位不会太慢。 1位SGD本身具有计算成本(用于量化),您应该注意。
关于python - CNTK:不使用1位SGD的Python中的数据并行训练,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41493199/