diff --git a/tutorials/article-implementation/ArticleReproduction_CV.md b/tutorials/article-implementation/ArticleReproduction_CV.md index 81c68e125dd4b3ecbe3a475d58e5cbb1094bc5c8..e60b1902a3837360e251e870d036301a7ce7ef0e 100644 --- a/tutorials/article-implementation/ArticleReproduction_CV.md +++ b/tutorials/article-implementation/ArticleReproduction_CV.md @@ -33,6 +33,7 @@ - [4.2 内存泄露](#4.2) - [4.3 dataloader 加载数据时间长](#4.3) - [4.4 单机多卡报错信息不明确](#4.4) + - [4.5 通用API使用问题](#4.5) ## 1. 总览 @@ -741,6 +742,7 @@ random.seed(config.SEED) - 其他细分场景下有什么导致训练不对齐的原因? * 小数据上指标波动可能比较大,时间允许的话,可以跑多次实验,取平均值。 * transformer 系列模型对于数据增广与模型初始化非常敏感,因此在保证前反向对齐后,如果训练仍无法对齐,可以考虑使用官方的PyTorch模型训练代码,结合复现的Paddle组网代码进行训练,这样可以验证是否是数据预处理/数据增强策略存在问题。 + * transformer 系列模型,在模型量级比较小的情况下,使用更大的batch size以及对应的学习率进行训练往往会获得更高的精度,在复现时,建议保证batch size和学习率完全一致,否则可能会隐藏其他没有对齐的风险项。 * 检测、分割等任务中,训练通常需要加载backbone的权重作为预训练模型,注意在完成模型对齐后,将转换的权重修改为backbone权重。 * 生成任务中,训练时经常需要固定一部分网络参数。对于一个参数`param`,可以通过`param.trainable = False`来固定。 * 在训练GAN时,通常通过GAN的loss较难判断出训练是否收敛,建议每训练几次迭代保存一下训练生成的图像,通过可视化判断训练是否收敛。 @@ -959,12 +961,15 @@ python3.7 -m paddle.distributed.launch \ + ## 4. 通用问题FAQ 在论文复现中,可能因为各种原因出现报错,下面我们列举了常见的问题和解决方法,从而提供debug的方向: -#### 4.1 显存泄露 + +### 4.1 显存泄露 + 显存泄露会在 `nvidia-smi` 等命令下,明显地观察到显存的增加,最后会因为 `out of memory` 的错误而程序终止。 **【可能原因】** @@ -986,7 +991,8 @@ Tensor 切片的时候增加变量引用,导致显存增加。 ``` -#### 4.2 内存泄露 + +### 4.2 内存泄露 内存泄露和显存泄露相似,并不能立即察觉,而是在使用 `top` 命令时,观察到内存显著增加,最后会因为 `can't allocate memory` 的错误而程序终止,如图所示是 `top` 命令下观察内存变化需要检查的字段。 @@ -1022,7 +1028,8 @@ Tensor 切片的时候增加变量引用,导致显存增加。 3. 如果不需要,则需要对操作中的参数或中间计算结果进行`.detach().clone()`或者`.numpy` 后操作。 -#### 4.3 dataloader 加载数据时间长 + +### 4.3 dataloader 加载数据时间长 **【解决方式】** @@ -1030,8 +1037,20 @@ Tensor 切片的时候增加变量引用,导致显存增加。 -#### 4.4 单机多卡报错信息不明确 + +### 4.4 单机多卡报错信息不明确 **【解决方式】** 前往 log 下寻找 worklog.x 进行查看,其中 worklog.x 代表第 x 卡的报错信息。 + + + + +### 4.5 通用API使用问题 + +#### 4.5.1 `paddle.gather`和`torch.gather`的含义不同,有什么解决办法呢? + +**【解决方式】** + +目前`paddle.take_along_axis`和`torch.gather`的功能等价,可以安装develop版本的paddle体验,该API预计会在2022年3月上线paddle的最新release版本