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

【PaddlePaddle Hackathon 4】No.56 : add fp16 test and bf16 for poisson #51662

Merged
merged 22 commits into from
Jul 31, 2023
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
d8d29f1
add fp16 and bf16 support for poisson
longranger2 Mar 14, 2023
0d69755
add fp16 and bf16 support for searchsorted
longranger2 Mar 14, 2023
e23441c
Merge branch 'develop' into fp16_56_3
longranger2 Mar 19, 2023
2718d8d
fix bug
longranger2 Mar 19, 2023
85a4abe
Merge branch 'PaddlePaddle:develop' into fp16_56_3
longranger2 Mar 22, 2023
bf73134
Merge branch 'develop' into fp16_56_3
longranger2 Mar 25, 2023
9409af7
Update test_searchsorted_op.py
longranger2 Mar 28, 2023
6c7ac27
Update test_poisson_op.py
longranger2 Mar 28, 2023
2701d84
Merge branch 'PaddlePaddle:develop' into fp16_56_3
longranger2 Mar 28, 2023
8f280ee
fix bug
longranger2 Apr 3, 2023
a3ac092
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into…
longranger2 Apr 3, 2023
26e4f91
remove the searchorted
longranger2 Apr 22, 2023
1c2419b
Update test_poisson_op.py
longranger2 May 2, 2023
0525ca4
fix bug of TestPoissonBF16Op
longranger2 May 10, 2023
748612f
Update test_poisson_op.py
longranger2 May 11, 2023
fded554
Update test_poisson_op.py
longranger2 May 12, 2023
327e711
Merge branch 'PaddlePaddle:develop' into fp16_56_3
longranger2 May 12, 2023
229cc55
Update test_poisson_op.py
longranger2 May 15, 2023
37a69bd
fix bug of import
longranger2 May 16, 2023
2f9ffc0
Merge branch 'PaddlePaddle:develop' into fp16_56_3
longranger2 May 16, 2023
1713590
Merge branch 'develop' of https://github.com/longranger2/Paddle into …
longranger2 Jun 26, 2023
5bda810
fix bug
longranger2 Jul 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions paddle/phi/kernels/gpu/poisson_grad_kernel.cu
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,11 @@
#include "paddle/phi/core/kernel_registry.h"
#include "paddle/phi/kernels/impl/poisson_grad_kernel_impl.h"

PD_REGISTER_KERNEL(
poisson_grad, GPU, ALL_LAYOUT, phi::PoissonGradKernel, float, double) {}
PD_REGISTER_KERNEL(poisson_grad,
GPU,
ALL_LAYOUT,
phi::PoissonGradKernel,
float,
double,
phi::dtype::float16,
phi::dtype::bfloat16) {}
10 changes: 8 additions & 2 deletions paddle/phi/kernels/gpu/poisson_kernel.cu
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,11 @@ void PoissonKernel(const Context& ctx, const DenseTensor& x, DenseTensor* out) {

} // namespace phi

PD_REGISTER_KERNEL(
poisson, GPU, ALL_LAYOUT, phi::PoissonKernel, float, double) {}
PD_REGISTER_KERNEL(poisson,
GPU,
ALL_LAYOUT,
phi::PoissonKernel,
float,
double,
phi::dtype::float16,
phi::dtype::bfloat16) {}
63 changes: 61 additions & 2 deletions test/legacy_test/test_poisson_op.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,14 @@
import unittest

import numpy as np
from eager_op_test import OpTest
from eager_op_test import (
OpTest,
convert_float_to_uint16,
convert_uint16_to_float,
)

import paddle
from paddle.fluid import core

paddle.enable_static()
paddle.seed(100)
Expand All @@ -42,17 +47,20 @@ class TestPoissonOp1(OpTest):
def setUp(self):
self.op_type = "poisson"
self.python_api = paddle.tensor.poisson
self.init_dtype()
self.config()

self.attrs = {}
self.inputs = {'X': np.full([2048, 1024], self.lam, dtype=self.dtype)}
self.outputs = {'Out': np.ones([2048, 1024], dtype=self.dtype)}

def init_dtype(self):
self.dtype = "float64"

def config(self):
self.lam = 10
self.a = 5
self.b = 15
self.dtype = "float64"

def verify_output(self, outs):
hist, prob = output_hist(np.array(outs[0]), self.lam, self.a, self.b)
Expand Down Expand Up @@ -368,5 +376,56 @@ def test_fixed_random_number(self):
paddle.enable_static()


class TestPoissonFP16OP(TestPoissonOp1):
def init_dtype(self):
self.dtype = np.float16


@unittest.skipIf(
not core.is_compiled_with_cuda()
or not core.is_bfloat16_supported(core.CUDAPlace(0)),
"core is not complied with CUDA and not support the bfloat16",
)
class TestPoissonBF16Op(OpTest):
def setUp(self):
self.op_type = "poisson"
self.python_api = paddle.tensor.poisson
self.__class__.op_type = self.op_type
self.config()
x = np.full([2048, 1024], self.lam, dtype="float32")
out = np.ones([2048, 1024], dtype="float32")
x = convert_uint16_to_float(convert_float_to_uint16(x))
out = convert_uint16_to_float(convert_float_to_uint16(out))
Copy link
Contributor

Choose a reason for hiding this comment

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

397和398不用加,因为400~401行,你要把float转uint16

self.attrs = {}
self.inputs = {'X': convert_float_to_uint16(x)}
self.outputs = {'Out': convert_float_to_uint16(out)}

def config(self):
self.lam = 10
self.a = 5
self.b = 15
self.dtype = np.uint16

def verify_output(self, outs):
hist, prob = output_hist(np.array(outs[0]), self.lam, self.a, self.b)
Copy link
Contributor

Choose a reason for hiding this comment

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

这一行错误原因是outs[0]是op的输出,由于输出是bf16类型,np.array后变成了uint16。所以为了得到正确的计算结果,这里要将转为uint16的numpy数据,转回float32

hist, prob = output_hist(convert_uint16_to_float(np.array(outs[0])), self.lam, self.a, self.b)

np.testing.assert_allclose(hist, prob, rtol=0.01)

def test_check_output(self):
place = core.CUDAPlace(0)
self.check_output_with_place_customized(self.verify_output, place)

def test_check_grad(self):
place = core.CUDAPlace(0)
self.check_grad_with_place(
place,
['X'],
'Out',
user_defined_grads=[np.zeros([2048, 1024], dtype="float32")],
user_defined_grad_outputs=[
np.random.rand(2048, 1024).astype("float32")
],
)


if __name__ == "__main__":
unittest.main()