| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 年前 | ||
| 2 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
delete-skip Co-authored-by: l00881990<lixinyu68@huawei.com> # message auto-generated for no-merge-commit merge: !37317 merge delete-skip into master delete-skip Created-by: l1919_snow Commit-by: l00881990 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/2177 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用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!37317 | 3 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
[master] Add NPU tests for global full backward module hook APIs Co-authored-by: coconut77<2416273142@qq.com> # message auto-generated for no-merge-commit merge: !37884 merge api-completion-module-hooks-new2-master into master [master] Add NPU tests for global full backward module hook APIs Created-by: coconut77 Commit-by: coconut77 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/2318 # 【修改方案】 ## 一、2 个 API 功能如下 1. torch.nn.modules.module.register_module_full_backward_hook - 为所有 nn.Module 注册全局 full backward hook,在完整反向传播阶段触发回调。 2. torch.nn.modules.module.register_module_full_backward_pre_hook - 为所有 nn.Module 注册全局 full backward pre hook,在完整反向传播前触发回调。 ## 二、社区用例对这 2 个 API 的验证完整性分析 1. 未检索到这 2 个“全局 API”的直接官方用例; 2. 上游仅覆盖了实例级 API: - register_full_backward_hook - register_full_backward_pre_hook 3. 因此社区现有用例对这 2 个全局 API 的直接验证不完整,需要新增测试文件补齐。 ## 三、NPU 适配 1. 新增 test/nn/test_global_module_full_backward_hooks.py; 2. 直接验证 torch.nn.modules.module.register_module_full_backward_hook; 3. 直接验证 torch.nn.modules.module.register_module_full_backward_pre_hook; 4. 核心检查点为 hook 是否触发、梯度是否按预期改写; 5. 相关张量均在 NPU 上执行。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 ## 1. 测试环境 text - 操作系统:Ubuntu - 昇腾硬件信息:NPU - CANN软件版本:8.5.0 - 安装的对应软件版本:torch 2.11.0+cu130、torch_npu 2.11.0rc1 ## 2. 测试命令 bash python -u /workspace/coconut77_pytorch7326_master_new2/test/nn/test_global_module_full_backward_hooks.py > /workspace/version_logs/module_hooks_new2_master.log 2>&1 ## 3. patch 格式检查真实输出 text EXIT_CODE:0 ## 4. 测试真实输出 text .. ---------------------------------------------------------------------- Ran 2 tests in 1.243s OK # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37884 | 3 个月前 | |
test update ut Co-authored-by: huangyunlong2022<huangyunlong4@h-partners.com> # message auto-generated for no-merge-commit merge: !37776 merge 2.13ut1 into master 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能力等内容) test_deprecation test_cycle_lr_cycle_momentum_fail_with_momentumless_optimizer test_hook_registration 同步社区用例更新 test_float_status A2/A3需要开启饱和模式 test_select_at_first_axis_to_single_element_tensor_copy 转连续优化是aclop路径,alcnn路径添加aclnnAdds通过用例 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37776 | 3 个月前 | |
| 2 年前 | ||
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
| 2 年前 | ||
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
修复API入参校验和用例适配 Co-authored-by: bellatan<tanmei2@huawei.com> # message auto-generated for no-merge-commit merge: !36469 merge fix_api_validation into master 修复API入参校验和用例适配 Created-by: bellatan Commit-by: bellatan Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 ### 1. device 入参类型缺少校验,导致非法 device 未按预期报错 **API:** set_device_limit(device, cube_num, vector_num)、get_device_limit(device) **API 原始约束:** set_device_limit 和 get_device_limit 的 device 参数语义是指定 NPU 设备卡号,应传入明确的 NPU 设备 ID。 **当前问题:** 传入 None 和 float 等非 int 类型时未报错,不符合 API 参数约束。 **根因分析:** 原实现中对入参 device 使用了 _get_device_index(device, optional=True) 对入参 device 进行兼容性处理,导致约束之外的非法入参没有被及时拒绝。 **解决方案:** 针对 set_device_limit/get_device_limit 这两个 API,不再使用 _get_device_index(device, optional=True) 做宽松解析,而是直接按照 API 约束对原始 device 参数做严格校验。 新加校验规则: 1. device 必须是 int; 2. device 不能是 bool; python if isinstance(device, bool) or not isinstance(device, int): raise TypeError( "device must be an int, but got {}{}".format( type(device).__name__, pta_error(ErrCode.TYPE) ) ) **涉及的修改文件**:torch_npu/npu/npu_config.py ### 2. allow_hf32 入参类型缺少校验,导致非 bool 入参被错误接受 **API:** matmul.allow_hf32、conv.allow_hf32 **API 原始约束:** torch_npu.npu.matmul.allow_hf32 的语义是控制 MatMul 类算子是否允许使用 HF32 计算,应作为布尔型配置开关使用。 torch_npu.npu.conv.allow_hf32 的语义是控制 Conv 类算子是否允许使用 HF32 计算,应作为布尔型配置开关使用。 **当前问题:** allow_hf32 缺少 bool 类型校验,传入非 bool 类型没有报错,不符合 API 参数约束。 **根因分析:** 原实现直接"enable" if value else "disable",根据 Python 对象的真假值进行判断,未判断 value 是否为 bool 类型,导致非法类型未被拒绝。 **解决方案:** 新增 isinstance(value, bool) 校验,非 bool 类型直接抛出 TypeError,避免非法入参被隐式转换为开关配置。在 _allowHF32Matmul.__setattr__ 和 _allowHF32Conv.__setattr__ 的 allow_hf32 分支中增加 bool 类型校验。 新加校验规则: 1. allow_hf32 必须是 bool; 2. 只允许 True 或 False; 3. int、str、None、list、dict 等非 bool 类型均抛出 TypeError。 python if name == "allow_hf32": if not isinstance(value, bool): raise TypeError( "allow_hf32 must be a bool, but got {}{}".format( type(value).__name__, pta_error(ErrCode.TYPE) ) ) **涉及的修改文件**:torch_npu/npu/npu_config.py ### 3. 用例适配 用例:test\nn\test_module_hooks.py,用例名:test_hook_inplace 问题:用例ci失败,报错正则匹配失败 根因:改用例预期报错的接口有变更,torch==2.12预期报错接口名为**BackwardHookFunctionBackward**,torch==2.13预期报错接口名变更为**BackwardHookFunction**。 解决:开放用例,用例报错提示适配,兼容两个版本的torch: with self.assertRaisesRegex(RuntimeError, "Output 0 of BackwardHookFunctionBackward is "修改为with self.assertRaisesRegex(RuntimeError, "Output 0 of BackwardHookFunction(Backward)? is " with self.assertRaisesRegex(RuntimeError, "BackwardHookFunction(Backward)? is a view "修改为with self.assertRaisesRegex(RuntimeError, "Output 0 of BackwardHookFunction(Backward)? is " # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 已有用例本地验证pass,CI pass 1. 新加用例:test/npu/test_torch_npu.py   2. 已有用例:test/npu/test_torch_backends.py  3. 已有用例:test/nn/test_module_hooks.py  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!36469 | 4 个月前 | |
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
| 2 年前 | ||
add test for nn.Module.npu() Co-authored-by: zf_zhang<sjzz0306@outlook.com> # message auto-generated for no-merge-commit merge: !35161 merge test-nn-module-npu-master into master add test for nn.Module.npu() Created-by: zf_zhang Commit-by: zf_zhang Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">https://gitcode.com/Ascend/pytorch/issues/1888?ref=&did=3951326#tid-3951326</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> pytorch社区的test_nn.py中没有torch.nn.Module.npu的测试用例文件,故修改test/nn/test_nn_api.py这个测试用例文件,用于验证这个api的正确性 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 用例设计原则 本次验证结合官方用例复用与自定义用例补充的方式,遵循 “最小化、核心化、针对性” 原则,核心思路为: 补充缺失用例:针对torch.nn.Module.npu这个缺失用例,我们设计了精简且详细的测试用例,覆盖了其核心功能 聚焦核心功能:我们验证了这个 API 的基础操作以及功能,确保结果反映 API 本身适配状态; 轻量化设计:单个测试方法仅验证一个核心功能点,逻辑清晰、执行高效,便于问题定位。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 在master 版本上执行该用例,测试通过,日志如下: root@aa02efd9993a:/home/test# python /home/test/pytorch-v271/test/nn/test_nn_api.py -v TestNNModuleAPIs.test_npu test_npu (__main__.TestNNModuleAPIs.test_npu) Checks that moving a module (with both parameters and buffers) to NPU via to("npu") or .npu() correctly places all tensors on the NPU device. ... ok ---------------------------------------------------------------------- Ran 1 test in 2.078s OK # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35161 | 4 个月前 | |
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
feat: add autocast registration for flex_attention both eager and inductor Co-authored-by: liuyutong_bury<liuyutong25@huawei.com> # message auto-generated for no-merge-commit merge: !44287 merge feat/flex-attention-eager-autocast-v2 into master feat: add autocast registration for flex_attention both eager and inductor Created-by: liuyutong_bury Commit-by: liuyutong_bury Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/3824 - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 ## 修改文件 | 文件 | 操作 | 说明 | |------|------|------| | torch_npu/utils/patch_flexattention.py | 新建 | autocast 注册函数 + device 校验函数(不自动执行,由 PatchManager 调用) | | torch_npu/_init/patches/npu_patches.py | 修改 | 新增 apply_flex_attention_patch(),通过 PatchManager 在 import torch_npu 时触发 | | torch_npu/contrib/transfer_to_npu.py | 修改 | 删除 _patch_flex_attention_device 定义及 from torch_npu.utils import patch_flexattention | | torch_npu/_inductor/__init__.py | 修改 | 删除 _validate_device 的 import 和 flex_attention._validate_device = _validate_device 赋值 | | test/nn/test_npu_flexattention.py | 新建 | eager 执行 + autocast bf16 正确性测试 | ## 实现方案 将 flex_attention 的 AutocastPrivateUse1 注册和设备校验 patch 定义在 torch_npu.utils.patch_flexattention,通过 PatchManager 在 import torch_npu 时统一触发,不再依赖 eager / inductor 两条路径各自显式 import。 幂等安全:has_kernel_for_dispatch_key + _npu_device_patched flag 双保险,多次 import 不会冲突。 运行时路径 import torch_npu │ └─ PatchManager._apply_all_patches() │ └─ apply_flex_attention_patch() │ ├─ _patch_flex_attention_device() │ └─ fa_mod._validate_device = _npu_valid_device │ (接受 NPU tensor,拒绝非 NPU / 混合设备) │ └─ _register_npu_flex_attention_autocast() └─ flex_attention_hop.py_impl(AutocastPrivateUse1)(...) flex_attention_backward_hop.py_impl(AutocastPrivateUse1)(...) 验证 test 1: eager 模式 — flex_attention 在 NPU 上直接执行 test 2: autocast — bf16 自动类型转换 + 数值正确性 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44287 | 1 个月前 | |
| 2 年前 | ||
test(nn): add PackedSequence API tests on NPU Co-authored-by: Jinfan Liu<1300083451@qq.com> # message auto-generated for no-merge-commit merge: !37118 merge test-packed-sequence-api-clean-npu-master into master test(nn): add PackedSequence API tests on NPU Created-by: JfanLiu Commit-by: Jinfan Liu Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/2003**</font> > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> [x] 问题单 # 【修改方案】 一、API功能说明 API范围: - torch.nn.utils.rnn.PackedSequence - torch.nn.utils.rnn.PackedSequence.count - torch.nn.utils.rnn.PackedSequence.index - torch.nn.utils.rnn.PackedSequence.is_pinned - torch.nn.utils.rnn.PackedSequence.to 1. torch.nn.utils.rnn.PackedSequence 是 PyTorch RNN 工具模块中表示变长序列压缩结果的数据结构,主要由 torch.nn.utils.rnn.pack_padded_sequence、torch.nn.utils.rnn.pack_sequence 等接口构造,也可以直接由 data、batch_sizes、sorted_indices、unsorted_indices 四元组构造。 核心能力:保存压缩后的 data Tensor、每个 time step 的 batch_sizes,以及可选的 sorted_indices / unsorted_indices,用于在压缩序列和 padded 序列之间恢复顺序关系。 设备约束:data 可以位于 NPU;sorted_indices / unsorted_indices 跟随 data 的设备;batch_sizes 是序列结构元数据,按 PyTorch 接口约束保持 CPU int64 Tensor。 2. torch.nn.utils.rnn.PackedSequence.to 是 PackedSequence 的设备和 dtype 迁移接口,语义对齐 torch.Tensor.to。 核心能力:对 data 执行目标 device / dtype 转换,并同步迁移 sorted_indices / unsorted_indices;当 data 已满足目标配置时返回 self,避免不必要拷贝。 边界约束:to 不迁移 batch_sizes,保持 PackedSequence 对 batch_sizes 的 CPU 元数据约束。 3. torch.nn.utils.rnn.PackedSequence.count / torch.nn.utils.rnn.PackedSequence.index 是 PackedSequence 继承自 NamedTuple 的实例方法。 核心能力:count 返回指定成员值在 PackedSequence 四元组中的出现次数;index 返回指定成员值首次出现的位置。 验证重点:PackedSequence 有自定义构造逻辑,需要在真实 PackedSequence 实例上确认 NamedTuple 的 tuple-like 行为没有被破坏。 4. torch.nn.utils.rnn.PackedSequence.is_pinned 是 PackedSequence 的 pinned memory 状态查询接口。 核心能力:返回 self.data.is_pinned() 的结果,用于判断 PackedSequence 的实际 data Tensor 是否处于 pinned memory 状态。 设备边界:NPU Tensor 不走 CPU pinned memory 语义,验证重点是接口可调用、返回值稳定,并且不会破坏 PackedSequence 的 NPU data Tensor 路径。 二、测试用例完备性说明 PyTorch 社区 test/nn/test_packed_sequence.py 已覆盖 torch.nn.utils.rnn.PackedSequence.to 及 pack/pad/unpack 集成路径,但缺少 torch.nn.utils.rnn.PackedSequence.count、torch.nn.utils.rnn.PackedSequence.index、torch.nn.utils.rnn.PackedSequence.is_pinned 的直接用例。 master 分支不提交 test_upstream patch。本 PR 在 torch-npu test 目录新增 test/nn/test_packed_sequence_api.py,包含 3 个直接用例: 1. test_packed_sequence_constructor_and_to_on_npu:构造 NPU data + CPU batch_sizes + NPU sorted/unsorted indices 的 PackedSequence,验证构造、设备约束、is_pinned,以及 to("cpu") / to("npu") 迁移。 2. test_packed_sequence_namedtuple_methods_on_optional_indices:验证 count(None)、index(None)、count("non_existent") 和 index 不存在成员抛 ValueError,覆盖 NamedTuple 方法。 3. test_packed_sequence_rejects_accelerator_batch_sizes:验证 NPU batch_sizes 按 PyTorch 约束抛出 ValueError。 三、NPU适配方案 1. API 源码无需修改:上述 API 位于 PyTorch 框架层,核心逻辑为 PackedSequence 结构管理、Tensor.to 调用转发和 NamedTuple 行为。 2. 新增 torch-npu 原生测试:补齐 PyTorch 社区缺少的 count/index/is_pinned 直接验证,并补充 PackedSequence.to 与 batch_sizes CPU 元数据约束验证。 # 【资料变更】 > 已检查 v2.7.1 docs/zh/native_apis 中各版本 torch-nn.md,以及 v2.12.0 docs/api/torch_npu_apis.md。torch.nn.utils.rnn.PackedSequence、torch.nn.utils.rnn.PackedSequence.count、torch.nn.utils.rnn.PackedSequence.index、torch.nn.utils.rnn.PackedSequence.is_pinned、torch.nn.utils.rnn.PackedSequence.to 均已列入 API 支持列表。本次只补充/适配测试用例,不涉及资料补充。 # 【接口变更】 > 不涉及。API 源码无修改,不新增、删除或变更对外接口。 # 【功能验证】 > 新增用例与 2.12.0 分支同源,已在 2.12.0 torch-npu 环境执行通过: bash python test/nn/test_packed_sequence_api.py Ran 3 tests in 1.446s OK See merge request: Ascend/pytorch!37118 | 3 个月前 | |
| 2 年前 | ||
[Docs][Test] Supplement nn.parameter.is_lazy document and test case Co-authored-by: m0_45651774<2759927519@qq.com> # message auto-generated for no-merge-commit merge: !44234 merge test-nn-parameter-is-lazy-master into master [Docs][Test] Supplement nn.parameter.is_lazy document and test case Created-by: m0_45651774 Commit-by: m0_45651774 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 **[[Usage]: torch.nn.parameter.is_lazy在 torch-npu 的资料未明确标注支持状态,但实际在 NPU 环境下可正常使用 ](https://gitcode.com/Ascend/pytorch/issues/3335)**</font>\ **请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 问题单 pytorch社区用例没有验证充分torch.nn.parameter.is_lazy,故新增该测试用例文件,验证其在不同参数类型及 NPU 场景下的行为是否符合预期。。 # 【修改方案】 **一、API 功能说明** torch.nn.parameter.is_lazy 用于判断一个参数(parameter)或缓冲区(buffer)是否处于 lazy(延迟初始化)状态。 判断输入对象 param 是否为: • torch.nn.UninitializedParameter • torch.nn.UninitializedBuffer 如果是,则返回 True;否则返回 False。 **二、测试文件test_parameter_is_lazy.py完整验证该 API 的原因** PyTorch 官方社区暂无针对该 API 的直接独立用例覆盖,有相关调用,但是验证功能不充分,因此自行编写用例并提交到 test 目录。 1. 覆盖了 API 的所有正向逻辑(True 场景) is_lazy 的核心功能是判断对象是否为未初始化的延迟(Lazy)状态。测试通过以下用例验证了所有符合该特性的对象: 未初始化的 Parameter (UninitializedParameter):验证 API 能正确识别延迟参数,返回 True。 未初始化的 Buffer (UninitializedBuffer):验证 API 能正确识别延迟 Buffer,返回 True。 2. 覆盖了全面的负向与边界逻辑(False 场景) 测试不仅验证了“是”的情况,还通过对比组排除了其他常见数据类型的干扰,确保没有假阳性(False Positive): 普通 Parameter:已实例化的 Parameter 应返回 False。 普通 Tensor:标准的 PyTorch 张量应返回 False。 空值 None:处理非法或边界输入时,API 不会崩溃并能安全返回 False。 3. 验证了生命周期变化(动态状态转换) 延迟加载(Lazy Model)的核心机制在于“先占位,后实例化”。 test_is_lazy_after_materialize 完整模拟了参数的生命周期: 1.初始为 UninitializedParameter is_lazy 返回 True。 2.调用 .materialize() 完成实体化 is_lazy 返回 False。 此用例确保了 API 能精准感知对象从 Lazy Concrete 的状态转变。 4. 适配特定硬件环境(NPU 跨设备验证) 代码开头使用 torch.accelerator.current_accelerator() 动态获取设备类型(如 NPU/Ascend)。 所有的验证用例在创建 Tensor/Parameter 时,都显式指定了 device=device_type。这不仅验证了 API 在标准 CPU 上的逻辑,还确保了其在 NPU 等特定硬件加速器上的兼容性与正确性。 **三、NPU适配** `` torch.nn.parameter.is_lazy 是 PyTorch 中用于判断参数是否处于 Lazy 初始化状态的纯 Python 层辅助 API。其核心逻辑仅依赖 UninitializedParameter 和 UninitializedBuffer 类型判断,不涉及 Tensor 计算、设备管理、内存分配或底层 Kernel 调用。核心逻辑不耦合任何特定硬件(包括 GPU/NPU/CPU),因此适配昇腾 NPU 时无需修改这个 API 本身,可直接复用。 # 【资料变更】 涉及 已检查文档,https://gitcode.com/Ascend/pytorch/tree/master/docs/zh/api/native_api 下面各个版本未写了该API已支持,所以需要提交PR修改资料。 注意:由于官方文档v2.7.1版本没有对torch.nn.parameter.is_lazy生成独立页面文档,因此docs中v2.7.1版本不会补齐,仅更新v2.11.0、v2.12.0、v2.13.0. # 【接口变更】 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 在2.7.1、2.11.0 、2.12.0版本上执行该用例,均通过,日志如下: 测试命令: python test/nn/test_parameter_is_lazy.py ``  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44234 | 1 个月前 | |
[master][Fix] Fix static check errors detected by CODESPELL Co-authored-by: thickhair<zp2165064878@163.com> # message auto-generated for no-merge-commit merge: !38552 merge code_spell_fix_master into master [master][Fix] Fix static check errors detected by CODESPELL Created-by: thickhair Commit-by: thickhair 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/1865 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38552 | 3 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
Skip failing torch official TestCase tests and disable unsupported test cases Co-authored-by: yuhaiyan<yuhaiyan8@huawei.com> Co-authored-by: yuhaiyan8<yuhaiyan8@h-partners.com> # message auto-generated for no-merge-commit merge: !32140 merge cherry-pick-mr-32139-1774073503832-auto into master Skip failing torch official TestCase tests and disable unsupported test cases Created-by: yuhaiyan Commit-by: yuhaiyan;yuhaiyan8 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 暂时跳过失败用例 2. 已提单跟进修复 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!32140 | 5 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
test: add unflatten_dense_tensors NPU coverage Co-authored-by: yulin520<yutianaoxiang@163.com> # message auto-generated for no-merge-commit merge: !41637 merge test-unflatten-dense-tensors-npu-master-issue2862 into master test: add unflatten_dense_tensors NPU coverage Created-by: weixin_65332823 Commit-by: yulin520 Merged-by: ascend-robot Description: # 〖合入来源〗 - [ ] 需求 - [ ] 问题单 - [x] issue/工单:#2862 - [ ] 重构优化 - [ ] 资料更新 Issue: [Issue #2862](https://gitcode.com/Ascend/pytorch/issues/2862) # 〖修改方案〗 本 PR 针对 master 分支新增以下 NPU 测试文件: text test/nn/test_unflatten_dense_tensors.py 涉及 API: python torch._C._nn.unflatten_dense_tensors torch._C._nn.unflatten_dense_tensors 位于 PyTorch C++ 扩展绑定模块 torch._C._nn 中,用于根据原始 tensor 列表的信息,将扁平化后的 dense tensor 拆分并恢复为多个 dense tensor。 经验证,该 API 在 master 分支中已经存在,torch-npu 无需新增对应的 API 实现代码。本 PR 仅补充 Python 层 NPU 测试,用于验证该接口在 NPU Tensor 输入下的行为一致性。 测试中通过统一方式获取当前设备类型: python device_type = ( acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu" ) 本次共新增 4 个测试用例,主要覆盖: 1. **基本功能测试** - 构造多个 NPU dense tensor; - 使用 torch._utils._flatten_dense_tensors 进行 flatten; - 调用 torch._C._nn.unflatten_dense_tensors 恢复 tensor; - 检查输出数量、shape、dtype、device 和数值; - 检查恢复 tensor 的 storage 共享关系及 storage offset。 2. **Empty Tensor 测试** - 验证输入中包含空 tensor 时能够正常恢复; - 检查恢复后的 shape、dtype 和 device。 3. **Autograd 测试** - 验证恢复后的 tensor 可以正常参与后续计算; - 验证反向传播路径可用。 4. **dtype 保持测试** - 覆盖 float16 和 float32; - 验证恢复后的 tensor dtype 与原始 tensor 保持一致。 本 PR: text 未新增 API 实现代码 未引入 transfer_to_npu 自动迁移 未修改 JIT / Dynamo 核心方法 未引入无关文件修改 # 〖资料变更〗 不涉及。 torch._C._nn.unflatten_dense_tensors 属于 PyTorch 内部 C++ 绑定接口。 本 PR 未新增公开 API,也未修改用户可见接口,因此不涉及公共 API 资料变更。 # 〖接口变更〗 不涉及。 本 PR 仅新增 NPU 测试文件,不涉及 API 实现及公开接口变更。 # 〖功能验证〗 验证环境: text 操作系统:Linux(Ubuntu) 昇腾硬件:910B4 CANN:8.5.0 目标分支:master PyTorch:2.14.0.dev20260719+cpu torch_npu:2.14.0+git294761d current accelerator:npu npu available:True npu device count:1 最终验证 Commit: text 294761dc7aabc19f2ee2add22869e50c013d8b0d master 源码版本及 PyTorch 依赖: text torch_npu source version:2.14.0 PyTorch requirement:torch==2.14.0.dev20260719 基于该最终 Commit 实际构建得到: text torch_npu-2.14.0+git294761d-cp311-cp311-linux_aarch64.whl 并在安装该 wheel 后完成真实 NPU Runtime 验证。 已完成以下检查: 1. API 存在性验证; 2. NPU 设备可用性验证; 3. 基本 flatten / unflatten 功能验证; 4. 输出 tensor 数量、shape、dtype、device 验证; 5. 输出 tensor 数值一致性验证; 6. storage 共享关系及 storage offset 验证; 7. empty tensor 场景验证; 8. autograd 路径验证; 9. float16 / float32 dtype 保持验证; 10. 测试文件 Python 语法检查; 11. 测试文件修改范围检查; 12. transfer_to_npu 未引入检查; 13. JIT / Dynamo 核心方法未修改检查; 14. commit 单文件范围检查; 15. master 最终 Commit 对应源码 wheel 构建验证; 16. wheel 安装验证; 17. 真实 NPU Runtime 验证; 18. 最终 PR Commit 对应的 4 个 API43 测试运行验证。 Runtime 验证结果: text TORCH=2.14.0.dev20260719+cpu TORCH_NPU=2.14.0+git294761d DEVICE=npu NPU_RUNTIME=PASS .... ---------------------------------------------------------------------- Ran 4 tests OK API43_RESULT=PASS 最终结果: text BUILD_RESULT=PASS INSTALL_RESULT=PASS API_EXISTENCE_RESULT=PASS NPU_RUNTIME=PASS API43_TEST_COUNT=4 API43_RESULT=PASS FINAL_RESULT=PASS 远程分支与提交信息: text 源仓库:weixin_65332823/pytorch 源分支:test-unflatten-dense-tensors-npu-master-issue2862 目标仓库:Ascend/pytorch 目标分支:master 最终 Commit:294761dc7aabc19f2ee2add22869e50c013d8b0d # 〖CheckList〗 - [x] PR 标题已使用 test 类型标签 - [x] 已关联 Issue #2862 - [x] 已确认 master 分支中 API 存在 - [x] 已使用统一 device_type 获取方式 - [x] 已完成基本功能验证 - [x] 已完成 storage 相关验证 - [x] 已完成 empty tensor 场景验证 - [x] 已完成 autograd 路径验证 - [x] 已完成 float16 / float32 dtype 验证 - [x] 已基于最终 Commit 构建 torch_npu wheel - [x] 已完成 wheel 安装验证 - [x] 已完成真实 NPU Runtime 验证 - [x] 4 个测试用例全部通过 - [x] 已检查新增测试文件内容 - [x] 已确认 commit 仅包含目标测试文件 - [x] 已确认未引入 transfer_to_npu - [x] 已确认未修改 JIT / Dynamo 核心方法 - [x] 已确认不涉及 API 实现代码 - [x] 已确认不涉及资料变更 - [x] 已确认不涉及公开接口变更 # 验证截图  See merge request: Ascend/pytorch!41637 | 1 个月前 | |
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
| 2 年前 | ||
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
| 2 年前 | ||
| 2 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 年前 | ||
| 2 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 3 个月前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 2 年前 | ||
| 4 个月前 | ||
| 2 年前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 2 年前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 1 个月前 | ||
| 2 年前 | ||
| 3 个月前 | ||
| 2 年前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 5 个月前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 1 个月前 | ||
| 4 个月前 | ||
| 2 年前 | ||
| 4 个月前 | ||
| 2 年前 | ||
| 2 年前 |