Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -1190,12 +1190,51 @@ bool FlashAttnOpInferSymbolicShape(
// return true;
// }

// bool FlashAttnQkvpackedOpInferSymbolicShape(pir::Operation *op,
// pir::InferSymbolicShapeContext
// *infer_context) {
// // pass
// return true;
// }
bool FlashAttnQkvpackedOpInferSymbolicShape(
pir::Operation *op, pir::InferSymbolicShapeContext *infer_context) {
const auto qkv_shape_or_data =
infer_context->GetShapeOrDataForValue(op->operand_source(0));
const auto qkv_dims = qkv_shape_or_data.shape();
ExprVec out_dims;

if (qkv_dims.size() == 4) {
// qkv [total_*, nheads/nheads_k+2, nheads_k, headdim]
out_dims.emplace_back(qkv_dims[0]);
out_dims.emplace_back(qkv_dims[1] - symbol::DimExpr(2) * qkv_dims[2]);
out_dims.emplace_back(qkv_dims[3]);
} else if (qkv_dims.size() == 5) {
// qkv [batchsize, seqlen, nheads/nheads_k+2, nheads_k, headdim]
out_dims.emplace_back(qkv_dims[0]);
out_dims.emplace_back(qkv_dims[1]);
out_dims.emplace_back((qkv_dims[2] - symbol::DimExpr(2)) * qkv_dims[3]);
out_dims.emplace_back(qkv_dims[4]);
} else {
PADDLE_THROW(common::errors::InvalidArgument(
"qkv dims must be 4(unpadded) or 5(padded batch)"));
}

infer_context->SetShapeOrDataForValue(
op->result(0),
symbol::ShapeOrDataDimExprs{symbol::TensorShapeOrDataDimExprs(out_dims)});
infer_context->SetShapeOrDataForValue(
op->result(1),
symbol::ShapeOrDataDimExprs{symbol::TensorShapeOrDataDimExprs(out_dims)});
infer_context->SetShapeOrDataForValue(
op->result(2),
symbol::ShapeOrDataDimExprs{symbol::TensorShapeOrDataDimExprs(out_dims)});

return true;
}

bool FlashAttnVarlenQkvpackedOpInferSymbolicShape(
pir::Operation *op, pir::InferSymbolicShapeContext *infer_context) {
return FlashAttnQkvpackedOpInferSymbolicShape(op, infer_context);
}

bool FlashAttnWithSparseMaskOpInferSymbolicShape(
pir::Operation *op, pir::InferSymbolicShapeContext *infer_context) {
return FlashAttnOpInferSymbolicShape(op, infer_context);
}

// bool FlashAttnUnpaddedOpInferSymbolicShape(pir::Operation *op,
// pir::InferSymbolicShapeContext
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ OP_DECLARE_INFER_SYMBOLIC_SHAPE(FullWithTensor)
OP_DECLARE_INFER_SYMBOLIC_SHAPE(FlashAttn)
// OP_DECLARE_INFER_SYMBOLIC_SHAPE(FusedFeedforward)
// OP_DECLARE_INFER_SYMBOLIC_SHAPE(FusedAttention)
// OP_DECLARE_INFER_SYMBOLIC_SHAPE(FlashAttnQkvpacked)
OP_DECLARE_INFER_SYMBOLIC_SHAPE(FlashAttnQkvpacked)
OP_DECLARE_INFER_SYMBOLIC_SHAPE(FlashAttnVarlenQkvpacked)
OP_DECLARE_INFER_SYMBOLIC_SHAPE(FlashAttnWithSparseMask)
// OP_DECLARE_INFER_SYMBOLIC_SHAPE(FlashAttnUnpadded)
OP_DECLARE_INFER_SYMBOLIC_SHAPE(FusedBatchNormAct)
OP_DECLARE_INFER_SYMBOLIC_SHAPE(FusedBatchNormAct_)
Expand Down
6 changes: 3 additions & 3 deletions paddle/phi/ops/yaml/ops.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1871,7 +1871,7 @@
func : flash_attn_qkvpacked
data_type : qkv
backward : flash_attn_qkvpacked_grad
# interfaces : paddle::dialect::InferSymbolicShapeInterface
interfaces : paddle::dialect::InferSymbolicShapeInterface

- op : flash_attn_unpadded
args : (Tensor q, Tensor k, Tensor v, Tensor cu_seqlens_q, Tensor cu_seqlens_k, Tensor fixed_seed_offset, Tensor attn_mask, int64_t max_seqlen_q, int64_t max_seqlen_k, float scale, float dropout = 0.0, bool causal = false, bool return_softmax = false, bool is_test = false, str rng_name = "")
Expand All @@ -1898,7 +1898,7 @@
data_type : qkv
intermediate : softmax_lse, seed_offset
backward : flash_attn_varlen_qkvpacked_grad
# interfaces : paddle::dialect::InferSymbolicShapeInterface
interfaces : paddle::dialect::InferSymbolicShapeInterface

- op : flash_attn_with_sparse_mask
args : (Tensor q, Tensor k, Tensor v, Tensor attn_mask_start_row_indices, Tensor fixed_seed_offset, float dropout = 0.0, bool causal = false, int attn_mask_start_row = 0, bool return_softmax = false, bool is_test = false, str rng_name = "")
Expand All @@ -1911,7 +1911,7 @@
func : flash_attn_with_sparse_mask
data_type : q
backward : flash_attn_with_sparse_mask_grad
# interfaces : paddle::dialect::InferSymbolicShapeInterface
interfaces : paddle::dialect::InferSymbolicShapeInterface

- op : flatten
args : (Tensor x, int start_axis = 1, int stop_axis = 1)
Expand Down