From a7392a0ff944a1f40a26023c53c80b10f263421f Mon Sep 17 00:00:00 2001 From: AIbin <37361953+chang-wenbin@users.noreply.github.com> Date: Thu, 11 Sep 2025 10:46:09 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90Inference=20Optimize=E3=80=91DeepSeek-?= =?UTF-8?q?V3-model=20MLA=20Optimize=20(#3886)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * support MLA chunk_size auto search & cuda_graph --- .../get_block_shape_and_split_kv_block.cu | 222 +++++++++++++++--- custom_ops/gpu_ops/cpp_extensions.cc | 17 +- custom_ops/gpu_ops/env.h | 11 +- custom_ops/gpu_ops/helper.h | 8 + .../mla_attn/batch_mla_with_paged_kv_cache.cu | 21 +- .../mla_attn/batch_mla_with_paged_kv_cache.h | 4 +- custom_ops/gpu_ops/mla_attn/mainloop_load.cuh | 23 +- custom_ops/gpu_ops/mla_attn/mainloop_mma.cuh | 12 +- custom_ops/gpu_ops/mla_attn/mla_hopper.cuh | 200 ++++------------ custom_ops/gpu_ops/mla_attn/utils.cuh | 14 +- .../gpu_ops/multi_head_latent_attention.cu | 58 +---- docs/quantization/wint2.png | Bin 82801 -> 0 bytes docs/zh/quantization/wint2.png | Bin 82801 -> 0 bytes fastdeploy/model_executor/forward_meta.py | 4 + .../layers/attention/append_attn_backend.py | 2 + .../layers/attention/flash_attn_backend.py | 2 + .../layers/attention/mla_attention_backend.py | 24 +- .../ops/get_block_shape_and_split_kv_block.py | 8 +- fastdeploy/spec_decode/mtp.py | 10 + fastdeploy/worker/gpu_model_runner.py | 20 +- tests/layers/test_append_attention.py | 10 +- .../test_append_attention_with_output.py | 9 +- tests/operators/test_tree_mask.py | 6 +- 23 files changed, 375 insertions(+), 310 deletions(-) delete mode 100644 docs/quantization/wint2.png delete mode 100644 docs/zh/quantization/wint2.png diff --git a/custom_ops/gpu_ops/append_attn/get_block_shape_and_split_kv_block.cu b/custom_ops/gpu_ops/append_attn/get_block_shape_and_split_kv_block.cu index dbe072250..2e2e8c7ba 100644 --- a/custom_ops/gpu_ops/append_attn/get_block_shape_and_split_kv_block.cu +++ b/custom_ops/gpu_ops/append_attn/get_block_shape_and_split_kv_block.cu @@ -11,10 +11,11 @@ // 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. - +#include "cute/tensor.hpp" #include "helper.h" #include "paddle/extension.h" #include "paddle/phi/core/memory/memcpy.h" +#include "utils.cuh" template __global__ void @@ -116,6 +117,93 @@ void GetMaxLen(const paddle::Tensor &seq_lens_tensor, max_len_tensor.data(), batch_size); } +template +__global__ void search_chunk_size_for_mla( + const int *__restrict__ seq_lens_q, + const int *__restrict__ seq_lens_encoder, + const int *__restrict__ seq_lens_decoder, + int *__restrict__ num_blocks_x, + int *__restrict__ res_chunk_size, + const int bsz, + const int set_chunk_size, + const int block_size, + const int sm_cout) { + const uint32_t conf_id = threadIdx.x; + int gridx = 0; + if (set_chunk_size > 0 && conf_id == 0) { + for (uint32_t bid = 0; bid < bsz; bid++) { + int seq_len = seq_lens_q[bid]; + int seq_len_encoder = seq_lens_encoder[bid]; + int seq_len_decoder = seq_lens_decoder[bid] + seq_len; + if (seq_len == 0 || seq_len_encoder > 0) continue; + + int loop_times; + loop_times = cute::ceil_div(seq_len_decoder, set_chunk_size); + gridx += loop_times; + } + *num_blocks_x = gridx; + *res_chunk_size = set_chunk_size; + } else if (conf_id < config_size) { + __shared__ int gridx_shared[config_size]; + // chunk_size is a multiple of 64 + const int chunk_size = block_size << conf_id; + for (uint32_t bid = 0; bid < bsz; bid++) { + int seq_len = seq_lens_q[bid]; + int seq_len_encoder = seq_lens_encoder[bid]; + int seq_len_decoder = seq_lens_decoder[bid] + seq_len; + if (seq_len == 0 || seq_len_encoder > 0) continue; + + int loop_times; + loop_times = cute::ceil_div(seq_len_decoder, chunk_size); + gridx += loop_times; + } + gridx_shared[conf_id] = gridx; + __syncthreads(); + if (threadIdx.x == 0) { + uint32_t res_id = 0; + uint32_t max_last_wave_block = 0; + for (uint32_t i = 1; i < config_size; i++) { + uint32_t last_wave_block = gridx_shared[i] % sm_cout; + if (last_wave_block >= max_last_wave_block) { + res_id = i; + max_last_wave_block = last_wave_block; + } + } + *num_blocks_x = gridx_shared[res_id]; + *res_chunk_size = block_size << res_id; + } + } +} + +__global__ void split_block_for_mla(const int *__restrict__ seq_lens_q, + const int *__restrict__ seq_lens_encoder, + const int *__restrict__ seq_lens_decoder, + int *__restrict__ batch_ids, + int *__restrict__ tile_ids_per_batch, + const int bsz, + const int chunk_size) { + if (threadIdx.x == 0) { + int index = 0; + for (uint32_t bid = 0; bid < bsz; bid++) { + int seq_len = seq_lens_q[bid]; + int seq_len_encoder = seq_lens_encoder[bid]; + int seq_len_decoder = seq_lens_decoder[bid] + seq_len; + + if (seq_len == 0) continue; + + int loop_times; + loop_times = cute::ceil_div(seq_len_decoder, chunk_size); + if (seq_len_encoder > 0) { + loop_times = 0; + } + for (uint32_t tile_id = 0; tile_id < loop_times; tile_id++) { + batch_ids[index] = bid; + tile_ids_per_batch[index++] = tile_id; + } + } + } +} + __global__ void split_q_block(const int *__restrict__ seq_lens_q, const int *__restrict__ seq_lens_encoder, int *__restrict__ batch_ids, @@ -197,7 +285,9 @@ void GetBlockShapeAndSplitKVBlock( const paddle::Tensor &seq_lens_this_time, paddle::Tensor &decoder_batch_ids, // Inplace paddle::Tensor &decoder_tile_ids_per_batch, // Inplace - paddle::Tensor &decoder_num_blocks_x_cpu, // Inplace, Pinned Memory + paddle::Tensor &decoder_num_blocks_cpu, // Inplace, Pinned Memory + paddle::Tensor &decoder_num_blocks_device, // Inplace + paddle::Tensor &decoder_chunk_size_device, // Inplace paddle::Tensor &max_len_tensor_cpu, // Inplace, CPU paddle::Tensor &encoder_batch_ids, // Inplace paddle::Tensor &encoder_tile_ids_per_batch, // Inplace @@ -230,8 +320,6 @@ void GetBlockShapeAndSplitKVBlock( int max_system_len = max_len_cpu_ptr[6]; int max_just_dec_len_without_system = max_len_cpu_ptr[7]; - - auto max_len_kv = GetEmptyTensor({1}, paddle::DataType::INT32, seq_lens_decoder.place()); get_max_len_kv_ernel<128><<<1, 128, 0, stream>>>( @@ -241,6 +329,106 @@ void GetBlockShapeAndSplitKVBlock( max_len_kv_cpu.copy_(max_len_kv, max_len_kv_cpu.place(), false); + // decoder + if (max_dec_len_this_time > 0) { + const bool mla_use_tensorcore = GetMlaUseTensorcore(); + if (mla_use_tensorcore && group_size <= 64) { + const int set_chunk_size = get_mla_dec_chunk_size(bsz); + + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync( + decoder_chunk_size_device.data(), 64, sizeof(int32_t), stream)); + + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync( + decoder_num_blocks_device.data(), 0, sizeof(int32_t), stream)); + + int device; + cudaGetDevice(&device); + int sm_cout; + cudaDeviceGetAttribute(&sm_cout, cudaDevAttrMultiProcessorCount, device); + constexpr int config_size = + 12; // search space for chunk size:[64, 128, 256, ... 131072] + + search_chunk_size_for_mla + <<<1, 32, 0, stream>>>(seq_lens_this_time.data(), + seq_lens_encoder.data(), + seq_lens_decoder.data(), + decoder_num_blocks_device.data(), + decoder_chunk_size_device.data(), + bsz, + set_chunk_size, + block_size, + sm_cout); + + decoder_num_blocks_cpu.copy_( + decoder_num_blocks_device, decoder_num_blocks_cpu.place(), false); + auto decoder_chunk_size_cpu = + decoder_chunk_size_device.copy_to(paddle::CPUPlace(), false); + const int chunk_size = decoder_chunk_size_cpu.data()[0]; + + // NOTE: (changwenbin) When using auto_chunk, + // decode_max_tile_size must take into account the maximum case, where * 1024 can cover 128K. + // const uint32_t decoder_batch_shape = seq_lens_decoder.dims()[0] * 1024; + + const uint32_t decoder_max_tile_size_per_bs_q = + div_up((decoder_step_token_num * group_size), decoder_block_shape_q); + const uint32_t decoder_batch_shape = + bsz * 1024 * decoder_max_tile_size_per_bs_q; + + PADDLE_ENFORCE_GPU_SUCCESS( + cudaMemsetAsync(decoder_batch_ids.data(), + 0, + decoder_batch_shape * sizeof(int32_t), + stream)); + PADDLE_ENFORCE_GPU_SUCCESS( + cudaMemsetAsync(decoder_tile_ids_per_batch.data(), + 0, + decoder_batch_shape * sizeof(int32_t), + stream)); + + + split_block_for_mla<<<1, 32, 0, stream>>>( + seq_lens_this_time.data(), + seq_lens_encoder.data(), + seq_lens_decoder.data(), + decoder_batch_ids.data(), + decoder_tile_ids_per_batch.data(), + bsz, + chunk_size); + + } else { + // Note:(changwenbin)In order to adapt to cudagraph, the maximum value should be taken here + const uint32_t decoder_max_tile_size_per_bs_q = div_up((decoder_step_token_num * group_size), decoder_block_shape_q); + const uint32_t decoder_batch_shape = bsz * 1024 * decoder_max_tile_size_per_bs_q; + + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync(decoder_batch_ids.data(), 0, decoder_batch_shape * sizeof(int32_t), stream)); + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync(decoder_tile_ids_per_batch.data(), 0, decoder_batch_shape * sizeof(int32_t), stream)); + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync(decoder_num_blocks_device.data(), 0, sizeof(int32_t), stream)); + + split_q_block<<<1, 32, 0, stream>>>( + seq_lens_this_time.data(), + seq_lens_encoder.data(), + decoder_batch_ids.data(), + decoder_tile_ids_per_batch.data(), + decoder_num_blocks_device.data(), + bsz, + decoder_block_shape_q, + group_size); + + decoder_num_blocks_cpu.copy_( + decoder_num_blocks_device, decoder_num_blocks_cpu.place(), false); + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync( + decoder_chunk_size_device.data(), 64, sizeof(int32_t), stream)); + } + } else { + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync( + decoder_chunk_size_device.data(), 64, sizeof(int32_t), stream)); + PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync( + decoder_num_blocks_device.data(), 0, sizeof(int32_t), stream)); + decoder_num_blocks_cpu.copy_( + decoder_num_blocks_device, decoder_num_blocks_cpu.place(), false); + } + + // encoder if (max_enc_len_this_time > 0) { const uint32_t max_tile_size_per_bs_kv = div_up(max_enc_dec_len_this_time, block_size); const uint32_t kv_batch_shape = bsz * max_tile_size_per_bs_kv; @@ -272,28 +460,6 @@ void GetBlockShapeAndSplitKVBlock( encoder_num_blocks_x_cpu.copy_(encoder_num_blocks_x, encoder_num_blocks_x_cpu.place(), false); } - if (max_just_dec_len_this_time > 0) { - // Clear buffer - const uint32_t decoder_max_tile_size_per_bs_q = div_up((decoder_step_token_num * group_size), decoder_block_shape_q); - const uint32_t decoder_batch_shape = bsz * decoder_max_tile_size_per_bs_q; - PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync(decoder_batch_ids.data(), 0, decoder_batch_shape * sizeof(int32_t), stream)); - PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync(decoder_tile_ids_per_batch.data(), 0, decoder_batch_shape * sizeof(int32_t), stream)); - PADDLE_ENFORCE_GPU_SUCCESS(cudaMemsetAsync(decoder_num_blocks_x_cpu.data(), 0, sizeof(int32_t), stream)); - - auto decoder_num_blocks_x = - GetEmptyTensor({1}, paddle::DataType::INT32, seq_lens_encoder.place()); - split_q_block<<<1, 32, 0, stream>>>( - seq_lens_this_time.data(), - seq_lens_encoder.data(), - decoder_batch_ids.data(), - decoder_tile_ids_per_batch.data(), - decoder_num_blocks_x.data(), - bsz, - decoder_block_shape_q, - group_size); - decoder_num_blocks_x_cpu.copy_(decoder_num_blocks_x, decoder_num_blocks_x_cpu.place(), false); - } - } PD_BUILD_STATIC_OP(get_block_shape_and_split_kv_block) @@ -303,7 +469,9 @@ PD_BUILD_STATIC_OP(get_block_shape_and_split_kv_block) "seq_lens_this_time", "decoder_batch_ids", "decoder_tile_ids_per_batch", - "decoder_num_blocks_x_cpu", + "decoder_num_blocks_cpu", + "decoder_num_blocks_device", + "decoder_chunk_size_device", "max_len_tensor_cpu", "encoder_batch_ids", "encoder_tile_ids_per_batch", diff --git a/custom_ops/gpu_ops/cpp_extensions.cc b/custom_ops/gpu_ops/cpp_extensions.cc index a8348fed1..1d977f50a 100644 --- a/custom_ops/gpu_ops/cpp_extensions.cc +++ b/custom_ops/gpu_ops/cpp_extensions.cc @@ -63,7 +63,7 @@ std::vector AppendAttention( const paddle::Tensor &kv_num_blocks, const paddle::Tensor &decoder_batch_ids, const paddle::Tensor &decoder_tile_ids_per_batch, - const paddle::Tensor &decoder_num_blocks, + const paddle::Tensor &decoder_num_blocks_cpu, const paddle::Tensor &set_max_lengths, const paddle::Tensor &max_len_kv, const paddle::optional &rotary_embs, const paddle::optional &attn_mask, @@ -105,7 +105,7 @@ void AppendAttentionWithOutput( const paddle::Tensor &kv_num_blocks, const paddle::Tensor &decoder_batch_ids, const paddle::Tensor &decoder_tile_ids_per_batch, - const paddle::Tensor &decoder_num_blocks, + const paddle::Tensor &decoder_num_blocks_cpu, const paddle::Tensor &set_max_lengths, const paddle::Tensor &max_len_kv, paddle::Tensor &fmha_out, const paddle::optional &rotary_embs, @@ -305,7 +305,9 @@ void GetBlockShapeAndSplitKVBlock( const paddle::Tensor &seq_lens_this_time, paddle::Tensor &decoder_batch_ids, // Inplace paddle::Tensor &decoder_tile_ids_per_batch, // Inplace - paddle::Tensor &decoder_num_blocks_x_cpu, // Inplace, Pinned Memory + paddle::Tensor &decoder_num_blocks_cpu, // Inplace, Pinned Memory + paddle::Tensor &decoder_num_blocks_device, // Inplace + paddle::Tensor &decoder_chunk_size_device, // Inplace paddle::Tensor &max_len_tensor_cpu, // Inplace, Pinned Memory paddle::Tensor &encoder_batch_ids, // Inplace paddle::Tensor &encoder_tile_ids_per_batch, // Inplace @@ -473,23 +475,18 @@ std::vector MultiHeadLatentAttention( const paddle::Tensor& query, const paddle::Tensor& key_cache, const paddle::Tensor& value_cache, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& seq_lens_decoder, const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, - const paddle::Tensor& encoder_batch_ids, - const paddle::Tensor& encoder_tile_ids_per_batch, - const paddle::Tensor& encoder_num_blocks, const paddle::Tensor& kv_batch_ids, const paddle::Tensor& kv_tile_ids_per_batch, const paddle::Tensor& kv_num_blocks, const paddle::Tensor& decoder_batch_ids, const paddle::Tensor& decoder_tile_ids_per_batch, - const paddle::Tensor& decoder_num_blocks, - const paddle::Tensor& decoder_num_blocks_cpu, - const paddle::Tensor& max_enc_len_this_time, + const paddle::Tensor& decoder_num_blocks_device, + const paddle::Tensor& decoder_chunk_size_device, const paddle::Tensor& max_dec_len_this_time, const paddle::Tensor& max_len_kv, const paddle::optional& attn_mask, diff --git a/custom_ops/gpu_ops/env.h b/custom_ops/gpu_ops/env.h index c7db21ba8..5e8eee339 100644 --- a/custom_ops/gpu_ops/env.h +++ b/custom_ops/gpu_ops/env.h @@ -59,6 +59,15 @@ inline uint32_t get_cascade_attention_num_threads() { inline bool get_mla_use_tensorcore() { static const char* mla_use_tensorcore_env = std::getenv("FLAGS_mla_use_tensorcore"); static const uint32_t mla_use_tensorcore = - mla_use_tensorcore_env == nullptr ? 1 : std::stoul(std::string(mla_use_tensorcore_env)); + mla_use_tensorcore_env == nullptr ? 0 : std::stoul(std::string(mla_use_tensorcore_env)); return mla_use_tensorcore != 0 ? true : false; } +inline int get_mla_dec_chunk_size(int bsz) { + static const char* mla_dec_chunk_size_env = + std::getenv("FLAGS_mla_dec_chunk_size"); + static const int mla_dec_chunk_size = + mla_dec_chunk_size_env == nullptr + ? -1 + : std::stoi(std::string(mla_dec_chunk_size_env)); + return bsz > 1 ? mla_dec_chunk_size : 64; +} diff --git a/custom_ops/gpu_ops/helper.h b/custom_ops/gpu_ops/helper.h index 8256d43cd..a99dac1e2 100644 --- a/custom_ops/gpu_ops/helper.h +++ b/custom_ops/gpu_ops/helper.h @@ -563,3 +563,11 @@ inline int GetSMVersion() { return sm_version; } + +inline bool GetMlaUseTensorcore() { + static const bool flags_mla_use_tensorcore = get_mla_use_tensorcore(); + static const bool enable_mla_tensorcore = GetSMVersion() >= 90 ? true : false; + const bool mla_use_tensorcore = + flags_mla_use_tensorcore && enable_mla_tensorcore; + return mla_use_tensorcore; +} diff --git a/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.cu b/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.cu index f7d4b8ae2..3b4c0b1e1 100644 --- a/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.cu +++ b/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.cu @@ -70,7 +70,6 @@ void BatchMLAWithPagedKVCacheKernel( const paddle::optional& smooth_weight, // [num_kv_heads, head_dim] const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& seq_lens_decoder, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, @@ -78,9 +77,8 @@ void BatchMLAWithPagedKVCacheKernel( const paddle::Tensor& tile_ids_per_batch, const paddle::Tensor& num_blocks_x_device, const std::string& cache_quant_type_str, - const int num_blocks_x, + const paddle::Tensor& decoder_chunk_size_device, const int max_seq_len, - const int max_dec_len, const float softmax_scale, const float quant_max_bound, const float quant_min_bound, @@ -97,14 +95,12 @@ void BatchMLAWithPagedKVCacheKernel( const auto q_head_num = meta_data.q_num_heads; const auto max_block_num_per_seq = meta_data.max_blocks_per_seq; const auto max_block_num = bsz * max_block_num_per_seq; - const uint32_t chunk_size = get_max_partition_size(bsz); - int q_head_dim = meta_data.head_dims; int k_head_dim = meta_data.head_dims; int v_head_dim = meta_data.head_dims_v; // int num_chunks = max_dec_len / chunk_size; - int num_chunks = div_up(max_dec_len, chunk_size); + int num_chunks = div_up(max_seq_len, 64); auto *allocator = paddle::GetAllocator(q.place()); phi::Allocator::AllocationPtr O_tmp, m_tmp, d_tmp; @@ -127,14 +123,14 @@ void BatchMLAWithPagedKVCacheKernel( params.d = reinterpret_cast(d_tmp->ptr()); params.block_tables = const_cast(block_tables.data()); params.seq_lens_this_time = const_cast(seq_lens_this_time.data()); - params.seq_lens_encoder = const_cast(seq_lens_encoder.data()); params.seq_lens_decoder = const_cast(seq_lens_decoder.data()); params.cumsum_q_seqlens = const_cast(cu_seqlens_q.data()); params.batch_id_per_token = const_cast(batch_id_per_token.data()); params.batch_ids = const_cast(batch_ids.data()); params.tile_ids_per_batch = const_cast(tile_ids_per_batch.data()); params.num_blocks_x = const_cast(num_blocks_x_device.data()); - params.num_blocks_x_int = num_blocks_x; + params.chunk_size_device = + const_cast(decoder_chunk_size_device.data()); params.q_stride_bsz = q_head_num * q_head_dim; params.q_stride_head_num = q_head_dim; params.kv_stride_block_num = block_size * k_head_dim; @@ -151,7 +147,6 @@ void BatchMLAWithPagedKVCacheKernel( params.block_size = block_size; params.max_draft_token_num = draft_token_num; params.sm_scale = softmax_scale; - params.chunk_size = chunk_size; params.chunk_num = num_chunks; if (q_head_dim == 576) { @@ -176,7 +171,6 @@ template void BatchMLAWithPagedKVCacheKernel( const paddle::optional& smooth_weight, // [num_kv_heads, head_dim] const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& seq_lens_decoder, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, @@ -184,9 +178,8 @@ template void BatchMLAWithPagedKVCacheKernel( const paddle::Tensor& tile_ids_per_batch, const paddle::Tensor& num_blocks_x_device, const std::string& cache_quant_type_str, - const int num_blocks_x, + const paddle::Tensor& decoder_chunk_size_device, const int max_seq_len, - const int max_dec_len, const float softmax_scale, const float quant_max_bound, const float quant_min_bound, @@ -210,7 +203,6 @@ template void BatchMLAWithPagedKVCacheKernel( const paddle::optional& smooth_weight, // [num_kv_heads, head_dim] const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& seq_lens_decoder, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, @@ -218,9 +210,8 @@ template void BatchMLAWithPagedKVCacheKernel( const paddle::Tensor& tile_ids_per_batch, const paddle::Tensor& num_blocks_x_device, const std::string& cache_quant_type_str, - const int num_blocks_x, + const paddle::Tensor& decoder_chunk_size_device, const int max_seq_len, - const int max_dec_len, const float softmax_scale, const float quant_max_bound, const float quant_min_bound, diff --git a/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.h b/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.h index 97fffe39d..62f5d5e9f 100644 --- a/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.h +++ b/custom_ops/gpu_ops/mla_attn/batch_mla_with_paged_kv_cache.h @@ -47,7 +47,6 @@ void BatchMLAWithPagedKVCacheKernel( const paddle::optional& smooth_weight, // [num_kv_heads, head_dim] const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& seq_lens_decoder, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, @@ -55,9 +54,8 @@ void BatchMLAWithPagedKVCacheKernel( const paddle::Tensor& tile_ids_per_batch, const paddle::Tensor& num_blocks_x_device, const std::string& cache_quant_type_str, - const int num_blocks_x, + const paddle::Tensor& decoder_chunk_size_device, const int max_seq_len, - const int max_dec_len, const float softmax_scale, const float quant_max_bound, const float quant_min_bound, diff --git a/custom_ops/gpu_ops/mla_attn/mainloop_load.cuh b/custom_ops/gpu_ops/mla_attn/mainloop_load.cuh index 9c67f601f..4ee350f76 100644 --- a/custom_ops/gpu_ops/mla_attn/mainloop_load.cuh +++ b/custom_ops/gpu_ops/mla_attn/mainloop_load.cuh @@ -128,12 +128,13 @@ struct CollectiveMainloop { DTypeMD const* d_ptr; IdType const* kv_block_tables; IdType const* seq_lens_this_time; - IdType const* seq_lens_encoder; + // IdType const* seq_lens_encoder; IdType const* seq_lens_decoder; IdType const* cumsum_q_seqlens; IdType const* batch_ids; IdType const* tile_ids_per_batch; IdType const* num_blocks_x; + IdType const* chunk_size_device; float sm_scale; int bsz; int max_block_num; @@ -144,7 +145,7 @@ struct CollectiveMainloop { int kv_stride_block_size; int o_stride_bsz; int o_stride_head_num; - int chunk_size; + // int chunk_size; int chunk_num; int max_draft_token_num; }; @@ -160,12 +161,13 @@ struct CollectiveMainloop { DTypeMD* d_ptr; IdType* kv_block_tables; IdType* seq_lens_this_time; - IdType* seq_lens_encoder; + // IdType* seq_lens_encoder; IdType* seq_lens_decoder; IdType* cumsum_q_seqlens; IdType* batch_ids; IdType* tile_ids_per_batch; IdType* num_blocks_x; + IdType* chunk_size_device; float sm_scale; int bsz; int max_block_num; @@ -176,7 +178,7 @@ struct CollectiveMainloop { int kv_stride_block_size; int o_stride_bsz; int o_stride_head_num; - int chunk_size; + // int chunk_size; int chunk_num; int max_draft_token_num; TMA_KV tma_load_KV; @@ -198,12 +200,13 @@ struct CollectiveMainloop { const_cast(args.d_ptr), const_cast(args.kv_block_tables), const_cast(args.seq_lens_this_time), - const_cast(args.seq_lens_encoder), + // const_cast(args.seq_lens_encoder), const_cast(args.seq_lens_decoder), const_cast(args.cumsum_q_seqlens), const_cast(args.batch_ids), const_cast(args.tile_ids_per_batch), const_cast(args.num_blocks_x), + const_cast(args.chunk_size_device), args.sm_scale, args.bsz, args.max_block_num, @@ -214,7 +217,7 @@ struct CollectiveMainloop { args.kv_stride_block_size, args.o_stride_bsz, args.o_stride_head_num, - args.chunk_size, + // args.chunk_size, args.chunk_num, args.max_draft_token_num, tma_load_KV @@ -281,9 +284,9 @@ struct CollectiveMainloop { auto gmem_thr_copy_kv = gmem_tiled_copy_kv.get_slice(thread_idx); static constexpr int BLOCK_SHAPE_KV = get<1>(TileShape_QKD{}); - const int start_len = tile_idx * mainloop_params.chunk_size; + const int start_len = tile_idx * mainloop_params.chunk_size_device[0]; const int start_tile_idx = start_len / BLOCK_SHAPE_KV; - const int end_tile_idx = cute::ceil_div(min(start_len + mainloop_params.chunk_size, kv_len), BLOCK_SHAPE_KV) - 1; + const int end_tile_idx = cute::ceil_div(min(start_len + mainloop_params.chunk_size_device[0], kv_len), BLOCK_SHAPE_KV) - 1; auto kv_block_tables = make_tensor(make_gmem_ptr(mainloop_params.kv_block_tables), make_layout(make_shape(mainloop_params.bsz, mainloop_params.max_block_num_per_seq), make_stride(mainloop_params.max_block_num_per_seq, 1))); @@ -322,9 +325,9 @@ struct CollectiveMainloop { group_modes<0, 2>(sK), group_modes<0, 2>(gKV)); static constexpr int BLOCK_SHAPE_KV = get<1>(TileShape_QKD{}); - const int start_len = tile_idx * mainloop_params.chunk_size; + const int start_len = tile_idx * mainloop_params.chunk_size_device[0]; const int start_tile_idx = start_len / BLOCK_SHAPE_KV; - const int end_tile_idx = cute::ceil_div(min(start_len + mainloop_params.chunk_size, kv_len), BLOCK_SHAPE_KV) - 1; + const int end_tile_idx = cute::ceil_div(min(start_len + mainloop_params.chunk_size_device[0], kv_len), BLOCK_SHAPE_KV) - 1; auto kv_block_tables = make_tensor(make_gmem_ptr(mainloop_params.kv_block_tables), make_layout(make_shape(mainloop_params.bsz, mainloop_params.max_block_num_per_seq), make_stride(mainloop_params.max_block_num_per_seq, 1))); diff --git a/custom_ops/gpu_ops/mla_attn/mainloop_mma.cuh b/custom_ops/gpu_ops/mla_attn/mainloop_mma.cuh index 77d059583..b6cdabb8f 100644 --- a/custom_ops/gpu_ops/mla_attn/mainloop_mma.cuh +++ b/custom_ops/gpu_ops/mla_attn/mainloop_mma.cuh @@ -57,7 +57,7 @@ CUTLASS_DEVICE void mma_f16(const Params& mainloop_params, using SmemLayoutVtOneStage = typename Ktraits::SmemLayoutVtOneStage; static_assert(is_rmem::value, "O tensor must be rmem resident."); - const int chunk_num_this_seq = cute::ceil_div(kv_len, mainloop_params.chunk_size); + const int chunk_num_this_seq = cute::ceil_div(kv_len, mainloop_params.chunk_size_device[0]); static constexpr int BLOCK_SHAPE_Q = get<0>(TileShape_QKD{}); static constexpr int BLOCK_SHAPE_KV = get<1>(TileShape_QKD{}); @@ -84,9 +84,9 @@ CUTLASS_DEVICE void mma_f16(const Params& mainloop_params, Tensor tOrV2 = threadMmaPVSS.partition_fragment_B(sVt_s2); Tensor tOrP_CS2 = threadMmaPVSS.partition_fragment_A(sPSS); - const int start_len = tile_idx * mainloop_params.chunk_size; + const int start_len = tile_idx * mainloop_params.chunk_size_device[0]; const int start_tile_idx = start_len / BLOCK_SHAPE_KV; - const int end_tile_idx =cute::ceil_div(min(start_len + mainloop_params.chunk_size, kv_len), BLOCK_SHAPE_KV) - 1; + const int end_tile_idx =cute::ceil_div(min(start_len + mainloop_params.chunk_size_device[0], kv_len), BLOCK_SHAPE_KV) - 1; int kv_tile_idx = end_tile_idx; auto consumer_wait = [](auto& pipeline, auto& smem_pipe_read) { @@ -263,7 +263,7 @@ CUTLASS_DEVICE void mma_f16_two_stages(const Params& mainloop_params, using SmemLayoutVtOneStage = typename Ktraits::SmemLayoutVtOneStage; static_assert(is_rmem::value, "O tensor must be rmem resident."); - const int chunk_num_this_seq = cute::ceil_div(kv_len, mainloop_params.chunk_size); + const int chunk_num_this_seq = cute::ceil_div(kv_len, mainloop_params.chunk_size_device[0]); static constexpr int BLOCK_SHAPE_Q = get<0>(TileShape_QKD{}); static constexpr int BLOCK_SHAPE_KV = get<1>(TileShape_QKD{}); @@ -295,9 +295,9 @@ CUTLASS_DEVICE void mma_f16_two_stages(const Params& mainloop_params, Tensor tOrV4 = threadMmaPVSS.partition_fragment_B(sVt_s4); Tensor tOrP_CS2 = threadMmaPVSS.partition_fragment_A(sPSS); - const int start_len = tile_idx * mainloop_params.chunk_size; + const int start_len = tile_idx * mainloop_params.chunk_size_device[0]; const int start_tile_idx = start_len / BLOCK_SHAPE_KV; - const int end_tile_idx = cute::ceil_div(min(start_len + mainloop_params.chunk_size, kv_len), BLOCK_SHAPE_KV) - 1; + const int end_tile_idx = cute::ceil_div(min(start_len + mainloop_params.chunk_size_device[0], kv_len), BLOCK_SHAPE_KV) - 1; int kv_tile_idx = end_tile_idx; auto consumer_wait = [](auto& pipeline, auto& smem_pipe_read) { diff --git a/custom_ops/gpu_ops/mla_attn/mla_hopper.cuh b/custom_ops/gpu_ops/mla_attn/mla_hopper.cuh index ba1f4b447..2d55d91e5 100644 --- a/custom_ops/gpu_ops/mla_attn/mla_hopper.cuh +++ b/custom_ops/gpu_ops/mla_attn/mla_hopper.cuh @@ -62,13 +62,12 @@ struct Params { alignas(16) DTypeQ *Q; // [token_num, head_num, dim_head] alignas(16) DTypeKV *KV; // [max_block_num, block_size, dim_head] alignas(16) DTypeO *O; // [token_num, head_num, dim_head] - alignas(16) DTypeO *O_tmp; // [num_chunks, bsz, head_num, dim_head] - alignas(16) float *m; // [num_chunks, bsz * max_draft_token_num * head_num] - alignas(16) float *d; // [num_chunks, bsz * max_draft_token_num * head_num] + alignas(16) DTypeO *O_tmp; // [max_num_chunks, bsz, head_num, dim_head] + alignas(16) float *m; // [max_num_chunks, bsz * max_draft_token_num * head_num] + alignas(16) float *d; // [max_num_chunks, bsz * max_draft_token_num * head_num] alignas(16) IdType *block_tables; alignas(16) IdType *seq_lens_this_time; - alignas(16) IdType *seq_lens_encoder; alignas(16) IdType *seq_lens_decoder; alignas(16) IdType *cumsum_q_seqlens; alignas(16) IdType *batch_id_per_token; @@ -76,7 +75,7 @@ struct Params { alignas(16) IdType *batch_ids; alignas(16) IdType *tile_ids_per_batch; alignas(16) IdType *num_blocks_x; - + alignas(16) IdType *chunk_size_device; uint32_t q_stride_bsz; uint32_t q_stride_head_num; @@ -96,9 +95,7 @@ struct Params { int vo_head_dim; int block_size; int max_draft_token_num; - int chunk_size; int chunk_num; - int num_blocks_x_int; float sm_scale; }; @@ -118,7 +115,7 @@ struct Params { return cudaErrorNotSupported; \ } -template +template __global__ void __launch_bounds__(Ktraits::NUM_WARPS * cutlass::NumThreadsPerWarp, 1) MLAWithKVCacheKernel(CUTE_GRID_CONSTANT typename CollectiveMainloop::Params const mainloop_params, @@ -137,6 +134,7 @@ MLAWithKVCacheKernel(CUTE_GRID_CONSTANT static constexpr int BLOCK_SHAPE_Q = Ktraits::BLOCK_SHAPE_Q; static constexpr int BLOCK_SHAPE_KV = Ktraits::BLOCK_SHAPE_KV; const int num_blocks_x = mainloop_params.num_blocks_x[0]; + const int chunk_size = mainloop_params.chunk_size_device[0]; static constexpr bool use_tma_load_kv = CollectiveMainloop::USE_TMA_LOAD_KV; @@ -205,58 +203,10 @@ MLAWithKVCacheKernel(CUTE_GRID_CONSTANT PipelineStateQ smem_pipe_write_q = cutlass::make_producer_start_state(); PipelineState smem_pipe_write_kv = cutlass::make_producer_start_state(); - if constexpr(USE_FIXED_BLOCK) { - for (int i = blockIdx.x; i < num_blocks_x; i += SM_COUNT) { - const int bid = mainloop_params.batch_ids[i]; - const int tile_id = mainloop_params.tile_ids_per_batch[i]; - const int seq_len_now = mainloop_params.seq_lens_this_time[bid]; - const int seq_len_encoder_now = mainloop_params.seq_lens_encoder[bid]; - const int seq_len_decoder_now = mainloop_params.seq_lens_decoder[bid] + seq_len_now; - const int start_token_idx = mainloop_params.cumsum_q_seqlens[bid]; - cutlass::arch::NamedBarrier::sync(Ktraits::NUM_THREADS, - /*id=*/static_cast(NamedBarriers::kWG0WG1WG2Sync)); - - // load Q - collective_mainloop.load_q( - mainloop_params, - pipeline_q, - smem_pipe_write_q, - shared_storage, - threadIdx.x, - bid); - - if constexpr (!use_tma_load_kv) { - // load kv - collective_mainloop.load_kv( - mainloop_params, - pipeline_kv, - smem_pipe_write_kv, - shared_storage, - bid, - seq_len_decoder_now, - tile_id - ); - } else { - if (warp_idx_in_warpgroup == 0) { - // load kv tma - collective_mainloop.load_kv_tma( - mainloop_params, - pipeline_kv, - smem_pipe_write_kv, - shared_storage, - bid, - seq_len_decoder_now, - tile_id - ); - } - } - } - } else { - const int block_id = blockIdx.x; - const int bid = mainloop_params.batch_ids[block_id]; - const int tile_id = mainloop_params.tile_ids_per_batch[block_id]; + for (int i = blockIdx.x; i < num_blocks_x; i += SM_COUNT) { + const int bid = mainloop_params.batch_ids[i]; + const int tile_id = mainloop_params.tile_ids_per_batch[i]; const int seq_len_now = mainloop_params.seq_lens_this_time[bid]; - const int seq_len_encoder_now = mainloop_params.seq_lens_encoder[bid]; const int seq_len_decoder_now = mainloop_params.seq_lens_decoder[bid] + seq_len_now; const int start_token_idx = mainloop_params.cumsum_q_seqlens[bid]; cutlass::arch::NamedBarrier::sync(Ktraits::NUM_THREADS, @@ -309,76 +259,12 @@ MLAWithKVCacheKernel(CUTE_GRID_CONSTANT Tensor tOrO = partition_fragment_C(tiled_mma_pv, select<0, 1>(TileShape_PDV{})); auto attention_updater = OnlineSoftmax<2 * size<1>(tOrO), /*WITH_SCALE=*/true>(mainloop_params.sm_scale); - if constexpr(USE_FIXED_BLOCK) { - for (int i = blockIdx.x; i < num_blocks_x; i += SM_COUNT) { - clear(tOrO); - clear(attention_updater.scores_scale); - const int bid = mainloop_params.batch_ids[i]; - const int tile_id = mainloop_params.tile_ids_per_batch[i]; - const int seq_len_now = mainloop_params.seq_lens_this_time[bid]; - const int seq_len_encoder_now = mainloop_params.seq_lens_encoder[bid]; - const int seq_len_decoder_now = mainloop_params.seq_lens_decoder[bid] + seq_len_now; - const int start_token_idx = mainloop_params.cumsum_q_seqlens[bid]; - cutlass::arch::NamedBarrier::sync(Ktraits::NUM_THREADS, - /*id=*/static_cast(NamedBarriers::kWG0WG1WG2Sync)); - - if constexpr (BLOCK_SHAPE_KV == 64) { - mma_f16( - mainloop_params, - pipeline_q, - smem_pipe_read_q, - pipeline_kv, - smem_pipe_read_kv, - tOrO, - attention_updater, - threadIdx.x - NUM_COPY_THREADS, - bid, - seq_len_decoder_now, - seq_len_now, - tile_id, - shared_storage); - } else if (BLOCK_SHAPE_KV == 32) { - mma_f16_two_stages( - mainloop_params, - pipeline_q, - smem_pipe_read_q, - pipeline_kv, - smem_pipe_read_kv, - tOrO, - attention_updater, - threadIdx.x - NUM_COPY_THREADS, - bid, - seq_len_decoder_now, - seq_len_now, - tile_id, - shared_storage); - } - - collective_epilogue.store( - epilogue_params, - tOrO, - attention_updater.get_lse(), - shared_storage, - tiled_mma_pv, - threadIdx.x - NUM_COPY_THREADS, - bid, - mainloop_params.bsz, - seq_len_now, - start_token_idx, - tile_id, - seq_len_decoder_now, - mainloop_params.chunk_size, - mainloop_params.max_draft_token_num, - mainloop_params.o_stride_bsz); - } - } else { - const int block_id = blockIdx.x; + for (int i = blockIdx.x; i < num_blocks_x; i += SM_COUNT) { clear(tOrO); clear(attention_updater.scores_scale); - const int bid = mainloop_params.batch_ids[block_id]; - const int tile_id = mainloop_params.tile_ids_per_batch[block_id]; + const int bid = mainloop_params.batch_ids[i]; + const int tile_id = mainloop_params.tile_ids_per_batch[i]; const int seq_len_now = mainloop_params.seq_lens_this_time[bid]; - const int seq_len_encoder_now = mainloop_params.seq_lens_encoder[bid]; const int seq_len_decoder_now = mainloop_params.seq_lens_decoder[bid] + seq_len_now; const int start_token_idx = mainloop_params.cumsum_q_seqlens[bid]; cutlass::arch::NamedBarrier::sync(Ktraits::NUM_THREADS, @@ -429,15 +315,15 @@ MLAWithKVCacheKernel(CUTE_GRID_CONSTANT start_token_idx, tile_id, seq_len_decoder_now, - mainloop_params.chunk_size, + chunk_size, mainloop_params.max_draft_token_num, mainloop_params.o_stride_bsz); - } + } } } -template +template cudaError_t BatchMLAWithPagedKVCacheKernelTraitsDispatched(Params& params, cudaStream_t stream) { using DTypeQ = typename KernelTraits::DTypeQ; @@ -460,12 +346,12 @@ cudaError_t BatchMLAWithPagedKVCacheKernelTraitsDispatched(Params& params, params.d, params.block_tables, params.seq_lens_this_time, - params.seq_lens_encoder, params.seq_lens_decoder, params.cumsum_q_seqlens, params.batch_ids, params.tile_ids_per_batch, params.num_blocks_x, + params.chunk_size_device, params.sm_scale, params.bsz, params.max_block_num, @@ -476,7 +362,6 @@ cudaError_t BatchMLAWithPagedKVCacheKernelTraitsDispatched(Params& params, params.kv_stride_block_size, params.o_stride_bsz, params.o_stride_head_num, - params.chunk_size, params.chunk_num, params.max_draft_token_num }); @@ -500,13 +385,9 @@ cudaError_t BatchMLAWithPagedKVCacheKernelTraitsDispatched(Params& params, cudaOccupancyMaxActiveBlocksPerMultiprocessor( &act_blocks_per_sm, kernel, KernelTraits::NUM_WARPS * 32, smem_size); - int gridx; - if constexpr(USE_FIXED_BLOCK) { - gridx = multiprocessor_count; - } else { - gridx = params.num_blocks_x_int; - } - dim3 grid_dims = {gridx, 1, 1}; + // NOTE: (changwenbin) Here the grid size is fixed so that MLA can be captured + // by the graph. + dim3 grid_dims = {multiprocessor_count, 1, 1}; static constexpr int ctaSize = KernelTraits::NUM_WARPS * 32; dim3 block_dims(ctaSize, 1, 1); kernel<<>>( @@ -517,37 +398,38 @@ cudaError_t BatchMLAWithPagedKVCacheKernelTraitsDispatched(Params& params, constexpr int merge_block_size = 256; constexpr int blockx = KernelTraits::HEAD_DIM_VO / vec_size; constexpr int blocky = (merge_block_size + blockx - 1) / blockx; - dim3 grids_merge(min(multiprocessor_count, params.token_num), params.q_num_head); // 128k is too large + dim3 grids_merge(multiprocessor_count, params.q_num_head); // 128k is too large dim3 blocks_merge(blockx, blocky); - merge_multi_chunks_kernel<<>>( - reinterpret_cast(params.O_tmp), - params.m, - params.d, - params.seq_lens_this_time, - params.seq_lens_decoder, - params.seq_lens_encoder, - params.cumsum_q_seqlens, - params.batch_id_per_token, - reinterpret_cast(params.O), - params.chunk_num, - params.q_num_head, - params.chunk_size, - params.vo_head_dim, - params.token_num, - params.bsz, - params.max_draft_token_num - ); + merge_multi_chunks_kernel + <<>>( + reinterpret_cast(params.O_tmp), + params.m, + params.d, + params.seq_lens_this_time, + params.seq_lens_decoder, + params.cumsum_q_seqlens, + params.batch_id_per_token, + params.chunk_size_device, + reinterpret_cast(params.O), + params.q_num_head, + params.vo_head_dim, + params.token_num, + params.bsz, + params.max_draft_token_num); } return cudaSuccess; } -template +template cudaError_t BatchMLAWithPagedKVCacheDispatched(Params& params, cudaStream_t stream) { constexpr bool CAUSAL = true; if constexpr (HEAD_DIM_QK == 576) { DISPATCH_GROUP_SIZE(params.q_num_head, GROUP_SIZE, BatchMLAWithPagedKVCacheKernelTraitsDispatched< - AttentionKernelTraits -__global__ void merge_multi_chunks_kernel(const T * __restrict__ multi_out, // [num_chunks, bsz, max_draft_token, num_heads, head_dim] - const float * __restrict__ multi_m, // [num_chunks, bsz, max_draft_token, num_heads] - const float * __restrict__ multi_d, // [num_chunks, bsz, max_draft_token, num_heads] +__global__ void merge_multi_chunks_kernel(const T * __restrict__ multi_out, // [max_num_chunks, bsz, max_draft_token, num_heads, head_dim] + const float * __restrict__ multi_m, // [max_num_chunks, bsz, max_draft_token, num_heads] + const float * __restrict__ multi_d, // [max_num_chunks, bsz, max_draft_token, num_heads] const int * __restrict__ seq_lens_this_time, const int * __restrict__ seq_lens_decoder, - const int * __restrict__ seq_lens_encoder, const int *__restrict__ cu_seqlens_q, const int * __restrict__ batch_id_per_token, + const int * __restrict__ chunk_size_device, T * __restrict__ out, // [token_num, num_heads, head_dim] - const int num_chunks, const int num_heads, - const int chunk_size, const int head_dim, const int token_num, const int bsz, @@ -271,13 +269,15 @@ __global__ void merge_multi_chunks_kernel(const T * __restrict__ multi_out, // [ __shared__ float md_smem[bdy * 2]; for (int qid = blockIdx.x; qid < token_num; qid += gridDim.x) { const uint32_t bid = batch_id_per_token[qid]; + // NOTE : (changwenbin) Batch_id_per_token is initialized to [:]=-1, Marking meaningless batch IDs. + if (bid == -1) continue; const int seq_len_q = seq_lens_this_time[bid]; if (seq_len_q == 0) continue; const uint32_t local_seq_id = qid - cu_seqlens_q[bid]; int seq_len_kv = seq_lens_decoder[bid]; if (seq_len_kv == 0) continue; seq_len_kv += seq_len_q; - const int num_chunks_this_seq = cute::ceil_div(seq_len_kv, chunk_size); + const int num_chunks_this_seq = cute::ceil_div(seq_len_kv, chunk_size_device[0]); if (num_chunks_this_seq <= 1) { // not need merge continue; diff --git a/custom_ops/gpu_ops/multi_head_latent_attention.cu b/custom_ops/gpu_ops/multi_head_latent_attention.cu index 98a61e838..126b014b8 100644 --- a/custom_ops/gpu_ops/multi_head_latent_attention.cu +++ b/custom_ops/gpu_ops/multi_head_latent_attention.cu @@ -22,23 +22,18 @@ std::vector MultiHeadLatentAttentionKernel( const paddle::Tensor& query, const paddle::Tensor& key_cache, const paddle::Tensor& value_cache, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& seq_lens_decoder, const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, - const paddle::Tensor& encoder_batch_ids, - const paddle::Tensor& encoder_tile_ids_per_batch, - const paddle::Tensor& encoder_num_blocks, const paddle::Tensor& kv_batch_ids, const paddle::Tensor& kv_tile_ids_per_batch, const paddle::Tensor& kv_num_blocks, const paddle::Tensor& decoder_batch_ids, const paddle::Tensor& decoder_tile_ids_per_batch, const paddle::Tensor& decoder_num_blocks, - const paddle::Tensor& decoder_num_blocks_cpu, - const paddle::Tensor& max_enc_len_this_time, + const paddle::Tensor& decoder_chunk_size_device, const paddle::Tensor& max_dec_len_this_time, const paddle::Tensor& max_len_kv, const paddle::optional& attn_mask, @@ -64,9 +59,12 @@ std::vector MultiHeadLatentAttentionKernel( typedef PDTraits traits_; typedef typename traits_::data_t data_t; - int decoder_num_blocks_data = decoder_num_blocks_cpu.data()[0]; + // NOTE: (changwenbin) In cuda graph, it will be fixed in the capture stage + // int decoder_num_blocks_data = decoder_num_blocks_cpu.data()[0]; int max_dec_len_this_time_data = max_dec_len_this_time.data()[0]; int max_len_kv_data = max_len_kv.data()[0]; + // int chunk_size = decoder_chunk_size_cpu.data()[0]; + // const bool mla_use_tensorcore = get_mla_use_tensorcore(); auto sm_version = GetSMVersion(); @@ -96,7 +94,6 @@ std::vector MultiHeadLatentAttentionKernel( out_linear_smooths, seq_lens_this_time, seq_lens_decoder, - seq_lens_encoder, cu_seqlens_q, batch_id_per_token, block_tables, @@ -104,9 +101,8 @@ std::vector MultiHeadLatentAttentionKernel( decoder_tile_ids_per_batch, decoder_num_blocks, cache_quant_type_str, - decoder_num_blocks_data, + decoder_chunk_size_device, max_input_length, - max_len_kv_data, softmax_scale, quant_max_bound, quant_min_bound, @@ -145,23 +141,18 @@ std::vector MultiHeadLatentAttention( const paddle::Tensor& query, const paddle::Tensor& key_cache, const paddle::Tensor& value_cache, - const paddle::Tensor& seq_lens_encoder, const paddle::Tensor& seq_lens_decoder, const paddle::Tensor& seq_lens_this_time, const paddle::Tensor& cu_seqlens_q, const paddle::Tensor& batch_id_per_token, const paddle::Tensor& block_tables, - const paddle::Tensor& encoder_batch_ids, - const paddle::Tensor& encoder_tile_ids_per_batch, - const paddle::Tensor& encoder_num_blocks, const paddle::Tensor& kv_batch_ids, const paddle::Tensor& kv_tile_ids_per_batch, const paddle::Tensor& kv_num_blocks, const paddle::Tensor& decoder_batch_ids, const paddle::Tensor& decoder_tile_ids_per_batch, const paddle::Tensor& decoder_num_blocks, - const paddle::Tensor& decoder_num_blocks_cpu, - const paddle::Tensor& max_enc_len_this_time, + const paddle::Tensor& decoder_chunk_size_device, const paddle::Tensor& max_dec_len_this_time, const paddle::Tensor& max_len_kv, const paddle::optional& attn_mask, @@ -208,23 +199,18 @@ std::vector MultiHeadLatentAttention( query, key_cache, value_cache, - seq_lens_encoder, seq_lens_decoder, seq_lens_this_time, cu_seqlens_q, batch_id_per_token, block_tables, - encoder_batch_ids, - encoder_tile_ids_per_batch, - encoder_num_blocks, kv_batch_ids, kv_tile_ids_per_batch, kv_num_blocks, decoder_batch_ids, decoder_tile_ids_per_batch, decoder_num_blocks, - decoder_num_blocks_cpu, - max_enc_len_this_time, + decoder_chunk_size_device, max_dec_len_this_time, max_len_kv, attn_mask, @@ -254,23 +240,18 @@ std::vector MultiHeadLatentAttention( query, key_cache, value_cache, - seq_lens_encoder, seq_lens_decoder, seq_lens_this_time, cu_seqlens_q, batch_id_per_token, block_tables, - encoder_batch_ids, - encoder_tile_ids_per_batch, - encoder_num_blocks, kv_batch_ids, kv_tile_ids_per_batch, kv_num_blocks, decoder_batch_ids, decoder_tile_ids_per_batch, decoder_num_blocks, - decoder_num_blocks_cpu, - max_enc_len_this_time, + decoder_chunk_size_device, max_dec_len_this_time, max_len_kv, attn_mask, @@ -307,23 +288,18 @@ std::vector> MultiHeadLatentAttentionInferShape( const std::vector& query_shape, const std::vector& key_cache_shape, const std::vector& value_cache_shape, - const std::vector& seq_lens_encoder_shape, const std::vector& seq_lens_decoder_shape, const std::vector& seq_lens_this_time_shape, const std::vector& cu_seqlens_q_shape, const std::vector& batch_id_per_token_shape, const std::vector& block_tables_shape, - const std::vector& encoder_batch_ids_shape, - const std::vector& encoder_tile_ids_per_batch_shape, - const std::vector& encoder_num_blocks_shape, const std::vector& kv_batch_ids_shape, const std::vector& kv_tile_ids_per_batch_shape, const std::vector& kv_num_blocks_shape, const std::vector& decoder_batch_ids_shape, const std::vector& decoder_tile_ids_per_batch_shape, const std::vector& decoder_num_blocks_shape, - const std::vector& decoder_num_blocks_cpu_shape, - const std::vector& max_enc_len_this_time_shape, + const std::vector& decoder_chunk_size_device_shape, const std::vector& max_dec_len_this_time_shape, const std::vector& max_len_kv_shape, const paddle::optional>& attn_mask_shape, @@ -361,23 +337,18 @@ std::vector MultiHeadLatentAttentionInferDtype( const paddle::DataType& query_dtype, const paddle::DataType& key_cache_dtype, const paddle::DataType& value_cache_dtype, - const paddle::DataType& seq_lens_encoder_dtype, const paddle::DataType& seq_lens_decoder_dtype, const paddle::DataType& seq_lens_this_time_dtype, const paddle::DataType& cu_seqlens_q_dtype, const paddle::DataType& batch_id_per_token_dtype, const paddle::DataType& block_tables_dtype, - const paddle::DataType& encoder_batch_ids_dtype, - const paddle::DataType& encoder_tile_ids_per_batch_dtype, - const paddle::DataType& encoder_num_blocks_dtype, const paddle::DataType& kv_batch_ids_dtype, const paddle::DataType& kv_tile_ids_per_batch_dtype, const paddle::DataType& kv_num_blocks_dtype, const paddle::DataType& decoder_batch_ids_dtype, const paddle::DataType& decoder_tile_ids_per_batch_dtype, const paddle::DataType& decoder_num_blocks_dtype, - const paddle::DataType& decoder_num_blocks_cpu_dtype, - const paddle::DataType& max_enc_len_this_time_dtype, + const paddle::DataType& decoder_chunk_size_device_dtype, const paddle::DataType& max_dec_len_this_time_dtype, const paddle::DataType& max_len_kv_dtype, const paddle::optional& attn_mask_dtype, @@ -415,23 +386,18 @@ PD_BUILD_STATIC_OP(multi_head_latent_attention) .Inputs({"query", "key_cache", "value_cache", - "seq_lens_encoder", "seq_lens_decoder", "seq_lens_this_time", "cu_seqlens_q", "batch_id_per_token", "block_tables", - "encoder_batch_ids", - "encoder_tile_ids_per_batch", - "encoder_num_blocks", "kv_batch_ids", "kv_tile_ids_per_batch", "kv_num_blocks", "decoder_batch_ids", "decoder_tile_ids_per_batch", "decoder_num_blocks", - "decoder_num_blocks_cpu", - "max_enc_len_this_time", + "decoder_chunk_size_device", "max_dec_len_this_time", "max_len_kv", paddle::Optional("attn_mask"), diff --git a/docs/quantization/wint2.png b/docs/quantization/wint2.png deleted file mode 100644 index a117ea8afa82f183c2486ab2c3b1b0ede027f0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82801 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%0AJ?LOF(dY%2$JEN`J5~`q@Tqs< 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%0AJ?LOF(dY%2$JEN`J5~`q@Tqs< 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