Files
paddlepaddle--paddle/paddle/phi/infermeta/backward.h
T
2026-07-13 12:40:42 +08:00

883 lines
40 KiB
C++

/* Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
#pragma once
#include <tuple>
#include "paddle/phi/core/meta_tensor.h"
#include "paddle/phi/infermeta/binary.h"
#include "paddle/phi/infermeta/multiary.h"
#include "paddle/phi/infermeta/ternary.h"
#include "paddle/phi/infermeta/unary.h"
namespace phi {
// Common InferMeta Functions for backward operators.
//
// NOTE: The InferMeta Functions in this file are arranged in alphabetic order.
PADDLE_API void AffineGridGradInferMeta(const MetaTensor& output_grad,
const IntArray& outputShape,
bool align_corners,
MetaTensor* input_grad);
PADDLE_API void AngleGradInferMeta(const MetaTensor& x,
const MetaTensor& out_grad,
MetaTensor* x_grad);
PADDLE_API void BatchFCGradInferMeta(const MetaTensor& input,
const MetaTensor& w,
const MetaTensor& bias,
const MetaTensor& out_grad,
MetaTensor* input_grad,
MetaTensor* w_grad,
MetaTensor* bias_grad);
PADDLE_API void BilinearGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& weight,
const MetaTensor& dout,
MetaTensor* dx,
MetaTensor* dy,
MetaTensor* dweight,
MetaTensor* dbias);
PADDLE_API void BmmGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& out_grad,
MetaTensor* x_grad,
MetaTensor* y_grad);
PADDLE_API void ChannelShuffleGradInferMeta(const MetaTensor& out_grad,
int groups,
const std::string& data_format,
MetaTensor* x_grad);
PADDLE_API void ComplexGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& dout,
MetaTensor* dx,
MetaTensor* dy);
PADDLE_API void ConvTransposeGradInferMeta(
const MetaTensor& x,
const MetaTensor& filter,
const MetaTensor& dout,
const std::vector<int>& strides,
const std::vector<int>& paddings,
const std::vector<int>& output_padding,
const std::vector<int>& output_size,
const std::string& padding_algorithm,
int groups,
const std::vector<int>& dilations,
const std::string& data_format,
MetaTensor* dx,
MetaTensor* dfilter);
PADDLE_API void Conv2dTransposeGradInferMeta(
const MetaTensor& x,
const MetaTensor& filter,
const MetaTensor& dout,
const std::vector<int>& strides,
const std::vector<int>& paddings,
const std::vector<int>& output_padding,
const IntArray& output_size,
const std::string& padding_algorithm,
int groups,
const std::vector<int>& dilations,
const std::string& data_format,
MetaTensor* dx,
MetaTensor* dfilter);
PADDLE_API void Conv2dTransposeDoubleGradInferMeta(
const MetaTensor& x,
const MetaTensor& filter,
const MetaTensor& dout,
const MetaTensor& ddx,
const MetaTensor& ddfilter,
const std::vector<int>& strides,
const std::vector<int>& paddings,
const std::vector<int>& output_padding,
const IntArray& output_size,
const std::string& padding_algorithm,
int groups,
const std::vector<int>& dilations,
const std::string& data_format,
MetaTensor* dx,
MetaTensor* dfilter,
MetaTensor* ddout);
PADDLE_API void CropGradInferMeta(const MetaTensor& out_grad,
const MetaTensor& x,
const IntArray& offsets,
MetaTensor* x_grad);
PADDLE_API void CrossEntropyGradInferMeta(const MetaTensor& x,
const MetaTensor& label,
const MetaTensor& out_grad,
bool soft_label,
int ignore_index,
MetaTensor* x_grad,
MetaConfig config = MetaConfig());
PADDLE_API void CrossEntropyGrad2InferMeta(const MetaTensor& x_shape,
const MetaTensor& label,
const MetaTensor& match_x,
const MetaTensor& out_grad,
int ignore_index,
MetaTensor* x_grad,
MetaConfig config = MetaConfig());
PADDLE_API void CrossEntropyWithSoftmaxGradInferMeta(
const MetaTensor& label,
const MetaTensor& softmax,
const MetaTensor& loss_grad,
bool soft_label,
bool use_softmax,
bool numeric_stable_mode,
int ignore_index,
int axis,
MetaTensor* logits_grad,
MetaConfig config = MetaConfig());
PADDLE_API void CSoftmaxWithCrossEntropyGradInferMeta(
const MetaTensor& softmax,
const MetaTensor& label,
const MetaTensor& loss_grad,
int64_t ignore_index,
int rank,
int nranks,
MetaTensor* logits_grad,
MetaConfig config = MetaConfig());
PADDLE_API void CSoftmaxWithMultiLabelCrossEntropyGradInferMeta(
const MetaTensor& softmax,
const MetaTensor& label,
const MetaTensor& smooth_weight,
const MetaTensor& loss_grad,
int64_t ignore_index,
bool sum_multi_label_loss,
int rank,
int nranks,
MetaTensor* logits_grad,
MetaConfig config = MetaConfig());
PADDLE_API void CudnnLSTMGradInferMeta(
const MetaTensor& x,
const MetaTensor& init_h,
const MetaTensor& init_c,
const paddle::optional<std::vector<const MetaTensor*>>& weight_list,
MetaTensor* x_grad,
MetaTensor* init_h_grad,
MetaTensor* init_c_grad,
std::vector<MetaTensor*> weight_list_grad);
PADDLE_API void LinearV2GradInferMeta(const MetaTensor& input,
const MetaTensor& weight,
const MetaTensor& bias,
const MetaTensor& out_grad,
const bool transpose_weight,
MetaTensor* input_grad,
MetaTensor* weight_grad,
MetaTensor* bias_grad);
PADDLE_API void LSTMGradInferMeta(const MetaTensor& input,
const MetaTensor& h0,
const MetaTensor& c0,
const MetaTensor& weight,
const MetaTensor& bias,
MetaTensor* input_grad,
MetaTensor* h0_grad,
MetaTensor* c0_grad,
MetaTensor* weight_grad,
MetaTensor* bias_grad,
MetaConfig config = MetaConfig());
PADDLE_API void DeformableConvGradInferMeta(const MetaTensor& x,
const MetaTensor& offset,
const MetaTensor& filter,
const MetaTensor& mask,
const MetaTensor& out_grad,
const std::vector<int>& strides,
const std::vector<int>& paddings,
const std::vector<int>& dilations,
int deformable_groups,
int groups,
int im2col_step,
MetaTensor* dx,
MetaTensor* offset_grad,
MetaTensor* filter_grad,
MetaTensor* mask_grad);
PADDLE_API void EigGradInferMeta(const MetaTensor& out_w,
const MetaTensor& out_v,
const MetaTensor& dout_w,
const MetaTensor& dout_v,
MetaTensor* dx);
PADDLE_API void EigvalshGradInferMeta(const MetaTensor& out_v,
const MetaTensor& out_w_grad,
const std::string& uplo,
bool is_test,
MetaTensor* x_grad);
PADDLE_API void EmbeddingGradInferMeta(const MetaTensor& x,
const MetaTensor& weight,
MetaTensor* out);
PADDLE_API void FFTC2RGradInferMeta(const MetaTensor& x,
const std::vector<int64_t>& axes,
const std::string& normalization,
bool forward,
int64_t last_dim_size,
MetaTensor* out,
MetaConfig = MetaConfig());
PADDLE_API void FillDiagonalGradInferMeta(
const MetaTensor& dout, float value, int offset, bool wrap, MetaTensor* dx);
PADDLE_API void FillDiagonalTensorGradInferMeta(const MetaTensor& out_grad,
int64_t offset,
int dim1,
int dim2,
MetaTensor* x_grad);
PADDLE_API void FlashAttnGradInferMeta(const MetaTensor& q,
const MetaTensor& k,
const MetaTensor& v,
MetaTensor* dq,
MetaTensor* dk,
MetaTensor* dv);
PADDLE_API void FlashAttnQKVPackedGradInferMeta(const MetaTensor& qkv,
MetaTensor* dq);
PADDLE_API void FlashAttnV3GradInferMeta(const MetaTensor& q,
const MetaTensor& k,
const MetaTensor& v,
MetaTensor* dq,
MetaTensor* dk,
MetaTensor* dv);
PADDLE_API void FlashAttnV3VarlenGradInferMeta(const MetaTensor& q,
const MetaTensor& k,
const MetaTensor& v,
MetaTensor* dq,
MetaTensor* dk,
MetaTensor* dv);
PADDLE_API void Flatten2GradInferMeta(const MetaTensor& x,
const MetaTensor& x_shape,
const MetaTensor& out_grad,
int axis,
MetaTensor* x_grad);
PADDLE_API void FusedDropoutAddGradInferMeta(const MetaTensor& seed_offset,
const MetaTensor& out_grad,
MetaTensor* x_grad,
MetaTensor* y_grad);
PADDLE_API void FusedRopeGradInferMeta(const MetaTensor& sin,
const MetaTensor& cos,
const MetaTensor& position_ids,
const MetaTensor& dout_q,
const MetaTensor& dout_k,
const MetaTensor& dout_v,
bool use_neox_rotary_style,
bool time_major,
float rotary_emb_base,
MetaTensor* dq,
MetaTensor* dk,
MetaTensor* dv);
PADDLE_API void GatherNdGradInferMeta(const MetaTensor& x,
const MetaTensor& index,
const MetaTensor& out_grad,
MetaTensor* x_grad);
PADDLE_API void GeneralUnaryGradInferMeta(const MetaTensor& x, MetaTensor* dx);
PADDLE_API void GeneralBinaryGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
MetaTensor* dx,
MetaTensor* dy);
PADDLE_API void GeneralTernaryGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& z,
MetaTensor* dx,
MetaTensor* dy,
MetaTensor* dz);
PADDLE_API void GeneralQuaternaryGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& z,
const MetaTensor& k,
MetaTensor* dx,
MetaTensor* dy,
MetaTensor* dz,
MetaTensor* dk);
PADDLE_API void GeneralQuinaryGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& z,
const MetaTensor& k,
const MetaTensor& l,
MetaTensor* dx,
MetaTensor* dy,
MetaTensor* dz,
MetaTensor* dk,
MetaTensor* dl);
PADDLE_API void GruGradInferMeta(const MetaTensor& input,
const MetaTensor& h0,
const MetaTensor& weight,
const MetaTensor& bias,
MetaTensor* input_grad,
MetaTensor* h0_grad,
MetaTensor* weight_grad,
MetaTensor* bias_grad,
MetaConfig config = MetaConfig());
PADDLE_API void GruUnitGradInferMeta(const MetaTensor& input,
const MetaTensor& hidden_prev,
const MetaTensor& weight,
const MetaTensor& bias,
MetaTensor* input_grad,
MetaTensor* hidden_prev_grad,
MetaTensor* weight_grad,
MetaTensor* bias_grad,
MetaConfig config = MetaConfig());
PADDLE_API void GumbelSoftmaxGradInferMeta(const MetaTensor& out,
const MetaTensor& dout,
int axis,
MetaTensor* dx);
PADDLE_API void InstanceNormGradInferMeta(const MetaTensor& x,
const MetaTensor& scale,
const MetaTensor& bias,
const MetaTensor& saved_mean,
const MetaTensor& saved_variance,
const MetaTensor& y_grad,
float epsilon,
MetaTensor* x_grad,
MetaTensor* scale_grad,
MetaTensor* bias_grad);
PADDLE_API void InstanceNormDoubleGradInferMeta(
const MetaTensor& x,
const MetaTensor& scale,
const MetaTensor& saved_mean,
const MetaTensor& saved_variance,
const MetaTensor& dy,
const MetaTensor& ddx,
const MetaTensor& ddscale,
const MetaTensor& ddbias,
float epsilon,
MetaTensor* dx,
MetaTensor* dscale,
MetaTensor* ddy);
PADDLE_API void InverseGradInferMeta(const MetaTensor& out,
const MetaTensor& dout,
MetaTensor* dx);
PADDLE_API void KernelWithXShapeInferMeta(const MetaTensor& x,
const MetaTensor& out,
MetaTensor* dx);
PADDLE_API void GradSameWithXInferMeta(const MetaTensor& xshape,
const MetaTensor& out,
MetaTensor* dx);
PADDLE_API void LodResetGradInferMeta(const MetaTensor& x,
const MetaTensor& out_grad,
const std::vector<int>& target_lod,
bool append,
MetaTensor* x_grad,
MetaConfig config = MetaConfig());
PADDLE_API void LUGradInferMeta(const MetaTensor& x,
const MetaTensor& out,
const MetaTensor& pivots,
const MetaTensor& out_grad,
bool pivot,
MetaTensor* x_grad);
PADDLE_API void LUUnpackGradInferMeta(const MetaTensor& x,
const MetaTensor& pivots,
const MetaTensor& l,
const MetaTensor& u,
const MetaTensor& pmat,
const MetaTensor& l_grad,
const MetaTensor& u_grad,
bool unpack_ludata,
bool unpack_pivots,
MetaTensor* x_grad);
PADDLE_API void MarginCrossEntropyGradInferMeta(const MetaTensor& logits,
const MetaTensor& label,
const MetaTensor& softmax,
const MetaTensor& loss_grad,
bool return_softmax,
int ring_id,
int rank,
int nranks,
float margin1,
float margin2,
float margin3,
float scale,
MetaTensor* logits_grad);
PADDLE_API void MatchMatrixTensorGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
const MetaTensor& w,
const MetaTensor& tmp,
const MetaTensor& out_grad,
int dim_t,
MetaTensor* x_grad,
MetaTensor* y_grad,
MetaTensor* w_grad);
PADDLE_API void MaxPoolWithIndexGradInferMeta(
const MetaTensor& x,
const MetaTensor& mask,
const MetaTensor& dout,
const std::vector<int>& kernel_size,
const std::vector<int>& strides,
const std::vector<int>& paddings,
const std::vector<int>& dilations,
bool global_pooling,
bool adaptive,
bool ceil_mode,
MetaTensor* dx);
PADDLE_API void MedianGradInferMeta(const MetaTensor& x,
const MetaTensor& median_data,
const MetaTensor& median_index,
const MetaTensor& out_grad,
const IntArray& axes,
bool keep_dim,
const std::string& mode,
MetaTensor* x_grad);
PADDLE_API void MeshgridGradInferMeta(
const std::vector<const MetaTensor*>& inputs,
const std::vector<const MetaTensor*>& outputs_grad,
std::vector<MetaTensor*> inputs_grad);
PADDLE_API void MemoryEfficientAttentionGradInferMeta(
const MetaTensor& query,
const MetaTensor& key,
const MetaTensor& value,
const MetaTensor& bias,
const MetaTensor& cu_seqlens_q,
const MetaTensor& cu_seqlens_k,
const MetaTensor& output,
const MetaTensor& logsumexp,
const MetaTensor& seed_and_offset,
const MetaTensor& output_grad,
const Scalar& max_seqlen_q,
const Scalar& max_seqlen_k,
const bool causal,
const double dropout_p,
const float scale,
MetaTensor* query_grad,
MetaTensor* key_grad,
MetaTensor* value_grad,
MetaTensor* bias_grad);
PADDLE_API void MoeCombineGradInferMeta(
const MetaTensor& x,
const MetaTensor& combine_weights,
const MetaTensor& scatter_index,
const MetaTensor& grad_y,
MetaTensor* grad_x,
MetaTensor* grad_combine_weights_helper);
PADDLE_API void MoeCombineAutoGradInferMeta(
const MetaTensor& x,
const MetaTensor& combine_weights,
const MetaTensor& scatter_index,
const MetaTensor& grad_y,
MetaTensor* grad_x,
MetaTensor* grad_combine_weights_helper,
MetaTensor* grad_scatter_index);
// Tensor combine_weights_out, Tensor scatter_index, Tensor scatter_index_rev,
// Tensor expert_offset, Tensor expert_offset_local, Tensor y_grad, Tensor
// combine_weights_out_grad, int64_t k, int64_t capacity, bool use_pad, int64_t
// expert_start_index, int64_t expert_end_index)
// output : Tensor(x_grad), Tensor(combine_weights_grad)
PADDLE_API void MoeGateDispatchPartialNoSoftmaxTopkGradInferMeta(
const MetaTensor& combine_weights_out,
const MetaTensor& scatter_index,
const MetaTensor& scatter_index_rev,
const MetaTensor& expert_offset,
const MetaTensor& expert_offset_local,
const MetaTensor& y_grad,
const MetaTensor& combine_weights_out_grad,
int64_t k,
int64_t capacity,
bool use_pad,
int64_t expert_start_index,
int64_t expert_end_index,
MetaTensor* x_grad,
MetaTensor* combine_weights_grad);
PADDLE_API void MoeGateDispatchPermuteGradInferMeta(
const MetaTensor& combine_weights,
const MetaTensor& scatter_index,
const MetaTensor& expert_id,
const MetaTensor& y_grad,
const MetaTensor& combine_weights_grad,
int64_t k,
int64_t capacity,
int64_t world_size,
MetaTensor* x_grad,
MetaTensor* gate_logits_grad);
PADDLE_API void MultiDotGradInferMeta(const std::vector<const MetaTensor*>& x,
const MetaTensor& out_grad,
std::vector<MetaTensor*> x_grad);
PADDLE_API void MultiplexGradInferMeta(const MetaTensor& ids,
const MetaTensor& out_grad,
std::vector<MetaTensor*> ins_grad);
PADDLE_API void NanmedianGradInferMeta(const MetaTensor& x,
const MetaTensor& median_data,
const MetaTensor& median_index,
const MetaTensor& out_grad,
const IntArray& axes,
bool keep_dim,
const std::string& mode,
MetaTensor* x_grad);
PADDLE_API void PartialConcatGradInferMeta(
const std::vector<const MetaTensor*>& xs, std::vector<MetaTensor*> x_grads);
PADDLE_API void PartialSumGradInferMeta(
const std::vector<const MetaTensor*>& xs, std::vector<MetaTensor*> x_grads);
PADDLE_API void NceGradInferMeta(const MetaTensor& input,
const MetaTensor& bias,
const MetaTensor& weight,
MetaTensor* input_grad,
MetaTensor* bias_grad,
MetaTensor* weight_grad);
PADDLE_API void NllLossGradInferMeta(const MetaTensor& input,
const MetaTensor& label,
const MetaTensor& weight,
const MetaTensor& total_weight,
const MetaTensor& out_grad,
int64_t ignore_index,
const std::string& reduction,
MetaTensor* input_grad,
MetaConfig config = MetaConfig());
PADDLE_API void PixelUnshuffleGradInferMeta(const MetaTensor& out_grad,
int downscale_factor,
const std::string& data_format,
MetaTensor* x_grad);
PADDLE_API void PreluGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
MetaTensor* dx,
MetaTensor* dy);
PADDLE_API void OverlapAddGradInferMeta(const MetaTensor& x,
const MetaTensor& out_grad,
int hop_length,
int axis,
MetaTensor* x_grad);
PADDLE_API void PsroiPoolGradInferMeta(const MetaTensor& x,
const MetaTensor& rois,
const MetaTensor& rois_num,
const MetaTensor& dout,
int pooled_height,
int pooled_width,
int output_channels,
float spatial_scale,
MetaTensor* dx);
PADDLE_API void RankAttentionGradInferMeta(const MetaTensor& x,
const MetaTensor& rank_offset,
const MetaTensor& rank_param,
const MetaTensor& input_help,
const MetaTensor& ins_rank,
const MetaTensor& out_grad,
int max_rank,
int max_size,
MetaTensor* rank_param_grad);
PADDLE_API void RealAndImagGradInferMeta(const MetaTensor& out_grad,
MetaTensor* dx);
PADDLE_API void ReshapeDoubleGradInferMeta(const MetaTensor& out_grad,
const MetaTensor& x_grad_grad,
MetaTensor* out_grad_grad);
PADDLE_API void FusedRmsNormQuantGradInferMeta(const MetaTensor& x,
const MetaTensor& norm_weight,
const MetaTensor& norm_bias,
MetaTensor* x_grad,
MetaTensor* norm_weight_grad,
MetaTensor* norm_bias_grad);
PADDLE_API void RMSNormGradInferMeta(
const MetaTensor& x,
const MetaTensor& scale,
const MetaTensor& invvar,
const MetaTensor& y_grad,
const std::vector<int64_t>& normalized_shape,
double epsilon,
MetaTensor* x_grad,
MetaTensor* scale_grad);
PADDLE_API void RnnGradInferMeta(
const MetaTensor& x,
const std::vector<const MetaTensor*>& pre_state,
const std::vector<const MetaTensor*>& weight_list,
MetaTensor* x_grad,
std::vector<MetaTensor*> pre_state_grad,
std::vector<MetaTensor*> weight_grad_list);
PADDLE_API void RowConvGradInferMeta(const MetaTensor& out_grad,
const MetaTensor& filter,
MetaTensor* x_grad,
MetaTensor* filter_grad);
PADDLE_API void ScatterGradInferMeta(const MetaTensor& index,
const MetaTensor& updates,
const MetaTensor& out_grad,
bool overwrite,
MetaTensor* x_grad,
MetaTensor* updates_grad);
PADDLE_API void ScatterNdAddGradInferMeta(const MetaTensor& index,
const MetaTensor& updates,
const MetaTensor& out_grad,
MetaTensor* x_grad,
MetaTensor* updates_grad);
PADDLE_API void SequenceConvGradInferMeta(const MetaTensor& x,
const MetaTensor& padding_data,
const MetaTensor& filter,
const MetaTensor& out_grad,
int context_length,
bool padding_trainable,
int context_start,
int context_stride,
MetaTensor* x_grad,
MetaTensor* padding_data_grad,
MetaTensor* filter_grad);
PADDLE_API void ShuffleBatchGradInferMeta(const MetaTensor& shuffle_idx,
const MetaTensor& out_grad,
int startup_seed,
MetaTensor* x_grad);
PADDLE_API void SpectralNormGradInferMeta(const MetaTensor& weight,
const MetaTensor& u,
const MetaTensor& v,
const MetaTensor& out_grad,
int dim,
int power_iters,
float eps,
MetaTensor* weight_grad);
PADDLE_API void StackGradInferMeta(const MetaTensor& out_grad,
int axis,
std::vector<MetaTensor*> x_grad);
PADDLE_API void SwiGLUGradInferMeta(const MetaTensor& x,
const MetaTensor& y,
MetaTensor* x_grad,
MetaTensor* y_grad);
PADDLE_API void TransposeInferMeta(const MetaTensor& x,
const std::vector<int>& axis,
MetaTensor* out);
PADDLE_API void TransLayoutGradInferMeta(const MetaTensor& x,
const MetaTensor& out_grad,
const std::vector<int>& axis,
MetaTensor* out);
PADDLE_API void UniformRandomInplaceGradInferMeta(const MetaTensor& out_grad,
float min,
float max,
int seed,
int diag_num,
int diag_step,
float diag_val,
MetaTensor* x_grad);
PADDLE_API void RandomGradInferMeta(const MetaTensor& out_grad,
MetaTensor* x_grad);
PADDLE_API void UnStackGradInferMeta(
const std::vector<const MetaTensor*>& out_grad,
int axis,
MetaTensor* x_grad);
PADDLE_API void WeightOnlyLinearGradInferMeta(const MetaTensor& x,
const MetaTensor& weight,
const MetaTensor& bias,
const MetaTensor& weight_scale,
const MetaTensor& out_grad,
const std::string& weight_dtype,
const int32_t arch,
const int32_t group_size,
MetaTensor* x_grad);
PADDLE_API void YoloLossGradInferMeta(const MetaTensor& x,
const MetaTensor& gt_box,
const MetaTensor& gt_label,
const MetaTensor& gt_score,
const MetaTensor& objectness_mask,
const MetaTensor& gt_match_mask,
const MetaTensor& loss_grad,
const std::vector<int>& anchors,
const std::vector<int>& anchor_mask,
int class_num,
float ignore_thresh,
int downsample_ratio,
bool use_label_smooth,
float scale_x_y,
MetaTensor* x_grad,
MetaTensor* gt_box_grad,
MetaTensor* gt_label_grad,
MetaTensor* gt_score_grad);
PADDLE_API void IndexAddGradInferMeta(const MetaTensor& index,
const MetaTensor& add_value,
const MetaTensor& out_grad,
int axis,
MetaTensor* x_grad,
MetaTensor* add_tensor_grad);
PADDLE_API void IndexPutGradInferMeta(
const MetaTensor& x,
const std::vector<const MetaTensor*>& indices,
const MetaTensor& value,
const MetaTensor& out_grad,
bool accumulate,
MetaTensor* x_grad,
MetaTensor* value_grad);
PADDLE_API void IndexElementwisePutGradInferMeta(
const MetaTensor& x,
const std::vector<const MetaTensor*>& index,
const MetaTensor& out_grad,
const std::vector<int64_t>& input_dims,
const std::vector<int64_t>& input_strides,
const std::vector<int64_t>& index_dims,
const std::vector<int64_t>& index_strides,
const int64_t slice_offset,
MetaTensor* x_grad);
PADDLE_API void IndexElementwisePutWithTensorGradInferMeta(
const MetaTensor& x,
const std::vector<const MetaTensor*>& index,
const MetaTensor& value,
const MetaTensor& out_grad,
const std::vector<int64_t>& input_dims,
const std::vector<int64_t>& input_strides,
const std::vector<int64_t>& index_dims,
const std::vector<int64_t>& index_strides,
const int64_t slice_offset,
MetaTensor* x_grad,
MetaTensor* value_grad);
PADDLE_API void SetValueGradInferMeta(const MetaTensor& out_grad,
const MetaTensor& value,
MetaTensor* x_grad,
MetaTensor* value_grad);
PADDLE_API void CalAuxLossGradInferMeta(const MetaTensor& gate_prob,
const MetaTensor& seqlen_float,
const MetaTensor& ce,
const MetaTensor& l_aux_loss_grad,
const int64_t num_experts,
const bool use_group,
const int64_t moe_k,
MetaTensor* gate_prob_grad);
PADDLE_API void MoeGateDispatchGradInferMeta(
const MetaTensor& combine_weights,
const MetaTensor& scatter_index,
const MetaTensor& expert_id,
const MetaTensor& y_grad,
const MetaTensor& combine_weights_grad,
const int64_t k,
const int64_t capacity,
const bool use_pad,
MetaTensor* x_grad,
MetaTensor* gate_logits_grad);
PADDLE_API void MoeGateDispatchAutoGradInferMeta(
const MetaTensor& combine_weights,
const MetaTensor& scatter_index,
const MetaTensor& expert_id,
const MetaTensor& y_grad,
const MetaTensor& combine_weights_grad,
const int64_t k,
const int64_t capacity,
const bool use_pad,
MetaTensor* x_grad,
MetaTensor* gate_logits_grad);
PADDLE_API void FusedRMSNormGradInferMeta(const MetaTensor& x,
const MetaTensor& scale,
const MetaTensor& invvar,
const MetaTensor& dy,
float epsilon,
MetaTensor* x_grad,
MetaTensor* scale_grad);
PADDLE_API void IndexElementwiseGetGradInferMeta(
const MetaTensor& x,
const std::vector<const MetaTensor*>& index,
const MetaTensor& out_grad,
const std::vector<int64_t>& input_dims,
const std::vector<int64_t>& input_strides,
const std::vector<int64_t>& index_dims,
const std::vector<int64_t>& index_strides,
const int64_t slice_offset,
const bool accumulate,
const bool is_combined,
MetaTensor* x_grad);
PADDLE_API void FastLayerNormGradInfermeta(const MetaTensor& x,
const MetaTensor& scale,
const MetaTensor& mean,
const MetaTensor& invvar,
const MetaTensor& y_grad,
float epsilon,
MetaTensor* x_grad,
MetaTensor* scale_grad,
MetaTensor* bias_grad);
PADDLE_API void FastRMSNormGradInfermeta(const MetaTensor& x,
const MetaTensor& scale,
const MetaTensor& invvar,
const MetaTensor& y_grad,
float epsilon,
MetaTensor* x_grad,
MetaTensor* scale_grad);
} // namespace phi