| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【API】Add custom validation cases for HealthCheckServer APIs Co-authored-by: JfanLiu<1300083451@qq.com> # message auto-generated for no-merge-commit merge: !34493 merge test-healthcheck-server-api-v2.7.1 into v2.7.1 【API】Add custom validation cases for HealthCheckServer APIs Created-by: JfanLiu Commit-by: JfanLiu Merged-by: ascend-robot Description: 环境信息 操作系统:AlmaLinux 8.10 架构:aarch64 CANN 软件版本:8.5.0 安装的软件版本:torch 2.7.1+cpu、torch-npu 2.7.1.post2 一、4 个 API 功能如下: 1. torch.distributed.elastic.agent.server.health_check_server.HealthCheckServer elastic agent 健康检查服务的接口类。构造函数接收 alive_callback、port、timeout,并将三项配置保存到实例属性 _alive_callback、_port、_timeout,供后续 health check server 实现复用。当前社区实现是 noop health check server,不创建 socket、不启动后台线程、不访问设备资源。 2. torch.distributed.elastic.agent.server.health_check_server.HealthCheckServer.start 健康检查服务启动入口。当前社区实现保持 noop 行为,只通过 health_check_server logger 输出 WARNING 日志 No health check server started。该接口用于保持 elastic agent 健康检查启动链路的统一调用形态。 3. torch.distributed.elastic.agent.server.health_check_server.HealthCheckServer.stop 健康检查服务停止入口。当前社区实现保持 noop 行为,只通过 health_check_server logger 输出 INFO 日志 Stopping noop health check server.。该接口不维护额外运行状态,也不释放外部资源。 4. torch.distributed.elastic.agent.server.health_check_server.create_healthcheck_server 模块级 factory 函数。函数接收 alive_callback、port、timeout,返回 HealthCheckServer(alive_callback, port, timeout)。该函数的核心语义是返回类型固定、三项参数原样透传、创建阶段不执行 alive_callback。 二、社区用例对这 4 个 API 的验证完整性分析 搜索了官方 test 目录,搜了 HealthCheckServer、health_check_server、create_healthcheck_server,没有搜到,说明 4 个 API 没有直接测试用例。 1. torch.distributed.elastic.agent.server.health_check_server.HealthCheckServer 官方 test 目录未发现直接构造 HealthCheckServer 并校验 _alive_callback、_port、_timeout 的用例,也未发现构造阶段不触发 callback 的断言。构造参数保存和无副作用构造语义缺少直接覆盖。 2. torch.distributed.elastic.agent.server.health_check_server.HealthCheckServer.start 官方 test 目录未发现调用 start() 并校验 logger 名称、日志级别、日志内容的用例。当前 noop start 的外部可观察行为缺少直接覆盖。 3. torch.distributed.elastic.agent.server.health_check_server.HealthCheckServer.stop 官方 test 目录未发现调用 stop() 并校验 logger 名称、日志级别、日志内容的用例,也未发现 stop() 重复调用稳定性的验证。当前 noop stop 的外部可观察行为和幂等调用语义缺少直接覆盖。 4. torch.distributed.elastic.agent.server.health_check_server.create_healthcheck_server 官方 test 目录未发现调用 create_healthcheck_server() 并校验返回类型、alive_callback/port/timeout 参数透传、创建阶段不触发 callback 的用例。factory 函数的类型约束、参数传递和无副作用创建语义缺少直接覆盖。 三、NPU 适配 3.1 API 适配 这 4 个 API 属于 torch.distributed.elastic.agent.server.health_check_server 控制面逻辑。 这些 API 不执行 Tensor 计算,不涉及 NPU kernel、算子适配、计算图构建、精度对比、CANN runtime 或 HCCL 通信。 3.2 测试用例适配 本 PR 在 torch-npu test 目录新增自定义测试文件: - test/distributed/elastic/agent/server/test_healthcheckserver_api.py 测试文件覆盖以下用例: 1. test_init:直接构造 HealthCheckServer(alive_callback, 0, 30),校验 _alive_callback、_port、_timeout 与入参一致,并校验构造阶段没有调用 alive_callback。 2. test_create_healthcheck_server:调用 create_healthcheck_server(alive_callback, 0, 45),校验返回对象是 HealthCheckServer,校验 alive_callback、port、timeout 原样传入实例,并校验 factory 阶段没有调用 alive_callback。 3. test_start_logs_warning:调用 start(),使用 assertLogs 捕获 torch.distributed.elastic.agent.server.health_check_server logger 的 WARNING 记录,校验只产生 1 条日志,且 message 精确等于 No health check server started。 4. test_stop_logs_info:调用 stop(),使用 assertLogs 捕获 torch.distributed.elastic.agent.server.health_check_server logger 的 INFO 记录,校验只产生 1 条日志,且 message 精确等于 Stopping noop health check server.。 5. test_start_stop_lifecycle_safe:按 start() -> stop() 顺序执行完整生命周期调用,校验 noop 实现不抛异常,覆盖常规调用链。 6. test_stop_idempotent:执行 start() 后连续调用 stop() 三次,校验重复 stop() 不抛异常,覆盖停止接口的幂等调用场景。 3.3 文档修改 本测试 PR 不修改 docs 文件。docs 支持项由独立 docs PR 补齐。 四、运行日志 python test/distributed/elastic/agent/server/test_healthcheckserver_api.py ...W0428 12:03:19.530000 11291 torch_npu_2.7.1/lib/python3.11/site-packages/torch/distributed/elastic/agent/server/health_check_server.py:48] No health check server started .W0428 12:03:19.531000 11291 torch_npu_2.7.1/lib/python3.11/site-packages/torch/distributed/elastic/agent/server/health_check_server.py:48] No health check server started .. ---------------------------------------------------------------------- Ran 6 tests in 1.376s OK See merge request: Ascend/pytorch!34493 | 3 个月前 | |
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 个月前 | |
test: add put_metric coverage Co-authored-by: lgxxx<22515063@zju.edu.cn> # message auto-generated for no-merge-commit merge: !42800 merge test-put-metric-v2.7.1 into v2.7.1 test: add put_metric coverage Created-by: lgxxx Commit-by: lgxxx Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 https://gitcode.com/Ascend/pytorch/issues/3216 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 ## API 与交付结论 - API: torch.distributed.elastic.metrics.put_metric。 - 分类:1.3。PyTorch 官方没有直接验证 put_metric 处理结果的测试。 - 交付方式:扩展 torch-npu 现有 test/distributed/elastic/metrics/test_metrics_api.py。 - API 实现:不修改。 - test_upstream patch:不涉及。 - NPU 适配:不需要设备装饰器或 NPU Tensor。put_metric 是纯 Python、非计算类指标接口。 - 资料 PR:不涉及。2.7.1、2.9.0、2.10.0、2.11.0、2.12.0 条目均已存在且支持状态为“是,暂不支持 Ascend 950DT”。 ## 分支 | 目标分支 | Fork 源分支 | | --- | --- | | v2.7.1 | test-put-metric-v2.7.1 | | v2.11.0 | test-put-metric-v2.11.0 | | v2.12.0 | test-put-metric-v2.12.0 | | master | test-put-metric-master | 任务书 Issue:Ascend/pytorch#3216。四个目标分支的 PR 均关联该 Issue。 ## 官方用例调查 PyTorch 官方存在 test/distributed/elastic/metrics/api_test.py,但现有用例只覆盖 MetricHandler、MetricStream、prof 等行为,没有直接调用并验证 put_metric 的处理器结果。 另有 test/distributed/elastic/agent/server/test/api.py 通过 mock 间接验证 put_metric 被调用,但不验证 put_metric 的默认 metric_group、自定义 metric_group、metric_name、metric_value 或实际 MetricData。 因此需要在 torch-npu 现有 metrics 测试文件中新增直接行为用例,属于场景 1.3。 ## 修改内容 新增 test_put_metric,覆盖: 1. 不传 metric_group 时使用默认 torchelastic 组。 2. 传入 custom_group 时使用自定义处理器。 3. 非空 metric_name、空 metric_name。 4. 正值、0 和负值 metric_value。 5. handler 实际收到 MetricData,验证 group_name、name、value 和 timestamp。 6. 依赖现有 setUp/addCleanup 恢复全局默认 handler 和 metrics map。 修改文件: test/distributed/elastic/metrics/test_metrics_api.py # 【资料变更】 已检查 master 分支下以下资料条目: docs/zh/api/native_api/pytorch_2-7-1/torch-distributed-elastic.md docs/zh/api/native_api/pytorch_2-9-0/torch-distributed-elastic.md docs/zh/api/native_api/pytorch_2-10-0/torch-distributed-elastic.md docs/zh/api/native_api/pytorch_2-11-0/torch-distributed-elastic.md docs/zh/api/native_api/pytorch_2-12-0/torch-distributed-elastic.md 五个版本均已有 torch.distributed.elastic.metrics.put_metric 条目,支持状态一致为“是,暂不支持 Ascend 950DT”,因此不创建无意义资料 PR。该 API 为非计算类接口,资料中不涉及数据类型支持。 # 【接口变更】 不涉及。本次不修改 PyTorch API 实现、函数签名、返回类型或跨仓接口,只新增直接测试覆盖。 # 【功能验证】 ## 本地验证环境 - 主机平台:Linux-5.10.0-216.0.0.115.oe2203sp4.aarch64-aarch64-with-glibc2.35 - Python:3.11.15 - CANN:9.1.0.beta1 - NPU:Ascend910_9382 - 可见设备数:1(物理 NPU 0) - v2.7.1:torch 2.7.1+cpu,torch-npu 2.7.1.post4 - v2.11.0:torch 2.11.0+cu130,torch-npu 2.11.0rc1 - v2.12.0:torch 2.12.0+cu130,torch-npu 2.12.0.rc1 - master:测试源码来自 master,本地复用 v2.12.0 运行环境进行兼容性预验证;目标分支验证以 PR CI 结果为准。 - 设备说明:API 为纯 Python,测试不创建 Tensor,不需要强制迁移到 NPU;运行器仍在 NPU 环境中完成导入和环境探测。 ## 执行命令 bash /workspace/user_data/tasks/scripts/run_api_python_version.sh 2.7.1 /workspace/user_data/tasks/sources/torch-npu-v2.7.1/test/distributed/elastic/metrics/test_metrics_api.py -v /workspace/user_data/tasks/scripts/run_api_python_version.sh 2.11.0 /workspace/user_data/tasks/sources/torch-npu-v2.11.0/test/distributed/elastic/metrics/test_metrics_api.py -v /workspace/user_data/tasks/scripts/run_api_python_version.sh 2.12.0 /workspace/user_data/tasks/sources/torch-npu-v2.12.0/test/distributed/elastic/metrics/test_metrics_api.py -v /workspace/user_data/tasks/scripts/run_api_python_version.sh master /workspace/user_data/tasks/sources/torch-npu-master/test/distributed/elastic/metrics/test_metrics_api.py -v ## 本地验证结果 | 目标分支 | 测试结果 | | --- | --- | | v2.7.1 | Ran 7 tests in 0.054s,OK,退出码 0 | | v2.11.0 | Ran 7 tests in 0.052s,OK,退出码 0 | | v2.12.0 | Ran 7 tests in 0.051s,OK,退出码 0 | | master | master 测试源码在 v2.12.0 环境中兼容性预验证通过,Ran 7 tests in 0.074s,OK;目标分支 CI 通过 | v2.12.0 及 master 源码兼容性预验证中有 CuTeDSL 可选依赖缺失提示;该提示与纯 Python metrics 测试无关,未影响测试结果或退出码。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR 标题正确使用 test: 类型标签 - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 <!-- api-validation-evidence:start --> ## NPU 功能验证补充 以下为当前 PR head commit 对应的单卡 NPU 实测环境、命令和结果: text TASK 105 / PR #42800 / VALIDATION EVIDENCE API=torch.distributed.elastic.metrics.put_metric TARGET_BRANCH=v2.7.1 PLATFORM=Linux-5.10.0-216.0.0.115.oe2203sp4.aarch64-aarch64-with-glibc2.35 PYTHON=3.11.15 TORCH=2.7.1+cpu TORCH_NPU=2.7.1.post4 CANN=9.1.0.beta1 NPU=Ascend910_9382 VISIBLE_NPU=1 (PHYSICAL NPU 0) COMMAND=scripts/run_api_python_version.sh 2.7.1 sources/torch-npu-v2.7.1/test/distributed/elastic/metrics/test_metrics_api.py -v RESULT: Ran 7 tests in 0.054s OK test_exit_code=0 NOTE=pure Python API; no NPU tensor required > 说明:put_metric 是纯 Python、非计算类接口,测试不创建 Tensor;运行环境已完成 torch-npu 导入和 NPU 可用性探测。 <!-- api-validation-evidence:end --> <!-- PR描述模板更新日期:20260203 --> See merge request: Ascend/pytorch!42800 | 7 天前 | |
test(distributed): add test for EtcdStore APIs for v 2.7.1 Co-authored-by: zf_zhang<sjzz0306@outlook.com> # message auto-generated for no-merge-commit merge: !34911 merge test-elastic-etcdstore-pytorch-v271 into v2.7.1 test(distributed): add test for EtcdStore APIs for v 2.7.1 Created-by: zf_zhang Commit-by: zf_zhang Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/1676?ref=&did=3850294#tid-3850294**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 用例设计原则 本次验证结合官方用例复用与自定义用例补充的方式,遵循 “最小化、核心化、针对性” 原则,核心思路为: * 补充缺失用例:针对torch.distributed.elastic.rendezvous.etcd_store.EtcdStore;torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.set;torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.get;torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.add;torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.wait;torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.check等六个缺失用例,以及torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.set_timeout和集成场景设置,我们设计了精简且详细的测试用例,覆盖了EtcdStore类的所有核心功能 * 聚焦核心功能:我们验证了这些 API 的基础操作以及功能,确保结果反映 API 本身适配状态; * 轻量化设计:单个测试方法仅验证一个核心功能点,逻辑清晰、执行高效,便于问题定位。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 * torch.distributed.elastic.rendezvous.etcd_store.EtcdStore: 我们围绕EtcdStore的连接可靠性、前缀规范化及超时机制,设计了基于真实 etcd 环境的初始化与行为一致性测试用例。 * torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.set 和 torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.get: 我们围绕EtcdStore对不同数据类型的兼容性、覆写语义、异常处理、特殊字符支持及阻塞/超时行为,设计了全面验证 set/get 正确性与并发语义的测试用例。 * torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.add: 我们围绕EtcdStore.add的初始化与累加语义、相减与幂等性、以及高并发场景下的原子性与一致性,设计了覆盖功能正确性与并发安全性的 add 测试用例。 * torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.wait: 我们针对 EtcdStore.wait,设计了多线程延迟写入验证正常阻塞返回、全局与覆盖超时触发异常、以及部分 key 存在时超时失败的测试用例。 * torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.check: 我们针对 EtcdStore.check,设计了覆盖key的全部存在、部分存在、全部不存在、空列表边界及单个key 场景的非阻塞检查行为测试用例。 * torch.distributed.elastic.rendezvous.etcd_store.EtcdStore.check: 我们针对 EtcdStore.set_timeout,设计了验证默认超时生效、零超时立即返回以及对 get 和 wait 行为产生影响的测试用例。 此外,我们还针对 EtcdStore 集成场景,设计了多节点并发 rendezvous 协调流程与高并发混合操作压力测试,验证其同步一致性与稳定性。 * 用例合理性说明:自定义用例虽简洁,但具备充分有效性与合理性。 * 自定义用例精准补全:EtcdStore自定义用例聚焦无官方用例覆盖的所有核心功能,贴合实际业务使用方式,验证结果具备业务参考价值; * 适配操作最小化:只对EtcdStore类的核心功能进行验证。 * 符合官方规范:自定义用例基于 PyTorch 官方测试框架开发,使用原生断言方法,与官方用例测试标准保持一致;  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!34911 | 2 个月前 |