PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.31k stars 5.63k forks source link

Paddle2.3低级索引问题的严重Bug! #43001

Open Victory8858 opened 2 years ago

Victory8858 commented 2 years ago

bug描述 Describe the Bug

Paddle2.3虽然解决了Tensor中只有一个元素时,利用mask索引的Bug,但在mask为多元素时索引产生了Paddle2.2中本不存在的Bug!


import paddle

# 当label,mask仅有一个元素时,Paddle2.2会报错,现在的Paddle2.3解决了这个问题,不会报错了
label = paddle.to_tensor([0])
mask = paddle.to_tensor([True], dtype='bool')
print(label[mask])

# 但是有多个元素时,Paddle2.3怎么又不支持tensor索引了?索引的结果是错的!!
label = paddle.to_tensor([0, 8, 9])
mask = paddle.to_tensor([False, True, True], dtype='bool')
print(label[mask])  # Paddle2.3运行后输出[0, 0],在Paddle2.2下运行是[8, 9]正常的
print(label[[False, True, True]])  # Paddle2.3下这样运行是正常的输出[8, 9],总之变成Tensor就不对了
esythan commented 2 years ago

麻烦给下具体的运行结果截图吧,我这边复现的结果是正常的 FEC98E22-EE34-458D-9DF0-ADF96DD2D14E

Victory8858 commented 2 years ago

注意:以上代码在Paddle2.2下会报错,Paddle2.3下运行结果不正常,如下图: image

esythan commented 2 years ago

提供一下安装的paddle2.3的具体版本吧,或者安装命令也可以,我看下是否能复现这个问题

Victory8858 commented 2 years ago

您好,我上午在AI Studio的NoteBook中测试了(PaddlePaddle2.3.0版本),以上代码执行时间巨慢,并且print不出结果,但是刚刚又在AI Studio测试,这个问题竟然没有了,但是本地依然有问题,我不知道是否这个期间AI Studio做过更新,还是当时出了其他bug? image

注:本地PaddlePaddle2.3版本利用conda安装,CUDA版本11.2,具体如下: image

Victory8858 commented 2 years ago

您好,经过测试,anaconda下新建了一个python3.8的环境,然后终端执行上述命令安装,没有额外安装任何第三方包,依然执行结果异常,我的环境是Windows,电脑显卡RTX3070

esythan commented 2 years ago

你好,按照你的方式,在windows机器上通过anaconda建立一个python3.8的环境并安装paddle2.3后,终端运行上述代码,依旧没有复现你的问题,不确定是否环境还有差异。 21160C1F-0E75-4172-8D25-506EE59ECD34

Victory8858 commented 2 years ago

您好,刚刚又测试了一下,依然不行,可能与显卡型号有关 我的整体流程是: Step1:Anaconda图形界面下create一个新的环境,python版本3.8.13, 名称为pd2-3,然后终端切换到该环境

conda activate pd2-3

Step2: PaddlePaddle官网指令

conda install paddlepaddle-gpu==2.3.0 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge 

Step3: Pycharm中添加该环境,运行程序,输出依然不符合预期

import paddle

# 当label,mask仅有一个元素时,Paddle2.2会报错,现在的Paddle2.3解决了这个问题,不会报错了
label = paddle.to_tensor([0])
mask = paddle.to_tensor([True], dtype='bool')
print(label[mask])

# 但是有多个元素时,Paddle2.3怎么又不支持tensor索引了?索引的结果是错的!!
label = paddle.to_tensor([0, 8, 9])
mask = paddle.to_tensor([False, True, True], dtype='bool')
print(label[mask])  # Paddle2.3运行后输出[0, 0],在Paddle2.2下运行是[8, 9]正常的
print(label[[False, True, True]])  # Paddle2.3下这样运行是正常的输出[8, 9],总之变成Tensor就不对了

输出如下:

D:\anaconda3\envs\pd2-3\python.exe C:/Users/Victory/Desktop/FarSeg-Paddle/bug.py
D:\anaconda3\envs\pd2-3\lib\site-packages\paddle\tensor\creation.py:125: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. 
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  if data.dtype == np.object:
W0530 16:37:19.604508 55576 gpu_context.cc:278] Please NOTE: device: 0, GPU Compute Capability: 8.6, Driver API Version: 11.4, Runtime API Version: 11.2
W0530 16:37:19.690508 55576 gpu_context.cc:306] device: 0, cuDNN Version: 8.2.
Tensor(shape=[1], dtype=int64, place=Place(gpu:0), stop_gradient=True,
       [0])
Tensor(shape=[2], dtype=int64, place=Place(gpu:0), stop_gradient=True,
       [0, 0])
Tensor(shape=[2], dtype=int64, place=Place(gpu:0), stop_gradient=True,
       [8, 9])

进程已结束,退出代码 0
esythan commented 2 years ago

是否可以直接在命令行里面运行上面的代码,排除一下pycharm的问题 再就是尝试安装一下cpu版本的paddle,排除一下是否是gpu的问题

Victory8858 commented 2 years ago

您好,在命令行运行,最后三行的结果依然结果不对,感觉是显卡型号问题(出问题版本3070 Paddle2.3.0+CUDA11.2),我尝试用其他电脑(非三系显卡)安装Paddle2.3.0+CUDA10.2版本,结果正常。 image

Victory8858 commented 2 years ago

可以跟进一下本问题吗,谢谢

Victory8858 commented 2 years ago

目前更新到最新的2.3.1版本 CUDA11.6依然结果不对,麻烦跟进一下,谢谢!

import paddle

label = paddle.to_tensor([0, 8, 9])
mask = paddle.to_tensor([False, True, True], dtype='bool')
print(label[mask])                     # Paddle2.3.1运行后输出[0, 0],在Paddle2.2下运行是[8, 9]正常的

image