-
Notifications
You must be signed in to change notification settings - Fork 5.7k
optimize cross entropy kernel by using reduce. #4237
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
optimize cross entropy kernel by using reduce. #4237
Conversation
c6a995f
to
a3a8a09
Compare
self.inputs = {'X': X, 'Label': label} | ||
self.outputs = {'Y': cross_entropy} | ||
self.attrs = {'soft_label': 1} | ||
self.inputs = {"X": X, "Label": label} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://www.python.org/dev/peps/pep-0008/#string-quotes
We following PEP8
as our style guide. In python, both ''
and ""
are fine.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I know, only personally, I prefer to keep consistent in one file.
4b55fd2
to
1904577
Compare
paddle/operators/cross_entropy_op.cu
Outdated
int block_x = 32; | ||
int block_y = 32; | ||
dim3 block(block_x, block_y); | ||
dim3 grid((n + block_x - 1) / block_x, (d + block_y - 1) / block_y); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这样分配二维block,相比一维的block空的线程更多,这个计算实际一维block就够了, 可以是使用非soft-label的方式:
int block = 512;
int grid = (n * d + block - 1) / block;
kernel 改成:
for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < N * D;
i += blockDim.x * gridDim.x) {
int id_dy = ids / D;
dX[i] = -label[i] * dY[id_dy] / X[i];
}
另外如果方便的话,可以帮忙一起修复下:
// TODO(qingqing): launch kernel on specified stream
// base on ExecutionContext.
谢谢了,当时写的时候ExecutionContext里还没有stream.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done.
paddle/operators/cross_entropy_op.cu
Outdated
SoftCrossEntropyKernel<T><<<grid, block>>>(y_data, x_data, label_data, n, | ||
d); | ||
grid = d; | ||
SoftCrossEntropyKernel<T, 512><<<grid, block>>>(y_data, x_data, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
去掉line 123, 写成:
SoftCrossEntropyKernel<T, 512><<<d, block>>>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done.
a637d86
to
031d7eb
Compare
|
e8ed548
to
fa3e373
Compare
All finished, please review this, thanks, everyone. @qingqing01 @Xreki |
11516af
to
058dfbb
Compare
8f776c8
to
f5be351
Compare
1a4eff4
to
ae59260
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
paddle/operators/cross_entropy_op.cc
Outdated
AddInput("Label", | ||
"(Tensor, default Tensor<int>), the ground truth which is " | ||
"a 1-D or 2-D tensor. " | ||
"When softLabel is set to 0, `Label` is a Tensor<int> with shape " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
set to 0 -> false.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
paddle/operators/cross_entropy_op.cc
Outdated
"a 1-D or 2-D tensor. " | ||
"When softLabel is set to 0, `Label` is a Tensor<int> with shape " | ||
"[N x 1]. " | ||
"When softLabel is set to 1, `Label` is a Tensor<float/double> " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
set to 1 -> set to true.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
ae59260
to
c80489a
Compare
c80489a
to
000d751
Compare
fixes #4236