| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[fix]profiler fix config cache when analyse multi card Co-authored-by: hehongzhe<935062458@qq.com> # message auto-generated for no-merge-commit merge: !39802 merge jiexi7 into v2.7.1 [fix]profiler fix config cache when analyse multi card Created-by: hhz0 Commit-by: hehongzhe Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2573 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) profiler离线解析设置的max_process_number的值小于总ascend_pt数量时,解析出来db文件的rank与profiler_info.json的rank不一致 这是因为离线解析会复用进程池里的进程,is_load标记位在设置为True后没有修改,被复用,config无法被更新 所以在获取rankid前需要重置is_load标记位 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 修改前,db文件名中的rankid错误  修改后rankid正确  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!39802 | 1 个月前 | |
| 1 年前 | ||
add UTs Co-authored-by: xieyouwang<xieyouwang@huawei.com> # message auto-generated for no-merge-commit merge: !33104 merge v2.7.1 into v2.7.1 add UTs Created-by: qq_52711437 Commit-by: xieyouwang Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 问题单 # 【修改方案】 使用用例生成skill为21个API生成UT。 torch._running_with_deploy torch.utils._python_dispatch.is_traceable_wrapper_subclass torch._dynamo.comptime.comptime.print torch._dynamo.config torch._dynamo.config.skip_fsdp_hooks torch._C.DispatchKey.Functionalize torch._C.DispatchKeySet torch._C._ExcludeDispatchKeyGuard torch._from_functional_tensor torch.__future__.get_swap_module_params_on_conversion torch._C._get_accelerator torch._dynamo.disable torch._foreach_copy_ torch.as_strided torch.autograd.profiler.record_function torch.autograd.Variable._execution_engine.queue_callback torch.empty_like torch.nn.Parameter.grad torch.nn.Parameter.device torch._prims_common.make_contiguous_strides_for torch.fx.node.has_side_effect # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 | 序号 | API | 仓库内路径 | 用例数 | 覆盖范围 | |------|-----|-----------|--------|----------| | 1 | torch._running_with_deploy | test/npu/test__running_with_deploy.py | 3 | 返回值类型校验、布尔值验证、非法参数异常 | | 2 | torch.utils._python_dispatch.is_traceable_wrapper_subclass | test/npu/test_utils__python_dispatch_is_traceable_wrapper_subclass.py | 4 | 普通 Tensor、NPU Tensor、非 Tensor 类型、None 输入 | | 3 | torch._dynamo.comptime.comptime.print | test/npu/test__dynamo_comptime_comptime_print.py | 13 | 多种数据类型(string/int/float/bool/list/dict/None/tensor)、空字符串、空 tensor、单元素 tensor、缺参/多参异常 | | 4 | torch._dynamo.config | test/npu/test__dynamo_config.py | 5 | 模块类型校验、verbose/cache_size_limit/suppress_errors/dynamic_shapes 属性可访问性 | | 5 | torch._dynamo.config.skip_fsdp_hooks | test/npu/test__dynamo_config_skip_fsdp_hooks.py | 2 | 属性布尔类型校验、读写一致性 | | 6 | torch._C.DispatchKey.Functionalize | test/npu/test__C_DispatchKey_Functionalize.py | 3 | 枚举值整数类型、非负性、name 属性 | | 7 | torch._C.DispatchKeySet | test/npu/test__C_DispatchKeySet.py | 5 | 创建、has/add/remove 操作、非法类型异常 | | 8 | torch._C._ExcludeDispatchKeyGuard | test/npu/test__C__ExcludeDispatchKeyGuard.py | 4 | 上下文管理器创建、单 key/多 key 排除、非法类型异常 | | 9 | torch._from_functional_tensor | test/npu/test__from_functional_tensor.py | 6 | CPU/NPU tensor、float16 dtype、空 tensor、标量 tensor 下均抛出 RuntimeError、非法类型 TypeError | | 10 | torch.__future__.get_swap_module_params_on_conversion | test/nn/test___future__get_swap_module_params_on_conversion.py | 2 | 返回值布尔类型、非法参数 TypeError | | 11 | torch._C._get_accelerator | test/npu/test__C__get_accelerator.py | 4 | 无参调用、check=True/False 返回值、非法类型 TypeError | | 12 | torch._dynamo.disable | test/dynamo/test__dynamo_disable.py | 3 | 装饰器基本功能、recursive=False 模式、非法目标 AssertionError | | 13 | torch._foreach_copy_ | test/npu/test__foreach_copy_.py | 6 | NPU 基本拷贝、float16 dtype、空 tensor、混合设备拷贝数据验证、非法单 tensor TypeError、CPU 基线对比 | | 14 | torch.as_strided | test/npu/test_as_strided.py | 7 | NPU 视图数据正确性(确定性数据验证)、storage_offset、空 tensor、标量 tensor、dtype 保持、stride/size 不匹配异常、CPU 基线对比 | | 15 | torch.autograd.profiler.record_function | test/profiler/test_autograd_profiler_record_function.py | 5 | 上下文管理器、带参数调用、装饰器模式、空字符串名称、缺参异常 | | 16 | torch.autograd.Variable._execution_engine.queue_callback | test/test_autograd_Variable__execution_engine_queue_callback.py | 3 | backward 中回调执行验证(含 assertTrue 断言回调是否被调用)、lambda 回调、backward 外调用 RuntimeError | | 17 | torch.empty_like | test/npu/test_empty_like.py | 6 | NPU 基本创建、指定 dtype、memory_format、标量 tensor、空 tensor、CPU 基线对比 | | 18 | torch.nn.Parameter.grad | test/npu/test_nn_Parameter_grad.py | 15 | 初始 None、backward 后赋值、requires_grad=False、梯度累积、梯度清零、多种 dtype(float16 dtype 兼容 float32 提升)、空/标量/1D/3D tensor、优化器场景、detach 场景、复杂计算图、连续性 | | 19 | torch.nn.Parameter.device | test/npu/test_nn_Parameter_device.py | 4 | NPU 设备、CPU 设备、多种 dtype 变体、标量 tensor | | 20 | torch._prims_common.make_contiguous_strides_for | test/npu/test__prims_common_make_contiguous_strides_for.py | 6 | row-major stride 值验证 (12,4,1)、row_major=False stride 值验证 (12,1,3)、空 shape、1D shape、list 输入、非法类型 TypeError | | 21 | torch.fx.node.has_side_effect | test/test_fx_node_has_side_effect.py | 3 | 装饰器基本功能、lambda 函数、非 callable 透传行为(附注释说明为实现细节) | **测试命令** bash # test/npu/ 目录下的用例 python test/npu/test__running_with_deploy.py python test/npu/test_utils__python_dispatch_is_traceable_wrapper_subclass.py python test/npu/test__dynamo_comptime_comptime_print.py python test/npu/test__dynamo_config.py python test/npu/test__dynamo_config_skip_fsdp_hooks.py python test/npu/test__C_DispatchKey_Functionalize.py python test/npu/test__C_DispatchKeySet.py python test/npu/test__C__ExcludeDispatchKeyGuard.py python test/npu/test__from_functional_tensor.py python test/npu/test__C__get_accelerator.py python test/npu/test__foreach_copy_.py python test/npu/test_as_strided.py python test/npu/test_empty_like.py python test/npu/test_nn_Parameter_grad.py python test/npu/test_nn_Parameter_device.py python test/npu/test__prims_common_make_contiguous_strides_for.py # 其他目录下的用例 python test/dynamo/test__dynamo_disable.py python test/nn/test___future__get_swap_module_params_on_conversion.py python test/profiler/test_autograd_profiler_record_function.py python test/test_autograd_Variable__execution_engine_queue_callback.py python test/test_fx_node_has_side_effect.py **验证结果** 本地 NPU 环境下,21 个测试文件共 103 条用例全部通过(OK)。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33104 | 4 个月前 | |
【pytorch_v2.7.1】 add dynamic step Co-authored-by: hewenbo<hewenbo16@h-partners.com> # message auto-generated for no-merge-commit merge: !37364 merge cherry-pick-mr-37318-1780316141587-auto into v2.7.1 【pytorch_v2.7.1】 add dynamic step Created-by: hewenbo Commit-by: hewenbo Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2209 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 在_DynamicProfile类中增加set_state方法用于保存成员属性的值,用于重新拉起的新节点读取故障前的step值 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 资料中新增set_state接口 # 【接口变更】 在_DynamicProfile类中增加set_state方法用于保存成员属性的值,用于重新拉起的新节点读取故障前的step值 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 修改前:   修改后:   # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37364 | 2 个月前 | |
AI assist developer for python DT 2.7.1 Co-authored-by: deepSeekya<chenzhihan6@huawei.com> # message auto-generated for no-merge-commit merge: !26277 merge v2.7.1 into v2.7.1 AI assist developer for python DT 2.7.1 Created-by: deepSeekya Commit-by: deepSeekya Merged-by: ascend-robot Description: 【合入说明】 AI辅助研发python dt测试用例生成。 【合入来源】 AI辅助研发需求 dt测试文件覆盖率提升。 See merge request: Ascend/pytorch!26277 | 9 个月前 | |
[fix_torch_profiler_2.7.1]修复profiler L0级别kernel_details.csv无shape信息问题 Co-authored-by: yuliangbin<y1416490440@163.com> # message auto-generated for no-merge-commit merge: !32099 merge fix_profiler_l1_2.7 into v2.7.1 [fix_torch_profiler_2.7.1]修复profiler L0级别kernel_details.csv无shape信息问题 Created-by: yu_liangbin Commit-by: yuliangbin Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 关联issue号:https://gitcode.com/Ascend/pytorch/issues/1586 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1.功能:解析得时候会根据是否为aicore_none进行kernel_details.csv的表头过滤,但是在l1、aicore_metrics非aicore_none场景下会导致kernel_details.csv表头缺失shape字段,实际上只有l0场景下kernel_details.csv的表头比较少,l1场景下不应该缺失表头,因此过滤逻辑应当是是否为l0,若是l0场景,则过滤,反之不过滤; 2.UT:UT适配 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 验证结果:离线解析一份l1+aicore_none场景的数据,kernel_details.csv的表头与op_summary.csv的表头一致,未被过滤  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!32099 | 4 个月前 | |
feat(profiler): add fused op flops formulas Co-authored-by: mjsz11<liuchengju5@huawei.com> # message auto-generated for no-merge-commit merge: !38362 merge mfu7 into v2.7.1 feat(profiler): add fused op flops formulas Created-by: hhz0 Commit-by: mjsz11 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2367 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 在 profiler FLOPs 公式注册中补充融合算子默认 FLOPs 计算规则,新增支持 npu_all_gather_base_mm、npu_transpose_batchmatmul、npu_grouped_matmul、npu_quant_matmul_gelu、npu_grouped_matmul_swiglu_quant_v2、npu_alltoallv_gmm、npu_gmm_alltoallv、npu_block_sparse_attention。 2. 修正 npu_fusion_attention / npu_fused_infer_attention_score 的 Attention FLOPs 口径,按 QK^T + P @ V 统计,使用 q_dim + value_dim,不再误用 key_dim。 3. 统一只统计主 GEMM 或 Attention 矩阵乘 FLOPs,不统计通信、transpose/permute、bias、scale、量化/反量化、GELU/SwiGLU、softmax、dropout 等融合后处理。 4. 补充对应 UT 覆盖融合算子基础 shape、grouped matmul group_list、block sparse attention 有效块统计、BNSD actual lengths,以及 value_dim != key_dim 回归场景。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。未新增或变更客户可见 API,仅补充 profiler 内部 FLOPs 默认计算公式。 # 【功能验证】 1. 执行 python -m py_compile torch_npu/profiler/_flops_formulas.py test/profiler/test_flops_hook.py,通过。 2. 执行 git diff --check,通过。 3. 通过纯 Python 公式断言验证新增融合算子 FLOPs 计算结果,验证通过。 4. 尝试执行 python -m pytest test/profiler/test_flops_hook.py -q,当前本地环境缺少编译扩展 torch_npu._C,收集阶段报 ModuleNotFoundError,未进入 UT 执行。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38362 | 2 个月前 | |
feat(profiler): add fused op flops formulas Co-authored-by: mjsz11<liuchengju5@huawei.com> # message auto-generated for no-merge-commit merge: !38362 merge mfu7 into v2.7.1 feat(profiler): add fused op flops formulas Created-by: hhz0 Commit-by: mjsz11 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2367 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 在 profiler FLOPs 公式注册中补充融合算子默认 FLOPs 计算规则,新增支持 npu_all_gather_base_mm、npu_transpose_batchmatmul、npu_grouped_matmul、npu_quant_matmul_gelu、npu_grouped_matmul_swiglu_quant_v2、npu_alltoallv_gmm、npu_gmm_alltoallv、npu_block_sparse_attention。 2. 修正 npu_fusion_attention / npu_fused_infer_attention_score 的 Attention FLOPs 口径,按 QK^T + P @ V 统计,使用 q_dim + value_dim,不再误用 key_dim。 3. 统一只统计主 GEMM 或 Attention 矩阵乘 FLOPs,不统计通信、transpose/permute、bias、scale、量化/反量化、GELU/SwiGLU、softmax、dropout 等融合后处理。 4. 补充对应 UT 覆盖融合算子基础 shape、grouped matmul group_list、block sparse attention 有效块统计、BNSD actual lengths,以及 value_dim != key_dim 回归场景。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。未新增或变更客户可见 API,仅补充 profiler 内部 FLOPs 默认计算公式。 # 【功能验证】 1. 执行 python -m py_compile torch_npu/profiler/_flops_formulas.py test/profiler/test_flops_hook.py,通过。 2. 执行 git diff --check,通过。 3. 通过纯 Python 公式断言验证新增融合算子 FLOPs 计算结果,验证通过。 4. 尝试执行 python -m pytest test/profiler/test_flops_hook.py -q,当前本地环境缺少编译扩展 torch_npu._C,收集阶段报 ModuleNotFoundError,未进入 UT 执行。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38362 | 2 个月前 | |
fix: correct init_step_count and erase_step_count cache behavior Co-authored-by: zhufu-2026<3470991357@qq.com> # message auto-generated for no-merge-commit merge: !42170 merge fix_kineto_step_tracker_v2.7.1 into v2.7.1 fix: correct init_step_count and erase_step_count cache behavior Created-by: zhufu-2026 Commit-by: zhufu-2026 Merged-by: ascend-robot Description: # 【合入来源】 ## 任务: [【开源实习】Torch-NPU API一致性对齐:补齐测试用例、API功能对齐、补齐文档(39)#2968](https://gitcode.com/Ascend/pytorch/issues/2968) [【开源实习】Torch-NPU API一致性对齐:补齐测试用例、API功能对齐、补齐文档(41)#2971](https://gitcode.com/Ascend/pytorch/issues/2971) ## 任务分析issue: [【社区任务】: KinetoStepTracker.init_step_count 和 KinetoStepTracker.erase_step_count 的测试覆盖与 NPU 适配检查 #3048](https://gitcode.com/Ascend/pytorch/issues/3048) - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 本次提交为 torch.autograd.profiler.KinetoStepTracker 的两个方法补充测试用例: - KinetoStepTracker.init_step_count - KinetoStepTracker.erase_step_count --- ## 【API 功能介绍】 - init_step_count(requester):为指定请求者初始化步数计数,首次调用时注册并将步数置为 0,重复调用无操作。 - erase_step_count(requester):移除指定请求者的步数计数记录,全局步数保持历史最大值。 --- ## 【修改内容】 新增测试文件 test/profiler/test_kineto_step_tracker.py,为原生行为建立回归测试,覆盖以下 7 个核心场景: | 测试用例 | 验证内容 | |----------|----------| | test_init_does_not_alter_global_step | init_step_count 不改变全局步数 | | test_increment_takes_maximum | current_step 返回所有 requester 步数的最大值 | | test_erase_keeps_step_monotonic | 删除 requester 后全局步数不下降 | | test_erase_all_requesters_keeps_history | 删除全部 requester 后全局步数保留历史最大值 | | test_erase_return_value_contract | erase_step_count 返回 bool 表示删除是否成功 | | test_reinit_is_idempotent | 重复 init_step_count 无副作用 | | test_new_requester_after_erase_inherits_zero | 新 requester 继承当前全局步数,保持步数对齐 | --- ## 【资料变更】 不涉及。 --- ## 【接口变更】 不涉及。 --- ## 【功能验证】 ### 测试场景:新增测试用例验证 **补丁本地验证** : bash python -c " import torch import torch_npu print(f'torch={torch.__version__}') print(f'torch_npu={torch_npu.__version__}') print(f'accelerator={torch.npu.get_device_name() if torch.npu.is_available() else \"cpu\"}') " python /workspace/ascend-pytorch/test/profiler/test_kineto_step_tracker.py -v 测试结果: bash torch=torch 2.7.1+cpu torch_npu=torch-npu 2.7.1.post4 accelerator=Ascend910B3 test_erase_all_requesters_keeps_history (__main__.TestKinetoStepTracker.test_erase_all_requesters_keeps_history) Global step retains historical maximum even after all requesters are erased. ... ok test_erase_keeps_step_monotonic (__main__.TestKinetoStepTracker.test_erase_keeps_step_monotonic) Erasing any requester never decreases global step (monotonic contract). ... ok test_erase_return_value_contract (__main__.TestKinetoStepTracker.test_erase_return_value_contract) erase_step_count returns bool indicating whether deletion succeeded. ... ok test_increment_takes_maximum (__main__.TestKinetoStepTracker.test_increment_takes_maximum) current_step always equals the maximum step among all requesters. ... ok test_init_does_not_alter_global_step (__main__.TestKinetoStepTracker.test_init_does_not_alter_global_step) init_step_count only registers requester, never changes global step. ... ok test_new_requester_inherits_current_step (__main__.TestKinetoStepTracker.test_new_requester_inherits_current_step) New requester inherits current global step for alignment. ... ok test_reinit_is_idempotent (__main__.TestKinetoStepTracker.test_reinit_is_idempotent) Calling init_step_count repeatedly on the same requester has no side effect. ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.003s OK # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42170 | 13 天前 | |
test update ut Co-authored-by: huangyunlong2022<huangyunlong4@h-partners.com> # message auto-generated for no-merge-commit merge: !32254 merge 2.7ut into v2.7.1 test update ut Created-by: huangyunlong2022 Commit-by: huangyunlong2022 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 更新ut # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!32254 | 4 个月前 | |
fix: lintrunner --all-files --take NEWLINE -a Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35871 merge v2.7.1_lintrunner into v2.7.1 fix: lintrunner --all-files --take NEWLINE -a Created-by: huangjingwei Commit-by: huangjingwei Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35871 | 3 个月前 | |
[feat]profiler add ProfilerStep range Co-authored-by: hehongzhe<935062458@qq.com> # message auto-generated for no-merge-commit merge: !37136 merge tx7 into v2.7.1 [feat]profiler add ProfilerStep range Created-by: hhz0 Commit-by: hehongzhe Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2223 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 支持 Device 侧 ProfilerStep 标记。 2. 支持 step 打点设置 mspti.so 环境变量的接口适配,即不再仅依赖环境变量判断 mspti 是否开启,而是优先通过接口返回值判断。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 mstx打点可见  msmonitor打点可见  ut测试用例  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37136 | 2 个月前 | |
test: add Ascend NPU UT for torch.autograd.profiler.parse_nvprof_trace Co-authored-by: yuhongming-2026<moshui_1@qq.com> # message auto-generated for no-merge-commit merge: !42230 merge part_271 into v2.7.1 test: add Ascend NPU UT for torch.autograd.profiler.parse_nvprof_trace Created-by: yuhongming-2026 Commit-by: yuhongming-2026 Merged-by: ascend-robot Description: # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/2975**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 新增 test/profiler/test_parse_nvprof_trace.py,针对原生 API torch.autograd.profiler.parse_nvprof_trace / load_nvprof 做 Ascend NPU 适配一致性看护。 2. **社区用例情况**:pytorch 官方侧主要为 CUDA/CUPTI nvprof SQLite 解析场景;Ascend 不产出该格式,社区缺少 NPU 栈下的适配看护。故在 test/profiler/ 新增本文件(路径与 profiler 测试目录一致),而非 test_upstream patch。 3. Ascend 不生成 nvprof CUPTI SQLite,因此本 PR **不**构造 Marker/Kernel SQLite 正向解析夹具;覆盖点为: - API 在 torch_npu 栈上仍可导入/调用; - 真实 NPU 算子下 profile(use_device="npu") 事件采集; - EnforceUnique(parse_nvprof_trace 内部依赖); - 缺失 nvprof DB 时 parse_nvprof_trace / load_nvprof 负向路径仍可用。 4. 无 NPU 时通过 skipTest 跳过,避免在纯 CPU/CUDA 环境误跑。 # 【资料变更】 本 PR 仅新增测试用例,不修改文档。资料补齐见文档 PR [#42617](https://gitcode.com/Ascend/pytorch/merge_requests/42617)。 # 【接口变更】 不涉及代码/接口实现变更,仅新增 UT。 # 【功能验证】 **测试场景:** - Ascend NPU 下 API 可用性(parse_nvprof_trace / load_nvprof) - profile(use_device="npu") 采集 mm/add 等 NPU 算子事件与 timing - EnforceUnique 行为 - 缺失 nvprof DB 的负向调用 **测试方法:** bash cd test/profiler python test_parse_nvprof_trace.py **说明:** 请在本地/CI NPU 环境执行;既有运行截图可继续参考。  # 【Issue 关闭策略】 - 本 PR **不勾选**「PR 合入则关闭 issue」 - 原因:issue #2975 仍关联 #42226/#42228/#42229/#42617,需多分支测试与资料 PR 收尾后再关闭 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42230 | 9 天前 | |
feat(profiler): add fused op flops formulas Co-authored-by: mjsz11<liuchengju5@huawei.com> # message auto-generated for no-merge-commit merge: !38362 merge mfu7 into v2.7.1 feat(profiler): add fused op flops formulas Created-by: hhz0 Commit-by: mjsz11 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2367 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 在 profiler FLOPs 公式注册中补充融合算子默认 FLOPs 计算规则,新增支持 npu_all_gather_base_mm、npu_transpose_batchmatmul、npu_grouped_matmul、npu_quant_matmul_gelu、npu_grouped_matmul_swiglu_quant_v2、npu_alltoallv_gmm、npu_gmm_alltoallv、npu_block_sparse_attention。 2. 修正 npu_fusion_attention / npu_fused_infer_attention_score 的 Attention FLOPs 口径,按 QK^T + P @ V 统计,使用 q_dim + value_dim,不再误用 key_dim。 3. 统一只统计主 GEMM 或 Attention 矩阵乘 FLOPs,不统计通信、transpose/permute、bias、scale、量化/反量化、GELU/SwiGLU、softmax、dropout 等融合后处理。 4. 补充对应 UT 覆盖融合算子基础 shape、grouped matmul group_list、block sparse attention 有效块统计、BNSD actual lengths,以及 value_dim != key_dim 回归场景。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。未新增或变更客户可见 API,仅补充 profiler 内部 FLOPs 默认计算公式。 # 【功能验证】 1. 执行 python -m py_compile torch_npu/profiler/_flops_formulas.py test/profiler/test_flops_hook.py,通过。 2. 执行 git diff --check,通过。 3. 通过纯 Python 公式断言验证新增融合算子 FLOPs 计算结果,验证通过。 4. 尝试执行 python -m pytest test/profiler/test_flops_hook.py -q,当前本地环境缺少编译扩展 torch_npu._C,收集阶段报 ModuleNotFoundError,未进入 UT 执行。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38362 | 2 个月前 | |
| 1 年前 | ||
| 1 年前 | ||
test: add autograd profiler api coverage Co-authored-by: baoxuebin_2026<xuebin@isrc.iscas.ac.cn> # message auto-generated for no-merge-commit merge: !41981 merge codex/autograd-profiler-apis-v271 into v2.7.1 test: add autograd profiler api coverage Created-by: baoxuebin_2026 Commit-by: baoxuebin_2026 Merged-by: ascend-robot Description: # 【合入来源】 [#2933](https://gitcode.com/Ascend/pytorch/issues/2933) [#2961](https://gitcode.com/Ascend/pytorch/issues/2961) [#2898](https://gitcode.com/Ascend/pytorch/issues/2898) - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 公开issue: - torch.autograd.Variable._execution_engine.run_backward:https://gitcode.com/Ascend/pytorch/issues/2933 - torch.autograd.profiler.EnforceUnique:https://gitcode.com/Ascend/pytorch/issues/2961 - torch.autograd.profiler_util.MemRecordsAcc.in_interval:https://gitcode.com/Ascend/pytorch/issues/2898 # 【修改方案】 1. API 功能说明: - torch.autograd.Variable._execution_engine.run_backward:PyTorch autograd execution engine 的反向传播入口,可对指定 graph roots 执行 backward,并返回指定输入的梯度。 - torch.autograd.profiler.EnforceUnique:profiler 内部用于校验 key 唯一性的辅助类,重复 key 会抛出异常。 - torch.autograd.profiler_util.MemRecordsAcc.in_interval:profiler memory records 的区间筛选接口,用于返回指定时间范围内的 memory record。 2. 上游用例检查情况: 检索 PyTorch / Torch-NPU 现有测试后,未找到面向以上 3 个 API 的独立、直接、最小验证用例,因此按任务要求新增 NPU API 验证用例。 3. 新增用例文件: - test/autograd/test_execution_engine.py - test/profiler/test_profiler_utils_api.py 4. 新增用例覆盖场景: - _execution_engine.run_backward 在当前 accelerator 设备上返回指定输入张量的梯度 - EnforceUnique 对重复 key 抛出异常 - MemRecordsAcc.in_interval 按时间区间筛选 memory records 5. 新增文件头部已按要求补充注释,说明该文件验证的 API 功能。 补充说明:当前分支中 MemRecordsAcc.in_interval 用例使用 in_interval(2, 5),与该版本接口的时间区间处理逻辑保持一致。 # 【资料变更】 不涉及。资料补齐已单独提交文档 PR。 # 【接口变更】 不涉及。未修改跨仓接口,也未修改用户可见接口行为。 # 【功能验证】 测试环境: text torch: 2.7.1 torch_npu: 2.7.1.post5 CANN: 9.1.0 测试方法: source /usr/local/Ascend/ascend-toolkit/set_env.sh TORCH_DEVICE_BACKEND_AUTOLOAD=1 python3.11 test/autograd/test_execution_engine.py -v TORCH_DEVICE_BACKEND_AUTOLOAD=1 python3.11 test/profiler/test_profiler_utils_api.py -v 测试结果: test_run_backward_returns_requested_gradients ... ok Ran 1 test in 24.4s OK test_enforce_unique_raises_on_duplicate_key ... ok test_mem_records_acc_filters_records_in_interval ... ok Ran 2 tests in 11.0s OK See merge request: Ascend/pytorch!41981 | 14 天前 | |
| 2 年前 | ||
对齐Pytorch Profiler部分接口 Co-authored-by: xfeng<zchlcw663@163.com> # message auto-generated for no-merge-commit merge: !34217 merge v2.7.1 into v2.7.1 对齐Pytorch Profiler部分接口 Created-by: zyb_230 Commit-by: xfeng Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/1802 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 对齐pytorch profiler的部分接口: 一个是增加一个 skip_first_wait:  一个是custom_trace_id_callback,然后增加两个对应的set和get的接口set_custom_trace_id_callback和get_trace_id   # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” **涉及,需要和资料沟通** # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 涉及,前面已经说明 # 【功能验证】 **场景1** 设置schedule = torch_npu.profiler.schedule(wait=2, warmup=1, active=1, repeat=2, skip_first=0, skip_first_wait=1) 之前:采集第3和第7个step  现在:采集第1和第5个step  **场景2** 测试get_trace_id接口: …… with torch_npu.profiler.profile( activities=[ torch_npu.profiler.ProfilerActivity.NPU, torch_npu.profiler.ProfilerActivity.CPU, ], with_stack=True, schedule = torch_npu.profiler.schedule(wait=2, warmup=1, active=2, repeat=2, skip_first=1, skip_first_wait=1), on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result_profiling"), experimental_config=experimental_config) as prof: for i in range(12): add(x0, x1) prof.step() print(f"step {i}: {prof.get_trace_id()}") ……  默认是一个uuid,是直接从pytorch里面拷贝过来的,现在会在profiler_metadata.json里面落盘,db里面也有    **场景3** 异常的skip_first_wait参数不生效,reset为0 正常: 异常:必须设置为整数,否则有警告信息,reset为0   **场景4:** 设置custom_trace_id_callback,这个trace_id,我们是想和每一份ascend_pt数据或者repeat参数绑定的, class RepeatTraceIdGenerator: def __init__(self): self.repeat_count = 0 # 从 0 开始 def __call__(self) -> str: # 每一轮 profile 启动,计数 +1 current_id = str(self.repeat_count) self.repeat_count += 1 return current_id trace_id_gen = RepeatTraceIdGenerator() …… with torch_npu.profiler.profile( activities=[ torch_npu.profiler.ProfilerActivity.NPU, torch_npu.profiler.ProfilerActivity.CPU, ], with_stack=True, schedule = torch_npu.profiler.schedule(wait=2, warmup=1, active=2, repeat=2, skip_first=1, skip_first_wait=1), on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result_profiling"), experimental_config=experimental_config, custom_trace_id_callback=trace_id_gen) as prof: for i in range(12): add(x0, x1) prof.step() print(f"step {i}: {prof.get_trace_id()}")  如果call_back类型不对,会有警告信息,然后使用默认的uuid  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!34217 | 3 个月前 | |
test: Add tests for StringTable.default_factory Co-authored-by: qq_65095566<1922937030@qq.com> # message auto-generated for no-merge-commit merge: !43210 merge test-string-table-default-factory-2.7.1 into v2.7.1 test: Add tests for StringTable.default_factory Created-by: qq_65095566 Commit-by: qq_65095566 Merged-by: ascend-robot Description: # 【合入来源】 ## 关联社区 issue:[[Usage]: torch.autograd.profiler_util.StringTable.default_factory API适配补齐 #3444](https://gitcode.com/Ascend/pytorch/issues/3444) ## 关联社区 issue:[【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(59) #2906](https://gitcode.com/Ascend/pytorch/issues/2906) - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 经检索 PyTorch v2.7.1 官方测试目录,未发现针对 torch.autograd.profiler_util.StringTable.default_factory 的直接测试用例。 现有测试未直接覆盖该属性的默认值、构造参数、属性修改、非法参数以及与 StringTable.__missing__ 的交互行为,因此需要补充直接测试。 本次修改内容如下: 1. 扩展已有测试文件: text test/profiler/test_string_table.py 2. 保留原有 torch.autograd.profiler_util.StringTable.pop 测试。 3. 新增 torch.autograd.profiler_util.StringTable.default_factory 测试,覆盖: - 默认构造时 default_factory 为 None; - 显式传入 None; - 构造时传入可调用对象; - 读取和修改 default_factory 属性; - 构造时传入不可调用对象抛出 TypeError; - StringTable.__missing__ 不调用 default_factory。 4. 本次仅补充单元测试,不修改 API 功能实现。 # 【资料变更】 不涉及 经检查,torch-npu master 分支 docs/zh/api/native_api 下 PyTorch 2.7.1、2.9.0、2.10.0、2.11.0 和 2.12.0 对应资料中均未收录 torch.autograd.profiler_util.StringTable.default_factory。 PyTorch 官方文档中也未提供该属性的独立公开文档条目。 StringTable 继承自 collections.defaultdict,default_factory 是继承获得的标准库属性,并非 PyTorch 在 StringTable 中单独实现的成员,因此本次不新增 torch-npu 原生 API 资料条目。 该属性属于非计算类属性,不涉及张量及数据类型。 # 【接口变更】 本次不修改 torch.autograd.profiler_util.StringTable.default_factory 的功能、参数或返回行为,仅补充单元测试,不涉及跨代码仓或客户可见接口变更。 # 【功能验证】 测试命令: bash python test/profiler/test_string_table.py -v 测试结果: text Ran 9 tests in 0.032s OK 原有 4 个 StringTable.pop 测试和新增 5 个 StringTable.default_factory 测试均执行通过。 代码格式检查: bash git diff --check 检查结果无异常。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43210 | 7 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 年前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 9 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 13 天前 | ||
| 4 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 9 天前 | ||
| 2 个月前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 14 天前 | ||
| 2 年前 | ||
| 3 个月前 | ||
| 7 天前 |