mirror of
				https://github.com/pytorch/pytorch.git
				synced 2025-10-31 20:34:54 +08:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			benchmark-
			...
			triton_ker
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6c647f94de | 
| @ -1,4 +1,4 @@ | |||||||
| # Docker images for GitHub CI and CD | # Docker images for GitHub CI | ||||||
|  |  | ||||||
| This directory contains everything needed to build the Docker images | This directory contains everything needed to build the Docker images | ||||||
| that are used in our CI. | that are used in our CI. | ||||||
| @ -12,7 +12,7 @@ each image as the `BUILD_ENVIRONMENT` environment variable. | |||||||
|  |  | ||||||
| See `build.sh` for valid build environments (it's the giant switch). | See `build.sh` for valid build environments (it's the giant switch). | ||||||
|  |  | ||||||
| ## Docker CI builds | ## Contents | ||||||
|  |  | ||||||
| * `build.sh` -- dispatch script to launch all builds | * `build.sh` -- dispatch script to launch all builds | ||||||
| * `common` -- scripts used to execute individual Docker build stages | * `common` -- scripts used to execute individual Docker build stages | ||||||
| @ -21,12 +21,6 @@ See `build.sh` for valid build environments (it's the giant switch). | |||||||
| * `ubuntu-rocm` -- Dockerfile for Ubuntu image with ROCm support | * `ubuntu-rocm` -- Dockerfile for Ubuntu image with ROCm support | ||||||
| * `ubuntu-xpu` -- Dockerfile for Ubuntu image with XPU support | * `ubuntu-xpu` -- Dockerfile for Ubuntu image with XPU support | ||||||
|  |  | ||||||
| ### Docker CD builds |  | ||||||
|  |  | ||||||
| * `conda` - Dockerfile and build.sh to build Docker images used in nightly conda builds |  | ||||||
| * `manywheel` - Dockerfile and build.sh to build Docker images used in nightly manywheel builds |  | ||||||
| * `libtorch` - Dockerfile and build.sh to build Docker images used in nightly libtorch builds |  | ||||||
|  |  | ||||||
| ## Usage | ## Usage | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
|  | |||||||
| @ -1,5 +0,0 @@ | |||||||
| 0.6b |  | ||||||
| manylinux_2_17 |  | ||||||
| rocm6.1 |  | ||||||
| 7f07e8a1cb1f99627eb6d77f5c0e9295c775f3c7 |  | ||||||
| 77c29fa3f3b614e187d7213d745e989a92708cee2bc6020419ab49019af399d1 |  | ||||||
| @ -91,9 +91,9 @@ _UCC_COMMIT=20eae37090a4ce1b32bcce6144ccad0b49943e0b | |||||||
| # configuration, so we hardcode everything here rather than do it | # configuration, so we hardcode everything here rather than do it | ||||||
| # from scratch | # from scratch | ||||||
| case "$image" in | case "$image" in | ||||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9) |   pytorch-linux-focal-cuda12.4-cudnn8-py3-gcc9) | ||||||
|     CUDA_VERSION=12.4.0 |     CUDA_VERSION=12.4.0 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -105,9 +105,9 @@ case "$image" in | |||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.1-cudnn9-py3-gcc9) |   pytorch-linux-focal-cuda12.1-cudnn8-py3-gcc9) | ||||||
|     CUDA_VERSION=12.1.1 |     CUDA_VERSION=12.1.1 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -119,9 +119,9 @@ case "$image" in | |||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9-inductor-benchmarks) |   pytorch-linux-focal-cuda12.4-cudnn8-py3-gcc9-inductor-benchmarks) | ||||||
|     CUDA_VERSION=12.4.0 |     CUDA_VERSION=12.4.0 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -134,9 +134,9 @@ case "$image" in | |||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     INDUCTOR_BENCHMARKS=yes |     INDUCTOR_BENCHMARKS=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.1-cudnn9-py3-gcc9-inductor-benchmarks) |   pytorch-linux-focal-cuda12.1-cudnn8-py3-gcc9-inductor-benchmarks) | ||||||
|     CUDA_VERSION=12.1.1 |     CUDA_VERSION=12.1.1 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -149,9 +149,9 @@ case "$image" in | |||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     INDUCTOR_BENCHMARKS=yes |     INDUCTOR_BENCHMARKS=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.1-cudnn9-py3.12-gcc9-inductor-benchmarks) |   pytorch-linux-focal-cuda12.1-cudnn8-py3.12-gcc9-inductor-benchmarks) | ||||||
|     CUDA_VERSION=12.1.1 |     CUDA_VERSION=12.1.1 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.12 |     ANACONDA_PYTHON_VERSION=3.12 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -164,9 +164,9 @@ case "$image" in | |||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     INDUCTOR_BENCHMARKS=yes |     INDUCTOR_BENCHMARKS=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3.12-gcc9-inductor-benchmarks) |   pytorch-linux-focal-cuda12.4-cudnn8-py3.12-gcc9-inductor-benchmarks) | ||||||
|     CUDA_VERSION=12.4.0 |     CUDA_VERSION=12.4.0 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.12 |     ANACONDA_PYTHON_VERSION=3.12 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -179,9 +179,9 @@ case "$image" in | |||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     INDUCTOR_BENCHMARKS=yes |     INDUCTOR_BENCHMARKS=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda11.8-cudnn9-py3-gcc9) |   pytorch-linux-focal-cuda11.8-cudnn8-py3-gcc9) | ||||||
|     CUDA_VERSION=11.8.0 |     CUDA_VERSION=11.8.0 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -193,9 +193,9 @@ case "$image" in | |||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9) |   pytorch-linux-focal-cuda12.4-cudnn8-py3-gcc9) | ||||||
|     CUDA_VERSION=12.4.0 |     CUDA_VERSION=12.4.0 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -207,9 +207,9 @@ case "$image" in | |||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.1-cudnn9-py3-gcc9) |   pytorch-linux-focal-cuda12.1-cudnn8-py3-gcc9) | ||||||
|     CUDA_VERSION=12.1.1 |     CUDA_VERSION=12.1.1 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -221,9 +221,9 @@ case "$image" in | |||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     TRITON=yes |     TRITON=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9) |   pytorch-linux-focal-cuda12.4-cudnn8-py3-gcc9) | ||||||
|     CUDA_VERSION=12.4.0 |     CUDA_VERSION=12.4.0 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |     ANACONDA_PYTHON_VERSION=3.10 | ||||||
|     GCC_VERSION=9 |     GCC_VERSION=9 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -330,10 +330,10 @@ case "$image" in | |||||||
|     DOCS=yes |     DOCS=yes | ||||||
|     INDUCTOR_BENCHMARKS=yes |     INDUCTOR_BENCHMARKS=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-jammy-cuda11.8-cudnn9-py3.8-clang12) |   pytorch-linux-jammy-cuda11.8-cudnn8-py3.8-clang12) | ||||||
|     ANACONDA_PYTHON_VERSION=3.8 |     ANACONDA_PYTHON_VERSION=3.8 | ||||||
|     CUDA_VERSION=11.8 |     CUDA_VERSION=11.8 | ||||||
|     CUDNN_VERSION=9 |     CUDNN_VERSION=8 | ||||||
|     CLANG_VERSION=12 |     CLANG_VERSION=12 | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
|     DB=yes |     DB=yes | ||||||
| @ -373,13 +373,6 @@ case "$image" in | |||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     EXECUTORCH=yes |     EXECUTORCH=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-jammy-py3.12-halide) |  | ||||||
|     CUDA_VERSION=12.4 |  | ||||||
|     ANACONDA_PYTHON_VERSION=3.12 |  | ||||||
|     GCC_VERSION=11 |  | ||||||
|     CONDA_CMAKE=yes |  | ||||||
|     HALIDE=yes |  | ||||||
|     ;; |  | ||||||
|   pytorch-linux-focal-linter) |   pytorch-linux-focal-linter) | ||||||
|     # TODO: Use 3.9 here because of this issue https://github.com/python/mypy/issues/13627. |     # TODO: Use 3.9 here because of this issue https://github.com/python/mypy/issues/13627. | ||||||
|     # We will need to update mypy version eventually, but that's for another day. The task |     # We will need to update mypy version eventually, but that's for another day. The task | ||||||
| @ -387,7 +380,7 @@ case "$image" in | |||||||
|     ANACONDA_PYTHON_VERSION=3.9 |     ANACONDA_PYTHON_VERSION=3.9 | ||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-jammy-cuda11.8-cudnn9-py3.9-linter) |   pytorch-linux-jammy-cuda11.8-cudnn8-py3.9-linter) | ||||||
|     ANACONDA_PYTHON_VERSION=3.9 |     ANACONDA_PYTHON_VERSION=3.9 | ||||||
|     CUDA_VERSION=11.8 |     CUDA_VERSION=11.8 | ||||||
|     CONDA_CMAKE=yes |     CONDA_CMAKE=yes | ||||||
| @ -407,22 +400,6 @@ case "$image" in | |||||||
|     # from pytorch/llvm:9.0.1 is x86 specific |     # from pytorch/llvm:9.0.1 is x86 specific | ||||||
|     SKIP_LLVM_SRC_BUILD_INSTALL=yes |     SKIP_LLVM_SRC_BUILD_INSTALL=yes | ||||||
|     ;; |     ;; | ||||||
|   pytorch-linux-jammy-aarch64-py3.10-gcc11-inductor-benchmarks) |  | ||||||
|     ANACONDA_PYTHON_VERSION=3.10 |  | ||||||
|     GCC_VERSION=11 |  | ||||||
|     ACL=yes |  | ||||||
|     PROTOBUF=yes |  | ||||||
|     DB=yes |  | ||||||
|     VISION=yes |  | ||||||
|     CONDA_CMAKE=yes |  | ||||||
|     # snadampal: skipping sccache due to the following issue |  | ||||||
|     # https://github.com/pytorch/pytorch/issues/121559 |  | ||||||
|     SKIP_SCCACHE_INSTALL=yes |  | ||||||
|     # snadampal: skipping llvm src build install because the current version |  | ||||||
|     # from pytorch/llvm:9.0.1 is x86 specific |  | ||||||
|     SKIP_LLVM_SRC_BUILD_INSTALL=yes |  | ||||||
|     INDUCTOR_BENCHMARKS=yes |  | ||||||
|     ;; |  | ||||||
|   *) |   *) | ||||||
|     # Catch-all for builds that are not hardcoded. |     # Catch-all for builds that are not hardcoded. | ||||||
|     PROTOBUF=yes |     PROTOBUF=yes | ||||||
| @ -470,7 +447,7 @@ tmp_tag=$(basename "$(mktemp -u)" | tr '[:upper:]' '[:lower:]') | |||||||
| #when using cudnn version 8 install it separately from cuda | #when using cudnn version 8 install it separately from cuda | ||||||
| if [[ "$image" == *cuda*  && ${OS} == "ubuntu" ]]; then | if [[ "$image" == *cuda*  && ${OS} == "ubuntu" ]]; then | ||||||
|   IMAGE_NAME="nvidia/cuda:${CUDA_VERSION}-cudnn${CUDNN_VERSION}-devel-ubuntu${UBUNTU_VERSION}" |   IMAGE_NAME="nvidia/cuda:${CUDA_VERSION}-cudnn${CUDNN_VERSION}-devel-ubuntu${UBUNTU_VERSION}" | ||||||
|   if [[ ${CUDNN_VERSION} == 9 ]]; then |   if [[ ${CUDNN_VERSION} == 8 ]]; then | ||||||
|     IMAGE_NAME="nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}" |     IMAGE_NAME="nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}" | ||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
| @ -513,7 +490,6 @@ docker build \ | |||||||
|        --build-arg "DOCS=${DOCS}" \ |        --build-arg "DOCS=${DOCS}" \ | ||||||
|        --build-arg "INDUCTOR_BENCHMARKS=${INDUCTOR_BENCHMARKS}" \ |        --build-arg "INDUCTOR_BENCHMARKS=${INDUCTOR_BENCHMARKS}" \ | ||||||
|        --build-arg "EXECUTORCH=${EXECUTORCH}" \ |        --build-arg "EXECUTORCH=${EXECUTORCH}" \ | ||||||
|        --build-arg "HALIDE=${HALIDE}" \ |  | ||||||
|        --build-arg "XPU_VERSION=${XPU_VERSION}" \ |        --build-arg "XPU_VERSION=${XPU_VERSION}" \ | ||||||
|        --build-arg "ACL=${ACL:-}" \ |        --build-arg "ACL=${ACL:-}" \ | ||||||
|        --build-arg "SKIP_SCCACHE_INSTALL=${SKIP_SCCACHE_INSTALL:-}" \ |        --build-arg "SKIP_SCCACHE_INSTALL=${SKIP_SCCACHE_INSTALL:-}" \ | ||||||
| @ -523,7 +499,7 @@ docker build \ | |||||||
|        "$@" \ |        "$@" \ | ||||||
|        . |        . | ||||||
|  |  | ||||||
| # NVIDIA dockers for RC releases use tag names like `11.0-cudnn9-devel-ubuntu18.04-rc`, | # NVIDIA dockers for RC releases use tag names like `11.0-cudnn8-devel-ubuntu18.04-rc`, | ||||||
| # for this case we will set UBUNTU_VERSION to `18.04-rc` so that the Dockerfile could | # for this case we will set UBUNTU_VERSION to `18.04-rc` so that the Dockerfile could | ||||||
| # find the correct image. As a result, here we have to replace the | # find the correct image. As a result, here we have to replace the | ||||||
| #   "$UBUNTU_VERSION" == "18.04-rc" | #   "$UBUNTU_VERSION" == "18.04-rc" | ||||||
|  | |||||||
| @ -113,18 +113,18 @@ COPY triton_version.txt triton_version.txt | |||||||
| RUN if [ -n "${TRITON}" ]; then bash ./install_triton.sh; fi | RUN if [ -n "${TRITON}" ]; then bash ./install_triton.sh; fi | ||||||
| RUN rm install_triton.sh common_utils.sh triton-rocm.txt triton_version.txt | RUN rm install_triton.sh common_utils.sh triton-rocm.txt triton_version.txt | ||||||
|  |  | ||||||
| # Install AOTriton (Early fail) |  | ||||||
| COPY ./aotriton_version.txt aotriton_version.txt |  | ||||||
| COPY ./common/common_utils.sh common_utils.sh |  | ||||||
| COPY ./common/install_aotriton.sh install_aotriton.sh |  | ||||||
| RUN ["/bin/bash", "-c", "./install_aotriton.sh /opt/rocm && rm -rf install_aotriton.sh aotriton_version.txt common_utils.sh"] |  | ||||||
| ENV AOTRITON_INSTALLED_PREFIX /opt/rocm/aotriton |  | ||||||
|  |  | ||||||
| # Install ccache/sccache (do this last, so we get priority in PATH) | # Install ccache/sccache (do this last, so we get priority in PATH) | ||||||
| COPY ./common/install_cache.sh install_cache.sh | COPY ./common/install_cache.sh install_cache.sh | ||||||
| ENV PATH /opt/cache/bin:$PATH | ENV PATH /opt/cache/bin:$PATH | ||||||
| RUN bash ./install_cache.sh && rm install_cache.sh | RUN bash ./install_cache.sh && rm install_cache.sh | ||||||
|  |  | ||||||
|  | # Install AOTriton | ||||||
|  | COPY ci_commit_pins/aotriton.txt aotriton.txt | ||||||
|  | COPY ./common/common_utils.sh common_utils.sh | ||||||
|  | COPY ./common/install_aotriton.sh install_aotriton.sh | ||||||
|  | RUN bash ./install_aotriton.sh /opt/rocm/aotriton && rm -rf install_aotriton.sh aotriton aotriton.txt common_utils.sh | ||||||
|  | ENV AOTRITON_INSTALLED_PREFIX /opt/rocm/aotriton | ||||||
|  |  | ||||||
| # Include BUILD_ENVIRONMENT environment variable in image | # Include BUILD_ENVIRONMENT environment variable in image | ||||||
| ARG BUILD_ENVIRONMENT | ARG BUILD_ENVIRONMENT | ||||||
| ENV BUILD_ENVIRONMENT ${BUILD_ENVIRONMENT} | ENV BUILD_ENVIRONMENT ${BUILD_ENVIRONMENT} | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								.ci/docker/ci_commit_pins/aotriton.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.ci/docker/ci_commit_pins/aotriton.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | 24a3fe9cb57e5cda3c923df29743f9767194cc27 | ||||||
| @ -1 +1 @@ | |||||||
| 91298923a0076c1b41059efb6dad2876426e4b03 | d4b3e5cc607e97afdba79dc90f8ef968142f347c | ||||||
|  | |||||||
| @ -1 +0,0 @@ | |||||||
| 340136fec6d3ebc73e7a19eba1663e9b0ba8ab2d |  | ||||||
| @ -1 +1 @@ | |||||||
| 21eae954efa5bf584da70324b640288c3ee7aede | bbe6246e37d8aa791c67daaf9d9d61b26c9ccfdc | ||||||
|  | |||||||
| @ -1 +1 @@ | |||||||
| 1b2f15840e0d70eec50d84c7a0575cb835524def | b8c64f64c18d8cac598b3adb355c21e7439c21de | ||||||
|  | |||||||
| @ -1 +1 @@ | |||||||
| dedb7bdf339a3546896d4820366ca562c586bfa0 | 45fff310c891f5a92d55445adf8cc9d29df5841e | ||||||
|  | |||||||
| @ -1,5 +0,0 @@ | |||||||
| 0.6b |  | ||||||
| manylinux_2_17 |  | ||||||
| rocm6.1 |  | ||||||
| 04b5df8c8123f90cba3ede7e971e6fbc6040d506 |  | ||||||
| 77c29fa3f3b614e187d7213d745e989a92708cee2bc6020419ab49019af399d1 |  | ||||||
							
								
								
									
										31
									
								
								.ci/docker/common/install_aotriton.sh
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										31
									
								
								.ci/docker/common/install_aotriton.sh
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @ -4,20 +4,21 @@ set -ex | |||||||
|  |  | ||||||
| source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh" | source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh" | ||||||
|  |  | ||||||
| TARBALL='aotriton.tar.bz2' | AOTRITON_DIR="aotriton" | ||||||
| # This read command alwasy returns with exit code 1 | AOTRITON_PINNED_NAME="aotriton" # No .txt extension | ||||||
| read -d "\n" VER MANYLINUX ROCMBASE PINNED_COMMIT SHA256 < aotriton_version.txt || true | AOTRITON_PINNED_COMMIT=$(get_pinned_commit ${AOTRITON_PINNED_NAME}) | ||||||
| ARCH=$(uname -m) |  | ||||||
| AOTRITON_INSTALL_PREFIX="$1" | AOTRITON_INSTALL_PREFIX="$1" | ||||||
| AOTRITON_URL="https://github.com/ROCm/aotriton/releases/download/${VER}/aotriton-${VER}-${MANYLINUX}_${ARCH}-${ROCMBASE}-shared.tar.bz2" |  | ||||||
|  |  | ||||||
| cd "${AOTRITON_INSTALL_PREFIX}" | git clone https://github.com/ROCm/aotriton.git "${AOTRITON_DIR}" | ||||||
| # Must use -L to follow redirects | cd "${AOTRITON_DIR}" | ||||||
| curl -L --retry 3 -o "${TARBALL}" "${AOTRITON_URL}" | git checkout "${AOTRITON_PINNED_COMMIT}" | ||||||
| ACTUAL_SHA256=$(sha256sum "${TARBALL}" | cut -d " " -f 1) | git submodule sync --recursive | ||||||
| if [ "${SHA256}" != "${ACTUAL_SHA256}" ]; then | git submodule update --init --recursive --force --depth 1 | ||||||
|   echo -n "Error: The SHA256 of downloaded tarball is ${ACTUAL_SHA256}," | mkdir build | ||||||
|   echo " which does not match the expected value ${SHA256}." | cd build | ||||||
|   exit | cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX=./install_dir -DCMAKE_BUILD_TYPE=Release -DAOTRITON_COMPRESS_KERNEL=OFF -DAOTRITON_NO_PYTHON=ON -DAOTRITON_NO_SHARED=ON | ||||||
| fi | ninja install | ||||||
| tar xf "${TARBALL}" && rm -rf "${TARBALL}" | mkdir -p "${AOTRITON_INSTALL_PREFIX}" | ||||||
|  | cp -r install_dir/* "${AOTRITON_INSTALL_PREFIX}" | ||||||
|  | find /tmp/ -mindepth 1 -delete | ||||||
|  | rm -rf ~/.triton | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| set -ex | set -ex | ||||||
|  |  | ||||||
| install_ubuntu() { | install_ubuntu() { | ||||||
|   # NVIDIA dockers for RC releases use tag names like `11.0-cudnn9-devel-ubuntu18.04-rc`, |   # NVIDIA dockers for RC releases use tag names like `11.0-cudnn8-devel-ubuntu18.04-rc`, | ||||||
|   # for this case we will set UBUNTU_VERSION to `18.04-rc` so that the Dockerfile could |   # for this case we will set UBUNTU_VERSION to `18.04-rc` so that the Dockerfile could | ||||||
|   # find the correct image. As a result, here we have to check for |   # find the correct image. As a result, here we have to check for | ||||||
|   #   "$UBUNTU_VERSION" == "18.04"* |   #   "$UBUNTU_VERSION" == "18.04"* | ||||||
|  | |||||||
| @ -85,7 +85,7 @@ fi | |||||||
|   else |   else | ||||||
|     CONDA_COMMON_DEPS="astunparse pyyaml mkl=2021.4.0 mkl-include=2021.4.0 setuptools" |     CONDA_COMMON_DEPS="astunparse pyyaml mkl=2021.4.0 mkl-include=2021.4.0 setuptools" | ||||||
|  |  | ||||||
|     if [ "$ANACONDA_PYTHON_VERSION" = "3.11" ] || [ "$ANACONDA_PYTHON_VERSION" = "3.12" ] || [ "$ANACONDA_PYTHON_VERSION" = "3.13" ]; then |     if [ "$ANACONDA_PYTHON_VERSION" = "3.11" ] || [ "$ANACONDA_PYTHON_VERSION" = "3.12" ]; then | ||||||
|       conda_install numpy=1.26.0 ${CONDA_COMMON_DEPS} |       conda_install numpy=1.26.0 ${CONDA_COMMON_DEPS} | ||||||
|     else |     else | ||||||
|       conda_install numpy=1.21.2 ${CONDA_COMMON_DEPS} |       conda_install numpy=1.21.2 ${CONDA_COMMON_DEPS} | ||||||
|  | |||||||
| @ -1,20 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| # Anaconda |  | ||||||
| # Latest anaconda is using openssl-3 which is incompatible with all currently published versions of git |  | ||||||
| # Which are using openssl-1.1.1, see https://anaconda.org/anaconda/git/files?version=2.40.1 for example |  | ||||||
| MINICONDA_URL=https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-x86_64.sh |  | ||||||
| wget -q $MINICONDA_URL |  | ||||||
| # NB: Manually invoke bash per https://github.com/conda/conda/issues/10431 |  | ||||||
| bash $(basename "$MINICONDA_URL") -b -p /opt/conda |  | ||||||
| rm $(basename "$MINICONDA_URL") |  | ||||||
| export PATH=/opt/conda/bin:$PATH |  | ||||||
| # See https://github.com/pytorch/builder/issues/1473 |  | ||||||
| # Pin conda to 23.5.2 as it's the last one compatible with openssl-1.1.1 |  | ||||||
| conda install -y conda=23.5.2 conda-build anaconda-client git ninja |  | ||||||
| # The cmake version here needs to match with the minimum version of cmake |  | ||||||
| # supported by PyTorch (3.18). There is only 3.18.2 on anaconda |  | ||||||
| /opt/conda/bin/pip3 install cmake==3.18.2 |  | ||||||
| conda remove -y --force patchelf |  | ||||||
| @ -1,95 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
| set -uex -o pipefail |  | ||||||
|  |  | ||||||
| PYTHON_DOWNLOAD_URL=https://www.python.org/ftp/python |  | ||||||
| PYTHON_DOWNLOAD_GITHUB_BRANCH=https://github.com/python/cpython/archive/refs/heads |  | ||||||
| GET_PIP_URL=https://bootstrap.pypa.io/get-pip.py |  | ||||||
|  |  | ||||||
| # Python versions to be installed in /opt/$VERSION_NO |  | ||||||
| CPYTHON_VERSIONS=${CPYTHON_VERSIONS:-"3.8.1 3.9.0 3.10.1 3.11.0 3.12.0 3.13.0"} |  | ||||||
|  |  | ||||||
| function check_var { |  | ||||||
|     if [ -z "$1" ]; then |  | ||||||
|         echo "required variable not defined" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function do_cpython_build { |  | ||||||
|     local py_ver=$1 |  | ||||||
|     local py_folder=$2 |  | ||||||
|     check_var $py_ver |  | ||||||
|     check_var $py_folder |  | ||||||
|     tar -xzf Python-$py_ver.tgz |  | ||||||
|     pushd $py_folder |  | ||||||
|  |  | ||||||
|     local prefix="/opt/_internal/cpython-${py_ver}" |  | ||||||
|     mkdir -p ${prefix}/lib |  | ||||||
|     if [[ -n $(which patchelf) ]]; then |  | ||||||
|         local shared_flags="--enable-shared" |  | ||||||
|     else |  | ||||||
|         local shared_flags="--disable-shared" |  | ||||||
|     fi |  | ||||||
|     if [[ -z  "${WITH_OPENSSL+x}" ]]; then |  | ||||||
|         local openssl_flags="" |  | ||||||
|     else |  | ||||||
|         local openssl_flags="--with-openssl=${WITH_OPENSSL} --with-openssl-rpath=auto" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # -Wformat added for https://bugs.python.org/issue17547 on Python 2.6 |  | ||||||
|     CFLAGS="-Wformat" ./configure --prefix=${prefix} ${openssl_flags} ${shared_flags} > /dev/null |  | ||||||
|  |  | ||||||
|     make -j40 > /dev/null |  | ||||||
|     make install > /dev/null |  | ||||||
|  |  | ||||||
|     if [[ "${shared_flags}" == "--enable-shared" ]]; then |  | ||||||
|         patchelf --set-rpath '$ORIGIN/../lib' ${prefix}/bin/python3 |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     popd |  | ||||||
|     rm -rf $py_folder |  | ||||||
|     # Some python's install as bin/python3. Make them available as |  | ||||||
|     # bin/python. |  | ||||||
|     if [ -e ${prefix}/bin/python3 ]; then |  | ||||||
|         ln -s python3 ${prefix}/bin/python |  | ||||||
|     fi |  | ||||||
|     ${prefix}/bin/python get-pip.py |  | ||||||
|     if [ -e ${prefix}/bin/pip3 ] && [ ! -e ${prefix}/bin/pip ]; then |  | ||||||
|         ln -s pip3 ${prefix}/bin/pip |  | ||||||
|     fi |  | ||||||
|     ${prefix}/bin/pip install wheel==0.34.2 |  | ||||||
|     local abi_tag=$(${prefix}/bin/python -c "from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag; print('{0}{1}-{2}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag()))") |  | ||||||
|     ln -s ${prefix} /opt/python/${abi_tag} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function build_cpython { |  | ||||||
|     local py_ver=$1 |  | ||||||
|     check_var $py_ver |  | ||||||
|     check_var $PYTHON_DOWNLOAD_URL |  | ||||||
|     local py_ver_folder=$py_ver |  | ||||||
|     if [ "$py_ver" = "3.13.0" ]; then |  | ||||||
|         PY_VER_SHORT="3.13" |  | ||||||
|         check_var $PYTHON_DOWNLOAD_GITHUB_BRANCH |  | ||||||
|         wget $PYTHON_DOWNLOAD_GITHUB_BRANCH/$PY_VER_SHORT.tar.gz -O Python-$py_ver.tgz |  | ||||||
|         do_cpython_build $py_ver cpython-$PY_VER_SHORT |  | ||||||
|     else |  | ||||||
|         wget -q $PYTHON_DOWNLOAD_URL/$py_ver_folder/Python-$py_ver.tgz |  | ||||||
|         do_cpython_build $py_ver Python-$py_ver |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     rm -f Python-$py_ver.tgz |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function build_cpythons { |  | ||||||
|     check_var $GET_PIP_URL |  | ||||||
|     curl -sLO $GET_PIP_URL |  | ||||||
|     for py_ver in $@; do |  | ||||||
|         build_cpython $py_ver |  | ||||||
|     done |  | ||||||
|     rm -f get-pip.py |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mkdir -p /opt/python |  | ||||||
| mkdir -p /opt/_internal |  | ||||||
| build_cpythons $CPYTHON_VERSIONS |  | ||||||
| @ -1,239 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| NCCL_VERSION=v2.21.5-1 |  | ||||||
| CUDNN_VERSION=9.1.0.70 |  | ||||||
|  |  | ||||||
| function install_cusparselt_040 { |  | ||||||
|     # cuSparseLt license: https://docs.nvidia.com/cuda/cusparselt/license.html |  | ||||||
|     mkdir tmp_cusparselt && pushd tmp_cusparselt |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-x86_64/libcusparse_lt-linux-x86_64-0.4.0.7-archive.tar.xz |  | ||||||
|     tar xf libcusparse_lt-linux-x86_64-0.4.0.7-archive.tar.xz |  | ||||||
|     cp -a libcusparse_lt-linux-x86_64-0.4.0.7-archive/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a libcusparse_lt-linux-x86_64-0.4.0.7-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     popd |  | ||||||
|     rm -rf tmp_cusparselt |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function install_cusparselt_052 { |  | ||||||
|     # cuSparseLt license: https://docs.nvidia.com/cuda/cusparselt/license.html |  | ||||||
|     mkdir tmp_cusparselt && pushd tmp_cusparselt |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-x86_64/libcusparse_lt-linux-x86_64-0.5.2.1-archive.tar.xz |  | ||||||
|     tar xf libcusparse_lt-linux-x86_64-0.5.2.1-archive.tar.xz |  | ||||||
|     cp -a libcusparse_lt-linux-x86_64-0.5.2.1-archive/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a libcusparse_lt-linux-x86_64-0.5.2.1-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     popd |  | ||||||
|     rm -rf tmp_cusparselt |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function install_118 { |  | ||||||
|     echo "Installing CUDA 11.8 and cuDNN ${CUDNN_VERSION} and NCCL ${NCCL_VERSION} and cuSparseLt-0.4.0" |  | ||||||
|     rm -rf /usr/local/cuda-11.8 /usr/local/cuda |  | ||||||
|     # install CUDA 11.8.0 in the same container |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run |  | ||||||
|     chmod +x cuda_11.8.0_520.61.05_linux.run |  | ||||||
|     ./cuda_11.8.0_520.61.05_linux.run --toolkit --silent |  | ||||||
|     rm -f cuda_11.8.0_520.61.05_linux.run |  | ||||||
|     rm -f /usr/local/cuda && ln -s /usr/local/cuda-11.8 /usr/local/cuda |  | ||||||
|  |  | ||||||
|     # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement |  | ||||||
|     mkdir tmp_cudnn && cd tmp_cudnn |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive.tar.xz -O cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive.tar.xz |  | ||||||
|     tar xf cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive.tar.xz |  | ||||||
|     cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     cd .. |  | ||||||
|     rm -rf tmp_cudnn |  | ||||||
|  |  | ||||||
|     # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses |  | ||||||
|     # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build |  | ||||||
|     git clone -b $NCCL_VERSION --depth 1 https://github.com/NVIDIA/nccl.git |  | ||||||
|     cd nccl && make -j src.build |  | ||||||
|     cp -a build/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a build/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     cd .. |  | ||||||
|     rm -rf nccl |  | ||||||
|  |  | ||||||
|     install_cusparselt_040 |  | ||||||
|  |  | ||||||
|     ldconfig |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function install_121 { |  | ||||||
|     echo "Installing CUDA 12.1 and cuDNN ${CUDNN_VERSION} and NCCL ${NCCL_VERSION} and cuSparseLt-0.5.2" |  | ||||||
|     rm -rf /usr/local/cuda-12.1 /usr/local/cuda |  | ||||||
|     # install CUDA 12.1.0 in the same container |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run |  | ||||||
|     chmod +x cuda_12.1.1_530.30.02_linux.run |  | ||||||
|     ./cuda_12.1.1_530.30.02_linux.run --toolkit --silent |  | ||||||
|     rm -f cuda_12.1.1_530.30.02_linux.run |  | ||||||
|     rm -f /usr/local/cuda && ln -s /usr/local/cuda-12.1 /usr/local/cuda |  | ||||||
|  |  | ||||||
|     # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement |  | ||||||
|     mkdir tmp_cudnn && cd tmp_cudnn |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz -O cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz |  | ||||||
|     tar xf cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz |  | ||||||
|     cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     cd .. |  | ||||||
|     rm -rf tmp_cudnn |  | ||||||
|  |  | ||||||
|     # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses |  | ||||||
|     # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build |  | ||||||
|     git clone -b $NCCL_VERSION --depth 1 https://github.com/NVIDIA/nccl.git |  | ||||||
|     cd nccl && make -j src.build |  | ||||||
|     cp -a build/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a build/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     cd .. |  | ||||||
|     rm -rf nccl |  | ||||||
|  |  | ||||||
|     install_cusparselt_052 |  | ||||||
|  |  | ||||||
|     ldconfig |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function install_124 { |  | ||||||
|   echo "Installing CUDA 12.4 and cuDNN ${CUDNN_VERSION} and NCCL ${NCCL_VERSION} and cuSparseLt-0.5.2" |  | ||||||
|   rm -rf /usr/local/cuda-12.4 /usr/local/cuda |  | ||||||
|   # install CUDA 12.4.0 in the same container |  | ||||||
|   wget -q https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run |  | ||||||
|   chmod +x cuda_12.4.0_550.54.14_linux.run |  | ||||||
|   ./cuda_12.4.0_550.54.14_linux.run --toolkit --silent |  | ||||||
|   rm -f cuda_12.4.0_550.54.14_linux.run |  | ||||||
|   rm -f /usr/local/cuda && ln -s /usr/local/cuda-12.4 /usr/local/cuda |  | ||||||
|  |  | ||||||
|   # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement |  | ||||||
|   mkdir tmp_cudnn && cd tmp_cudnn |  | ||||||
|   wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz -O cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz |  | ||||||
|   tar xf cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz |  | ||||||
|   cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/include/* /usr/local/cuda/include/ |  | ||||||
|   cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|   cd .. |  | ||||||
|   rm -rf tmp_cudnn |  | ||||||
|  |  | ||||||
|   # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses |  | ||||||
|   # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build |  | ||||||
|   git clone -b $NCCL_VERSION --depth 1 https://github.com/NVIDIA/nccl.git |  | ||||||
|   cd nccl && make -j src.build |  | ||||||
|   cp -a build/include/* /usr/local/cuda/include/ |  | ||||||
|   cp -a build/lib/* /usr/local/cuda/lib64/ |  | ||||||
|   cd .. |  | ||||||
|   rm -rf nccl |  | ||||||
|  |  | ||||||
|   install_cusparselt_052 |  | ||||||
|  |  | ||||||
|   ldconfig |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function prune_118 { |  | ||||||
|     echo "Pruning CUDA 11.8 and cuDNN" |  | ||||||
|     ##################################################################################### |  | ||||||
|     # CUDA 11.8 prune static libs |  | ||||||
|     ##################################################################################### |  | ||||||
|     export NVPRUNE="/usr/local/cuda-11.8/bin/nvprune" |  | ||||||
|     export CUDA_LIB_DIR="/usr/local/cuda-11.8/lib64" |  | ||||||
|  |  | ||||||
|     export GENCODE="-gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|     export GENCODE_CUDNN="-gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|  |  | ||||||
|     if [[ -n "$OVERRIDE_GENCODE" ]]; then |  | ||||||
|         export GENCODE=$OVERRIDE_GENCODE |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # all CUDA libs except CuDNN and CuBLAS (cudnn and cublas need arch 3.7 included) |  | ||||||
|     ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \ |  | ||||||
|       | xargs -I {} bash -c \ |  | ||||||
|                 "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}" |  | ||||||
|  |  | ||||||
|     # prune CuDNN and CuBLAS |  | ||||||
|     $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a |  | ||||||
|     $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a |  | ||||||
|  |  | ||||||
|     ##################################################################################### |  | ||||||
|     # CUDA 11.8 prune visual tools |  | ||||||
|     ##################################################################################### |  | ||||||
|     export CUDA_BASE="/usr/local/cuda-11.8/" |  | ||||||
|     rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2022.3.0 $CUDA_BASE/nsight-systems-2022.4.2/ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function prune_121 { |  | ||||||
|   echo "Pruning CUDA 12.1" |  | ||||||
|   ##################################################################################### |  | ||||||
|   # CUDA 12.1 prune static libs |  | ||||||
|   ##################################################################################### |  | ||||||
|     export NVPRUNE="/usr/local/cuda-12.1/bin/nvprune" |  | ||||||
|     export CUDA_LIB_DIR="/usr/local/cuda-12.1/lib64" |  | ||||||
|  |  | ||||||
|     export GENCODE="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|     export GENCODE_CUDNN="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|  |  | ||||||
|     if [[ -n "$OVERRIDE_GENCODE" ]]; then |  | ||||||
|         export GENCODE=$OVERRIDE_GENCODE |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # all CUDA libs except CuDNN and CuBLAS |  | ||||||
|     ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \ |  | ||||||
|       | xargs -I {} bash -c \ |  | ||||||
|                 "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}" |  | ||||||
|  |  | ||||||
|     # prune CuDNN and CuBLAS |  | ||||||
|     $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a |  | ||||||
|     $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a |  | ||||||
|  |  | ||||||
|     ##################################################################################### |  | ||||||
|     # CUDA 12.1 prune visual tools |  | ||||||
|     ##################################################################################### |  | ||||||
|     export CUDA_BASE="/usr/local/cuda-12.1/" |  | ||||||
|     rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2023.1.0 $CUDA_BASE/nsight-systems-2023.1.2/ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function prune_124 { |  | ||||||
|   echo "Pruning CUDA 12.4" |  | ||||||
|   ##################################################################################### |  | ||||||
|   # CUDA 12.4 prune static libs |  | ||||||
|   ##################################################################################### |  | ||||||
|   export NVPRUNE="/usr/local/cuda-12.4/bin/nvprune" |  | ||||||
|   export CUDA_LIB_DIR="/usr/local/cuda-12.4/lib64" |  | ||||||
|  |  | ||||||
|   export GENCODE="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|   export GENCODE_CUDNN="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|  |  | ||||||
|   if [[ -n "$OVERRIDE_GENCODE" ]]; then |  | ||||||
|       export GENCODE=$OVERRIDE_GENCODE |  | ||||||
|   fi |  | ||||||
|   if [[ -n "$OVERRIDE_GENCODE_CUDNN" ]]; then |  | ||||||
|       export GENCODE_CUDNN=$OVERRIDE_GENCODE_CUDNN |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # all CUDA libs except CuDNN and CuBLAS |  | ||||||
|   ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \ |  | ||||||
|       | xargs -I {} bash -c \ |  | ||||||
|                 "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}" |  | ||||||
|  |  | ||||||
|   # prune CuDNN and CuBLAS |  | ||||||
|   $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a |  | ||||||
|   $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a |  | ||||||
|  |  | ||||||
|   ##################################################################################### |  | ||||||
|   # CUDA 12.1 prune visual tools |  | ||||||
|   ##################################################################################### |  | ||||||
|   export CUDA_BASE="/usr/local/cuda-12.4/" |  | ||||||
|   rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2024.1.0 $CUDA_BASE/nsight-systems-2023.4.4/ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # idiomatic parameter and option handling in sh |  | ||||||
| while test $# -gt 0 |  | ||||||
| do |  | ||||||
|     case "$1" in |  | ||||||
|     11.8) install_118; prune_118 |  | ||||||
|         ;; |  | ||||||
|     12.1) install_121; prune_121 |  | ||||||
|         ;; |  | ||||||
|     12.4) install_124; prune_124 |  | ||||||
|         ;; |  | ||||||
|     *) echo "bad argument $1"; exit 1 |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     shift |  | ||||||
| done |  | ||||||
| @ -1,93 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| NCCL_VERSION=v2.21.5-1 |  | ||||||
|  |  | ||||||
| function install_cusparselt_052 { |  | ||||||
|     # cuSparseLt license: https://docs.nvidia.com/cuda/cusparselt/license.html |  | ||||||
|     mkdir tmp_cusparselt && pushd tmp_cusparselt |  | ||||||
|     wget -q https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-sbsa/libcusparse_lt-linux-sbsa-0.5.2.1-archive.tar.xz |  | ||||||
|     tar xf libcusparse_lt-linux-sbsa-0.5.2.1-archive.tar.xz |  | ||||||
|     cp -a libcusparse_lt-linux-sbsa-0.5.2.1-archive/include/* /usr/local/cuda/include/ |  | ||||||
|     cp -a libcusparse_lt-linux-sbsa-0.5.2.1-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|     popd |  | ||||||
|     rm -rf tmp_cusparselt |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function install_124 { |  | ||||||
|   echo "Installing CUDA 12.4 and cuDNN 9.1 and NCCL ${NCCL_VERSION} and cuSparseLt-0.5.2" |  | ||||||
|   rm -rf /usr/local/cuda-12.4 /usr/local/cuda |  | ||||||
|   # install CUDA 12.4.0 in the same container |  | ||||||
|   wget -q https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux_sbsa.run |  | ||||||
|   chmod +x cuda_12.4.0_550.54.14_linux_sbsa.run |  | ||||||
|   ./cuda_12.4.0_550.54.14_linux_sbsa.run --toolkit --silent |  | ||||||
|   rm -f cuda_12.4.0_550.54.14_linux_sbsa.run |  | ||||||
|   rm -f /usr/local/cuda && ln -s /usr/local/cuda-12.4 /usr/local/cuda |  | ||||||
|  |  | ||||||
|   # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement |  | ||||||
|   mkdir tmp_cudnn && cd tmp_cudnn |  | ||||||
|   wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-sbsa/cudnn-linux-sbsa-9.1.0.70_cuda12-archive.tar.xz -O cudnn-linux-sbsa-9.1.0.70_cuda12-archive.tar.xz |  | ||||||
|   tar xf cudnn-linux-sbsa-9.1.0.70_cuda12-archive.tar.xz |  | ||||||
|   cp -a cudnn-linux-sbsa-9.1.0.70_cuda12-archive/include/* /usr/local/cuda/include/ |  | ||||||
|   cp -a cudnn-linux-sbsa-9.1.0.70_cuda12-archive/lib/* /usr/local/cuda/lib64/ |  | ||||||
|   cd .. |  | ||||||
|   rm -rf tmp_cudnn |  | ||||||
|  |  | ||||||
|   # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses |  | ||||||
|   # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build |  | ||||||
|   git clone -b ${NCCL_VERSION} --depth 1 https://github.com/NVIDIA/nccl.git |  | ||||||
|   cd nccl && make -j src.build |  | ||||||
|   cp -a build/include/* /usr/local/cuda/include/ |  | ||||||
|   cp -a build/lib/* /usr/local/cuda/lib64/ |  | ||||||
|   cd .. |  | ||||||
|   rm -rf nccl |  | ||||||
|  |  | ||||||
|   install_cusparselt_052 |  | ||||||
|  |  | ||||||
|   ldconfig |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function prune_124 { |  | ||||||
|   echo "Pruning CUDA 12.4" |  | ||||||
|   ##################################################################################### |  | ||||||
|   # CUDA 12.4 prune static libs |  | ||||||
|   ##################################################################################### |  | ||||||
|   export NVPRUNE="/usr/local/cuda-12.4/bin/nvprune" |  | ||||||
|   export CUDA_LIB_DIR="/usr/local/cuda-12.4/lib64" |  | ||||||
|  |  | ||||||
|   export GENCODE="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|   export GENCODE_CUDNN="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90" |  | ||||||
|  |  | ||||||
|   if [[ -n "$OVERRIDE_GENCODE" ]]; then |  | ||||||
|       export GENCODE=$OVERRIDE_GENCODE |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # all CUDA libs except CuDNN and CuBLAS |  | ||||||
|   ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \ |  | ||||||
|       | xargs -I {} bash -c \ |  | ||||||
|                 "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}" |  | ||||||
|  |  | ||||||
|   # prune CuDNN and CuBLAS |  | ||||||
|   $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a |  | ||||||
|   $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a |  | ||||||
|  |  | ||||||
|   ##################################################################################### |  | ||||||
|   # CUDA 12.1 prune visual tools |  | ||||||
|   ##################################################################################### |  | ||||||
|   export CUDA_BASE="/usr/local/cuda-12.4/" |  | ||||||
|   rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2024.1.0 $CUDA_BASE/nsight-systems-2023.4.4/ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # idiomatic parameter and option handling in sh |  | ||||||
| while test $# -gt 0 |  | ||||||
| do |  | ||||||
|     case "$1" in |  | ||||||
|     12.4) install_124; prune_124 |  | ||||||
|         ;; |  | ||||||
|     *) echo "bad argument $1"; exit 1 |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     shift |  | ||||||
| done |  | ||||||
| @ -1,18 +1,23 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  |  | ||||||
| if [[ -n "${CUDNN_VERSION}" ]]; then | if [[ ${CUDNN_VERSION} == 8 ]]; then | ||||||
|     # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement |     # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement | ||||||
|     mkdir tmp_cudnn |     mkdir tmp_cudnn | ||||||
|     pushd tmp_cudnn |     pushd tmp_cudnn | ||||||
|     if [[ ${CUDA_VERSION:0:2} == "12" ]]; then |     if [[ ${CUDA_VERSION:0:4} == "12.4" ]]; then | ||||||
|         CUDNN_NAME="cudnn-linux-x86_64-9.1.0.70_cuda12-archive" |         CUDNN_NAME="cudnn-linux-x86_64-8.9.7.29_cuda12-archive" | ||||||
|     elif [[ ${CUDA_VERSION:0:2} == "11" ]]; then |         curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/${CUDNN_NAME}.tar.xz | ||||||
|         CUDNN_NAME="cudnn-linux-x86_64-9.1.0.70_cuda11-archive" |     elif [[ ${CUDA_VERSION:0:4} == "12.1" ]]; then | ||||||
|  |         CUDNN_NAME="cudnn-linux-x86_64-8.9.2.26_cuda12-archive" | ||||||
|  |         curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/${CUDNN_NAME}.tar.xz | ||||||
|  |     elif [[ ${CUDA_VERSION:0:4} == "11.8" ]]; then | ||||||
|  |         CUDNN_NAME="cudnn-linux-x86_64-8.7.0.84_cuda11-archive" | ||||||
|  |         curl --retry 3 -OLs https://developer.download.nvidia.com/compute/redist/cudnn/v8.7.0/local_installers/11.8/${CUDNN_NAME}.tar.xz | ||||||
|     else |     else | ||||||
|         print "Unsupported CUDA version ${CUDA_VERSION}" |         print "Unsupported CUDA version ${CUDA_VERSION}" | ||||||
|         exit 1 |         exit 1 | ||||||
|     fi |     fi | ||||||
|     curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/${CUDNN_NAME}.tar.xz |  | ||||||
|     tar xf ${CUDNN_NAME}.tar.xz |     tar xf ${CUDNN_NAME}.tar.xz | ||||||
|     cp -a ${CUDNN_NAME}/include/* /usr/local/cuda/include/ |     cp -a ${CUDNN_NAME}/include/* /usr/local/cuda/include/ | ||||||
|     cp -a ${CUDNN_NAME}/lib/* /usr/local/cuda/lib64/ |     cp -a ${CUDNN_NAME}/lib/* /usr/local/cuda/lib64/ | ||||||
|  | |||||||
| @ -37,9 +37,6 @@ install_conda_dependencies() { | |||||||
|  |  | ||||||
| install_pip_dependencies() { | install_pip_dependencies() { | ||||||
|   pushd executorch/.ci/docker |   pushd executorch/.ci/docker | ||||||
|   # Install PyTorch CPU build beforehand to avoid installing the much bigger CUDA |  | ||||||
|   # binaries later, ExecuTorch only needs CPU |  | ||||||
|   pip_install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu |  | ||||||
|   # Install all Python dependencies |   # Install all Python dependencies | ||||||
|   pip_install -r requirements-ci.txt |   pip_install -r requirements-ci.txt | ||||||
|   popd |   popd | ||||||
| @ -47,14 +44,13 @@ install_pip_dependencies() { | |||||||
|  |  | ||||||
| setup_executorch() { | setup_executorch() { | ||||||
|   pushd executorch |   pushd executorch | ||||||
|   # Setup swiftshader and Vulkan SDK which are required to build the Vulkan delegate |   source .ci/scripts/utils.sh | ||||||
|   as_jenkins bash .ci/scripts/setup-vulkan-linux-deps.sh |  | ||||||
|  |  | ||||||
|   export PYTHON_EXECUTABLE=python |   install_flatc_from_source | ||||||
|   export EXECUTORCH_BUILD_PYBIND=ON |   pip_install . | ||||||
|   export CMAKE_ARGS="-DEXECUTORCH_BUILD_XNNPACK=ON -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON" |  | ||||||
|  |  | ||||||
|   as_jenkins .ci/scripts/setup-linux.sh cmake |   # Make sure that all the newly generate files are owned by Jenkins | ||||||
|  |   chown -R jenkins . | ||||||
|   popd |   popd | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,46 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh" |  | ||||||
|  |  | ||||||
| COMMIT=$(get_pinned_commit halide) |  | ||||||
| test -n "$COMMIT" |  | ||||||
|  |  | ||||||
| # activate conda to populate CONDA_PREFIX |  | ||||||
| test -n "$ANACONDA_PYTHON_VERSION" |  | ||||||
| eval "$(conda shell.bash hook)" |  | ||||||
| conda activate py_$ANACONDA_PYTHON_VERSION |  | ||||||
|  |  | ||||||
| if [ -n "${UBUNTU_VERSION}" ];then |  | ||||||
|     apt update |  | ||||||
|     apt-get install -y lld liblld-15-dev libpng-dev libjpeg-dev libgl-dev \ |  | ||||||
|                   libopenblas-dev libeigen3-dev libatlas-base-dev libzstd-dev |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| conda_install numpy scipy imageio cmake ninja |  | ||||||
|  |  | ||||||
| git clone --depth 1 --branch release/16.x --recursive https://github.com/llvm/llvm-project.git |  | ||||||
| cmake -DCMAKE_BUILD_TYPE=Release \ |  | ||||||
|         -DLLVM_ENABLE_PROJECTS="clang" \ |  | ||||||
|         -DLLVM_TARGETS_TO_BUILD="X86;NVPTX" \ |  | ||||||
|         -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ASSERTIONS=ON \ |  | ||||||
|         -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF \ |  | ||||||
|         -S llvm-project/llvm -B llvm-build -G Ninja |  | ||||||
| cmake --build llvm-build |  | ||||||
| cmake --install llvm-build --prefix llvm-install |  | ||||||
| export LLVM_ROOT=`pwd`/llvm-install |  | ||||||
| export LLVM_CONFIG=$LLVM_ROOT/bin/llvm-config |  | ||||||
|  |  | ||||||
| git clone https://github.com/halide/Halide.git |  | ||||||
| pushd Halide |  | ||||||
| git checkout ${COMMIT} && git submodule update --init --recursive |  | ||||||
| pip_install -r requirements.txt |  | ||||||
| cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -S . -B build |  | ||||||
| cmake --build build |  | ||||||
| test -e ${CONDA_PREFIX}/lib/python3 || ln -s python${ANACONDA_PYTHON_VERSION} ${CONDA_PREFIX}/lib/python3 |  | ||||||
| cmake --install build --prefix ${CONDA_PREFIX} |  | ||||||
| chown -R jenkins ${CONDA_PREFIX} |  | ||||||
| popd |  | ||||||
| rm -rf Halide llvm-build llvm-project llvm-install |  | ||||||
|  |  | ||||||
| python -c "import halide"  # check for errors |  | ||||||
| @ -1,23 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| LIBPNG_VERSION=1.6.37 |  | ||||||
|  |  | ||||||
| mkdir -p libpng |  | ||||||
| pushd libpng |  | ||||||
|  |  | ||||||
| wget http://download.sourceforge.net/libpng/libpng-$LIBPNG_VERSION.tar.gz |  | ||||||
| tar -xvzf libpng-$LIBPNG_VERSION.tar.gz |  | ||||||
|  |  | ||||||
| pushd libpng-$LIBPNG_VERSION |  | ||||||
|  |  | ||||||
| ./configure |  | ||||||
| make |  | ||||||
| make install |  | ||||||
|  |  | ||||||
| popd |  | ||||||
|  |  | ||||||
| popd |  | ||||||
| rm -rf libpng |  | ||||||
| @ -1,29 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -eou pipefail |  | ||||||
|  |  | ||||||
| MAGMA_VERSION="2.5.2" |  | ||||||
|  |  | ||||||
| function do_install() { |  | ||||||
|     cuda_version=$1 |  | ||||||
|     cuda_version_nodot=${1/./} |  | ||||||
|  |  | ||||||
|     MAGMA_VERSION="2.6.1" |  | ||||||
|     magma_archive="magma-cuda${cuda_version_nodot}-${MAGMA_VERSION}-1.tar.bz2" |  | ||||||
|  |  | ||||||
|     cuda_dir="/usr/local/cuda-${cuda_version}" |  | ||||||
|     ( |  | ||||||
|         set -x |  | ||||||
|         tmp_dir=$(mktemp -d) |  | ||||||
|         pushd ${tmp_dir} |  | ||||||
|         curl -OLs https://anaconda.org/pytorch/magma-cuda${cuda_version_nodot}/${MAGMA_VERSION}/download/linux-64/${magma_archive} |  | ||||||
|         tar -xvf "${magma_archive}" |  | ||||||
|         mkdir -p "${cuda_dir}/magma" |  | ||||||
|         mv include "${cuda_dir}/magma/include" |  | ||||||
|         mv lib "${cuda_dir}/magma/lib" |  | ||||||
|         popd |  | ||||||
|     ) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| do_install $1 |  | ||||||
| @ -1,134 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| ROCM_VERSION=$1 |  | ||||||
|  |  | ||||||
| if [[ -z $ROCM_VERSION ]]; then |  | ||||||
|     echo "missing ROCM_VERSION" |  | ||||||
|     exit 1; |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # To make version comparison easier, create an integer representation. |  | ||||||
| save_IFS="$IFS" |  | ||||||
| IFS=. ROCM_VERSION_ARRAY=(${ROCM_VERSION}) |  | ||||||
| IFS="$save_IFS" |  | ||||||
| if [[ ${#ROCM_VERSION_ARRAY[@]} == 2 ]]; then |  | ||||||
|     ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]} |  | ||||||
|     ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]} |  | ||||||
|     ROCM_VERSION_PATCH=0 |  | ||||||
| elif [[ ${#ROCM_VERSION_ARRAY[@]} == 3 ]]; then |  | ||||||
|     ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]} |  | ||||||
|     ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]} |  | ||||||
|     ROCM_VERSION_PATCH=${ROCM_VERSION_ARRAY[2]} |  | ||||||
| else |  | ||||||
|     echo "Unhandled ROCM_VERSION ${ROCM_VERSION}" |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| ROCM_INT=$(($ROCM_VERSION_MAJOR * 10000 + $ROCM_VERSION_MINOR * 100 + $ROCM_VERSION_PATCH)) |  | ||||||
|  |  | ||||||
| # Install custom MIOpen + COMgr for ROCm >= 4.0.1 |  | ||||||
| if [[ $ROCM_INT -lt 40001 ]]; then |  | ||||||
|     echo "ROCm version < 4.0.1; will not install custom MIOpen" |  | ||||||
|     exit 0 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Function to retry functions that sometimes timeout or have flaky failures |  | ||||||
| retry () { |  | ||||||
|     $*  || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Build custom MIOpen to use comgr for offline compilation. |  | ||||||
|  |  | ||||||
| ## Need a sanitized ROCM_VERSION without patchlevel; patchlevel version 0 must be added to paths. |  | ||||||
| ROCM_DOTS=$(echo ${ROCM_VERSION} | tr -d -c '.' | wc -c) |  | ||||||
| if [[ ${ROCM_DOTS} == 1 ]]; then |  | ||||||
|     ROCM_VERSION_NOPATCH="${ROCM_VERSION}" |  | ||||||
|     ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}.0" |  | ||||||
| else |  | ||||||
|     ROCM_VERSION_NOPATCH="${ROCM_VERSION%.*}" |  | ||||||
|     ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # MIOPEN_USE_HIP_KERNELS is a Workaround for COMgr issues |  | ||||||
| MIOPEN_CMAKE_COMMON_FLAGS=" |  | ||||||
| -DMIOPEN_USE_COMGR=ON |  | ||||||
| -DMIOPEN_BUILD_DRIVER=OFF |  | ||||||
| " |  | ||||||
| # Pull MIOpen repo and set DMIOPEN_EMBED_DB based on ROCm version |  | ||||||
| if [[ $ROCM_INT -ge 60100 ]] && [[ $ROCM_INT -lt 60200 ]]; then |  | ||||||
|     echo "ROCm 6.1 MIOpen does not need any patches, do not build from source" |  | ||||||
|     exit 0 |  | ||||||
| elif [[ $ROCM_INT -ge 60000 ]] && [[ $ROCM_INT -lt 60100 ]]; then |  | ||||||
|     echo "ROCm 6.0 MIOpen does not need any patches, do not build from source" |  | ||||||
|     exit 0 |  | ||||||
| elif [[ $ROCM_INT -ge 50700 ]] && [[ $ROCM_INT -lt 60000 ]]; then |  | ||||||
|     echo "ROCm 5.7 MIOpen does not need any patches, do not build from source" |  | ||||||
|     exit 0 |  | ||||||
| elif [[ $ROCM_INT -ge 50600 ]] && [[ $ROCM_INT -lt 50700 ]]; then |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.6-staging" |  | ||||||
| elif [[ $ROCM_INT -ge 50500 ]] && [[ $ROCM_INT -lt 50600 ]]; then |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.5-gfx11" |  | ||||||
| elif [[ $ROCM_INT -ge 50400 ]] && [[ $ROCM_INT -lt 50500 ]]; then |  | ||||||
|     MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36 -DMIOPEN_USE_MLIR=Off" |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.4-staging" |  | ||||||
| elif [[ $ROCM_INT -ge 50300 ]] && [[ $ROCM_INT -lt 50400 ]]; then |  | ||||||
|     MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36 -DMIOPEN_USE_MLIR=Off" |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.3-staging" |  | ||||||
| elif [[ $ROCM_INT -ge 50200 ]] && [[ $ROCM_INT -lt 50300 ]]; then |  | ||||||
|     MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36 -DMIOPEN_USE_MLIR=Off" |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.2-staging" |  | ||||||
| elif [[ $ROCM_INT -ge 50100 ]] && [[ $ROCM_INT -lt 50200 ]]; then |  | ||||||
|     MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36" |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.1-staging" |  | ||||||
| elif [[ $ROCM_INT -ge 50000 ]] && [[ $ROCM_INT -lt 50100 ]]; then |  | ||||||
|     MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36" |  | ||||||
|     MIOPEN_BRANCH="release/rocm-rel-5.0-staging" |  | ||||||
| else |  | ||||||
|     echo "Unhandled ROCM_VERSION ${ROCM_VERSION}" |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| yum remove -y miopen-hip |  | ||||||
|  |  | ||||||
| git clone https://github.com/ROCm/MIOpen -b ${MIOPEN_BRANCH} |  | ||||||
| pushd MIOpen |  | ||||||
| # remove .git to save disk space since CI runner was running out |  | ||||||
| rm -rf .git |  | ||||||
| # Don't build MLIR to save docker build time |  | ||||||
| # since we are disabling MLIR backend for MIOpen anyway |  | ||||||
| if [[ $ROCM_INT -ge 50400 ]] && [[ $ROCM_INT -lt 50500 ]]; then |  | ||||||
|     sed -i '/rocMLIR/d' requirements.txt |  | ||||||
| elif [[ $ROCM_INT -ge 50200 ]] && [[ $ROCM_INT -lt 50400 ]]; then |  | ||||||
|     sed -i '/llvm-project-mlir/d' requirements.txt |  | ||||||
| fi |  | ||||||
| ## MIOpen minimum requirements |  | ||||||
| cmake -P install_deps.cmake --minimum |  | ||||||
|  |  | ||||||
| # clean up since CI runner was running out of disk space |  | ||||||
| rm -rf /tmp/* |  | ||||||
| yum clean all |  | ||||||
| rm -rf /var/cache/yum |  | ||||||
| rm -rf /var/lib/yum/yumdb |  | ||||||
| rm -rf /var/lib/yum/history |  | ||||||
|  |  | ||||||
| ## Build MIOpen |  | ||||||
| mkdir -p build |  | ||||||
| cd build |  | ||||||
| PKG_CONFIG_PATH=/usr/local/lib/pkgconfig CXX=${ROCM_INSTALL_PATH}/llvm/bin/clang++ cmake .. \ |  | ||||||
|     ${MIOPEN_CMAKE_COMMON_FLAGS} \ |  | ||||||
|     ${MIOPEN_CMAKE_DB_FLAGS} \ |  | ||||||
|     -DCMAKE_PREFIX_PATH="${ROCM_INSTALL_PATH}/hip;${ROCM_INSTALL_PATH}" |  | ||||||
| make MIOpen -j $(nproc) |  | ||||||
|  |  | ||||||
| # Build MIOpen package |  | ||||||
| make -j $(nproc) package |  | ||||||
|  |  | ||||||
| # clean up since CI runner was running out of disk space |  | ||||||
| rm -rf /usr/local/cget |  | ||||||
|  |  | ||||||
| yum install -y miopen-*.rpm |  | ||||||
|  |  | ||||||
| popd |  | ||||||
| rm -rf MIOpen |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| # MKL |  | ||||||
| MKL_VERSION=2024.2.0 |  | ||||||
|  |  | ||||||
| MKLROOT=/opt/intel |  | ||||||
| mkdir -p ${MKLROOT} |  | ||||||
| pushd /tmp |  | ||||||
|  |  | ||||||
| python3 -mpip install wheel |  | ||||||
| python3 -mpip download -d . mkl-static==${MKL_VERSION} |  | ||||||
| python3 -m wheel unpack mkl_static-${MKL_VERSION}-py2.py3-none-manylinux1_x86_64.whl |  | ||||||
| python3 -m wheel unpack mkl_include-${MKL_VERSION}-py2.py3-none-manylinux1_x86_64.whl |  | ||||||
| mv mkl_static-${MKL_VERSION}/mkl_static-${MKL_VERSION}.data/data/lib ${MKLROOT} |  | ||||||
| mv mkl_include-${MKL_VERSION}/mkl_include-${MKL_VERSION}.data/data/include ${MKLROOT} |  | ||||||
| @ -1,13 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| mkdir -p /usr/local/mnist/ |  | ||||||
|  |  | ||||||
| cd /usr/local/mnist |  | ||||||
|  |  | ||||||
| for img in train-images-idx3-ubyte.gz train-labels-idx1-ubyte.gz t10k-images-idx3-ubyte.gz t10k-labels-idx1-ubyte.gz; do |  | ||||||
|   wget -q https://ossci-datasets.s3.amazonaws.com/mnist/$img |  | ||||||
|   gzip -d $img |  | ||||||
| done |  | ||||||
| @ -33,9 +33,7 @@ pip_install coloredlogs packaging | |||||||
| pip_install onnxruntime==1.18 | pip_install onnxruntime==1.18 | ||||||
| pip_install onnx==1.16.0 | pip_install onnx==1.16.0 | ||||||
| # pip_install "onnxscript@git+https://github.com/microsoft/onnxscript@3e869ef8ccf19b5ebd21c10d3e9c267c9a9fa729" --no-deps | # pip_install "onnxscript@git+https://github.com/microsoft/onnxscript@3e869ef8ccf19b5ebd21c10d3e9c267c9a9fa729" --no-deps | ||||||
| pip_install onnxscript==0.1.0.dev20240613 --no-deps | pip_install onnxscript==0.1.0.dev20240523 --no-deps | ||||||
| # required by onnxscript |  | ||||||
| pip_install ml_dtypes |  | ||||||
|  |  | ||||||
| # Cache the transformers model to be used later by ONNX tests. We need to run the transformers | # Cache the transformers model to be used later by ONNX tests. We need to run the transformers | ||||||
| # package to download the model. By default, the model is cached at ~/.cache/huggingface/hub/ | # package to download the model. By default, the model is cached at ~/.cache/huggingface/hub/ | ||||||
|  | |||||||
| @ -1,22 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| cd / |  | ||||||
| git clone https://github.com/OpenMathLib/OpenBLAS.git -b v0.3.25 --depth 1 --shallow-submodules |  | ||||||
|  |  | ||||||
|  |  | ||||||
| OPENBLAS_BUILD_FLAGS=" |  | ||||||
| NUM_THREADS=128 |  | ||||||
| USE_OPENMP=1 |  | ||||||
| NO_SHARED=0 |  | ||||||
| DYNAMIC_ARCH=1 |  | ||||||
| TARGET=ARMV8 |  | ||||||
| CFLAGS=-O3 |  | ||||||
| " |  | ||||||
|  |  | ||||||
| OPENBLAS_CHECKOUT_DIR="OpenBLAS" |  | ||||||
|  |  | ||||||
| make -j8 ${OPENBLAS_BUILD_FLAGS} -C ${OPENBLAS_CHECKOUT_DIR} |  | ||||||
| make -j8 ${OPENBLAS_BUILD_FLAGS} install -C ${OPENBLAS_CHECKOUT_DIR} |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| # Pin the version to latest release 0.17.2, building newer commit starts |  | ||||||
| # to fail on the current image |  | ||||||
| git clone -b 0.17.2 --single-branch https://github.com/NixOS/patchelf |  | ||||||
| cd patchelf |  | ||||||
| sed -i 's/serial/parallel/g' configure.ac |  | ||||||
| ./bootstrap.sh |  | ||||||
| ./configure |  | ||||||
| make |  | ||||||
| make install |  | ||||||
| cd .. |  | ||||||
| rm -rf patchelf |  | ||||||
| @ -1,150 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| ########################### |  | ||||||
| ### prereqs |  | ||||||
| ########################### |  | ||||||
| # Install Python packages depending on the base OS |  | ||||||
| ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') |  | ||||||
| case "$ID" in |  | ||||||
|   ubuntu) |  | ||||||
|     apt-get update -y |  | ||||||
|     apt-get install -y libpciaccess-dev pkg-config |  | ||||||
|     apt-get clean |  | ||||||
|     ;; |  | ||||||
|   centos) |  | ||||||
|     yum install -y libpciaccess-devel pkgconfig |  | ||||||
|     ;; |  | ||||||
|   *) |  | ||||||
|     echo "Unable to determine OS..." |  | ||||||
|     exit 1 |  | ||||||
|     ;; |  | ||||||
| esac |  | ||||||
| python3 -m pip install meson ninja |  | ||||||
|  |  | ||||||
| ########################### |  | ||||||
| ### clone repo |  | ||||||
| ########################### |  | ||||||
| GIT_SSL_NO_VERIFY=true git clone https://gitlab.freedesktop.org/mesa/drm.git |  | ||||||
| pushd drm |  | ||||||
|  |  | ||||||
| ########################### |  | ||||||
| ### patch |  | ||||||
| ########################### |  | ||||||
| patch -p1 <<'EOF' |  | ||||||
| diff --git a/amdgpu/amdgpu_asic_id.c b/amdgpu/amdgpu_asic_id.c |  | ||||||
| index a5007ffc..13fa07fc 100644 |  | ||||||
| --- a/amdgpu/amdgpu_asic_id.c |  | ||||||
| +++ b/amdgpu/amdgpu_asic_id.c |  | ||||||
| @@ -22,6 +22,13 @@ |  | ||||||
|   * |  | ||||||
|   */ |  | ||||||
|  |  | ||||||
| +#define _XOPEN_SOURCE 700 |  | ||||||
| +#define _LARGEFILE64_SOURCE |  | ||||||
| +#define _FILE_OFFSET_BITS 64 |  | ||||||
| +#include <ftw.h> |  | ||||||
| +#include <link.h> |  | ||||||
| +#include <limits.h> |  | ||||||
| + |  | ||||||
|  #include <ctype.h> |  | ||||||
|  #include <stdio.h> |  | ||||||
|  #include <stdlib.h> |  | ||||||
| @@ -34,6 +41,19 @@ |  | ||||||
|  #include "amdgpu_drm.h" |  | ||||||
|  #include "amdgpu_internal.h" |  | ||||||
|  |  | ||||||
| +static char *amdgpuids_path = NULL; |  | ||||||
| +static const char* amdgpuids_path_msg = NULL; |  | ||||||
| + |  | ||||||
| +static int check_for_location_of_amdgpuids(const char *filepath, const struct stat *info, const int typeflag, struct FTW *pathinfo) |  | ||||||
| +{ |  | ||||||
| +	if (typeflag == FTW_F && strstr(filepath, "amdgpu.ids")) { |  | ||||||
| +		amdgpuids_path = strdup(filepath); |  | ||||||
| +		return 1; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  static int parse_one_line(struct amdgpu_device *dev, const char *line) |  | ||||||
|  { |  | ||||||
|  	char *buf, *saveptr; |  | ||||||
| @@ -113,10 +133,46 @@ void amdgpu_parse_asic_ids(struct amdgpu_device *dev) |  | ||||||
|  	int line_num = 1; |  | ||||||
|  	int r = 0; |  | ||||||
|  |  | ||||||
| +	// attempt to find typical location for amdgpu.ids file |  | ||||||
|  	fp = fopen(AMDGPU_ASIC_ID_TABLE, "r"); |  | ||||||
| + |  | ||||||
| +	// if it doesn't exist, search |  | ||||||
| +	if (!fp) { |  | ||||||
| + |  | ||||||
| +	char self_path[ PATH_MAX ]; |  | ||||||
| +	ssize_t count; |  | ||||||
| +	ssize_t i; |  | ||||||
| + |  | ||||||
| +	count = readlink( "/proc/self/exe", self_path, PATH_MAX ); |  | ||||||
| +	if (count > 0) { |  | ||||||
| +		self_path[count] = '\0'; |  | ||||||
| + |  | ||||||
| +		// remove '/bin/python' from self_path |  | ||||||
| +		for (i=count; i>0; --i) { |  | ||||||
| +			if (self_path[i] == '/') break; |  | ||||||
| +			self_path[i] = '\0'; |  | ||||||
| +		} |  | ||||||
| +		self_path[i] = '\0'; |  | ||||||
| +		for (; i>0; --i) { |  | ||||||
| +			if (self_path[i] == '/') break; |  | ||||||
| +			self_path[i] = '\0'; |  | ||||||
| +		} |  | ||||||
| +		self_path[i] = '\0'; |  | ||||||
| + |  | ||||||
| +		if (1 == nftw(self_path, check_for_location_of_amdgpuids, 5, FTW_PHYS)) { |  | ||||||
| +			fp = fopen(amdgpuids_path, "r"); |  | ||||||
| +			amdgpuids_path_msg = amdgpuids_path; |  | ||||||
| +		} |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	} |  | ||||||
| +	else { |  | ||||||
| +		amdgpuids_path_msg = AMDGPU_ASIC_ID_TABLE; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	// both hard-coded location and search have failed |  | ||||||
|  	if (!fp) { |  | ||||||
| -		fprintf(stderr, "%s: %s\n", AMDGPU_ASIC_ID_TABLE, |  | ||||||
| -			strerror(errno)); |  | ||||||
| +		fprintf(stderr, "amdgpu.ids: No such file or directory\n"); |  | ||||||
|  		return; |  | ||||||
|  	} |  | ||||||
|  |  | ||||||
| @@ -132,7 +188,7 @@ void amdgpu_parse_asic_ids(struct amdgpu_device *dev) |  | ||||||
|  			continue; |  | ||||||
|  		} |  | ||||||
|  |  | ||||||
| -		drmMsg("%s version: %s\n", AMDGPU_ASIC_ID_TABLE, line); |  | ||||||
| +		drmMsg("%s version: %s\n", amdgpuids_path_msg, line); |  | ||||||
|  		break; |  | ||||||
|  	} |  | ||||||
|  |  | ||||||
| @@ -150,7 +206,7 @@ void amdgpu_parse_asic_ids(struct amdgpu_device *dev) |  | ||||||
|  |  | ||||||
|  	if (r == -EINVAL) { |  | ||||||
|  		fprintf(stderr, "Invalid format: %s: line %d: %s\n", |  | ||||||
| -			AMDGPU_ASIC_ID_TABLE, line_num, line); |  | ||||||
| +			amdgpuids_path_msg, line_num, line); |  | ||||||
|  	} else if (r && r != -EAGAIN) { |  | ||||||
|  		fprintf(stderr, "%s: Cannot parse ASIC IDs: %s\n", |  | ||||||
|  			__func__, strerror(-r)); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| ########################### |  | ||||||
| ### build |  | ||||||
| ########################### |  | ||||||
| meson builddir --prefix=/opt/amdgpu |  | ||||||
| pushd builddir |  | ||||||
| ninja install |  | ||||||
|  |  | ||||||
| popd |  | ||||||
| popd |  | ||||||
| @ -1,11 +1,7 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Script used in CI and CD pipeline |  | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
|  |  | ||||||
|  |  | ||||||
| MKLROOT=${MKLROOT:-/opt/conda/envs/py_$ANACONDA_PYTHON_VERSION} |  | ||||||
|  |  | ||||||
| # "install" hipMAGMA into /opt/rocm/magma by copying after build | # "install" hipMAGMA into /opt/rocm/magma by copying after build | ||||||
| git clone https://bitbucket.org/icl/magma.git | git clone https://bitbucket.org/icl/magma.git | ||||||
| pushd magma | pushd magma | ||||||
| @ -15,10 +11,7 @@ git checkout a1625ff4d9bc362906bd01f805dbbe12612953f6 | |||||||
|  |  | ||||||
| cp make.inc-examples/make.inc.hip-gcc-mkl make.inc | cp make.inc-examples/make.inc.hip-gcc-mkl make.inc | ||||||
| echo 'LIBDIR += -L$(MKLROOT)/lib' >> make.inc | echo 'LIBDIR += -L$(MKLROOT)/lib' >> make.inc | ||||||
| if [[ -f "${MKLROOT}/lib/libmkl_core.a" ]]; then | echo 'LIB += -Wl,--enable-new-dtags -Wl,--rpath,/opt/rocm/lib -Wl,--rpath,$(MKLROOT)/lib -Wl,--rpath,/opt/rocm/magma/lib' >> make.inc | ||||||
|     echo 'LIB = -Wl,--start-group -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -Wl,--end-group -lpthread -lstdc++ -lm -lgomp -lhipblas -lhipsparse' >> make.inc |  | ||||||
| fi |  | ||||||
| echo 'LIB += -Wl,--enable-new-dtags -Wl,--rpath,/opt/rocm/lib -Wl,--rpath,$(MKLROOT)/lib -Wl,--rpath,/opt/rocm/magma/lib -ldl' >> make.inc |  | ||||||
| echo 'DEVCCFLAGS += --gpu-max-threads-per-block=256' >> make.inc | echo 'DEVCCFLAGS += --gpu-max-threads-per-block=256' >> make.inc | ||||||
| export PATH="${PATH}:/opt/rocm/bin" | export PATH="${PATH}:/opt/rocm/bin" | ||||||
| if [[ -n "$PYTORCH_ROCM_ARCH" ]]; then | if [[ -n "$PYTORCH_ROCM_ARCH" ]]; then | ||||||
| @ -32,7 +25,7 @@ done | |||||||
| # hipcc with openmp flag may cause isnan() on __device__ not to be found; depending on context, compiler may attempt to match with host definition | # hipcc with openmp flag may cause isnan() on __device__ not to be found; depending on context, compiler may attempt to match with host definition | ||||||
| sed -i 's/^FOPENMP/#FOPENMP/g' make.inc | sed -i 's/^FOPENMP/#FOPENMP/g' make.inc | ||||||
| make -f make.gen.hipMAGMA -j $(nproc) | make -f make.gen.hipMAGMA -j $(nproc) | ||||||
| LANG=C.UTF-8 make lib/libmagma.so -j $(nproc) MKLROOT="${MKLROOT}" | LANG=C.UTF-8 make lib/libmagma.so -j $(nproc) MKLROOT=/opt/conda/envs/py_$ANACONDA_PYTHON_VERSION | ||||||
| make testing/testing_dgemm -j $(nproc) MKLROOT="${MKLROOT}" | make testing/testing_dgemm -j $(nproc) MKLROOT=/opt/conda/envs/py_$ANACONDA_PYTHON_VERSION | ||||||
| popd | popd | ||||||
| mv magma /opt/rocm | mv magma /opt/rocm | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| set -xe | set -xe | ||||||
| # Script used in CI and CD pipeline |  | ||||||
|  |  | ||||||
| # Intel® software for general purpose GPU capabilities. | # Intel® software for general purpose GPU capabilities. | ||||||
| # Refer to https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpus.html | # Refer to https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpus.html | ||||||
| @ -8,23 +8,19 @@ set -xe | |||||||
| # Users should update to the latest version as it becomes available | # Users should update to the latest version as it becomes available | ||||||
|  |  | ||||||
| function install_ubuntu() { | function install_ubuntu() { | ||||||
|     . /etc/os-release |  | ||||||
|     if [[ ! " jammy " =~ " ${VERSION_CODENAME} " ]]; then |  | ||||||
|         echo "Ubuntu version ${VERSION_CODENAME} not supported" |  | ||||||
|         exit |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     apt-get update -y |     apt-get update -y | ||||||
|     apt-get install -y gpg-agent wget |     apt-get install -y gpg-agent wget | ||||||
|     # To add the online network package repository for the GPU Driver LTS releases |  | ||||||
|  |     # Set up the repository. To do this, download the key to the system keyring | ||||||
|     wget -qO - https://repositories.intel.com/gpu/intel-graphics.key \ |     wget -qO - https://repositories.intel.com/gpu/intel-graphics.key \ | ||||||
|         | gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg |         | gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg | ||||||
|  |     wget -qO - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ | ||||||
|  |         | gpg --dearmor --output /usr/share/keyrings/intel-for-pytorch-gpu-dev-keyring.gpg | ||||||
|  |  | ||||||
|  |     # Add the signed entry to APT sources and configure the APT client to use the Intel repository | ||||||
|     echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] \ |     echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] \ | ||||||
|         https://repositories.intel.com/gpu/ubuntu ${VERSION_CODENAME}/lts/2350 unified" \ |         https://repositories.intel.com/gpu/ubuntu jammy/lts/2350 unified" \ | ||||||
|         | tee /etc/apt/sources.list.d/intel-gpu-${VERSION_CODENAME}.list |         | tee /etc/apt/sources.list.d/intel-gpu-jammy.list | ||||||
|     # To add the online network network package repository for the Intel Support Packages |  | ||||||
|     wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ |  | ||||||
|         | gpg --dearmor > /usr/share/keyrings/intel-for-pytorch-gpu-dev-keyring.gpg |  | ||||||
|     echo "deb [signed-by=/usr/share/keyrings/intel-for-pytorch-gpu-dev-keyring.gpg] \ |     echo "deb [signed-by=/usr/share/keyrings/intel-for-pytorch-gpu-dev-keyring.gpg] \ | ||||||
|         https://apt.repos.intel.com/intel-for-pytorch-gpu-dev all main" \ |         https://apt.repos.intel.com/intel-for-pytorch-gpu-dev all main" \ | ||||||
|         | tee /etc/apt/sources.list.d/intel-for-pytorch-gpu-dev.list |         | tee /etc/apt/sources.list.d/intel-for-pytorch-gpu-dev.list | ||||||
| @ -101,86 +97,6 @@ EOF | |||||||
|     rm -rf /var/lib/yum/history |     rm -rf /var/lib/yum/history | ||||||
| } | } | ||||||
|  |  | ||||||
| function install_rhel() { |  | ||||||
|     . /etc/os-release |  | ||||||
|     if [[ "${ID}" == "rhel" ]]; then |  | ||||||
|         if [[ ! " 8.6 8.8 8.9 9.0 9.2 9.3 " =~ " ${VERSION_ID} " ]]; then |  | ||||||
|             echo "RHEL version ${VERSION_ID} not supported" |  | ||||||
|             exit |  | ||||||
|         fi |  | ||||||
|     elif [[ "${ID}" == "almalinux" ]]; then |  | ||||||
|         # Workaround for almalinux8 which used by quay.io/pypa/manylinux_2_28_x86_64 |  | ||||||
|         VERSION_ID="8.6" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     dnf install -y 'dnf-command(config-manager)' |  | ||||||
|     # To add the online network package repository for the GPU Driver LTS releases |  | ||||||
|     dnf config-manager --add-repo \ |  | ||||||
|         https://repositories.intel.com/gpu/rhel/${VERSION_ID}/lts/2350/unified/intel-gpu-${VERSION_ID}.repo |  | ||||||
|     # To add the online network network package repository for the Intel Support Packages |  | ||||||
|     tee > /etc/yum.repos.d/intel-for-pytorch-gpu-dev.repo << EOF |  | ||||||
| [intel-for-pytorch-gpu-dev] |  | ||||||
| name=Intel for Pytorch GPU dev repository |  | ||||||
| baseurl=https://yum.repos.intel.com/intel-for-pytorch-gpu-dev |  | ||||||
| enabled=1 |  | ||||||
| gpgcheck=1 |  | ||||||
| repo_gpgcheck=1 |  | ||||||
| gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
|     # The xpu-smi packages |  | ||||||
|     dnf install -y xpu-smi |  | ||||||
|     # Compute and Media Runtimes |  | ||||||
|     dnf install -y \ |  | ||||||
|         intel-opencl intel-media intel-mediasdk libmfxgen1 libvpl2\ |  | ||||||
|         level-zero intel-level-zero-gpu mesa-dri-drivers mesa-vulkan-drivers \ |  | ||||||
|         mesa-vdpau-drivers libdrm mesa-libEGL mesa-libgbm mesa-libGL \ |  | ||||||
|         mesa-libxatracker libvpl-tools intel-metrics-discovery \ |  | ||||||
|         intel-metrics-library intel-igc-core intel-igc-cm \ |  | ||||||
|         libva libva-utils intel-gmmlib libmetee intel-gsc intel-ocloc |  | ||||||
|     # Development packages |  | ||||||
|     dnf install -y --refresh \ |  | ||||||
|         intel-igc-opencl-devel level-zero-devel intel-gsc-devel libmetee-devel \ |  | ||||||
|         level-zero-devel |  | ||||||
|     # Install Intel Support Packages |  | ||||||
|     yum install -y intel-for-pytorch-gpu-dev intel-pti-dev |  | ||||||
|  |  | ||||||
|     # Cleanup |  | ||||||
|     dnf clean all |  | ||||||
|     rm -rf /var/cache/yum |  | ||||||
|     rm -rf /var/lib/yum/yumdb |  | ||||||
|     rm -rf /var/lib/yum/history |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function install_sles() { |  | ||||||
|     . /etc/os-release |  | ||||||
|     VERSION_SP=${VERSION_ID//./sp} |  | ||||||
|     if [[ ! " 15sp4 15sp5 " =~ " ${VERSION_SP} " ]]; then |  | ||||||
|         echo "SLES version ${VERSION_ID} not supported" |  | ||||||
|         exit |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # To add the online network package repository for the GPU Driver LTS releases |  | ||||||
|     zypper addrepo -f -r \ |  | ||||||
|         https://repositories.intel.com/gpu/sles/${VERSION_SP}/lts/2350/unified/intel-gpu-${VERSION_SP}.repo |  | ||||||
|     rpm --import https://repositories.intel.com/gpu/intel-graphics.key |  | ||||||
|     # To add the online network network package repository for the Intel Support Packages |  | ||||||
|     zypper addrepo https://yum.repos.intel.com/intel-for-pytorch-gpu-dev intel-for-pytorch-gpu-dev |  | ||||||
|     rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB |  | ||||||
|  |  | ||||||
|     # The xpu-smi packages |  | ||||||
|     zypper install -y lsb-release flex bison xpu-smi |  | ||||||
|     # Compute and Media Runtimes |  | ||||||
|     zypper install -y intel-level-zero-gpu level-zero intel-gsc intel-opencl intel-ocloc \ |  | ||||||
|         intel-media-driver libigfxcmrt7 libvpl2 libvpl-tools libmfxgen1 libmfx1 |  | ||||||
|     # Development packages |  | ||||||
|     zypper install -y libigdfcl-devel intel-igc-cm libigfxcmrt-devel level-zero-devel |  | ||||||
|  |  | ||||||
|     # Install Intel Support Packages |  | ||||||
|     zypper install -y intel-for-pytorch-gpu-dev intel-pti-dev |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # The installation depends on the base OS | # The installation depends on the base OS | ||||||
| ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') | ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') | ||||||
| @ -191,12 +107,6 @@ case "$ID" in | |||||||
|     centos) |     centos) | ||||||
|         install_centos |         install_centos | ||||||
|     ;; |     ;; | ||||||
|     rhel|almalinux) |  | ||||||
|         install_rhel |  | ||||||
|     ;; |  | ||||||
|     sles) |  | ||||||
|         install_sles |  | ||||||
|     ;; |  | ||||||
|     *) |     *) | ||||||
|         echo "Unable to determine OS..." |         echo "Unable to determine OS..." | ||||||
|         exit 1 |         exit 1 | ||||||
|  | |||||||
| @ -1,100 +0,0 @@ | |||||||
| ARG CUDA_VERSION=10.2 |  | ||||||
| ARG BASE_TARGET=cuda${CUDA_VERSION} |  | ||||||
| FROM centos:7 as base |  | ||||||
|  |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
|  |  | ||||||
| ARG DEVTOOLSET_VERSION=9 |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN yum update -y |  | ||||||
| RUN yum install -y wget curl perl util-linux xz bzip2 git patch which unzip |  | ||||||
| # Just add everything as a safe.directory for git since these will be used in multiple places with git |  | ||||||
| RUN git config --global --add safe.directory '*' |  | ||||||
| RUN yum install -y yum-utils centos-release-scl |  | ||||||
| RUN yum-config-manager --enable rhel-server-rhscl-7-rpms |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN yum install -y devtoolset-${DEVTOOLSET_VERSION}-gcc devtoolset-${DEVTOOLSET_VERSION}-gcc-c++ devtoolset-${DEVTOOLSET_VERSION}-gcc-gfortran devtoolset-${DEVTOOLSET_VERSION}-binutils |  | ||||||
| # EPEL for cmake |  | ||||||
| RUN yum --enablerepo=extras install -y epel-release |  | ||||||
|  |  | ||||||
| # cmake |  | ||||||
| RUN yum install -y cmake3 && \ |  | ||||||
|     ln -s /usr/bin/cmake3 /usr/bin/cmake |  | ||||||
| ENV PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| RUN yum install -y autoconf aclocal automake make sudo |  | ||||||
| RUN rm -rf /usr/local/cuda-* |  | ||||||
|  |  | ||||||
| FROM base as patchelf |  | ||||||
| # Install patchelf |  | ||||||
| ADD ./common/install_patchelf.sh install_patchelf.sh |  | ||||||
| RUN bash ./install_patchelf.sh && rm install_patchelf.sh && cp $(which patchelf) /patchelf |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
|  |  | ||||||
| FROM base as conda |  | ||||||
| # Install Anaconda |  | ||||||
| ADD ./common/install_conda_docker.sh install_conda.sh |  | ||||||
| RUN bash ./install_conda.sh && rm install_conda.sh |  | ||||||
|  |  | ||||||
| # Install CUDA |  | ||||||
| FROM base as cuda |  | ||||||
| ARG CUDA_VERSION=10.2 |  | ||||||
| RUN rm -rf /usr/local/cuda-* |  | ||||||
| ADD ./common/install_cuda.sh install_cuda.sh |  | ||||||
| ENV CUDA_HOME=/usr/local/cuda-${CUDA_VERSION} |  | ||||||
| # Preserve CUDA_VERSION for the builds |  | ||||||
| ENV CUDA_VERSION=${CUDA_VERSION} |  | ||||||
| # Make things in our path by default |  | ||||||
| ENV PATH=/usr/local/cuda-${CUDA_VERSION}/bin:$PATH |  | ||||||
|  |  | ||||||
| FROM cuda as cuda11.8 |  | ||||||
| RUN bash ./install_cuda.sh 11.8 |  | ||||||
| ENV DESIRED_CUDA=11.8 |  | ||||||
|  |  | ||||||
| FROM cuda as cuda12.1 |  | ||||||
| RUN bash ./install_cuda.sh 12.1 |  | ||||||
| ENV DESIRED_CUDA=12.1 |  | ||||||
|  |  | ||||||
| FROM cuda as cuda12.4 |  | ||||||
| RUN bash ./install_cuda.sh 12.4 |  | ||||||
| ENV DESIRED_CUDA=12.4 |  | ||||||
|  |  | ||||||
| # Install MNIST test data |  | ||||||
| FROM base as mnist |  | ||||||
| ADD ./common/install_mnist.sh install_mnist.sh |  | ||||||
| RUN bash ./install_mnist.sh |  | ||||||
|  |  | ||||||
| FROM base as all_cuda |  | ||||||
| COPY --from=cuda11.8  /usr/local/cuda-11.8 /usr/local/cuda-11.8 |  | ||||||
| COPY --from=cuda12.1  /usr/local/cuda-12.1 /usr/local/cuda-12.1 |  | ||||||
| COPY --from=cuda12.4  /usr/local/cuda-12.4 /usr/local/cuda-12.4 |  | ||||||
|  |  | ||||||
| # Final step |  | ||||||
| FROM ${BASE_TARGET} as final |  | ||||||
| COPY --from=openssl            /opt/openssl           /opt/openssl |  | ||||||
| COPY --from=patchelf           /patchelf              /usr/local/bin/patchelf |  | ||||||
| COPY --from=conda              /opt/conda             /opt/conda |  | ||||||
|  |  | ||||||
| # Add jni.h for java host build. |  | ||||||
| COPY ./common/install_jni.sh install_jni.sh |  | ||||||
| COPY ./java/jni.h jni.h |  | ||||||
| RUN bash ./install_jni.sh && rm install_jni.sh |  | ||||||
|  |  | ||||||
| ENV  PATH /opt/conda/bin:$PATH |  | ||||||
| COPY --from=mnist  /usr/local/mnist /usr/local/mnist |  | ||||||
| RUN rm -rf /usr/local/cuda |  | ||||||
| RUN chmod o+rw /usr/local |  | ||||||
| RUN touch /.condarc && \ |  | ||||||
|     chmod o+rw /.condarc && \ |  | ||||||
|     chmod -R o+rw /opt/conda |  | ||||||
| @ -1,76 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -eou pipefail |  | ||||||
|  |  | ||||||
| image="$1" |  | ||||||
| shift |  | ||||||
|  |  | ||||||
| if [ -z "${image}" ]; then |  | ||||||
|   echo "Usage: $0 IMAGE" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| DOCKER_IMAGE_NAME="pytorch/${image}" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| export DOCKER_BUILDKIT=1 |  | ||||||
| TOPDIR=$(git rev-parse --show-toplevel) |  | ||||||
|  |  | ||||||
| CUDA_VERSION=${CUDA_VERSION:-12.1} |  | ||||||
|  |  | ||||||
| case ${CUDA_VERSION} in |  | ||||||
|   cpu) |  | ||||||
|     BASE_TARGET=base |  | ||||||
|     DOCKER_TAG=cpu |  | ||||||
|     ;; |  | ||||||
|   all) |  | ||||||
|     BASE_TARGET=all_cuda |  | ||||||
|     DOCKER_TAG=latest |  | ||||||
|     ;; |  | ||||||
|   *) |  | ||||||
|     BASE_TARGET=cuda${CUDA_VERSION} |  | ||||||
|     DOCKER_TAG=cuda${CUDA_VERSION} |  | ||||||
|     ;; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ( |  | ||||||
|   set -x |  | ||||||
|   docker build \ |  | ||||||
|     --target final \ |  | ||||||
|     --progress plain \ |  | ||||||
|     --build-arg "BASE_TARGET=${BASE_TARGET}" \ |  | ||||||
|     --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ |  | ||||||
|     --build-arg "DEVTOOLSET_VERSION=9" \ |  | ||||||
|     -t ${DOCKER_IMAGE_NAME} \ |  | ||||||
|     $@ \ |  | ||||||
|     -f "${TOPDIR}/.ci/docker/conda/Dockerfile" \ |  | ||||||
|     ${TOPDIR}/.ci/docker/ |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| if [[ "${DOCKER_TAG}" =~ ^cuda* ]]; then |  | ||||||
|   # Test that we're using the right CUDA compiler |  | ||||||
|   ( |  | ||||||
|     set -x |  | ||||||
|     docker run --rm "${DOCKER_IMAGE_NAME}" nvcc --version | grep "cuda_${CUDA_VERSION}" |  | ||||||
|   ) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| GITHUB_REF=${GITHUB_REF:-$(git symbolic-ref -q HEAD || git describe --tags --exact-match)} |  | ||||||
| GIT_BRANCH_NAME=${GITHUB_REF##*/} |  | ||||||
| GIT_COMMIT_SHA=${GITHUB_SHA:-$(git rev-parse HEAD)} |  | ||||||
| DOCKER_IMAGE_BRANCH_TAG=${DOCKER_IMAGE_NAME}-${GIT_BRANCH_NAME} |  | ||||||
| DOCKER_IMAGE_SHA_TAG=${DOCKER_IMAGE_NAME}-${GIT_COMMIT_SHA} |  | ||||||
| if [[ "${WITH_PUSH:-}" == true ]]; then |  | ||||||
|   ( |  | ||||||
|     set -x |  | ||||||
|     docker push "${DOCKER_IMAGE_NAME}" |  | ||||||
|     if [[ -n ${GITHUB_REF} ]]; then |  | ||||||
|         docker tag ${DOCKER_IMAGE_NAME} ${DOCKER_IMAGE_BRANCH_TAG} |  | ||||||
|         docker tag ${DOCKER_IMAGE_NAME} ${DOCKER_IMAGE_SHA_TAG} |  | ||||||
|         docker push "${DOCKER_IMAGE_BRANCH_TAG}" |  | ||||||
|         docker push "${DOCKER_IMAGE_SHA_TAG}" |  | ||||||
|     fi |  | ||||||
|   ) |  | ||||||
| fi |  | ||||||
| @ -1,107 +0,0 @@ | |||||||
| ARG BASE_TARGET=base |  | ||||||
| ARG GPU_IMAGE=ubuntu:20.04 |  | ||||||
| FROM ${GPU_IMAGE} as base |  | ||||||
|  |  | ||||||
| ENV DEBIAN_FRONTEND=noninteractive |  | ||||||
|  |  | ||||||
| RUN apt-get clean && apt-get update |  | ||||||
| RUN apt-get install -y curl locales g++ git-all autoconf automake make cmake wget unzip sudo |  | ||||||
| # Just add everything as a safe.directory for git since these will be used in multiple places with git |  | ||||||
| RUN git config --global --add safe.directory '*' |  | ||||||
|  |  | ||||||
| RUN locale-gen en_US.UTF-8 |  | ||||||
|  |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
|  |  | ||||||
| # Install openssl |  | ||||||
| FROM base as openssl |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
|  |  | ||||||
| # Install python |  | ||||||
| FROM base as python |  | ||||||
| ADD common/install_cpython.sh install_cpython.sh |  | ||||||
| RUN apt-get update -y && \ |  | ||||||
|     apt-get install build-essential gdb lcov libbz2-dev libffi-dev \ |  | ||||||
|         libgdbm-dev liblzma-dev libncurses5-dev libreadline6-dev \ |  | ||||||
|         libsqlite3-dev libssl-dev lzma lzma-dev tk-dev uuid-dev zlib1g-dev -y && \ |  | ||||||
|     bash ./install_cpython.sh && \ |  | ||||||
|     rm install_cpython.sh && \ |  | ||||||
|     apt-get clean |  | ||||||
|  |  | ||||||
| FROM base as conda |  | ||||||
| ADD ./common/install_conda_docker.sh install_conda.sh |  | ||||||
| RUN bash ./install_conda.sh && rm install_conda.sh |  | ||||||
|  |  | ||||||
| FROM base as cpu |  | ||||||
| # Install Anaconda |  | ||||||
| COPY --from=conda /opt/conda /opt/conda |  | ||||||
| # Install python |  | ||||||
| COPY --from=python /opt/python    /opt/python |  | ||||||
| COPY --from=python /opt/_internal /opt/_internal |  | ||||||
| ENV PATH=/opt/conda/bin:/usr/local/cuda/bin:$PATH |  | ||||||
| # Install MKL |  | ||||||
| ADD ./common/install_mkl.sh install_mkl.sh |  | ||||||
| RUN bash ./install_mkl.sh && rm install_mkl.sh |  | ||||||
|  |  | ||||||
| FROM cpu as cuda |  | ||||||
| ADD ./common/install_cuda.sh install_cuda.sh |  | ||||||
| ADD ./common/install_magma.sh install_magma.sh |  | ||||||
| ENV CUDA_HOME /usr/local/cuda |  | ||||||
|  |  | ||||||
| FROM cuda as cuda11.8 |  | ||||||
| RUN bash ./install_cuda.sh 11.8 |  | ||||||
| RUN bash ./install_magma.sh 11.8 |  | ||||||
| RUN ln -sf /usr/local/cuda-11.8 /usr/local/cuda |  | ||||||
|  |  | ||||||
| FROM cuda as cuda12.1 |  | ||||||
| RUN bash ./install_cuda.sh 12.1 |  | ||||||
| RUN bash ./install_magma.sh 12.1 |  | ||||||
| RUN ln -sf /usr/local/cuda-12.1 /usr/local/cuda |  | ||||||
|  |  | ||||||
| FROM cuda as cuda12.4 |  | ||||||
| RUN bash ./install_cuda.sh 12.4 |  | ||||||
| RUN bash ./install_magma.sh 12.4 |  | ||||||
| RUN ln -sf /usr/local/cuda-12.4 /usr/local/cuda |  | ||||||
|  |  | ||||||
| FROM cpu as rocm |  | ||||||
| ARG PYTORCH_ROCM_ARCH |  | ||||||
| ENV PYTORCH_ROCM_ARCH ${PYTORCH_ROCM_ARCH} |  | ||||||
| ENV MKLROOT /opt/intel |  | ||||||
| # Adding ROCM_PATH env var so that LoadHip.cmake (even with logic updated for ROCm6.0) |  | ||||||
| # find HIP works for ROCm5.7. Not needed for ROCm6.0 and above. |  | ||||||
| # Remove below when ROCm5.7 is not in support matrix anymore. |  | ||||||
| ENV ROCM_PATH /opt/rocm |  | ||||||
| # No need to install ROCm as base docker image should have full ROCm install |  | ||||||
| #ADD ./common/install_rocm.sh install_rocm.sh |  | ||||||
| ADD ./common/install_rocm_drm.sh install_rocm_drm.sh |  | ||||||
| ADD ./common/install_rocm_magma.sh install_rocm_magma.sh |  | ||||||
| # gfortran and python needed for building magma from source for ROCm |  | ||||||
| RUN apt-get update -y && \ |  | ||||||
|     apt-get install gfortran -y && \ |  | ||||||
|     apt-get install python -y && \ |  | ||||||
|     apt-get clean |  | ||||||
|  |  | ||||||
| RUN bash ./install_rocm_drm.sh && rm install_rocm_drm.sh |  | ||||||
| RUN bash ./install_rocm_magma.sh && rm install_rocm_magma.sh |  | ||||||
|  |  | ||||||
| # Install AOTriton |  | ||||||
| COPY ./common/common_utils.sh common_utils.sh |  | ||||||
| COPY ./common/aotriton_version.txt aotriton_version.txt |  | ||||||
| COPY ./common/install_aotriton.sh install_aotriton.sh |  | ||||||
| RUN bash ./install_aotriton.sh /opt/rocm && rm install_aotriton.sh aotriton_version.txt |  | ||||||
| ENV AOTRITON_INSTALLED_PREFIX /opt/rocm/aotriton |  | ||||||
|  |  | ||||||
| FROM ${BASE_TARGET} as final |  | ||||||
| COPY --from=openssl            /opt/openssl           /opt/openssl |  | ||||||
| # Install patchelf |  | ||||||
| ADD ./common/install_patchelf.sh install_patchelf.sh |  | ||||||
| RUN bash ./install_patchelf.sh && rm install_patchelf.sh |  | ||||||
| # Install Anaconda |  | ||||||
| COPY --from=conda /opt/conda /opt/conda |  | ||||||
| # Install python |  | ||||||
| COPY --from=python /opt/python    /opt/python |  | ||||||
| COPY --from=python /opt/_internal /opt/_internal |  | ||||||
| ENV PATH=/opt/conda/bin:/usr/local/cuda/bin:$PATH |  | ||||||
| @ -1,93 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -eou pipefail |  | ||||||
|  |  | ||||||
| image="$1" |  | ||||||
| shift |  | ||||||
|  |  | ||||||
| if [ -z "${image}" ]; then |  | ||||||
|   echo "Usage: $0 IMAGE" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| DOCKER_IMAGE="pytorch/${image}" |  | ||||||
|  |  | ||||||
| TOPDIR=$(git rev-parse --show-toplevel) |  | ||||||
|  |  | ||||||
| GPU_ARCH_TYPE=${GPU_ARCH_TYPE:-cpu} |  | ||||||
| GPU_ARCH_VERSION=${GPU_ARCH_VERSION:-} |  | ||||||
|  |  | ||||||
| WITH_PUSH=${WITH_PUSH:-} |  | ||||||
|  |  | ||||||
| DOCKER=${DOCKER:-docker} |  | ||||||
|  |  | ||||||
| case ${GPU_ARCH_TYPE} in |  | ||||||
|     cpu) |  | ||||||
|         BASE_TARGET=cpu |  | ||||||
|         DOCKER_TAG=cpu |  | ||||||
|         GPU_IMAGE=ubuntu:20.04 |  | ||||||
|         DOCKER_GPU_BUILD_ARG="" |  | ||||||
|         ;; |  | ||||||
|     cuda) |  | ||||||
|         BASE_TARGET=cuda${GPU_ARCH_VERSION} |  | ||||||
|         DOCKER_TAG=cuda${GPU_ARCH_VERSION} |  | ||||||
|         GPU_IMAGE=ubuntu:20.04 |  | ||||||
|         DOCKER_GPU_BUILD_ARG="" |  | ||||||
|         ;; |  | ||||||
|     rocm) |  | ||||||
|         BASE_TARGET=rocm |  | ||||||
|         DOCKER_TAG=rocm${GPU_ARCH_VERSION} |  | ||||||
|         GPU_IMAGE=rocm/dev-ubuntu-20.04:${GPU_ARCH_VERSION}-complete |  | ||||||
|         PYTORCH_ROCM_ARCH="gfx900;gfx906;gfx908;gfx90a;gfx1030;gfx1100" |  | ||||||
|         ROCM_REGEX="([0-9]+)\.([0-9]+)[\.]?([0-9]*)" |  | ||||||
|         if [[ $GPU_ARCH_VERSION =~ $ROCM_REGEX ]]; then |  | ||||||
|             ROCM_VERSION_INT=$((${BASH_REMATCH[1]}*10000 + ${BASH_REMATCH[2]}*100 + ${BASH_REMATCH[3]:-0})) |  | ||||||
|         else |  | ||||||
|             echo "ERROR: rocm regex failed" |  | ||||||
|             exit 1 |  | ||||||
|         fi |  | ||||||
|         if [[ $ROCM_VERSION_INT -ge 60000 ]]; then |  | ||||||
|             PYTORCH_ROCM_ARCH+=";gfx942" |  | ||||||
|         fi |  | ||||||
|         DOCKER_GPU_BUILD_ARG="--build-arg PYTORCH_ROCM_ARCH=${PYTORCH_ROCM_ARCH}" |  | ||||||
|         ;; |  | ||||||
|     *) |  | ||||||
|         echo "ERROR: Unrecognized GPU_ARCH_TYPE: ${GPU_ARCH_TYPE}" |  | ||||||
|         exit 1 |  | ||||||
|         ;; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ( |  | ||||||
|     set -x |  | ||||||
|     DOCKER_BUILDKIT=1 ${DOCKER} build \ |  | ||||||
|          --target final \ |  | ||||||
|         ${DOCKER_GPU_BUILD_ARG} \ |  | ||||||
|         --build-arg "GPU_IMAGE=${GPU_IMAGE}" \ |  | ||||||
|         --build-arg "BASE_TARGET=${BASE_TARGET}" \ |  | ||||||
|         -t "${DOCKER_IMAGE}" \ |  | ||||||
|         $@ \ |  | ||||||
|         -f "${TOPDIR}/.ci/docker/libtorch/Dockerfile" \ |  | ||||||
|         "${TOPDIR}/.ci/docker/" |  | ||||||
|  |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| GITHUB_REF=${GITHUB_REF:-$(git symbolic-ref -q HEAD || git describe --tags --exact-match)} |  | ||||||
| GIT_BRANCH_NAME=${GITHUB_REF##*/} |  | ||||||
| GIT_COMMIT_SHA=${GITHUB_SHA:-$(git rev-parse HEAD)} |  | ||||||
| DOCKER_IMAGE_BRANCH_TAG=${DOCKER_IMAGE}-${GIT_BRANCH_NAME} |  | ||||||
| DOCKER_IMAGE_SHA_TAG=${DOCKER_IMAGE}-${GIT_COMMIT_SHA} |  | ||||||
|  |  | ||||||
| if [[ "${WITH_PUSH}" == true ]]; then |  | ||||||
|   ( |  | ||||||
|     set -x |  | ||||||
|     ${DOCKER} push "${DOCKER_IMAGE}" |  | ||||||
|     if [[ -n ${GITHUB_REF} ]]; then |  | ||||||
|         ${DOCKER} tag ${DOCKER_IMAGE} ${DOCKER_IMAGE_BRANCH_TAG} |  | ||||||
|         ${DOCKER} tag ${DOCKER_IMAGE} ${DOCKER_IMAGE_SHA_TAG} |  | ||||||
|         ${DOCKER} push "${DOCKER_IMAGE_BRANCH_TAG}" |  | ||||||
|         ${DOCKER} push "${DOCKER_IMAGE_SHA_TAG}" |  | ||||||
|     fi |  | ||||||
|   ) |  | ||||||
| fi |  | ||||||
| @ -29,7 +29,7 @@ RUN bash ./install_conda.sh && rm install_conda.sh common_utils.sh /opt/conda/re | |||||||
|  |  | ||||||
| # Install cuda and cudnn | # Install cuda and cudnn | ||||||
| ARG CUDA_VERSION | ARG CUDA_VERSION | ||||||
| COPY ./common/install_cuda.sh install_cuda.sh | RUN wget -q https://raw.githubusercontent.com/pytorch/builder/main/common/install_cuda.sh -O install_cuda.sh | ||||||
| RUN bash ./install_cuda.sh ${CUDA_VERSION} && rm install_cuda.sh | RUN bash ./install_cuda.sh ${CUDA_VERSION} && rm install_cuda.sh | ||||||
| ENV DESIRED_CUDA ${CUDA_VERSION} | ENV DESIRED_CUDA ${CUDA_VERSION} | ||||||
| ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH | ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH | ||||||
|  | |||||||
| @ -1,202 +0,0 @@ | |||||||
| # syntax = docker/dockerfile:experimental |  | ||||||
| ARG ROCM_VERSION=3.7 |  | ||||||
| ARG BASE_CUDA_VERSION=11.8 |  | ||||||
|  |  | ||||||
| ARG GPU_IMAGE=centos:7 |  | ||||||
| FROM centos:7 as base |  | ||||||
|  |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
|  |  | ||||||
| ARG DEVTOOLSET_VERSION=9 |  | ||||||
| # Note: This is required patch since CentOS have reached EOL |  | ||||||
| # otherwise any yum install setp will fail |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN yum install -y wget curl perl util-linux xz bzip2 git patch which perl zlib-devel |  | ||||||
| # Just add everything as a safe.directory for git since these will be used in multiple places with git |  | ||||||
| RUN git config --global --add safe.directory '*' |  | ||||||
| RUN yum install -y yum-utils centos-release-scl |  | ||||||
| RUN yum-config-manager --enable rhel-server-rhscl-7-rpms |  | ||||||
| # Note: After running yum-config-manager --enable rhel-server-rhscl-7-rpms |  | ||||||
| # patch is required once again. Somehow this steps adds mirror.centos.org |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN yum install -y devtoolset-${DEVTOOLSET_VERSION}-gcc devtoolset-${DEVTOOLSET_VERSION}-gcc-c++ devtoolset-${DEVTOOLSET_VERSION}-gcc-gfortran devtoolset-${DEVTOOLSET_VERSION}-binutils |  | ||||||
| ENV PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| RUN yum --enablerepo=extras install -y epel-release |  | ||||||
|  |  | ||||||
| # cmake-3.18.4 from pip |  | ||||||
| RUN yum install -y python3-pip && \ |  | ||||||
|     python3 -mpip install cmake==3.18.4 && \ |  | ||||||
|     ln -s /usr/local/bin/cmake /usr/bin/cmake |  | ||||||
|  |  | ||||||
| RUN yum install -y autoconf aclocal automake make sudo |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl (this must precede `build python` step) |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
|  |  | ||||||
| # EPEL for cmake |  | ||||||
| FROM base as patchelf |  | ||||||
| # Install patchelf |  | ||||||
| ADD ./common/install_patchelf.sh install_patchelf.sh |  | ||||||
| RUN bash ./install_patchelf.sh && rm install_patchelf.sh |  | ||||||
| RUN cp $(which patchelf) /patchelf |  | ||||||
|  |  | ||||||
| FROM patchelf as python |  | ||||||
| # build python |  | ||||||
| COPY manywheel/build_scripts /build_scripts |  | ||||||
| ADD ./common/install_cpython.sh /build_scripts/install_cpython.sh |  | ||||||
| RUN bash build_scripts/build.sh && rm -r build_scripts |  | ||||||
|  |  | ||||||
| FROM base as cuda |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| # Install CUDA |  | ||||||
| ADD ./common/install_cuda.sh install_cuda.sh |  | ||||||
| RUN bash ./install_cuda.sh ${BASE_CUDA_VERSION} && rm install_cuda.sh |  | ||||||
|  |  | ||||||
| FROM base as intel |  | ||||||
| # MKL |  | ||||||
| ADD ./common/install_mkl.sh install_mkl.sh |  | ||||||
| RUN bash ./install_mkl.sh && rm install_mkl.sh |  | ||||||
|  |  | ||||||
| FROM base as magma |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| # Install magma |  | ||||||
| ADD ./common/install_magma.sh install_magma.sh |  | ||||||
| RUN bash ./install_magma.sh ${BASE_CUDA_VERSION} && rm install_magma.sh |  | ||||||
|  |  | ||||||
| FROM base as jni |  | ||||||
| # Install java jni header |  | ||||||
| ADD ./common/install_jni.sh install_jni.sh |  | ||||||
| ADD ./java/jni.h jni.h |  | ||||||
| RUN bash ./install_jni.sh && rm install_jni.sh |  | ||||||
|  |  | ||||||
| FROM base as libpng |  | ||||||
| # Install libpng |  | ||||||
| ADD ./common/install_libpng.sh install_libpng.sh |  | ||||||
| RUN bash ./install_libpng.sh && rm install_libpng.sh |  | ||||||
|  |  | ||||||
| FROM ${GPU_IMAGE} as common |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
| RUN yum install -y \ |  | ||||||
|         aclocal \ |  | ||||||
|         autoconf \ |  | ||||||
|         automake \ |  | ||||||
|         bison \ |  | ||||||
|         bzip2 \ |  | ||||||
|         curl \ |  | ||||||
|         diffutils \ |  | ||||||
|         file \ |  | ||||||
|         git \ |  | ||||||
|         make \ |  | ||||||
|         patch \ |  | ||||||
|         perl \ |  | ||||||
|         unzip \ |  | ||||||
|         util-linux \ |  | ||||||
|         wget \ |  | ||||||
|         which \ |  | ||||||
|         xz \ |  | ||||||
|         yasm |  | ||||||
| RUN yum install -y \ |  | ||||||
|     https://repo.ius.io/ius-release-el7.rpm \ |  | ||||||
|     https://ossci-linux.s3.amazonaws.com/epel-release-7-14.noarch.rpm |  | ||||||
|  |  | ||||||
| RUN yum swap -y git git236-core |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
| ENV SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
| # Install LLVM version |  | ||||||
| COPY --from=openssl            /opt/openssl                          /opt/openssl |  | ||||||
| COPY --from=python             /opt/python                           /opt/python |  | ||||||
| COPY --from=python             /opt/_internal                        /opt/_internal |  | ||||||
| COPY --from=python             /opt/python/cp39-cp39/bin/auditwheel /usr/local/bin/auditwheel |  | ||||||
| COPY --from=intel              /opt/intel                            /opt/intel |  | ||||||
| COPY --from=patchelf           /usr/local/bin/patchelf               /usr/local/bin/patchelf |  | ||||||
| COPY --from=jni                /usr/local/include/jni.h              /usr/local/include/jni.h |  | ||||||
| COPY --from=libpng             /usr/local/bin/png*                   /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/bin/libpng*                /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/include/png*               /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/include/libpng*            /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/libpng*                /usr/local/lib/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/pkgconfig              /usr/local/lib/pkgconfig |  | ||||||
|  |  | ||||||
| FROM common as cpu_final |  | ||||||
| ARG BASE_CUDA_VERSION=10.1 |  | ||||||
| ARG DEVTOOLSET_VERSION=9 |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
|  |  | ||||||
| RUN yum install -y yum-utils centos-release-scl |  | ||||||
| RUN yum-config-manager --enable rhel-server-rhscl-7-rpms |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN yum install -y devtoolset-${DEVTOOLSET_VERSION}-gcc devtoolset-${DEVTOOLSET_VERSION}-gcc-c++ devtoolset-${DEVTOOLSET_VERSION}-gcc-gfortran devtoolset-${DEVTOOLSET_VERSION}-binutils |  | ||||||
| ENV PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # cmake is already installed inside the rocm base image, so remove if present |  | ||||||
| RUN rpm -e cmake || true |  | ||||||
| # cmake-3.18.4 from pip |  | ||||||
| RUN yum install -y python3-pip && \ |  | ||||||
|     python3 -mpip install cmake==3.18.4 && \ |  | ||||||
|     ln -s /usr/local/bin/cmake /usr/bin/cmake |  | ||||||
|  |  | ||||||
| # ninja |  | ||||||
| RUN yum install -y ninja-build |  | ||||||
|  |  | ||||||
| FROM cpu_final as cuda_final |  | ||||||
| RUN rm -rf /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=cuda     /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=magma    /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| RUN ln -sf /usr/local/cuda-${BASE_CUDA_VERSION} /usr/local/cuda |  | ||||||
| ENV PATH=/usr/local/cuda/bin:$PATH |  | ||||||
|  |  | ||||||
| FROM cpu_final as rocm_final |  | ||||||
| ARG ROCM_VERSION=3.7 |  | ||||||
| ARG PYTORCH_ROCM_ARCH |  | ||||||
| ENV PYTORCH_ROCM_ARCH ${PYTORCH_ROCM_ARCH} |  | ||||||
| # Adding ROCM_PATH env var so that LoadHip.cmake (even with logic updated for ROCm6.0) |  | ||||||
| # find HIP works for ROCm5.7. Not needed for ROCm6.0 and above. |  | ||||||
| # Remove below when ROCm5.7 is not in support matrix anymore. |  | ||||||
| ENV ROCM_PATH /opt/rocm |  | ||||||
| ENV MKLROOT /opt/intel |  | ||||||
| # No need to install ROCm as base docker image should have full ROCm install |  | ||||||
| #ADD ./common/install_rocm.sh install_rocm.sh |  | ||||||
| #RUN ROCM_VERSION=${ROCM_VERSION} bash ./install_rocm.sh && rm install_rocm.sh |  | ||||||
| ADD ./common/install_rocm_drm.sh install_rocm_drm.sh |  | ||||||
| RUN bash ./install_rocm_drm.sh && rm install_rocm_drm.sh |  | ||||||
| # cmake3 is needed for the MIOpen build |  | ||||||
| RUN ln -sf /usr/local/bin/cmake /usr/bin/cmake3 |  | ||||||
| ADD ./common/install_rocm_magma.sh install_rocm_magma.sh |  | ||||||
| RUN bash ./install_rocm_magma.sh && rm install_rocm_magma.sh |  | ||||||
| ADD ./common/install_miopen.sh install_miopen.sh |  | ||||||
| RUN bash ./install_miopen.sh ${ROCM_VERSION} && rm install_miopen.sh |  | ||||||
|  |  | ||||||
| # Install AOTriton |  | ||||||
| COPY ./common/common_utils.sh common_utils.sh |  | ||||||
| COPY ./common/aotriton_version.txt aotriton_version.txt |  | ||||||
| COPY ./common/install_aotriton.sh install_aotriton.sh |  | ||||||
| RUN bash ./install_aotriton.sh /opt/rocm && rm install_aotriton.sh aotriton_version.txt |  | ||||||
| ENV AOTRITON_INSTALLED_PREFIX /opt/rocm/aotriton |  | ||||||
| @ -1,153 +0,0 @@ | |||||||
| # syntax = docker/dockerfile:experimental |  | ||||||
| ARG ROCM_VERSION=3.7 |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| ARG GPU_IMAGE=nvidia/cuda:${BASE_CUDA_VERSION}-devel-centos7 |  | ||||||
| FROM quay.io/pypa/manylinux2014_x86_64 as base |  | ||||||
|  |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
|  |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN yum install -y wget curl perl util-linux xz bzip2 git patch which perl zlib-devel |  | ||||||
| RUN yum install -y yum-utils centos-release-scl sudo |  | ||||||
| RUN yum-config-manager --enable rhel-server-rhscl-7-rpms |  | ||||||
| RUN yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-gcc-gfortran devtoolset-7-binutils |  | ||||||
| ENV PATH=/opt/rh/devtoolset-7/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-7/root/usr/lib64:/opt/rh/devtoolset-7/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # cmake |  | ||||||
| RUN yum install -y cmake3 && \ |  | ||||||
|     ln -s /usr/bin/cmake3 /usr/bin/cmake |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl (this must precede `build python` step) |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # remove unncessary python versions |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2 |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4 |  | ||||||
| RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6 |  | ||||||
| RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6 |  | ||||||
|  |  | ||||||
| FROM base as cuda |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| # Install CUDA |  | ||||||
| ADD ./common/install_cuda.sh install_cuda.sh |  | ||||||
| RUN bash ./install_cuda.sh ${BASE_CUDA_VERSION} && rm install_cuda.sh |  | ||||||
|  |  | ||||||
| FROM base as intel |  | ||||||
| # MKL |  | ||||||
| ADD ./common/install_mkl.sh install_mkl.sh |  | ||||||
| RUN bash ./install_mkl.sh && rm install_mkl.sh |  | ||||||
|  |  | ||||||
| FROM base as magma |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| # Install magma |  | ||||||
| ADD ./common/install_magma.sh install_magma.sh |  | ||||||
| RUN bash ./install_magma.sh ${BASE_CUDA_VERSION} && rm install_magma.sh |  | ||||||
|  |  | ||||||
| FROM base as jni |  | ||||||
| # Install java jni header |  | ||||||
| ADD ./common/install_jni.sh install_jni.sh |  | ||||||
| ADD ./java/jni.h jni.h |  | ||||||
| RUN bash ./install_jni.sh && rm install_jni.sh |  | ||||||
|  |  | ||||||
| FROM base as libpng |  | ||||||
| # Install libpng |  | ||||||
| ADD ./common/install_libpng.sh install_libpng.sh |  | ||||||
| RUN bash ./install_libpng.sh && rm install_libpng.sh |  | ||||||
|  |  | ||||||
| FROM ${GPU_IMAGE} as common |  | ||||||
| RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo |  | ||||||
| RUN sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
| RUN yum install -y \ |  | ||||||
|         aclocal \ |  | ||||||
|         autoconf \ |  | ||||||
|         automake \ |  | ||||||
|         bison \ |  | ||||||
|         bzip2 \ |  | ||||||
|         curl \ |  | ||||||
|         diffutils \ |  | ||||||
|         file \ |  | ||||||
|         git \ |  | ||||||
|         make \ |  | ||||||
|         patch \ |  | ||||||
|         perl \ |  | ||||||
|         unzip \ |  | ||||||
|         util-linux \ |  | ||||||
|         wget \ |  | ||||||
|         which \ |  | ||||||
|         xz \ |  | ||||||
|         yasm |  | ||||||
| RUN yum install -y \ |  | ||||||
|     https://repo.ius.io/ius-release-el7.rpm \ |  | ||||||
|     https://ossci-linux.s3.amazonaws.com/epel-release-7-14.noarch.rpm |  | ||||||
|  |  | ||||||
| RUN yum swap -y git git236-core |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
| ENV SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
| # Install LLVM version |  | ||||||
| COPY --from=openssl            /opt/openssl                          /opt/openssl |  | ||||||
| COPY --from=base               /opt/python                           /opt/python |  | ||||||
| COPY --from=base               /opt/_internal                        /opt/_internal |  | ||||||
| COPY --from=base               /usr/local/bin/auditwheel             /usr/local/bin/auditwheel |  | ||||||
| COPY --from=intel              /opt/intel                            /opt/intel |  | ||||||
| COPY --from=base               /usr/local/bin/patchelf               /usr/local/bin/patchelf |  | ||||||
| COPY --from=libpng             /usr/local/bin/png*                   /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/bin/libpng*                /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/include/png*               /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/include/libpng*            /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/libpng*                /usr/local/lib/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/pkgconfig              /usr/local/lib/pkgconfig |  | ||||||
| COPY --from=jni                /usr/local/include/jni.h              /usr/local/include/jni.h |  | ||||||
|  |  | ||||||
| FROM common as cpu_final |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| RUN yum install -y yum-utils centos-release-scl |  | ||||||
| RUN yum-config-manager --enable rhel-server-rhscl-7-rpms |  | ||||||
| RUN yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-gcc-gfortran devtoolset-7-binutils |  | ||||||
| ENV PATH=/opt/rh/devtoolset-7/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-7/root/usr/lib64:/opt/rh/devtoolset-7/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # cmake |  | ||||||
| RUN yum install -y cmake3 && \ |  | ||||||
|     ln -s /usr/bin/cmake3 /usr/bin/cmake |  | ||||||
|  |  | ||||||
| # ninja |  | ||||||
| RUN yum install -y http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm |  | ||||||
| RUN yum install -y ninja-build |  | ||||||
|  |  | ||||||
| FROM cpu_final as cuda_final |  | ||||||
| RUN rm -rf /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=cuda     /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=magma    /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
|  |  | ||||||
| FROM common as rocm_final |  | ||||||
| ARG ROCM_VERSION=3.7 |  | ||||||
| # Install ROCm |  | ||||||
| ADD ./common/install_rocm.sh install_rocm.sh |  | ||||||
| RUN bash ./install_rocm.sh ${ROCM_VERSION} && rm install_rocm.sh |  | ||||||
| # cmake is already installed inside the rocm base image, but both 2 and 3 exist |  | ||||||
| # cmake3 is needed for the later MIOpen custom build, so that step is last. |  | ||||||
| RUN yum install -y cmake3 && \ |  | ||||||
|     rm -f /usr/bin/cmake && \ |  | ||||||
|     ln -s /usr/bin/cmake3 /usr/bin/cmake |  | ||||||
| ADD ./common/install_miopen.sh install_miopen.sh |  | ||||||
| RUN bash ./install_miopen.sh ${ROCM_VERSION} && rm install_miopen.sh |  | ||||||
| @ -1,153 +0,0 @@ | |||||||
| # syntax = docker/dockerfile:experimental |  | ||||||
| ARG ROCM_VERSION=3.7 |  | ||||||
| ARG BASE_CUDA_VERSION=11.8 |  | ||||||
| ARG GPU_IMAGE=amd64/almalinux:8 |  | ||||||
| FROM quay.io/pypa/manylinux_2_28_x86_64 as base |  | ||||||
|  |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
|  |  | ||||||
| ARG DEVTOOLSET_VERSION=11 |  | ||||||
| RUN yum install -y sudo wget curl perl util-linux xz bzip2 git patch which perl zlib-devel yum-utils gcc-toolset-${DEVTOOLSET_VERSION}-toolchain |  | ||||||
| ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # cmake-3.18.4 from pip |  | ||||||
| RUN yum install -y python3-pip && \ |  | ||||||
|     python3 -mpip install cmake==3.18.4 && \ |  | ||||||
|     ln -s /usr/local/bin/cmake /usr/bin/cmake3 |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl (this must precede `build python` step) |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # remove unncessary python versions |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2 |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4 |  | ||||||
| RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6 |  | ||||||
| RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6 |  | ||||||
|  |  | ||||||
| FROM base as cuda |  | ||||||
| ARG BASE_CUDA_VERSION=11.8 |  | ||||||
| # Install CUDA |  | ||||||
| ADD ./common/install_cuda.sh install_cuda.sh |  | ||||||
| RUN bash ./install_cuda.sh ${BASE_CUDA_VERSION} && rm install_cuda.sh |  | ||||||
|  |  | ||||||
| FROM base as intel |  | ||||||
| # MKL |  | ||||||
| ADD ./common/install_mkl.sh install_mkl.sh |  | ||||||
| RUN bash ./install_mkl.sh && rm install_mkl.sh |  | ||||||
|  |  | ||||||
| FROM base as magma |  | ||||||
| ARG BASE_CUDA_VERSION=10.2 |  | ||||||
| # Install magma |  | ||||||
| ADD ./common/install_magma.sh install_magma.sh |  | ||||||
| RUN bash ./install_magma.sh ${BASE_CUDA_VERSION} && rm install_magma.sh |  | ||||||
|  |  | ||||||
| FROM base as jni |  | ||||||
| # Install java jni header |  | ||||||
| ADD ./common/install_jni.sh install_jni.sh |  | ||||||
| ADD ./java/jni.h jni.h |  | ||||||
| RUN bash ./install_jni.sh && rm install_jni.sh |  | ||||||
|  |  | ||||||
| FROM base as libpng |  | ||||||
| # Install libpng |  | ||||||
| ADD ./common/install_libpng.sh install_libpng.sh |  | ||||||
| RUN bash ./install_libpng.sh && rm install_libpng.sh |  | ||||||
|  |  | ||||||
| FROM ${GPU_IMAGE} as common |  | ||||||
| ARG DEVTOOLSET_VERSION=11 |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
| RUN yum -y install epel-release |  | ||||||
| RUN yum -y update |  | ||||||
| RUN yum install -y \ |  | ||||||
|         autoconf \ |  | ||||||
|         automake \ |  | ||||||
|         bison \ |  | ||||||
|         bzip2 \ |  | ||||||
|         curl \ |  | ||||||
|         diffutils \ |  | ||||||
|         file \ |  | ||||||
|         git \ |  | ||||||
|         make \ |  | ||||||
|         patch \ |  | ||||||
|         perl \ |  | ||||||
|         unzip \ |  | ||||||
|         util-linux \ |  | ||||||
|         wget \ |  | ||||||
|         which \ |  | ||||||
|         xz \ |  | ||||||
|         gcc-toolset-${DEVTOOLSET_VERSION}-toolchain \ |  | ||||||
|         glibc-langpack-en |  | ||||||
| RUN yum install -y \ |  | ||||||
|     https://repo.ius.io/ius-release-el7.rpm \ |  | ||||||
|     https://ossci-linux.s3.amazonaws.com/epel-release-7-14.noarch.rpm |  | ||||||
|  |  | ||||||
| RUN yum swap -y git git236-core |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
| ENV SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
| # Install LLVM version |  | ||||||
| COPY --from=openssl            /opt/openssl                          /opt/openssl |  | ||||||
| COPY --from=base               /opt/python                           /opt/python |  | ||||||
| COPY --from=base               /opt/_internal                        /opt/_internal |  | ||||||
| COPY --from=base               /usr/local/bin/auditwheel             /usr/local/bin/auditwheel |  | ||||||
| COPY --from=intel              /opt/intel                            /opt/intel |  | ||||||
| COPY --from=base               /usr/local/bin/patchelf               /usr/local/bin/patchelf |  | ||||||
| COPY --from=libpng             /usr/local/bin/png*                   /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/bin/libpng*                /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/include/png*               /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/include/libpng*            /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/libpng*                /usr/local/lib/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/pkgconfig              /usr/local/lib/pkgconfig |  | ||||||
| COPY --from=jni                /usr/local/include/jni.h              /usr/local/include/jni.h |  | ||||||
|  |  | ||||||
| FROM common as cpu_final |  | ||||||
| ARG BASE_CUDA_VERSION=11.8 |  | ||||||
| ARG DEVTOOLSET_VERSION=11 |  | ||||||
| # Ensure the expected devtoolset is used |  | ||||||
| ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # cmake-3.18.4 from pip |  | ||||||
| RUN yum install -y python3-pip && \ |  | ||||||
|     python3 -mpip install cmake==3.18.4 && \ |  | ||||||
|     ln -s /usr/local/bin/cmake /usr/bin/cmake3 |  | ||||||
|  |  | ||||||
| FROM cpu_final as cuda_final |  | ||||||
| RUN rm -rf /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=cuda     /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=magma    /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
|  |  | ||||||
| FROM common as rocm_final |  | ||||||
| ARG ROCM_VERSION=3.7 |  | ||||||
| # Install ROCm |  | ||||||
| ADD ./common/install_rocm.sh install_rocm.sh |  | ||||||
| RUN bash ./install_rocm.sh ${ROCM_VERSION} && rm install_rocm.sh |  | ||||||
| # cmake is already installed inside the rocm base image, but both 2 and 3 exist |  | ||||||
| # cmake3 is needed for the later MIOpen custom build, so that step is last. |  | ||||||
| RUN yum install -y cmake3 && \ |  | ||||||
|     rm -f /usr/bin/cmake && \ |  | ||||||
|     ln -s /usr/bin/cmake3 /usr/bin/cmake |  | ||||||
| ADD ./common/install_miopen.sh install_miopen.sh |  | ||||||
| RUN bash ./install_miopen.sh ${ROCM_VERSION} && rm install_miopen.sh |  | ||||||
|  |  | ||||||
| FROM cpu_final as xpu_final |  | ||||||
| # cmake-3.28.4 from pip |  | ||||||
| RUN python3 -m pip install --upgrade pip && \ |  | ||||||
|     python3 -mpip install cmake==3.28.4 |  | ||||||
| ADD ./common/install_xpu.sh install_xpu.sh |  | ||||||
| RUN bash ./install_xpu.sh && rm install_xpu.sh |  | ||||||
| RUN pushd /opt/_internal && tar -xJf static-libs-for-embedding-only.tar.xz && popd |  | ||||||
| @ -1,57 +0,0 @@ | |||||||
| FROM quay.io/pypa/manylinux_2_28_aarch64 as base |  | ||||||
|  |  | ||||||
| # Graviton needs GCC 10 or above for the build. GCC12 is the default version in almalinux-8. |  | ||||||
| ARG GCCTOOLSET_VERSION=11 |  | ||||||
|  |  | ||||||
| # Language variabes |  | ||||||
| ENV LC_ALL=en_US.UTF-8 |  | ||||||
| ENV LANG=en_US.UTF-8 |  | ||||||
| ENV LANGUAGE=en_US.UTF-8 |  | ||||||
|  |  | ||||||
| # Installed needed OS packages. This is to support all |  | ||||||
| # the binary builds (torch, vision, audio, text, data) |  | ||||||
| RUN yum -y install epel-release |  | ||||||
| RUN yum -y update |  | ||||||
| RUN yum install -y \ |  | ||||||
|   autoconf \ |  | ||||||
|   automake \ |  | ||||||
|   bison \ |  | ||||||
|   bzip2 \ |  | ||||||
|   curl \ |  | ||||||
|   diffutils \ |  | ||||||
|   file \ |  | ||||||
|   git \ |  | ||||||
|   less \ |  | ||||||
|   libffi-devel \ |  | ||||||
|   libgomp \ |  | ||||||
|   make \ |  | ||||||
|   openssl-devel \ |  | ||||||
|   patch \ |  | ||||||
|   perl \ |  | ||||||
|   unzip \ |  | ||||||
|   util-linux \ |  | ||||||
|   wget \ |  | ||||||
|   which \ |  | ||||||
|   xz \ |  | ||||||
|   yasm \ |  | ||||||
|   zstd \ |  | ||||||
|   sudo \ |  | ||||||
|   gcc-toolset-${GCCTOOLSET_VERSION}-toolchain |  | ||||||
|  |  | ||||||
| # Ensure the expected devtoolset is used |  | ||||||
| ENV PATH=/opt/rh/gcc-toolset-${GCCTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${GCCTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${GCCTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
| FROM base as final |  | ||||||
|  |  | ||||||
| # remove unncessary python versions |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2 |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4 |  | ||||||
| RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6 |  | ||||||
| RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6 |  | ||||||
| @ -1,94 +0,0 @@ | |||||||
| FROM quay.io/pypa/manylinux2014_aarch64 as base |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # Graviton needs GCC 10 for the build |  | ||||||
| ARG DEVTOOLSET_VERSION=10 |  | ||||||
|  |  | ||||||
| # Language variabes |  | ||||||
| ENV LC_ALL=en_US.UTF-8 |  | ||||||
| ENV LANG=en_US.UTF-8 |  | ||||||
| ENV LANGUAGE=en_US.UTF-8 |  | ||||||
|  |  | ||||||
| # Installed needed OS packages. This is to support all |  | ||||||
| # the binary builds (torch, vision, audio, text, data) |  | ||||||
| RUN yum -y install epel-release |  | ||||||
| RUN yum -y update |  | ||||||
| RUN yum install -y \ |  | ||||||
|   autoconf \ |  | ||||||
|   automake \ |  | ||||||
|   bison \ |  | ||||||
|   bzip2 \ |  | ||||||
|   curl \ |  | ||||||
|   diffutils \ |  | ||||||
|   file \ |  | ||||||
|   git \ |  | ||||||
|   make \ |  | ||||||
|   patch \ |  | ||||||
|   perl \ |  | ||||||
|   unzip \ |  | ||||||
|   util-linux \ |  | ||||||
|   wget \ |  | ||||||
|   which \ |  | ||||||
|   xz \ |  | ||||||
|   yasm \ |  | ||||||
|   less \ |  | ||||||
|   zstd \ |  | ||||||
|   libgomp \ |  | ||||||
|   sudo \ |  | ||||||
|   devtoolset-${DEVTOOLSET_VERSION}-gcc \ |  | ||||||
|   devtoolset-${DEVTOOLSET_VERSION}-gcc-c++ \ |  | ||||||
|   devtoolset-${DEVTOOLSET_VERSION}-gcc-gfortran \ |  | ||||||
|   devtoolset-${DEVTOOLSET_VERSION}-binutils |  | ||||||
|  |  | ||||||
| # Ensure the expected devtoolset is used |  | ||||||
| ENV PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################################################################### |  | ||||||
| # libglfortran.a hack |  | ||||||
| # |  | ||||||
| # libgfortran.a from quay.io/pypa/manylinux2014_aarch64 is not compiled with -fPIC. |  | ||||||
| # This causes __stack_chk_guard@@GLIBC_2.17 on pytorch build. To solve, get |  | ||||||
| # ubuntu's libgfortran.a which is compiled with -fPIC |  | ||||||
| # NOTE: Need a better way to get this library as Ubuntu's package can be removed by the vender, or changed |  | ||||||
| ############################################################################### |  | ||||||
| RUN cd ~/ \ |  | ||||||
|   && curl -L -o ~/libgfortran-10-dev.deb http://ports.ubuntu.com/ubuntu-ports/pool/universe/g/gcc-10/libgfortran-10-dev_10.5.0-1ubuntu1_arm64.deb \ |  | ||||||
|   && ar x ~/libgfortran-10-dev.deb \ |  | ||||||
|   && tar --use-compress-program=unzstd -xvf data.tar.zst -C ~/ \ |  | ||||||
|   && cp -f ~/usr/lib/gcc/aarch64-linux-gnu/10/libgfortran.a /opt/rh/devtoolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/ |  | ||||||
|  |  | ||||||
| # install cmake |  | ||||||
| RUN yum install -y cmake3 && \ |  | ||||||
|     ln -s /usr/bin/cmake3 /usr/bin/cmake |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl (this must precede `build python` step) |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
| ENV SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
|  |  | ||||||
| FROM base as openblas |  | ||||||
| # Install openblas |  | ||||||
| ADD ./common/install_openblas.sh install_openblas.sh |  | ||||||
| RUN bash ./install_openblas.sh && rm install_openblas.sh |  | ||||||
|  |  | ||||||
| FROM openssl as final |  | ||||||
| # remove unncessary python versions |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2 |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4 |  | ||||||
| RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6 |  | ||||||
| RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6 |  | ||||||
| COPY --from=openblas     /opt/OpenBLAS/  /opt/OpenBLAS/ |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH |  | ||||||
| @ -1,91 +0,0 @@ | |||||||
| FROM quay.io/pypa/manylinux_2_28_aarch64 as base |  | ||||||
|  |  | ||||||
| # Cuda ARM build needs gcc 11 |  | ||||||
| ARG DEVTOOLSET_VERSION=11 |  | ||||||
|  |  | ||||||
| # Language variables |  | ||||||
| ENV LC_ALL=en_US.UTF-8 |  | ||||||
| ENV LANG=en_US.UTF-8 |  | ||||||
| ENV LANGUAGE=en_US.UTF-8 |  | ||||||
|  |  | ||||||
| # Installed needed OS packages. This is to support all |  | ||||||
| # the binary builds (torch, vision, audio, text, data) |  | ||||||
| RUN yum -y install epel-release |  | ||||||
| RUN yum -y update |  | ||||||
| RUN yum install -y \ |  | ||||||
|   autoconf \ |  | ||||||
|   automake \ |  | ||||||
|   bison \ |  | ||||||
|   bzip2 \ |  | ||||||
|   curl \ |  | ||||||
|   diffutils \ |  | ||||||
|   file \ |  | ||||||
|   git \ |  | ||||||
|   make \ |  | ||||||
|   patch \ |  | ||||||
|   perl \ |  | ||||||
|   unzip \ |  | ||||||
|   util-linux \ |  | ||||||
|   wget \ |  | ||||||
|   which \ |  | ||||||
|   xz \ |  | ||||||
|   yasm \ |  | ||||||
|   less \ |  | ||||||
|   zstd \ |  | ||||||
|   libgomp \ |  | ||||||
|   sudo \ |  | ||||||
|   gcc-toolset-${DEVTOOLSET_VERSION}-toolchain |  | ||||||
|  |  | ||||||
| # Ensure the expected devtoolset is used |  | ||||||
| ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH |  | ||||||
|  |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl (this must precede `build python` step) |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
| ENV SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
|  |  | ||||||
| FROM openssl as final |  | ||||||
| # remove unncessary python versions |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2 |  | ||||||
| RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4 |  | ||||||
| RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6 |  | ||||||
| RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6 |  | ||||||
|  |  | ||||||
| FROM base as cuda |  | ||||||
| ARG BASE_CUDA_VERSION |  | ||||||
| # Install CUDA |  | ||||||
| ADD ./common/install_cuda_aarch64.sh install_cuda_aarch64.sh |  | ||||||
| RUN bash ./install_cuda_aarch64.sh ${BASE_CUDA_VERSION} && rm install_cuda_aarch64.sh |  | ||||||
|  |  | ||||||
| FROM base as magma |  | ||||||
| ARG BASE_CUDA_VERSION |  | ||||||
| # Install magma |  | ||||||
| ADD ./common/install_magma.sh install_magma.sh |  | ||||||
| RUN bash ./install_magma.sh ${BASE_CUDA_VERSION} && rm install_magma.sh |  | ||||||
|  |  | ||||||
| FROM base as openblas |  | ||||||
| # Install openblas |  | ||||||
| ADD ./common/install_openblas.sh install_openblas.sh |  | ||||||
| RUN bash ./install_openblas.sh && rm install_openblas.sh |  | ||||||
|  |  | ||||||
| FROM final as cuda_final |  | ||||||
| ARG BASE_CUDA_VERSION |  | ||||||
| RUN rm -rf /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=cuda     /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=magma    /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION} |  | ||||||
| COPY --from=openblas     /opt/OpenBLAS/  /opt/OpenBLAS/ |  | ||||||
| RUN ln -sf /usr/local/cuda-${BASE_CUDA_VERSION} /usr/local/cuda |  | ||||||
| ENV PATH=/usr/local/cuda/bin:$PATH |  | ||||||
| ENV LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH |  | ||||||
| @ -1,71 +0,0 @@ | |||||||
| FROM centos:8 as base |  | ||||||
|  |  | ||||||
| ENV LC_ALL en_US.UTF-8 |  | ||||||
| ENV LANG en_US.UTF-8 |  | ||||||
| ENV LANGUAGE en_US.UTF-8 |  | ||||||
| ENV PATH /opt/rh/gcc-toolset-11/root/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |  | ||||||
|  |  | ||||||
| # change to a valid repo |  | ||||||
| RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*.repo |  | ||||||
| # enable to install ninja-build |  | ||||||
| RUN sed -i 's|enabled=0|enabled=1|g' /etc/yum.repos.d/CentOS-Linux-PowerTools.repo |  | ||||||
|  |  | ||||||
| RUN yum -y update |  | ||||||
| RUN yum install -y wget curl perl util-linux xz bzip2 git patch which zlib-devel sudo |  | ||||||
| RUN yum install -y autoconf automake make cmake gdb gcc-toolset-11-gcc-c++ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
|  |  | ||||||
| # Install python |  | ||||||
| FROM base as python |  | ||||||
| RUN yum install -y openssl-devel zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel libpcap-devel xz-devel libffi-devel |  | ||||||
| ADD common/install_cpython.sh install_cpython.sh |  | ||||||
| RUN bash ./install_cpython.sh && rm install_cpython.sh |  | ||||||
|  |  | ||||||
| FROM base as conda |  | ||||||
| ADD ./common/install_conda_docker.sh install_conda.sh |  | ||||||
| RUN bash ./install_conda.sh && rm install_conda.sh |  | ||||||
| RUN /opt/conda/bin/conda install -y cmake |  | ||||||
|  |  | ||||||
| FROM base as intel |  | ||||||
| # Install MKL |  | ||||||
| COPY --from=python             /opt/python                           /opt/python |  | ||||||
| COPY --from=python             /opt/_internal                        /opt/_internal |  | ||||||
| COPY --from=conda              /opt/conda                            /opt/conda |  | ||||||
| ENV PATH=/opt/conda/bin:$PATH |  | ||||||
| ADD ./common/install_mkl.sh install_mkl.sh |  | ||||||
| RUN bash ./install_mkl.sh && rm install_mkl.sh |  | ||||||
|  |  | ||||||
| FROM base as patchelf |  | ||||||
| ADD ./common/install_patchelf.sh install_patchelf.sh |  | ||||||
| RUN bash ./install_patchelf.sh && rm install_patchelf.sh |  | ||||||
| RUN cp $(which patchelf) /patchelf |  | ||||||
|  |  | ||||||
| FROM base as jni |  | ||||||
| ADD ./common/install_jni.sh install_jni.sh |  | ||||||
| ADD ./java/jni.h jni.h |  | ||||||
| RUN bash ./install_jni.sh && rm install_jni.sh |  | ||||||
|  |  | ||||||
| FROM base as libpng |  | ||||||
| ADD ./common/install_libpng.sh install_libpng.sh |  | ||||||
| RUN bash ./install_libpng.sh && rm install_libpng.sh |  | ||||||
|  |  | ||||||
| FROM base as final |  | ||||||
| COPY --from=openssl            /opt/openssl                          /opt/openssl |  | ||||||
| COPY --from=python             /opt/python                           /opt/python |  | ||||||
| COPY --from=python             /opt/_internal                        /opt/_internal |  | ||||||
| COPY --from=intel              /opt/intel                            /opt/intel |  | ||||||
| COPY --from=conda              /opt/conda                            /opt/conda |  | ||||||
| COPY --from=patchelf           /usr/local/bin/patchelf               /usr/local/bin/patchelf |  | ||||||
| COPY --from=jni                /usr/local/include/jni.h              /usr/local/include/jni.h |  | ||||||
| COPY --from=libpng             /usr/local/bin/png*                   /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/bin/libpng*                /usr/local/bin/ |  | ||||||
| COPY --from=libpng             /usr/local/include/png*               /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/include/libpng*            /usr/local/include/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/libpng*                /usr/local/lib/ |  | ||||||
| COPY --from=libpng             /usr/local/lib/pkgconfig              /usr/local/lib/pkgconfig |  | ||||||
|  |  | ||||||
| RUN yum install -y ninja-build |  | ||||||
| @ -1,73 +0,0 @@ | |||||||
| FROM --platform=linux/s390x docker.io/ubuntu:24.04 as base |  | ||||||
|  |  | ||||||
| # Language variables |  | ||||||
| ENV LC_ALL=C.UTF-8 |  | ||||||
| ENV LANG=C.UTF-8 |  | ||||||
| ENV LANGUAGE=C.UTF-8 |  | ||||||
|  |  | ||||||
| # Installed needed OS packages. This is to support all |  | ||||||
| # the binary builds (torch, vision, audio, text, data) |  | ||||||
| RUN apt update ; apt upgrade -y |  | ||||||
| RUN apt install -y \ |  | ||||||
|   build-essential \ |  | ||||||
|   autoconf \ |  | ||||||
|   automake \ |  | ||||||
|   bzip2 \ |  | ||||||
|   curl \ |  | ||||||
|   diffutils \ |  | ||||||
|   file \ |  | ||||||
|   git \ |  | ||||||
|   make \ |  | ||||||
|   patch \ |  | ||||||
|   perl \ |  | ||||||
|   unzip \ |  | ||||||
|   util-linux \ |  | ||||||
|   wget \ |  | ||||||
|   which \ |  | ||||||
|   xz-utils \ |  | ||||||
|   less \ |  | ||||||
|   zstd \ |  | ||||||
|   cmake \ |  | ||||||
|   python3 \ |  | ||||||
|   python3-dev \ |  | ||||||
|   python3-setuptools \ |  | ||||||
|   python3-yaml \ |  | ||||||
|   python3-typing-extensions \ |  | ||||||
|   libblas-dev \ |  | ||||||
|   libopenblas-dev \ |  | ||||||
|   liblapack-dev \ |  | ||||||
|   libatlas-base-dev |  | ||||||
|  |  | ||||||
| # git236+ would refuse to run git commands in repos owned by other users |  | ||||||
| # Which causes version check to fail, as pytorch repo is bind-mounted into the image |  | ||||||
| # Override this behaviour by treating every folder as safe |  | ||||||
| # For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327 |  | ||||||
| RUN git config --global --add safe.directory "*" |  | ||||||
|  |  | ||||||
| FROM base as openssl |  | ||||||
| # Install openssl (this must precede `build python` step) |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| ADD ./common/install_openssl.sh install_openssl.sh |  | ||||||
| RUN bash ./install_openssl.sh && rm install_openssl.sh |  | ||||||
| ENV SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
|  |  | ||||||
| # EPEL for cmake |  | ||||||
| FROM base as patchelf |  | ||||||
| # Install patchelf |  | ||||||
| ADD ./common/install_patchelf.sh install_patchelf.sh |  | ||||||
| RUN bash ./install_patchelf.sh && rm install_patchelf.sh |  | ||||||
| RUN cp $(which patchelf) /patchelf |  | ||||||
|  |  | ||||||
| FROM patchelf as python |  | ||||||
| # build python |  | ||||||
| COPY manywheel/build_scripts /build_scripts |  | ||||||
| ADD ./common/install_cpython.sh /build_scripts/install_cpython.sh |  | ||||||
| RUN bash build_scripts/build.sh && rm -r build_scripts |  | ||||||
|  |  | ||||||
| FROM openssl as final |  | ||||||
| COPY --from=python             /opt/python                           /opt/python |  | ||||||
| COPY --from=python             /opt/_internal                        /opt/_internal |  | ||||||
| COPY --from=python             /opt/python/cp39-cp39/bin/auditwheel /usr/local/bin/auditwheel |  | ||||||
| COPY --from=patchelf           /usr/local/bin/patchelf               /usr/local/bin/patchelf |  | ||||||
| @ -1,154 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| set -eou pipefail |  | ||||||
|  |  | ||||||
| TOPDIR=$(git rev-parse --show-toplevel) |  | ||||||
|  |  | ||||||
| image="$1" |  | ||||||
| shift |  | ||||||
|  |  | ||||||
| if [ -z "${image}" ]; then |  | ||||||
|   echo "Usage: $0 IMAGE" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| DOCKER_IMAGE="pytorch/${image}" |  | ||||||
|  |  | ||||||
| DOCKER_REGISTRY="${DOCKER_REGISTRY:-docker.io}" |  | ||||||
|  |  | ||||||
| GPU_ARCH_TYPE=${GPU_ARCH_TYPE:-cpu} |  | ||||||
| GPU_ARCH_VERSION=${GPU_ARCH_VERSION:-} |  | ||||||
| MANY_LINUX_VERSION=${MANY_LINUX_VERSION:-} |  | ||||||
| DOCKERFILE_SUFFIX=${DOCKERFILE_SUFFIX:-} |  | ||||||
| WITH_PUSH=${WITH_PUSH:-} |  | ||||||
|  |  | ||||||
| case ${GPU_ARCH_TYPE} in |  | ||||||
|     cpu) |  | ||||||
|         TARGET=cpu_final |  | ||||||
|         DOCKER_TAG=cpu |  | ||||||
|         GPU_IMAGE=centos:7 |  | ||||||
|         DOCKER_GPU_BUILD_ARG=" --build-arg DEVTOOLSET_VERSION=9" |  | ||||||
|         ;; |  | ||||||
|     cpu-manylinux_2_28) |  | ||||||
|         TARGET=cpu_final |  | ||||||
|         DOCKER_TAG=cpu |  | ||||||
|         GPU_IMAGE=amd64/almalinux:8 |  | ||||||
|         DOCKER_GPU_BUILD_ARG=" --build-arg DEVTOOLSET_VERSION=11" |  | ||||||
|         MANY_LINUX_VERSION="2_28" |  | ||||||
|         ;; |  | ||||||
|     cpu-aarch64) |  | ||||||
|         TARGET=final |  | ||||||
|         DOCKER_TAG=cpu-aarch64 |  | ||||||
|         GPU_IMAGE=arm64v8/centos:7 |  | ||||||
|         DOCKER_GPU_BUILD_ARG=" --build-arg DEVTOOLSET_VERSION=10" |  | ||||||
|         MANY_LINUX_VERSION="aarch64" |  | ||||||
|         ;; |  | ||||||
|     cpu-aarch64-2_28) |  | ||||||
|         TARGET=final |  | ||||||
|         DOCKER_TAG=cpu-aarch64 |  | ||||||
|         GPU_IMAGE=arm64v8/almalinux:8 |  | ||||||
|         DOCKER_GPU_BUILD_ARG=" --build-arg DEVTOOLSET_VERSION=11" |  | ||||||
|         MANY_LINUX_VERSION="2_28_aarch64" |  | ||||||
|         ;; |  | ||||||
|     cpu-cxx11-abi) |  | ||||||
|         TARGET=final |  | ||||||
|         DOCKER_TAG=cpu-cxx11-abi |  | ||||||
|         GPU_IMAGE="" |  | ||||||
|         DOCKER_GPU_BUILD_ARG=" --build-arg DEVTOOLSET_VERSION=9" |  | ||||||
|         MANY_LINUX_VERSION="cxx11-abi" |  | ||||||
|         ;; |  | ||||||
|     cpu-s390x) |  | ||||||
|         TARGET=final |  | ||||||
|         DOCKER_TAG=cpu-s390x |  | ||||||
|         GPU_IMAGE=redhat/ubi9 |  | ||||||
|         DOCKER_GPU_BUILD_ARG="" |  | ||||||
|         MANY_LINUX_VERSION="s390x" |  | ||||||
|         ;; |  | ||||||
|     cuda) |  | ||||||
|         TARGET=cuda_final |  | ||||||
|         DOCKER_TAG=cuda${GPU_ARCH_VERSION} |  | ||||||
|         # Keep this up to date with the minimum version of CUDA we currently support |  | ||||||
|         GPU_IMAGE=centos:7 |  | ||||||
|         DOCKER_GPU_BUILD_ARG="--build-arg BASE_CUDA_VERSION=${GPU_ARCH_VERSION} --build-arg DEVTOOLSET_VERSION=9" |  | ||||||
|         ;; |  | ||||||
|     cuda-manylinux_2_28) |  | ||||||
|         TARGET=cuda_final |  | ||||||
|         DOCKER_TAG=cuda${GPU_ARCH_VERSION} |  | ||||||
|         GPU_IMAGE=amd64/almalinux:8 |  | ||||||
|         DOCKER_GPU_BUILD_ARG="--build-arg BASE_CUDA_VERSION=${GPU_ARCH_VERSION} --build-arg DEVTOOLSET_VERSION=11" |  | ||||||
|         MANY_LINUX_VERSION="2_28" |  | ||||||
|         ;; |  | ||||||
|     cuda-aarch64) |  | ||||||
|         TARGET=cuda_final |  | ||||||
|         DOCKER_TAG=cuda${GPU_ARCH_VERSION} |  | ||||||
|         GPU_IMAGE=arm64v8/centos:7 |  | ||||||
|         DOCKER_GPU_BUILD_ARG="--build-arg BASE_CUDA_VERSION=${GPU_ARCH_VERSION} --build-arg DEVTOOLSET_VERSION=11" |  | ||||||
|         MANY_LINUX_VERSION="aarch64" |  | ||||||
|         DOCKERFILE_SUFFIX="_cuda_aarch64" |  | ||||||
|         ;; |  | ||||||
|     rocm) |  | ||||||
|         TARGET=rocm_final |  | ||||||
|         DOCKER_TAG=rocm${GPU_ARCH_VERSION} |  | ||||||
|         GPU_IMAGE=rocm/dev-centos-7:${GPU_ARCH_VERSION}-complete |  | ||||||
|         PYTORCH_ROCM_ARCH="gfx900;gfx906;gfx908;gfx90a;gfx1030;gfx1100" |  | ||||||
|         ROCM_REGEX="([0-9]+)\.([0-9]+)[\.]?([0-9]*)" |  | ||||||
|         if [[ $GPU_ARCH_VERSION =~ $ROCM_REGEX ]]; then |  | ||||||
|             ROCM_VERSION_INT=$((${BASH_REMATCH[1]}*10000 + ${BASH_REMATCH[2]}*100 + ${BASH_REMATCH[3]:-0})) |  | ||||||
|         else |  | ||||||
|             echo "ERROR: rocm regex failed" |  | ||||||
|             exit 1 |  | ||||||
|         fi |  | ||||||
|         if [[ $ROCM_VERSION_INT -ge 60000 ]]; then |  | ||||||
|             PYTORCH_ROCM_ARCH+=";gfx942" |  | ||||||
|         fi |  | ||||||
|         DOCKER_GPU_BUILD_ARG="--build-arg ROCM_VERSION=${GPU_ARCH_VERSION} --build-arg PYTORCH_ROCM_ARCH=${PYTORCH_ROCM_ARCH} --build-arg DEVTOOLSET_VERSION=9" |  | ||||||
|         ;; |  | ||||||
|     xpu) |  | ||||||
|         TARGET=xpu_final |  | ||||||
|         DOCKER_TAG=xpu |  | ||||||
|         GPU_IMAGE=amd64/almalinux:8 |  | ||||||
|         DOCKER_GPU_BUILD_ARG=" --build-arg DEVTOOLSET_VERSION=11" |  | ||||||
|         MANY_LINUX_VERSION="2_28" |  | ||||||
|         ;; |  | ||||||
|     *) |  | ||||||
|         echo "ERROR: Unrecognized GPU_ARCH_TYPE: ${GPU_ARCH_TYPE}" |  | ||||||
|         exit 1 |  | ||||||
|         ;; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
| IMAGES='' |  | ||||||
|  |  | ||||||
| if [[ -n ${MANY_LINUX_VERSION} && -z ${DOCKERFILE_SUFFIX} ]]; then |  | ||||||
|     DOCKERFILE_SUFFIX=_${MANY_LINUX_VERSION} |  | ||||||
| fi |  | ||||||
| ( |  | ||||||
|     set -x |  | ||||||
|     DOCKER_BUILDKIT=1 docker build \ |  | ||||||
|         ${DOCKER_GPU_BUILD_ARG} \ |  | ||||||
|         --build-arg "GPU_IMAGE=${GPU_IMAGE}" \ |  | ||||||
|         --target "${TARGET}" \ |  | ||||||
|         -t "${DOCKER_IMAGE}" \ |  | ||||||
|         $@ \ |  | ||||||
|         -f "${TOPDIR}/.ci/docker/manywheel/Dockerfile${DOCKERFILE_SUFFIX}" \ |  | ||||||
|         "${TOPDIR}/.ci/docker/" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| GITHUB_REF=${GITHUB_REF:-$(git symbolic-ref -q HEAD || git describe --tags --exact-match)} |  | ||||||
| GIT_BRANCH_NAME=${GITHUB_REF##*/} |  | ||||||
| GIT_COMMIT_SHA=${GITHUB_SHA:-$(git rev-parse HEAD)} |  | ||||||
| DOCKER_IMAGE_BRANCH_TAG=${DOCKER_IMAGE}-${GIT_BRANCH_NAME} |  | ||||||
| DOCKER_IMAGE_SHA_TAG=${DOCKER_IMAGE}-${GIT_COMMIT_SHA} |  | ||||||
|  |  | ||||||
| if [[ "${WITH_PUSH}" == true ]]; then |  | ||||||
|     ( |  | ||||||
|         set -x |  | ||||||
|         docker push "${DOCKER_IMAGE}" |  | ||||||
|         if [[ -n ${GITHUB_REF} ]]; then |  | ||||||
|             docker tag ${DOCKER_IMAGE} ${DOCKER_IMAGE_BRANCH_TAG} |  | ||||||
|             docker tag ${DOCKER_IMAGE} ${DOCKER_IMAGE_SHA_TAG} |  | ||||||
|             docker push "${DOCKER_IMAGE_BRANCH_TAG}" |  | ||||||
|             docker push "${DOCKER_IMAGE_SHA_TAG}" |  | ||||||
|         fi |  | ||||||
|     ) |  | ||||||
| fi |  | ||||||
| @ -1,131 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Top-level build script called from Dockerfile |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| # Stop at any error, show all commands |  | ||||||
| set -ex |  | ||||||
|  |  | ||||||
| # openssl version to build, with expected sha256 hash of .tar.gz |  | ||||||
| # archive |  | ||||||
| OPENSSL_ROOT=openssl-1.1.1l |  | ||||||
| OPENSSL_HASH=0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1 |  | ||||||
| DEVTOOLS_HASH=a8ebeb4bed624700f727179e6ef771dafe47651131a00a78b342251415646acc |  | ||||||
| PATCHELF_HASH=d9afdff4baeacfbc64861454f368b7f2c15c44d245293f7587bbf726bfe722fb |  | ||||||
| CURL_ROOT=curl-7.73.0 |  | ||||||
| CURL_HASH=cf34fe0b07b800f1c01a499a6e8b2af548f6d0e044dca4a29d88a4bee146d131 |  | ||||||
| AUTOCONF_ROOT=autoconf-2.69 |  | ||||||
| AUTOCONF_HASH=954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969 |  | ||||||
|  |  | ||||||
| # Get build utilities |  | ||||||
| MY_DIR=$(dirname "${BASH_SOURCE[0]}") |  | ||||||
| source $MY_DIR/build_utils.sh |  | ||||||
|  |  | ||||||
| if [ "$(uname -m)" != "s390x" ] ; then |  | ||||||
|     # Dependencies for compiling Python that we want to remove from |  | ||||||
|     # the final image after compiling Python |  | ||||||
|     PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel" |  | ||||||
|  |  | ||||||
|     # Libraries that are allowed as part of the manylinux1 profile |  | ||||||
|     MANYLINUX1_DEPS="glibc-devel libstdc++-devel glib2-devel libX11-devel libXext-devel libXrender-devel  mesa-libGL-devel libICE-devel libSM-devel ncurses-devel" |  | ||||||
|  |  | ||||||
|     # Development tools and libraries |  | ||||||
|     yum -y install bzip2 make git patch unzip bison yasm diffutils \ |  | ||||||
|         automake which file cmake28 \ |  | ||||||
|         kernel-devel-`uname -r` \ |  | ||||||
|         ${PYTHON_COMPILE_DEPS} |  | ||||||
| else |  | ||||||
|     # Dependencies for compiling Python that we want to remove from |  | ||||||
|     # the final image after compiling Python |  | ||||||
|     PYTHON_COMPILE_DEPS="zlib1g-dev libbz2-dev libncurses-dev libsqlite3-dev libdb-dev libpcap-dev liblzma-dev libffi-dev" |  | ||||||
|  |  | ||||||
|     # Libraries that are allowed as part of the manylinux1 profile |  | ||||||
|     MANYLINUX1_DEPS="libglib2.0-dev libX11-dev libncurses-dev" |  | ||||||
|  |  | ||||||
|     # Development tools and libraries |  | ||||||
|     apt install -y bzip2 make git patch unzip diffutils \ |  | ||||||
|         automake which file cmake \ |  | ||||||
|         linux-headers-virtual \ |  | ||||||
|         ${PYTHON_COMPILE_DEPS} |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Install newest autoconf |  | ||||||
| build_autoconf $AUTOCONF_ROOT $AUTOCONF_HASH |  | ||||||
| autoconf --version |  | ||||||
|  |  | ||||||
| # Compile the latest Python releases. |  | ||||||
| # (In order to have a proper SSL module, Python is compiled |  | ||||||
| # against a recent openssl [see env vars above], which is linked |  | ||||||
| # statically. We delete openssl afterwards.) |  | ||||||
| build_openssl $OPENSSL_ROOT $OPENSSL_HASH |  | ||||||
| /build_scripts/install_cpython.sh |  | ||||||
|  |  | ||||||
| PY39_BIN=/opt/python/cp39-cp39/bin |  | ||||||
|  |  | ||||||
| # Our openssl doesn't know how to find the system CA trust store |  | ||||||
| #   (https://github.com/pypa/manylinux/issues/53) |  | ||||||
| # And it's not clear how up-to-date that is anyway |  | ||||||
| # So let's just use the same one pip and everyone uses |  | ||||||
| $PY39_BIN/pip install certifi |  | ||||||
| ln -s $($PY39_BIN/python -c 'import certifi; print(certifi.where())') \ |  | ||||||
|       /opt/_internal/certs.pem |  | ||||||
| # If you modify this line you also have to modify the versions in the |  | ||||||
| # Dockerfiles: |  | ||||||
| export SSL_CERT_FILE=/opt/_internal/certs.pem |  | ||||||
|  |  | ||||||
| # Install newest curl |  | ||||||
| build_curl $CURL_ROOT $CURL_HASH |  | ||||||
| rm -rf /usr/local/include/curl /usr/local/lib/libcurl* /usr/local/lib/pkgconfig/libcurl.pc |  | ||||||
| hash -r |  | ||||||
| curl --version |  | ||||||
| curl-config --features |  | ||||||
|  |  | ||||||
| # Install patchelf (latest with unreleased bug fixes) |  | ||||||
| curl -sLOk https://nixos.org/releases/patchelf/patchelf-0.10/patchelf-0.10.tar.gz |  | ||||||
| # check_sha256sum patchelf-0.9njs2.tar.gz $PATCHELF_HASH |  | ||||||
| tar -xzf patchelf-0.10.tar.gz |  | ||||||
| (cd patchelf-0.10 && ./configure && make && make install) |  | ||||||
| rm -rf patchelf-0.10.tar.gz patchelf-0.10 |  | ||||||
|  |  | ||||||
| # Install latest pypi release of auditwheel |  | ||||||
| $PY39_BIN/pip install auditwheel |  | ||||||
| ln -s $PY39_BIN/auditwheel /usr/local/bin/auditwheel |  | ||||||
|  |  | ||||||
| # Clean up development headers and other unnecessary stuff for |  | ||||||
| # final image |  | ||||||
| if [ "$(uname -m)" != "s390x" ] ; then |  | ||||||
|     yum -y erase wireless-tools gtk2 libX11 hicolor-icon-theme \ |  | ||||||
|         avahi freetype bitstream-vera-fonts \ |  | ||||||
|         ${PYTHON_COMPILE_DEPS} || true > /dev/null 2>&1 |  | ||||||
|     yum -y install ${MANYLINUX1_DEPS} |  | ||||||
|     yum -y clean all > /dev/null 2>&1 |  | ||||||
|     yum list installed |  | ||||||
| else |  | ||||||
|     apt purge -y ${PYTHON_COMPILE_DEPS} || true > /dev/null 2>&1 |  | ||||||
| fi |  | ||||||
| # we don't need libpython*.a, and they're many megabytes |  | ||||||
| find /opt/_internal -name '*.a' -print0 | xargs -0 rm -f |  | ||||||
| # Strip what we can -- and ignore errors, because this just attempts to strip |  | ||||||
| # *everything*, including non-ELF files: |  | ||||||
| find /opt/_internal -type f -print0 \ |  | ||||||
|     | xargs -0 -n1 strip --strip-unneeded 2>/dev/null || true |  | ||||||
| # We do not need the Python test suites, or indeed the precompiled .pyc and |  | ||||||
| # .pyo files. Partially cribbed from: |  | ||||||
| #    https://github.com/docker-library/python/blob/master/3.4/slim/Dockerfile |  | ||||||
| find /opt/_internal \ |  | ||||||
|      \( -type d -a -name test -o -name tests \) \ |  | ||||||
|   -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ |  | ||||||
|   -print0 | xargs -0 rm -f |  | ||||||
|  |  | ||||||
| for PYTHON in /opt/python/*/bin/python; do |  | ||||||
|     # Smoke test to make sure that our Pythons work, and do indeed detect as |  | ||||||
|     # being manylinux compatible: |  | ||||||
|     $PYTHON $MY_DIR/manylinux1-check.py |  | ||||||
|     # Make sure that SSL cert checking works |  | ||||||
|     $PYTHON $MY_DIR/ssl-check.py |  | ||||||
| done |  | ||||||
|  |  | ||||||
| # Fix libc headers to remain compatible with C99 compilers. |  | ||||||
| find /usr/include/ -type f -exec sed -i 's/\bextern _*inline_*\b/extern __inline __attribute__ ((__gnu_inline__))/g' {} + |  | ||||||
|  |  | ||||||
| # Now we can delete our built SSL |  | ||||||
| rm -rf /usr/local/ssl |  | ||||||
| @ -1,91 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Helper utilities for build |  | ||||||
| # Script used only in CD pipeline |  | ||||||
|  |  | ||||||
| OPENSSL_DOWNLOAD_URL=https://www.openssl.org/source/old/1.1.1/ |  | ||||||
| CURL_DOWNLOAD_URL=https://curl.askapache.com/download |  | ||||||
|  |  | ||||||
| AUTOCONF_DOWNLOAD_URL=https://ftp.gnu.org/gnu/autoconf |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function check_var { |  | ||||||
|     if [ -z "$1" ]; then |  | ||||||
|         echo "required variable not defined" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function do_openssl_build { |  | ||||||
|     ./config no-ssl2 no-shared -fPIC --prefix=/usr/local/ssl > /dev/null |  | ||||||
|     make > /dev/null |  | ||||||
|     make install > /dev/null |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function check_sha256sum { |  | ||||||
|     local fname=$1 |  | ||||||
|     check_var ${fname} |  | ||||||
|     local sha256=$2 |  | ||||||
|     check_var ${sha256} |  | ||||||
|  |  | ||||||
|     echo "${sha256}  ${fname}" > ${fname}.sha256 |  | ||||||
|     sha256sum -c ${fname}.sha256 |  | ||||||
|     rm -f ${fname}.sha256 |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function build_openssl { |  | ||||||
|     local openssl_fname=$1 |  | ||||||
|     check_var ${openssl_fname} |  | ||||||
|     local openssl_sha256=$2 |  | ||||||
|     check_var ${openssl_sha256} |  | ||||||
|     check_var ${OPENSSL_DOWNLOAD_URL} |  | ||||||
|     curl -sLO ${OPENSSL_DOWNLOAD_URL}/${openssl_fname}.tar.gz |  | ||||||
|     check_sha256sum ${openssl_fname}.tar.gz ${openssl_sha256} |  | ||||||
|     tar -xzf ${openssl_fname}.tar.gz |  | ||||||
|     (cd ${openssl_fname} && do_openssl_build) |  | ||||||
|     rm -rf ${openssl_fname} ${openssl_fname}.tar.gz |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function do_curl_build { |  | ||||||
|     LIBS=-ldl ./configure --with-ssl --disable-shared > /dev/null |  | ||||||
|     make > /dev/null |  | ||||||
|     make install > /dev/null |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function build_curl { |  | ||||||
|     local curl_fname=$1 |  | ||||||
|     check_var ${curl_fname} |  | ||||||
|     local curl_sha256=$2 |  | ||||||
|     check_var ${curl_sha256} |  | ||||||
|     check_var ${CURL_DOWNLOAD_URL} |  | ||||||
|     curl -sLO ${CURL_DOWNLOAD_URL}/${curl_fname}.tar.bz2 |  | ||||||
|     check_sha256sum ${curl_fname}.tar.bz2 ${curl_sha256} |  | ||||||
|     tar -jxf ${curl_fname}.tar.bz2 |  | ||||||
|     (cd ${curl_fname} && do_curl_build) |  | ||||||
|     rm -rf ${curl_fname} ${curl_fname}.tar.bz2 |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function do_standard_install { |  | ||||||
|     ./configure > /dev/null |  | ||||||
|     make > /dev/null |  | ||||||
|     make install > /dev/null |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| function build_autoconf { |  | ||||||
|     local autoconf_fname=$1 |  | ||||||
|     check_var ${autoconf_fname} |  | ||||||
|     local autoconf_sha256=$2 |  | ||||||
|     check_var ${autoconf_sha256} |  | ||||||
|     check_var ${AUTOCONF_DOWNLOAD_URL} |  | ||||||
|     curl -sLO ${AUTOCONF_DOWNLOAD_URL}/${autoconf_fname}.tar.gz |  | ||||||
|     check_sha256sum ${autoconf_fname}.tar.gz ${autoconf_sha256} |  | ||||||
|     tar -zxf ${autoconf_fname}.tar.gz |  | ||||||
|     (cd ${autoconf_fname} && do_standard_install) |  | ||||||
|     rm -rf ${autoconf_fname} ${autoconf_fname}.tar.gz |  | ||||||
| } |  | ||||||
| @ -1,60 +0,0 @@ | |||||||
| # Logic copied from PEP 513 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def is_manylinux1_compatible(): |  | ||||||
|     # Only Linux, and only x86-64 / i686 |  | ||||||
|     from distutils.util import get_platform |  | ||||||
|  |  | ||||||
|     if get_platform() not in ["linux-x86_64", "linux-i686", "linux-s390x"]: |  | ||||||
|         return False |  | ||||||
|  |  | ||||||
|     # Check for presence of _manylinux module |  | ||||||
|     try: |  | ||||||
|         import _manylinux |  | ||||||
|  |  | ||||||
|         return bool(_manylinux.manylinux1_compatible) |  | ||||||
|     except (ImportError, AttributeError): |  | ||||||
|         # Fall through to heuristic check below |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     # Check glibc version. CentOS 5 uses glibc 2.5. |  | ||||||
|     return have_compatible_glibc(2, 5) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def have_compatible_glibc(major, minimum_minor): |  | ||||||
|     import ctypes |  | ||||||
|  |  | ||||||
|     process_namespace = ctypes.CDLL(None) |  | ||||||
|     try: |  | ||||||
|         gnu_get_libc_version = process_namespace.gnu_get_libc_version |  | ||||||
|     except AttributeError: |  | ||||||
|         # Symbol doesn't exist -> therefore, we are not linked to |  | ||||||
|         # glibc. |  | ||||||
|         return False |  | ||||||
|  |  | ||||||
|     # Call gnu_get_libc_version, which returns a string like "2.5". |  | ||||||
|     gnu_get_libc_version.restype = ctypes.c_char_p |  | ||||||
|     version_str = gnu_get_libc_version() |  | ||||||
|     # py2 / py3 compatibility: |  | ||||||
|     if not isinstance(version_str, str): |  | ||||||
|         version_str = version_str.decode("ascii") |  | ||||||
|  |  | ||||||
|     # Parse string and check against requested version. |  | ||||||
|     version = [int(piece) for piece in version_str.split(".")] |  | ||||||
|     assert len(version) == 2 |  | ||||||
|     if major != version[0]: |  | ||||||
|         return False |  | ||||||
|     if minimum_minor > version[1]: |  | ||||||
|         return False |  | ||||||
|     return True |  | ||||||
|  |  | ||||||
|  |  | ||||||
| import sys |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if is_manylinux1_compatible(): |  | ||||||
|     print(f"{sys.executable} is manylinux1 compatible") |  | ||||||
|     sys.exit(0) |  | ||||||
| else: |  | ||||||
|     print(f"{sys.executable} is NOT manylinux1 compatible") |  | ||||||
|     sys.exit(1) |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| # cf. https://github.com/pypa/manylinux/issues/53 |  | ||||||
|  |  | ||||||
| GOOD_SSL = "https://google.com" |  | ||||||
| BAD_SSL = "https://self-signed.badssl.com" |  | ||||||
|  |  | ||||||
| import sys |  | ||||||
|  |  | ||||||
|  |  | ||||||
| print("Testing SSL certificate checking for Python:", sys.version) |  | ||||||
|  |  | ||||||
| if sys.version_info[:2] < (2, 7) or sys.version_info[:2] < (3, 4): |  | ||||||
|     print("This version never checks SSL certs; skipping tests") |  | ||||||
|     sys.exit(0) |  | ||||||
|  |  | ||||||
| if sys.version_info[0] >= 3: |  | ||||||
|     from urllib.request import urlopen |  | ||||||
|  |  | ||||||
|     EXC = OSError |  | ||||||
| else: |  | ||||||
|     from urllib import urlopen |  | ||||||
|  |  | ||||||
|     EXC = IOError |  | ||||||
|  |  | ||||||
| print(f"Connecting to {GOOD_SSL} should work") |  | ||||||
| urlopen(GOOD_SSL) |  | ||||||
| print("...it did, yay.") |  | ||||||
|  |  | ||||||
| print(f"Connecting to {BAD_SSL} should fail") |  | ||||||
| try: |  | ||||||
|     urlopen(BAD_SSL) |  | ||||||
|     # If we get here then we failed: |  | ||||||
|     print("...it DIDN'T!!!!!11!!1one!") |  | ||||||
|     sys.exit(1) |  | ||||||
| except EXC: |  | ||||||
|     print("...it did, yay.") |  | ||||||
| @ -85,10 +85,10 @@ librosa>=0.6.2 ; python_version < "3.11" | |||||||
| #Pinned versions: | #Pinned versions: | ||||||
| #test that import: | #test that import: | ||||||
|  |  | ||||||
| mypy==1.10.0 | mypy==1.9.0 | ||||||
| # Pin MyPy version because new errors are likely to appear with each release | # Pin MyPy version because new errors are likely to appear with each release | ||||||
| #Description: linter | #Description: linter | ||||||
| #Pinned versions: 1.10.0 | #Pinned versions: 1.9.0 | ||||||
| #test that import: test_typing.py, test_type_hints.py | #test that import: test_typing.py, test_type_hints.py | ||||||
|  |  | ||||||
| networkx==2.8.8 | networkx==2.8.8 | ||||||
| @ -134,9 +134,9 @@ opt-einsum==3.3 | |||||||
| #Pinned versions: 3.3 | #Pinned versions: 3.3 | ||||||
| #test that import: test_linalg.py | #test that import: test_linalg.py | ||||||
|  |  | ||||||
| optree==0.12.1 | optree==0.11.0 | ||||||
| #Description: A library for tree manipulation | #Description: A library for tree manipulation | ||||||
| #Pinned versions: 0.12.1 | #Pinned versions: 0.11.0 | ||||||
| #test that import: test_vmap.py, test_aotdispatch.py, test_dynamic_shapes.py, | #test that import: test_vmap.py, test_aotdispatch.py, test_dynamic_shapes.py, | ||||||
| #test_pytree.py, test_ops.py, test_control_flow.py, test_modules.py, | #test_pytree.py, test_ops.py, test_control_flow.py, test_modules.py, | ||||||
| #common_utils.py, test_eager_transforms.py, test_python_dispatch.py, | #common_utils.py, test_eager_transforms.py, test_python_dispatch.py, | ||||||
| @ -306,7 +306,7 @@ pywavelets==1.5.0 ; python_version >= "3.12" | |||||||
| #Pinned versions: 1.4.1 | #Pinned versions: 1.4.1 | ||||||
| #test that import: | #test that import: | ||||||
|  |  | ||||||
| lxml==5.0.0 | lxml==5.0.0. | ||||||
| #Description: This is a requirement of unittest-xml-reporting | #Description: This is a requirement of unittest-xml-reporting | ||||||
|  |  | ||||||
| # Python-3.9 binaries | # Python-3.9 binaries | ||||||
|  | |||||||
| @ -103,14 +103,6 @@ COPY triton_version.txt triton_version.txt | |||||||
| RUN if [ -n "${TRITON}" ]; then bash ./install_triton.sh; fi | RUN if [ -n "${TRITON}" ]; then bash ./install_triton.sh; fi | ||||||
| RUN rm install_triton.sh common_utils.sh triton.txt triton_version.txt | RUN rm install_triton.sh common_utils.sh triton.txt triton_version.txt | ||||||
|  |  | ||||||
| ARG HALIDE |  | ||||||
| # Build and install halide |  | ||||||
| COPY ./common/install_halide.sh install_halide.sh |  | ||||||
| COPY ./common/common_utils.sh common_utils.sh |  | ||||||
| COPY ci_commit_pins/halide.txt halide.txt |  | ||||||
| RUN if [ -n "${HALIDE}" ]; then bash ./install_halide.sh; fi |  | ||||||
| RUN rm install_halide.sh common_utils.sh halide.txt |  | ||||||
|  |  | ||||||
| # Install ccache/sccache (do this last, so we get priority in PATH) | # Install ccache/sccache (do this last, so we get priority in PATH) | ||||||
| COPY ./common/install_cache.sh install_cache.sh | COPY ./common/install_cache.sh install_cache.sh | ||||||
| ENV PATH /opt/cache/bin:$PATH | ENV PATH /opt/cache/bin:$PATH | ||||||
| @ -147,7 +139,7 @@ COPY --from=pytorch/llvm:9.0.1 /opt/llvm /opt/llvm | |||||||
| ARG CUDNN_VERSION | ARG CUDNN_VERSION | ||||||
| ARG CUDA_VERSION | ARG CUDA_VERSION | ||||||
| COPY ./common/install_cudnn.sh install_cudnn.sh | COPY ./common/install_cudnn.sh install_cudnn.sh | ||||||
| RUN if [ -n "${CUDNN_VERSION}" ]; then bash install_cudnn.sh; fi | RUN if [ "${CUDNN_VERSION}" -eq 8 ]; then bash install_cudnn.sh; fi | ||||||
| RUN rm install_cudnn.sh | RUN rm install_cudnn.sh | ||||||
|  |  | ||||||
| # Install CUSPARSELT | # Install CUSPARSELT | ||||||
|  | |||||||
| @ -105,18 +105,18 @@ COPY triton_version.txt triton_version.txt | |||||||
| RUN if [ -n "${TRITON}" ]; then bash ./install_triton.sh; fi | RUN if [ -n "${TRITON}" ]; then bash ./install_triton.sh; fi | ||||||
| RUN rm install_triton.sh common_utils.sh triton-rocm.txt triton_version.txt | RUN rm install_triton.sh common_utils.sh triton-rocm.txt triton_version.txt | ||||||
|  |  | ||||||
| # Install AOTriton |  | ||||||
| COPY ./aotriton_version.txt aotriton_version.txt |  | ||||||
| COPY ./common/common_utils.sh common_utils.sh |  | ||||||
| COPY ./common/install_aotriton.sh install_aotriton.sh |  | ||||||
| RUN ["/bin/bash", "-c", "./install_aotriton.sh /opt/rocm && rm -rf install_aotriton.sh aotriton_version.txt common_utils.sh"] |  | ||||||
| ENV AOTRITON_INSTALLED_PREFIX /opt/rocm/aotriton |  | ||||||
|  |  | ||||||
| # Install ccache/sccache (do this last, so we get priority in PATH) | # Install ccache/sccache (do this last, so we get priority in PATH) | ||||||
| COPY ./common/install_cache.sh install_cache.sh | COPY ./common/install_cache.sh install_cache.sh | ||||||
| ENV PATH /opt/cache/bin:$PATH | ENV PATH /opt/cache/bin:$PATH | ||||||
| RUN bash ./install_cache.sh && rm install_cache.sh | RUN bash ./install_cache.sh && rm install_cache.sh | ||||||
|  |  | ||||||
|  | # Install AOTriton | ||||||
|  | COPY ci_commit_pins/aotriton.txt aotriton.txt | ||||||
|  | COPY ./common/common_utils.sh common_utils.sh | ||||||
|  | COPY ./common/install_aotriton.sh install_aotriton.sh | ||||||
|  | RUN bash ./install_aotriton.sh /opt/rocm/aotriton && rm -rf install_aotriton.sh aotriton aotriton.txt common_utils.sh | ||||||
|  | ENV AOTRITON_INSTALLED_PREFIX /opt/rocm/aotriton | ||||||
|  |  | ||||||
| # Include BUILD_ENVIRONMENT environment variable in image | # Include BUILD_ENVIRONMENT environment variable in image | ||||||
| ARG BUILD_ENVIRONMENT | ARG BUILD_ENVIRONMENT | ||||||
| ENV BUILD_ENVIRONMENT ${BUILD_ENVIRONMENT} | ENV BUILD_ENVIRONMENT ${BUILD_ENVIRONMENT} | ||||||
|  | |||||||
| @ -50,7 +50,7 @@ RUN  bash ./install_lcov.sh && rm install_lcov.sh | |||||||
|  |  | ||||||
| # Install cuda and cudnn | # Install cuda and cudnn | ||||||
| ARG CUDA_VERSION | ARG CUDA_VERSION | ||||||
| COPY ./common/install_cuda.sh install_cuda.sh | RUN wget -q https://raw.githubusercontent.com/pytorch/builder/main/common/install_cuda.sh -O install_cuda.sh | ||||||
| RUN bash ./install_cuda.sh ${CUDA_VERSION} && rm install_cuda.sh | RUN bash ./install_cuda.sh ${CUDA_VERSION} && rm install_cuda.sh | ||||||
| ENV DESIRED_CUDA ${CUDA_VERSION} | ENV DESIRED_CUDA ${CUDA_VERSION} | ||||||
| ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH | ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH | ||||||
| @ -155,14 +155,6 @@ COPY ci_commit_pins/executorch.txt executorch.txt | |||||||
| RUN if [ -n "${EXECUTORCH}" ]; then bash ./install_executorch.sh; fi | RUN if [ -n "${EXECUTORCH}" ]; then bash ./install_executorch.sh; fi | ||||||
| RUN rm install_executorch.sh common_utils.sh executorch.txt | RUN rm install_executorch.sh common_utils.sh executorch.txt | ||||||
|  |  | ||||||
| ARG HALIDE |  | ||||||
| # Build and install halide |  | ||||||
| COPY ./common/install_halide.sh install_halide.sh |  | ||||||
| COPY ./common/common_utils.sh common_utils.sh |  | ||||||
| COPY ci_commit_pins/halide.txt halide.txt |  | ||||||
| RUN if [ -n "${HALIDE}" ]; then bash ./install_halide.sh; fi |  | ||||||
| RUN rm install_halide.sh common_utils.sh halide.txt |  | ||||||
|  |  | ||||||
| ARG ONNX | ARG ONNX | ||||||
| # Install ONNX dependencies | # Install ONNX dependencies | ||||||
| COPY ./common/install_onnx.sh ./common/common_utils.sh ./ | COPY ./common/install_onnx.sh ./common/common_utils.sh ./ | ||||||
|  | |||||||
| @ -1 +1,42 @@ | |||||||
| This directory contains scripts for our continuous integration. | This directory contains scripts for our continuous integration. | ||||||
|  |  | ||||||
|  | One important thing to keep in mind when reading the scripts here is | ||||||
|  | that they are all based off of Docker images, which we build for each of | ||||||
|  | the various system configurations we want to run on Jenkins.  This means | ||||||
|  | it is very easy to run these tests yourself: | ||||||
|  |  | ||||||
|  | 1. Figure out what Docker image you want.  The general template for our | ||||||
|  |    images look like: | ||||||
|  |    ``registry.pytorch.org/pytorch/pytorch-$BUILD_ENVIRONMENT:$DOCKER_VERSION``, | ||||||
|  |    where ``$BUILD_ENVIRONMENT`` is one of the build environments | ||||||
|  |    enumerated in | ||||||
|  |    [pytorch-dockerfiles](https://github.com/pytorch/pytorch/blob/master/.ci/docker/build.sh). The dockerfile used by jenkins can be found under the `.ci` [directory](https://github.com/pytorch/pytorch/blob/master/.ci/docker) | ||||||
|  |  | ||||||
|  | 2. Run ``docker run -it -u jenkins $DOCKER_IMAGE``, clone PyTorch and | ||||||
|  |    run one of the scripts in this directory. | ||||||
|  |  | ||||||
|  | The Docker images are designed so that any "reasonable" build commands | ||||||
|  | will work; if you look in [build.sh](build.sh) you will see that it is a | ||||||
|  | very simple script.  This is intentional.  Idiomatic build instructions | ||||||
|  | should work inside all of our Docker images.  You can tweak the commands | ||||||
|  | however you need (e.g., in case you want to rebuild with DEBUG, or rerun | ||||||
|  | the build with higher verbosity, etc.). | ||||||
|  |  | ||||||
|  | We have to do some work to make this so.  Here is a summary of the | ||||||
|  | mechanisms we use: | ||||||
|  |  | ||||||
|  | - We install binaries to directories like `/usr/local/bin` which | ||||||
|  |   are automatically part of your PATH. | ||||||
|  |  | ||||||
|  | - We add entries to the PATH using Docker ENV variables (so | ||||||
|  |   they apply when you enter Docker) and `/etc/environment` (so they | ||||||
|  |   continue to apply even if you sudo), instead of modifying | ||||||
|  |   `PATH` in our build scripts. | ||||||
|  |  | ||||||
|  | - We use `/etc/ld.so.conf.d` to register directories containing | ||||||
|  |   shared libraries, instead of modifying `LD_LIBRARY_PATH` in our | ||||||
|  |   build scripts. | ||||||
|  |  | ||||||
|  | - We reroute well known paths like `/usr/bin/gcc` to alternate | ||||||
|  |   implementations with `update-alternatives`, instead of setting | ||||||
|  |   `CC` and `CXX` in our implementations. | ||||||
|  | |||||||
| @ -230,10 +230,6 @@ if [[ "${BUILD_ENVIRONMENT}" != *android* && "${BUILD_ENVIRONMENT}" != *cuda* ]] | |||||||
|   export BUILD_STATIC_RUNTIME_BENCHMARK=ON |   export BUILD_STATIC_RUNTIME_BENCHMARK=ON | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [[ "$BUILD_ENVIRONMENT" == *-debug* ]]; then |  | ||||||
|   export CMAKE_BUILD_TYPE=RelWithAssert |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Do not change workspace permissions for ROCm CI jobs | # Do not change workspace permissions for ROCm CI jobs | ||||||
| # as it can leave workspace with bad permissions for cancelled jobs | # as it can leave workspace with bad permissions for cancelled jobs | ||||||
| if [[ "$BUILD_ENVIRONMENT" != *rocm* ]]; then | if [[ "$BUILD_ENVIRONMENT" != *rocm* ]]; then | ||||||
| @ -288,26 +284,12 @@ else | |||||||
|         # Which should be backward compatible with Numpy-1.X |         # Which should be backward compatible with Numpy-1.X | ||||||
|         python -mpip install --pre numpy==2.0.0rc1 |         python -mpip install --pre numpy==2.0.0rc1 | ||||||
|       fi |       fi | ||||||
|  |       WERROR=1 python setup.py bdist_wheel | ||||||
|       WERROR=1 python setup.py clean |  | ||||||
|  |  | ||||||
|       if [[ "$USE_SPLIT_BUILD" == "true" ]]; then |  | ||||||
|         BUILD_LIBTORCH_WHL=1 BUILD_PYTHON_ONLY=0 python setup.py bdist_wheel |  | ||||||
|         BUILD_LIBTORCH_WHL=0 BUILD_PYTHON_ONLY=1 python setup.py bdist_wheel --cmake |  | ||||||
|       else |  | ||||||
|         WERROR=1 python setup.py bdist_wheel |  | ||||||
|       fi |  | ||||||
|     else |     else | ||||||
|       python setup.py clean |  | ||||||
|       if [[ "$BUILD_ENVIRONMENT" == *xla* ]]; then |       if [[ "$BUILD_ENVIRONMENT" == *xla* ]]; then | ||||||
|         source .ci/pytorch/install_cache_xla.sh |         source .ci/pytorch/install_cache_xla.sh | ||||||
|       fi |       fi | ||||||
|       if [[ "$USE_SPLIT_BUILD" == "true" ]]; then |       python setup.py bdist_wheel | ||||||
|         echo "USE_SPLIT_BUILD cannot be used with xla or rocm" |  | ||||||
|         exit 1 |  | ||||||
|       else |  | ||||||
|         python setup.py bdist_wheel |  | ||||||
|       fi |  | ||||||
|     fi |     fi | ||||||
|     pip_install_whl "$(echo dist/*.whl)" |     pip_install_whl "$(echo dist/*.whl)" | ||||||
|  |  | ||||||
| @ -346,10 +328,9 @@ else | |||||||
|     CUSTOM_OP_TEST="$PWD/test/custom_operator" |     CUSTOM_OP_TEST="$PWD/test/custom_operator" | ||||||
|     python --version |     python --version | ||||||
|     SITE_PACKAGES="$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" |     SITE_PACKAGES="$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" | ||||||
|  |  | ||||||
|     mkdir -p "$CUSTOM_OP_BUILD" |     mkdir -p "$CUSTOM_OP_BUILD" | ||||||
|     pushd "$CUSTOM_OP_BUILD" |     pushd "$CUSTOM_OP_BUILD" | ||||||
|     cmake "$CUSTOM_OP_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch;$SITE_PACKAGES" -DPython_EXECUTABLE="$(which python)" \ |     cmake "$CUSTOM_OP_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch" -DPython_EXECUTABLE="$(which python)" \ | ||||||
|           -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM" |           -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM" | ||||||
|     make VERBOSE=1 |     make VERBOSE=1 | ||||||
|     popd |     popd | ||||||
| @ -362,7 +343,7 @@ else | |||||||
|     SITE_PACKAGES="$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" |     SITE_PACKAGES="$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" | ||||||
|     mkdir -p "$JIT_HOOK_BUILD" |     mkdir -p "$JIT_HOOK_BUILD" | ||||||
|     pushd "$JIT_HOOK_BUILD" |     pushd "$JIT_HOOK_BUILD" | ||||||
|     cmake "$JIT_HOOK_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch;$SITE_PACKAGES" -DPython_EXECUTABLE="$(which python)" \ |     cmake "$JIT_HOOK_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch" -DPython_EXECUTABLE="$(which python)" \ | ||||||
|           -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM" |           -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM" | ||||||
|     make VERBOSE=1 |     make VERBOSE=1 | ||||||
|     popd |     popd | ||||||
| @ -374,7 +355,7 @@ else | |||||||
|     python --version |     python --version | ||||||
|     mkdir -p "$CUSTOM_BACKEND_BUILD" |     mkdir -p "$CUSTOM_BACKEND_BUILD" | ||||||
|     pushd "$CUSTOM_BACKEND_BUILD" |     pushd "$CUSTOM_BACKEND_BUILD" | ||||||
|     cmake "$CUSTOM_BACKEND_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch;$SITE_PACKAGES" -DPython_EXECUTABLE="$(which python)" \ |     cmake "$CUSTOM_BACKEND_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch" -DPython_EXECUTABLE="$(which python)" \ | ||||||
|           -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM" |           -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM" | ||||||
|     make VERBOSE=1 |     make VERBOSE=1 | ||||||
|     popd |     popd | ||||||
|  | |||||||
| @ -56,29 +56,9 @@ function assert_git_not_dirty() { | |||||||
| function pip_install_whl() { | function pip_install_whl() { | ||||||
|   # This is used to install PyTorch and other build artifacts wheel locally |   # This is used to install PyTorch and other build artifacts wheel locally | ||||||
|   # without using any network connection |   # without using any network connection | ||||||
|  |   python3 -mpip install --no-index --no-deps "$@" | ||||||
|   # Convert the input arguments into an array |  | ||||||
|   local args=("$@") |  | ||||||
|  |  | ||||||
|   # Check if the first argument contains multiple paths separated by spaces |  | ||||||
|   if [[ "${args[0]}" == *" "* ]]; then |  | ||||||
|     # Split the string by spaces into an array |  | ||||||
|     IFS=' ' read -r -a paths <<< "${args[0]}" |  | ||||||
|     # Loop through each path and install individually |  | ||||||
|     for path in "${paths[@]}"; do |  | ||||||
|       echo "Installing $path" |  | ||||||
|       python3 -mpip install --no-index --no-deps "$path" |  | ||||||
|     done |  | ||||||
|   else |  | ||||||
|     # Loop through each argument and install individually |  | ||||||
|     for path in "${args[@]}"; do |  | ||||||
|       echo "Installing $path" |  | ||||||
|       python3 -mpip install --no-index --no-deps "$path" |  | ||||||
|     done |  | ||||||
|   fi |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| function pip_install() { | function pip_install() { | ||||||
|   # retry 3 times |   # retry 3 times | ||||||
|   # old versions of pip don't have the "--progress-bar" flag |   # old versions of pip don't have the "--progress-bar" flag | ||||||
| @ -208,6 +188,28 @@ function clone_pytorch_xla() { | |||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function checkout_install_torchdeploy() { | ||||||
|  |   local commit | ||||||
|  |   commit=$(get_pinned_commit multipy) | ||||||
|  |   pushd .. | ||||||
|  |   git clone --recurse-submodules https://github.com/pytorch/multipy.git | ||||||
|  |   pushd multipy | ||||||
|  |   git checkout "${commit}" | ||||||
|  |   python multipy/runtime/example/generate_examples.py | ||||||
|  |   BUILD_CUDA_TESTS=1 pip install -e . | ||||||
|  |   popd | ||||||
|  |   popd | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function test_torch_deploy(){ | ||||||
|  |  pushd .. | ||||||
|  |  pushd multipy | ||||||
|  |  ./multipy/runtime/build/test_deploy | ||||||
|  |  ./multipy/runtime/build/test_deploy_gpu | ||||||
|  |  popd | ||||||
|  |  popd | ||||||
|  | } | ||||||
|  |  | ||||||
| function checkout_install_torchbench() { | function checkout_install_torchbench() { | ||||||
|   local commit |   local commit | ||||||
|   commit=$(get_pinned_commit torchbench) |   commit=$(get_pinned_commit torchbench) | ||||||
| @ -222,8 +224,6 @@ function checkout_install_torchbench() { | |||||||
|     # to install and test other models |     # to install and test other models | ||||||
|     python install.py --continue_on_fail |     python install.py --continue_on_fail | ||||||
|   fi |   fi | ||||||
|   echo "Print all dependencies after TorchBench is installed" |  | ||||||
|   python -mpip freeze |  | ||||||
|   popd |   popd | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -6,7 +6,6 @@ from cryptography.hazmat.primitives import hashes, serialization | |||||||
| from cryptography.hazmat.primitives.asymmetric import rsa | from cryptography.hazmat.primitives.asymmetric import rsa | ||||||
| from cryptography.x509.oid import NameOID | from cryptography.x509.oid import NameOID | ||||||
|  |  | ||||||
|  |  | ||||||
| temp_dir = mkdtemp() | temp_dir = mkdtemp() | ||||||
| print(temp_dir) | print(temp_dir) | ||||||
|  |  | ||||||
|  | |||||||
| @ -18,9 +18,8 @@ time python test/run_test.py --verbose -i distributed/test_c10d_gloo | |||||||
| time python test/run_test.py --verbose -i distributed/test_c10d_nccl | time python test/run_test.py --verbose -i distributed/test_c10d_nccl | ||||||
| time python test/run_test.py --verbose -i distributed/test_c10d_spawn_gloo | time python test/run_test.py --verbose -i distributed/test_c10d_spawn_gloo | ||||||
| time python test/run_test.py --verbose -i distributed/test_c10d_spawn_nccl | time python test/run_test.py --verbose -i distributed/test_c10d_spawn_nccl | ||||||
| time python test/run_test.py --verbose -i distributed/test_compute_comm_reordering | time python test/run_test.py --verbose -i distributed/test_cuda_p2p | ||||||
| time python test/run_test.py --verbose -i distributed/test_store | time python test/run_test.py --verbose -i distributed/test_store | ||||||
| time python test/run_test.py --verbose -i distributed/test_symmetric_memory |  | ||||||
| time python test/run_test.py --verbose -i distributed/test_pg_wrapper | time python test/run_test.py --verbose -i distributed/test_pg_wrapper | ||||||
| time python test/run_test.py --verbose -i distributed/rpc/cuda/test_tensorpipe_agent | time python test/run_test.py --verbose -i distributed/rpc/cuda/test_tensorpipe_agent | ||||||
| # FSDP tests | # FSDP tests | ||||||
| @ -44,15 +43,16 @@ time python test/run_test.py --verbose -i distributed/_tensor/test_dtensor_compi | |||||||
| time python test/run_test.py --verbose -i distributed/test_device_mesh | time python test/run_test.py --verbose -i distributed/test_device_mesh | ||||||
|  |  | ||||||
| # DTensor/TP tests | # DTensor/TP tests | ||||||
|  | time python test/run_test.py --verbose -i distributed/tensor/parallel/test_ddp_2d_parallel | ||||||
|  | time python test/run_test.py --verbose -i distributed/tensor/parallel/test_fsdp_2d_parallel | ||||||
| time python test/run_test.py --verbose -i distributed/tensor/parallel/test_tp_examples | time python test/run_test.py --verbose -i distributed/tensor/parallel/test_tp_examples | ||||||
| time python test/run_test.py --verbose -i distributed/tensor/parallel/test_tp_random_state | time python test/run_test.py --verbose -i distributed/tensor/parallel/test_tp_random_state | ||||||
|  |  | ||||||
| # FSDP2 tests | # FSDP2 tests | ||||||
| time python test/run_test.py --verbose -i distributed/_composable/fsdp/test_fully_shard_training -- -k test_2d_mlp_with_nd_mesh | time python test/run_test.py --verbose -i distributed/_composable/fsdp/test_fully_shard_training -- -k test_2d_mlp_with_nd_mesh | ||||||
|  |  | ||||||
| # ND composability tests | # Pipelining composability tests | ||||||
| time python test/run_test.py --verbose -i distributed/_composable/test_composability/test_2d_composability | time python test/run_test.py --verbose -i distributed/pipelining/test_composability.py | ||||||
| time python test/run_test.py --verbose -i distributed/_composable/test_composability/test_pp_composability |  | ||||||
|  |  | ||||||
| # Other tests | # Other tests | ||||||
| time python test/run_test.py --verbose -i test_cuda_primary_ctx | time python test/run_test.py --verbose -i test_cuda_primary_ctx | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ import json | |||||||
| import math | import math | ||||||
| import sys | import sys | ||||||
|  |  | ||||||
|  |  | ||||||
| parser = argparse.ArgumentParser() | parser = argparse.ArgumentParser() | ||||||
| parser.add_argument( | parser.add_argument( | ||||||
|     "--test-name", dest="test_name", action="store", required=True, help="test name" |     "--test-name", dest="test_name", action="store", required=True, help="test name" | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ import sys | |||||||
|  |  | ||||||
| import numpy | import numpy | ||||||
|  |  | ||||||
|  |  | ||||||
| sample_data_list = sys.argv[1:] | sample_data_list = sys.argv[1:] | ||||||
| sample_data_list = [float(v.strip()) for v in sample_data_list] | sample_data_list = [float(v.strip()) for v in sample_data_list] | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,6 @@ | |||||||
| import json | import json | ||||||
| import sys | import sys | ||||||
|  |  | ||||||
|  |  | ||||||
| data_file_path = sys.argv[1] | data_file_path = sys.argv[1] | ||||||
| commit_hash = sys.argv[2] | commit_hash = sys.argv[2] | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,6 +1,5 @@ | |||||||
| import sys | import sys | ||||||
|  |  | ||||||
|  |  | ||||||
| log_file_path = sys.argv[1] | log_file_path = sys.argv[1] | ||||||
|  |  | ||||||
| with open(log_file_path) as f: | with open(log_file_path) as f: | ||||||
|  | |||||||
| @ -249,7 +249,9 @@ fi | |||||||
| # This tests that the debug asserts are working correctly. | # This tests that the debug asserts are working correctly. | ||||||
| if [[ "$BUILD_ENVIRONMENT" == *-debug* ]]; then | if [[ "$BUILD_ENVIRONMENT" == *-debug* ]]; then | ||||||
|     echo "We are in debug mode: $BUILD_ENVIRONMENT. Expect the python assertion to fail" |     echo "We are in debug mode: $BUILD_ENVIRONMENT. Expect the python assertion to fail" | ||||||
|     (cd test && ! get_exit_code python -c "import torch; torch._C._crash_if_debug_asserts_fail(424242)") |     # TODO: Enable the check after we setup the build to run debug asserts without having | ||||||
|  |     #       to do a full (and slow) debug build | ||||||
|  |     # (cd test && ! get_exit_code python -c "import torch; torch._C._crash_if_debug_asserts_fail(424242)") | ||||||
| elif [[ "$BUILD_ENVIRONMENT" != *-bazel-* ]]; then | elif [[ "$BUILD_ENVIRONMENT" != *-bazel-* ]]; then | ||||||
|     # Noop when debug is disabled. Skip bazel jobs because torch isn't available there yet. |     # Noop when debug is disabled. Skip bazel jobs because torch isn't available there yet. | ||||||
|     echo "We are not in debug mode: $BUILD_ENVIRONMENT. Expect the assertion to pass" |     echo "We are not in debug mode: $BUILD_ENVIRONMENT. Expect the assertion to pass" | ||||||
| @ -262,6 +264,18 @@ elif [[ $TEST_CONFIG == 'nogpu_AVX512' ]]; then | |||||||
|   export ATEN_CPU_CAPABILITY=avx2 |   export ATEN_CPU_CAPABILITY=avx2 | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | # temp workarounds for https://github.com/pytorch/pytorch/issues/126692, remove when fixed | ||||||
|  | if [[ "$BUILD_ENVIRONMENT" != *-bazel-* ]]; then | ||||||
|  |   pushd test | ||||||
|  |   CUDA_VERSION=$(python -c "import torch; print(torch.version.cuda)") | ||||||
|  |   if [ "$CUDA_VERSION" == "12.4" ]; then | ||||||
|  |     ISCUDA124="cu124" | ||||||
|  |   else | ||||||
|  |     ISCUDA124="" | ||||||
|  |   fi | ||||||
|  |   popd | ||||||
|  | fi | ||||||
|  |  | ||||||
| test_python_legacy_jit() { | test_python_legacy_jit() { | ||||||
|   time python test/run_test.py --include test_jit_legacy test_jit_fuser_legacy --verbose |   time python test/run_test.py --include test_jit_legacy test_jit_fuser_legacy --verbose | ||||||
|   assert_git_not_dirty |   assert_git_not_dirty | ||||||
| @ -275,9 +289,6 @@ test_python_shard() { | |||||||
|  |  | ||||||
|   # Bare --include flag is not supported and quoting for lint ends up with flag not being interpreted correctly |   # Bare --include flag is not supported and quoting for lint ends up with flag not being interpreted correctly | ||||||
|   # shellcheck disable=SC2086 |   # shellcheck disable=SC2086 | ||||||
|  |  | ||||||
|   # modify LD_LIBRARY_PATH to ensure it has the conda env. |  | ||||||
|   # This set of tests has been shown to be buggy without it for the split-build |  | ||||||
|   time python test/run_test.py --exclude-jit-executor --exclude-distributed-tests $INCLUDE_CLAUSE --shard "$1" "$NUM_TEST_SHARDS" --verbose $PYTHON_TEST_EXTRA_OPTION |   time python test/run_test.py --exclude-jit-executor --exclude-distributed-tests $INCLUDE_CLAUSE --shard "$1" "$NUM_TEST_SHARDS" --verbose $PYTHON_TEST_EXTRA_OPTION | ||||||
|  |  | ||||||
|   assert_git_not_dirty |   assert_git_not_dirty | ||||||
| @ -316,14 +327,14 @@ test_inductor_distributed() { | |||||||
|   python test/run_test.py -i inductor/test_aot_inductor.py -k test_replicate_on_devices --verbose |   python test/run_test.py -i inductor/test_aot_inductor.py -k test_replicate_on_devices --verbose | ||||||
|   python test/run_test.py -i distributed/test_c10d_functional_native.py --verbose |   python test/run_test.py -i distributed/test_c10d_functional_native.py --verbose | ||||||
|   python test/run_test.py -i distributed/_tensor/test_dtensor_compile.py --verbose |   python test/run_test.py -i distributed/_tensor/test_dtensor_compile.py --verbose | ||||||
|   python test/run_test.py -i distributed/tensor/parallel/test_micro_pipeline_tp.py --verbose |   python test/run_test.py -i distributed/tensor/parallel/test_fsdp_2d_parallel.py --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_comm.py --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_comm.py --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_multi_group --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_multi_group --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_with_activation_checkpointing --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_with_activation_checkpointing --verbose | ||||||
|  |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_2d_mlp --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_hsdp --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_hsdp --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_2d_transformer_checkpoint_resume --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_train_parity_2d_transformer_checkpoint_resume --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_gradient_accumulation --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_training.py -k test_gradient_accumulation --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_state_dict.py -k test_dp_state_dict_save_load --verbose |  | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_frozen.py --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_frozen.py --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_mixed_precision.py -k test_compute_dtype --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_mixed_precision.py -k test_compute_dtype --verbose | ||||||
|   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_mixed_precision.py -k test_reduce_dtype --verbose |   python test/run_test.py -i distributed/_composable/fsdp/test_fully_shard_mixed_precision.py -k test_reduce_dtype --verbose | ||||||
| @ -336,34 +347,18 @@ test_inductor_distributed() { | |||||||
|   assert_git_not_dirty |   assert_git_not_dirty | ||||||
| } | } | ||||||
|  |  | ||||||
| test_inductor_shard() { | test_inductor() { | ||||||
|   if [[ -z "$NUM_TEST_SHARDS" ]]; then |  | ||||||
|     echo "NUM_TEST_SHARDS must be defined to run a Python test shard" |  | ||||||
|     exit 1 |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   python tools/dynamo/verify_dynamo.py |   python tools/dynamo/verify_dynamo.py | ||||||
|   python test/run_test.py --inductor \ |   python test/run_test.py --inductor --include test_modules test_ops test_ops_gradients test_torch --verbose | ||||||
|     --include test_modules test_ops test_ops_gradients test_torch \ |  | ||||||
|     --shard "$1" "$NUM_TEST_SHARDS" \ |  | ||||||
|     --verbose |  | ||||||
|  |  | ||||||
|   # Do not add --inductor for the following inductor unit tests, otherwise we will fail because of nested dynamo state |   # Do not add --inductor for the following inductor unit tests, otherwise we will fail because of nested dynamo state | ||||||
|   python test/run_test.py \ |   python test/run_test.py --include inductor/test_torchinductor inductor/test_torchinductor_opinfo inductor/test_aot_inductor --verbose | ||||||
|     --include inductor/test_torchinductor inductor/test_torchinductor_opinfo inductor/test_aot_inductor \ |  | ||||||
|     --shard "$1" "$NUM_TEST_SHARDS" \ |  | ||||||
|     --verbose |  | ||||||
| } |  | ||||||
|  |  | ||||||
| test_inductor_aoti() { |  | ||||||
|   # docker build uses bdist_wheel which does not work with test_aot_inductor |   # docker build uses bdist_wheel which does not work with test_aot_inductor | ||||||
|   # TODO: need a faster way to build |   # TODO: need a faster way to build | ||||||
|   if [[ "$BUILD_ENVIRONMENT" == *rocm* ]]; then |   if [[ "$BUILD_ENVIRONMENT" != *rocm* ]]; then | ||||||
|     # We need to hipify before building again |       BUILD_AOT_INDUCTOR_TEST=1 python setup.py develop | ||||||
|     python3 tools/amd_build/build_amd.py |       CPP_TESTS_DIR="${BUILD_BIN_DIR}" LD_LIBRARY_PATH="${TORCH_LIB_DIR}" python test/run_test.py --cpp --verbose -i cpp/test_aoti_abi_check cpp/test_aoti_inference | ||||||
|   fi |   fi | ||||||
|   BUILD_AOT_INDUCTOR_TEST=1 python setup.py develop |  | ||||||
|   CPP_TESTS_DIR="${BUILD_BIN_DIR}" LD_LIBRARY_PATH="${TORCH_LIB_DIR}" python test/run_test.py --cpp --verbose -i cpp/test_aoti_abi_check cpp/test_aoti_inference |  | ||||||
| } | } | ||||||
|  |  | ||||||
| test_inductor_cpp_wrapper_abi_compatible() { | test_inductor_cpp_wrapper_abi_compatible() { | ||||||
| @ -373,7 +368,7 @@ test_inductor_cpp_wrapper_abi_compatible() { | |||||||
|  |  | ||||||
|   echo "Testing Inductor cpp wrapper mode with TORCHINDUCTOR_ABI_COMPATIBLE=1" |   echo "Testing Inductor cpp wrapper mode with TORCHINDUCTOR_ABI_COMPATIBLE=1" | ||||||
|   # cpu stack allocation causes segfault and needs more investigation |   # cpu stack allocation causes segfault and needs more investigation | ||||||
|   PYTORCH_TESTING_DEVICE_ONLY_FOR="" python test/run_test.py --include inductor/test_cpu_cpp_wrapper |   python test/run_test.py --include inductor/test_cpu_cpp_wrapper | ||||||
|   python test/run_test.py --include inductor/test_cuda_cpp_wrapper |   python test/run_test.py --include inductor/test_cuda_cpp_wrapper | ||||||
|  |  | ||||||
|   TORCHINDUCTOR_CPP_WRAPPER=1 python benchmarks/dynamo/timm_models.py --device cuda --accuracy --amp \ |   TORCHINDUCTOR_CPP_WRAPPER=1 python benchmarks/dynamo/timm_models.py --device cuda --accuracy --amp \ | ||||||
| @ -381,7 +376,7 @@ test_inductor_cpp_wrapper_abi_compatible() { | |||||||
|     --output "$TEST_REPORTS_DIR/inductor_cpp_wrapper_training.csv" |     --output "$TEST_REPORTS_DIR/inductor_cpp_wrapper_training.csv" | ||||||
|   python benchmarks/dynamo/check_accuracy.py \ |   python benchmarks/dynamo/check_accuracy.py \ | ||||||
|     --actual "$TEST_REPORTS_DIR/inductor_cpp_wrapper_training.csv" \ |     --actual "$TEST_REPORTS_DIR/inductor_cpp_wrapper_training.csv" \ | ||||||
|     --expected "benchmarks/dynamo/ci_expected_accuracy/inductor_timm_training.csv" |     --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/inductor_timm_training.csv" | ||||||
| } | } | ||||||
|  |  | ||||||
| # "Global" flags for inductor benchmarking controlled by TEST_CONFIG | # "Global" flags for inductor benchmarking controlled by TEST_CONFIG | ||||||
| @ -406,7 +401,7 @@ if [[ "${TEST_CONFIG}" == *dynamic* ]]; then | |||||||
|   DYNAMO_BENCHMARK_FLAGS+=(--dynamic-shapes --dynamic-batch-only) |   DYNAMO_BENCHMARK_FLAGS+=(--dynamic-shapes --dynamic-batch-only) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [[ "${TEST_CONFIG}" == *cpu* ]]; then | if [[ "${TEST_CONFIG}" == *cpu_inductor* ]]; then | ||||||
|   DYNAMO_BENCHMARK_FLAGS+=(--device cpu) |   DYNAMO_BENCHMARK_FLAGS+=(--device cpu) | ||||||
| else | else | ||||||
|   DYNAMO_BENCHMARK_FLAGS+=(--device cuda) |   DYNAMO_BENCHMARK_FLAGS+=(--device cuda) | ||||||
| @ -430,18 +425,6 @@ test_perf_for_dashboard() { | |||||||
|   # TODO: All the accuracy tests can be skipped once the CI accuracy checking is stable enough |   # TODO: All the accuracy tests can be skipped once the CI accuracy checking is stable enough | ||||||
|   local targets=(accuracy performance) |   local targets=(accuracy performance) | ||||||
|  |  | ||||||
|   local device=cuda |  | ||||||
|   if [[ "${TEST_CONFIG}" == *cpu* ]]; then |  | ||||||
|     if [[ "${TEST_CONFIG}" == *cpu_x86* ]]; then |  | ||||||
|       device=cpu_x86 |  | ||||||
|     elif [[ "${TEST_CONFIG}" == *cpu_aarch64* ]]; then |  | ||||||
|       device=cpu_aarch64 |  | ||||||
|     fi |  | ||||||
|     test_inductor_set_cpu_affinity |  | ||||||
|   elif [[ "${TEST_CONFIG}" == *cuda_a10g* ]]; then |  | ||||||
|     device=cuda_a10g |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   for mode in "${modes[@]}"; do |   for mode in "${modes[@]}"; do | ||||||
|     if [[ "$mode" == "inference" ]]; then |     if [[ "$mode" == "inference" ]]; then | ||||||
|       dtype=bfloat16 |       dtype=bfloat16 | ||||||
| @ -457,56 +440,56 @@ test_perf_for_dashboard() { | |||||||
|       fi |       fi | ||||||
|  |  | ||||||
|       if [[ "$DASHBOARD_TAG" == *default-true* ]]; then |       if [[ "$DASHBOARD_TAG" == *default-true* ]]; then | ||||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ |         python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" --disable-cudagraphs "$@" \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" --disable-cudagraphs "$@" \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_no_cudagraphs_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_no_cudagraphs_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *cudagraphs-true* ]]; then |       if [[ "$DASHBOARD_TAG" == *cudagraphs-true* ]]; then | ||||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ |         python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *dynamic-true* ]]; then |       if [[ "$DASHBOARD_TAG" == *dynamic-true* ]]; then | ||||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ |         python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" --dynamic-shapes \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" --dynamic-shapes \ | ||||||
|             --dynamic-batch-only "$@" \ |             --dynamic-batch-only "$@" \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_dynamic_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_dynamic_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *cppwrapper-true* ]] && [[ "$mode" == "inference" ]]; then |       if [[ "$DASHBOARD_TAG" == *cppwrapper-true* ]] && [[ "$mode" == "inference" ]]; then | ||||||
|         TORCHINDUCTOR_CPP_WRAPPER=1 $TASKSET python "benchmarks/dynamo/$suite.py" \ |         TORCHINDUCTOR_CPP_WRAPPER=1 python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" --disable-cudagraphs "$@" \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" --disable-cudagraphs "$@" \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_cpp_wrapper_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_cpp_wrapper_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *freezing_cudagraphs-true* ]] && [[ "$mode" == "inference" ]]; then |       if [[ "$DASHBOARD_TAG" == *freezing_cudagraphs-true* ]] && [[ "$mode" == "inference" ]]; then | ||||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ |         python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" --freezing \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" --freezing \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_freezing_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_freezing_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *freeze_autotune_cudagraphs-true* ]] && [[ "$mode" == "inference" ]]; then |       if [[ "$DASHBOARD_TAG" == *freeze_autotune_cudagraphs-true* ]] && [[ "$mode" == "inference" ]]; then | ||||||
|         TORCHINDUCTOR_MAX_AUTOTUNE=1 $TASKSET python "benchmarks/dynamo/$suite.py" \ |         TORCHINDUCTOR_MAX_AUTOTUNE=1 python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" --freezing \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" --freezing \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_freezing_autotune_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_freezing_autotune_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *aotinductor-true* ]] && [[ "$mode" == "inference" ]]; then |       if [[ "$DASHBOARD_TAG" == *aotinductor-true* ]] && [[ "$mode" == "inference" ]]; then | ||||||
|         TORCHINDUCTOR_ABI_COMPATIBLE=1 $TASKSET python "benchmarks/dynamo/$suite.py" \ |         TORCHINDUCTOR_ABI_COMPATIBLE=1 python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --export-aot-inductor --disable-cudagraphs "$@" \ |             "${target_flag[@]}" --"$mode" --"$dtype" --export-aot-inductor --disable-cudagraphs "$@" \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_aot_inductor_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_aot_inductor_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *maxautotune-true* ]]; then |       if [[ "$DASHBOARD_TAG" == *maxautotune-true* ]]; then | ||||||
|         TORCHINDUCTOR_MAX_AUTOTUNE=1 $TASKSET python "benchmarks/dynamo/$suite.py" \ |         TORCHINDUCTOR_MAX_AUTOTUNE=1 python "benchmarks/dynamo/$suite.py" \ | ||||||
|             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" \ |             "${target_flag[@]}" --"$mode" --"$dtype" --backend "$backend" "$@" \ | ||||||
|             --output "$TEST_REPORTS_DIR/${backend}_max_autotune_${suite}_${dtype}_${mode}_${device}_${target}.csv" |             --output "$TEST_REPORTS_DIR/${backend}_max_autotune_${suite}_${dtype}_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|       if [[ "$DASHBOARD_TAG" == *cudagraphs_low_precision-true* ]] && [[ "$mode" == "inference" ]]; then |       if [[ "$DASHBOARD_TAG" == *cudagraphs_low_precision-true* ]] && [[ "$mode" == "inference" ]]; then | ||||||
|         # TODO: This has a new dtype called quant and the benchmarks script needs to be updated to support this. |         # TODO: This has a new dtype called quant and the benchmarks script needs to be updated to support this. | ||||||
|         # The tentative command is as follows. It doesn't work now, but it's ok because we only need mock data |         # The tentative command is as follows. It doesn't work now, but it's ok because we only need mock data | ||||||
|         # to fill the dashboard. |         # to fill the dashboard. | ||||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ |         python "benchmarks/dynamo/$suite.py" \ | ||||||
|           "${target_flag[@]}" --"$mode" --quant --backend "$backend" "$@" \ |           "${target_flag[@]}" --"$mode" --quant --backend "$backend" "$@" \ | ||||||
|           --output "$TEST_REPORTS_DIR/${backend}_cudagraphs_low_precision_${suite}_quant_${mode}_${device}_${target}.csv" || true |           --output "$TEST_REPORTS_DIR/${backend}_cudagraphs_low_precision_${suite}_quant_${mode}_cuda_${target}.csv" || true | ||||||
|         # Copy cudagraph results as mock data, easiest choice? |         # Copy cudagraph results as mock data, easiest choice? | ||||||
|         cp "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_${suite}_${dtype}_${mode}_${device}_${target}.csv" \ |         cp "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_${suite}_${dtype}_${mode}_cuda_${target}.csv" \ | ||||||
|           "$TEST_REPORTS_DIR/${backend}_cudagraphs_low_precision_${suite}_quant_${mode}_${device}_${target}.csv" |           "$TEST_REPORTS_DIR/${backend}_cudagraphs_low_precision_${suite}_quant_${mode}_cuda_${target}.csv" | ||||||
|       fi |       fi | ||||||
|     done |     done | ||||||
|   done |   done | ||||||
| @ -543,19 +526,11 @@ test_single_dynamo_benchmark() { | |||||||
|     test_perf_for_dashboard "$suite" \ |     test_perf_for_dashboard "$suite" \ | ||||||
|       "${DYNAMO_BENCHMARK_FLAGS[@]}" "$@" "${partition_flags[@]}" |       "${DYNAMO_BENCHMARK_FLAGS[@]}" "$@" "${partition_flags[@]}" | ||||||
|   else |   else | ||||||
|     if [[ "${TEST_CONFIG}" == *aot_inductor* && "${TEST_CONFIG}" != *cpu_aot_inductor* ]]; then |     if [[ "${TEST_CONFIG}" == *aot_inductor* ]]; then | ||||||
|       # Test AOTInductor with the ABI-compatible mode on CI |       # Test AOTInductor with the ABI-compatible mode on CI | ||||||
|       # This can be removed once the ABI-compatible mode becomes default. |       # This can be removed once the ABI-compatible mode becomes default. | ||||||
|       # For CPU device, we perfer non ABI-compatible mode on CI when testing AOTInductor. |  | ||||||
|       export TORCHINDUCTOR_ABI_COMPATIBLE=1 |       export TORCHINDUCTOR_ABI_COMPATIBLE=1 | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     if [[ "${TEST_CONFIG}" == *_avx2* ]]; then |  | ||||||
|       TEST_CONFIG=${TEST_CONFIG::-5} |  | ||||||
|     fi |  | ||||||
|     if [[ "${TEST_CONFIG}" == *_avx512* ]]; then |  | ||||||
|       TEST_CONFIG=${TEST_CONFIG::-7} |  | ||||||
|     fi |  | ||||||
|     python "benchmarks/dynamo/$suite.py" \ |     python "benchmarks/dynamo/$suite.py" \ | ||||||
|       --ci --accuracy --timing --explain \ |       --ci --accuracy --timing --explain \ | ||||||
|       "${DYNAMO_BENCHMARK_FLAGS[@]}" \ |       "${DYNAMO_BENCHMARK_FLAGS[@]}" \ | ||||||
| @ -563,10 +538,10 @@ test_single_dynamo_benchmark() { | |||||||
|       --output "$TEST_REPORTS_DIR/${name}_${suite}.csv" |       --output "$TEST_REPORTS_DIR/${name}_${suite}.csv" | ||||||
|     python benchmarks/dynamo/check_accuracy.py \ |     python benchmarks/dynamo/check_accuracy.py \ | ||||||
|       --actual "$TEST_REPORTS_DIR/${name}_$suite.csv" \ |       --actual "$TEST_REPORTS_DIR/${name}_$suite.csv" \ | ||||||
|       --expected "benchmarks/dynamo/ci_expected_accuracy/${TEST_CONFIG}_${name}.csv" |       --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/${TEST_CONFIG}_${name}.csv" | ||||||
|     python benchmarks/dynamo/check_graph_breaks.py \ |     python benchmarks/dynamo/check_graph_breaks.py \ | ||||||
|       --actual "$TEST_REPORTS_DIR/${name}_$suite.csv" \ |       --actual "$TEST_REPORTS_DIR/${name}_$suite.csv" \ | ||||||
|       --expected "benchmarks/dynamo/ci_expected_accuracy/${TEST_CONFIG}_${name}.csv" |       --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/${TEST_CONFIG}_${name}.csv" | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -575,11 +550,6 @@ test_inductor_micro_benchmark() { | |||||||
|   python benchmarks/gpt_fast/benchmark.py --output "${TEST_REPORTS_DIR}/gpt_fast_benchmark.csv" |   python benchmarks/gpt_fast/benchmark.py --output "${TEST_REPORTS_DIR}/gpt_fast_benchmark.csv" | ||||||
| } | } | ||||||
|  |  | ||||||
| test_inductor_halide() { |  | ||||||
|   python test/run_test.py --include inductor/test_halide.py --verbose |  | ||||||
|   assert_git_not_dirty |  | ||||||
| } |  | ||||||
|  |  | ||||||
| test_dynamo_benchmark() { | test_dynamo_benchmark() { | ||||||
|   # Usage: test_dynamo_benchmark huggingface 0 |   # Usage: test_dynamo_benchmark huggingface 0 | ||||||
|   TEST_REPORTS_DIR=$(pwd)/test/test-reports |   TEST_REPORTS_DIR=$(pwd)/test/test-reports | ||||||
| @ -594,15 +564,11 @@ test_dynamo_benchmark() { | |||||||
|   elif [[ "${TEST_CONFIG}" == *perf* ]]; then |   elif [[ "${TEST_CONFIG}" == *perf* ]]; then | ||||||
|     test_single_dynamo_benchmark "dashboard" "$suite" "$shard_id" "$@" |     test_single_dynamo_benchmark "dashboard" "$suite" "$shard_id" "$@" | ||||||
|   else |   else | ||||||
|     if [[ "${TEST_CONFIG}" == *cpu* ]]; then |     if [[ "${TEST_CONFIG}" == *cpu_inductor* ]]; then | ||||||
|       local dt="float32" |  | ||||||
|       if [[ "${TEST_CONFIG}" == *amp* ]]; then |  | ||||||
|         dt="amp" |  | ||||||
|       fi |  | ||||||
|       if [[ "${TEST_CONFIG}" == *freezing* ]]; then |       if [[ "${TEST_CONFIG}" == *freezing* ]]; then | ||||||
|         test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --"$dt" --freezing "$@" |         test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --float32 --freezing "$@" | ||||||
|       else |       else | ||||||
|         test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --"$dt" "$@" |         test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --float32 "$@" | ||||||
|       fi |       fi | ||||||
|     elif [[ "${TEST_CONFIG}" == *aot_inductor* ]]; then |     elif [[ "${TEST_CONFIG}" == *aot_inductor* ]]; then | ||||||
|       test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --bfloat16 "$@" |       test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --bfloat16 "$@" | ||||||
| @ -626,7 +592,7 @@ test_inductor_torchbench_smoketest_perf() { | |||||||
|     --bfloat16 --inference --inductor --only moco --output "$TEST_REPORTS_DIR/inductor_cpp_wrapper_inference.csv" |     --bfloat16 --inference --inductor --only moco --output "$TEST_REPORTS_DIR/inductor_cpp_wrapper_inference.csv" | ||||||
|   python benchmarks/dynamo/check_accuracy.py \ |   python benchmarks/dynamo/check_accuracy.py \ | ||||||
|     --actual "$TEST_REPORTS_DIR/inductor_cpp_wrapper_inference.csv" \ |     --actual "$TEST_REPORTS_DIR/inductor_cpp_wrapper_inference.csv" \ | ||||||
|     --expected "benchmarks/dynamo/ci_expected_accuracy/inductor_torchbench_inference.csv" |     --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/inductor_torchbench_inference.csv" | ||||||
|  |  | ||||||
|   python benchmarks/dynamo/torchbench.py --device cuda --performance --backend inductor --float16 --training \ |   python benchmarks/dynamo/torchbench.py --device cuda --performance --backend inductor --float16 --training \ | ||||||
|     --batch-size-file "$(realpath benchmarks/dynamo/torchbench_models_list.txt)" --only hf_Bert \ |     --batch-size-file "$(realpath benchmarks/dynamo/torchbench_models_list.txt)" --only hf_Bert \ | ||||||
| @ -641,8 +607,13 @@ test_inductor_torchbench_smoketest_perf() { | |||||||
|   # https://github.com/pytorch/pytorch/actions/runs/7158691360/job/19491437314, |   # https://github.com/pytorch/pytorch/actions/runs/7158691360/job/19491437314, | ||||||
|   # and thus we lower its threshold to reduce flakiness. If this continues to be a problem, |   # and thus we lower its threshold to reduce flakiness. If this continues to be a problem, | ||||||
|   # we switch to use some other model. |   # we switch to use some other model. | ||||||
|   # lowering threshold from 4.9 to 4.7 for cu124. Will bump it up after cuda 12.4.0->12.4.1 update |   # Use 4.7 for cuda 12.4, change back to 4.9 after fixing https://github.com/pytorch/pytorch/issues/126692 | ||||||
|   python benchmarks/dynamo/check_perf_csv.py -f "$TEST_REPORTS_DIR/inductor_inference_smoketest.csv" -t 4.7 |   if [ "$CUDA_VERSION" == "12.4" ]; then | ||||||
|  |     THRESHOLD=4.7 | ||||||
|  |   else | ||||||
|  |     THRESHOLD=4.9 | ||||||
|  |   fi | ||||||
|  |   python benchmarks/dynamo/check_perf_csv.py -f "$TEST_REPORTS_DIR/inductor_inference_smoketest.csv" -t $THRESHOLD | ||||||
|  |  | ||||||
|   # Check memory compression ratio for a few models |   # Check memory compression ratio for a few models | ||||||
|   for test in hf_Albert timm_vision_transformer; do |   for test in hf_Albert timm_vision_transformer; do | ||||||
| @ -661,76 +632,52 @@ test_inductor_torchbench_smoketest_perf() { | |||||||
|       --only $test --output "$TEST_REPORTS_DIR/inductor_warm_start_smoketest_$test.csv" |       --only $test --output "$TEST_REPORTS_DIR/inductor_warm_start_smoketest_$test.csv" | ||||||
|     python benchmarks/dynamo/check_accuracy.py \ |     python benchmarks/dynamo/check_accuracy.py \ | ||||||
|       --actual "$TEST_REPORTS_DIR/inductor_warm_start_smoketest_$test.csv" \ |       --actual "$TEST_REPORTS_DIR/inductor_warm_start_smoketest_$test.csv" \ | ||||||
|       --expected "benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_training.csv" |       --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/inductor_huggingface_training.csv" | ||||||
|   done |   done | ||||||
| } | } | ||||||
|  |  | ||||||
| test_inductor_get_core_number() { |  | ||||||
|   if [[ "${TEST_CONFIG}" == *aarch64 ]]; then |  | ||||||
|     echo "$(($(lscpu | grep 'Cluster(s):' | awk '{print $2}') * $(lscpu | grep 'Core(s) per cluster:' | awk '{print $4}')))" |  | ||||||
|   else |  | ||||||
|     echo "$(($(lscpu | grep 'Socket(s):' | awk '{print $2}') * $(lscpu | grep 'Core(s) per socket:' | awk '{print $4}')))" |  | ||||||
|   fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| test_inductor_set_cpu_affinity(){ |  | ||||||
|   #set jemalloc |  | ||||||
|   JEMALLOC_LIB="$(find /usr/lib -name libjemalloc.so.2)" |  | ||||||
|   IOMP_LIB="$(dirname "$(which python)")/../lib/libiomp5.so" |  | ||||||
|   export LD_PRELOAD="$JEMALLOC_LIB":"$IOMP_LIB":"$LD_PRELOAD" |  | ||||||
|   export MALLOC_CONF="oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:-1,muzzy_decay_ms:-1" |  | ||||||
|   export KMP_AFFINITY=granularity=fine,compact,1,0 |  | ||||||
|   export KMP_BLOCKTIME=1 |  | ||||||
|   cores=$(test_inductor_get_core_number) |  | ||||||
|   export OMP_NUM_THREADS=$cores |  | ||||||
|   end_core=$((cores-1)) |  | ||||||
|   export TASKSET="taskset -c 0-$end_core" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| test_inductor_torchbench_cpu_smoketest_perf(){ | test_inductor_torchbench_cpu_smoketest_perf(){ | ||||||
|   TEST_REPORTS_DIR=$(pwd)/test/test-reports |   TEST_REPORTS_DIR=$(pwd)/test/test-reports | ||||||
|   mkdir -p "$TEST_REPORTS_DIR" |   mkdir -p "$TEST_REPORTS_DIR" | ||||||
|  |  | ||||||
|   test_inductor_set_cpu_affinity |   #set jemalloc | ||||||
|  |   JEMALLOC_LIB="/usr/lib/x86_64-linux-gnu/libjemalloc.so.2" | ||||||
|  |   IOMP_LIB="$(dirname "$(which python)")/../lib/libiomp5.so" | ||||||
|  |   export LD_PRELOAD="$JEMALLOC_LIB":"$IOMP_LIB":"$LD_PRELOAD" | ||||||
|  |   export MALLOC_CONF="oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:-1,muzzy_decay_ms:-1" | ||||||
|  |   export KMP_AFFINITY=granularity=fine,compact,1,0 | ||||||
|  |   export KMP_BLOCKTIME=1 | ||||||
|  |   CORES=$(lscpu | grep Core | awk '{print $4}') | ||||||
|  |   export OMP_NUM_THREADS=$CORES | ||||||
|  |   end_core=$(( CORES-1 )) | ||||||
|  |  | ||||||
|   MODELS_SPEEDUP_TARGET=benchmarks/dynamo/expected_ci_speedup_inductor_torchbench_cpu.csv |   MODELS_SPEEDUP_TARGET=benchmarks/dynamo/expected_ci_speedup_inductor_torchbench_cpu.csv | ||||||
|  |  | ||||||
|   grep -v '^ *#' < "$MODELS_SPEEDUP_TARGET" | while IFS=',' read -r -a model_cfg |   grep -v '^ *#' < "$MODELS_SPEEDUP_TARGET" | while IFS=',' read -r -a model_cfg | ||||||
|   do |   do | ||||||
|     local model_name=${model_cfg[0]} |     local model_name=${model_cfg[0]} | ||||||
|     local data_type=${model_cfg[2]} |     local data_type=${model_cfg[1]} | ||||||
|     local speedup_target=${model_cfg[5]} |     local speedup_target=${model_cfg[4]} | ||||||
|     local backend=${model_cfg[1]} |     if [[ ${model_cfg[3]} == "cpp" ]]; then | ||||||
|     if [[ ${model_cfg[4]} == "cpp" ]]; then |  | ||||||
|       export TORCHINDUCTOR_CPP_WRAPPER=1 |       export TORCHINDUCTOR_CPP_WRAPPER=1 | ||||||
|     else |     else | ||||||
|       unset TORCHINDUCTOR_CPP_WRAPPER |       unset TORCHINDUCTOR_CPP_WRAPPER | ||||||
|     fi |     fi | ||||||
|     local output_name="$TEST_REPORTS_DIR/inductor_inference_${model_cfg[0]}_${model_cfg[1]}_${model_cfg[2]}_${model_cfg[3]}_cpu_smoketest.csv" |     local output_name="$TEST_REPORTS_DIR/inductor_inference_${model_cfg[0]}_${model_cfg[1]}_${model_cfg[2]}_${model_cfg[3]}_cpu_smoketest.csv" | ||||||
|  |  | ||||||
|     if [[ ${model_cfg[3]} == "dynamic" ]]; then |     if [[ ${model_cfg[2]} == "dynamic" ]]; then | ||||||
|       $TASKSET python benchmarks/dynamo/torchbench.py \ |       taskset -c 0-"$end_core" python benchmarks/dynamo/torchbench.py \ | ||||||
|         --inference --performance --"$data_type" -dcpu -n50 --only "$model_name" --dynamic-shapes \ |         --inference --performance --"$data_type" -dcpu -n50 --only "$model_name" --dynamic-shapes \ | ||||||
|         --dynamic-batch-only --freezing --timeout 9000 --"$backend" --output "$output_name" |         --dynamic-batch-only --freezing --timeout 9000 --backend=inductor --output "$output_name" | ||||||
|     else |     else | ||||||
|       $TASKSET python benchmarks/dynamo/torchbench.py \ |       taskset -c 0-"$end_core" python benchmarks/dynamo/torchbench.py \ | ||||||
|         --inference --performance --"$data_type" -dcpu -n50 --only "$model_name" \ |         --inference --performance --"$data_type" -dcpu -n50 --only "$model_name" \ | ||||||
|         --freezing --timeout 9000 --"$backend" --output "$output_name" |         --freezing --timeout 9000 --backend=inductor --output "$output_name" | ||||||
|     fi |     fi | ||||||
|     cat "$output_name" |     cat "$output_name" | ||||||
|     # The threshold value needs to be actively maintained to make this check useful. |     # The threshold value needs to be actively maintained to make this check useful. | ||||||
|     python benchmarks/dynamo/check_perf_csv.py -f "$output_name" -t "$speedup_target" |     python benchmarks/dynamo/check_perf_csv.py -f "$output_name" -t "$speedup_target" | ||||||
|   done |   done | ||||||
|  |  | ||||||
|   # Add a few ABI-compatible accuracy tests for CPU. These can be removed once we turn on ABI-compatible as default. |  | ||||||
|   TORCHINDUCTOR_ABI_COMPATIBLE=1 python benchmarks/dynamo/timm_models.py --device cpu --accuracy \ |  | ||||||
|     --bfloat16 --inference --export-aot-inductor --disable-cudagraphs --only adv_inception_v3 \ |  | ||||||
|     --output "$TEST_REPORTS_DIR/aot_inductor_smoke_test.csv" |  | ||||||
|   TORCHINDUCTOR_ABI_COMPATIBLE=1 python benchmarks/dynamo/timm_models.py --device cpu --accuracy \ |  | ||||||
|     --bfloat16 --inference --export-aot-inductor --disable-cudagraphs --only beit_base_patch16_224 \ |  | ||||||
|     --output "$TEST_REPORTS_DIR/aot_inductor_smoke_test.csv" |  | ||||||
|   python benchmarks/dynamo/check_accuracy.py \ |  | ||||||
|     --actual "$TEST_REPORTS_DIR/aot_inductor_smoke_test.csv" \ |  | ||||||
|     --expected "benchmarks/dynamo/ci_expected_accuracy/aot_inductor_timm_inference.csv" |  | ||||||
| } | } | ||||||
|  |  | ||||||
| test_torchbench_gcp_smoketest(){ | test_torchbench_gcp_smoketest(){ | ||||||
| @ -1044,113 +991,11 @@ test_xla() { | |||||||
|   assert_git_not_dirty |   assert_git_not_dirty | ||||||
| } | } | ||||||
|  |  | ||||||
| function check_public_api_test_fails { |  | ||||||
|     test_name=$1 |  | ||||||
|     invalid_item_name=$2 |  | ||||||
|     invalid_item_desc=$3 |  | ||||||
|  |  | ||||||
|     echo "Running public API test '${test_name}'..." |  | ||||||
|     test_output=$(python test/test_public_bindings.py -k "${test_name}" 2>&1) && ret=$? || ret=$? |  | ||||||
|  |  | ||||||
|     # Ensure test fails correctly. |  | ||||||
|     if [ "$ret" -eq 0 ]; then |  | ||||||
|         cat << EOF |  | ||||||
| Expected the public API test '${test_name}' to fail after introducing |  | ||||||
| ${invalid_item_desc}, but it succeeded! Check test/test_public_bindings.py |  | ||||||
| for any changes that may have broken the test. |  | ||||||
| EOF |  | ||||||
|         return 1 |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # Ensure invalid item is in the test output. |  | ||||||
|     echo "${test_output}" | grep -q "${invalid_item_name}" && ret=$? || ret=$? |  | ||||||
|  |  | ||||||
|     if [ $ret -ne 0 ]; then |  | ||||||
|         cat << EOF |  | ||||||
| Expected the public API test '${test_name}' to identify ${invalid_item_desc}, but |  | ||||||
| it didn't! It's possible the test may not have run. Check test/test_public_bindings.py |  | ||||||
| for any changes that may have broken the test. |  | ||||||
| EOF |  | ||||||
|         return 1 |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     echo "Success! '${test_name}' identified ${invalid_item_desc} ${invalid_item_name}." |  | ||||||
|     return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Do NOT run this test before any other tests, like test_python_shard, etc. | # Do NOT run this test before any other tests, like test_python_shard, etc. | ||||||
| # Because this function uninstalls the torch built from branch and installs | # Because this function uninstalls the torch built from branch and installs | ||||||
| # the torch built on its base commit. | # the torch built on its base commit. | ||||||
| test_forward_backward_compatibility() { | test_forward_backward_compatibility() { | ||||||
|   set -x |   set -x | ||||||
|  |  | ||||||
|   # First, validate public API tests in the torch built from branch. |  | ||||||
|   # Step 1. Make sure the public API test "test_correct_module_names" fails when a new file |  | ||||||
|   # introduces an invalid public API function. |  | ||||||
|   new_filename=$(mktemp XXXXXXXX.py -p "${TORCH_INSTALL_DIR}") |  | ||||||
|  |  | ||||||
|   BAD_PUBLIC_FUNC=$( |  | ||||||
|   cat << 'EOF' |  | ||||||
| def new_public_func(): |  | ||||||
|   pass |  | ||||||
|  |  | ||||||
| # valid public API functions have __module__ set correctly |  | ||||||
| new_public_func.__module__ = None |  | ||||||
| EOF |  | ||||||
|   ) |  | ||||||
|  |  | ||||||
|   echo "${BAD_PUBLIC_FUNC}" >> "${new_filename}" |  | ||||||
|   invalid_api="torch.$(basename -s '.py' "${new_filename}").new_public_func" |  | ||||||
|   echo "Created an invalid public API function ${invalid_api}..." |  | ||||||
|  |  | ||||||
|   check_public_api_test_fails \ |  | ||||||
|       "test_correct_module_names" \ |  | ||||||
|       "${invalid_api}" \ |  | ||||||
|       "an invalid public API function" && ret=$? || ret=$? |  | ||||||
|  |  | ||||||
|   rm -v "${new_filename}" |  | ||||||
|  |  | ||||||
|   if [ "$ret" -ne 0 ]; then |  | ||||||
|       exit 1 |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Step 2. Make sure that the public API test "test_correct_module_names" fails when an existing |  | ||||||
|   # file is modified to introduce an invalid public API function. |  | ||||||
|   EXISTING_FILEPATH="${TORCH_INSTALL_DIR}/nn/parameter.py" |  | ||||||
|   cp -v "${EXISTING_FILEPATH}" "${EXISTING_FILEPATH}.orig" |  | ||||||
|   echo "${BAD_PUBLIC_FUNC}" >> "${EXISTING_FILEPATH}" |  | ||||||
|   invalid_api="torch.nn.parameter.new_public_func" |  | ||||||
|   echo "Appended an invalid public API function to existing file ${EXISTING_FILEPATH}..." |  | ||||||
|  |  | ||||||
|   check_public_api_test_fails \ |  | ||||||
|       "test_correct_module_names" \ |  | ||||||
|       "${invalid_api}" \ |  | ||||||
|       "an invalid public API function" && ret=$? || ret=$? |  | ||||||
|  |  | ||||||
|   mv -v "${EXISTING_FILEPATH}.orig" "${EXISTING_FILEPATH}" |  | ||||||
|  |  | ||||||
|   if [ "$ret" -ne 0 ]; then |  | ||||||
|       exit 1 |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Step 3. Make sure that the public API test "test_modules_can_be_imported" fails when a module |  | ||||||
|   # cannot be imported. |  | ||||||
|   new_module_dir=$(mktemp XXXXXXXX -d -p "${TORCH_INSTALL_DIR}") |  | ||||||
|   echo "invalid syntax garbage" > "${new_module_dir}/__init__.py" |  | ||||||
|   invalid_module_name="torch.$(basename "${new_module_dir}")" |  | ||||||
|  |  | ||||||
|   check_public_api_test_fails \ |  | ||||||
|       "test_modules_can_be_imported" \ |  | ||||||
|       "${invalid_module_name}" \ |  | ||||||
|       "a non-importable module" && ret=$? || ret=$? |  | ||||||
|  |  | ||||||
|   rm -rv "${new_module_dir}" |  | ||||||
|  |  | ||||||
|   if [ "$ret" -ne 0 ]; then |  | ||||||
|       exit 1 |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Next, build torch from the merge base. |  | ||||||
|   REPO_DIR=$(pwd) |   REPO_DIR=$(pwd) | ||||||
|   if [[ "${BASE_SHA}" == "${SHA1}" ]]; then |   if [[ "${BASE_SHA}" == "${SHA1}" ]]; then | ||||||
|     echo "On trunk, we should compare schemas with torch built from the parent commit" |     echo "On trunk, we should compare schemas with torch built from the parent commit" | ||||||
| @ -1324,21 +1169,15 @@ test_executorch() { | |||||||
|  |  | ||||||
|   pushd /executorch |   pushd /executorch | ||||||
|  |  | ||||||
|   export PYTHON_EXECUTABLE=python |   # NB: We need to build ExecuTorch runner here and not inside the Docker image | ||||||
|   export EXECUTORCH_BUILD_PYBIND=ON |   # because it depends on PyTorch | ||||||
|   export CMAKE_ARGS="-DEXECUTORCH_BUILD_XNNPACK=ON -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON" |  | ||||||
|  |  | ||||||
|   # NB: We need to rebuild ExecuTorch runner here because it depends on PyTorch |  | ||||||
|   # from the PR |  | ||||||
|   # shellcheck disable=SC1091 |   # shellcheck disable=SC1091 | ||||||
|   source .ci/scripts/setup-linux.sh cmake |   source .ci/scripts/utils.sh | ||||||
|  |   build_executorch_runner "cmake" | ||||||
|   echo "Run ExecuTorch unit tests" |  | ||||||
|   pytest -v -n auto |  | ||||||
|   # shellcheck disable=SC1091 |  | ||||||
|   LLVM_PROFDATA=llvm-profdata-12 LLVM_COV=llvm-cov-12 bash test/run_oss_cpp_tests.sh |  | ||||||
|  |  | ||||||
|   echo "Run ExecuTorch regression tests for some models" |   echo "Run ExecuTorch regression tests for some models" | ||||||
|  |   # NB: This is a sample model, more can be added here | ||||||
|  |   export PYTHON_EXECUTABLE=python | ||||||
|   # TODO(huydhn): Add more coverage here using ExecuTorch's gather models script |   # TODO(huydhn): Add more coverage here using ExecuTorch's gather models script | ||||||
|   # shellcheck disable=SC1091 |   # shellcheck disable=SC1091 | ||||||
|   source .ci/scripts/test.sh mv3 cmake xnnpack-quantization-delegation '' |   source .ci/scripts/test.sh mv3 cmake xnnpack-quantization-delegation '' | ||||||
| @ -1376,7 +1215,7 @@ if ! [[ "${BUILD_ENVIRONMENT}" == *libtorch* || "${BUILD_ENVIRONMENT}" == *-baze | |||||||
|   (cd test && python -c "import torch; print(torch.__config__.show())") |   (cd test && python -c "import torch; print(torch.__config__.show())") | ||||||
|   (cd test && python -c "import torch; print(torch.__config__.parallel_info())") |   (cd test && python -c "import torch; print(torch.__config__.parallel_info())") | ||||||
| fi | fi | ||||||
| if [[ "${BUILD_ENVIRONMENT}" == *aarch64* && "${TEST_CONFIG}" != *perf_cpu_aarch64* ]]; then | if [[ "$BUILD_ENVIRONMENT" == *aarch64* ]]; then | ||||||
|   test_linux_aarch64 |   test_linux_aarch64 | ||||||
| elif [[ "${TEST_CONFIG}" == *backward* ]]; then | elif [[ "${TEST_CONFIG}" == *backward* ]]; then | ||||||
|   test_forward_backward_compatibility |   test_forward_backward_compatibility | ||||||
| @ -1398,10 +1237,11 @@ elif [[ "$TEST_CONFIG" == distributed ]]; then | |||||||
|   if [[ "${SHARD_NUMBER}" == 1 ]]; then |   if [[ "${SHARD_NUMBER}" == 1 ]]; then | ||||||
|     test_rpc |     test_rpc | ||||||
|   fi |   fi | ||||||
|  | elif [[ "$TEST_CONFIG" == deploy ]]; then | ||||||
|  |   checkout_install_torchdeploy | ||||||
|  |   test_torch_deploy | ||||||
| elif [[ "${TEST_CONFIG}" == *inductor_distributed* ]]; then | elif [[ "${TEST_CONFIG}" == *inductor_distributed* ]]; then | ||||||
|   test_inductor_distributed |   test_inductor_distributed | ||||||
| elif [[ "${TEST_CONFIG}" == *inductor-halide* ]]; then |  | ||||||
|   test_inductor_halide |  | ||||||
| elif [[ "${TEST_CONFIG}" == *inductor-micro-benchmark* ]]; then | elif [[ "${TEST_CONFIG}" == *inductor-micro-benchmark* ]]; then | ||||||
|   test_inductor_micro_benchmark |   test_inductor_micro_benchmark | ||||||
| elif [[ "${TEST_CONFIG}" == *huggingface* ]]; then | elif [[ "${TEST_CONFIG}" == *huggingface* ]]; then | ||||||
| @ -1413,14 +1253,13 @@ elif [[ "${TEST_CONFIG}" == *timm* ]]; then | |||||||
|   id=$((SHARD_NUMBER-1)) |   id=$((SHARD_NUMBER-1)) | ||||||
|   test_dynamo_benchmark timm_models "$id" |   test_dynamo_benchmark timm_models "$id" | ||||||
| elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | ||||||
|   if [[ "${TEST_CONFIG}" == *cpu* ]]; then |   if [[ "${TEST_CONFIG}" == *cpu_inductor* ]]; then | ||||||
|     install_torchaudio cpu |     install_torchaudio cpu | ||||||
|   else |   else | ||||||
|     install_torchaudio cuda |     install_torchaudio cuda | ||||||
|   fi |   fi | ||||||
|   install_torchtext |   install_torchtext | ||||||
|   install_torchvision |   install_torchvision | ||||||
|   TORCH_CUDA_ARCH_LIST="8.0;8.6" pip_install git+https://github.com/pytorch/ao.git |  | ||||||
|   id=$((SHARD_NUMBER-1)) |   id=$((SHARD_NUMBER-1)) | ||||||
|   # https://github.com/opencv/opencv-python/issues/885 |   # https://github.com/opencv/opencv-python/issues/885 | ||||||
|   pip_install opencv-python==4.8.0.74 |   pip_install opencv-python==4.8.0.74 | ||||||
| @ -1428,9 +1267,9 @@ elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | |||||||
|     checkout_install_torchbench hf_Bert hf_Albert nanogpt timm_vision_transformer |     checkout_install_torchbench hf_Bert hf_Albert nanogpt timm_vision_transformer | ||||||
|     PYTHONPATH=$(pwd)/torchbench test_inductor_torchbench_smoketest_perf |     PYTHONPATH=$(pwd)/torchbench test_inductor_torchbench_smoketest_perf | ||||||
|   elif [[ "${TEST_CONFIG}" == *inductor_torchbench_cpu_smoketest_perf* ]]; then |   elif [[ "${TEST_CONFIG}" == *inductor_torchbench_cpu_smoketest_perf* ]]; then | ||||||
|     checkout_install_torchbench timm_vision_transformer phlippe_densenet basic_gnn_edgecnn \ |     checkout_install_torchbench timm_vision_transformer phlippe_densenet basic_gnn_gcn \ | ||||||
|       llama_v2_7b_16h resnet50 timm_efficientnet mobilenet_v3_large timm_resnest \ |       llama_v2_7b_16h resnet50 timm_efficientnet mobilenet_v3_large timm_resnest \ | ||||||
|       functorch_maml_omniglot yolov3 mobilenet_v2 resnext50_32x4d densenet121 mnasnet1_0 |       shufflenet_v2_x1_0 hf_GPT2 | ||||||
|     PYTHONPATH=$(pwd)/torchbench test_inductor_torchbench_cpu_smoketest_perf |     PYTHONPATH=$(pwd)/torchbench test_inductor_torchbench_cpu_smoketest_perf | ||||||
|   elif [[ "${TEST_CONFIG}" == *torchbench_gcp_smoketest* ]]; then |   elif [[ "${TEST_CONFIG}" == *torchbench_gcp_smoketest* ]]; then | ||||||
|     checkout_install_torchbench |     checkout_install_torchbench | ||||||
| @ -1439,7 +1278,7 @@ elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | |||||||
|     checkout_install_torchbench |     checkout_install_torchbench | ||||||
|     # Do this after checkout_install_torchbench to ensure we clobber any |     # Do this after checkout_install_torchbench to ensure we clobber any | ||||||
|     # nightlies that torchbench may pull in |     # nightlies that torchbench may pull in | ||||||
|     if [[ "${TEST_CONFIG}" != *cpu* ]]; then |     if [[ "${TEST_CONFIG}" != *cpu_inductor* ]]; then | ||||||
|       install_torchrec_and_fbgemm |       install_torchrec_and_fbgemm | ||||||
|     fi |     fi | ||||||
|     PYTHONPATH=$(pwd)/torchbench test_dynamo_benchmark torchbench "$id" |     PYTHONPATH=$(pwd)/torchbench test_dynamo_benchmark torchbench "$id" | ||||||
| @ -1447,22 +1286,17 @@ elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | |||||||
| elif [[ "${TEST_CONFIG}" == *inductor_cpp_wrapper_abi_compatible* ]]; then | elif [[ "${TEST_CONFIG}" == *inductor_cpp_wrapper_abi_compatible* ]]; then | ||||||
|   install_torchvision |   install_torchvision | ||||||
|   test_inductor_cpp_wrapper_abi_compatible |   test_inductor_cpp_wrapper_abi_compatible | ||||||
| elif [[ "${TEST_CONFIG}" == *inductor* ]]; then | elif [[ "${TEST_CONFIG}" == *inductor* && "${SHARD_NUMBER}" == 1 ]]; then | ||||||
|   install_torchvision |   install_torchvision | ||||||
|   test_inductor_shard "${SHARD_NUMBER}" |   test_inductor | ||||||
|   if [[ "${SHARD_NUMBER}" == 1 ]]; then |   test_inductor_distributed | ||||||
|     if [[ "${BUILD_ENVIRONMENT}" != linux-jammy-py3.8-gcc11-build ]]; then | elif [[ "${TEST_CONFIG}" == *dynamo* && "${SHARD_NUMBER}" == 1 && $NUM_TEST_SHARDS -gt 1 ]]; then | ||||||
|       # Temporarily skip test_inductor_aoti due to https://github.com/pytorch/pytorch/issues/130311 |   install_torchvision | ||||||
|       test_inductor_aoti |   test_dynamo_shard 1 | ||||||
|       test_inductor_distributed |   test_aten | ||||||
|     fi | elif [[ "${TEST_CONFIG}" == *dynamo* && $SHARD_NUMBER -gt 1 && $NUM_TEST_SHARDS -gt 1 ]]; then | ||||||
|   fi |  | ||||||
| elif [[ "${TEST_CONFIG}" == *dynamo* ]]; then |  | ||||||
|   install_torchvision |   install_torchvision | ||||||
|   test_dynamo_shard "${SHARD_NUMBER}" |   test_dynamo_shard "${SHARD_NUMBER}" | ||||||
|   if [[ "${SHARD_NUMBER}" == 1 ]]; then |  | ||||||
|     test_aten |  | ||||||
|   fi |  | ||||||
| elif [[ "${BUILD_ENVIRONMENT}" == *rocm* && -n "$TESTS_TO_INCLUDE" ]]; then | elif [[ "${BUILD_ENVIRONMENT}" == *rocm* && -n "$TESTS_TO_INCLUDE" ]]; then | ||||||
|   install_torchvision |   install_torchvision | ||||||
|   test_python_shard "$SHARD_NUMBER" |   test_python_shard "$SHARD_NUMBER" | ||||||
|  | |||||||
| @ -4,7 +4,6 @@ import os | |||||||
| import subprocess | import subprocess | ||||||
| import sys | import sys | ||||||
|  |  | ||||||
|  |  | ||||||
| COMMON_TESTS = [ | COMMON_TESTS = [ | ||||||
|     ( |     ( | ||||||
|         "Checking that torch is available", |         "Checking that torch is available", | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ import sys | |||||||
|  |  | ||||||
| import yaml | import yaml | ||||||
|  |  | ||||||
|  |  | ||||||
| # Need to import modules that lie on an upward-relative path | # Need to import modules that lie on an upward-relative path | ||||||
| sys.path.append(os.path.join(sys.path[0], "..")) | sys.path.append(os.path.join(sys.path[0], "..")) | ||||||
|  |  | ||||||
|  | |||||||
| @ -46,12 +46,14 @@ if [[ "\$python_nodot" = *310* ]]; then | |||||||
|   PROTOBUF_PACKAGE="protobuf>=3.19.0" |   PROTOBUF_PACKAGE="protobuf>=3.19.0" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [[ "\$python_nodot" = *39* ]]; then | if [[ "\$python_nodot" = *39*  ]]; then | ||||||
|   # There's an issue with conda channel priority where it'll randomly pick 1.19 over 1.20 |   # There's an issue with conda channel priority where it'll randomly pick 1.19 over 1.20 | ||||||
|   # we set a lower boundary here just to be safe |   # we set a lower boundary here just to be safe | ||||||
|   NUMPY_PIN=">=1.20" |   NUMPY_PIN=">=1.20" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # Move debug wheels out of the package dir so they don't get installed | # Move debug wheels out of the package dir so they don't get installed | ||||||
| mkdir -p /tmp/debug_final_pkgs | mkdir -p /tmp/debug_final_pkgs | ||||||
| mv /final_pkgs/debug-*.zip /tmp/debug_final_pkgs || echo "no debug packages to move" | mv /final_pkgs/debug-*.zip /tmp/debug_final_pkgs || echo "no debug packages to move" | ||||||
| @ -81,7 +83,7 @@ if [[ "$PACKAGE_TYPE" == conda ]]; then | |||||||
|       "numpy\${NUMPY_PIN}" \ |       "numpy\${NUMPY_PIN}" \ | ||||||
|       mkl>=2018 \ |       mkl>=2018 \ | ||||||
|       ninja \ |       ninja \ | ||||||
|       sympy>=1.12 \ |       sympy \ | ||||||
|       typing-extensions \ |       typing-extensions \ | ||||||
|       ${PROTOBUF_PACKAGE} |       ${PROTOBUF_PACKAGE} | ||||||
|     if [[ "$DESIRED_CUDA" == 'cpu' ]]; then |     if [[ "$DESIRED_CUDA" == 'cpu' ]]; then | ||||||
| @ -95,16 +97,8 @@ if [[ "$PACKAGE_TYPE" == conda ]]; then | |||||||
|   ) |   ) | ||||||
| elif [[ "$PACKAGE_TYPE" != libtorch ]]; then | elif [[ "$PACKAGE_TYPE" != libtorch ]]; then | ||||||
|   if [[ "\$BUILD_ENVIRONMENT" != *s390x* ]]; then |   if [[ "\$BUILD_ENVIRONMENT" != *s390x* ]]; then | ||||||
|     if [[ "$USE_SPLIT_BUILD" == "true" ]]; then |     pip install "\$pkg" --index-url "https://download.pytorch.org/whl/\${CHANNEL}/${DESIRED_CUDA}" | ||||||
|       pkg_no_python="$(ls -1 /final_pkgs/torch_no_python* | sort |tail -1)" |     retry pip install -q numpy protobuf typing-extensions | ||||||
|       pkg_torch="$(ls -1 /final_pkgs/torch-* | sort |tail -1)" |  | ||||||
|       # todo: after folder is populated use the pypi_pkg channel instead |  | ||||||
|       pip install "\$pkg_no_python" "\$pkg_torch" --index-url "https://download.pytorch.org/whl/\${CHANNEL}/${DESIRED_CUDA}_pypi_pkg" |  | ||||||
|       retry pip install -q numpy protobuf typing-extensions |  | ||||||
|     else |  | ||||||
|       pip install "\$pkg" --index-url "https://download.pytorch.org/whl/\${CHANNEL}/${DESIRED_CUDA}" |  | ||||||
|       retry pip install -q numpy protobuf typing-extensions |  | ||||||
|     fi |  | ||||||
|   else |   else | ||||||
|     pip install "\$pkg" |     pip install "\$pkg" | ||||||
|     retry pip install -q numpy protobuf typing-extensions |     retry pip install -q numpy protobuf typing-extensions | ||||||
| @ -116,18 +110,9 @@ if [[ "$PACKAGE_TYPE" == libtorch ]]; then | |||||||
|   cd /tmp/libtorch |   cd /tmp/libtorch | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [[ "$GPU_ARCH_TYPE" == xpu ]]; then |  | ||||||
|   # Workaround for __mkl_tmp_MOD unbound variable issue, refer https://github.com/pytorch/pytorch/issues/130543 |  | ||||||
|   set +u |  | ||||||
|   source /opt/intel/oneapi/pytorch-gpu-dev-0.5/oneapi-vars.sh |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Test the package | # Test the package | ||||||
| /builder/check_binary.sh | /builder/check_binary.sh | ||||||
|  |  | ||||||
| # Clean temp files |  | ||||||
| cd /builder && git clean -ffdx |  | ||||||
|  |  | ||||||
| # =================== The above code will be executed inside Docker container =================== | # =================== The above code will be executed inside Docker container =================== | ||||||
| EOL | EOL | ||||||
| echo | echo | ||||||
|  | |||||||
| @ -33,9 +33,9 @@ if [[ -z "$DOCKER_IMAGE" ]]; then | |||||||
|   if [[ "$PACKAGE_TYPE" == conda ]]; then |   if [[ "$PACKAGE_TYPE" == conda ]]; then | ||||||
|     export DOCKER_IMAGE="pytorch/conda-cuda" |     export DOCKER_IMAGE="pytorch/conda-cuda" | ||||||
|   elif [[ "$DESIRED_CUDA" == cpu ]]; then |   elif [[ "$DESIRED_CUDA" == cpu ]]; then | ||||||
|     export DOCKER_IMAGE="pytorch/manylinux:cpu" |     export DOCKER_IMAGE="pytorch/manylinux-cpu" | ||||||
|   else |   else | ||||||
|     export DOCKER_IMAGE="pytorch/manylinux-builder:${DESIRED_CUDA:2}" |     export DOCKER_IMAGE="pytorch/manylinux-cuda${DESIRED_CUDA:2}" | ||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| @ -75,9 +75,9 @@ export PYTORCH_BUILD_NUMBER=1 | |||||||
| TRITON_VERSION=$(cat $PYTORCH_ROOT/.ci/docker/triton_version.txt) | TRITON_VERSION=$(cat $PYTORCH_ROOT/.ci/docker/triton_version.txt) | ||||||
|  |  | ||||||
| # Here PYTORCH_EXTRA_INSTALL_REQUIREMENTS is already set for the all the wheel builds hence append TRITON_CONSTRAINT | # Here PYTORCH_EXTRA_INSTALL_REQUIREMENTS is already set for the all the wheel builds hence append TRITON_CONSTRAINT | ||||||
| TRITON_CONSTRAINT="platform_system == 'Linux' and platform_machine == 'x86_64' and python_version < '3.13'" |  | ||||||
| if [[ "$PACKAGE_TYPE" =~ .*wheel.* &&  -n "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then | if [[ "$PACKAGE_TYPE" =~ .*wheel.* &&  -n "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then | ||||||
|   # Only linux Python < 3.13 are supported wheels for triton |   # Only linux Python < 3.13 are supported wheels for triton | ||||||
|  |   TRITON_CONSTRAINT="platform_system == 'Linux' and platform_machine == 'x86_64' and python_version < '3.13'" | ||||||
|   TRITON_REQUIREMENT="triton==${TRITON_VERSION}; ${TRITON_CONSTRAINT}" |   TRITON_REQUIREMENT="triton==${TRITON_VERSION}; ${TRITON_CONSTRAINT}" | ||||||
|   if [[ -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*dev.* ]]; then |   if [[ -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*dev.* ]]; then | ||||||
|       TRITON_SHORTHASH=$(cut -c1-10 $PYTORCH_ROOT/.ci/docker/ci_commit_pins/triton.txt) |       TRITON_SHORTHASH=$(cut -c1-10 $PYTORCH_ROOT/.ci/docker/ci_commit_pins/triton.txt) | ||||||
| @ -87,11 +87,11 @@ if [[ "$PACKAGE_TYPE" =~ .*wheel.* &&  -n "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS: | |||||||
| fi | fi | ||||||
|  |  | ||||||
| # Set triton via PYTORCH_EXTRA_INSTALL_REQUIREMENTS for triton rocm package | # Set triton via PYTORCH_EXTRA_INSTALL_REQUIREMENTS for triton rocm package | ||||||
| if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*rocm.* && $(uname) == "Linux" ]]; then | if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*rocm.* && $(uname) == "Linux" && "$DESIRED_PYTHON" != "3.12" ]]; then | ||||||
|     TRITON_REQUIREMENT="pytorch-triton-rocm==${TRITON_VERSION}; ${TRITON_CONSTRAINT}" |     TRITON_REQUIREMENT="pytorch-triton-rocm==${TRITON_VERSION}" | ||||||
|     if [[ -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*dev.* ]]; then |     if [[ -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*dev.* ]]; then | ||||||
|         TRITON_SHORTHASH=$(cut -c1-10 $PYTORCH_ROOT/.ci/docker/ci_commit_pins/triton-rocm.txt) |         TRITON_SHORTHASH=$(cut -c1-10 $PYTORCH_ROOT/.ci/docker/ci_commit_pins/triton-rocm.txt) | ||||||
|         TRITON_REQUIREMENT="pytorch-triton-rocm==${TRITON_VERSION}+${TRITON_SHORTHASH}; ${TRITON_CONSTRAINT}" |         TRITON_REQUIREMENT="pytorch-triton-rocm==${TRITON_VERSION}+${TRITON_SHORTHASH}" | ||||||
|     fi |     fi | ||||||
|     if [[ -z "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then |     if [[ -z "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then | ||||||
|         export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${TRITON_REQUIREMENT}" |         export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${TRITON_REQUIREMENT}" | ||||||
| @ -100,18 +100,30 @@ if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_B | |||||||
|     fi |     fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| # Set triton via PYTORCH_EXTRA_INSTALL_REQUIREMENTS for triton xpu package | JAVA_HOME= | ||||||
| if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*xpu.* && $(uname) == "Linux" ]]; then | BUILD_JNI=OFF | ||||||
|     TRITON_REQUIREMENT="pytorch-triton-xpu==${TRITON_VERSION}" | if [[ "$PACKAGE_TYPE" == libtorch ]]; then | ||||||
|     if [[ -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*dev.* ]]; then |   POSSIBLE_JAVA_HOMES=() | ||||||
|         TRITON_SHORTHASH=$(cut -c1-10 $PYTORCH_ROOT/.ci/docker/ci_commit_pins/triton-xpu.txt) |   POSSIBLE_JAVA_HOMES+=(/usr/local) | ||||||
|         TRITON_REQUIREMENT="pytorch-triton-xpu==${TRITON_VERSION}+${TRITON_SHORTHASH}" |   POSSIBLE_JAVA_HOMES+=(/usr/lib/jvm/java-8-openjdk-amd64) | ||||||
|     fi |   POSSIBLE_JAVA_HOMES+=(/Library/Java/JavaVirtualMachines/*.jdk/Contents/Home) | ||||||
|     if [[ -z "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then |   # Add the Windows-specific JNI path | ||||||
|         export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${TRITON_REQUIREMENT}" |   POSSIBLE_JAVA_HOMES+=("$PWD/pytorch/.circleci/windows-jni/") | ||||||
|     else |   for JH in "${POSSIBLE_JAVA_HOMES[@]}" ; do | ||||||
|         export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${PYTORCH_EXTRA_INSTALL_REQUIREMENTS} | ${TRITON_REQUIREMENT}" |     if [[ -e "$JH/include/jni.h" ]] ; then | ||||||
|  |       # Skip if we're not on Windows but haven't found a JAVA_HOME | ||||||
|  |       if [[ "$JH" == "$PWD/pytorch/.circleci/windows-jni/" && "$OSTYPE" != "msys" ]] ; then | ||||||
|  |         break | ||||||
|  |       fi | ||||||
|  |       echo "Found jni.h under $JH" | ||||||
|  |       JAVA_HOME="$JH" | ||||||
|  |       BUILD_JNI=ON | ||||||
|  |       break | ||||||
|     fi |     fi | ||||||
|  |   done | ||||||
|  |   if [ -z "$JAVA_HOME" ]; then | ||||||
|  |     echo "Did not find jni.h" | ||||||
|  |   fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| cat >"$envfile" <<EOL | cat >"$envfile" <<EOL | ||||||
| @ -124,7 +136,6 @@ export DESIRED_PYTHON="${DESIRED_PYTHON:-}" | |||||||
| export DESIRED_CUDA="$DESIRED_CUDA" | export DESIRED_CUDA="$DESIRED_CUDA" | ||||||
| export LIBTORCH_VARIANT="${LIBTORCH_VARIANT:-}" | export LIBTORCH_VARIANT="${LIBTORCH_VARIANT:-}" | ||||||
| export BUILD_PYTHONLESS="${BUILD_PYTHONLESS:-}" | export BUILD_PYTHONLESS="${BUILD_PYTHONLESS:-}" | ||||||
| export USE_SPLIT_BUILD="${USE_SPLIT_BUILD:-}" |  | ||||||
| if [[ "${OSTYPE}" == "msys" ]]; then | if [[ "${OSTYPE}" == "msys" ]]; then | ||||||
|   export LIBTORCH_CONFIG="${LIBTORCH_CONFIG:-}" |   export LIBTORCH_CONFIG="${LIBTORCH_CONFIG:-}" | ||||||
|   if [[ "${LIBTORCH_CONFIG:-}" == 'debug' ]]; then |   if [[ "${LIBTORCH_CONFIG:-}" == 'debug' ]]; then | ||||||
| @ -148,6 +159,8 @@ export TORCH_CONDA_BUILD_FOLDER='pytorch-nightly' | |||||||
| export ANACONDA_USER='pytorch' | export ANACONDA_USER='pytorch' | ||||||
|  |  | ||||||
| export USE_FBGEMM=1 | export USE_FBGEMM=1 | ||||||
|  | export JAVA_HOME=$JAVA_HOME | ||||||
|  | export BUILD_JNI=$BUILD_JNI | ||||||
| export PIP_UPLOAD_FOLDER="$PIP_UPLOAD_FOLDER" | export PIP_UPLOAD_FOLDER="$PIP_UPLOAD_FOLDER" | ||||||
| export DOCKER_IMAGE="$DOCKER_IMAGE" | export DOCKER_IMAGE="$DOCKER_IMAGE" | ||||||
|  |  | ||||||
|  | |||||||
| @ -25,15 +25,6 @@ if [[ "${DRY_RUN}" = "disabled" ]]; then | |||||||
|   AWS_S3_CP="aws s3 cp" |   AWS_S3_CP="aws s3 cp" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [[ "${USE_SPLIT_BUILD:-false}" == "true" ]]; then |  | ||||||
|   UPLOAD_SUBFOLDER="${UPLOAD_SUBFOLDER}_pypi_pkg" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # this is special build with all dependencies packaged |  | ||||||
| if [[ ${BUILD_NAME} == *-full* ]]; then |  | ||||||
|   UPLOAD_SUBFOLDER="${UPLOAD_SUBFOLDER}_full" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Sleep 2 minutes between retries for conda upload | # Sleep 2 minutes between retries for conda upload | ||||||
| retry () { | retry () { | ||||||
|   "$@"  || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@") |   "$@"  || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@") | ||||||
|  | |||||||
| @ -8,7 +8,6 @@ import time | |||||||
|  |  | ||||||
| import requests | import requests | ||||||
|  |  | ||||||
|  |  | ||||||
| AZURE_PIPELINE_BASE_URL = "https://aiinfra.visualstudio.com/PyTorch/" | AZURE_PIPELINE_BASE_URL = "https://aiinfra.visualstudio.com/PyTorch/" | ||||||
| AZURE_DEVOPS_PAT_BASE64 = os.environ.get("AZURE_DEVOPS_PAT_BASE64_SECRET", "") | AZURE_DEVOPS_PAT_BASE64 = os.environ.get("AZURE_DEVOPS_PAT_BASE64_SECRET", "") | ||||||
| PIPELINE_ID = "911" | PIPELINE_ID = "911" | ||||||
|  | |||||||
| @ -62,6 +62,4 @@ readability-string-compare, | |||||||
| ' | ' | ||||||
| HeaderFilterRegex: '^(aten/|c10/|torch/).*$' | HeaderFilterRegex: '^(aten/|c10/|torch/).*$' | ||||||
| WarningsAsErrors: '*' | WarningsAsErrors: '*' | ||||||
| CheckOptions: |  | ||||||
|   misc-header-include-cycle.IgnoredFilesList: 'format.h;ivalue.h;custom_class.h;Dict.h;List.h' |  | ||||||
| ... | ... | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ git submodule sync | |||||||
| git submodule update --init --recursive | git submodule update --init --recursive | ||||||
|  |  | ||||||
| # This takes some time | # This takes some time | ||||||
| make setup-lint | make setup_lint | ||||||
|  |  | ||||||
| # Add CMAKE_PREFIX_PATH to bashrc | # Add CMAKE_PREFIX_PATH to bashrc | ||||||
| echo 'export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}' >> ~/.bashrc | echo 'export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}' >> ~/.bashrc | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								.flake8
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								.flake8
									
									
									
									
									
								
							| @ -2,12 +2,12 @@ | |||||||
| # NOTE: **Mirror any changes** to this file the [tool.ruff] config in pyproject.toml | # NOTE: **Mirror any changes** to this file the [tool.ruff] config in pyproject.toml | ||||||
| # before we can fully move to use ruff | # before we can fully move to use ruff | ||||||
| enable-extensions = G | enable-extensions = G | ||||||
| select = B,C,E,F,G,P,SIM1,SIM911,T4,W,B9,TOR0,TOR1,TOR2,TOR9 | select = B,C,E,F,G,P,SIM1,T4,W,B9,TOR0,TOR1,TOR2,TOR9 | ||||||
| max-line-length = 120 | max-line-length = 120 | ||||||
| # C408 ignored because we like the dict keyword argument syntax | # C408 ignored because we like the dict keyword argument syntax | ||||||
| # E501 is not flexible enough, we're using B950 instead | # E501 is not flexible enough, we're using B950 instead | ||||||
| ignore = | ignore = | ||||||
|     E203,E305,E402,E501,E704,E721,E741,F405,F841,F999,W503,W504,C408,E302,W291,E303, |     E203,E305,E402,E501,E721,E741,F405,F841,F999,W503,W504,C408,E302,W291,E303, | ||||||
|     # shebang has extra meaning in fbcode lints, so I think it's not worth trying |     # shebang has extra meaning in fbcode lints, so I think it's not worth trying | ||||||
|     # to line this up with executable bit |     # to line this up with executable bit | ||||||
|     EXE001, |     EXE001, | ||||||
| @ -55,9 +55,6 @@ per-file-ignores = | |||||||
|     torch/distributed/_functional_collectives.py: TOR901 |     torch/distributed/_functional_collectives.py: TOR901 | ||||||
|     torch/distributed/_spmd/data_parallel.py: TOR901 |     torch/distributed/_spmd/data_parallel.py: TOR901 | ||||||
|     torch/distributed/_tensor/_collective_utils.py: TOR901 |     torch/distributed/_tensor/_collective_utils.py: TOR901 | ||||||
|     # This is a full package that happen to live within the test |  | ||||||
|     # folder, so ok to skip |  | ||||||
|     test/cpp_extensions/open_registration_extension/pytorch_openreg/__init__.py: TOR901 |  | ||||||
| optional-ascii-coding = True | optional-ascii-coding = True | ||||||
| exclude = | exclude = | ||||||
|     ./.git, |     ./.git, | ||||||
|  | |||||||
| @ -40,7 +40,3 @@ e6ec0efaf87703c5f889cfc20b29be455885d58d | |||||||
| a53cda1ddc15336dc1ff0ce1eff2a49cdc5f882e | a53cda1ddc15336dc1ff0ce1eff2a49cdc5f882e | ||||||
| # 2024-01-02 clangformat: fused adam #116583 | # 2024-01-02 clangformat: fused adam #116583 | ||||||
| 9dc68d1aa9e554d09344a10fff69f7b50b2d23a0 | 9dc68d1aa9e554d09344a10fff69f7b50b2d23a0 | ||||||
| # 2024-06-28 enable UFMT in `torch/storage.py` |  | ||||||
| d80939e5e9337e8078f11489afefec59fd42f93b |  | ||||||
| # 2024-06-28 enable UFMT in `torch.utils.data` |  | ||||||
| 7cf0b90e49689d45be91aa539fdf54cf2ea8a9a3 |  | ||||||
|  | |||||||
							
								
								
									
										39
									
								
								.github/actionlint.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/actionlint.yaml
									
									
									
									
										vendored
									
									
								
							| @ -9,50 +9,13 @@ self-hosted-runner: | |||||||
|     - linux.large |     - linux.large | ||||||
|     - linux.2xlarge |     - linux.2xlarge | ||||||
|     - linux.4xlarge |     - linux.4xlarge | ||||||
|     - linux.9xlarge.ephemeral |  | ||||||
|     - linux.12xlarge |     - linux.12xlarge | ||||||
|     - linux.12xlarge.ephemeral |  | ||||||
|     - linux.24xlarge |     - linux.24xlarge | ||||||
|     - linux.arm64.2xlarge |     - linux.arm64.2xlarge | ||||||
|     - linux.arm64.m7g.4xlarge |  | ||||||
|     - linux.4xlarge.nvidia.gpu |     - linux.4xlarge.nvidia.gpu | ||||||
|     - linux.8xlarge.nvidia.gpu |     - linux.8xlarge.nvidia.gpu | ||||||
|     - linux.16xlarge.nvidia.gpu |     - linux.16xlarge.nvidia.gpu | ||||||
|     - linux.g5.4xlarge.nvidia.gpu |     - linux.g5.4xlarge.nvidia.gpu | ||||||
|     # Pytorch/pytorch AWS Linux Runners on Linux Foundation account |  | ||||||
|     - lf.linux.large |  | ||||||
|     - lf.linux.2xlarge |  | ||||||
|     - lf.linux.4xlarge |  | ||||||
|     - lf.linux.12xlarge |  | ||||||
|     - lf.linux.24xlarge |  | ||||||
|     - lf.linux.arm64.2xlarge |  | ||||||
|     - lf.linux.4xlarge.nvidia.gpu |  | ||||||
|     - lf.linux.8xlarge.nvidia.gpu |  | ||||||
|     - lf.linux.16xlarge.nvidia.gpu |  | ||||||
|     - lf.linux.g5.4xlarge.nvidia.gpu |  | ||||||
|     # Organization-wide AWS Linux Runners with new Amazon 2023 AMI |  | ||||||
|     - amz2023.linux.large |  | ||||||
|     - amz2023.linux.2xlarge |  | ||||||
|     - amz2023.linux.4xlarge |  | ||||||
|     - amz2023.linux.12xlarge |  | ||||||
|     - amz2023.linux.24xlarge |  | ||||||
|     - amz2023.linux.arm64.2xlarge |  | ||||||
|     - amz2023.linux.arm64.m7g.4xlarge |  | ||||||
|     - amz2023.linux.4xlarge.nvidia.gpu |  | ||||||
|     - amz2023.linux.8xlarge.nvidia.gpu |  | ||||||
|     - amz2023.linux.16xlarge.nvidia.gpu |  | ||||||
|     - amz2023.linux.g5.4xlarge.nvidia.gpu |  | ||||||
|     # Pytorch/pytorch AWS Linux Runners with the new Amazon 2023 AMI on Linux Foundation account |  | ||||||
|     - amz2023.lf.linux.large |  | ||||||
|     - amz2023.lf.linux.2xlarge |  | ||||||
|     - amz2023.lf.linux.4xlarge |  | ||||||
|     - amz2023.lf.linux.12xlarge |  | ||||||
|     - amz2023.lf.linux.24xlarge |  | ||||||
|     - amz2023.lf.linux.arm64.2xlarge |  | ||||||
|     - amz2023.lf.linux.4xlarge.nvidia.gpu |  | ||||||
|     - amz2023.lf.linux.8xlarge.nvidia.gpu |  | ||||||
|     - amz2023.lf.linux.16xlarge.nvidia.gpu |  | ||||||
|     - amz2023.lf.linux.g5.4xlarge.nvidia.gpu |  | ||||||
|     # Repo-specific IBM hosted S390x runner |     # Repo-specific IBM hosted S390x runner | ||||||
|     - linux.s390x |     - linux.s390x | ||||||
|     # Organization wide AWS Windows runners |     # Organization wide AWS Windows runners | ||||||
| @ -73,5 +36,3 @@ self-hosted-runner: | |||||||
|     - macos-latest-xlarge |     - macos-latest-xlarge | ||||||
|     - macos-13-xlarge |     - macos-13-xlarge | ||||||
|     - macos-14-xlarge |     - macos-14-xlarge | ||||||
|     # Organization-wide Intel hosted XPU runners |  | ||||||
|     - linux.idc.xpu |  | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								.github/actions/diskspace-cleanup/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/actions/diskspace-cleanup/action.yml
									
									
									
									
										vendored
									
									
								
							| @ -14,14 +14,12 @@ runs: | |||||||
|     - name: Cleans up diskspace |     - name: Cleans up diskspace | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: | |       run: | | ||||||
|         set -ex |  | ||||||
|         diskspace_cutoff=${{ inputs.diskspace-cutoff }} |         diskspace_cutoff=${{ inputs.diskspace-cutoff }} | ||||||
|         docker_root_dir=$(docker info -f '{{.DockerRootDir}}') |         diskspace=$(df -H / --output=pcent | sed -n 2p | sed 's/%//' | sed 's/ //') | ||||||
|         diskspace=$(df -H --output=pcent ${docker_root_dir} | sed -n 2p | sed 's/%//' | sed 's/ //') |  | ||||||
|         msg="Please file an issue on pytorch/pytorch reporting the faulty runner. Include a link to the runner logs so the runner can be identified" |         msg="Please file an issue on pytorch/pytorch reporting the faulty runner. Include a link to the runner logs so the runner can be identified" | ||||||
|         if [[ "$diskspace" -ge "$diskspace_cutoff" ]] ; then |         if [[ "$diskspace" -ge "$diskspace_cutoff" ]] ; then | ||||||
|             docker system prune -af |             docker system prune -af | ||||||
|             diskspace_new=$(df -H --output=pcent ${docker_root_dir} | sed -n 2p | sed 's/%//' | sed 's/ //') |             diskspace_new=$(df -H / --output=pcent | sed -n 2p | sed 's/%//' | sed 's/ //') | ||||||
|             if [[ "$diskspace_new" -gt "$diskspace_cutoff" ]] ; then |             if [[ "$diskspace_new" -gt "$diskspace_cutoff" ]] ; then | ||||||
|                 echo "Error: Available diskspace is less than $diskspace_cutoff percent. Not enough diskspace." |                 echo "Error: Available diskspace is less than $diskspace_cutoff percent. Not enough diskspace." | ||||||
|                 echo "$msg" |                 echo "$msg" | ||||||
|  | |||||||
| @ -41,9 +41,6 @@ outputs: | |||||||
|   ci-verbose-test-logs: |   ci-verbose-test-logs: | ||||||
|     description: True if ci-verbose-test-logs label was on PR or [ci-verbose-test-logs] in PR body. |     description: True if ci-verbose-test-logs label was on PR or [ci-verbose-test-logs] in PR body. | ||||||
|     value: ${{ steps.filter.outputs.ci-verbose-test-logs }} |     value: ${{ steps.filter.outputs.ci-verbose-test-logs }} | ||||||
|   ci-test-showlocals: |  | ||||||
|     description: True if ci-test-showlocals label was on PR or [ci-test-showlocals] in PR body. |  | ||||||
|     value: ${{ steps.filter.outputs.ci-test-showlocals }} |  | ||||||
|   ci-no-test-timeout: |   ci-no-test-timeout: | ||||||
|     description: True if ci-no-test-timeout label was on PR or [ci-no-test-timeout] in PR body. |     description: True if ci-no-test-timeout label was on PR or [ci-no-test-timeout] in PR body. | ||||||
|     value: ${{ steps.filter.outputs.ci-no-test-timeout }} |     value: ${{ steps.filter.outputs.ci-no-test-timeout }} | ||||||
|  | |||||||
							
								
								
									
										207
									
								
								.github/actions/linux-build/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								.github/actions/linux-build/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,207 @@ | |||||||
|  | name: linux-build | ||||||
|  |  | ||||||
|  | inputs: | ||||||
|  |   build-environment: | ||||||
|  |     required: true | ||||||
|  |     description: Top-level label for what's being built/tested. | ||||||
|  |   docker-image-name: | ||||||
|  |     required: true | ||||||
|  |     description: Name of the base docker image to build with. | ||||||
|  |   build-generates-artifacts: | ||||||
|  |     required: false | ||||||
|  |     default: "true" | ||||||
|  |     description: If set, upload generated build artifacts. | ||||||
|  |   build-with-debug: | ||||||
|  |     required: false | ||||||
|  |     default: "false" | ||||||
|  |     description: If set, build in debug mode. | ||||||
|  |   sync-tag: | ||||||
|  |     required: false | ||||||
|  |     default: "" | ||||||
|  |     description: | | ||||||
|  |       If this is set, our linter will use this to make sure that every other | ||||||
|  |       job with the same `sync-tag` is identical. | ||||||
|  |   cuda-arch-list: | ||||||
|  |     required: false | ||||||
|  |     default: "5.2" | ||||||
|  |     description: Runner label to select worker type | ||||||
|  |   runner: | ||||||
|  |     required: false | ||||||
|  |     default: "linux.2xlarge" | ||||||
|  |     description: | | ||||||
|  |       List of CUDA architectures CI build should target. | ||||||
|  |   test-matrix: | ||||||
|  |     required: false | ||||||
|  |     type: string | ||||||
|  |     description: | | ||||||
|  |       An option JSON description of what test configs to run later on. This | ||||||
|  |       is moved here from the Linux test workflow so that we can apply filter | ||||||
|  |       logic using test-config labels earlier and skip unnecessary builds | ||||||
|  |   s3-bucket: | ||||||
|  |     description: S3 bucket to download artifact | ||||||
|  |     required: false | ||||||
|  |     default: "gha-artifacts" | ||||||
|  |   aws-role-to-assume: | ||||||
|  |     description: role to assume for downloading artifacts | ||||||
|  |     required: false | ||||||
|  |     default: "" | ||||||
|  |   GITHUB_TOKEN: | ||||||
|  |     description: GitHub token | ||||||
|  |     required: true | ||||||
|  |   HUGGING_FACE_HUB_TOKEN: | ||||||
|  |     description: Hugging Face Hub token | ||||||
|  |     required: false | ||||||
|  |     default: "" | ||||||
|  | outputs: | ||||||
|  |   docker-image: | ||||||
|  |     value: ${{ steps.calculate-docker-image.outputs.docker-image }} | ||||||
|  |     description: The docker image containing the built PyTorch. | ||||||
|  |   test-matrix: | ||||||
|  |     value: ${{ steps.filter.outputs.test-matrix }} | ||||||
|  |     description: An optional JSON description of what test configs to run later on. | ||||||
|  |  | ||||||
|  | runs: | ||||||
|  |   using: composite | ||||||
|  |   steps: | ||||||
|  |     - name: Setup Linux | ||||||
|  |       uses: ./.github/actions/setup-linux | ||||||
|  |  | ||||||
|  |     - name: configure aws credentials | ||||||
|  |       uses: aws-actions/configure-aws-credentials@v3 | ||||||
|  |       if: ${{ inputs.aws-role-to-assume != '' }} | ||||||
|  |       with: | ||||||
|  |         role-to-assume: ${{ inputs.aws-role-to-assume }} | ||||||
|  |         role-session-name: gha-linux-build | ||||||
|  |         role-duration-seconds: 10800 | ||||||
|  |         aws-region: us-east-1 | ||||||
|  |  | ||||||
|  |     - name: Calculate docker image | ||||||
|  |       id: calculate-docker-image | ||||||
|  |       uses: pytorch/test-infra/.github/actions/calculate-docker-image@main | ||||||
|  |       with: | ||||||
|  |         docker-image-name: ${{ inputs.docker-image-name }} | ||||||
|  |  | ||||||
|  |     - name: Use following to pull public copy of the image | ||||||
|  |       id: print-ghcr-mirror | ||||||
|  |       env: | ||||||
|  |         ECR_DOCKER_IMAGE: ${{ steps.calculate-docker-image.outputs.docker-image }} | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         tag=${ECR_DOCKER_IMAGE##*/} | ||||||
|  |         echo "docker pull ghcr.io/pytorch/ci-image:${tag/:/-}" | ||||||
|  |  | ||||||
|  |     - name: Pull docker image | ||||||
|  |       uses: pytorch/test-infra/.github/actions/pull-docker-image@main | ||||||
|  |       with: | ||||||
|  |         docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }} | ||||||
|  |  | ||||||
|  |     - name: Parse ref | ||||||
|  |       id: parse-ref | ||||||
|  |       shell: bash | ||||||
|  |       run: .github/scripts/parse_ref.py | ||||||
|  |  | ||||||
|  |     - name: Get workflow job id | ||||||
|  |       id: get-job-id | ||||||
|  |       uses: ./.github/actions/get-workflow-job-id | ||||||
|  |       if: always() | ||||||
|  |       with: | ||||||
|  |         github-token: ${{ inputs.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
|  |     # Apply the filter logic to the build step too if the test-config label is already there | ||||||
|  |     - name: Select all requested test configurations (if the test matrix is available) | ||||||
|  |       id: filter | ||||||
|  |       uses: ./.github/actions/filter-test-configs | ||||||
|  |       with: | ||||||
|  |         github-token: ${{ inputs.GITHUB_TOKEN }} | ||||||
|  |         test-matrix: ${{ inputs.test-matrix }} | ||||||
|  |         job-name: ${{ steps.get-job-id.outputs.job-name }} | ||||||
|  |  | ||||||
|  |     - name: Download pytest cache | ||||||
|  |       uses: ./.github/actions/pytest-cache-download | ||||||
|  |       continue-on-error: true | ||||||
|  |       with: | ||||||
|  |         cache_dir: .pytest_cache | ||||||
|  |         job_identifier: ${{ github.workflow }}_${{ inputs.build-environment }} | ||||||
|  |         s3_bucket: ${{ inputs.s3-bucket }} | ||||||
|  |  | ||||||
|  |     - name: Build | ||||||
|  |       if: steps.filter.outputs.is-test-matrix-empty == 'False' || inputs.test-matrix == '' | ||||||
|  |       id: build | ||||||
|  |       env: | ||||||
|  |         BUILD_ENVIRONMENT: ${{ inputs.build-environment }} | ||||||
|  |         BRANCH: ${{ steps.parse-ref.outputs.branch }} | ||||||
|  |         # TODO duplicated | ||||||
|  |         AWS_DEFAULT_REGION: us-east-1 | ||||||
|  |         PR_NUMBER: ${{ github.event.pull_request.number }} | ||||||
|  |         SHA1: ${{ github.event.pull_request.head.sha || github.sha }} | ||||||
|  |         SCCACHE_BUCKET: ossci-compiler-cache-circleci-v2 | ||||||
|  |         SCCACHE_S3_KEY_PREFIX: ${{ github.workflow }} | ||||||
|  |         XLA_CLANG_CACHE_S3_BUCKET_NAME: ossci-compiler-clang-cache-circleci-xla | ||||||
|  |         PR_LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }} | ||||||
|  |         TORCH_CUDA_ARCH_LIST: ${{ inputs.cuda-arch-list }} | ||||||
|  |         DOCKER_IMAGE: ${{ steps.calculate-docker-image.outputs.docker-image }} | ||||||
|  |         XLA_CUDA: ${{ contains(inputs.build-environment, 'xla') && '0' || '' }} | ||||||
|  |         DEBUG: ${{ inputs.build-with-debug == 'true' && '1' || '0' }} | ||||||
|  |         OUR_GITHUB_JOB_ID: ${{ steps.get-job-id.outputs.job-id }} | ||||||
|  |         HUGGING_FACE_HUB_TOKEN: ${{ inputs.HUGGING_FACE_HUB_TOKEN }} | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         # detached container should get cleaned up by teardown_ec2_linux | ||||||
|  |         container_name=$(docker run \ | ||||||
|  |           -e BUILD_ENVIRONMENT \ | ||||||
|  |           -e MAX_JOBS="$(nproc --ignore=2)" \ | ||||||
|  |           -e AWS_DEFAULT_REGION \ | ||||||
|  |           -e PR_NUMBER \ | ||||||
|  |           -e SHA1 \ | ||||||
|  |           -e BRANCH \ | ||||||
|  |           -e SCCACHE_BUCKET \ | ||||||
|  |           -e SCCACHE_S3_KEY_PREFIX \ | ||||||
|  |           -e XLA_CUDA \ | ||||||
|  |           -e XLA_CLANG_CACHE_S3_BUCKET_NAME \ | ||||||
|  |           -e SKIP_SCCACHE_INITIALIZATION=1 \ | ||||||
|  |           -e TORCH_CUDA_ARCH_LIST \ | ||||||
|  |           -e PR_LABELS \ | ||||||
|  |           -e OUR_GITHUB_JOB_ID \ | ||||||
|  |           -e HUGGING_FACE_HUB_TOKEN \ | ||||||
|  |           --env-file="/tmp/github_env_${GITHUB_RUN_ID}" \ | ||||||
|  |           --security-opt seccomp=unconfined \ | ||||||
|  |           --cap-add=SYS_PTRACE \ | ||||||
|  |           --tty \ | ||||||
|  |           --detach \ | ||||||
|  |           --user jenkins \ | ||||||
|  |           -v "${GITHUB_WORKSPACE}:/var/lib/jenkins/workspace" \ | ||||||
|  |           -w /var/lib/jenkins/workspace \ | ||||||
|  |           "${DOCKER_IMAGE}" | ||||||
|  |         ) | ||||||
|  |         docker exec -t "${container_name}" sh -c '.ci/pytorch/build.sh' | ||||||
|  |  | ||||||
|  |     - name: Archive artifacts into zip | ||||||
|  |       if: inputs.build-generates-artifacts == 'true' && steps.build.outcome != 'skipped' | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         zip -1 -r artifacts.zip dist/ build/custom_test_artifacts build/lib build/bin .additional_ci_files | ||||||
|  |  | ||||||
|  |     - name: Store PyTorch Build Artifacts on S3 | ||||||
|  |       uses: seemethere/upload-artifact-s3@v5 | ||||||
|  |       if: inputs.build-generates-artifacts == 'true' && steps.build.outcome != 'skipped' | ||||||
|  |       with: | ||||||
|  |         name: ${{ inputs.build-environment }} | ||||||
|  |         retention-days: 14 | ||||||
|  |         if-no-files-found: error | ||||||
|  |         path: artifacts.zip | ||||||
|  |         s3-bucket: ${{ inputs.s3-bucket }} | ||||||
|  |  | ||||||
|  |     - name: Upload sccache stats | ||||||
|  |       if: steps.build.outcome != 'skipped' | ||||||
|  |       uses: seemethere/upload-artifact-s3@v5 | ||||||
|  |       with: | ||||||
|  |         s3-prefix: | | ||||||
|  |           ${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/artifact | ||||||
|  |         retention-days: 365 | ||||||
|  |         if-no-files-found: warn | ||||||
|  |         path: sccache-stats-*.json | ||||||
|  |         s3-bucket: ${{ inputs.s3-bucket }} | ||||||
|  |  | ||||||
|  |     - name: Teardown Linux | ||||||
|  |       uses: pytorch/test-infra/.github/actions/teardown-linux@main | ||||||
|  |       if: always() | ||||||
							
								
								
									
										1
									
								
								.github/actions/linux-test/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/actions/linux-test/action.yml
									
									
									
									
										vendored
									
									
								
							| @ -167,7 +167,6 @@ runs: | |||||||
|         REENABLED_ISSUES: ${{ steps.keep-going.outputs.reenabled-issues }} |         REENABLED_ISSUES: ${{ steps.keep-going.outputs.reenabled-issues }} | ||||||
|         CONTINUE_THROUGH_ERROR: ${{ steps.keep-going.outputs.keep-going }} |         CONTINUE_THROUGH_ERROR: ${{ steps.keep-going.outputs.keep-going }} | ||||||
|         VERBOSE_TEST_LOGS: ${{ steps.keep-going.outputs.ci-verbose-test-logs }} |         VERBOSE_TEST_LOGS: ${{ steps.keep-going.outputs.ci-verbose-test-logs }} | ||||||
|         TEST_SHOWLOCALS: ${{ steps.keep-going.outputs.ci-test-showlocals }} |  | ||||||
|         NO_TEST_TIMEOUT: ${{ steps.keep-going.outputs.ci-no-test-timeout }} |         NO_TEST_TIMEOUT: ${{ steps.keep-going.outputs.ci-no-test-timeout }} | ||||||
|         NO_TD: ${{ steps.keep-going.outputs.ci-no-td }} |         NO_TD: ${{ steps.keep-going.outputs.ci-no-td }} | ||||||
|         TD_DISTRIBUTED: ${{ steps.keep-going.outputs.ci-td-distributed }} |         TD_DISTRIBUTED: ${{ steps.keep-going.outputs.ci-td-distributed }} | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								.github/actions/setup-linux/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/actions/setup-linux/action.yml
									
									
									
									
										vendored
									
									
								
							| @ -59,13 +59,6 @@ runs: | |||||||
|           aws ecr get-login-password --region "$AWS_DEFAULT_REGION" | docker login --username AWS \ |           aws ecr get-login-password --region "$AWS_DEFAULT_REGION" | docker login --username AWS \ | ||||||
|               --password-stdin "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com" |               --password-stdin "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com" | ||||||
|  |  | ||||||
|           # For LF Runners we need to make sure we also login to Meta's ECR docker registry too. |  | ||||||
|           META_AWS_ACCOUNT_ID=308535385114 |  | ||||||
|           if [ "$AWS_ACCOUNT_ID" != "$META_AWS_ACCOUNT_ID" ] ; then |  | ||||||
|               aws ecr get-login-password --region "$AWS_DEFAULT_REGION" | docker login --username AWS \ |  | ||||||
|                   --password-stdin "$META_AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com" |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|     - name: Preserve github env variables for use in docker |     - name: Preserve github env variables for use in docker | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: | |       run: | | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								.github/actions/test-pytorch-binary/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/actions/test-pytorch-binary/action.yml
									
									
									
									
										vendored
									
									
								
							| @ -26,7 +26,6 @@ runs: | |||||||
|           -e PYTORCH_FINAL_PACKAGE_DIR \ |           -e PYTORCH_FINAL_PACKAGE_DIR \ | ||||||
|           -e PYTORCH_ROOT \ |           -e PYTORCH_ROOT \ | ||||||
|           -e SKIP_ALL_TESTS \ |           -e SKIP_ALL_TESTS \ | ||||||
|           -e USE_SPLIT_BUILD \ |  | ||||||
|           --tty \ |           --tty \ | ||||||
|           --detach \ |           --detach \ | ||||||
|           -v "${GITHUB_WORKSPACE}/pytorch:/pytorch" \ |           -v "${GITHUB_WORKSPACE}/pytorch:/pytorch" \ | ||||||
| @ -36,8 +35,7 @@ runs: | |||||||
|           "${DOCKER_IMAGE}" |           "${DOCKER_IMAGE}" | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|         echo "CONTAINER_NAME=${container_name}" >> "$GITHUB_ENV" |         if [[ "${GPU_ARCH_TYPE}" != "rocm" && "${BUILD_ENVIRONMENT}" != "linux-aarch64-binary-manywheel" && "${BUILD_ENVIRONMENT}" != "linux-s390x-binary-manywheel" ]]; then | ||||||
|         if [[ "${GPU_ARCH_TYPE}" != "rocm" && "${BUILD_ENVIRONMENT}" != "linux-aarch64-binary-manywheel" && "${BUILD_ENVIRONMENT}" != "linux-s390x-binary-manywheel" && "${GPU_ARCH_TYPE}" != "xpu" ]]; then |  | ||||||
|           # Propagate download.pytorch.org IP to container. This is only needed on Linux non aarch64 runner |           # Propagate download.pytorch.org IP to container. This is only needed on Linux non aarch64 runner | ||||||
|           grep download.pytorch.org /etc/hosts | docker exec -i "${container_name}" bash -c "/bin/cat >> /etc/hosts" |           grep download.pytorch.org /etc/hosts | docker exec -i "${container_name}" bash -c "/bin/cat >> /etc/hosts" | ||||||
|         fi |         fi | ||||||
| @ -48,9 +46,10 @@ runs: | |||||||
|         docker exec -t "${container_name}" bash -c "source ${BINARY_ENV_FILE} && bash -x /run.sh" |         docker exec -t "${container_name}" bash -c "source ${BINARY_ENV_FILE} && bash -x /run.sh" | ||||||
|  |  | ||||||
|     - name: Cleanup docker |     - name: Cleanup docker | ||||||
|       if: always() && (env.BUILD_ENVIRONMENT == 'linux-s390x-binary-manywheel' || env.GPU_ARCH_TYPE == 'xpu') |       if: always() && env.BUILD_ENVIRONMENT == 'linux-s390x-binary-manywheel' | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: | |       run: | | ||||||
|         # on s390x or xpu stop the container for clean worker stop |         # on s390x stop the container for clean worker stop | ||||||
|  |         # ignore expansion of "docker ps -q" since it could be empty | ||||||
|         # shellcheck disable=SC2046 |         # shellcheck disable=SC2046 | ||||||
|         docker stop "${{ env.CONTAINER_NAME }}" || true |         docker stop $(docker ps -q) || true | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/audio.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/audio.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| b3f6f511f2a1082bd56b13a3f6794e7fc3ba4862 | 1980f8af5bcd0bb2ce51965cf79d8d4c25dad8a0 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/torchbench.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/torchbench.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| 23512dbebd44a11eb84afbf53c3c071dd105297e | d6015d42d9a1834bc7595c4bd6852562fb80b30b | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| 5ea4535f0699f366adb554183a65ebf7dc34a8be | 6f0b61e5d782913a0fc7743812f2a8e522189111 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								.github/labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/labeler.yml
									
									
									
									
										vendored
									
									
								
							| @ -29,6 +29,7 @@ | |||||||
| - torch/fx/experimental/recording.py | - torch/fx/experimental/recording.py | ||||||
| - torch/fx/experimental/sym_node.py | - torch/fx/experimental/sym_node.py | ||||||
| - torch/fx/experimental/validator.py | - torch/fx/experimental/validator.py | ||||||
|  | - torch/fx/experimental/_sym_dispatch_mode.py | ||||||
| - torch/fx/experimental/proxy_tensor.py | - torch/fx/experimental/proxy_tensor.py | ||||||
| - test/distributed/_tensor/test_dtensor_compile.py | - test/distributed/_tensor/test_dtensor_compile.py | ||||||
| - test/distributed/tensor/parallel/test_fsdp_2d_parallel.py | - test/distributed/tensor/parallel/test_fsdp_2d_parallel.py | ||||||
|  | |||||||
							
								
								
									
										139
									
								
								.github/lf-canary-scale-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										139
									
								
								.github/lf-canary-scale-config.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,23 +1,13 @@ | |||||||
|  | # Defines runner types that will be provisioned by by LF Self-hosted | ||||||
| # This file is generated by .github/scripts/validate_scale_config.py in test-infra | # runners for pytorch/pytorch-canary and their labels. | ||||||
| # It defines runner types that will be provisioned by by LF Self-hosted runners |  | ||||||
|  |  | ||||||
| # scale-config.yml: |  | ||||||
| #   Powers what instance types are available for GHA auto-scaled |  | ||||||
| #   runners. Runners listed here will be available as self hosted |  | ||||||
| #   runners, configuration is directly pulled from the main branch. |  | ||||||
| # | # | ||||||
| # NOTE (Apr, 5, 2021): Linux runners are currently all an amazonlinux2 | # Runners listed here will be available as self hosted runners. | ||||||
|  | # Configuration is directly pulled from the main branch. | ||||||
| # | # | ||||||
| # NOTE (Jan 5, 2021): Linux runners are all non-ephemeral to reduce the amount of CreateInstaces calls | # Default values: | ||||||
| #                     to avoid RequestLimitExceeded issues |  | ||||||
| # |  | ||||||
| # TODO: Add some documentation on how the auto-scaling works |  | ||||||
| # |  | ||||||
| # NOTE: Default values, |  | ||||||
| # | # | ||||||
| # runner_types: | # runner_types: | ||||||
| #   runner_label: | #   runner_label: # label to specify in the Github Actions workflow | ||||||
| #     instance_type: m4.large | #     instance_type: m4.large | ||||||
| #     os: linux | #     os: linux | ||||||
| #     max_available: 20 | #     max_available: 20 | ||||||
| @ -31,198 +21,107 @@ runner_types: | |||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 1000 |     max_available: 1000 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.10xlarge.avx2: |  | ||||||
|     disk_size: 200 |  | ||||||
|     instance_type: m4.10xlarge |  | ||||||
|     is_ephemeral: false |  | ||||||
|     max_available: 450 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.24xl.spr-metal: |   lf.c.linux.24xl.spr-metal: | ||||||
|     disk_size: 200 |     disk_size: 200 | ||||||
|     instance_type: c7i.metal-24xl |     instance_type: c7i.metal-24xl | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.16xlarge.spr: |   lf.c.linux.16xlarge.spr: | ||||||
|     disk_size: 200 |     disk_size: 200 | ||||||
|     instance_type: c7i.16xlarge |     instance_type: c7i.16xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.9xlarge.ephemeral: |  | ||||||
|     disk_size: 200 |  | ||||||
|     instance_type: c5.9xlarge |  | ||||||
|     is_ephemeral: true |  | ||||||
|     max_available: 50 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.12xlarge.ephemeral: |   lf.c.linux.12xlarge.ephemeral: | ||||||
|     disk_size: 200 |     disk_size: 200 | ||||||
|     instance_type: c5.12xlarge |     instance_type: c5.12xlarge | ||||||
|     is_ephemeral: true |     is_ephemeral: true | ||||||
|     max_available: 300 |     max_available: 300 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.16xlarge.nvidia.gpu: |   lf.c.linux.16xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g3.16xlarge |     instance_type: g3.16xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.24xlarge: |   lf.c.linux.24xlarge: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: c5.24xlarge |     instance_type: c5.24xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 250 |     max_available: 250 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.2xlarge: |   lf.c.linux.2xlarge: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: c5.2xlarge |     instance_type: c5.2xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 3120 |     max_available: 3120 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.4xlarge: |   lf.c.linux.4xlarge: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: c5.4xlarge |     instance_type: c5.4xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 1000 |     max_available: 1000 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.4xlarge.nvidia.gpu: |   lf.c.linux.4xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g3.4xlarge |     instance_type: g3.4xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 1000 |     max_available: 520 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.8xlarge.nvidia.gpu: |   lf.c.linux.8xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g3.8xlarge |     instance_type: g3.8xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 400 |     max_available: 400 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.g4dn.12xlarge.nvidia.gpu: |   lf.c.linux.g4dn.12xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g4dn.12xlarge |     instance_type: g4dn.12xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 250 |     max_available: 50 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.g4dn.metal.nvidia.gpu: |   lf.c.linux.g4dn.metal.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g4dn.metal |     instance_type: g4dn.metal | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 300 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.g5.48xlarge.nvidia.gpu: |   lf.c.linux.g5.48xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g5.48xlarge |     instance_type: g5.48xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 200 |     max_available: 20 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.g5.12xlarge.nvidia.gpu: |   lf.c.linux.g5.12xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g5.12xlarge |     instance_type: g5.12xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 150 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.g5.4xlarge.nvidia.gpu: |   lf.c.linux.g5.4xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g5.4xlarge |     instance_type: g5.4xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 2400 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.g6.4xlarge.experimental.nvidia.gpu: |  | ||||||
|     disk_size: 150 |  | ||||||
|     instance_type: g6.4xlarge |  | ||||||
|     is_ephemeral: false |  | ||||||
|     max_available: 50 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.large: |  | ||||||
|     max_available: 1200 |     max_available: 1200 | ||||||
|  |     os: linux | ||||||
|  |   lf.c.linux.large: | ||||||
|     disk_size: 15 |     disk_size: 15 | ||||||
|     instance_type: c5.large |     instance_type: c5.large | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.c.linux.arm64.2xlarge: |   lf.c.linux.arm64.2xlarge: | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: t4g.2xlarge |     instance_type: t4g.2xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 200 |     max_available: 200 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |   lf.c.linux.arm64.m7g.2xlarge: | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 |  | ||||||
|   lf.c.linux.arm64.m7g.4xlarge: |  | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: m7g.4xlarge |     instance_type: m7g.2xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 200 |     max_available: 20 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 |  | ||||||
|   lf.c.linux.arm64.m7g.metal: |  | ||||||
|     disk_size: 256 |  | ||||||
|     instance_type: m7g.metal |  | ||||||
|     is_ephemeral: false |  | ||||||
|     max_available: 100 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 |  | ||||||
|   lf.c.windows.4xlarge: |   lf.c.windows.4xlarge: | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: c5d.4xlarge |     instance_type: c5d.4xlarge | ||||||
| @ -239,7 +138,7 @@ runner_types: | |||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: p3.2xlarge |     instance_type: p3.2xlarge | ||||||
|     is_ephemeral: true |     is_ephemeral: true | ||||||
|     max_available: 300 |     max_available: 150 | ||||||
|     os: windows |     os: windows | ||||||
|   lf.c.windows.8xlarge.nvidia.gpu.nonephemeral: |   lf.c.windows.8xlarge.nvidia.gpu.nonephemeral: | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|  | |||||||
							
								
								
									
										139
									
								
								.github/lf-scale-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										139
									
								
								.github/lf-scale-config.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,23 +1,13 @@ | |||||||
|  | # Defines runner types that will be provisioned by by LF Self-hosted | ||||||
| # This file is generated by .github/scripts/validate_scale_config.py in test-infra | # runners for pytorch/pytorch and their labels. | ||||||
| # It defines runner types that will be provisioned by by LF Self-hosted runners |  | ||||||
|  |  | ||||||
| # scale-config.yml: |  | ||||||
| #   Powers what instance types are available for GHA auto-scaled |  | ||||||
| #   runners. Runners listed here will be available as self hosted |  | ||||||
| #   runners, configuration is directly pulled from the main branch. |  | ||||||
| # | # | ||||||
| # NOTE (Apr, 5, 2021): Linux runners are currently all an amazonlinux2 | # Runners listed here will be available as self hosted runners. | ||||||
|  | # Configuration is directly pulled from the main branch. | ||||||
| # | # | ||||||
| # NOTE (Jan 5, 2021): Linux runners are all non-ephemeral to reduce the amount of CreateInstaces calls | # Default values: | ||||||
| #                     to avoid RequestLimitExceeded issues |  | ||||||
| # |  | ||||||
| # TODO: Add some documentation on how the auto-scaling works |  | ||||||
| # |  | ||||||
| # NOTE: Default values, |  | ||||||
| # | # | ||||||
| # runner_types: | # runner_types: | ||||||
| #   runner_label: | #   runner_label: # label to specify in the Github Actions workflow | ||||||
| #     instance_type: m4.large | #     instance_type: m4.large | ||||||
| #     os: linux | #     os: linux | ||||||
| #     max_available: 20 | #     max_available: 20 | ||||||
| @ -31,198 +21,107 @@ runner_types: | |||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 1000 |     max_available: 1000 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.10xlarge.avx2: |  | ||||||
|     disk_size: 200 |  | ||||||
|     instance_type: m4.10xlarge |  | ||||||
|     is_ephemeral: false |  | ||||||
|     max_available: 450 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.24xl.spr-metal: |   lf.linux.24xl.spr-metal: | ||||||
|     disk_size: 200 |     disk_size: 200 | ||||||
|     instance_type: c7i.metal-24xl |     instance_type: c7i.metal-24xl | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.16xlarge.spr: |   lf.linux.16xlarge.spr: | ||||||
|     disk_size: 200 |     disk_size: 200 | ||||||
|     instance_type: c7i.16xlarge |     instance_type: c7i.16xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.9xlarge.ephemeral: |  | ||||||
|     disk_size: 200 |  | ||||||
|     instance_type: c5.9xlarge |  | ||||||
|     is_ephemeral: true |  | ||||||
|     max_available: 50 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.12xlarge.ephemeral: |   lf.linux.12xlarge.ephemeral: | ||||||
|     disk_size: 200 |     disk_size: 200 | ||||||
|     instance_type: c5.12xlarge |     instance_type: c5.12xlarge | ||||||
|     is_ephemeral: true |     is_ephemeral: true | ||||||
|     max_available: 300 |     max_available: 300 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.16xlarge.nvidia.gpu: |   lf.linux.16xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g3.16xlarge |     instance_type: g3.16xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.24xlarge: |   lf.linux.24xlarge: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: c5.24xlarge |     instance_type: c5.24xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 250 |     max_available: 250 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.2xlarge: |   lf.linux.2xlarge: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: c5.2xlarge |     instance_type: c5.2xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 3120 |     max_available: 3120 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.4xlarge: |   lf.linux.4xlarge: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: c5.4xlarge |     instance_type: c5.4xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 1000 |     max_available: 1000 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.4xlarge.nvidia.gpu: |   lf.linux.4xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g3.4xlarge |     instance_type: g3.4xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 1000 |     max_available: 520 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.8xlarge.nvidia.gpu: |   lf.linux.8xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g3.8xlarge |     instance_type: g3.8xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 400 |     max_available: 400 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.g4dn.12xlarge.nvidia.gpu: |   lf.linux.g4dn.12xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g4dn.12xlarge |     instance_type: g4dn.12xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 250 |     max_available: 50 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.g4dn.metal.nvidia.gpu: |   lf.linux.g4dn.metal.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g4dn.metal |     instance_type: g4dn.metal | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 300 |     max_available: 30 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.g5.48xlarge.nvidia.gpu: |   lf.linux.g5.48xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g5.48xlarge |     instance_type: g5.48xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 200 |     max_available: 20 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.g5.12xlarge.nvidia.gpu: |   lf.linux.g5.12xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g5.12xlarge |     instance_type: g5.12xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 150 |     max_available: 150 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.g5.4xlarge.nvidia.gpu: |   lf.linux.g5.4xlarge.nvidia.gpu: | ||||||
|     disk_size: 150 |     disk_size: 150 | ||||||
|     instance_type: g5.4xlarge |     instance_type: g5.4xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 2400 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.g6.4xlarge.experimental.nvidia.gpu: |  | ||||||
|     disk_size: 150 |  | ||||||
|     instance_type: g6.4xlarge |  | ||||||
|     is_ephemeral: false |  | ||||||
|     max_available: 50 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.large: |  | ||||||
|     max_available: 1200 |     max_available: 1200 | ||||||
|  |     os: linux | ||||||
|  |   lf.linux.large: | ||||||
|     disk_size: 15 |     disk_size: 15 | ||||||
|     instance_type: c5.large |     instance_type: c5.large | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 |  | ||||||
|   lf.linux.arm64.2xlarge: |   lf.linux.arm64.2xlarge: | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: t4g.2xlarge |     instance_type: t4g.2xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 200 |     max_available: 200 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |   lf.linux.arm64.m7g.2xlarge: | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 |  | ||||||
|   lf.linux.arm64.m7g.4xlarge: |  | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: m7g.4xlarge |     instance_type: m7g.2xlarge | ||||||
|     is_ephemeral: false |     is_ephemeral: false | ||||||
|     max_available: 200 |     max_available: 20 | ||||||
|     os: linux |     os: linux | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 |  | ||||||
|   lf.linux.arm64.m7g.metal: |  | ||||||
|     disk_size: 256 |  | ||||||
|     instance_type: m7g.metal |  | ||||||
|     is_ephemeral: false |  | ||||||
|     max_available: 100 |  | ||||||
|     os: linux |  | ||||||
|     variants: |  | ||||||
|       amz2023: |  | ||||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 |  | ||||||
|   lf.windows.4xlarge: |   lf.windows.4xlarge: | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: c5d.4xlarge |     instance_type: c5d.4xlarge | ||||||
| @ -239,7 +138,7 @@ runner_types: | |||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|     instance_type: p3.2xlarge |     instance_type: p3.2xlarge | ||||||
|     is_ephemeral: true |     is_ephemeral: true | ||||||
|     max_available: 300 |     max_available: 150 | ||||||
|     os: windows |     os: windows | ||||||
|   lf.windows.8xlarge.nvidia.gpu.nonephemeral: |   lf.windows.8xlarge.nvidia.gpu.nonephemeral: | ||||||
|     disk_size: 256 |     disk_size: 256 | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							| @ -27,9 +27,11 @@ | |||||||
|   - third_party/onnx |   - third_party/onnx | ||||||
|   - caffe2/python/onnx/** |   - caffe2/python/onnx/** | ||||||
|   approved_by: |   approved_by: | ||||||
|  |   - BowenBao | ||||||
|   - justinchuby |   - justinchuby | ||||||
|   - liqunfu |   - liqunfu | ||||||
|   - shubhambhokare1 |   - shubhambhokare1 | ||||||
|  |   - thiagocrepaldi | ||||||
|   - titaiwangms |   - titaiwangms | ||||||
|   - wschin |   - wschin | ||||||
|   - xadupre |   - xadupre | ||||||
| @ -242,7 +244,6 @@ | |||||||
|   - torch/csrc/xpu/** |   - torch/csrc/xpu/** | ||||||
|   - torch/xpu/** |   - torch/xpu/** | ||||||
|   - test/xpu/** |   - test/xpu/** | ||||||
|   - test/test_xpu.py |  | ||||||
|   - third_party/xpu.txt |   - third_party/xpu.txt | ||||||
|   - .ci/docker/ci_commit_pins/triton-xpu.txt |   - .ci/docker/ci_commit_pins/triton-xpu.txt | ||||||
|   approved_by: |   approved_by: | ||||||
| @ -286,7 +287,6 @@ | |||||||
|   - test/cpp/dist_autograd/** |   - test/cpp/dist_autograd/** | ||||||
|   - test/cpp/rpc/** |   - test/cpp/rpc/** | ||||||
|   approved_by: |   approved_by: | ||||||
|   - wconstab |  | ||||||
|   - mrshenli |   - mrshenli | ||||||
|   - pritamdamania87 |   - pritamdamania87 | ||||||
|   - zhaojuanmao |   - zhaojuanmao | ||||||
| @ -313,25 +313,6 @@ | |||||||
|   - Lint |   - Lint | ||||||
|   - pull |   - pull | ||||||
|  |  | ||||||
| - name: DCP |  | ||||||
|   patterns: |  | ||||||
|   - torch/distributed/checkpoint/** |  | ||||||
|   approved_by: |  | ||||||
|   - LucasLLC |  | ||||||
|   - fegin |  | ||||||
|   - wz337 |  | ||||||
|   - saumishr |  | ||||||
|   - daulet-askarov |  | ||||||
|   - pradeepdfb |  | ||||||
|   - kirtiteja |  | ||||||
|   - mhorowitz |  | ||||||
|   - saiteja64 |  | ||||||
|   mandatory_checks_name: |  | ||||||
|   - EasyCLA |  | ||||||
|   - Lint |  | ||||||
|   - pull |  | ||||||
|  |  | ||||||
|  |  | ||||||
| - name: IDEEP | - name: IDEEP | ||||||
|   patterns: |   patterns: | ||||||
|   - third_party/ideep |   - third_party/ideep | ||||||
| @ -395,21 +376,13 @@ | |||||||
|  |  | ||||||
| - name: CPU inductor | - name: CPU inductor | ||||||
|   patterns: |   patterns: | ||||||
|   - torch/_inductor/mkldnn_ir.py |  | ||||||
|   - torch/_inductor/mkldnn_lowerings.py |   - torch/_inductor/mkldnn_lowerings.py | ||||||
|   - torch/_inductor/fx_passes/mkldnn_fusion.py |   - torch/_inductor/fx_passes/mkldnn_fusion.py | ||||||
|   - torch/_inductor/fx_passes/quantization.py |   - torch/_inductor/fx_passes/quantization.py | ||||||
|   - torch/_inductor/codegen/cpp_prefix.h |  | ||||||
|   - torch/_inductor/codegen/cpp.py |   - torch/_inductor/codegen/cpp.py | ||||||
|   - torch/_inductor/codegen/cpp_utils.py |  | ||||||
|   - torch/_inductor/codegen/cpp_micro_gemm.py |  | ||||||
|   - torch/_inductor/codegen/cpp_template_kernel.py |  | ||||||
|   - torch/_inductor/codegen/cpp_template.py |  | ||||||
|   - torch/_inductor/codegen/cpp_gemm_template.py |  | ||||||
|   - test/inductor/test_mkldnn_pattern_matcher.py |   - test/inductor/test_mkldnn_pattern_matcher.py | ||||||
|   - test/inductor/test_cpu_repro.py |   - test/inductor/test_cpu_repo.py | ||||||
|   - test/inductor/test_cpu_cpp_wrapper.py |   - test/inductor/test_cpu_cpp_wrapper.py | ||||||
|   - test/inductor/test_cpu_select_algorithm.py |  | ||||||
|   - aten/src/ATen/cpu/** |   - aten/src/ATen/cpu/** | ||||||
|   - aten/src/ATen/native/quantized/cpu/** |   - aten/src/ATen/native/quantized/cpu/** | ||||||
|   - test/quantization/core/test_quantized_op.py |   - test/quantization/core/test_quantized_op.py | ||||||
| @ -523,13 +496,6 @@ | |||||||
|   - Skylion007 |   - Skylion007 | ||||||
|   - ngimel |   - ngimel | ||||||
|   - peterbell10 |   - peterbell10 | ||||||
|   - eqy |  | ||||||
|   - jansel |  | ||||||
|   - jeffdaily |  | ||||||
|   - eellison |  | ||||||
|   - anijain2305 |  | ||||||
|   - bdhirsh |  | ||||||
|   - zou3519 |  | ||||||
|   mandatory_checks_name: |   mandatory_checks_name: | ||||||
|   - EasyCLA |   - EasyCLA | ||||||
|   - Lint |   - Lint | ||||||
| @ -544,8 +510,6 @@ | |||||||
|   - ezyang |   - ezyang | ||||||
|   - dzhulgakov |   - dzhulgakov | ||||||
|   - malfet |   - malfet | ||||||
|   - albanD |  | ||||||
|   - ptrblck |  | ||||||
|   mandatory_checks_name: |   mandatory_checks_name: | ||||||
|   - EasyCLA |   - EasyCLA | ||||||
|   - Lint |   - Lint | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								.github/pytorch-probot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/pytorch-probot.yml
									
									
									
									
										vendored
									
									
								
							| @ -6,10 +6,8 @@ ciflow_push_tags: | |||||||
| - ciflow/binaries_libtorch | - ciflow/binaries_libtorch | ||||||
| - ciflow/binaries_wheel | - ciflow/binaries_wheel | ||||||
| - ciflow/inductor | - ciflow/inductor | ||||||
| - ciflow/inductor-rocm |  | ||||||
| - ciflow/inductor-perf-compare | - ciflow/inductor-perf-compare | ||||||
| - ciflow/inductor-micro-benchmark | - ciflow/inductor-micro-benchmark | ||||||
| - ciflow/inductor-cu124 |  | ||||||
| - ciflow/linux-aarch64 | - ciflow/linux-aarch64 | ||||||
| - ciflow/mps | - ciflow/mps | ||||||
| - ciflow/nightly | - ciflow/nightly | ||||||
| @ -27,4 +25,3 @@ retryable_workflows: | |||||||
| - windows-binary | - windows-binary | ||||||
| labeler_config: labeler.yml | labeler_config: labeler.yml | ||||||
| label_to_label_config: label_to_label.yml | label_to_label_config: label_to_label.yml | ||||||
| mergebot: True |  | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| # iOS simulator requirements | # iOS simulator requirements | ||||||
| coremltools==5.0b5 | coremltools==5.0b5 | ||||||
| protobuf==3.20.2 | protobuf==3.20.2 | ||||||
| optree==0.12.1 | optree==0.11.0 | ||||||
|  | |||||||
| @ -17,16 +17,16 @@ pytest-xdist==3.3.1 | |||||||
| pytest-rerunfailures==10.3 | pytest-rerunfailures==10.3 | ||||||
| pytest-flakefinder==1.1.0 | pytest-flakefinder==1.1.0 | ||||||
| scipy==1.10.1 | scipy==1.10.1 | ||||||
| sympy==1.12.1 ; python_version == "3.8" | sympy==1.11.1 | ||||||
| sympy>=1.13.0 ; python_version >= "3.9" |  | ||||||
| unittest-xml-reporting<=3.2.0,>=2.0.0 | unittest-xml-reporting<=3.2.0,>=2.0.0 | ||||||
| xdoctest==1.1.0 | xdoctest==1.1.0 | ||||||
| filelock==3.6.0 | filelock==3.6.0 | ||||||
|  | sympy==1.11.1 | ||||||
| pytest-cpp==2.3.0 | pytest-cpp==2.3.0 | ||||||
| rockset==1.0.3 | rockset==1.0.3 | ||||||
| z3-solver==4.12.2.0 | z3-solver==4.12.2.0 | ||||||
| tensorboard==2.13.0 | tensorboard==2.13.0 | ||||||
| optree==0.12.1 | optree==0.11.0 | ||||||
| # NB: test_hparams_* from test_tensorboard is failing with protobuf 5.26.0 in | # NB: test_hparams_* from test_tensorboard is failing with protobuf 5.26.0 in | ||||||
| # which the stringify metadata is wrong when escaping double quote | # which the stringify metadata is wrong when escaping double quote | ||||||
| protobuf==3.20.2 | protobuf==3.20.2 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/scripts/amd/package_triton_wheel.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/scripts/amd/package_triton_wheel.sh
									
									
									
									
										vendored
									
									
								
							| @ -93,8 +93,6 @@ done | |||||||
|  |  | ||||||
| # Copy Include Files | # Copy Include Files | ||||||
| cp -r $ROCM_HOME/include/hip $TRITON_ROCM_DIR/include | cp -r $ROCM_HOME/include/hip $TRITON_ROCM_DIR/include | ||||||
| cp -r $ROCM_HOME/include/roctracer $TRITON_ROCM_DIR/include |  | ||||||
| cp -r $ROCM_HOME/include/hsa $TRITON_ROCM_DIR/include |  | ||||||
|  |  | ||||||
| # Copy linker | # Copy linker | ||||||
| mkdir -p $TRITON_ROCM_DIR/llvm/bin | mkdir -p $TRITON_ROCM_DIR/llvm/bin | ||||||
|  | |||||||
							
								
								
									
										31
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +1,4 @@ | |||||||
| #!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||||
|  |  | ||||||
| import os | import os | ||||||
| import shutil | import shutil | ||||||
| import sys | import sys | ||||||
| @ -8,17 +7,12 @@ from subprocess import check_call | |||||||
| from tempfile import TemporaryDirectory | from tempfile import TemporaryDirectory | ||||||
| from typing import Optional | from typing import Optional | ||||||
|  |  | ||||||
|  |  | ||||||
| SCRIPT_DIR = Path(__file__).parent | SCRIPT_DIR = Path(__file__).parent | ||||||
| REPO_DIR = SCRIPT_DIR.parent.parent | REPO_DIR = SCRIPT_DIR.parent.parent | ||||||
|  |  | ||||||
|  |  | ||||||
| def read_triton_pin(device: str = "cuda") -> str: | def read_triton_pin(rocm_hash: bool = False) -> str: | ||||||
|     triton_file = "triton.txt" |     triton_file = "triton.txt" if not rocm_hash else "triton-rocm.txt" | ||||||
|     if device == "rocm": |  | ||||||
|         triton_file = "triton-rocm.txt" |  | ||||||
|     elif device == "xpu": |  | ||||||
|         triton_file = "triton-xpu.txt" |  | ||||||
|     with open(REPO_DIR / ".ci" / "docker" / "ci_commit_pins" / triton_file) as f: |     with open(REPO_DIR / ".ci" / "docker" / "ci_commit_pins" / triton_file) as f: | ||||||
|         return f.read().strip() |         return f.read().strip() | ||||||
|  |  | ||||||
| @ -55,7 +49,7 @@ def build_triton( | |||||||
|     version: str, |     version: str, | ||||||
|     commit_hash: str, |     commit_hash: str, | ||||||
|     build_conda: bool = False, |     build_conda: bool = False, | ||||||
|     device: str = "cuda", |     build_rocm: bool = False, | ||||||
|     py_version: Optional[str] = None, |     py_version: Optional[str] = None, | ||||||
|     release: bool = False, |     release: bool = False, | ||||||
| ) -> Path: | ) -> Path: | ||||||
| @ -75,14 +69,11 @@ def build_triton( | |||||||
|         triton_basedir = Path(tmpdir) / "triton" |         triton_basedir = Path(tmpdir) / "triton" | ||||||
|         triton_pythondir = triton_basedir / "python" |         triton_pythondir = triton_basedir / "python" | ||||||
|         triton_repo = "https://github.com/openai/triton" |         triton_repo = "https://github.com/openai/triton" | ||||||
|         if device == "rocm": |         if build_rocm: | ||||||
|             triton_pkg_name = "pytorch-triton-rocm" |             triton_pkg_name = "pytorch-triton-rocm" | ||||||
|         elif device == "xpu": |  | ||||||
|             triton_pkg_name = "pytorch-triton-xpu" |  | ||||||
|             triton_repo = "https://github.com/intel/intel-xpu-backend-for-triton" |  | ||||||
|         else: |         else: | ||||||
|             triton_pkg_name = "pytorch-triton" |             triton_pkg_name = "pytorch-triton" | ||||||
|         check_call(["git", "clone", triton_repo, "triton"], cwd=tmpdir) |         check_call(["git", "clone", triton_repo], cwd=tmpdir) | ||||||
|         if release: |         if release: | ||||||
|             ver, rev, patch = version.split(".") |             ver, rev, patch = version.split(".") | ||||||
|             check_call( |             check_call( | ||||||
| @ -149,7 +140,7 @@ def build_triton( | |||||||
|             expected_version=None, |             expected_version=None, | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|         if device == "rocm": |         if build_rocm: | ||||||
|             check_call( |             check_call( | ||||||
|                 [f"{SCRIPT_DIR}/amd/package_triton_wheel.sh"], |                 [f"{SCRIPT_DIR}/amd/package_triton_wheel.sh"], | ||||||
|                 cwd=triton_basedir, |                 cwd=triton_basedir, | ||||||
| @ -164,7 +155,7 @@ def build_triton( | |||||||
|         whl_path = next(iter((triton_pythondir / "dist").glob("*.whl"))) |         whl_path = next(iter((triton_pythondir / "dist").glob("*.whl"))) | ||||||
|         shutil.copy(whl_path, Path.cwd()) |         shutil.copy(whl_path, Path.cwd()) | ||||||
|  |  | ||||||
|         if device == "rocm": |         if build_rocm: | ||||||
|             check_call( |             check_call( | ||||||
|                 [f"{SCRIPT_DIR}/amd/patch_triton_wheel.sh", Path.cwd()], |                 [f"{SCRIPT_DIR}/amd/patch_triton_wheel.sh", Path.cwd()], | ||||||
|                 cwd=triton_basedir, |                 cwd=triton_basedir, | ||||||
| @ -179,19 +170,17 @@ def main() -> None: | |||||||
|     parser = ArgumentParser("Build Triton binaries") |     parser = ArgumentParser("Build Triton binaries") | ||||||
|     parser.add_argument("--release", action="store_true") |     parser.add_argument("--release", action="store_true") | ||||||
|     parser.add_argument("--build-conda", action="store_true") |     parser.add_argument("--build-conda", action="store_true") | ||||||
|     parser.add_argument( |     parser.add_argument("--build-rocm", action="store_true") | ||||||
|         "--device", type=str, default="cuda", choices=["cuda", "rocm", "xpu"] |  | ||||||
|     ) |  | ||||||
|     parser.add_argument("--py-version", type=str) |     parser.add_argument("--py-version", type=str) | ||||||
|     parser.add_argument("--commit-hash", type=str) |     parser.add_argument("--commit-hash", type=str) | ||||||
|     parser.add_argument("--triton-version", type=str, default=read_triton_version()) |     parser.add_argument("--triton-version", type=str, default=read_triton_version()) | ||||||
|     args = parser.parse_args() |     args = parser.parse_args() | ||||||
|  |  | ||||||
|     build_triton( |     build_triton( | ||||||
|         device=args.device, |         build_rocm=args.build_rocm, | ||||||
|         commit_hash=args.commit_hash |         commit_hash=args.commit_hash | ||||||
|         if args.commit_hash |         if args.commit_hash | ||||||
|         else read_triton_pin(args.device), |         else read_triton_pin(args.build_rocm), | ||||||
|         version=args.triton_version, |         version=args.triton_version, | ||||||
|         build_conda=args.build_conda, |         build_conda=args.build_conda, | ||||||
|         py_version=args.py_version, |         py_version=args.py_version, | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								.github/scripts/check_labels.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/scripts/check_labels.py
									
									
									
									
										vendored
									
									
								
							| @ -5,6 +5,7 @@ import sys | |||||||
| from typing import Any | from typing import Any | ||||||
|  |  | ||||||
| from github_utils import gh_delete_comment, gh_post_pr_comment | from github_utils import gh_delete_comment, gh_post_pr_comment | ||||||
|  |  | ||||||
| from gitutils import get_git_remote_name, get_git_repo_dir, GitRepo | from gitutils import get_git_remote_name, get_git_repo_dir, GitRepo | ||||||
| from label_utils import has_required_labels, is_label_err_comment, LABEL_ERR_MSG | from label_utils import has_required_labels, is_label_err_comment, LABEL_ERR_MSG | ||||||
| from trymerge import GitHubPR | from trymerge import GitHubPR | ||||||
|  | |||||||
							
								
								
									
										116
									
								
								.github/scripts/cherry_pick.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								.github/scripts/cherry_pick.py
									
									
									
									
										vendored
									
									
								
							| @ -3,10 +3,12 @@ | |||||||
| import json | import json | ||||||
| import os | import os | ||||||
| import re | import re | ||||||
| from typing import Any, cast, Dict, List, Optional | from typing import Any, Optional | ||||||
|  |  | ||||||
| from urllib.error import HTTPError | from urllib.error import HTTPError | ||||||
|  |  | ||||||
| from github_utils import gh_fetch_url, gh_post_pr_comment, gh_query_issues_by_labels | from github_utils import gh_fetch_url, gh_post_pr_comment | ||||||
|  |  | ||||||
| from gitutils import get_git_remote_name, get_git_repo_dir, GitRepo | from gitutils import get_git_remote_name, get_git_repo_dir, GitRepo | ||||||
| from trymerge import get_pr_commit_sha, GitHubPR | from trymerge import get_pr_commit_sha, GitHubPR | ||||||
|  |  | ||||||
| @ -17,7 +19,6 @@ REQUIRES_ISSUE = { | |||||||
|     "critical", |     "critical", | ||||||
|     "fixnewfeature", |     "fixnewfeature", | ||||||
| } | } | ||||||
| RELEASE_BRANCH_REGEX = re.compile(r"release/(?P<version>.+)") |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def parse_args() -> Any: | def parse_args() -> Any: | ||||||
| @ -57,33 +58,6 @@ def get_merge_commit_sha(repo: GitRepo, pr: GitHubPR) -> Optional[str]: | |||||||
|     return commit_sha if pr.is_closed() else None |     return commit_sha if pr.is_closed() else None | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_release_version(onto_branch: str) -> Optional[str]: |  | ||||||
|     """ |  | ||||||
|     Return the release version if the target branch is a release branch |  | ||||||
|     """ |  | ||||||
|     m = re.match(RELEASE_BRANCH_REGEX, onto_branch) |  | ||||||
|     return m.group("version") if m else "" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_tracker_issues( |  | ||||||
|     org: str, project: str, onto_branch: str |  | ||||||
| ) -> List[Dict[str, Any]]: |  | ||||||
|     """ |  | ||||||
|     Find the tracker issue from the repo. The tracker issue needs to have the title |  | ||||||
|     like [VERSION] Release Tracker following the convention on PyTorch |  | ||||||
|     """ |  | ||||||
|     version = get_release_version(onto_branch) |  | ||||||
|     if not version: |  | ||||||
|         return [] |  | ||||||
|  |  | ||||||
|     tracker_issues = gh_query_issues_by_labels(org, project, labels=["release tracker"]) |  | ||||||
|     if not tracker_issues: |  | ||||||
|         return [] |  | ||||||
|  |  | ||||||
|     # Figure out the tracker issue from the list by looking at the title |  | ||||||
|     return [issue for issue in tracker_issues if version in issue.get("title", "")] |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def cherry_pick( | def cherry_pick( | ||||||
|     github_actor: str, |     github_actor: str, | ||||||
|     repo: GitRepo, |     repo: GitRepo, | ||||||
| @ -103,49 +77,17 @@ def cherry_pick( | |||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     try: |     try: | ||||||
|         org, project = repo.gh_owner_and_name() |  | ||||||
|  |  | ||||||
|         cherry_pick_pr = "" |  | ||||||
|         if not dry_run: |         if not dry_run: | ||||||
|  |             org, project = repo.gh_owner_and_name() | ||||||
|             cherry_pick_pr = submit_pr(repo, pr, cherry_pick_branch, onto_branch) |             cherry_pick_pr = submit_pr(repo, pr, cherry_pick_branch, onto_branch) | ||||||
|  |  | ||||||
|         tracker_issues_comments = [] |             msg = f"The cherry pick PR is at {cherry_pick_pr}" | ||||||
|         tracker_issues = get_tracker_issues(org, project, onto_branch) |             if fixes: | ||||||
|         for issue in tracker_issues: |                 msg += f" and it is linked with issue {fixes}" | ||||||
|             issue_number = int(str(issue.get("number", "0"))) |             elif classification in REQUIRES_ISSUE: | ||||||
|             if not issue_number: |                 msg += f" and it is recommended to link a {classification} cherry pick PR with an issue" | ||||||
|                 continue |  | ||||||
|  |  | ||||||
|             res = cast( |             post_comment(org, project, pr.pr_num, msg) | ||||||
|                 Dict[str, Any], |  | ||||||
|                 post_tracker_issue_comment( |  | ||||||
|                     org, |  | ||||||
|                     project, |  | ||||||
|                     issue_number, |  | ||||||
|                     pr.pr_num, |  | ||||||
|                     cherry_pick_pr, |  | ||||||
|                     classification, |  | ||||||
|                     fixes, |  | ||||||
|                     dry_run, |  | ||||||
|                 ), |  | ||||||
|             ) |  | ||||||
|  |  | ||||||
|             comment_url = res.get("html_url", "") |  | ||||||
|             if comment_url: |  | ||||||
|                 tracker_issues_comments.append(comment_url) |  | ||||||
|  |  | ||||||
|         msg = f"The cherry pick PR is at {cherry_pick_pr}" |  | ||||||
|         if fixes: |  | ||||||
|             msg += f" and it is linked with issue {fixes}." |  | ||||||
|         elif classification in REQUIRES_ISSUE: |  | ||||||
|             msg += f" and it is recommended to link a {classification} cherry pick PR with an issue." |  | ||||||
|  |  | ||||||
|         if tracker_issues_comments: |  | ||||||
|             msg += " The following tracker issues are updated:\n" |  | ||||||
|             for tracker_issues_comment in tracker_issues_comments: |  | ||||||
|                 msg += f"* {tracker_issues_comment}\n" |  | ||||||
|  |  | ||||||
|         post_pr_comment(org, project, pr.pr_num, msg, dry_run) |  | ||||||
|  |  | ||||||
|     finally: |     finally: | ||||||
|         if current_branch: |         if current_branch: | ||||||
| @ -217,9 +159,7 @@ def submit_pr( | |||||||
|         raise RuntimeError(msg) from error |         raise RuntimeError(msg) from error | ||||||
|  |  | ||||||
|  |  | ||||||
| def post_pr_comment( | def post_comment(org: str, project: str, pr_num: int, msg: str) -> None: | ||||||
|     org: str, project: str, pr_num: int, msg: str, dry_run: bool = False |  | ||||||
| ) -> List[Dict[str, Any]]: |  | ||||||
|     """ |     """ | ||||||
|     Post a comment on the PR itself to point to the cherry picking PR when success |     Post a comment on the PR itself to point to the cherry picking PR when success | ||||||
|     or print the error when failure |     or print the error when failure | ||||||
| @ -242,35 +182,7 @@ def post_pr_comment( | |||||||
|     comment = "\n".join( |     comment = "\n".join( | ||||||
|         (f"### Cherry picking #{pr_num}", f"{msg}", "", f"{internal_debugging}") |         (f"### Cherry picking #{pr_num}", f"{msg}", "", f"{internal_debugging}") | ||||||
|     ) |     ) | ||||||
|     return gh_post_pr_comment(org, project, pr_num, comment, dry_run) |     gh_post_pr_comment(org, project, pr_num, comment) | ||||||
|  |  | ||||||
|  |  | ||||||
| def post_tracker_issue_comment( |  | ||||||
|     org: str, |  | ||||||
|     project: str, |  | ||||||
|     issue_num: int, |  | ||||||
|     pr_num: int, |  | ||||||
|     cherry_pick_pr: str, |  | ||||||
|     classification: str, |  | ||||||
|     fixes: str, |  | ||||||
|     dry_run: bool = False, |  | ||||||
| ) -> List[Dict[str, Any]]: |  | ||||||
|     """ |  | ||||||
|     Post a comment on the tracker issue (if any) to record the cherry pick |  | ||||||
|     """ |  | ||||||
|     comment = "\n".join( |  | ||||||
|         ( |  | ||||||
|             "Link to landed trunk PR (if applicable):", |  | ||||||
|             f"* https://github.com/{org}/{project}/pull/{pr_num}", |  | ||||||
|             "", |  | ||||||
|             "Link to release branch PR:", |  | ||||||
|             f"* {cherry_pick_pr}", |  | ||||||
|             "", |  | ||||||
|             "Criteria Category:", |  | ||||||
|             " - ".join((classification.capitalize(), fixes.capitalize())), |  | ||||||
|         ) |  | ||||||
|     ) |  | ||||||
|     return gh_post_pr_comment(org, project, issue_num, comment, dry_run) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def main() -> None: | def main() -> None: | ||||||
| @ -302,7 +214,7 @@ def main() -> None: | |||||||
|  |  | ||||||
|     except RuntimeError as error: |     except RuntimeError as error: | ||||||
|         if not args.dry_run: |         if not args.dry_run: | ||||||
|             post_pr_comment(org, project, pr_num, str(error)) |             post_comment(org, project, pr_num, str(error)) | ||||||
|         else: |         else: | ||||||
|             raise error |             raise error | ||||||
|  |  | ||||||
|  | |||||||
| @ -10,7 +10,6 @@ import requests | |||||||
| import rockset  # type: ignore[import] | import rockset  # type: ignore[import] | ||||||
| from gitutils import retries_decorator | from gitutils import retries_decorator | ||||||
|  |  | ||||||
|  |  | ||||||
| LOGS_QUERY = """ | LOGS_QUERY = """ | ||||||
| with | with | ||||||
|     shas as ( |     shas as ( | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/scripts/collect_ciflow_labels.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/scripts/collect_ciflow_labels.py
									
									
									
									
										vendored
									
									
								
							| @ -1,12 +1,10 @@ | |||||||
| #!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||||
|  |  | ||||||
| import sys | import sys | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import Any, cast, Dict, List, Set | from typing import Any, cast, Dict, List, Set | ||||||
|  |  | ||||||
| import yaml | import yaml | ||||||
|  |  | ||||||
|  |  | ||||||
| GITHUB_DIR = Path(__file__).parent.parent | GITHUB_DIR = Path(__file__).parent.parent | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| import json | import json | ||||||
| import subprocess | import subprocess | ||||||
| import sys | import sys | ||||||
|  |  | ||||||
| from enum import Enum | from enum import Enum | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import NamedTuple, Optional | from typing import NamedTuple, Optional | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								.github/scripts/delete_old_branches.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/scripts/delete_old_branches.py
									
									
									
									
										vendored
									
									
								
							| @ -9,7 +9,6 @@ from typing import Any, Callable, Dict, List, Set | |||||||
| from github_utils import gh_fetch_json_dict, gh_graphql | from github_utils import gh_fetch_json_dict, gh_graphql | ||||||
| from gitutils import GitRepo | from gitutils import GitRepo | ||||||
|  |  | ||||||
|  |  | ||||||
| SEC_IN_DAY = 24 * 60 * 60 | SEC_IN_DAY = 24 * 60 * 60 | ||||||
| CLOSED_PR_RETENTION = 30 * SEC_IN_DAY | CLOSED_PR_RETENTION = 30 * SEC_IN_DAY | ||||||
| NO_PR_RETENTION = 1.5 * 365 * SEC_IN_DAY | NO_PR_RETENTION = 1.5 * 365 * SEC_IN_DAY | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								.github/scripts/drci_mocks.json.gz
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.github/scripts/drci_mocks.json.gz
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	