PaddlePaddle / PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
https://arxiv.org/abs/2101.06175
Apache License 2.0
8.56k stars 1.68k forks source link

paddle2.0版本padseg动态图问题 #530

Closed liguoyu666 closed 3 years ago

liguoyu666 commented 3 years ago

1、在动态图的配置文件里没有发现卡间同步BN,是没加还是放在了其他地方?

2、我本地安装paddle2.0后,不能调用GPU, W1029 15:27:24.594763 9948 init.cc:157] Compiled with WITH_GPU, but no GPU found in runtime. /home/lgy/anaconda3/envs/paddle2.0/lib/python3.7/site-packages/paddle/fluid/framework.py:295: UserWarning: You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default. "You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default." , 之前1.8版本没问题,本地cuda版本:10.1.243,cudnn版本:7.605

3、config有个动态调整调整类别的参数cfg.SOLVER.CROSS_ENTROPY_WEIGHT ,我设为'dynamic',发现实际效果反而下降许多,batch_size为112.

michaelowenliu commented 3 years ago

@liguoyu666 Hi, thanks for your feedback. The dynamic version of PaddleSeg: https://github.com/PaddlePaddle/PaddleSeg/tree/release/v0.7.0/dygraph

liguoyu666 commented 3 years ago

@liguoyu666 Hi, thanks for your feedback. The dynamic version of PaddleSeg: https://github.com/PaddlePaddle/PaddleSeg/tree/release/v0.7.0/dygraph

1,3问题用的是1.8版本的padseg,第2个问题用的是你给的这个链接里的dygraph下的padseg

wuyefeilin commented 3 years ago
  1. 动态图是直接调用SyncBatchNorm的,不需要设置
  2. 查看你的cuda路径是否设置正确
  3. 使用dynamic效果不一定会有提升,你可以直接传入一个与类别数相同的list来设置权重

动态图位于release/v0.7.0分支dygraph目录下。使用paddlepaddle-gpu2.0.0rc版本运行

liguoyu666 commented 3 years ago
  1. 动态图是直接调用SyncBatchNorm的,不需要设置
  2. 查看你的cuda路径是否设置正确
  3. 使用dynamic效果不一定会有提升,你可以直接传入一个与类别数相同的list来设置权重

动态图位于release/v0.7.0分支dygraph目录下。使用paddlepaddle-gpu2.0.0rc版本运行

安装的就是这个版本,cuda路径没问题,paddle1.8就能正常使用gpu,打印出来的gpu_nums为1,但是获取 device的时候,就是cpu了,代码如下:

`import paddle from paddle.fluid import framework

gpu_nums = paddle.distributed.ParallelEnv().nranks print(gpu_nums) print(paddle.get_device()) print(framework._current_expected_place())`

1 cpu CPUPlace

wuyefeilin commented 3 years ago

paddle.distributed.ParallelEnv().nranks 这个反馈的是运行的进程数,如果是在gpu环境下运行,可以反应出gpu的数量,因为在多卡情况下运行,一个gpu对应一个进程。

paddle.get_device()的输出才是真正的反应出其运行的环境,输出cpu,说明是在cpu条件下运行的。gpu没有被正常调用,请查看一下你gpu环境是否配置正确

liguoyu666 commented 3 years ago

paddle.distributed.ParallelEnv().nranks 这个反馈的是运行的进程数,如果是在gpu环境下运行,可以反应出gpu的数量,因为在多卡情况下运行,一个gpu对应一个进程。

paddle.get_device()的输出才是真正的反应出其运行的环境,输出cpu,说明是在cpu条件下运行的。gpu没有被正常调用,请查看一下你gpu环境是否配置正确

检查出来了,是驱动版本430过低导致的,升级至440就正常了,不过有一说一,paddle2.0要求的驱动也太高了啊,我其他框架用430驱动都没问题