Whale支持配置通信参数,以开启多种优化功能。本文介绍配置通信参数的方法及Whale支持的通信参数。
配置方法
Whale通信支持多种优化,且支持通过环境变量配置参数。您可以根据需求,在训练代码或执行脚本中配置参数,从而开启优化功能:
- 在训练代码中配置
可以通过
os.environ
配置环境变量。例如,您可以使用如下命令,开启Hierarchical AllReduce通信(该通信参数为WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE,详情请参见下面的通信参数列表部分)。
如果使用PAI-Studio提交任务,在训练代码中未配置通信参数,则可以在训练时通过PAI-TensorFlow超参传入(详情请参见PAI-TF超参支持),再使用上述代码将参数赋值给环境变量。import os os.environ["WHALE_COMMUNICATION_HIERARCHICAL_ALL_REDUCE"]="True"
- 在执行脚本中配置
如果在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进行通信。取值范围如下:
|
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通信。取值范围如下:
|
BOOL | False | 如果服务器内或服务器间带宽差距大(例如服务器内有NVLink,服务器间25 GB网络),且Dense梯度很大,则可以开启该功能,进行通信加速。 |
WHALE_COMMUNICATION_HIERARCHICAL_ALL_GATHER | 对于Sparse梯度,是否采用Hierarchical AllGather通信。取值范围如下:
|
BOOL | False | 如果服务器内或服务器间带宽差距大,且Sparse梯度很大,则可以开启该功能,进行通信加速。 |
WHALE_COMMUNICATION_DENSE_FP16 | 对于Dense梯度,是否采用半精度通信。取值范围如下:
|
BOOL | False | 开启该功能,会减少一半的Dense梯度通信,但是会影响收敛,可能需要调参。 |
WHALE_COMMUNICATION_SPARSE_FP16 | 对于Sparse梯度,是否采用半精度通信。取值范围如下:
|
BOOL | False | 开启该功能,会减少一半的Sparse梯度通信,但是会影响收敛,可能需要调参。 |
WHALE_COMMUNICATION_FP16_SCALE | 采用半精度通信时,为防止梯度消失,可以配置梯度Scale系数。取值为None,表示未设置Scale系数。 | FLOAT | None | 采样半精度通信时,可以结合该参数进行调参。 |
在文档使用中是否遇到以下问题
更多建议
匿名提交