已关闭
docs: fix description for api torch.hub._get_torch_home #34365
xiemingda1002创建于 4月25日关闭于 7月28日
docs: fix description for api torch.hub._get_torch_home #34365
已关闭
xiemingda1002创建于 4月25日关闭于 7月28日
已删除 :add-torch-hub-doc-v2.7.1合入到Ascend/pytorchv2.7.1
xiemingda1002
xiemingda1002
4月25日

【合入来源】

https://gitcode.com/Ascend/pytorch/issues/1703\

【修改方案】

一、API 功能说明

torch.hub.help 和 torch.hub._get_torch_home 是 PyTorch hub 模块中用于文档查询和路径管理的辅助 API,功能说明如下:

  1. torch.hub.help(github, model, force_reload=False, skip_validation=False, trust_repo=None)

    • 文档获取核心能力:接收 GitHub 仓库地址和入口点名称,返回该入口点的文档字符串(docstring),无需实际加载模型或执行代码。
    • 远程仓库解析核心能力:支持 "owner/repo[:branch]" 格式的仓库地址,自动解析并获取 hubconf.py 中定义的入口点函数的文档。
    • 安全机制支持:通过 skip_validation 参数可跳过 GitHub API 验证(避免 rate limit),trust_repo 参数控制仓库信任策略(False/True/check/None)。
    • 无状态调用:多次调用 help 不会产生副作用,不修改缓存状态,不影响后续 load 等操作,不下载仓库代码。
    • 返回值灵活性:返回字符串类型文档或 None(若入口点函数未定义 docstring),支持用户预览模型使用说明。
    • 典型用途:在加载模型前查看入口点的参数说明、使用示例、依赖信息等。
  2. torch.hub._get_torch_home()

    • 路径解析核心能力:根据环境变量 TORCH_HOME 或默认路径 ~/.cache/torch 确定 torch home 目录。
    • 环境变量优先级机制:优先读取 TORCH_HOME 环境变量,若未设置则依次检查 XDG_CACHE_HOME/torch、~/.cache/torch。
    • 内部 API 特性:作为 get_dir() 的底层实现,不直接暴露给用户,但可通过 hub 模块访问(用于测试或调试)。
    • 路径标准化处理:返回的路径经过 os.path.expanduser 处理,支持 ~ 符号展开,确保路径可用性。
    • 返回值:字符串类型路径,非空且为绝对路径。

上述 API 均为纯 Python 层实现,不涉及张量计算,仅负责文档查询和路径解析。

二、测试文件 test/test_hub_api.py 完整验证该 API 的原因

本测试文件针对 PyTorch 社区原生 test/test_hub.py 覆盖不足的 torch.hub.help / _get_torch_home API 进行补充验证,确保昇腾 NPU 环境下功能完整可用:

  1. torch.hub.help API 验证

    • test_help_function_callable:验证 help 函数存在于 hub 模块且可调用(hasattr + callable 检查),确保 API 基础可用性。
    • test_help_returns_none_without_docstring:严格验证 help 函数在入口点无 docstring 时返回 None。使用 mock 本地仓库进行测试,无需外部网络依赖。
    • test_help_returns_docstring_with_content:严格验证 help 函数在入口点有 docstring 时返回有效的字符串内容。使用 mock 本地仓库进行测试,检查返回值类型为 str、非空、且包含预期关键字 "EfficientNet"。
  2. torch.hub._get_torch_home API 验证

    • test_get_torch_home_returns_path:验证 _get_torch_home 返回有效的路径字符串(assertIsInstance(str) + assertGreater(len, 0)),确保路径非空且类型正确。
    • test_get_torch_home_with_env_variable:验证 TORCH_HOME 环境变量能正确影响返回路径,使用 tempfile.TemporaryDirectory 创建临时目录作为测试路径,覆盖自定义路径场景。测试后恢复原始环境变量状态(os.environ.pop 或 restore),避免污染其他测试。
  3. 测试隔离性保障

    • setUp 机制:TestHubHelp 类在 setUp 中创建 mock 本地仓库目录,写入 hubconf.py 文件,包含有/无 docstring 的两个入口点函数。
    • tearDown 机制:每个测试后清理临时目录,确保测试用例间无状态污染。
    • 独立性设计:两个测试类(TestHubHelp、TestHubGetTorchHome)独立,无共享状态。
    • 零外部依赖:使用 unittest.mock.patch 模拟 _get_cache_or_reload,避免对 GitHub 外部仓库的依赖,测试更快、更可靠,适合 CI 环境。

测试完整性
所有用例覆盖 API 的基础功能验证、接口存在性检查、环境变量交互、测试隔离性保障,完整覆盖昇腾 NPU 适配所需的最小功能集合。

三、昇腾 NPU 适配说明(解释为什么无需 NPU 适配)

torch.hub.help 和 torch.hub._get_torch_home 均具备硬件无关性、纯 Python 层实现、无底层算子依赖三大核心特征,决定了其无需针对昇腾 NPU 做适配,具体分析:

  1. 纯 Python 层抽象,无硬件相关逻辑

    • help API 硬件无关性:仅负责解析远程仓库的 hubconf.py 并提取文档字符串,是「文档查询」的纯 Python 抽象接口,不涉及任何硬件相关的计算、存储、通信逻辑。
    • _get_torch_home API 硬件无关性:仅负责读取环境变量和构建路径字符串,依赖 os.path 模块进行路径处理,无任何硬件相关的逻辑或依赖。
    • 设备无关设计:两个 API 的核心逻辑与 CPU/GPU/NPU 等硬件架构完全解耦,在任意硬件环境下行为一致。
  2. 无底层算子 / 内核依赖

    • 标准库依赖:两个 API 内部仅调用 Python 标准库(os 路径模块、tempfile 临时文件模块、urllib 网络模块)和 PyTorch 纯 Python 层的 hub 模块。
    • 无硬件扩展依赖:未依赖 CUDA/NPU 等硬件相关的扩展库、内核函数或底层驱动。
    • help 的远程解析机制:基于 GitHub URL 和 Python import 机制,与硬件架构无关。
    • _get_torch_home 的路径处理机制:基于 os.path.expanduser 和 os.getenv,纯文件系统操作。
  3. 核心逻辑与硬件解耦

    • 文档获取解耦:help API 返回的文档字符串是纯文本信息,与硬件架构无关 —— 无论是 CPU/GPU/NPU 环境,文档查询逻辑完全一致。
    • 路径解析解耦:_get_torch_home 返回的路径是通用文件系统路径,不包含任何硬件相关字段(如设备 ID、内存地址),昇腾 NPU 环境下可直接复用。
    • 无张量操作:两个 API 均不涉及张量的创建、计算或迁移,测试用例中无 tensor 相关代码,无需 NPU 设备支持。

结论
torch.hub.help 和 torch.hub._get_torch_home 均是「硬件无关的纯 Python 层抽象」,核心逻辑不耦合任何特定硬件。测试用例无需导入 torch_npu,API 本身无需适配修改,可直接复用。

【资料变更】

刷新v2.7.1分支下多个版本资料。
torch.hub._get_torch_home API该API昇腾支持,但是在文档中并无描述,我已通过如下用PR例验证该api的支持没有问题,需要在文档中进行刷新。
master: https://gitcode.com/Ascend/pytorch/pull/34071
v2.11.0: https://gitcode.com/Ascend/pytorch/pull/34082
v2.10.0: https://gitcode.com/Ascend/pytorch/pull/34080
v2.9.0: https://gitcode.com/Ascend/pytorch/pull/34076
v2.8.0: https://gitcode.com/Ascend/pytorch/pull/34073
v2.7.1: https://gitcode.com/Ascend/pytorch/pull/34072

【接口变更】

不涉及

【功能验证】

测试文件路径:test/test_hub_api.py

本地验证结果:

image.png

所有测试用例执行通过。torch.hub.help 和 torch.hub._get_torch_home API 核心功能验证正常。

两个 API 均为纯 Python 层实现,不涉及张量操作,无需 NPU 设备适配。测试用例无需导入 torch_npu,API 本身可在任意硬件环境稳定运行。验证结果表明,torch.hub.help 和 torch.hub._get_torch_home 在昇腾 NPU 环境下功能正常可用,无需修改源码。

【CheckList】

likedislike
当前Pull Request已关闭, 关闭人@xiemingda1002
xiemingda1002xiemingda1002
4月25日 创建了 pull request,commit 0268c6ab
xiemingda1002xiemingda1002
4月25日 关联了issue:[Usage]: test目录下 torch.hub.help 和 torch.hub._get_torch_home API测试用例缺失
ascend-robot
ascend-robot成员
4月25日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)

Module Approval Details

module lgtm status approve status
docs ❌ (0/2)(You can also ask: renyujin, anyrenwei, zqwenn, wasd1111222, 褚博宁) ❌ (0/1)(You can also ask: wangqiang160, medivh-x, guoqi1024, zichun_ye, 陈豪)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

xiemingda1002, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robotascend-robot成员
4月25日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
4月25日 评论:

当前仓库存在以下 保护分支

Protected Branch Version Release
master
v2.10.0
v2.11.0
v2.7.1
v2.9.0
v2.8.0

评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作

注意:

  1. /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
  2. 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭
likedislike
xiemingda1002xiemingda1002
4月25日 修改了pull request 的描述
此处折叠了25条事件消息 查看更多
AtlasAccountAtlasAccount成员
4月25日 添加了label:ci-pipeline-failed
xiemingda1002
xiemingda1002
4月25日 评论:

compile

likedislike
ascend-robotascend-robot成员
4月25日 删除了label:ci-pipeline-failed
ascend-robotascend-robot成员
4月25日 添加了label:ci-pipeline-running
ascend-robotascend-robot成员
4月25日 删除了label:ci-pipeline-running
ascend-robot
ascend-robot成员
4月25日 评论:
流水线 PR-pipeline_pytorch#17214 已终止运行
阶段 任务名 状态 详情
编译构建 Build_X86 🟨 >>>
Build_ARM 🟨 >>>
Build_LibTorch_x86 🟨 >>>
Build_LibTorch_ARM 🟨 >>>
Build_X86_torchair 🛑 >>>
Build_ARM_torchair 🛑 >>>
patch_test 🛑 >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 CodeCheck >>>
check_error >>>
CodeCheck_lintrunner >>>
开源片段检查 SCA >>>
开发者测试 UT_X86_Part_01 🕚 >>>
UT_X86_Part_02 🕚 >>>
UT_ARM_A3_Part_01 🕚 >>>
UT_ARM_A3_Part_02 🕚 >>>
UT_DIST_X86_Part_01 🕚 >>>
UT_DIST_X86_Part_02 🕚 >>>
UT_DIST_X86_Part_03 🕚 >>>
UT_DIST_X86_Part_04 🕚 >>>
UT_inductor_Part_01 🕚 >>>
UT_inductor_Part_02 🕚 >>>
UT_inductor_Part_03 🕚 >>>
UT_inductor_Part_04 🕚 >>>
UT_ARM_A2_Part_01 🕚 >>>
UT_ARM_A2_Part_02 🕚 >>>
UT_ARM_A2_Part_03 🕚 >>>
流水线 PR-pipeline_pytorch 🟨 >>>
likedislike
ascend-robotascend-robot成员
4月25日 添加了label:ci-pipeline-running
ascend-robotascend-robot成员
4月25日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
4月25日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
4月25日 评论:
流水线 PR-pipeline_pytorch#17215 已完成
阶段 任务名 状态 详情
编译构建 Build_X86 >>>
Build_ARM >>>
Build_LibTorch_x86 >>>
Build_LibTorch_ARM >>>
Build_X86_torchair 🛑 >>>
Build_ARM_torchair 🛑 >>>
patch_test 🛑 >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 CodeCheck >>>
check_error >>>
CodeCheck_lintrunner >>>
开源片段检查 SCA >>>
开发者测试 UT_X86_Part_01 >>>
UT_X86_Part_02 >>>
UT_ARM_A3_Part_01 >>>
UT_ARM_A3_Part_02 >>>
UT_DIST_X86_Part_01 🛑 >>>
UT_DIST_X86_Part_02 🛑 >>>
UT_DIST_X86_Part_03 🛑 >>>
UT_DIST_X86_Part_04 🛑 >>>
UT_inductor_Part_01 🛑 >>>
UT_inductor_Part_02 🛑 >>>
UT_inductor_Part_03 🛑 >>>
UT_inductor_Part_04 🛑 >>>
UT_ARM_A2_Part_01 >>>
UT_ARM_A2_Part_02 >>>
UT_ARM_A2_Part_03 >>>
流水线 PR-pipeline_pytorch >>>
likedislike
xiemingda1002xiemingda1002
4月25日 修改了pull request 的描述
xiemingda1002xiemingda1002
4月27日 修改了pull request 的描述
xiemingda1002xiemingda1002
4月27日 修改了pull request 的描述
xiemingda1002xiemingda1002
5月9日 修改了pull request 的描述
xiemingda1002xiemingda1002
5月9日 修改了pull request 的描述
xiemingda1002xiemingda1002
7月28日 关闭了 pull request