Whale支持配置通信参数,以开启多种优化功能。本文介绍配置通信参数的方法及Whale支持的通信参数。

配置方法

Whale通信支持多种优化,且支持通过环境变量配置参数。您可以根据需求,在训练代码或执行脚本中配置参数,从而开启优化功能:
  • 在训练代码中配置
    可以通过os.environ配置环境变量。例如,您可以使用如下命令,开启Hierarchical AllReduce通信(该通信参数为WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE,详情请参见下面的通信参数列表部分)。
    import os
    os.environ["WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE"]="True"
    如果使用PAI-Studio提交任务,在训练代码中未配置通信参数,则可以在训练时通过PAI-TensorFlow超参传入(详情请参见PAI-TF超参支持),再使用上述代码将参数赋值给环境变量。
  • 在执行脚本中配置
    如果在PAI-DLC环境或手动开启训练,有Launch脚本,则可以在脚本中,配置环境变量:
    • 在执行脚本最开始,配置环境变量
      export WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE=True
      ...
      python train.py
      其中train.py表示训练文件。
    • 在加载执行命令的语句前,配置环境变量。
      WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE=True python train.py
      其中train.py表示训练文件。

通信参数列表

Whale通信支持的参数如下表所示。
参数 描述 类型 默认值 备注
WHALE_COMMUNICATION_SPARSE_AS_DENSE 梯度同步时,是否将Sparse梯度转成Dense进行通信。取值范围如下:
  • False:未开启该功能,Sparse梯度通过AllGather进行通信。
  • True:将Sparse梯度转成Dense进行通信。
BOOL False 当Sparse梯度的Dense Shape不大,即转成Dense梯度后,大小不会放大很多,则可以开启该功能。例如,BertLarge模型的Sparse梯度,转成Dense后不大,可以开启该功能。
WHALE_COMMUNICATION_NUM_SPLITS 梯度通信时,梯度融合的分组数。 INT 5 Whale会自动调整分组数,通常无需手动配置。
WHALE_COMMUNICATION_NUM_COMMUNICATORS 梯度通信时,进行并行通信的Communicator数量。取值为None,表示创建与梯度分组数相同数量的Communicator进行并行通信。 INT None Communicator数量越多,则并发越多,同时也会越消耗显存。如果模型显存紧张(例如出现Allocated Memory告警),可以配置该参数为2或1。
WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE 对于Dense梯度,是否采用Hierarchical AllReduce通信。取值范围如下:
  • False:未开启该功能。
  • True:开启该功能,即采用Hierarchical AllReduce通信。
BOOL False 如果服务器内或服务器间带宽差距大(例如服务器内有NVLink,服务器间25 GB网络),且Dense梯度很大,则可以开启该功能,进行通信加速。
WHALE_COMMUNICATION_HIERARCHICAL_ALL_GATHER 对于Sparse梯度,是否采用Hierarchical AllGather通信。取值范围如下:
  • False:未开启该功能。
  • True:开启该功能,即采用Hierarchical AllGather通信。
BOOL False 如果服务器内或服务器间带宽差距大,且Sparse梯度很大,则可以开启该功能,进行通信加速。
WHALE_COMMUNICATION_DENSE_FP16 对于Dense梯度,是否采用半精度通信。取值范围如下:
  • False:未开启该功能。
  • True:开启该功能,即采用半精度通信。
BOOL False 开启该功能,会减少一半的Dense梯度通信,但是会影响收敛,可能需要调参。
WHALE_COMMUNICATION_SPARSE_FP16 对于Sparse梯度,是否采用半精度通信。取值范围如下:
  • False:未开启该功能。
  • True:开启该功能,即采用半精度通信。
BOOL False 开启该功能,会减少一半的Sparse梯度通信,但是会影响收敛,可能需要调参。
WHALE_COMMUNICATION_FP16_SCALE 采用半精度通信时,为防止梯度消失,可以配置梯度Scale系数。取值为None,表示未设置Scale系数。 FLOAT None 采样半精度通信时,可以结合该参数进行调参。