Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update batch evaluate #154

Merged
merged 4 commits into from
Jul 27, 2023
Merged

Conversation

huilin16
Copy link
Contributor

PR types

New features

PR changes

Others

Description

update batch evaluate

@huilin16
Copy link
Contributor Author

添加了批量预测的功能,在aistudio上在单卡和4卡环境上,每个任务都跑了一个模型,打印的输出结果显示batch_size与train_batch_size相同

@Bobholamovic
Copy link
Member

赞!这个功能如果能够实现的话,PaddleRS的用户体验应该会有很大提升。

不过目前CI好像有点儿问题:
image

另外其实我们不止需要batch_size符合预期,精度是更重要的,辛苦测试一下看看使用目前的实现,各个任务batch_size=1以及batch_size大于1的精度指标是否一致(需考虑单卡batch_size=1、单卡batch_size>1、多卡batch_size=1、多卡batch_size>1四种情况)。在测试的同时,建议也可以观察一下显存占用和测试耗时,看看目前的实现在性能上是否也是符合我们预期的(设置大于1的batch_size通常能够加速,显存占用与batch_size基本上呈线性关系)。

@huilin16
Copy link
Contributor Author

huilin16 commented May 30, 2023 via email

@Bobholamovic Bobholamovic self-requested a review May 30, 2023 03:57
@huilin16
Copy link
Contributor Author

huilin16 commented Jun 6, 2023

修复了批量预测以及图像修复推理部分的问题,在aistudio单卡与多卡环境测试了不同batchsize,
image
测试项目地址:https://aistudio.baidu.com/aistudio/projectdetail/6037351?contributionType=1

@Bobholamovic
Copy link
Member

辛苦啦,非常详尽的实验结果!

从结果上来看,目标检测任务的多卡精度好像和正确值差的有点儿多,可能是有代码层面的问题……另外从显存占用和速度来看,好像也有些不太符合直觉,例如前两个任务单卡的bs=1和bs=8显存占用差距不是很大,目标检测任务使用bs>1的速度反而变慢了。我建议通过断点调试确认单卡情况下evaluate过程各步骤模型的输入输出是否符合预期,以及排查目标检测任务多卡精度误差问题。

@huilin16
Copy link
Contributor Author

huilin16 commented Jun 6, 2023 via email

@huilin16
Copy link
Contributor Author

抱歉,晚了一些。
目标检测和图像分类的eval确实有问题,两个任务的结果在多卡环境中,没有从各显卡中收集输出结果。语义分割和变化检测在evaluate中都收集,图像修复是在PSNR的accumulate中收集结果。
此外图像分类有点小问题,没有考虑最后1个batch数据少于batchsize的情况,也已经修复。

image

在单卡和多卡中输入、输出的batch维度显示都正常,关于显存问题,我试了下,paddle中会占用一部分额外显存,这部分显存大概几百MB,输入、输出的数据,以及前向传播的中间变量这部分显存才会根据batchsize倍增https://aistudio.baidu.com/aistudio/projectdetail/6545652

pred = overlap_processor.process_pred(out, xoff_, yoff_)
# Write to file
band.WriteArray(pred, xoff_, yoff_)
if len(out['label_map'].shape)==3:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请问这里的修改是为什么呀?

@huilin16
Copy link
Contributor Author

赞!这个功能如果能够实现的话,PaddleRS的用户体验应该会有很大提升。

不过目前CI好像有点儿问题: image

另外其实我们不止需要batch_size符合预期,精度是更重要的,辛苦测试一下看看使用目前的实现,各个任务batch_size=1以及batch_size大于1的精度指标是否一致(需考虑单卡batch_size=1、单卡batch_size>1、多卡batch_size=1、多卡batch_size>1四种情况)。在测试的同时,建议也可以观察一下显存占用和测试耗时,看看目前的实现在性能上是否也是符合我们预期的(设置大于1的batch_size通常能够加速,显存占用与batch_size基本上呈线性关系)。

原本的滑动预测处理的是单个样本,所以才会出现这个图片里的问题。所以对slider_predict这里做了个判断,处理batch结果

@Bobholamovic
Copy link
Member

LGTM.

@Bobholamovic
Copy link
Member

代码风格可能需要修复一下,CI没有通过:
image

@huilin16
Copy link
Contributor Author

已更新

代码风格可能需要修复一下,CI没有通过: image

@Bobholamovic Bobholamovic merged commit b5c716c into PaddlePaddle:develop Jul 27, 2023
3 checks passed
@Bobholamovic
Copy link
Member

再次感谢贡献!

Bobholamovic added a commit that referenced this pull request Aug 17, 2023
Bobholamovic added a commit that referenced this pull request Aug 17, 2023
@Bobholamovic
Copy link
Member

这个PR可能还需要再修改~ 发现合入后PaddleRS的seg和cd模型的推理功能崩了(batch_size>1的情况下),考虑是对postprocess部分的改动导致的。临时先revert了一下~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants