Skip to content

Commit f2de748

Browse files
authored
fix fast_ln (PaddlePaddle#77577)
1 parent f0888da commit f2de748

1 file changed

Lines changed: 32 additions & 14 deletions

File tree

paddle/phi/kernels/funcs/fast_ln_v2_bwd_kernel.cu

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,17 @@ __global__ __launch_bounds__(Ktraits::THREADS_PER_CTA) void ln_bwd_kernel(
7979
Reducer reducer(params, bidm, bidn, warp_m, warp_n, lane, smem_dgrad);
8080

8181
Sum<reduce_t> sum;
82-
bool is_rmsnorm = params.mean == nullptr;
82+
bool is_rmsnorm = (params.mean == nullptr);
8383
constexpr float rn = 1.f / static_cast<float>(COLS);
8484
Wvec gamma[LDGS];
8585
index_t idx = c;
8686
#pragma unroll
8787
for (int it = 0; it < LDGS; it++) {
88-
gamma[it].load_from(params.scale, idx);
88+
if (params.scale != nullptr) {
89+
gamma[it].load_from(params.scale, idx);
90+
} else {
91+
gamma[it].init(1.0f);
92+
}
8993
idx += Ktraits::VEC_COLS_PER_LDG;
9094
}
9195
#pragma unroll 1
@@ -149,7 +153,9 @@ __global__ __launch_bounds__(Ktraits::THREADS_PER_CTA) void ln_bwd_kernel(
149153
compute_t dx_tmp = rs_r * (dy_tmp - (mdyy_local * y_tmp + mdy_local));
150154
dx[it].data.elt[jt] = dx_tmp;
151155
}
152-
dx[it].store_to(params.dx, idx);
156+
if (params.dx != nullptr) {
157+
dx[it].store_to(params.dx, idx);
158+
}
153159
idx += Ktraits::VEC_COLS_PER_LDG;
154160
}
155161
} // end: grid stride loop
@@ -158,7 +164,7 @@ __global__ __launch_bounds__(Ktraits::THREADS_PER_CTA) void ln_bwd_kernel(
158164
idx = r * Ktraits::VEC_COLS + c;
159165
#pragma unroll
160166
for (int it = 0; it < LDGS; it++) {
161-
if (params.dbias) {
167+
if (params.dbias != nullptr) {
162168
dz_sum[it].store_to(params.dbias_part, idx);
163169
}
164170
dzy_sum[it].store_to(params.dscale_part, idx);
@@ -208,13 +214,17 @@ __global__ __launch_bounds__(Ktraits::THREADS_PER_CTA) void ln_bwd_kernel(
208214
}
209215

210216
compute_t *dgamma_part =
211-
static_cast<compute_t *>(params.dscale_part) + bidm * COLS + tidx;
217+
(params.dscale_part != nullptr)
218+
? static_cast<compute_t *>(params.dscale_part) + bidm * COLS + tidx
219+
: nullptr;
212220
for (int jt = 0; jt < NUM_RES; jt++) {
213-
*dgamma_part = cta_dzy_sum[jt];
214-
dgamma_part += Ktraits::THREADS_PER_CTA;
221+
if (dgamma_part != nullptr) {
222+
*dgamma_part = cta_dzy_sum[jt];
223+
dgamma_part += Ktraits::THREADS_PER_CTA;
224+
}
215225
}
216226

217-
if (params.dbias) {
227+
if (params.dbias != nullptr) {
218228
compute_t *dbeta_part =
219229
static_cast<compute_t *>(params.dbias_part) + bidm * COLS + tidx;
220230
for (int jt = 0; jt < NUM_RES; jt++) {
@@ -275,16 +285,22 @@ __launch_bounds__(Kernel_traits::THREADS_PER_CTA) void ln_bwd_finalize_kernel(
275285
index_t idx = row * Kernel_traits::COLS + col;
276286

277287
Vec<compute_t, NUM_ELT> dbeta_part, dgamma_part;
278-
if (params.dbias) {
288+
if (params.dbias != nullptr) {
279289
dbeta_part.load_from(params.dbias_part, idx);
280290
} else {
281291
dbeta_part.init(0.);
282292
}
283-
dgamma_part.load_from(params.dscale_part, idx);
293+
if (params.dscale_part != nullptr) {
294+
dgamma_part.load_from(params.dscale_part, idx);
295+
} else {
296+
dgamma_part.init(0.);
297+
}
284298
#pragma unroll
285299
for (int it = 0; it < NUM_ELT; it++) {
286-
dgamma_local.data.elt[it] += dgamma_part.data.elt[it];
287-
dbeta_local.data.elt[it] += dbeta_part.data.elt[it];
300+
dgamma_local.data.elt[it] += (dgamma_part.data.elt[it]);
301+
if (params.dbias != nullptr) {
302+
dbeta_local.data.elt[it] += (dbeta_part.data.elt[it]);
303+
}
288304
}
289305
}
290306

@@ -360,8 +376,10 @@ __launch_bounds__(Kernel_traits::THREADS_PER_CTA) void ln_bwd_finalize_kernel(
360376
dbeta_out2.data.elt[it] =
361377
Converter<src_t, dst_t>::convert(dbeta_vec2.data.elt[it]);
362378
}
363-
dgamma_out2.store_to(params.dscale, col_out);
364-
if (params.dbias) {
379+
if (params.dscale != nullptr) {
380+
dgamma_out2.store_to(params.dscale, col_out);
381+
}
382+
if (params.dbias != nullptr) {
365383
dbeta_out2.store_to(params.dbias, col_out);
366384
}
367385
}

0 commit comments

Comments
 (0)