已合并
[feat]devcontainer #40298
SCh_zx创建于 7月7日
[feat]devcontainer #40298
已合并
SCh_zx创建于 7月7日
5 个文件变更+46-143
A.devcontainer/devcontainer.json+28-0
@@ -0,0 +1,28 @@
1+{
2+ "name": "TorchNPU Dev (CANN)",
3+ "build": {
4+ "dockerfile": "../docker/devel/Dockerfile",
5+ "context": "..",
6+ "target": "dev",
7+ "args": {
8+ "PY_VERSION": "3.10",
9+ "TORCH_VERSION": "2.9.0",
10+ "CANN_VERSION": "9.1.0_beta.1",
11+ "CANN_PRODUCT": "910b"
12+ }
13+ },
14+ "workspaceMount": "source=${localWorkspaceFolder},target=/home/pytorch,type=bind,consistency=consistent",
15+ "workspaceFolder": "/home/pytorch",
16+ "remoteUser": "root",
17+ "privileged": true,
18+ "mounts": [
19+ "source=/dev,target=/dev,type=bind,consistency=consistent",
20+ "source=/usr/local/Ascend/driver,target=/usr/local/Ascend/driver,type=bind,consistency=consistent",
21+ "source=/usr/local/Ascend/add-ons,target=/usr/local/Ascend/add-ons,type=bind,consistency=consistent",
22+ "source=/usr/local/sbin/npu-smi,target=/usr/local/bin/npu-smi,type=bind,consistency=consistent",
23+ "source=/var/log/npu,target=/usr/slog,type=bind,consistency=consistent"
24+ ],
25+ "remoteEnv": {
26+ "LD_LIBRARY_PATH": "${containerEnv:LD_LIBRARY_PATH}:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/base:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver"
27+ }
28+}
Ddocker/builder/ARM/Dockerfile+0-119
@@ -1,119 +0,0 @@
1-FROM quay.io/pypa/manylinux_2_28_aarch64 AS base
2- 
3-ENV LC_ALL=en_US.UTF-8 \
4- LANG=en_US.UTF-8 \
5- LANGUAGE=en_US.UTF-8
6- 
7-ENV PATH=/usr/local/bin:$PATH
8- 
9-RUN echo "alias ll='ls -l --color=auto'" >> /root/.bashrc
10- 
11-ARG PY_VERSION=3.10
12- 
13-RUN cd /usr/local/bin \
14- && PY_TAG="cp$(echo ${PY_VERSION} | tr -d .)" \
15- && if [ ! -d "/opt/python/${PY_TAG}-${PY_TAG}" ]; then echo "Unsupported Python version: ${PY_VERSION}" && exit 1; fi \
16- && ln -sf /opt/python/${PY_TAG}-${PY_TAG}/bin/pip${PY_VERSION} pip${PY_VERSION} \
17- && ln -sf /opt/python/${PY_TAG}-${PY_TAG}/bin/pip${PY_VERSION} pip3 \
18- && ln -sf /opt/python/${PY_TAG}-${PY_TAG}/bin/pip${PY_VERSION} pip \
19- && ln -sf /opt/python/${PY_TAG}-${PY_TAG}/bin/python${PY_VERSION} python${PY_VERSION} \
20- && ln -sf /opt/python/${PY_TAG}-${PY_TAG}/bin/python${PY_VERSION} python3 \
21- && ln -sf /opt/python/${PY_TAG}-${PY_TAG}/bin/python${PY_VERSION} python
22- 
23-RUN mkdir /root/.pip \
24- && echo "[global]" > /root/.pip/pip.conf \
25- && echo "index-url=https://mirrors.huaweicloud.com/repository/pypi/simple" >> /root/.pip/pip.conf \
26- && echo "trusted-host=repo.huaweicloud.com" >> /root/.pip/pip.conf \
27- && echo "timeout=120" >> /root/.pip/pip.conf
28- 
29-RUN yum install -y \
30- bzip2 \
31- curl \
32- file \
33- git \
34- sudo \
35- unzip \
36- util-linux \
37- wget \
38- which && \
39- yum clean all && \
40- rm -rf /var/cache/yum && \
41- rm -rf /tmp/*
42- 
43-RUN git config --global --add safe.directory "*"
44- 
45-FROM base AS builder
46- 
47-ARG PY_VERSION
48-ARG DEVTOOLSET_VERSION=13
49-ARG TORCH_VERSION=2.9.0
50- 
51-RUN yum install -y \
52- autoconf \
53- automake \
54- bison \
55- diffutils \
56- make \
57- mold \
58- ninja-build \
59- patch \
60- perl \
61- yum-utils \
62- zlib-devel \
63- gcc-toolset-${DEVTOOLSET_VERSION}-gcc \
64- gcc-toolset-${DEVTOOLSET_VERSION}-gcc-c++ \
65- gcc-toolset-${DEVTOOLSET_VERSION}-gcc-gfortran \
66- gcc-toolset-${DEVTOOLSET_VERSION}-gdb && \
67- yum clean all && \
68- rm -rf /var/cache/yum && \
69- rm -rf /tmp/*
70- 
71-ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH \
72- LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
73- 
74-RUN case "${PY_VERSION}" in \
75- 3.9|3.10) NUMPY_VER=1.22.4 ;; \
76- 3.11|3.12) NUMPY_VER=1.26.2 ;; \
77- 3.13) NUMPY_VER=2.1.2 ;; \
78- *) echo "Unsupported Python version: ${PY_VERSION}" && exit 1 ;; \
79- esac && \
80- pip${PY_VERSION} install pyyaml && \
81- pip${PY_VERSION} install setuptools wheel && \
82- pip${PY_VERSION} install torch==${TORCH_VERSION} --index-url https://download.pytorch.org/whl/cpu && \
83- pip${PY_VERSION} install numpy==${NUMPY_VER}
84- 
85-FROM builder AS dev
86- 
87-ARG CANN_VERSION=9.1.0_beta.1
88-ARG CANN_PRODUCT=910b
89-ARG INSTALL_NNAL=0
90-ARG CANN_RELEASE_TRAIN=CANN%209.1.T1
91- 
92-RUN CANN_FILE_VER=$(echo ${CANN_VERSION} | sed 's/_beta/-beta/') && \
93- ARCH_NAME=$(uname -m) && \
94- CANN_URL=https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/${CANN_RELEASE_TRAIN} && \
95- ln -sf /dev/stdout /dev/tty && \
96- wget ${CANN_URL}/Ascend-cann-toolkit_${CANN_FILE_VER}_linux-${ARCH_NAME}.run && \
97- bash Ascend-cann-toolkit_${CANN_FILE_VER}_linux-${ARCH_NAME}.run --install --install-path=/usr/local/Ascend --quiet && \
98- rm -f Ascend-cann-toolkit_${CANN_FILE_VER}_linux-${ARCH_NAME}.run && \
99- wget ${CANN_URL}/Ascend-cann-${CANN_PRODUCT}-ops_${CANN_FILE_VER}_linux-${ARCH_NAME}.run && \
100- bash Ascend-cann-${CANN_PRODUCT}-ops_${CANN_FILE_VER}_linux-${ARCH_NAME}.run --install --type=toolkit --install-path=/usr/local/Ascend --quiet && \
101- rm -f Ascend-cann-${CANN_PRODUCT}-ops_${CANN_FILE_VER}_linux-${ARCH_NAME}.run && \
102- if [ "$INSTALL_NNAL" = "1" ]; then \
103- CANN_NNAL_VER=$(echo ${CANN_VERSION} | sed 's/_beta\.[0-9][0-9]*//') && \
104- wget ${CANN_URL}/Ascend-cann-nnal_${CANN_NNAL_VER}_linux-${ARCH_NAME}.run && \
105- bash Ascend-cann-nnal_${CANN_NNAL_VER}_linux-${ARCH_NAME}.run --install --install-path=/usr/local/Ascend --quiet && \
106- rm -f Ascend-cann-nnal_${CANN_NNAL_VER}_linux-${ARCH_NAME}.run; \
107- fi && \
108- rm -f /dev/tty && \
109- echo "source /usr/local/Ascend/cann/set_env.sh" > /etc/profile.d/cann.sh && \
110- if [ "$INSTALL_NNAL" = "1" ]; then \
111- echo "source /usr/local/Ascend/nnal/atb/set_env.sh" >> /etc/profile.d/cann.sh; \
112- fi && \
113- chmod +x /etc/profile.d/cann.sh && \
114- echo "source /usr/local/Ascend/cann/set_env.sh" >> /root/.bashrc && \
115- echo "export ASCEND_GLOBAL_LOG_LEVEL=3" >> /root/.bashrc && \
116- echo "export ASCEND_SLOG_PRINT_TO_STDOUT=0" >> /root/.bashrc && \
117- echo "export LD_LIBRARY_PATH=/usr/local/Ascend/cann/lib64:/usr/local/Ascend/cann/opp/op_proto/built-in:\$LD_LIBRARY_PATH" >> /root/.bashrc
118- 
119-WORKDIR /home
Rdocker/builder/X86/Dockerfiledocker/devel/Dockerfile+6-3
@@ -1,4 +1,4 @@
1-FROM quay.io/pypa/manylinux_2_28_x86_64 AS base1+FROM quay.io/pypa/manylinux_2_28 AS base
2 2 
3ENV LC_ALL=en_US.UTF-8 \3ENV LC_ALL=en_US.UTF-8 \
4 LANG=en_US.UTF-8 \4 LANG=en_US.UTF-8 \
@@ -47,6 +47,7 @@ FROM base AS builder
47ARG PY_VERSION47ARG PY_VERSION
48ARG DEVTOOLSET_VERSION=1348ARG DEVTOOLSET_VERSION=13
49ARG TORCH_VERSION=2.9.049ARG TORCH_VERSION=2.9.0
50+ARG TARGETARCH
50 51 
51RUN yum install -y \52RUN yum install -y \
52 autoconf \53 autoconf \
@@ -71,8 +72,10 @@ RUN yum install -y \
71ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH \72ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH \
72 LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH73 LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
73 74 
74-RUN python3 -mpip install cmake==3.18.4.post1 && \75+RUN if [ "${TARGETARCH}" = "amd64" ]; then \
75- ln -sf /usr/local/bin/cmake /usr/bin/cmake376+ python3 -mpip install cmake==3.18.4.post1 && \
77+ ln -sf /usr/local/bin/cmake /usr/bin/cmake3; \
78+ fi
76 79 
77RUN case "${PY_VERSION}" in \80RUN case "${PY_VERSION}" in \
78 3.9|3.10) NUMPY_VER=1.22.4 ;; \81 3.9|3.10) NUMPY_VER=1.22.4 ;; \
Rdocker/builder/README.mddocker/devel/README.md+11-9
@@ -15,11 +15,17 @@ base manylinux + Python 软链接 + pip 源 + 基础系统包(curl/wget
15- **builder**(默认):用于编译 torch_npu wheel,不含 CANN15- **builder**(默认):用于编译 torch_npu wheel,不含 CANN
16- **dev**:基于 builder,叠加 CANN 运行环境;继承全部编译工具链,可在容器内直接重新编译16- **dev**:基于 builder,叠加 CANN 运行环境;继承全部编译工具链,可在容器内直接重新编译
17 17 
18+> Dockerfile会自动根据当前架构(ARM/X86)拉取对应镜像。
18> Driver 不包含在镜像中,用户需在宿主机自行安装。镜像仅提供 CANN 编译环境,运行时需宿主机已安装匹配的 NPU 驱动。19> Driver 不包含在镜像中,用户需在宿主机自行安装。镜像仅提供 CANN 编译环境,运行时需宿主机已安装匹配的 NPU 驱动。
19> 镜像中预装的 PyTorch CPU 版本默认为 v2.9.0 分支对应的版本(`torch==2.9.0`)。可通过构建参数 `TORCH_VERSION` 指定其他版本(如 `2.7.1`),详见 [构建参数参考](#构建参数参考)。。20> 镜像中预装的 PyTorch CPU 版本默认为 v2.9.0 分支对应的版本(`torch==2.9.0`)。可通过构建参数 `TORCH_VERSION` 指定其他版本(如 `2.7.1`),详见 [构建参数参考](#构建参数参考)。。
20 21 
21## 2 镜像构建22## 2 镜像构建
22 23 
24+```Shell
25+cd pytorch/docker/devel
26+export DOCKER_BUILDKIT=1
27+```
28+ 
23### 2.1 docker build 构建29### 2.1 docker build 构建
24 30 
25#### 构建参数参考31#### 构建参数参考
@@ -36,10 +42,6 @@ base manylinux + Python 软链接 + pip 源 + 基础系统包(curl/wget
36 42 
37#### 使用示例43#### 使用示例
38 44 
39-```Shell
40-cd pytorch/docker/builder/X86 # 或 ARM
41-```
42- 
43##### 场景一:构建 builder 镜像45##### 场景一:构建 builder 镜像
44 46 
45```Shell47```Shell
@@ -77,7 +79,7 @@ docker build -t manylinux-builder:v1 \
77 79 
78### 2.2 脚本构建80### 2.2 脚本构建
79 81 
80-> `builder.sh` 为 **Linux 构建脚本**,自动检测架(X86/ARM)、构建镜像并启动容器。82+> `builder.sh` 为 **Linux 构建脚本**,自动构建镜像并启动容器。
81 83 
82#### 参数说明84#### 参数说明
83 85 
@@ -115,14 +117,14 @@ bash builder.sh --cann --no-cache # 含 CANN 且不使用
115 117 
116### 场景一:builder 镜像118### 场景一:builder 镜像
117 119 
118-仅需挂载源码,无需 NPU 驱动透传。以下命令须在 `pytorch/docker/builder/X86`(或 `ARM`)目录下执行,与手动构建步骤的工作目录一致:120+仅需挂载源码,无需 NPU 驱动透传。以下命令须在 `pytorch/docker/devel`目录下执行,与手动构建步骤的工作目录一致:
119 121 
120```Shell122```Shell
121docker rm -f torch-npu-builder 2>/dev/null123docker rm -f torch-npu-builder 2>/dev/null
122 124 
123docker run -d --rm \125docker run -d --rm \
124 --name torch-npu-builder \126 --name torch-npu-builder \
125- -v $(pwd)/../../..:/home/pytorch \127+ -v $(pwd)/../..:/home/pytorch \
126 -e PY_VERSION=3.10 \128 -e PY_VERSION=3.10 \
127 manylinux-builder:v1 \129 manylinux-builder:v1 \
128 tail -f /dev/null130 tail -f /dev/null
@@ -139,7 +141,7 @@ docker run -d --rm \
139 --name torch-npu-builder \141 --name torch-npu-builder \
140 --privileged \142 --privileged \
141 -v /dev:/dev \143 -v /dev:/dev \
142- -v $(pwd)/../../..:/home/pytorch \144+ -v $(pwd)/../..:/home/pytorch \
143 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \145 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
144 -v /usr/local/Ascend/add-ons:/usr/local/Ascend/add-ons \146 -v /usr/local/Ascend/add-ons:/usr/local/Ascend/add-ons \
145 -v /usr/local/sbin/npu-smi:/usr/local/bin/npu-smi \147 -v /usr/local/sbin/npu-smi:/usr/local/bin/npu-smi \
@@ -183,7 +185,7 @@ docker exec -it torch-npu-builder bash
183 185 
184Windows 下命令格式与 Linux 的主要差异:186Windows 下命令格式与 Linux 的主要差异:
185 187 
186-- **工作目录**:需进入对应架构子目录,如 `pytorch\docker\builder\X86`(ARM 机器用 `ARM` 子目录188+- **工作目录**:需进入 `pytorch\docker\devel` 目录。
187- **路径分隔符**:使用反斜杠 `\`,而非正斜杠 `/`189- **路径分隔符**:使用反斜杠 `\`,而非正斜杠 `/`
188- **续行符**:PowerShell 使用反引号 `` ` ``,而非反斜杠 `\`。190- **续行符**:PowerShell 使用反引号 `` ` ``,而非反斜杠 `\`。
189- **挂载路径**:使用 Windows 风格(`E:\...`),Docker Desktop for Windows 会自动转换;切勿使用 MSYS 风格(`/e/...`)。191- **挂载路径**:使用 Windows 风格(`E:\...`),Docker Desktop for Windows 会自动转换;切勿使用 MSYS 风格(`/e/...`)。
Rdocker/builder/builder.shdocker/devel/builder.sh+1-12
@@ -122,18 +122,7 @@ if [ "${INSTALL_CANN}" -eq 1 ]; then
122fi122fi
123 123 
124ARCH=$(uname -m)124ARCH=$(uname -m)
125-case "${ARCH}" in125+DOCKERFILE_DIR="${SCRIPT_DIR}"
126-x86_64)
127- DOCKERFILE_DIR="${SCRIPT_DIR}/X86"
128- ;;
129-aarch64)
130- DOCKERFILE_DIR="${SCRIPT_DIR}/ARM"
131- ;;
132-*)
133- echo "Unsupported architecture: ${ARCH}"
134- exit 1
135- ;;
136-esac
137 126 
138if [ ! -f "${DOCKERFILE_DIR}/Dockerfile" ]; then127if [ ! -f "${DOCKERFILE_DIR}/Dockerfile" ]; then
139 echo "Dockerfile not found: ${DOCKERFILE_DIR}/Dockerfile"128 echo "Dockerfile not found: ${DOCKERFILE_DIR}/Dockerfile"