分布式CPU训练优秀实践¶
提高CPU分布式训练的训练速度,主要要从两个方面来考虑: 1)提高训练速度,主要是提高CPU的使用率;2)提高通信速度,主要是减少通信传输的数据量。
提高CPU的使用率¶
提高CPU使用率主要依赖 ParallelExecutor
,可以充分利用多个CPU的计算能力来加速计算。
API详细使用方法参考 ParallelExecutor ,简单实例用法:
# 配置执行策略,主要是设置线程数
exec_strategy = fluid.ExecutionStrategy()
exec_strategy.num_threads = 8
# 配置构图策略,对于CPU训练而言,应该使用Reduce模式进行训练
build_strategy = fluid.BuildStrategy()
if int(os.getenv("CPU_NUM")) > 1:
build_strategy.reduce_strategy = fluid.BuildStrategy.ReduceStrategy.Reduce
pe = fluid.ParallelExecutor(
use_cuda=False,
loss_name=avg_cost.name,
main_program=main_program,
build_strategy=build_strategy,
exec_strategy=exec_strategy)
以上参数中:
num_threads
: 模型训练使用的线程数,最好和训练所在机器的物理CPU核数接近reduce_strategy
: 对于CPU训练而言,应该选择 fluid.BuildStrategy.ReduceStrategy.Reduce
通用环境变量配置:
CPU_NUM
:模型副本replica的个数,最好和num_threads一致