已合并
Add devcontainer build environment #5510
Add devcontainer build environment #5510
已合并
mhy创建于 7月20日
mhy成员
7月20日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

迁移 PyTorch 仓库中的 devcontainer 和 Dockerfile 配置到 op-plugin,用于支持开发环境自动创建。配置包含 Python/Torch/CANN 版本参数、CANN toolkit/ops 安装、Ascend driver 与 NPU 相关路径挂载等。

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图

已在 Ascend 910B3 服务器验证通过:
devcontainer build --workspace-folder . --image-name m_op_image 构建成功;
生成镜像 m_op_image:latest;
devcontainer up --workspace-folder . 启动成功;
容器内 npu-smi info 可正常显示 910B3 NPU 信息。

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 mhy 的贡献)
Mmhy成员
7月20日 创建了 pull request,commit ae179108
atomgit-bot
atomgit-bot
7月20日 评论:

变更摘要

此 PR 将 PyTorch 仓库中的 devcontainer 与 Dockerfile 配置迁移到 op-plugin 项目,旨在支持开发环境的自动创建。新增的配置涵盖 Python/Torch/CANN 版本参数化、CANN toolkit/ops 安装、Ascend driver 与 NPU 相关路径挂载等能力,使开发者可通过 VS Code devcontainer 或独立脚本一键构建并启动包含完整 CANN 运行时的容器化开发环境。

主要改动

  • 新增 .devcontainer/devcontainer.json:提供 VS Code devcontainer 配置,指定基于 docker/devel/Dockerfiledev 阶段构建,并通过 mounts 挂载 /dev、Ascend driver、npu-smi 等 NPU 运行时依赖,同时设置 LD_LIBRARY_PATH 环境变量。
  • 新增 docker/devel/Dockerfile(多阶段构建):定义 basebuilderdev 三个阶段,base 阶段基于 manylinux_2_28 配置 Python 版本和 pip 镜像源;builder 阶段安装编译工具链(gcc-toolset-13、cmake、ninja 等)并按 Python/Torch 版本安装对应的 NumPy 和 PyTorch;dev 阶段从华为云 OBS 下载并静默安装 CANN toolkit 与指定产品的 ops 包,并写入 CANN 环境初始化脚本。
  • 新增 docker/devel/builder.sh:提供命令行驱动的镜像构建与容器启动脚本,支持 --python--torch-version--cann--cann-product--nnal 等参数;在 --cann 模式下以特权模式启动容器并挂载 NPU 驱动路径,非 CANN 模式下仅挂载源码目录用于纯编译场景。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月20日 评论:

代码审查

审查完成 — 结语

审查覆盖的 4 个文件

文件 审查结果
.devcontainer/devcontainer.json 发现 1 个 P3 问题(缺少 .dockerignore)
docker/devel/Dockerfile 发现 2 个 P2 + 1 个 P3 问题
docker/devel/README.md 发现 1 个 P3 问题(LD_LIBRARY_PATH 覆盖)
docker/devel/builder.sh 发现 2 个 P2 + 1 个 P3 问题

按优先级汇总

  • P2 (4 个)

    1. builder.sh usage 函数始终 exit 0,错误分支返回码不正确
    2. Dockerfile 基础镜像未固定 digest,构建不可重现
    3. Dockerfile CANN 安装包未做哈希校验,供应链投毒风险
    4. builder.sh 启动 dev 容器时覆盖 LD_LIBRARY_PATH,丢失 gcc-toolset 路径
  • P3 (4 个)

    1. Dockerfile pip install 未使用 --no-cache-dir
    2. 缺少 .dockerignore,build context 包含整个仓库
    3. builder.sh BUILD_ARGS 未加引号展开
    4. README.md 手动启动命令中 LD_LIBRARY_PATH 覆盖行为与 devcontainer.json 不一致

整体风险评估

中等风险。最值得关注的问题是 usage() 的退出码 bug 和 LD_LIBRARY_PATH 覆盖导致 gcc-toolset 路径丢失——这两个问题会在实际使用中触发(错误输入时脚本行为异常、dev 容器内编译失败)。CANN 安装包未校验和基础镜像未固定属于供应链安全/可重现性方面的重要改进项。配置整体结构合理,devcontainer 与 Dockerfile/脚本的协作设计良好,没有发现会导致服务宕机、数据损坏或安全漏洞的严重缺陷。

类型 数量
🔴 阻塞 0
🟡 建议 4

💬 仅评论

likedislike
不准确?
ascend-robotascend-robot成员
7月20日 添加了label:ascend-cla/yes
此处折叠了77条消息 查看更多
梁松伟
梁松伟成员
7月30日 评论:

/approve

likedislike
ascend-robotascend-robot成员
7月30日 添加了label:approvedlgtm
ascend-robotascend-robot成员
7月30日 关闭了关联的issue
ascend-robotascend-robot成员
7月30日 合入了pull request
ascend-robot
ascend-robot成员
7月30日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike