SGEMM repos (upstream_ref/sgemm_cuda/, 41 files): siboehm/SGEMM_CUDA: kernel 1-12, runner, CMake, cuBLAS benchmark wangzyon/NVIDIA_SGEMM_PRACTICE: kernel 1-7 (Chinese comments), utils edtallison/sgemm-cuda: kernel 01-09 (learning notes), Makefile xllm kernels (ex_engine/xllm_kernels/cuda/): fused_qknorm_rope.cu + bind — saves 128 kernel launches/fwd xattention/ — 6 files from upstream xllm headers: corex_compat_utils.h, topk_last_dim.cuh ilu/CMakeLists.txt SO_BUILD_MANIFEST.md — complete .so inventory and call chain analysis
7.2 KiB
7.2 KiB
动态链接库完整清单与调用链
1. 已有预编译 .so(22 个)→ 调用链状态
A. 已接入模型调用链(15 个)
| .so | 来源 | 模型中的环境变量 | 状态 |
|---|---|---|---|
| corex_gdn_causal_conv | 自研 CUDA | BI100_GDN_COREX_CAUSAL_CONV (default=True) |
✅ 代码引用 4 处 |
| corex_gdn_gated_norm | 自研 CUDA | BI100_GDN_COREX_GATED_NORM (default=True) |
✅ 代码引用 4 处 |
| corex_gdn_beta_decay | 自研 CUDA | BI100_GDN_COREX_BETA_DECAY (default=True) |
✅ 代码引用 4 处 |
| corex_gdn_qk_map | 自研 CUDA | BI100_GDN_COREX_QK_MAP (default=True) |
✅ 代码引用 4 处 |
| corex_gdn_packed_decode | 自研 CUDA | BI100_GDN_COREX_PACKED_DECODE (default=False) |
✅ yaml 已开 |
| corex_gdn_chunk_recurrent | 自研 CUDA | 自动检测 | ✅ 代码引用 4 处 |
| corex_attn_head_rms_norm | 自研 CUDA | BI100_ATTN_COREX_HEAD_RMS_NORM (default=True) |
✅ 代码引用 5 处 |
| corex_moe_direct_routed | 自研 CUDA | BI100_MOE_COREX_DIRECT_ROUTED (default=False) |
✅ yaml 已开 |
| corex_moe_exact_reduce | 自研 CUDA | BI100_MOE_COREX_EXACT_REDUCE (default=True) |
✅ 代码引用 4 处 |
| corex_moe_weight_gather | 自研 CUDA | BI100_MOE_COREX_WEIGHT_GATHER (default=True) |
✅ 代码引用 4 处 |
| corex_moe_topk_softmax | 自研 CUDA | BI100_MOE_COREX_TOPK_SOFTMAX (default=True) |
✅ yaml 已开 |
| corex_moe_index_combine | 自研 CUDA | BI100_MOE_COREX_INDEX_COMBINE (default=True) |
✅ 代码引用 4 处 |
| xllm_moe | 搬自 xllm upstream | BI100_MOE_XLLM (default=True) |
✅ 代码引用 7 处 |
| xllm_activation | 搬自 xllm upstream | 无直接 env | ❌ 编了但没接入 |
| xllm_norm | 搬自 xllm upstream | 无直接 env | ❌ 编了但没接入 |
B. 已编译但未接入(7 个) — 需要修复
| .so | 来源 | 提供的函数 | 为什么没接入 | 接入方案 |
|---|---|---|---|---|
| ix_full_bridge | ix_full_bridge.cpp → ixformer::infer | silu_and_mul, rms_norm, fused_add_rms_norm, ix_linear, ix_linear_ex | qwen3_5.py 没有 import | patch_vllm_ops.py 已写好(最新 commit),通过 ix_startup_patch.py 自动 hook |
| xllm_activation | xllm activation.cu | silu_and_mul, gelu_and_mul, act_and_mul | 与 _custom_ops→ixf_F 冗余 | 作为 backup,当 ixf_F 不可用时走 xllm kernel |
| xllm_norm | xllm norm.cu | rms_norm, fused_add_rms_norm | 与 _custom_ops→ixf_F 冗余 | 同上 |
| xllm_rope | xllm rope.cu | rotary_embedding | 与 _custom_ops→ixf_F 冗余 | 同上 |
| xllm_cache | xllm reshape_paged_cache.cu | reshape_paged_cache | paged_attn.py 没有调用 | 需要在 cache 写入路径接入 |
| corex_fused_paged_prefill | 自研 CUDA | fused prefill attention | paged_attn.py 有代码但 env 没开 | computility-run.yaml 加 BI100_ATTN_COREX_FUSED_PAGED_PREFILL=1 |
| corex_paged_kv_gather | 自研 CUDA | paged KV gather | paged_attn.py 有代码但 env 没开 | 同上 |
| corex_block_major_kv_transfer | 自研 CUDA | block-major KV copy | 完全没有调用点 | 需要在 worker/cache_engine 接入 |
2. 需要从 upstream 搬过来编译的代码
来源: upstream_ref/xllm/xllm/core/kernels/cuda/
| 文件 | 功能 | 对应 .so | 优先级 |
|---|---|---|---|
| xattention/decoder_reshape_and_cache.cu | fused KV cache write | xllm_xattn_cache | P0 |
| xattention/prefill_reshape_and_cache.cu | prefill cache write | xllm_xattn_cache | P0 |
| xattention/cache_select.cu | cache select | xllm_xattn_cache | P1 |
| xattention/lse_combine.cu | LSE combine | xllm_xattn_cache | P1 |
| fused_qknorm_rope.cu | fused QK norm + RoPE | xllm_fused_qknorm_rope | P0(每层省 4 kernel launch) |
| matmul.cpp | ixformer GEMM wrapper | 已在 ilu/matmul.cpp | ✅ 已搬 |
| fp8_quant.cu | FP8 quantization | xllm_fp8 | P2 |
来源: upstream_ref/xllm/xllm/core/kernels/ilu/
全部已搬到 ex_engine/xllm_kernels/ilu/(对比确认只差 CMakeLists.txt)
来源: upstream_ref/ds_vllm/csrc/libtorch_stable/
| 文件 | 功能 | 可用性 |
|---|---|---|
| attention/paged_attention_v1.cu | paged attention v1 | SM70 兼容,但依赖 vllm C++ build |
| attention/paged_attention_v2.cu | paged attention v2 | 同上 |
| layernorm_kernels.cu | RMSNorm kernel | SM70 兼容 |
| activation_kernels.cu | SiLU kernel | SM70 兼容 |
| pos_encoding_kernels.cu | RoPE kernel | SM70 兼容 |
| moe/topk_softmax_kernels.cu | topk+softmax fused | SM70 兼容 |
| moe/moe_align_sum_kernels.cu | MoE align+sum | SM70 兼容 |
3. ixformer::infer 可用 API(base 镜像已有)
来自 upstream_ref/xllm_latest/core/kernels/ilu/ixformer.h:
ixformer::infer::silu_and_mul(input, output)
ixformer::infer::rms_norm(input, weight, output, bias, eps)
ixformer::infer::residual_rms_norm(input, residual, weight, output, residual_out, bias, alpha, eps, is_post)
ixformer::infer::ixformer_linear(input, weight, act_type, bias, out, persistent)
ixformer::infer::ixformer_linear_ex(input, weight, bias, out)
ixformer::infer::xllm_rotary_embedding(positions, query, key, head_size, cos_sin_cache, is_neox)
ixformer::infer::xllm_reshape_and_cache(key, value, key_cache, value_cache, slot_mapping, key_stride, value_stride)
ixformer::infer::xllm_paged_attention(out, query, key_cache, value_cache, ...)
ixformer::infer::ixinfer_flash_attn_unpad_with_block_tables(query, key_cache, value_cache, ...)
ixformer::infer::topk_softmax(weights, indices, token_expert_indices, gating_output, renormalize)
ixformer::infer::moe_compute_token_index_api(topk_ids, src_dst, dst_src, expert_sizes, ...)
ixformer::infer::moe_expand_input(output, input, dst_to_src, src_to_dst, dst_tokens, expand_factor)
ixformer::infer::moe_w16a16_group_gemm(output, input, weights, tokens_per_experts, ...)
ixformer::infer::moe_output_reduce_sum(output, input, weight, mask, extra_residual, scaling)
这些函数通过 ix_full_bridge.so pybind11 暴露给 Python 侧。
4. 调用链完整性检查
当前断裂点:
-
ix_full_bridge.so 的 group_gemm → MoE Python for-loop
ixformer::infer::moe_w16a16_group_gemm在 ix_full_bridge.so 中可用- 但 qwen3_5.py MoE prefill 路径 (L1813-1825) 还是
F.linearper-expert loop - 需要: ix_fused_moe.py 的 7 步 pipeline 走 group_gemm 而非 per-expert linear
-
corex_fused_paged_prefill → paged_attn.py env 没开
- .so 已编译已部署
- paged_attn.py 已有完整调用代码 (L2030)
- computility-run.yaml 缺少
BI100_ATTN_COREX_FUSED_PAGED_PREFILL=1
-
xllm_cache → reshape_and_cache 没接入
- base 镜像 ixformer 已有
xllm_reshape_and_cache - vllm 的 cache_ops 走的是另一条路径
- base 镜像 ixformer 已有
5. 需要编出的新 .so
| 目标 .so | 源文件 | 编译方式 | 依赖 |
|---|---|---|---|
| xllm_fused_qknorm_rope.so | upstream fused_qknorm_rope.cu + bind | corex clang --cuda-gpu-arch=ivcore10 | libcudart, torch |
| xllm_xattn_cache.so | upstream xattention/*.cu + bind | 同上 | 同上 |
6. computility-run.yaml 需要补全的 env
- name: BI100_ATTN_COREX_FUSED_PAGED_PREFILL
value: '1'
- name: BI100_ATTN_COREX_PAGED_KV_GATHER
value: '1'
- name: IX_OPS_AUTO_PATCH
value: '1'
- name: PYTORCH_CUDA_ALLOC_CONF
value: 'expandable_segments:True'