Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
bef616b2
M
models
项目概览
PaddlePaddle
/
models
大约 1 年 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
bef616b2
编写于
11月 25, 2021
作者:
S
shiyutang
提交者:
GitHub
11月 25, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update ArticleReproduction_CV.md FAQ (#5392)
上级
84c2996b
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
72 addition
and
0 deletion
+72
-0
docs/lwfx/ArticleReproduction_CV.md
docs/lwfx/ArticleReproduction_CV.md
+72
-0
未找到文件。
docs/lwfx/ArticleReproduction_CV.md
浏览文件 @
bef616b2
...
@@ -728,7 +728,20 @@ torch.stack([
...
@@ -728,7 +728,20 @@ torch.stack([
*
对于初学者来说,可以给Paddle提
[
ISSUE
](
https://github.com/PaddlePaddle/Paddle/issues/new/choose
)
,列出Paddle不支持的实现,Paddle开发人员会根据优先级进行实现。
*
对于初学者来说,可以给Paddle提
[
ISSUE
](
https://github.com/PaddlePaddle/Paddle/issues/new/choose
)
,列出Paddle不支持的实现,Paddle开发人员会根据优先级进行实现。
*
PaddlePaddle与PyTorch对于不同名称的API,实现的功能可能是相同的,复现的时候注意,比如
[
paddle.optimizer.lr.StepDecay
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/lr/StepDecay_cn.html#stepdecay
)
与
[
torch.optim.lr_scheduler.StepLR
](
https://pytorch.org/docs/stable/generated/torch.optim.lr_scheduler.StepLR.html#torch.optim.lr_scheduler.StepLR
)
,关于PaddlePaddle与PyTorch更多API的映射关系可以参考:
[
API映射表
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/08_api_mapping/pytorch_api_mapping_cn.html
)
。
*
PaddlePaddle与PyTorch对于不同名称的API,实现的功能可能是相同的,复现的时候注意,比如
[
paddle.optimizer.lr.StepDecay
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/lr/StepDecay_cn.html#stepdecay
)
与
[
torch.optim.lr_scheduler.StepLR
](
https://pytorch.org/docs/stable/generated/torch.optim.lr_scheduler.StepLR.html#torch.optim.lr_scheduler.StepLR
)
,关于PaddlePaddle与PyTorch更多API的映射关系可以参考:
[
API映射表
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/08_api_mapping/pytorch_api_mapping_cn.html
)
。
*
对于PaddlePaddle来说,通过
`paddle.set_device`
函数(全局)来确定模型结构是运行在什么设备上,对于torch来说,是通过
`model.to("device")`
(局部)来确定模型结构的运行设备,这块在复现的时候需要注意。
*
对于PaddlePaddle来说,通过
`paddle.set_device`
函数(全局)来确定模型结构是运行在什么设备上,对于torch来说,是通过
`model.to("device")`
(局部)来确定模型结构的运行设备,这块在复现的时候需要注意。
*
安装paddle的develop版本:在 Paddle 修复了框架的问题或者新增了API和功能之后,如果需要马上使用,可以采用以下方式安装最新的 develop 版本:
*
进入
[
Paddle 官网
](
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html
)
,选择develop版本,并根据自己的情况选择其他字段,根据生成的安装信息安装,当选择 Linux-pip-CUDA10.2字段后,就可以按照下面的信息安装。
```shell
python -m pip install paddlepaddle-gpu==0.0.0.post102 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html
```
*
如果不确定自己安装的是否是最新版本,可以进入
[
网站
](
https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html
)
下载对应的包并查看时间戳。
*
如果遇到复现时间较长的论文,我们建议:
*
根据自己的时间、资源、战略部署评估是否复现这个论文复现;
*
在决定复现的情况下,参照本复现指南中的对齐操作对模型、数据、优化方式等对齐,以最快的时间排除问题。
<a
name=
"4.1"
></a>
<a
name=
"4.1"
></a>
### 4.2 模型结构对齐
### 4.2 模型结构对齐
...
@@ -901,3 +914,62 @@ w.backward()
...
@@ -901,3 +914,62 @@ w.backward()
*
在接入时,建议将少量用于测试的数据打包(
`tar -zcf lite_data.tar data/`
),放在data目录下,后续在进行环境准备的时候,直接解压该压缩包即可。
*
在接入时,建议将少量用于测试的数据打包(
`tar -zcf lite_data.tar data/`
),放在data目录下,后续在进行环境准备的时候,直接解压该压缩包即可。
*
接入过程中,需要依赖于inference模型,因此建议首先提供模型导出和基于inference模型的预测脚本,之后再接入TIPC测试代码与文档。
*
接入过程中,需要依赖于inference模型,因此建议首先提供模型导出和基于inference模型的预测脚本,之后再接入TIPC测试代码与文档。
*
接入过程中,如果需要在AiStudio中进行TensorRT预测,可以参考:
[
AiStudio中使用TensorRT进行预测教程
](
https://aistudio.baidu.com/aistudio/projectdetail/3027768
)
。
*
接入过程中,如果需要在AiStudio中进行TensorRT预测,可以参考:
[
AiStudio中使用TensorRT进行预测教程
](
https://aistudio.baidu.com/aistudio/projectdetail/3027768
)
。
### 4.14 常见bug汇总
在论文复现中,可能因为各种原因出现报错,下面我们列举了常见的问题和解决方法,从而提供debug的方向:
#### 1. 显存泄露:
显存泄露会在
`nvidia-smi`
等命令下,明显地观察到显存的增加,最后会因为
`out of memory`
的错误而程序终止。
##### 可能原因:
1.
Tensor 切片的时候增加变量引用,导致显存增加,解决方法如下:
使用 where, gather 函数替代原有的 slice 方式:
```
python
a
=
paddle
.
range
(
3
)
c
=
paddle
.
ones
([
3
])
b
=
a
>
1
# 会增加引用的一种写法
c
[
b
]
=
0
# 修改后
paddle
.
where
(
b
,
paddle
.
zeros
(
c
.
shape
),
c
)
```
#### 2. 内存泄露:
内存泄露和显存泄露相似,并不能立即察觉,而是在使用
`top`
命令时,观察到内存显著增加,最后会因为
`can't allocate memory`
的错误而程序终止,如图所示是
`top`
命令下观察内存变化需要检查的字段。
![
图片
](
https://raw.githubusercontent.com/shiyutang/files/main/top.png
)
##### 可能原因:
1.
对在计算图中的 tensor 进行了不需要的累加、保存等操作,导致反向传播中计算图没有析构,解决方法如下:
**预测阶段**
:在predict函数上增加装饰器@paddle.no_grad();在预测部分的代码前加上 with paddle.no_grad()
**训练阶段**
:对于不需要进行加入计算图的计算,将tensor detach出来;对于不需要使用tensor的情形,将 tensor 转换为numpy进行操作,例如下面的代码:
```
python
cross_entropy_loss
=
paddle
.
nn
.
CrossEntropyLoss
()
loss
=
cross_entropy_loss
(
pred
,
gt
)
# 会导致内存泄露的操作
loss_total
+=
loss
# 修改后
loss_total
+=
loss
.
numpy
()
# 如果可以转化为numpy
loss_total
+=
loss
.
detach
().
clone
()
# 如果需要持续使用tensor
```
##### 排查方法:
1.
在没有使用 paddle.no_grad 的代码中,寻找对模型参数和中间计算结果的操作;
2.
考虑这些操作是否应当加入计算图中(即对最后损失产生影响);
3.
如果不需要,则需要对操作中的参数或中间计算结果进行
`.detach().clone()`
或者
`.numpy`
后操作。
#### 3. dataloader 加载数据时间长:
-
**解决方式**
:增大 num_worker 的值,提升io速度,一般建议设置 4 或者 8。
#### 4. 单机多卡报错信息不明确:
-
**解决方式**
:前往 log 下寻找 worklog.x 进行查看,其中 worklog.x 代表第 x 卡的报错信息。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录