Paddle icon indicating copy to clipboard operation
Paddle copied to clipboard

【启航计划】PaddlePaddle PHI算子库CUDA Kernel规范化

Open YqGe585 opened this issue 3 months ago • 35 comments

背景

飞桨在3.1 版本推出了 类 CUDA 硬件接入方案。该方案在 Custom Device硬件接入方案 的基础上进行了升级,最大的特点是可以 复用飞桨 PHI 算子库中的大量 CUDA Kernel。 当前此方案已经成功接入沐曦(metax_gpu)天数智芯(iluvatar_gpu)

然而,目前PHI 算子库中的部分 CUDA Kernel 并未考虑被其他模块复用的情况,导致出现以下问题: 部分 Kernel 缺少函数声明,类 CUDA 硬件在复用时不得不直接 #include .cu 源文件,这不符合代码规范。

因此,本次活动旨在对 PHI算子库的 CUDA Kernel 进行规范化修复:

  • 在Paddle仓库中为缺少头文件的 Kernel 新增对应声明文件(.h);
  • 修复 PaddleCustomDevice 仓库中错误的 #include cu 用法,改为 #include 正确的头文件。

涉及范围

  • 涉及仓库

    1. Paddle
    2. PaddleCustomDevice
  • 影响文件
    PaddleCustomDevice 仓 中,所有被 #include 到注册文件中的算子 Kernel .cu 源文件,共 136 个
    具体文件列表见下方表格:

任务

修复目标

  1. PaddlePaddle 仓库 中为缺少声明的 Kernel 新增头文件
  2. PaddleCustomDevice 仓库 中修改错误的 #include *.cu,改为 #include 新增的头文件,同时把Kernel的实现代码正确的添加到CMakelists编译列表中。需要修改的代码只出现在backends/metax_gpubackends/iluvatar_gpu这两个目录下。
序号 文件名称 认领人 / 状态 / PR号
1 paddle/phi/kernels/fusion/gpu/distributed_fused_lamb_init_kernel.cu @Le-soleile #2004 #76694
@YqGe585
2 paddle/phi/kernels/fusion/gpu/fused_bias_act_kernel.cu @Le-soleile #75506 #2004
3 paddle/phi/kernels/fusion/gpu/fused_bias_dropout_residual_layer_norm_grad_kernel.cu @wanglezz #75601 #2090
4 paddle/phi/kernels/fusion/gpu/fused_bias_dropout_residual_layer_norm_kernel.cu @wanglezz #75625 #2090
5 paddle/phi/kernels/fusion/gpu/fused_embedding_eltwise_layernorm_kernel.cu @wanglezz #75626 #2090
6 paddle/phi/kernels/fusion/gpu/fused_layernorm_kernel.cu @WanRui37 #75532
7 paddle/phi/kernels/fusion/gpu/fused_seqpool_cvm_grad_kernel.cu @SpongeBob0318 #75531 #75536 #2007 #2008
8 paddle/phi/kernels/fusion/gpu/fused_seqpool_cvm_kernel.cu @SpongeBob0318 #75537 #2009
9 paddle/phi/kernels/fusion/gpu/fused_softmax_mask_grad_kernel.cu @SpongeBob0318 #75538 #2010
10 paddle/phi/kernels/fusion/gpu/fused_softmax_mask_kernel.cu @youge325 #75655 #2072
11 paddle/phi/kernels/fusion/gpu/fused_softmax_mask_upper_triangle_kernel.cu @Le-soleile #2209 #2236
12 paddle/phi/kernels/fusion/gpu/fused_stack_transpose_quant_kernel.cu @youge325 #75658 #2045
13 paddle/phi/kernels/fusion/gpu/fused_transpose_split_quant_kernel.cu @SpongeBob0318 #75539 #2011
14 paddle/phi/kernels/fusion/gpu/fused_transpose_wlch_split_quant_kernel.cu @SpongeBob0318 #75540 #2012
15 paddle/phi/kernels/fusion/gpu/fusion_group_kernel.cu @SpongeBob0318 #75541 #2013
16 paddle/phi/kernels/fusion/gpu/masked_multihead_attention_kernel.cu @Le-soleile #75706 #2100
17 paddle/phi/kernels/fusion/gpu/qkv_unpack_mha_kernel.cu @Le-soleile #75707 #2100
18 paddle/phi/kernels/fusion/gpu/skip_layernorm_kernel.cu @SpongeBob0318 #75542 #2014
19 paddle/phi/kernels/gpu/affine_channel_grad_kernel.cu @SpongeBob0318 #75543 #2015 #2025 #2029
20 paddle/phi/kernels/gpu/affine_channel_kernel.cu @SpongeBob0318 #75545 #2016
21 paddle/phi/kernels/gpu/ap_facade_kernel.cu @youge325 #75659 #2046
@Echo-Nie #75657 #2043
22 paddle/phi/kernels/gpu/ap_trivial_fusion_begin_kernel.cu @youge325 #75660 #2073
23 paddle/phi/kernels/gpu/ap_trivial_fusion_end_kernel.cu @youge325 #75661 #2092
24 paddle/phi/kernels/gpu/ap_variadic_kernel.cu @youge325 #75662 #2093
25 paddle/phi/kernels/gpu/argsort_grad_kernel.cu @Patrisam #2169
26 paddle/phi/kernels/gpu/barrier_kernel.cu @youge325 #75663 #2094
27 paddle/phi/kernels/gpu/bce_loss_grad_kernel.cu @Luxorion-12
28 paddle/phi/kernels/gpu/bce_loss_kernel.cu @tjujingzong #2123
29 paddle/phi/kernels/gpu/binomial_kernel.cu @tjujingzong #2123 #76487
30 paddle/phi/kernels/gpu/bmm_grad_kernel.cu @tjujingzong #2123
31 paddle/phi/kernels/gpu/bmm_kernel.cu @tjujingzong #2123
32 paddle/phi/kernels/gpu/box_clip_kernel.cu @algorithm1832 #75592 #2021
33 paddle/phi/kernels/gpu/c_concat_kernel.cu @algorithm1832 #75648 #2052
34 paddle/phi/kernels/gpu/c_embedding_grad_kernel.cu @algorithm1832 #2036
35 paddle/phi/kernels/gpu/c_scatter_kernel.cu @algorithm1832 #75653 #2059
36 paddle/phi/kernels/gpu/c_softmax_with_cross_entropy_grad_kernel.cu @youge325 #75664 #2095
37 paddle/phi/kernels/gpu/cast_kernel.cu @Patrisam #2153
38 paddle/phi/kernels/gpu/class_center_sample_kernel.cu @Patrisam #76374 #2168
39 paddle/phi/kernels/gpu/collect_fpn_proposals_kernel.cu @youge325 #75665 #2096
40 paddle/phi/kernels/gpu/comm_init_all_kernel.cu @youge325 #75666 #2097
41 paddle/phi/kernels/gpu/complex_kernel.cu @Le-soleile #2209 #2236 #76774
42 paddle/phi/kernels/gpu/correlation_grad_kernel.cu @tjujingzong #75633 #2047
43 paddle/phi/kernels/gpu/correlation_kernel.cu @youge325 #75667 #2098
44 paddle/phi/kernels/gpu/ctc_align_kernel.cu @Le-soleile #2237
45 paddle/phi/kernels/gpu/cvm_grad_kernel.cu @Le-soleile #75704 #2100
46 paddle/phi/kernels/gpu/cvm_kernel.cu @Le-soleile #75703 #2100
47 paddle/phi/kernels/gpu/deformable_conv_grad_kernel.cu @123wjr #2178
48 paddle/phi/kernels/gpu/deformable_conv_kernel.cu @123wjr #2178
49 paddle/phi/kernels/gpu/elementwise_grad_kernel.cu @LiaoYFBH #2129 #2155
50 paddle/phi/kernels/gpu/embedding_with_scaled_gradient_grad_kernel.cu @LiaoYFBH #2150
@metax666 #2174
51 paddle/phi/kernels/gpu/exponential_kernel.cu @LiaoYFBH #2222
52 paddle/phi/kernels/gpu/flip_kernel.cu @LiaoYFBH #2240
53 paddle/phi/kernels/gpu/fused_token_prune_kernel.cu @Le-soleile #75701 #2100
54 paddle/phi/kernels/gpu/gather_grad_kernel.cu
55 paddle/phi/kernels/gpu/gelu_grad_kernel.cu @Patrisam #2170
56 paddle/phi/kernels/gpu/global_gather_kernel.cu @Le-soleile #75700 #2142 #2191
57 paddle/phi/kernels/gpu/global_scatter_kernel.cu @Le-soleile #75699 #2142 #2191
58 paddle/phi/kernels/gpu/group_norm_grad_kernel.cu @algorithm1832 #2198
@Le-soleile #2209
59 paddle/phi/kernels/gpu/group_norm_kernel.cu @algorithm1832 #76524
@Le-soleile #2209
60 paddle/phi/kernels/gpu/gru_kernel.cu @algorithm1832 #75845 #2126
61 paddle/phi/kernels/gpu/index_add_grad_kernel.cu @algorithm1832 #2068 #2071
62 paddle/phi/kernels/gpu/interpolate_grad_kernel.cu @algorithm1832 #75974 #2127
63 paddle/phi/kernels/gpu/interpolate_kernel.cu @algorithm1832 #76261 #2163
64 paddle/phi/kernels/gpu/kldiv_loss_grad_kernel.cu @algorithm1832 #2117
65 paddle/phi/kernels/gpu/kldiv_loss_kernel.cu @algorithm1832 #2197
@Le-soleile #2209
66 paddle/phi/kernels/gpu/l1_norm_grad_kernel.cu @Le-soleile #75647 #2142 #2191
67 paddle/phi/kernels/gpu/l1_norm_kernel.cu @Le-soleile #2210
68 paddle/phi/kernels/gpu/label_smooth_grad_kernel.cu @Le-soleile #2210
69 paddle/phi/kernels/gpu/label_smooth_kernel.cu @Le-soleile #2210
70 paddle/phi/kernels/gpu/lamb_kernel.cu @Le-soleile #2210
71 paddle/phi/kernels/gpu/lgamma_kernel.cu @Le-soleile #2210
72 paddle/phi/kernels/gpu/log_softmax_grad_kernel.cu @Le-soleile #2210
73 paddle/phi/kernels/gpu/logsumexp_kernel.cu @Le-soleile #2210
74 paddle/phi/kernels/gpu/lookup_table_grad_kernel.cu @Le-soleile #75645 #2142 #2191
75 paddle/phi/kernels/gpu/lookup_table_kernel.cu @Le-soleile #75645 #2142 #2191
76 paddle/phi/kernels/gpu/lu_solve_kernel.cu
77 paddle/phi/kernels/gpu/margin_cross_entropy_kernel.cu
78 paddle/phi/kernels/gpu/matrix_power_grad_kernel.cu
79 paddle/phi/kernels/gpu/matrix_power_kernel.cu
80 paddle/phi/kernels/gpu/mean_all_grad_kernel.cu @Patrisam #2171
81 paddle/phi/kernels/gpu/moe_unpermute_kernel.cu @Le-soleile #75644 #2142 #2192
82 paddle/phi/kernels/gpu/momentum_kernel.cu @Le-soleile #2238
83 paddle/phi/kernels/gpu/mp_allreduce_sum_kernel.cu @fsylmxx #76503 #76561 #2218
84 paddle/phi/kernels/gpu/multiclass_nms3_kernel.cu @fsylmxx #76548 #2220
85 paddle/phi/kernels/gpu/multiplex_grad_kernel.cu @fsylmxx #2204
86 paddle/phi/kernels/gpu/nonzero_kernel.cu @dakelong #76547 #2232
87 paddle/phi/kernels/gpu/pad3d_kernel.cu @dakelong
88 paddle/phi/kernels/gpu/partial_allgather_kernel.cu @Le-soleile #75643 #2142 #2192
89 paddle/phi/kernels/gpu/partial_concat_grad_kernel.cu @Le-soleile #75642 #2142 #2192
90 paddle/phi/kernels/gpu/partial_concat_kernel.cu @Le-soleile #2239 #76797
91 paddle/phi/kernels/gpu/partial_recv_kernel.cu @Le-soleile #75641 #2142 #2192
92 paddle/phi/kernels/gpu/partial_send_kernel.cu @Le-soleile #75640 #2142 #2192
93 paddle/phi/kernels/gpu/psroi_pool_grad_kernel.cu @xxiu1 #75938 #2088
94 paddle/phi/kernels/gpu/quantize_linear_kernel.cu @LiaoYFBH #2250 #76792
@Le-soleile #2252
95 paddle/phi/kernels/gpu/reduce_kernel.cu @LiaoYFBH #76781
@Le-soleile #2252
96 paddle/phi/kernels/gpu/repeat_interleave_grad_kernel.cu @LiaoYFBH
@Le-soleile #2252
97 paddle/phi/kernels/gpu/repeat_interleave_kernel.cu @LiaoYFBH
@Le-soleile #2252
98 paddle/phi/kernels/gpu/rmsprop_kernel.cu @LiaoYFBH
@Le-soleile #2252
99 paddle/phi/kernels/gpu/roi_align_grad_kernel.cu @LiaoYFBH
@Le-soleile #2252
100 paddle/phi/kernels/gpu/roi_align_kernel.cu @Le-soleile #2005
101 paddle/phi/kernels/gpu/row_conv_grad_kernel.cu @Le-soleile #75554 #2142 #2193
102 paddle/phi/kernels/gpu/row_conv_kernel.cu @Le-soleile #75562 #2142 #2193
103 paddle/phi/kernels/gpu/seed_kernel.cu @Le-soleile #75577 #2142 #2193
104 paddle/phi/kernels/gpu/sequence_expand_kernel.cu @Le-soleile #75578 #2142 #2193
105 paddle/phi/kernels/gpu/set_value_kernel.cu @Le-soleile #2018
106 paddle/phi/kernels/gpu/shuffle_channel_grad_kernel.cu @Le-soleile #75580 #2142 #2193 #76798
107 paddle/phi/kernels/gpu/shuffle_channel_kernel.cu @Le-soleile #2020 #75608 #2142 #2206
108 paddle/phi/kernels/gpu/soft_relu_grad_kernel.cu @Le-soleile #75581 #2142 #2206
109 paddle/phi/kernels/gpu/spectral_norm_grad_kernel.cu @Le-soleile #2027
110 paddle/phi/kernels/gpu/spectral_norm_kernel.cu @Le-soleile #2028
111 paddle/phi/kernels/gpu/stack_grad_kernel.cu
112 paddle/phi/kernels/gpu/stft_grad_kernel.cu @Le-soleile #75614 #2142 #2206
113 paddle/phi/kernels/gpu/sync_batch_norm_grad_kernel.cu
114 paddle/phi/kernels/gpu/top_k_kernel.cu
115 paddle/phi/kernels/gpu/uniform_random_batch_size_like_kernel.cu @Le-soleile #75615 #2142 #2206
116 paddle/phi/kernels/gpu/weighted_sample_neighbors_kernel.cu @WHoutstanding
117 paddle/phi/kernels/gpu/yolo_box_head_kernel.cu @Le-soleile #75616 #2142 #2206
118 paddle/phi/kernels/gpu/yolo_box_post_kernel.cu @Le-soleile #75636 #2142 #2207
119 paddle/phi/kernels/kps/elementwise_kernel.cu
120 paddle/phi/kernels/legacy/gpu/cal_aux_loss_grad_kernel.cu @Le-soleile #75637 #2142 #2207
121 paddle/phi/kernels/legacy/gpu/cal_aux_loss_kernel.cu @Le-soleile #75639 #2142 #2207
122 paddle/phi/kernels/legacy/gpu/expand_modality_expert_id_kernel.cu @Le-soleile #75708 #2142 #2207
123 paddle/phi/kernels/legacy/gpu/ext_build_src_rank_and_local_expert_id_kernel.cu @Le-soleile #75709 #2142 #2207
124 paddle/phi/kernels/legacy/gpu/fp8_quant_blockwise_kernel.cu @Le-soleile #75710 #2142 #2208
125 paddle/phi/kernels/legacy/gpu/int_bincount.cu @LingmaFuture
126 paddle/phi/kernels/legacy/gpu/layer_norm_cuda_kernel.cu @LingmaFuture
127 paddle/phi/kernels/legacy/gpu/moe_combine_grad_kernel.cu @ADchampion3 #76690 #2244
128 paddle/phi/kernels/legacy/gpu/moe_combine_kernel.cu @ADchampion3 #76690 #2244
129 paddle/phi/kernels/legacy/gpu/moe_combine_no_weight_kernel.cu @ADchampion3 #76690 #2244
130 paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_grad_kernel.cu @ADchampion3 #76690 #2244
131 paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_kernel.cu @ADchampion3 #76690 #2244
132 paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_permute_grad_kernel.cu @Le-soleile #75711 #2142 #2208
133 paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_permute_kernel.cu @Le-soleile #75713 #2142 #2208
134 paddle/phi/kernels/legacy/gpu/moe_ops_partial_nosoftmaxtopk_grad_kernel.cu @Le-soleile #75714 #2142 #2208
135 paddle/phi/kernels/legacy/gpu/moe_ops_partial_nosoftmaxtopk_kernel.cu @Le-soleile #75715 #2142 #2208
136 paddle/phi/kernels/legacy/kps/compare_kernel.cu @LiaoYFBH #2255

示例修复&代码提交方式

请参考 https://github.com/PaddlePaddle/Paddle/issues/75226#issuecomment-3283605020

认领方式

请大家以 comment 的形式认领任务,如:

【报名】:1、3、2-3
  • 多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 1-2
  • PR 提交格式:
    • 两个仓库分别提交 PR,Paddle 的 PR 合入后,再提交 PaddleCustomDevice 的 PR
    • 两个仓库的 PR 标题均以 【CUDA Kernel No.xxx】 开头,注明任务编号
    • Paddle 仓库的 PR 标题以 -part 结尾

看板信息

任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率
CUDA Kernel规范化 136 122 / 127 89.71% 98 72.06%

统计信息

排名不分先后 @Le-soleile (39) @wanglezz (3) @SpongeBob0318 (9) @youge325 (11) @Patrisam (4) @tjujingzong (5) @algorithm1832 (11) @123wjr (2) @LiaoYFBH (4) @fsylmxx (3) @dakelong (1) @xxiu1 (1) @ADchampion3 (5)

YqGe585 avatar Sep 11 '25 07:09 YqGe585

示例修复

paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_kernel.cu 为例。

1. 问题现状

PaddleCustomDevice 仓库 中可以看到以下两个注册文件直接 #include.cu 源文件:

  • backends/metax_gpu/kernels/ernie_core/moe_gate_dispatch_kernel_register.cu
  • backends/iluvatar_gpu/kernels/ernie_core/moe_gate_dispatch_kernel_register.cc

错误示例

#include "paddle/phi/core/kernel_registry.h"
#include "paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_kernel.cu"  //NOLINT

PD_CUSTOM_KERNEL_REGISTER(moe_gate_dispatch,
                          metax_gpu,
                          ALL_LAYOUT,
                          phi::MoeGateDispatchKernel,
                          float,
                          double,
                          phi::dtype::float16,
                          phi::dtype::bfloat16) {}

这种写法不符合规范,需要通过新增头文件来解决。


2. 在 Paddle 仓库中新增 Kernel 头文件

首先需要在 Paddle 仓库 中为该 Kernel 添加声明头文件。
具体规范可以参考:飞桨 C++ 算子开发流程

由于该 Kernel 在 GPU 和 XPU 上都有实现,因此头文件应放在:

paddle/phi/kernels/

示例头文件内容

#pragma once

#include "paddle/phi/core/dense_tensor.h"
#include "paddle/utils/optional.h"

namespace phi {

template <typename T, typename Context>
void MoeGateDispatchKernel(const Context &dev_ctx,
                           const DenseTensor &x,
                           const DenseTensor &gate_logits,
                           const paddle::optional<DenseTensor> &corr_bias,
                           const int64_t k,
                           const int64_t capacity,
                           const bool use_pad,
                           DenseTensor *y,
                           DenseTensor *combine_weights,
                           DenseTensor *scatter_index,
                           DenseTensor *expert_offset,
                           DenseTensor *expert_id);

}  // namespace phi

随后在以下文件中 #include 新增的头文件:

  • paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_kernel.cu
  • paddle/phi/kernels/xpu/moe_gate_dispatch_kernel.cc

完成修改后,在本地验证 GPU 编译通过,并使用 pre-commit 工具 检查代码格式。
确认无误后即可提交 PR,等待 CI 全部通过后即可合入。 示例 PR

⚠️ 注意:

如果 Paddle仓库CI 流水线出现报错,但你认为报错原因 与 PR 无关(例如网络问题、某些机器显存不足,或性能测试因随机原因未达标等),可以在 PR 下方评论:

/re-run all-failed

重新触发 流水线。


3. 修改 PaddleCustomDevice 仓库

⚠️注意:必须在 Paddle PR 合入后,才能修改 PaddleCustomDevice 仓库。
这是因为 Paddle 作为 PaddleCustomDevice 的子模块,每天会自动更新依赖。

具体修改步骤:

  1. 将以下两个注册文件中的 #include 改为引用新增的头文件:

    • backends/metax_gpu/kernels/ernie_core/moe_gate_dispatch_kernel_register.cu
    • backends/iluvatar_gpu/kernels/ernie_core/moe_gate_dispatch_kernel_register.cc
  2. 在对应的 CMakeLists.txt 中,确保 Kernel 源文件已加入编译列表:

    • backends/metax_gpu/CMakeLists.txt
    • backends/iluvatar_gpu/CMakeLists.txt

    示例:

    file(
      GLOB
      CUDA_SRCS
      ......
      ${PADDLE_SOURCE_DIR}/paddle/phi/kernels/legacy/gpu/moe_gate_dispatch_kernel.cu
    )
    

4. PaddleCustomDevice仓库代码提交

完成修改后,提交 PR 到 PaddleCustomDevice 仓库,确保所修改硬件的CI流水线均通过。一定要确保metax-gpu-testPR-CI-IXUCA的流水线通过。 如果流水线出现问题,可以进入流水线状态页面,点击右上角的重新构建。

⚠️ 注意:

如果 PaddleCustomDevice仓库的CI 流水线出现报错,但你认为报错原因 与 PR 无关(例如网络问题、某些机器显存不足,或性能测试因随机原因未达标等),可以点击报错流水线中右上角的重新构建来重新触发流水线。


代码提交方式

参与修复前,请先阅读以下文档和规范:

  1. 代码规范

  2. 算子开发流程

  3. 开发分支

    • 基于 Paddle/developPaddleCustomDevice/develop 分支进行开发。
  4. 本地验证

    • 修改完成后,在本地完成PaddlePaddle的编译验证,确保功能正确,PaddleCustomDevice暂时无需在本地编译,只需要提交PR到CUDAKernelfix分支后人工检查。
  5. 提交 PR

    • 两个仓库分别提交 PR,Paddle 的 PR 合入后,再提交 PaddleCustomDevice 的 PR
      • Paddle:提交新增的头文件
      • PaddleCustomDevice:修改 #include 的引用方式,以及在 CMakelists 中添加需要编译的 Kernel 源文件。
    • PR 标题格式: Paddle 仓库的 PR 标题以 -part 结尾
      【CUDA Kernel No.xxx】xxx算子Kernel修复
      

YqGe585 avatar Sep 12 '25 04:09 YqGe585

【报名】:1

Le-soleile avatar Sep 24 '25 04:09 Le-soleile

【报名】:1

这个.h文件已经存在了: /home/aistudio/Paddle/paddle/phi/kernels/distributed_fused_lamb_init_kernel.h 还需要什么修改吗

Le-soleile avatar Sep 24 '25 05:09 Le-soleile

【报名】:2

Le-soleile avatar Sep 24 '25 05:09 Le-soleile

【报名】:6

WanRui37 avatar Sep 24 '25 05:09 WanRui37

这个.h文件已经存在了: /home/aistudio/Paddle/paddle/phi/kernels/distributed_fused_lamb_init_kernel.h 还需要什么修改吗

Paddle仓中就不需要改什么了,可以看下PaddleCustomDevice仓库是否需要修改

YqGe585 avatar Sep 24 '25 06:09 YqGe585

【报名】:7

SpongeBob0318 avatar Sep 25 '25 12:09 SpongeBob0318

【报名】:100 -110

Le-soleile avatar Sep 26 '25 11:09 Le-soleile

【报名】:32

algorithm1832 avatar Sep 28 '25 05:09 algorithm1832

【报名】:3-5

wanglezz avatar Sep 29 '25 02:09 wanglezz

【报名】:33-35

algorithm1832 avatar Sep 29 '25 12:09 algorithm1832

【报名】:42

tjujingzong avatar Sep 30 '25 11:09 tjujingzong

【报名】:10

youge325 avatar Oct 02 '25 13:10 youge325

【报名】:12

youge325 avatar Oct 02 '25 14:10 youge325

【报名】:21-24

youge325 avatar Oct 03 '25 06:10 youge325

【报名】:26

youge325 avatar Oct 03 '25 06:10 youge325

【报名】:66、74、75、81、88、89、91、92、120、121

Le-soleile avatar Oct 03 '25 06:10 Le-soleile

【报名】:36、39、40、43

youge325 avatar Oct 03 '25 07:10 youge325

【报名】:27

Luxorion-12 avatar Oct 10 '25 02:10 Luxorion-12

【报名】:28-31

tjujingzong avatar Oct 10 '25 07:10 tjujingzong

【报名】:60-64

algorithm1832 avatar Oct 13 '25 03:10 algorithm1832

【报名】:93

xxiu1 avatar Oct 13 '25 14:10 xxiu1

【报名】:49-52

LiaoYFBH avatar Oct 19 '25 08:10 LiaoYFBH

【报名】:83-85

fsylmxx avatar Oct 26 '25 09:10 fsylmxx

【报名】:37-38

Patrisam avatar Nov 11 '25 11:11 Patrisam

【报名】:25、55、80

Patrisam avatar Nov 12 '25 09:11 Patrisam

【报名】:47-48

123wjr avatar Nov 13 '25 10:11 123wjr

【报名】:65

algorithm1832 avatar Nov 21 '25 02:11 algorithm1832

【报名】:58-59

algorithm1832 avatar Nov 21 '25 05:11 algorithm1832

【报名】:86-87

dakelong avatar Nov 23 '25 12:11 dakelong