← 所有项目

Contribution Tasks

flashinfer-ai/flashinfer

候选人的 GPU kernel / 训练性能专长与 FlashInfer 的 attention、MoE、Cake、diffusion 模块高度重合;但当前无 GPU 算力,只能做纯 Python 层、文档、测试基建、构建/CI、代码审阅与 Colab T4 最终验证。本计划据此裁剪:所有卡都可在 MacBook 上开发与验证,仅最终确认走 Colab T4。

当前方向:项目处于 v0.7.1 rc 阶段,主战场是 Blackwell (SM100+) Cake 系列、训练算子、MoE、SM12x 支持与 deslop。维护者活跃(yyihuang、bkryu 等),CI 健康标签多,experimental 模块快速演进但 Python 层测试与文档滞后。

★ 6546Fork 15315 个候选任务Gemini:LongCat-2.0

更新于 2026-10-08T07:37:23+00:00 · 打开仓库 ↗

一、项目定位

FlashInfer 是一个面向 LLM serving 的高性能 GPU 内核库与内核生成器,核心卖点是在 attention、GEMM、MoE、采样、通信等推理热点路径上提供统一 API,并在 FlashAttention-2/3、cuDNN、CUTLASS、TensorRT-LLM 等多个后端之间按硬件与负载自动选择最优实现。项目采用 JIT 编译为默认模式:首次调用时按目标架构即时编译内核,开发者改内核源码无需重装包(pip install --no-build-isolation -e . -v),同时提供 flashinfer-cubin(预编译 cubin)和 flashinfer-jit-cache(架构特化的预构建 provider)用于生产冷启动与离线部署。 从结构上看,仓库分三层:include/ 放框架无关的 CUDA 内核定义(只接受 raw pointer),csrc/ 做 PyTorch op 注册与绑定,python/(即 flashinfer/ 包)暴露用户接口。这种分层在 CONTRIBUTING.md 里被明确为贡献规范。3rdparty 拉了 CUTLASS、CCCL、spdlog、NIXL 四个子模块,其中 NIXL 还有 3rdparty_patches/nixl 补丁目录,说明他们对上游做了定制。 从证据判断,项目处于「生产可用但快速演进」阶段:README 明确列出 SGLang、vLLM、TensorRT-LLM、TGI、MLC-LLM 等主流推理框架作为下游用户;最近 release 是 v0.7.1rc2(2026-10-02),v0.7.0.post1 在 2026-09-29,rc 节奏密集;最近提交热点集中在 csrc/cake_fmha(129 次)、flashinfer/experimental(79 次)、csrc/fused_moe(60 次)、csrc/cake_rmsnorm_train(43 次)等,说明 Blackwell(SM100+)相关的 Cake 系列后端、训练算子、MoE 是当前主战场。CUDA 支持 12.9/13.0/13.4(PyTorch nightly),Blackwell 支持在 v0.4.0 引入后持续深化。 与同类项目的差异点:FlashInfer 不只是 attention(区别于 FlashAttention 只做 FA),也不只是 GEMM(区别于 CUTLASS/CuTe 只做矩阵乘),而是把 attention + GEMM + MoE + 采样 + 通信 + 量化做成一个「推理内核全家桶」,并通过 JIT + 多后端 dispatch 在 serving 场景下追求开箱即用的 SOTA。

解决什么问题、给谁用

解决的核心问题是:LLM serving 在真实生产负载下,单一内核实现很难在所有 GPU 架构(Turing → Blackwell)、所有算子(attention/GEMM/MoE/采样/通信)、所有精度(BF16/FP8/FP4)和所有阶段(prefill/decode/混合 batch)上同时达到 SOTA。FlashInfer 通过统一 API + 多后端(FA2/3、cuDNN、CUTLASS、TRT-LLM)自动选择 + JIT 编译,让上层框架(vLLM、SGLang、TGI 等)不用为每种硬件/负载组合手写特化内核。 目标用户与典型场景: 1. 推理框架集成方——vLLM、SGLang、TensorRT-LLM、MLC-LLM、LightLLM、lorax、ScaleLLM 等,需要把 attention/MoE/GEMM 替换为 FlashInfer 后端以获取性能。 2. 训练-推理全栈团队——仓库中 cake_rmsnorm_train、cake_dsa_train、cake_mamba_ssd_combined 等提交热点表明他们正在把覆盖范围从推理扩展到训练前向/反向。 3. 硬件厂商/新架构适配者——Blackwell(SM100/103/107/110/120/121)的 CuTe DSL 内核、Kimi-K3、DeepSeek-V4.1 等最新模型特化内核是近期热点。 4. 量化/低精度研究者——FP8(per-tensor、groupwise UE8M0)、FP4(NVFP4/MXFP4)在 attention、GEMM、MoE 上的实现。

同类项目与差别

核心能力

能力在哪成熟度
Attention 内核(Paged/Ragged KV-Cache、prefill/decode/append、MLA、Cascade、Block-Sparse、POD-Attention)csrc/ 下 batch_attention.cu / batch_decode.cu / batch_prefill.cu / batch_decode_mla_*.cu / flashinfer/attention/成熟
多后端自动选择(FlashAttention-2/3、cuDNN、CUTLASS、TensorRT-LLM)flashinfer/attention/ 与 csrc/ 中的多后端分发逻辑成熟
GEMM(BF16、FP8 per-tensor 与 groupwise、FP4 NVFP4/MXFP4、Grouped GEMM)csrc/ 下 cake_grouped_fp8_gemm 相关、flashinfer/deep_gemm.py成熟(Blackwell FP4 路径实验)
Fused MoE 内核(DeepSeek-V3、Llama-4、标准 top-k 路由,FP8/FP4 量化 expert)csrc/fused_moe/、csrc/cake_bgmv_moe.cu、csrc/alphamoe_*成熟(新路由/新量化路径实验)
MoE Expert Parallel(NIXL-EP、NCCL-EP、NVSHMEM、MNNVL 多节点)csrc/ 与 3rdparty/nixl、flashinfer/comm/、moe_ep 相关实验(README 标 nvep 为 DEPRECATED alias,仍在活跃开发)
Sampling(Sorting-Free Top-K/Top-P/Min-P、Chain Speculative Sampling)flashinfer/cake_sampling.py、csrc/ 采样相关成熟
通信(AllReduce、Multi-Node NVLink MNNVL、NVSHMEM)flashinfer/comm/、csrc/ 通信相关、3rdparty/nixl实验
RoPE / RMSNorm / LayerNorm / SiLU / GELU 等辅助算子flashinfer/activation.py、csrc/ 相关 norm/rope 文件成熟
Blackwell(SM100+)CuTe DSL 内核(Cake 系列:cake_fmha、cake_rmsnorm_train、cake_dsa、cake_mamba_ssd_combined 等)csrc/cake_fmha、csrc/cake_rmsnorm_train、csrc/cake_dsa_*、csrc/cake_mamba_ssd_combined*、flashinfer/cute_dsl/实验(提交热点最集中,快速迭代中)
训练算子(RMSNorm 前反向、DSA 稀疏注意力训练、Mamba SSD 训练)csrc/cake_rmsnorm_train、csrc/cake_dsa_train、csrc/cake_mamba_ssd_combined*实验
扩散模型算子(diffusion_ops)flashinfer/diffusion_ops/、tests/diffusion_ops/实验(commit_hotspots 仅 2 次,刚起步)
JIT 编译基础设施 + 预编译 cubin + JIT-cache providerbuild_backend.py、flashinfer-cubin/、flashinfer-jit-cache-provider/、flashinfer-jit-cache/、flashinfer/jit/成熟
CUDAGraph / torch.compile 兼容README 与 flashinfer/compilation_context.py成熟
API Logging / Autotune / Traceflashinfer/api_logging.py、flashinfer/autotuner/、flashinfer/trace/成熟

阶段:生产可用、快速演进中。已被 vLLM、SGLang、TensorRT-LLM、TGI 等主流推理框架集成(README Adoption 节),v0.7.x rc 密集发布,Blackwell 支持持续加深;但大量新功能走 experimental 通道(flashinfer/experimental/、@flashinfer_experimental_api、@experimental_backend),实验性功能无兼容性保证。

技术栈:Python(>=3.10,<4.0);C++ / CUDA(.cu/.cuh,大量 .jinja 模板用于 kernel instantiation);PyTorch(op 注册与绑定,csrc/ 接受 torch.Tensor);Apache TVM FFI(构建后端依赖 apache-tvm-ffi>=0.1.11,<0.2);CUTLASS / CuTe DSL(3rdparty/cutlass,nvidia-cutlass-dsl>=4.7.0a0/4.8.0.dev0);CCCL(3rdparty/cccl);spdlog(3rdparty/spdlog);NIXL(3rdparty/nixl,有 3rdparty_patches/nixl 补丁);CUDA 12.9 / 13.0 / 13.4(PyTorch nightly);setuptools>=77 + 自定义 build_backend(build_backend.py);Ninja 并行编译(MAX_JOB 控制);Jenkins CI(Jenkinsfile)+ GitHub Actions(.github/workflows);pre-commit + codespell + clang-format

规模:目录与文件规模:csrc/ 约 3211 个条目(含子目录与文件),flashinfer/ 约 1947 个条目,benchmarks/ 约 208 个条目,docs/ 84 个条目,根路径下列出约 40 个顶层目录/文件。最近提交热点:csrc/cake_fmha 129 次、flashinfer/experimental 79 次、csrc/fused_moe 60 次、csrc/cake_rmsnorm_train 43 次、csrc/cake_all_gather_matmul 31 次、csrc/cake_grouped_fp8_gemm 31 次,显示 Blackwell/Cake 与 MoE 是当前开发重心。Release:最新 v0.7.1rc2(2026-10-02)、v0.7.1rc1(2026-09-30)、v0.7.0.post1(2026-09-29),rc 节奏密集。pushed_at 2026-10-05,说明仓库活跃。star 数未在证据中提供,需验证。

二、架构与代码地图

FlashInfer 在代码组织上大致分五层。最上层是 Python 接入层(flashinfer/ 包),给用户暴露统一 API(attention / GEMM / MoE / sampling / comm / diffusion 等),内部通过 TVM FFI 调用 C++ 算子;这一层还承载 AOT 导出、autotune cache、API logging、CLI 等横切关注点。往下是 C++ 调度与绑定层(csrc/),负责把 PyTorch Tensor 接进来、做后端选择、workspace 分配、plan/run 拆分、JIT kernel 打包,并把调用分发到具体后端。再往下是 JIT / 编译层(flashinfer/jit/、flashinfer/cute_dsl/、csrc/*.jinja),用 TVM FFI + Jinja 模板按 HEAD_MASK_TYPE、PAGE_SIZE、MASK_MODE、QK_LAYOUT 等超参即时编译出特化 kernel,是 FlashInfer 默认的交付形态。第四层是 后端执行层,包括 FlashAttention-2/3、cuDNN、CUTLASS、TensorRT-LLM、Cake(Blackwell 专用)、CuTe DSL、DeepGEMM、BGMV MoE、KDA、DSA、Mamba SSD 等多种后端,各自在 include/、csrc/、flashinfer/experimental/ 里实现。最底层是 硬件与工具层(3rdparty/cutlass、3rdparty/cccl、3rdparty/nixl、3rdparty/spdlog、3rdparty_patches/nixl、build_backend.py、build_utils.py、ci/),提供 CUTLASS/CuTe DSL、NVSHMEM/NIXL 通信、日志、编译驱动与 CI。这种分层在 CONTRIBUTING.md 里被明确为贡献规范:kernel 定义放 include/(只接受 raw pointer,不引用 Torch),op 注册放 csrc/(接受 Torch Tensor),Python 接口放 flashinfer/。

接入层调度层执行层硬件层flashinfer → csrc:TensorTensorflashinfer → jit:配置配置flashinfer → autotuner:请求请求csrc → cake:KV-cacheKV-cachecsrc → experimental:请求请求csrc → comm:TensorTensorjit → csrc:kernelautotuner → csrc:配置配置cake → 3rdparty:CuTeCuTeexperimental → 3rdparty:CuTeCuTecomm → 3rdparty:NIXLNIXLcubin → csrc:cubincubinjit_cache → jit:providerproviderbuild → csrc:编译编译tests → flashinfer:调用调用benchmarks → flashinfer:调用调用flashinferflashinferjit_cachejit_cachecubincubinteststestsbenchmarksbenchmarksautotunerautotunerjitjitcsrccsrccakecakeexperimentalexperimentalcommcommcute_dslcute_dsldiffusion_opsdiffusion_opsmambamamba3rdparty3rdpartybuildbuild
FlashInfer 四层架构:接入层通过 TVM FFI 调用调度层,调度层分发到执行层各后端,执行层依赖 3rdparty 硬件原语
模块 / 路径职责 · 入口 · 依赖
flashinfer
flashinfer/
1947 files
Python 用户入口层,暴露统一 API(attention/GEMM/MoE/sampling/comm/diffusion 等),承载 AOT、autotune cache、API logging、CLI、Cake 系列封装、实验性 API
入口:flashinfer.__init__, flashinfer.__main__:cli, flashinfer.aot, flashinfer.autotuner, flashinfer.cake_fmha, flashinfer.cake_dcp, flashinfer.deep_gemm, flashinfer.dsv3_ops, flashinfer.diffusion_ops, flashinfer.comm, flashinfer.experimental
依赖:csrc (via tvm_ffi), 3rdparty/cutlass, 3rdparty/cccl
包内按算子类型切分子目录:attention/, comm/, cute_dsl/, cutile/, cudnn/, autotuner/, experimental/, diffusion_ops/, mamba/ 等;Cake 系列(cake_fmha/cake_dcp/cake_rmsnorm_train/cake_sampling/cake_vsa 等)是 Blackwell 主战场
csrc
csrc/
3211 files
C++ 调度与 PyTorch op 绑定层,做后端选择、workspace 分配、plan/run 拆分、JIT kernel 打包,并把调用分发到 FlashAttention/cuDNN/CUTLASS/Cake/DeepGEMM/BGMV MoE 等后端
入口:csrc/batch_attention.cu, csrc/batch_decode.cu, csrc/batch_prefill.cu, csrc/batch_mla_*.cu, csrc/batch_pod.cu, csrc/fused_moe/*.cu, csrc/cake_fmha/*.cu, csrc/deep_gemm/*.cu, csrc/bgmv_moe/*.cu, csrc/dcp/*.cu, csrc/blackwell_bf16_fp4/*.cu
依赖:include/, 3rdparty/cutlass, 3rdparty/cccl, 3rdparty/nixl, tvm_ffi
提交热点集中在 cake_fmha(129)、fused_moe(60)、cake_rmsnorm_train(43)、cake_all_gather_matmul(31)、cake_grouped_fp8_gemm(31)、cake_mamba_ssd_combined(14)、cake_bgmv_moe(10),说明 Blackwell + 训练 + MoE 是当前主战场
jit
flashinfer/jit/
需验证
JIT 编译层,用 TVM FFI + Jinja 模板按 HEAD_MASK_TYPE/PAGE_SIZE/MASK_MODE/QK_LAYOUT 等超参即时编译出特化 kernel,是 FlashInfer 默认交付形态
入口:flashinfer/jit/*.py (需验证具体文件名,目录下有 7 次提交)
依赖:csrc/, include/, 3rdparty/cutlass, tvm_ffi
CLAUDE.md 明确「JIT by default」,开发者改 kernel 源码无需重装包;flashinfer-jit-cache 与 flashinfer-jit-cache-provider 是它的生产化配套
cake
csrc/cake_fmha/, flashinfer/cake_fmha.py, flashinfer/cake_fmha_request_ordered.py, flashinfer/cake_dcp.py, flashinfer/cake_rmsnorm_train.py, flashinfer/cake_sampling.py, flashinfer/cake_vsa.py, flashinfer/cake_minimax_h3.py
cake_fmha 单目录 129 次提交,cake_rmsnorm_train 43 次
Blackwell (SM100+) 专用高性能后端,覆盖 attention、DCP、RMSNorm 训练、采样、VSA、Minimax H3 等,是提交最密集的模块
入口:csrc/cake_fmha/*.cu (129 次提交), flashinfer/cake_fmha.py, flashinfer/cake_dcp.py, flashinfer/cake_rmsnorm_train.py, flashinfer/cake_vsa.py, flashinfer/cake_minimax_h3.py
依赖:3rdparty/cutlass (CuTe DSL), 3rdparty/cccl, csrc/blackwell_bf16_fp4/
Cake 系列是 v0.4.0 引入 Blackwell 支持后的主战场,最近提交包括 cake_fmha 重构、cake_dcp 单 program per split-KV、cake_rmsnorm_train 训练前向/反向、cake_bgmv_moe 第 5 轮调优、cake_grouped_fp8_gemm UE8M0、cake_all_gather_matmul 等
experimental
flashinfer/experimental/
79 次提交
实验性 API 与后端容器,用于快速演进的工作(SM12x 内核、新模型算子、特化 kernel),受 @flashinfer_experimental_api 与 @experimental_backend 管控
入口:flashinfer/experimental/*.py (79 次提交)
依赖:csrc/, include/, 3rdparty/cutlass, 3rdparty/cccl
CONTRIBUTING.md 明确实验性功能必须放在 flashinfer/experimental/,不注册到 aot.py,无兼容性保证,默认 4 周内毕业;FLASHINFER_ALLOW_EXPERIMENTAL_AUTO_BACKENDS=1 才允许 auto 路由到实验后端
comm
flashinfer/comm/, csrc/dcp/, csrc/comm/
flashinfer/comm 2 次提交, csrc/dcp 3 次提交, tests/comm 3 次提交
通信层,提供 AllReduce、MNNVL 多节点 NVLink、NVSHMEM 分布式内存、DCP alltoall、Ulysses A2A 等
入口:flashinfer/comm/*.py, csrc/dcp/*.cu, csrc/comm/*.cu
依赖:3rdparty/nixl, 3rdparty_patches/nixl, NCCL/NVSHMEM
NIXL 有 3rdparty_patches/nixl 补丁目录,说明对上游做了定制;最近提交有 cake_dcp 重构、cake_moe_finalize_allreduce、ulysses_head_chunk 等
cute_dsl
flashinfer/cute_dsl/
需验证
CuTe DSL 层,为 Blackwell 提供 Pythonic 的 kernel 编写方式(替代传统 C++ template),是 Cake 系列的基础
入口:flashinfer/cute_dsl/*.py
依赖:3rdparty/cutlass (nvidia-cutlass-dsl), CUDA 13.x
pyproject.toml 中 cu13 extra 依赖 nvidia-cutlass-dsl>=4.7.0a0,sm107 extra 需要 >=4.8.0.dev0;benchmarks 下有多份 cute_dsl 相关 bench
diffusion_ops
flashinfer/diffusion_ops/
2 次提交, tests/diffusion_ops 1 次提交
扩散模型算子层,支持 DiT / 视频生成推理加速(fused layernorm、quant 等)
入口:flashinfer/diffusion_ops/*.py
依赖:csrc/, include/
与候选人扩散模型推理加速背景匹配;benchmarks 有 bench_fused_dit_layernorm.py
mamba
flashinfer/mamba/, csrc/cake_mamba_ssd_combined/
flashinfer/mamba 2 次提交, tests/mamba 2 次提交
Mamba/SSD 层,支持状态空间模型推理(Mamba SSD combined scan)
入口:flashinfer/mamba/*.py, csrc/cake_mamba_ssd_combined/*.cu (14 次提交)
依赖:csrc/, include/, 3rdparty/cutlass
最近提交 cake_ssd_combined 是 SM100/SM103 的 exact-scan family,FP16 delta + FP32 state
autotuner
flashinfer/autotuner/
需验证
自动调优层,为 attention/GEMM/MoE 等选择最优后端与分块参数
入口:flashinfer/autotuner/*.py, flashinfer/autotune_cache.py
依赖:csrc/, jit/
benchmarks/bench_autotuner_accuracy.py 验证精度;FLASHINFER_DIST_AWARE_AUTOTUNE=1 启用实验性分布感知 autotune
cubin
flashinfer-cubin/
4 files
预编译 cubin 包,用于生产冷启动与离线部署,避免首次调用 JIT 编译延迟
入口:flashinfer-cubin/build_backend.py, flashinfer_cubin/*.py
依赖:csrc/, include/
README 推荐 flashinfer install-cubin-wheel 加速初始化
jit_cache
flashinfer-jit-cache/, flashinfer-jit-cache-provider/
flashinfer-jit-cache 4 files, flashinfer-jit-cache-provider 6 files
架构特化的预构建 kernel provider,是 JIT 的生产化配套
入口:flashinfer-jit-cache/build_backend.py, flashinfer-jit-cache-provider/build_backend.py, flashinfer_jit_cache_provider/*.py
依赖:csrc/, jit/
FLASHINFER_JIT_CACHE_PROVIDER_ARCH=9.0a 控制目标架构
3rdparty
3rdparty/cutlass, 3rdparty/cccl, 3rdparty/nixl, 3rdparty/spdlog, 3rdparty_patches/nixl
需验证
第三方依赖层,提供 CUTLASS/CuTe DSL、CCCUDA 原语、NIXL 通信、spdlog 日志
入口:3rdparty/cutlass/include/cute, 3rdparty/cutlass/include/cutlass, 3rdparty/cccl/, 3rdparty/nixl/, 3rdparty_patches/nixl/
依赖:CUDA Toolkit
NIXL 有 3rdparty_patches/nixl 补丁目录,说明对上游做了定制;cu13 extra 依赖 nvidia-cutlass-dsl>=4.7.0a0
build
build_backend.py, build_utils.py, ci/
ci/ 9 files
构建与 CI 层,驱动 editable install、cubin 编译、jit-cache provider 构建、多 CUDA 版本 CI
入口:build_backend.py, build_utils.py, ci/scripts/, ci/validate_cuda_versions.py
依赖:csrc/, include/, flashinfer/
pyproject.toml 指定 build-backend = build_backend;支持 CUDA 12.9/13.0/13.4;FLASHINFER_NVCC_THREADS/MAX_JOB 控制并行度
tests
tests/
tests/attention 4 次提交, tests/comm 3 次提交, tests/mamba 2 次提交, tests/diffusion_ops 1 次提交
测试层,覆盖 attention/comm/mamba/diffusion_ops/experimental 等,含 full 参数矩阵模式
入口:tests/attention/, tests/comm/, tests/mamba/, tests/diffusion_ops/, tests/experimental/
依赖:flashinfer/, csrc/
CLAUDE.md 推荐 pytest tests/ 与 pytest tests/ --full;多 GPU 测试用 mpirun -np 4
benchmarks
benchmarks/
208 files
基准测试层,含 208 个文件,覆盖 attention/GEMM/MoE/comm/sampling/sparse_attention/mamba/diffusion 等,含 cake 系列大量 bench
入口:benchmarks/flashinfer_benchmark.py, benchmarks/bench_*.py, benchmarks/routines/*.py, benchmarks/moe_ep/
依赖:flashinfer/, csrc/
benchmarks/routines/ 提供 attention/gemm/moe/norm/quantization/rope/sampling/sparse_attention/topk_varlen/mamba/unified_moe 等可复用 routine;benchmarks/moe_ep/ 是 MoE EP 专用 bench
目录树(按文件数)
  • csrc/ 3211 个文件
    alphamoe_fused_router.cu, alphamoe_nvfp4_c346_finalize.cu, alphamoe_nvfp4_c368_finalize.cu, alphamoe_nvfp4_c376_alignment.cu, alphamoe_nvfp4_c386_up.cu, alphamoe_nvfp4_c388_up.cu, alphamoe_nvfp4_sm100.cu, alphamoe_nvfp4_sm100_device_helpers.cuh, alphamoe_router, alphamoe_sm100.cu, api_log_stats.cu, batch_attention.cu, batch_attention_customize_config.jinja, batch_attention_jit_binding.cu
  • flashinfer/ 1947 个文件
    __init__.py, __main__.py, activation.py, aot.py, api_logging.py, artifacts.py, attention, attn_scores, autotune_cache.py, autotuner, cake_dcp.py, cake_fmha.py, cake_fmha_request_ordered.py, cake_fused_qk_rope_append.py
  • benchmarks/ 208 个文件
    README.md, bench_alphamoe_fused_router.py, bench_append_paged_kv_cache.py, bench_append_paged_mla_kv_cache.py, bench_attention_sink_triton_sgl_context.py, bench_attention_sink_triton_sgl_decode.py, bench_autotuner_accuracy.py, bench_b12x_mxfp4_moe.py, bench_batch_attention.py, bench_batch_decode.py, bench_bgmv_moe.py, bench_blackwell_attention.py, bench_blackwell_attention_cutedsl.py, bench_blackwell_msa_sm100.py
  • docs/ 84 个文件
    .gitignore, Makefile, _static, api, autotuning.rst, build_docs.sh, cli.rst, code_review_guidance.md, code_review_guidance_human.md, conf.py, deprecation_survey_v0.7.0.md, design_docs, experimental, experimental.rst
  • examples/ 25 个文件
    cake_minimax_h3_varlen_attention.py, cake_nvfp4_attention.py, deepseek_v41, experimental, pytorch
  • .github/ 23 个文件
    CODEOWNERS, ISSUE_TEMPLATE, labeler.yml, pull_request_template.md, workflows
  • ci/ 9 个文件
    bash.sh, cuda-versions.json, docker-tags.yml, scripts, setup_python.env, validate_cuda_versions.py
  • docker/ 9 个文件
    Dockerfile.ci, Dockerfile.flashinfer-ep-pytorch, Dockerfile.flashinfer-nvep, Dockerfile.vllm-flashinfer-ep, bash.sh, install, test_ci_image.py
  • flashinfer-jit-cache-provider/ 6 个文件
    .gitignore, build_backend.py, flashinfer_jit_cache_provider, package_config.py, pyproject.toml, setup.py
  • .claude/ 4 个文件
    skills
  • flashinfer-cubin/ 4 个文件
    .gitignore, build_backend.py, flashinfer_cubin, pyproject.toml
  • flashinfer-jit-cache/ 4 个文件
    .gitignore, build_backend.py, flashinfer_jit_cache, pyproject.toml
  • .devcontainer/ 3 个文件
    cu129, cu130, cu134
  • .clang-format/ 1 个文件
  • .clang-format-ignore/ 1 个文件
  • .dockerignore/ 1 个文件

一次调用怎么流过这些模块

一次典型推理请求(以 flashinfer.single_decode_with_kv_cache 或 flashinfer.BatchDecodeWithPagedKVCache 为例)的数据流如下: 1. Python 入口:用户调用 flashinfer/ 包下的 Python API(如 flashinfer/decode.py 中的 batch_decode_with_paged_kv_cache),传入 PyTorch Tensor(Q、K-cache、V-cache、page_table 等)和配置(mask_mode、layout、sm_scale、logits_soft_cap、backend 等)。 2. API logging / feature gate:若启用 FLASHINFER_LOGLEVEL,flashinfer/api_logging.py 的 @flashinfer_api 装饰器会记录调用参数,并通过 csrc/api_log_stats.cu 的 PrintTensorStatsKernel 在 device 上做 reduction 后打印统计(CUDA-graph friendly)。若调用实验性 API,@flashinfer_experimental_api 会做 feature-gate 检查并 warn-once。 3. 后端选择:Python 层根据 backend="auto" 或显式指定的 backend(flashattn / cudnn / cutlass / trtllm / cake / cute_dsl 等),结合 flashinfer/autotuner/ 的 heuristics 或 autotune cache 选择最优后端。实验性后端仅在 FLASHINFER_ALLOW_EXPERIMENTAL_AUTO_BACKENDS=1 时参与 auto 路由。 4. C++ 调度:通过 TVM FFI 进入 csrc/ 层。以 batch decode 为例,csrc/batch_decode.cu 的 BatchDecodeWithPagedKVCache 接收 TensorView,先做 workspace 大小查询(plan 阶段),再分配 float/int workspace,最后 run 阶段启动 kernel。csrc/batch_decode_jit_binding.cu 通过 TVM_FFI_DLL_EXPORT_TYPED_FUNC(plan/run, ...) 暴露给 Python。 5. JIT 编译:若命中 JIT 路径,flashinfer/jit/ 会根据 HEAD_MASK_TYPE、PAGE_SIZE、MASK_MODE、QK_LAYOUT 等超参,用 Jinja 模板(如 csrc/batch_decode_kernel_inst.jinja)实例化特化 kernel 源码,再通过 TVM FFI 调用 nvcc 编译,产物缓存到 ~/.cache/flashinfer/。首次调用有编译开销,后续复用缓存。 6. 后端执行:编译后的 kernel 在目标后端执行。以 Hopper attention 为例,走 include/flashinfer/attention/ 的 FA2/FA3 实现;以 Blackwell 为例,走 csrc/cake_fmha/ 或 csrc/blackwell_bf16_fp4/ 的 Cake 系列;MoE 走 csrc/fused_moe/ 或 csrc/bgmv_moe/;GEMM 走 csrc/deep_gemm/ 或 CUTLASS;通信走 csrc/dcp/ + 3rdparty/nixl。 7. 输出:kernel 执行完成后,输出 Tensor(O、可选 LSE)通过 TVM FFI 返回给 Python 层,用户拿到 PyTorch Tensor。 关键数据结构包括:TensorView(TVM FFI 的 Tensor 抽象)、workspace buffer(float/int 两类,用于 persistent kernel 的中间状态)、plan_info(plan 阶段预计算的调度信息)、Jinja 模板参数(控制 kernel 特化维度)。关键调度点包括:Python 层的 backend 选择、C++ 层的 plan/run 拆分、JIT 层的模板实例化与缓存查找。

1Python 入口flashinfer/decode.py · flashinfer/decode.py2API loggingflashinfer/api_logging.py (@flashinfer_a · flashinfer/api_logging.py3后端选择flashinfer/autotuner/ · flashinfer/autotuner/4C++ 调度BatchDecodeWithPagedKVCache · csrc/batch_decode.cu5JIT 编译flashinfer/jit/ · flashinfer/jit/6Cake kernel 执行csrc/cake_fmha/ · csrc/cake_fmha/7输出返回TVM FFI TensorView · csrc/tvm_ffi_utils.h

关键类型与函数

名称路径用途
TensorViewcsrc/tvm_ffi_utils.h (需验证具体路径)TVM FFI 的 Tensor 抽象,贯穿 Python↔C++ 边界,承载 Q/K/V/workspace/plan_info 等所有数据
BatchDecodeWithPagedKVCachecsrc/batch_decode.cuPaged KV-Cache batch decode 的核心调度函数,做 workspace 分配与 kernel 启动
BatchPagedAttentionPlan / Runcsrc/batch_attention.cu, csrc/batch_attention_jit_binding.cuPersistent batch attention 的 plan/run 两阶段接口,plan 预计算调度信息,run 执行 kernel
PrintTensorStatsKernelcsrc/api_log_stats.cuCUDA-graph friendly 的 device-side tensor 统计 kernel,用于 FLASHINFER_LOGLEVEL=5 的 API logging
MoeShrinkKernelConfig / MoeExpandKernelConfigcsrc/bgmv_moe/kernel_config.hBGMV MoE 的调优参数(threads/pipeline depth/pairs per block),针对 H100/H200 228 KB shared memory 优化
CakeTensorMap64csrc/blackwell_bf16_fp4/cake_blackwell_bf16_fp4_*.cuBlackwell CUtensorMap 的 64 对齐封装,用于 Cake 系列 kernel 的 TMA 描述符
flashinfer_experimental_apiflashinfer/api_logging.py实验性 API 装饰器,做 feature-gate 检查并 warn-once
experimental_backendflashinfer/experimental/ (需验证具体文件)实验性后端标记装饰器,管控 auto 路由准入
HolisticPlanInfocsrc/batch_attention.cu (需验证具体定义)TwoStageHolisticPlan 的输出,承载 persistent attention 的调度信息
flashinfer_apiflashinfer/api_logging.pyAPI logging 装饰器,记录调用参数与 tensor 统计
flashinfer.__main__:cliflashinfer/__main__.pyCLI 入口,提供 show-config/list-modules/download-cubin/install-jit-cache-wheel/export-compile-commands 等工具
flashinfer.aotflashinfer/aot.pyAOT 导出入口,实验性功能不注册于此(JIT-only)
flashinfer.autotunerflashinfer/autotuner/自动调优入口,为 attention/GEMM/MoE 选择最优后端与分块参数
flashinfer.cake_fmhaflashinfer/cake_fmha.pyCake FMHA (Blackwell attention) 的 Python 封装
flashinfer.commflashinfer/comm/通信层 Python 封装,覆盖 AllReduce/MNNVL/NVSHMEM/DCP/Ulysses A2A 等

扩展点

最近在动的地方

建议阅读顺序

  1. README.md — 项目定位、核心特性、GPU 支持、安装方式、下游用户
  2. CLAUDE.md — 开发工作流(editable install、测试、benchmark、环境变量、JIT 缓存清理)
  3. CONTRIBUTING.md — 代码结构规范(include/csrc/python 分层)、实验性功能政策、贡献流程
  4. flashinfer/__init__.py — Python 包入口,了解对外暴露的 API 全貌
  5. csrc/batch_decode.cu + csrc/batch_decode_jit_binding.cu — 典型 C++ 调度与 TVM FFI 绑定范例(plan/run 拆分)
  6. flashinfer/jit/ — JIT 编译层,理解 Jinja 模板实例化与 kernel 缓存机制
  7. csrc/cake_fmha/ — Blackwell attention 后端,提交最密集,代表最新架构支持方向
  8. flashinfer/experimental/ — 实验性 API 与后端容器,理解快速演进中的工作
  9. flashinfer/comm/ + csrc/dcp/ — 通信层,覆盖 AllReduce/MNNVL/NVSHMEM/DCP
  10. tests/ + benchmarks/ — 测试与基准,验证理解正确性

三、本地跑起来(没有 GPU 的 Mac)

安装

  1. git clone https://github.com/flashinfer-ai/flashinfer.git --recursive && cd flashinfer
  2. git submodule update --init --recursive
  3. python -m pip install --upgrade pip setuptools
  4. python -m pip install --no-build-isolation -e . -v

哪些路径能真跑

['所有 csrc/*.cu、include/、flashinfer/jit/、flashinfer/cute_dsl/ 中的 CUDA kernel 与 JIT 编译链在 Apple Silicon 上完全无法执行,只能读代码;flashinfer/experimental/ 下的 Blackwell/Hopper 后端同理。', 'flashinfer/ 包中纯 Python 层(api_logging.py、autotune_cache.py、aot.py、comm/、diffusion_ops/、mamba/ 等)可以 import 并阅读逻辑,但一旦触发 kernel launch 或 TVM FFI 调用就会失败。', 'tests/ 下所有调用 torch.cuda 或真正跑 kernel 的 pytest case 都无法执行;只能跑不依赖 CUDA 的纯逻辑/结构测试(需验证具体哪些 case 不 import torch.cuda)。', 'benchmarks/ 全部依赖 CUDA runtime,无法在本地执行。', '唯一能真正执行的路径是 flashinfer collect-env、flashinfer show-config、flashinfer list-modules 等 CLI 只读命令,以及阅读 flashinfer/__init__.py 的导入链。', '最终验证必须用 Colab 免费 T4(SM7.5)跑 JIT 首次编译与 kernel launch。']

最小可运行

  1. 在 Colab T4 上执行:import torch, flashinfer; q = torch.randn(32, 128, device='cuda', dtype=torch.float16); k = torch.randn(2048, 32, 128, device='cuda', dtype=torch.float16); v = torch.randn(2048, 32, 128, device='cuda', dtype=torch.float16); print(flashinfer.single_decode_with_kv_cache(q, k, v))
  2. 在 Colab T4 上执行:pytest tests/ -x --timeout=120(首次会触发 JIT 编译,耗时较长)
  3. 在 Colab T4 上执行:python benchmarks/flashinfer_benchmark.py --routine attention
  4. 在 Colab T4 上执行:flashinfer show-config

测试

pytest;测试目录为 tests/,含 tests/attention、tests/comm、tests/mamba、tests/diffusion_ops、tests/experimental 等子目录;CLAUDE.md 给出 pytest tests/ 与 pytest tests/ --full 两种粒度;多 GPU 测试用 mpirun -np 4 pytest tests/comm/test_allreduce_unified_api.py;无 GPU 时只能跑不依赖 CUDA 的纯逻辑 case,需逐文件验证,预计 CPU 子集耗时 <1 分钟,完整 suite 在 T4 上首次 JIT 编译可能需数十分钟。

调试

CI

Jenkins(ci.tlcpack.ai)+ GitHub Actions;CI 脚本在 ci/ 与 .github/workflows;PR 会被 pre-commit、lint、CUDA 版本校验(ci/validate_cuda_versions.py)、多架构构建、多 GPU 测试卡住;具体 gate 需查看 Jenkinsfile 与 .github/workflows 确认。

坑

四、维护者与社区

极高。最近三次 release 集中在 2026-09-29 到 2026-10-02 之间(v0.7.0.post1 → v0.7.1rc1 → v0.7.1rc2),rc 节奏约 2 天一次。提交热点高度集中在 csrc/cake_fmha(129 次)、flashinfer/experimental(79 次)、csrc/fused_moe(60 次)、csrc/cake_rmsnorm_train(43 次)、csrc/cake_all_gather_matmul(31 次)、csrc/cake_grouped_fp8_gemm(31 次),说明 Blackwell(SM100+)Cake 后端、训练算子、MoE 是当前主战场,几乎每天有多轮迭代。CI 徽章指向 https://ci.tlcpack.ai/job/flashinfer-ci/job/main/ ,表明有持续集成流水线。

谁角色依据
yzh119核心维护者 / 仓库负责人,从 Issue 4254(CAKE 长期进度跟踪)assignees 推断为项目 leadIssue #4254 assignees 首位
yyihuangCake 后端主力开发者,负责大量 Cake kernel 的 feat/refactor/perf 提交Issue #5800、#5769、#5771、#5156、#5716、#5936、#5768 均 assignees 给 yyihuang;commit 中 cake_fmha、cake_dcp、cake_bgmv_moe、cake_dsa、cake_ssd_combined 等提交标题风格一致
xslingcnCAKE 方向维护者Issue #4254 assignees 之一
bkryucuTile / MoE 方向维护者Issue #4857(cuTile MoE progress tracker)assignees 给 bkryu;Issue #3170(DGX Spark SM121 审计)assignees 含 bkryu
aditya4dMoE 方向维护者Issue #5706(NVFP4 MegaMoE on SM90)assignees 给 aditya4d
jimmyzhoSM107 / Kimi-K3 方向维护者Issue #5473(SM107 PDL for TRT-LLM Gen NVFP4 routed MoE)assignees 给 jimmyzho
dierksenCLI / 工具链维护者Issue #5886(flashinfer download-kernels 失败)assignees 给 dierksen
Kushagra7777MoE CuTe-DSL 缓存方向贡献者Issue #4317(sm12x MoE CuTe-DSL kernels never disk-cached)assignees 给 Kushagra7777
leonardHONG编译性能方向贡献者Issue #4110(GDN decode cold kernel compilation time too long)assignees 给 leonardHONG
kaushik-rohitGEMM-AllReduce 融合方向贡献者Issue #2359(Next fix for gemm-allreduce two-shot)assignees 给 kaushik-rohit
Vinnie6167SM107 精度问题贡献者Issue #4964(SM107 mxint4 精度超 tol)assignees 给 Vinnie6167

流程与 Review 风格

CONTRIBUTING.md 明确贡献流程:先写 kernel 定义在 include/(框架无关 CUDA,只接受 raw pointer,不引用 Torch),再写 op 注册与 PyTorch binding 在 csrc/(接受 Torch Tensor),Python 接口放 flashinfer/,单元测试放 tests/,可选 benchmark 放 benchmarks/,文档索引更新在 docs/,新建模块需更新 pyproject.toml。Experimental API 必须放在 flashinfer/experimental/ 并用 @flashinfer_experimental_api 标记,需有 named owner + tracking issue + correctness tests against reference + runnable example,且不得注册到 flashinfer/aot.py(JIT-only)。PR 模板中有 Experimental Track 复选框,maintainers 会加 experimental label。仓库有 .github/pull_request_template.md 和 .github/CODEOWNERS(PR #3531 专门更新 CODEOWNERS),说明有 PR 模板和代码所有者机制。AGENTS.md 指向 CLAUDE.md,CLAUDE.md 提供开发命令速查(pip install --no-build-isolation -e . -v、pytest tests/、pre-commit run -a、flashinfer collect-env 等)。.pre-commit-config.yaml 存在,说明有 pre-commit 钩子。docs/code_review_guidance_human.md 存在,说明有专门的人类 review 指南。未在 README/CONTRIBUTING 中看到 CLA 或 DCO 声明,需验证。

从 PR 标题和 Issue 标题推断,review 风格高度技术化且注重性能数据。PR 标题如 perf(cake_bgmv_moe): round-5 BGMV MoE kernels: pair-grouped exact pipeline, programmatic dependent launch, per-arch selectors (#6016)、feat(cake_grouped_fp8_gemm): block-scaled UE8M0 family with native -1 padding and per-call operand rebinding (SM100a/SM103a) (#6048) 表明每个 PR 都附带具体架构、具体优化手段、具体 round 编号。Issue 标题如 [Performance] XQA sm90 decode (head_dim 256, fp8 KV, page 16), batch 10 / 124K ctx: 18% of HBM peak, 66-block grid, 12.5% warp occupancy — 65% of the decode step 表明性能 issue 必须带完整 profiling 数据。[cake deslop] 系列 Issue(#5800、#5769、#5771、#5768)表明社区主动追踪技术债并要求精简生成代码。needs-triage 标签广泛使用,说明有分类流程。CI 徽章和 Jenkinsfile 表明自动化测试是 merge 前提。响应速度方面,从最近提交日期(2026-10-05)和 Issue 更新日期(2026-10-05)看,核心维护者几乎每天活跃。

渠道

这里的规矩

维护者现在最想要的帮助

五、切入方案

建议长期负责:flashinfer/experimental/ 的 Python 层(含 experimental API 的契约测试、backend 选择逻辑、错误路径、docstring、tutorial)+ flashinfer/diffusion_ops/ 模块(与候选人的扩散模型推理背景对接)
experimental 是提交第二热点(79 次),处于快速演进期,需要有人长期维护 Python 端的契约与文档;该层大部分工作(API 校验、backend 路由、错误消息、docstring、tutorial、mock 测试)可在 CPU 上完成,符合无 GPU 约束。diffusion_ops 提交少(2 次)且直接对口候选人的 DiT/视频生成经验,是低竞争、高契合的切入点。通往维护者路径:先通过补测试/文档成为 experimental 方向的 reviewer,再逐步接触 csrc/ 的 CUDA kernel。

它现在缺什么(你无 GPU 也能补)

缺口依据为什么是你
flashinfer/experimental/ 下缺少系统性的 Python 端单元测试,尤其是非 CUDA 路径的纯逻辑/结构校验commit_hotspots 显示 flashinfer/experimental/ 有 79 次提交,是第二热点;CONTRIBUTING.md 要求 experimental 特性提供 correctness tests against a reference in tests/experimental/,但目录树中 tests/ 下仅能看到 tests/attention、tests/comm、tests/mamba、tests/diffusion_ops 等,未见 tests/experimental/ 子目录无 GPU 也能写:experimental 模块的 API 契约、输入校验、backend 选择逻辑、错误消息、参数序列化等都可在 CPU 上跑 pytest。你擅长算子融合与后端对照,能设计出对 experimental 模块的 mock backend 测试
docs/ 中 experimental API 与 JIT 编译链的文档滞后于代码,缺少「如何新增一个 experimental backend」的 tutorialdocs/ 目录含 experimental.rst 与 code_review_guidance.md,但目录树中 tutorials/ 下未见 experimental backend 开发指南;CONTRIBUTING.md 的 Experimental APIs and Backends 章节描述了规则却未链接到具体 tutorial纯文档工作,MacBook 上即可完成。你熟悉 CUTLASS/CuTe DSL 与 JIT 流程,可基于 flashinfer/experimental/ 现有代码(如 cake_dcp.py、dsa_indexer.py)反推出开发路径并写成 tutorial
flashinfer/jit/ 与 flashinfer/cute_dsl/ 的 Python 层缺少对 Jinja 模板变量的静态校验与错误提示测试csrc/ 下大量 .jinja 模板(如 batch_attention_customize_config.jinja、batch_decode_kernel_inst.jinja)通过 TVM FFI 编译;commit_hotspots 中 flashinfer/jit 仅 7 次提交,相对冷门;模板变量(HEAD_MASK_TYPE、PAGE_SIZE、MASK_MODE、QK_LAYOUT)在 Python 端如何校验未见系统测试可在 CPU 上跑:构造非法参数组合,断言抛出异常与错误消息。你擅长 Triton/CuTe DSL,能读懂 Jinja 模板里的变量约束
benchmarks/ 缺少跨后端对照的轻量级回归脚本(backend comparison 系列虽有但分散,无统一入口)benchmarks/ 下存在 bench_gqa_decode_backend_comparison.py、bench_mla_decode_backend_comparison.py、bench_ragged_prefill_backend_comparison.py 等,但 flashinfer_benchmark.py 的 --routine 列表是否覆盖所有 backend 对照未见文档;README 与 docs/ 未列出如何跑「同一负载下 FA2/FA3/CUDNN/CUTLASS/Cake 谁赢」的标准流程可先做纯 Python 层的脚本封装与文档,不依赖 GPU。你擅长性能工程,能设计出在 Colab T4 上 5 分钟内跑完的最小 backend comparison 矩阵
flashinfer/comm/ 与 flashinfer/diffusion_ops/ 的 Python 接口缺少类型标注与 docstring 覆盖commit_hotspots 中 flashinfer/comm 仅 2 次、flashinfer/diffusion_ops 仅 2 次提交,属于冷门模块;目录树显示 comm/ 与 diffusion_ops/ 是子包,但 docs/api/ 下未见完整 API 参考;diffusion_ops 与你的扩散模型推理加速背景高度重合纯静态工作:读源码补 docstring、补类型标注、写 example snippet。MacBook 上即可完成,且 diffusion_ops 直接对口你的 DiT/视频生成经验
ci/ 与 build_backend.py 缺少对「无 GPU 环境也能跑的最小 CI 步骤」的支持,导致外部贡献者无法本地验证非 CUDA 改动ci/ 目录含 bash.sh、cuda-versions.json、validate_cuda_versions.py;CLAUDE.md 与 CONTRIBUTING.md 未描述如何在没有 GPU 的情况下跑 pre-commit 或最小测试集;build_backend.py 是自定义 build backend,其纯 Python 逻辑(如版本校验、模块发现)未见独立测试你熟悉构建系统与 CI,可写 validate_cuda_versions.py 的单元测试、build_backend.py 的纯函数测试,并在 CONTRIBUTING.md 中新增「无 GPU 开发」章节
flashinfer/experimental/ 下 Blackwell/Hopper 后端的 Python 端缺少对「目标架构不支持时」的优雅降级与可测试错误路径README 支持 SM75-SM12.1;experimental 后端用 @experimental_backend 标记(见 CONTRIBUTING.md);cake 系列提交热点集中在 SM100/SM103/SM107,但非 Blackwell 用户触发 experimental backend 时的错误消息与 fallback 行为未见系统测试可在 CPU 上 mock torch.cuda.get_device_capability() 测试降级路径。你熟悉多后端 dispatch,能写出覆盖「架构不支持 / 编译失败 / cubin 缺失」等分支的测试
flashinfer/__init__.py 与 flashinfer/__main__.py 的 CLI 路径缺少对 collect-env / show-config / list-modules 等只读命令的单元测试runbook 指出 collect-env、show-config、list-modules 是「唯一能真正执行的路径」;CLAUDE.md 列出这些命令但 tests/ 下未见对应测试;__main__.py 实现 CLI 入口但未见 argparse 分支覆盖测试MacBook 上直接可跑:这些命令不依赖 CUDA。你擅长系统级代码,能补全 CLI 测试并为后续无 GPU 开发流程打基础

第 1–30 天:看懂并露面

第 31–60 天:稳定产出

第 61–90 天:接管一块

第一批 PR

题目范围为什么安全
test(experimental): add Python-level contract tests for experimental backend registration and fallback在 tests/ 下新增 test_experimental_backend.py,覆盖 @experimental_backend 标记的 backend 在不支持架构下的错误消息、fallback 行为、@flashinfer_experimental_api 的门控警告;用 unittest.mock 替代 CUDA 调用纯 Python 层测试,不依赖 GPU;基于 CONTRIBUTING.md 已明确的 experimental 规则,不假设任何 bug;MacBook 上即可验证
docs(diffusion_ops): add docstring, type annotations, and usage examples为 flashinfer/diffusion_ops/ 子包中所有公开函数与类补全 NumPy-style docstring 和类型标注;在 examples/ 下新增 diffusion_ops 最小可运行示例(CPU 可跑结构,GPU 可跑完整计算)文档与类型标注不改运行逻辑;diffusion_ops 提交少、冲突风险低;直接对口候选人扩散模型经验
test(cli): add unit tests for flashinfer collect-env / show-config / list-modules在 tests/ 下新增 test_cli.py,覆盖 __main__.py 中 argparse 各分支;断言退出码、输出格式、--json 等 flag 行为CLI 只读命令不依赖 CUDA;runbook 已验证这些命令可在 MacBook 执行;测试范围明确且不触及 kernel
docs(experimental): add tutorial for developing a new experimental backend新增 docs/experimental/backend_development_tutorial.rst,基于 cake_dcp.py 或 dsa_indexer.py 演示 backend 注册、@experimental_backend 标记、support check、JIT 集成、测试与毕业流程;在 CONTRIBUTING.md 中添加链接纯文档 PR,无代码风险;基于现有代码反推,不引入新实现;符合 CONTRIBUTING.md 已有的 experimental 政策
test(build): add unit tests for build_backend.py pure-Python utilities在 tests/ 下新增 test_build_backend.py,覆盖 build_backend.py 中版本校验、模块发现、环境变量解析等纯函数(如依赖解析、FLASHINFER_CUDA_ARCH_LIST 解析);用 mock 替代实际编译build_backend.py 是自定义 build backend,其纯 Python 逻辑可独立测试;不触发实际编译;为后续无 GPU CI 打基础

怎么知道自己站住了

风险与对策
  • experimental 模块处于快速演进期(79 次提交),API 可能频繁变更导致测试/文档 PR 快速过时:优先测试契约(输入/输出类型、错误消息模式)而非实现细节;在 PR 中明确标注「experimental 特性可能变更」;与 owner 同步后再动核心逻辑
  • 无 GPU 导致无法验证 kernel 正确性,Python 层测试可能给虚假安全感:所有测试明确标注「Python-layer only」;在 Colab T4 上定期跑 smoke test(引用 runbook 示例);在 PR 描述中列出「未覆盖的 GPU 路径」
  • 核心维护者响应快但 PR 标准高(rc 节奏 2 天一次),文档/测试类 PR 可能因「不够核心」被低优先:首 PR 尽量小且自包含(如单文件测试);在 Slack 提前沟通方向;绑定到具体 Issue(如 docs 缺失、test 缺失)而非泛泛改进
  • flashinfer/experimental/ 与 csrc/ 中 CUDA kernel 紧密耦合,Python 层 mock 可能掩盖真实集成问题:在测试文档中明确列出 mock 边界;对每个 experimental backend 标注「需要 GPU 验证的集成点」;推动在 CI 中增加 experimental 的 GPU 回归(哪怕只是 T4)
  • diffusion_ops 模块提交极少(2 次),可能意味着优先级低或即将重构,投入可能沉没:先做 docstring/类型标注等轻量贡献验证兴趣;在 Issue 或 Discussion 中询问 diffusion_ops 的维护计划后再深入
  • build_backend.py 与 ci/ 的改动可能影响所有用户的构建流程,风险高于普通测试 PR:首阶段只添加测试不修改构建逻辑;如需改 ci/,先在 PR 中提供「无 GPU CI」的 opt-in 开关;请维护者在合并前跑全量 CI
  • MacBook 16GB 内存限制,跑大型 pytest 或 submodule 初始化可能 OOM:用 pytest -k 过滤目标测试;submodule 用 --depth 1 浅克隆;避免同时跑多个 heavy 测试
  • experimental 的「毕业」流程涉及核心 API 变更,需要强 review 与下游(SGLang/vLLM)协调,周期可能很长:毕业不是短期目标;先以「让 experimental 更易用、更可测试」建立信任;毕业 proposal 前主动与 yzh119 对齐

六、怎么介入这个项目

社区入口:join.slack.com/t/flashinfer/shared_invit · github.com/orgs/flashinfer-ai/discussion

建议顺序

成为长期维护者的路径
  • README 与 CONTRIBUTING.md 明确 experimental 特性必须带 correctness tests against a reference in tests/experimental/
  • CONTRIBUTING.md 要求 PR 勾 Experimental Track 并 link tracking issue
  • CI 健康标签 (ci: health, v0.7.1) 显示维护者关注测试稳定性
  • Slack 与 Discussion Forum 是讨论渠道

七、任务卡

任务 1可选 · easy · CPU · 1–2 个晚上

test(cli): 为 flashinfer collect-env / show-config / list-modules 补单元测试

无人认领0 条评论needs-triage更新 2026-09-30

用到的专长:候选人的系统级代码经验,能补全 CLI 测试并为后续无 GPU 开发流程打基础。

目标:在 tests/ 下新增 test_cli.py,覆盖 __main__.py 中 argparse 各分支(collect-env、show-config、list-modules),断言退出码、输出格式、--json 等 flag 行为。

为什么值得长期做:CLI 是用户与开发者最常接触的入口(flashinfer show-config 是验证安装的标准命令),但缺少单元测试;补上后为后续 CLI 扩展提供回归保护,且与 release 质量直接相关。

怎么介入:Issue #5749 无 assignee,是 release highlights draft,CLI 测试与 release 质量相关,可安全认领。
第一个 PR 的边界:第一个 PR 只覆盖只读 CLI 命令(collect-env、show-config、list-modules),不涉及 cubin/jit-cache 等需 GPU 的命令。
第一步:阅读 flashinfer/__main__.py 的 argparse 结构与各命令实现,梳理可测试的纯逻辑分支。
本机怎么复现 / 验证:在 MacBook 上:pip install -e .[dev] && pytest tests/test_cli.py(新增文件,CLI 只读命令不依赖 CUDA)
认领留言(英文,可直接贴到 Issue)
I'd like to add unit tests for the FlashInfer CLI commands (collect-env, show-config, list-modules). Plan: create tests/test_cli.py, call each command via subprocess or mock, and assert exit codes and output format. All tests run on CPU without GPU. Should I cover all CLI commands or focus on read-only ones first? I'll have a PR ready in a couple of days.
大致实施方案
  • 在 tests/ 下新建 test_cli.py
  • 用 unittest.mock 或 subprocess 调用 flashinfer CLI 命令
  • 断言各命令的退出码为 0
  • 断言输出包含预期字段(如 show-config 输出包含 version、cuda_version)
  • 覆盖 --json flag 的 JSON 解析
  • 在 MacBook 上跑 pytest tests/test_cli.py 验证
可能涉及的目录或文件
  • flashinfer/__main__.py
  • flashinfer/__init__.py(版本信息)
  • 需先定位 collect-env / show-config / list-modules 的实现
验收方式
  • pytest tests/test_cli.py 在 MacBook 上全通过
  • 所有命令不依赖 CUDA 实际调用
  • 覆盖至少 3 个 CLI 子命令
开工前问题与风险

向维护者确认

  • 维护者希望测试放在 tests/ 根目录还是 tests/cli/?
  • 是否需要覆盖所有 CLI 命令还是只优先只读命令?

风险

  • CLI 输出格式可能随版本变化,测试需适度宽松
  • 某些命令可能隐式触发 CUDA 调用,需 mock
任务 2可选 · easy · Mac · 2–3 个晚上

docs(diffusion_ops): 补全 docstring、类型标注与最小可运行示例

无人认领0 条评论needs-triage更新 2026-09-30

用到的专长:候选人的扩散模型推理加速经验,能准确理解 diffusion_ops 的参数语义与使用场景。

目标:为 flashinfer/diffusion_ops/ 子包中所有公开函数与类补全 NumPy-style docstring 和类型标注;在 examples/ 下新增 diffusion_ops 最小可运行示例(CPU 可跑结构,GPU 可跑完整计算)。

为什么值得长期做:diffusion_ops 模块与候选人的扩散模型推理加速背景高度重合,且提交少(2 次)、冲突风险低;补全文档可提升模块可维护性,为后续 diffusion 特性扩展打基础。

怎么介入:Issue #5749 无 assignee,diffusion_ops 提交少、冲突风险低,可安全认领。
第一个 PR 的边界:第一个 PR 只覆盖 docstring、类型标注与示例,不改运行逻辑。
第一步:阅读 flashinfer/diffusion_ops/ 下所有公开函数与类,梳理参数、返回值、异常。
本机怎么复现 / 验证:在 MacBook 上:pip install -e .[dev] && python -c "import flashinfer.diffusion_ops; help(flashinfer.diffusion_ops)" 验证 docstring 渲染;python examples/diffusion_ops_example.py 验证 CPU 结构部分
认领留言(英文,可直接贴到 Issue)
I'd like to add NumPy-style docstrings, type annotations, and a minimal usage example for the flashinfer/diffusion_ops module. Plan: document all public functions/classes, add type hints, and create examples/diffusion_ops_example.py with a CPU-runnable structure section. Should I follow NumPy or Google docstring style? Any existing examples I should match? I'll have a PR ready in a few days.
大致实施方案
  • 为 diffusion_ops/__init__.py 及各模块的公开函数补全 docstring(参数、返回值、异常、示例)
  • 补全类型标注(typing)
  • 在 examples/ 下新建 diffusion_ops_example.py,展示 CPU 可跑的结构(import、构造输入)与 GPU 的完整计算路径
  • 在 docs/api/ 下更新 diffusion_ops 相关文档索引
  • 在 MacBook 上验证 import 与 docstring 渲染
可能涉及的目录或文件
  • flashinfer/diffusion_ops/__init__.py
  • flashinfer/diffusion_ops/*.py
  • examples/ 目录
  • docs/api/ 目录
验收方式
  • 在 MacBook 上 import flashinfer.diffusion_ops 无报错
  • docstring 可通过 help() 或 sphinx 渲染
  • examples/diffusion_ops_example.py 在 CPU 上可跑结构部分
开工前问题与风险

向维护者确认

  • 维护者希望 docstring 风格是 NumPy 还是 Google?
  • examples/ 目录是否已有 diffusion 相关示例可参考?

风险

  • diffusion_ops 模块可能正在快速演进,文档可能需随代码调整
  • GPU 计算示例无法在 MacBook 验证,需标注
任务 3可选 · medium · Mac · 2–3 个晚上

docs(experimental): 新增 experimental backend 开发 tutorial

无人认领2 条评论needs-triageop: miscop: linear attention更新 2026-10-05

用到的专长:候选人的 CUTLASS/CuTe DSL 与 JIT 流程经验,能准确反推 experimental backend 开发路径。

目标:新增 docs/experimental/backend_development_tutorial.rst,基于 cake_dcp.py 或 dsa_indexer.py 演示 backend 注册、@experimental_backend 标记、support check、JIT 集成、测试与毕业流程;在 CONTRIBUTING.md 中添加链接。

为什么值得长期做:experimental 模块是快速演进区但缺少开发 tutorial;基于现有代码反推开发路径并写成文档,可降低新贡献者门槛,提升项目可维护性。

怎么介入:Issue #4642 无 assignee,linked_prs 已 closed,可安全认领文档子任务。
第一个 PR 的边界:第一个 PR 只新增 tutorial 文档与 CONTRIBUTING.md 链接,不改代码。
第一步:阅读 flashinfer/experimental/ 下 cake_dcp.py 或 dsa_indexer.py,梳理 experimental backend 的完整开发流程。
本机怎么复现 / 验证:在 MacBook 上:pip install -e .[dev] && cd docs && make html 验证 tutorial 渲染;grep -n 'backend_development_tutorial' CONTRIBUTING.md 验证链接
认领留言(英文,可直接贴到 Issue)
I'd like to add a tutorial for developing a new experimental backend. Plan: create docs/experimental/backend_development_tutorial.rst, walk through backend registration, @experimental_backend marking, support check, JIT integration, testing, and graduation, based on cake_dcp.py or dsa_indexer.py. I'll also link it from CONTRIBUTING.md. Should I base this on a specific backend? Any preferred doc structure? I'll have a PR ready in a few days.
大致实施方案
  • 阅读 CONTRIBUTING.md 的 Experimental APIs and Backends 章节
  • 基于 cake_dcp.py 或 dsa_indexer.py 反推 backend 注册流程
  • 撰写 tutorial:目录结构、@experimental_backend 标记、support check 实现、JIT 集成、测试要求、毕业流程
  • 在 CONTRIBUTING.md 中添加 tutorial 链接
  • 在 MacBook 上验证文档渲染(sphinx)
可能涉及的目录或文件
  • docs/experimental/ 目录
  • flashinfer/experimental/cake_dcp.py
  • flashinfer/experimental/dsa_indexer.py
  • CONTRIBUTING.md
验收方式
  • 在 MacBook 上跑 sphinx 渲染 docs/experimental/backend_development_tutorial.rst 无报错
  • tutorial 中代码片段与实际代码一致
  • CONTRIBUTING.md 中链接正确
开工前问题与风险

向维护者确认

  • 维护者希望 tutorial 放在 docs/experimental/ 还是 docs/tutorials/?
  • 是否优先基于 cake 系列 backend 演示?

风险

  • experimental 政策可能随版本调整,tutorial 需同步更新
  • 代码片段可能与最新代码不完全一致
任务 4可选 · medium · CPU · 2–3 个晚上

test(build): 为 build_backend.py 纯 Python 工具函数补单元测试

无人认领0 条评论needs-triage更新 2026-09-30

用到的专长:候选人的构建系统与 CI 经验,能设计出对 build backend 纯函数的独立测试。

目标:在 tests/ 下新增 test_build_backend.py,覆盖 build_backend.py 中版本校验、模块发现、环境变量解析等纯函数(如依赖解析、FLASHINFER_CUDA_ARCH_LIST 解析);用 mock 替代实际编译。

为什么值得长期做:build_backend.py 是自定义 build backend,其纯 Python 逻辑(版本校验、模块发现、环境变量解析)可独立测试;补上为后续无 GPU CI 打基础,提升构建系统可靠性。

怎么介入:Issue #5749 无 assignee,build 层测试与 release 质量相关,可安全认领。
第一个 PR 的边界:第一个 PR 只覆盖 build_backend.py 的纯函数,不触发实际编译。
第一步:阅读 build_backend.py 与 build_utils.py,梳理可独立测试的纯函数。
本机怎么复现 / 验证:在 MacBook 上:pip install -e .[dev] && pytest tests/test_build_backend.py(新增文件,所有测试用 mock 替代实际编译)
认领留言(英文,可直接贴到 Issue)
I'd like to add unit tests for the pure-Python utilities in build_backend.py. Plan: create tests/test_build_backend.py, test version parsing, module discovery, env var parsing (e.g. FLASHINFER_CUDA_ARCH_LIST), and mock out actual compilation. All tests run on CPU. Should I cover all env vars or focus on the most common ones first? I'll have a PR ready in a few days.
大致实施方案
  • 在 tests/ 下新建 test_build_backend.py
  • 识别 build_backend.py 中的纯函数(版本解析、arch list 解析、环境变量读取)
  • 为每个纯函数编写正常与异常输入的测试用例
  • 用 mock 替代实际编译调用(如 subprocess、shutil)
  • 在 MacBook 上跑 pytest tests/test_build_backend.py 验证
可能涉及的目录或文件
  • build_backend.py
  • build_utils.py
  • ci/ 目录(参考现有 CI 逻辑)
验收方式
  • pytest tests/test_build_backend.py 在 MacBook 上全通过
  • 所有测试不触发实际编译
  • 覆盖至少 5 个纯函数
开工前问题与风险

向维护者确认

  • 维护者希望测试放在 tests/ 根目录还是 tests/build/?
  • 是否需要覆盖 FLASHINFER_CUDA_ARCH_LIST 的所有合法/非法格式?

风险

  • build_backend.py 可能耦合较多,纯函数提取不完整
  • mock 不到某些系统调用
任务 5候补 · medium · CPU · 2–3 个晚上

test(jit): 为 Jinja 模板变量校验与错误提示补测试

无人认领2 条评论needs-triageop: miscop: linear attention更新 2026-10-05

用到的专长:候选人的 Triton/CuTe DSL 经验,能读懂 Jinja 模板里的变量约束。

目标:在 tests/ 下新增 test_jit_template_validation.py,构造非法参数组合,断言抛出异常与错误消息;覆盖 Jinja 模板变量的校验逻辑。

为什么值得长期做:JIT 编译是 FlashInfer 默认交付形态,Jinja 模板变量(HEAD_MASK_TYPE、PAGE_SIZE、MASK_MODE、QK_LAYOUT)在 Python 端的校验逻辑缺少系统测试;补上后为 JIT 链提供回归保护。

怎么介入:Issue #4642 无 assignee,linked_prs 已 closed,可安全认领子任务。
第一个 PR 的边界:第一个 PR 只覆盖模板变量校验与错误提示,不触发实际 JIT 编译。
第一步:阅读 flashinfer/jit/ 与 csrc/ 下 .jinja 模板,梳理模板变量及其合法取值范围。
本机怎么复现 / 验证:在 MacBook 上:pip install -e .[dev] && pytest tests/test_jit_template_validation.py(新增文件,所有测试在参数校验阶段断言异常,不触发实际编译)
认领留言(英文,可直接贴到 Issue)
I'd like to add tests for Jinja template variable validation in the JIT path. Plan: create tests/test_jit_template_validation.py, construct illegal parameter combinations (e.g. unsupported PAGE_SIZE, invalid MASK_MODE), and assert that the Python layer raises clear errors with helpful messages before any actual compilation. All tests run on CPU. Should I focus on specific template variables first? I'll have a PR ready in a few days.
大致实施方案
  • 在 tests/ 下新建 test_jit_template_validation.py
  • 识别 Jinja 模板中的变量(HEAD_MASK_TYPE、PAGE_SIZE、MASK_MODE、QK_LAYOUT 等)
  • 构造非法参数组合(如不支持的 PAGE_SIZE、无效的 MASK_MODE)
  • 调用 JIT 编译入口,断言抛出 ValueError 或类似异常
  • 断言错误消息包含变量名与合法取值提示
  • 在 MacBook 上跑 pytest tests/test_jit_template_validation.py 验证
可能涉及的目录或文件
  • flashinfer/jit/ 目录
  • csrc/ 下 .jinja 模板(如 batch_attention_customize_config.jinja)
  • 需先定位模板变量校验的 Python 入口
验收方式
  • pytest tests/test_jit_template_validation.py 在 MacBook 上全通过
  • 所有测试不触发实际 JIT 编译(在参数校验阶段就报错)
  • 覆盖至少 3 个模板变量
开工前问题与风险

向维护者确认

  • 维护者希望测试放在 tests/ 根目录还是 tests/jit/?
  • 是否需要覆盖所有模板变量还是只优先常用变量?

风险

  • 模板变量校验逻辑可能分散在多处,需先定位
  • 某些校验可能在 TVM FFI 层才触发,Python 端无法覆盖