问题:
使用Transformer模型时的训练步骤/秒反复从20步/秒降至<1步/秒。
这是内部可复制的。
在<1 step / s
上下文: 我们使用Transformer model进行训练。
Transformer的训练效果较差,但Universal Transformer的训练效果很好。
在两种情况下,我们都使用4倍P100,子词令牌(https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/data_generators/text_encoder.py#L448)和MirroredStrategy Enabled分发策略。
(我们在8x V100上也观察到了相同的行为。)
在1)P100与V100、2)MirroredStrategy与t2t的内置多GPU以及3)Universal Transformer与Transformer进行的烧蚀测试表明,#3是驱动变量。
我们正在使用tensor2tensor的Translator / universal_transformer实现。 使用的hparams是translator_tiny和universal_transformer_tiny。与常规用法的一个值得注意的偏差是,我们的hparams.max_length值很大(2500),而批处理的大小通常很小,因为我们的中间序列长度是750个令牌。
当前行为 借助Transformer,训练运行的步/秒在大约20步/秒和0.5步/秒之间交替。
在最初的3-4个小时中,偏向于20步/秒。接下来的2个小时,它开始更频繁地下降到0.5步/秒,然后才几乎完全下降到0.5步/秒。
如果我们从模型运行缓慢时创建的检查点重新开始训练过程,则行为会以20步/秒的速度重复出现,然后下降到0.5。
下面是两个图第一个是我们在训练过程中模型步/秒降级的图。早期的中值约为20(偶尔下降到5步/秒以下),但是随着训练的进行,我们的性能下降到几乎0步/秒。 注意,垂直轴是对数的
第二张图显示了我们模型的3.25个连续运行,其中每次重新启动都会选择一个先前生成的运行检查点。这些重新启动并不是造成错误,而是由于我们的系统会在24小时后自动抢占gpu密集型作业。请注意,每次重新启动后性能都会持续下降。
预期的行为
我们的通用变压器运行具有完全平坦的步进/秒曲线。下图以步/秒方差表示红色的预期行为。请注意,模型的步长/秒几乎没有变化,除了归因于评估步长的急剧下降。
其他信息/日志 我们的GPU利用率(由nvidia-smi衡量)与上图紧密相关。在我们的步/秒很高的地方,我们的GPU利用率几乎始终为50%,偶尔一秒下降到0,然后再进行备份。当我们的步/秒持续下降到1以下时,我们的gpu利用率通常为0%。每隔几分钟,它会短暂地升至50%,然后每秒下降至0%。
就auc性能而言,即使步长/秒衰减,我们的变压器模型仍在不断改进。
硬件配置信息:
系统信息
-我是否编写了自定义代码(与使用TensorFlow中提供的股票示例脚本相对):
是 -操作系统平台和发行版(例如Linux Ubuntu 16.04):
Ubuntu 18.04 -从(源或二进制)安装TensorFlow:
二进制/点安装 -TensorFlow版本
1.13.1 -Python版本:
3.6.7 -CUDA / cuDNN版本:
CUDA = 10 CUDNN_VERSION 7.5
-GPU模型和内存:
8X V100 16 GB
(我们观察到与为CUDA 9.2编译的CUDA 9.2和TF 1.12相同的行为。) Docker Image
相关问题:
https://github.com/tensorflow/tensor2tensor/issues/1484 https://github.com/tensorflow/tensorflow/issues/26635