Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
450bf90
Revert "[API change] deprecate tile_token_dim in trtllm_moe (#2086)"
yzh119 Nov 20, 2025
a70d31c
bump-version
yzh119 Nov 20, 2025
0e68a2f
Merge remote-tracking branch 'origin/main' into HEAD
yzh119 Nov 20, 2025
3dfbec1
PullRequest: 6 feat(dllm,ci): add Block Expanding Attention & PyPI re…
fdz-1999 Feb 3, 2026
7ea307f
drop flashinfer-jit-cache build
brightcoder01 Feb 4, 2026
eabde64
rename block_expanding to block_extend; add FlashInfer vs Flex Attent…
brightcoder01 Feb 28, 2026
8e80f0b
cg->cuda_graph
brightcoder01 Feb 28, 2026
3f9c818
Blockexpanding->blockextend && Remove redundant comments
brightcoder01 Mar 2, 2026
b623785
Refine DLLM block-extend path and precision tests
brightcoder01 Mar 3, 2026
a8266d8
Remove deprecated v2/v3 wrappers in block_extend API
brightcoder01 Mar 3, 2026
5e07b58
feat(dllm): add Block Extend Attention for Diffusion LLM
fdz-1999 Mar 8, 2026
4284113
fix(dllm): address review feedback for Block Extend Attention
fdz-1999 Apr 21, 2026
8e9d689
Merge branch 'main' into feature/block-extend
fdz-1999 Apr 26, 2026
e3fd7c1
feat(dllm): add blockwise mask attention test & CI job
fdz-1999 Apr 26, 2026
3eaf2f8
fix(dllm): guard FA3 backend on non-Hopper devices and sort __all__
fdz-1999 Apr 27, 2026
045ba8f
fix(dllm): reject partially specified prefix KV pairs
fdz-1999 Apr 27, 2026
fab5155
Merge branch 'main' into feature/block-extend
fdz-1999 May 6, 2026
5612b90
Merge branch 'main' into feature/block-extend
fdz-1999 May 6, 2026
d34bfc8
Merge branch 'main' into feature/block-extend
fdz-1999 Jun 10, 2026
631231b
Merge branch 'main' into feature/block-extend
fdz-1999 Jun 15, 2026
57e51f9
Merge branch 'main' into feature/block-extend
fdz-1999 Jun 30, 2026
0d26f0c
resolve merge conflicts with main (VO split / KV shared SMEM refactor)
fdz-1999 Jun 30, 2026
01a2f99
Merge branch 'main' into feature/block-extend
fdz-1999 Jun 30, 2026
cc6a23f
fix(dllm): address review correctness (TMA hang, idtype URI) + Β§1 iso…
fdz-1999 Jul 17, 2026
45efb7a
refactor(dllm): dedicated block-extend gen fn (single path) + single-…
fdz-1999 Jul 17, 2026
a6484ef
feat(prefill): block_diffusion= mask option on existing wrappers (rev…
fdz-1999 Jul 17, 2026
e92332f
feat(prefill): native block_diffusion= on single_prefill_with_kv_cach…
fdz-1999 Jul 18, 2026
acf0c3a
fix(prefill): batch block_diffusion= parity β€” cuda-graph offset buffe…
fdz-1999 Jul 18, 2026
59fefb3
revert(Β§1): remove block-expanding getters from shared jinja + defaul…
fdz-1999 Jul 18, 2026
4af2a42
refactor(Β§1): remove mask_modes axis from public shared gen_customize_*
fdz-1999 Jul 18, 2026
1a6b063
chore(Β§1): drop now-unused has_q_block_expanding_offset jinja var
fdz-1999 Jul 18, 2026
97403f7
fix block-extend review issues
fdz-1999 Jul 19, 2026
c1ceff1
fix(jit): import block-extend mask mode correctly
fdz-1999 Jul 20, 2026
0829b9d
fix(prefill): support scalar block-extend offsets in mask
fdz-1999 Jul 20, 2026
4bbe728
fix(prefill): route block-extend batch generator
fdz-1999 Jul 20, 2026
9909208
fix(hopper): zero fully masked softmax rows
fdz-1999 Jul 20, 2026
f6592fc
test(dllm): reuse KV data in paged option check
fdz-1999 Jul 20, 2026
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
102 changes: 102 additions & 0 deletions .github/workflows/pr-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,91 @@ jobs:
- name: Run H100 Kernel Tests
run: bash ci/bash.sh ${DOCKER_IMAGE} ./scripts/task_run_unit_tests.sh

# ---------------------------------------------------------------------------
# DLLM Block Extend Attention Tests
# ---------------------------------------------------------------------------
gpu-tests-dllm-a10g:
name: DLLM Block Extend Tests (A10G)
needs: [gate, setup]
if: |
needs.gate.outputs.authorized == 'true' &&
needs.setup.outputs.skip_build != 'true' &&
github.event.inputs.skip_gpu != 'true'
runs-on: [self-hosted, linux, x64, gpu, sm86, spot]
timeout-minutes: 60
env:
DOCKER_IMAGE: flashinfer/flashinfer-ci-cu129:${{ needs.setup.outputs.docker_tag }}
steps:
- name: Cleanup
run: |
docker stop $(docker ps -q) 2>/dev/null || true
docker rm $(docker ps -aq) 2>/dev/null || true
sudo rm -rf ${{ github.workspace }}/* || true
sudo rm -rf ${{ github.workspace }}/.[!.]* || true
rm -rf ~/.cache/flashinfer_jit || true
docker image prune -f || true
docker builder prune -f --filter "until=24h" || true
nvidia-smi || true

- uses: actions/checkout@v4
with:
submodules: recursive

- name: Start spot termination monitor
run: ./scripts/task_monitor_spot.sh &

- name: Show Node Info
run: ./scripts/task_show_node_info.sh
env:
NODE_NAME: ${{ runner.name }}
WORKSPACE: ${{ github.workspace }}
BUILD_NUMBER: ${{ github.run_number }}

- name: Run DLLM Block Extend Tests
run: bash ci/bash.sh ${DOCKER_IMAGE} ./scripts/task_jit_run_tests_dllm.sh

gpu-tests-dllm-h100:
name: DLLM Block Extend Tests (H100)
needs: [gate, setup]
if: |
needs.gate.outputs.authorized == 'true' &&
needs.setup.outputs.skip_build != 'true' &&
github.event.inputs.skip_gpu != 'true'
runs-on: [self-hosted, linux, x64, gpu, h100]
timeout-minutes: 60
env:
DOCKER_IMAGE: flashinfer/flashinfer-ci-cu129:${{ needs.setup.outputs.docker_tag }}
steps:
- name: Cleanup
run: |
for cid in $(docker ps -q); do
if docker inspect "$cid" --format '{{json .Mounts}}' 2>/dev/null | grep -qF "${{ github.workspace }}/"; then
docker stop "$cid" 2>/dev/null || true
fi
done
sudo rm -rf ${{ github.workspace }}/* || true
sudo rm -rf ${{ github.workspace }}/.[!.]* || true
rm -rf ~/.cache/flashinfer_jit || true
docker container prune -f 2>/dev/null || true
docker image prune -f || true
docker builder prune -f --filter "until=24h" || true
echo "CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES"
nvidia-smi -i "$CUDA_VISIBLE_DEVICES" || true

- uses: actions/checkout@v4
with:
submodules: recursive

- name: Show Node Info
run: ./scripts/task_show_node_info.sh
env:
NODE_NAME: ${{ runner.name }}
WORKSPACE: ${{ github.workspace }}
BUILD_NUMBER: ${{ github.run_number }}

- name: Run DLLM Block Extend Tests
run: bash ci/bash.sh ${DOCKER_IMAGE} ./scripts/task_jit_run_tests_dllm.sh

# ---------------------------------------------------------------------------
# Test Results Summary
# ---------------------------------------------------------------------------
Expand All @@ -630,6 +715,8 @@ jobs:
- analyze-gpu-t4-failure
- gpu-tests-t4-rerun
- gpu-tests-h100
- gpu-tests-dllm-a10g
- gpu-tests-dllm-h100
runs-on: ubuntu-latest
steps:
- name: Check Authorization
Expand Down Expand Up @@ -737,6 +824,21 @@ jobs:
FAILED=true
fi

# DLLM tests (no rerun logic - short-running jobs)
echo "" >> $GITHUB_STEP_SUMMARY
DLLM_A10G="${{ needs.gpu-tests-dllm-a10g.result }}"
echo "DLLM Tests (A10G): $DLLM_A10G" >> $GITHUB_STEP_SUMMARY
if [ "$DLLM_A10G" != "success" ] && [ "$DLLM_A10G" != "skipped" ] && [ "${{ github.event.inputs.skip_gpu }}" != "true" ]; then
FAILED=true
fi

echo "" >> $GITHUB_STEP_SUMMARY
DLLM_H100="${{ needs.gpu-tests-dllm-h100.result }}"
echo "DLLM Tests (H100): $DLLM_H100" >> $GITHUB_STEP_SUMMARY
if [ "$DLLM_H100" != "success" ] && [ "$DLLM_H100" != "skipped" ] && [ "${{ github.event.inputs.skip_gpu }}" != "true" ]; then
FAILED=true
fi

echo "" >> $GITHUB_STEP_SUMMARY
if [ "$FAILED" == "true" ]; then
echo "Result: Tests Failed" >> $GITHUB_STEP_SUMMARY
Expand Down
9 changes: 3 additions & 6 deletions csrc/batch_prefill_customize_config.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,7 @@
#define ADDITIONAL_FUNC_PARAMS {{ additional_func_params }}
#define ADDITIONAL_PARAMS_SETTER {{ additional_params_setter }}

#define DISPATCH_context(DTypeQ, DTypeKV, DTypeO, IdType, MASK_MODE, HEAD_DIM_QK, HEAD_DIM_VO, POS_ENCODING_MODE, USE_SLIDING_WINDOW, USE_LOGITS_SOFT_CAP, USE_FP16_QK_REDUCTION, AttentionVariant, RaggedParams, PagedParams, ...) \
DISPATCH_MASK_MODE(mask_mode, MASK_MODE, { \
constexpr auto use_custom_mask = MASK_MODE == MaskMode::kCustom; \
using AttentionVariant = {{ variant_name }}; \
__VA_ARGS__(); \
})
{{ dispatch_context }}

using namespace flashinfer;

Expand Down Expand Up @@ -76,6 +71,7 @@ struct RaggedParams {
__host__ __device__ __forceinline__ uint32_t get_kv_len(uint32_t batch_idx) const {
return kv_indptr[batch_idx + 1] - kv_indptr[batch_idx];
}

};

struct PagedParams {
Expand Down Expand Up @@ -116,6 +112,7 @@ struct PagedParams {
__host__ __device__ __forceinline__ uint32_t get_kv_len(uint32_t batch_idx) const {
return paged_kv.get_length(batch_idx);
}

};

{{ variant_decl }}
24 changes: 22 additions & 2 deletions csrc/batch_prefill_sm90_customize_config.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
#include <flashinfer/layout.cuh>
#include <flashinfer/cutlass_utils.cuh>

#include <flashinfer/utils.cuh>
#define ADDITIONAL_FUNC_PARAMS {{ additional_func_params }}
#define ADDITIONAL_PARAMS_SETTER {{ additional_params_setter }}

#define DISPATCH_context(DTypeQ, DTypeKV, DTypeO, IdType, MASK_MODE, HEAD_DIM_QK, HEAD_DIM_VO, USE_SLIDING_WINDOW, USE_LOGITS_SOFT_CAP, AttentionVariant, RaggedParams, PagedParams, ...) \
DISPATCH_MASK_MODE(mask_mode, MASK_MODE, { using AttentionVariant = {{ variant_name }}; __VA_ARGS__();})
{{ dispatch_context }}

using namespace flashinfer;

Expand Down Expand Up @@ -66,6 +66,16 @@ struct RaggedParams {
int window_left;

bool causal;

// Block Expanding support
__host__ __device__ __forceinline__ uint32_t get_qo_len(uint32_t batch_idx) const {
return qo_lens[batch_idx];
}

__host__ __device__ __forceinline__ uint32_t get_kv_len(uint32_t batch_idx) const {
return kv_lens[batch_idx];
}

};

struct PagedParams {
Expand Down Expand Up @@ -117,6 +127,16 @@ struct PagedParams {
int window_left;

bool causal;

// Block Expanding support
__host__ __device__ __forceinline__ uint32_t get_qo_len(uint32_t batch_idx) const {
return qo_lens[batch_idx];
}

__host__ __device__ __forceinline__ uint32_t get_kv_len(uint32_t batch_idx) const {
return kv_lens[batch_idx];
}

};

{{ variant_decl }}
7 changes: 1 addition & 6 deletions csrc/single_prefill_customize_config.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,7 @@
#define ADDITIONAL_PARAMS_SETTER {{ additional_params_setter }}


#define DISPATCH_context(DTypeQ, DTypeKV, DTypeO, IdType, MASK_MODE, HEAD_DIM_QK, HEAD_DIM_VO, POS_ENCODING_MODE, USE_SLIDING_WINDOW, USE_LOGITS_SOFT_CAP, USE_FP16_QK_REDUCTION, AttentionVariant, Params, ...) \
DISPATCH_MASK_MODE(mask_mode, MASK_MODE, { \
constexpr bool use_custom_mask = MASK_MODE == MaskMode::kCustom; \
using AttentionVariant = {{ variant_name }}; \
__VA_ARGS__(); \
})
{{ dispatch_context }}


using namespace flashinfer;
Expand Down
12 changes: 10 additions & 2 deletions csrc/single_prefill_sm90_customize_config.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
#define ADDITIONAL_FUNC_PARAMS {{ additional_func_params }}
#define ADDITIONAL_PARAMS_SETTER {{ additional_params_setter }}

#define DISPATCH_context(DTypeQ, DTypeKV, DTypeO, IdType, MASK_MODE, HEAD_DIM_QK, HEAD_DIM_VO, USE_SLIDING_WINDOW, USE_LOGITS_SOFT_CAP, AttentionVariant, Params, ...) \
DISPATCH_MASK_MODE(mask_mode, MASK_MODE, { using AttentionVariant = {{ variant_name }}; __VA_ARGS__(); })
{{ dispatch_context }}

using namespace flashinfer;

Expand Down Expand Up @@ -62,6 +61,15 @@ struct Params {
int window_left;

bool causal;

// Block Expanding support
__host__ __device__ __forceinline__ uint32_t get_qo_len(uint32_t batch_idx) const {
return qo_len;
}

__host__ __device__ __forceinline__ uint32_t get_kv_len(uint32_t batch_idx) const {
return kv_len;
}
};

{{ variant_decl }}
Loading
Loading