mirror of
				https://github.com/pytorch/pytorch.git
				synced 2025-10-29 19:24:55 +08:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			v2.5.1
			...
			mlazos/ten
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f3825bb983 | |||
| ebfe1dcc80 | 
| @ -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 | ||||
| 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). | ||||
|  | ||||
| ## Docker CI builds | ||||
| ## Contents | ||||
|  | ||||
| * `build.sh` -- dispatch script to launch all builds | ||||
| * `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-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 | ||||
|  | ||||
| ```bash | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| 0.7b | ||||
| 0.6b | ||||
| manylinux_2_17 | ||||
| rocm6.2 | ||||
| 9be04068c3c0857a4cfd17d7e39e71d0423ebac2 | ||||
| 3e9e1959d23b93d78a08fcc5f868125dc3854dece32fd9458be9ef4467982291 | ||||
| rocm6.1 | ||||
| 7f07e8a1cb1f99627eb6d77f5c0e9295c775f3c7 | ||||
| 77c29fa3f3b614e187d7213d745e989a92708cee2bc6020419ab49019af399d1 | ||||
|  | ||||
| @ -92,7 +92,7 @@ _UCC_COMMIT=20eae37090a4ce1b32bcce6144ccad0b49943e0b | ||||
| # from scratch | ||||
| case "$image" in | ||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9) | ||||
|     CUDA_VERSION=12.4.1 | ||||
|     CUDA_VERSION=12.4.0 | ||||
|     CUDNN_VERSION=9 | ||||
|     ANACONDA_PYTHON_VERSION=3.10 | ||||
|     GCC_VERSION=9 | ||||
| @ -120,7 +120,7 @@ case "$image" in | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9-inductor-benchmarks) | ||||
|     CUDA_VERSION=12.4.1 | ||||
|     CUDA_VERSION=12.4.0 | ||||
|     CUDNN_VERSION=9 | ||||
|     ANACONDA_PYTHON_VERSION=3.10 | ||||
|     GCC_VERSION=9 | ||||
| @ -165,7 +165,7 @@ case "$image" in | ||||
|     INDUCTOR_BENCHMARKS=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3.12-gcc9-inductor-benchmarks) | ||||
|     CUDA_VERSION=12.4.1 | ||||
|     CUDA_VERSION=12.4.0 | ||||
|     CUDNN_VERSION=9 | ||||
|     ANACONDA_PYTHON_VERSION=3.12 | ||||
|     GCC_VERSION=9 | ||||
| @ -194,7 +194,7 @@ case "$image" in | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9) | ||||
|     CUDA_VERSION=12.4.1 | ||||
|     CUDA_VERSION=12.4.0 | ||||
|     CUDNN_VERSION=9 | ||||
|     ANACONDA_PYTHON_VERSION=3.10 | ||||
|     GCC_VERSION=9 | ||||
| @ -222,7 +222,7 @@ case "$image" in | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-cuda12.4-cudnn9-py3-gcc9) | ||||
|     CUDA_VERSION=12.4.1 | ||||
|     CUDA_VERSION=12.4.0 | ||||
|     CUDNN_VERSION=9 | ||||
|     ANACONDA_PYTHON_VERSION=3.10 | ||||
|     GCC_VERSION=9 | ||||
| @ -236,7 +236,7 @@ case "$image" in | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-py3-clang10-onnx) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     CLANG_VERSION=10 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -245,7 +245,7 @@ case "$image" in | ||||
|     ONNX=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-py3-clang9-android-ndk-r21e) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     CLANG_VERSION=9 | ||||
|     LLVMDEV=yes | ||||
|     PROTOBUF=yes | ||||
| @ -254,8 +254,8 @@ case "$image" in | ||||
|     GRADLE_VERSION=6.8.3 | ||||
|     NINJA_VERSION=1.9.0 | ||||
|     ;; | ||||
|   pytorch-linux-focal-py3.9-clang10) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|   pytorch-linux-focal-py3.8-clang10) | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     CLANG_VERSION=10 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -276,8 +276,8 @@ case "$image" in | ||||
|     CONDA_CMAKE=yes | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-py3.9-gcc9) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|   pytorch-linux-focal-py3.8-gcc9) | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     GCC_VERSION=9 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -286,7 +286,18 @@ case "$image" in | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-rocm-n-1-py3) | ||||
|     ANACONDA_PYTHON_VERSION=3.10 | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     GCC_VERSION=9 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
|     VISION=yes | ||||
|     ROCM_VERSION=6.0 | ||||
|     NINJA_VERSION=1.9.0 | ||||
|     CONDA_CMAKE=yes | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-rocm-n-py3) | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     GCC_VERSION=9 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -296,19 +307,8 @@ case "$image" in | ||||
|     CONDA_CMAKE=yes | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-focal-rocm-n-py3) | ||||
|     ANACONDA_PYTHON_VERSION=3.10 | ||||
|     GCC_VERSION=9 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
|     VISION=yes | ||||
|     ROCM_VERSION=6.2 | ||||
|     NINJA_VERSION=1.9.0 | ||||
|     CONDA_CMAKE=yes | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|   pytorch-linux-jammy-xpu-2024.0-py3) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     GCC_VERSION=11 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -318,8 +318,8 @@ case "$image" in | ||||
|     CONDA_CMAKE=yes | ||||
|     TRITON=yes | ||||
|     ;; | ||||
|     pytorch-linux-jammy-py3.9-gcc11-inductor-benchmarks) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|     pytorch-linux-jammy-py3.8-gcc11-inductor-benchmarks) | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     GCC_VERSION=11 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -330,8 +330,8 @@ case "$image" in | ||||
|     DOCS=yes | ||||
|     INDUCTOR_BENCHMARKS=yes | ||||
|     ;; | ||||
|   pytorch-linux-jammy-cuda11.8-cudnn9-py3.9-clang12) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|   pytorch-linux-jammy-cuda11.8-cudnn9-py3.8-clang12) | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     CUDA_VERSION=11.8 | ||||
|     CUDNN_VERSION=9 | ||||
|     CLANG_VERSION=12 | ||||
| @ -355,8 +355,8 @@ case "$image" in | ||||
|     CONDA_CMAKE=yes | ||||
|     VISION=yes | ||||
|     ;; | ||||
|   pytorch-linux-jammy-py3.9-gcc11) | ||||
|     ANACONDA_PYTHON_VERSION=3.9 | ||||
|   pytorch-linux-jammy-py3.8-gcc11) | ||||
|     ANACONDA_PYTHON_VERSION=3.8 | ||||
|     GCC_VERSION=11 | ||||
|     PROTOBUF=yes | ||||
|     DB=yes | ||||
| @ -407,22 +407,6 @@ case "$image" in | ||||
|     # from pytorch/llvm:9.0.1 is x86 specific | ||||
|     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. | ||||
|     PROTOBUF=yes | ||||
|  | ||||
| @ -108,10 +108,10 @@ ENV CMAKE_C_COMPILER cc | ||||
| ENV CMAKE_CXX_COMPILER c++ | ||||
| COPY ./common/install_triton.sh install_triton.sh | ||||
| COPY ./common/common_utils.sh common_utils.sh | ||||
| COPY ci_commit_pins/triton.txt triton.txt | ||||
| COPY ci_commit_pins/triton-rocm.txt triton-rocm.txt | ||||
| COPY triton_version.txt triton_version.txt | ||||
| 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-rocm.txt triton_version.txt | ||||
|  | ||||
| # Install AOTriton (Early fail) | ||||
| COPY ./aotriton_version.txt aotriton_version.txt | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| cd1c833b079adb324871dcbbe75b43d42ffc0ade | ||||
| c572f9e509b5ec5d56f4d218271e36269bba244f | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| 461c12871f336fe6f57b55d6a297f13ef209161b | ||||
| 340136fec6d3ebc73e7a19eba1663e9b0ba8ab2d | ||||
| @ -1 +1 @@ | ||||
| ac3470188b914c5d7a5058a7e28b9eb685a62427 | ||||
| 730b907b4d45a4713cbc425cbf224c46089fd514 | ||||
|  | ||||
							
								
								
									
										1
									
								
								.ci/docker/ci_commit_pins/triton-rocm.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.ci/docker/ci_commit_pins/triton-rocm.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| 21eae954efa5bf584da70324b640288c3ee7aede | ||||
| @ -1 +1 @@ | ||||
| 91b14bf5593cf58a8541f3e6b9125600a867d4ef | ||||
| 1b2f15840e0d70eec50d84c7a0575cb835524def | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| 5fe38ffd73c2ac6ed6323b554205186696631c6f | ||||
| dedb7bdf339a3546896d4820366ca562c586bfa0 | ||||
|  | ||||
| @ -4,12 +4,12 @@ set -ex | ||||
|  | ||||
| source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh" | ||||
|  | ||||
| TARBALL='aotriton.tar.gz' | ||||
| TARBALL='aotriton.tar.bz2' | ||||
| # This read command alwasy returns with exit code 1 | ||||
| read -d "\n" VER MANYLINUX ROCMBASE PINNED_COMMIT SHA256 < aotriton_version.txt || true | ||||
| ARCH=$(uname -m) | ||||
| AOTRITON_INSTALL_PREFIX="$1" | ||||
| AOTRITON_URL="https://github.com/ROCm/aotriton/releases/download/${VER}/aotriton-${VER}-${MANYLINUX}_${ARCH}-${ROCMBASE}-shared.tar.gz" | ||||
| AOTRITON_URL="https://github.com/ROCm/aotriton/releases/download/${VER}/aotriton-${VER}-${MANYLINUX}_${ARCH}-${ROCMBASE}-shared.tar.bz2" | ||||
|  | ||||
| cd "${AOTRITON_INSTALL_PREFIX}" | ||||
| # Must use -L to follow redirects | ||||
|  | ||||
| @ -5,22 +5,32 @@ set -ex | ||||
| # Optionally install conda | ||||
| if [ -n "$ANACONDA_PYTHON_VERSION" ]; then | ||||
|   BASE_URL="https://repo.anaconda.com/miniconda" | ||||
|   CONDA_FILE="Miniconda3-latest-Linux-x86_64.sh" | ||||
|   if [[ $(uname -m) == "aarch64" ]] || [[ "$BUILD_ENVIRONMENT" == *xpu* ]]; then | ||||
|     BASE_URL="https://github.com/conda-forge/miniforge/releases/latest/download" | ||||
|     CONDA_FILE="Miniforge3-Linux-$(uname -m).sh" | ||||
|   fi | ||||
|  | ||||
|   MAJOR_PYTHON_VERSION=$(echo "$ANACONDA_PYTHON_VERSION" | cut -d . -f 1) | ||||
|   MINOR_PYTHON_VERSION=$(echo "$ANACONDA_PYTHON_VERSION" | cut -d . -f 2) | ||||
|  | ||||
| if [[ $(uname -m) == "aarch64" ]]; then | ||||
|   BASE_URL="https://github.com/conda-forge/miniforge/releases/latest/download" | ||||
|   case "$MAJOR_PYTHON_VERSION" in | ||||
|     3);; | ||||
|     3) | ||||
|       CONDA_FILE="Miniforge3-Linux-aarch64.sh" | ||||
|     ;; | ||||
|     *) | ||||
|       echo "Unsupported ANACONDA_PYTHON_VERSION: $ANACONDA_PYTHON_VERSION" | ||||
|       exit 1 | ||||
|       ;; | ||||
|   esac | ||||
| else | ||||
|   case "$MAJOR_PYTHON_VERSION" in | ||||
|     3) | ||||
|       CONDA_FILE="Miniconda3-latest-Linux-x86_64.sh" | ||||
|     ;; | ||||
|     *) | ||||
|       echo "Unsupported ANACONDA_PYTHON_VERSION: $ANACONDA_PYTHON_VERSION" | ||||
|       exit 1 | ||||
|       ;; | ||||
|   esac | ||||
| fi | ||||
|  | ||||
|   mkdir -p /opt/conda | ||||
|   chown jenkins:jenkins /opt/conda | ||||
| @ -68,20 +78,19 @@ if [ -n "$ANACONDA_PYTHON_VERSION" ]; then | ||||
|     CONDA_COMMON_DEPS="astunparse pyyaml setuptools openblas==0.3.25=*openmp* ninja==1.11.1 scons==4.5.2" | ||||
|  | ||||
|     if [ "$ANACONDA_PYTHON_VERSION" = "3.8" ]; then | ||||
|       NUMPY_VERSION=1.24.4 | ||||
|       conda_install numpy=1.24.4 ${CONDA_COMMON_DEPS} | ||||
|     else | ||||
|       NUMPY_VERSION=1.26.2 | ||||
|       conda_install numpy=1.26.2 ${CONDA_COMMON_DEPS} | ||||
|     fi | ||||
|   else | ||||
|     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 | ||||
|       NUMPY_VERSION=1.26.0 | ||||
|       conda_install numpy=1.26.0 ${CONDA_COMMON_DEPS} | ||||
|     else | ||||
|       NUMPY_VERSION=1.21.2 | ||||
|       conda_install numpy=1.21.2 ${CONDA_COMMON_DEPS} | ||||
|     fi | ||||
|   fi | ||||
|   conda_install ${CONDA_COMMON_DEPS} | ||||
|  | ||||
|   # Install llvm-8 as it is required to compile llvmlite-0.30.0 from source | ||||
|   # and libpython-static for torch deploy | ||||
| @ -103,7 +112,7 @@ if [ -n "$ANACONDA_PYTHON_VERSION" ]; then | ||||
|  | ||||
|   # Install some other packages, including those needed for Python test reporting | ||||
|   pip_install -r /opt/conda/requirements-ci.txt | ||||
|   pip_install numpy=="$NUMPY_VERSION" | ||||
|  | ||||
|   pip_install -U scikit-learn | ||||
|  | ||||
|   if [ -n "$DOCS" ]; then | ||||
|  | ||||
| @ -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,96 +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 | ||||
|     # install setuptools since python 3.12 is required to use distutils | ||||
|     ${prefix}/bin/pip install wheel==0.34.2 setuptools==68.2.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,250 +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_cusparselt_062 { | ||||
|     # 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.6.2.3-archive.tar.xz | ||||
|     tar xf libcusparse_lt-linux-x86_64-0.6.2.3-archive.tar.xz | ||||
|     cp -a libcusparse_lt-linux-x86_64-0.6.2.3-archive/include/* /usr/local/cuda/include/ | ||||
|     cp -a libcusparse_lt-linux-x86_64-0.6.2.3-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.1 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.1 in the same container | ||||
|   wget -q https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run | ||||
|   chmod +x cuda_12.4.1_550.54.15_linux.run | ||||
|   ./cuda_12.4.1_550.54.15_linux.run --toolkit --silent | ||||
|   rm -f cuda_12.4.1_550.54.15_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_062 | ||||
|  | ||||
|   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.1 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.1 in the same container | ||||
|   wget -q https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux_sbsa.run | ||||
|   chmod +x cuda_12.4.1_550.54.15_linux_sbsa.run | ||||
|   ./cuda_12.4.1_550.54.15_linux_sbsa.run --toolkit --silent | ||||
|   rm -f cuda_12.4.1_550.54.15_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,25 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| # cudss license: https://docs.nvidia.com/cuda/cudss/license.html | ||||
| mkdir tmp_cudss && cd tmp_cudss | ||||
|  | ||||
| if [[ ${CUDA_VERSION:0:4} =~ ^12\.[1-4]$ ]]; then | ||||
|     arch_path='sbsa' | ||||
|     export TARGETARCH=${TARGETARCH:-$(uname -m)} | ||||
|     if [ ${TARGETARCH} = 'amd64' ] || [ "${TARGETARCH}" = 'x86_64' ]; then | ||||
|         arch_path='x86_64' | ||||
|     fi | ||||
|     CUDSS_NAME="libcudss-linux-${arch_path}-0.3.0.9_cuda12-archive" | ||||
|     curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cudss/redist/libcudss/linux-${arch_path}/${CUDSS_NAME}.tar.xz | ||||
|  | ||||
|     # only for cuda 12 | ||||
|     tar xf ${CUDSS_NAME}.tar.xz | ||||
|     cp -a ${CUDSS_NAME}/include/* /usr/local/cuda/include/ | ||||
|     cp -a ${CUDSS_NAME}/lib/* /usr/local/cuda/lib64/ | ||||
| fi | ||||
|  | ||||
| cd .. | ||||
| rm -rf tmp_cudss | ||||
| ldconfig | ||||
| @ -5,15 +5,7 @@ set -ex | ||||
| # cuSPARSELt license: https://docs.nvidia.com/cuda/cusparselt/license.html | ||||
| mkdir tmp_cusparselt && cd tmp_cusparselt | ||||
|  | ||||
| if [[ ${CUDA_VERSION:0:4} =~ ^12\.[2-4]$ ]]; then | ||||
|     arch_path='sbsa' | ||||
|     export TARGETARCH=${TARGETARCH:-$(uname -m)} | ||||
|     if [ ${TARGETARCH} = 'amd64' ] || [ "${TARGETARCH}" = 'x86_64' ]; then | ||||
|         arch_path='x86_64' | ||||
|     fi | ||||
|     CUSPARSELT_NAME="libcusparse_lt-linux-${arch_path}-0.6.2.3-archive" | ||||
|     curl --retry 3 -OLs https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-${arch_path}/${CUSPARSELT_NAME}.tar.xz | ||||
| elif [[ ${CUDA_VERSION:0:4} == "12.1" ]]; then | ||||
| if [[ ${CUDA_VERSION:0:4} =~ ^12\.[1-4]$ ]]; then | ||||
|     arch_path='sbsa' | ||||
|     export TARGETARCH=${TARGETARCH:-$(uname -m)} | ||||
|     if [ ${TARGETARCH} = 'amd64' ] || [ "${TARGETARCH}" = 'x86_64' ]; then | ||||
|  | ||||
| @ -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,169 +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 | ||||
|  | ||||
| IS_UBUNTU=0 | ||||
| ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') | ||||
| case "$ID" in | ||||
|   ubuntu) | ||||
|     IS_UBUNTU=1 | ||||
|     ;; | ||||
|   centos) | ||||
|     IS_UBUNTU=0 | ||||
|     ;; | ||||
|   *) | ||||
|     echo "Unable to determine OS..." | ||||
|     exit 1 | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| # 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 60200 ]] && [[ $ROCM_INT -lt 60300 ]]; then | ||||
|     MIOPEN_BRANCH="release/rocm-rel-6.2-staging" | ||||
| elif [[ $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 | ||||
|  | ||||
|  | ||||
| if [[ ${IS_UBUNTU} == 1 ]]; then | ||||
|   apt-get remove -y miopen-hip | ||||
| else | ||||
|   yum remove -y miopen-hip | ||||
| fi | ||||
|  | ||||
| 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 CK to save docker build time | ||||
| if [[ $ROCM_INT -ge 60200 ]]; then | ||||
|     sed -i '/composable_kernel/d' requirements.txt | ||||
| fi | ||||
| # 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/* | ||||
| if [[ ${IS_UBUNTU} == 1 ]]; then | ||||
|   apt-get autoclean && apt-get clean | ||||
|   rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||||
| else | ||||
|   yum clean all | ||||
|   rm -rf /var/cache/yum | ||||
|   rm -rf /var/lib/yum/yumdb | ||||
|   rm -rf /var/lib/yum/history | ||||
| fi | ||||
|  | ||||
| ## 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 | ||||
|  | ||||
| if [[ ${IS_UBUNTU} == 1 ]]; then | ||||
|   sudo dpkg -i miopen-hip*.deb | ||||
| else | ||||
|   yum install -y miopen-*.rpm | ||||
| fi | ||||
|  | ||||
| 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 | ||||
| @ -1,20 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| function install_nvpl { | ||||
|  | ||||
|     mkdir -p /opt/nvpl/lib /opt/nvpl/include | ||||
|  | ||||
|     wget https://developer.download.nvidia.com/compute/nvpl/redist/nvpl_blas/linux-sbsa/nvpl_blas-linux-sbsa-0.3.0-archive.tar.xz | ||||
|     tar xf nvpl_blas-linux-sbsa-0.3.0-archive.tar.xz | ||||
|     cp -r nvpl_blas-linux-sbsa-0.3.0-archive/lib/* /opt/nvpl/lib/ | ||||
|     cp -r nvpl_blas-linux-sbsa-0.3.0-archive/include/* /opt/nvpl/include/ | ||||
|  | ||||
|     wget https://developer.download.nvidia.com/compute/nvpl/redist/nvpl_lapack/linux-sbsa/nvpl_lapack-linux-sbsa-0.2.3.1-archive.tar.xz | ||||
|     tar xf nvpl_lapack-linux-sbsa-0.2.3.1-archive.tar.xz | ||||
|     cp -r nvpl_lapack-linux-sbsa-0.2.3.1-archive/lib/* /opt/nvpl/lib/ | ||||
|     cp -r nvpl_lapack-linux-sbsa-0.2.3.1-archive/include/* /opt/nvpl/include/ | ||||
| } | ||||
|  | ||||
| install_nvpl | ||||
| @ -15,7 +15,7 @@ pip_install \ | ||||
|   flatbuffers==2.0 \ | ||||
|   mock==5.0.1 \ | ||||
|   ninja==1.10.2 \ | ||||
|   networkx==2.5 \ | ||||
|   networkx==2.0 \ | ||||
|   numpy==1.24.2 | ||||
|  | ||||
| # ONNXRuntime should be installed before installing | ||||
| @ -30,9 +30,10 @@ pip_install \ | ||||
|  | ||||
| pip_install coloredlogs packaging | ||||
|  | ||||
| pip_install onnxruntime==1.18.1 | ||||
| pip_install onnx==1.16.2 | ||||
| pip_install onnxscript==0.1.0.dev20240831 --no-deps | ||||
| pip_install onnxruntime==1.18 | ||||
| pip_install onnx==1.16.0 | ||||
| # pip_install "onnxscript@git+https://github.com/microsoft/onnxscript@3e869ef8ccf19b5ebd21c10d3e9c267c9a9fa729" --no-deps | ||||
| pip_install onnxscript==0.1.0.dev20240613 --no-deps | ||||
| # required by onnxscript | ||||
| pip_install ml_dtypes | ||||
|  | ||||
|  | ||||
| @ -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 | ||||
| # Script used in CI and CD pipeline | ||||
|  | ||||
| set -ex | ||||
|  | ||||
|  | ||||
| MKLROOT=${MKLROOT:-/opt/conda/envs/py_$ANACONDA_PYTHON_VERSION} | ||||
|  | ||||
| # "install" hipMAGMA into /opt/rocm/magma by copying after build | ||||
| git clone https://bitbucket.org/icl/magma.git | ||||
| pushd magma | ||||
| @ -15,10 +11,7 @@ git checkout a1625ff4d9bc362906bd01f805dbbe12612953f6 | ||||
|  | ||||
| cp make.inc-examples/make.inc.hip-gcc-mkl make.inc | ||||
| echo 'LIBDIR += -L$(MKLROOT)/lib' >> make.inc | ||||
| if [[ -f "${MKLROOT}/lib/libmkl_core.a" ]]; then | ||||
|     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 'LIB += -Wl,--enable-new-dtags -Wl,--rpath,/opt/rocm/lib -Wl,--rpath,$(MKLROOT)/lib -Wl,--rpath,/opt/rocm/magma/lib' >> make.inc | ||||
| echo 'DEVCCFLAGS += --gpu-max-threads-per-block=256' >> make.inc | ||||
| export PATH="${PATH}:/opt/rocm/bin" | ||||
| 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 | ||||
| sed -i 's/^FOPENMP/#FOPENMP/g' make.inc | ||||
| make -f make.gen.hipMAGMA -j $(nproc) | ||||
| LANG=C.UTF-8 make lib/libmagma.so -j $(nproc) MKLROOT="${MKLROOT}" | ||||
| make testing/testing_dgemm -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=/opt/conda/envs/py_$ANACONDA_PYTHON_VERSION | ||||
| popd | ||||
| mv magma /opt/rocm | ||||
|  | ||||
| @ -12,7 +12,10 @@ conda_reinstall() { | ||||
|   as_jenkins conda install -q -n py_$ANACONDA_PYTHON_VERSION -y --force-reinstall $* | ||||
| } | ||||
|  | ||||
| if [ -n "${XPU_VERSION}" ]; then | ||||
| if [ -n "${ROCM_VERSION}" ]; then | ||||
|   TRITON_REPO="https://github.com/openai/triton" | ||||
|   TRITON_TEXT_FILE="triton-rocm" | ||||
| elif [ -n "${XPU_VERSION}" ]; then | ||||
|   TRITON_REPO="https://github.com/intel/intel-xpu-backend-for-triton" | ||||
|   TRITON_TEXT_FILE="triton-xpu" | ||||
| else | ||||
| @ -38,33 +41,19 @@ if [ -z "${MAX_JOBS}" ]; then | ||||
|     export MAX_JOBS=$(nproc) | ||||
| fi | ||||
|  | ||||
| # Git checkout triton | ||||
| mkdir /var/lib/jenkins/triton | ||||
| chown -R jenkins /var/lib/jenkins/triton | ||||
| chgrp -R jenkins /var/lib/jenkins/triton | ||||
| pushd /var/lib/jenkins/ | ||||
|  | ||||
| as_jenkins git clone ${TRITON_REPO} triton | ||||
| cd triton | ||||
| as_jenkins git checkout ${TRITON_PINNED_COMMIT} | ||||
| cd python | ||||
|  | ||||
| # TODO: remove patch setup.py once we have a proper fix for https://github.com/triton-lang/triton/issues/4527 | ||||
| as_jenkins sed -i -e 's/https:\/\/tritonlang.blob.core.windows.net\/llvm-builds/https:\/\/oaitriton.blob.core.windows.net\/public\/llvm-builds/g' setup.py | ||||
|  | ||||
| if [ -n "${UBUNTU_VERSION}" ] && [ -n "${GCC_VERSION}" ] && [[ "${GCC_VERSION}" == "7" ]]; then | ||||
|   # Triton needs at least gcc-9 to build | ||||
|   apt-get install -y g++-9 | ||||
|  | ||||
|   CXX=g++-9 pip_install -e . | ||||
|   CXX=g++-9 pip_install "git+${TRITON_REPO}@${TRITON_PINNED_COMMIT}#subdirectory=python" | ||||
| elif [ -n "${UBUNTU_VERSION}" ] && [ -n "${CLANG_VERSION}" ]; then | ||||
|   # Triton needs <filesystem> which surprisingly is not available with clang-9 toolchain | ||||
|   add-apt-repository -y ppa:ubuntu-toolchain-r/test | ||||
|   apt-get install -y g++-9 | ||||
|  | ||||
|   CXX=g++-9 pip_install -e . | ||||
|   CXX=g++-9 pip_install "git+${TRITON_REPO}@${TRITON_PINNED_COMMIT}#subdirectory=python" | ||||
| else | ||||
|   pip_install -e . | ||||
|   pip_install "git+${TRITON_REPO}@${TRITON_PINNED_COMMIT}#subdirectory=python" | ||||
| fi | ||||
|  | ||||
| if [ -n "${CONDA_CMAKE}" ]; then | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| #!/bin/bash | ||||
| set -xe | ||||
| # Script used in CI and CD pipeline | ||||
|  | ||||
|  | ||||
| # 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 | ||||
| @ -8,23 +8,19 @@ set -xe | ||||
| # Users should update to the latest version as it becomes available | ||||
|  | ||||
| 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 install -y gpg-agent wget | ||||
|     # To add the online network package repository for the GPU Driver | ||||
|  | ||||
|     # Set up the repository. To do this, download the key to the system keyring | ||||
|     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] \ | ||||
|         https://repositories.intel.com/gpu/ubuntu ${VERSION_CODENAME}${XPU_DRIVER_VERSION} unified" \ | ||||
|         | tee /etc/apt/sources.list.d/intel-gpu-${VERSION_CODENAME}.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 | ||||
|         https://repositories.intel.com/gpu/ubuntu jammy/lts/2350 unified" \ | ||||
|         | tee /etc/apt/sources.list.d/intel-gpu-jammy.list | ||||
|     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" \ | ||||
|         | tee /etc/apt/sources.list.d/intel-for-pytorch-gpu-dev.list | ||||
| @ -45,9 +41,9 @@ function install_ubuntu() { | ||||
|     apt-get install -y libigc-dev intel-igc-cm libigdfcl-dev libigfxcmrt-dev level-zero-dev | ||||
|     # Install Intel Support Packages | ||||
|     if [ -n "$XPU_VERSION" ]; then | ||||
|         apt-get install -y intel-for-pytorch-gpu-dev-${XPU_VERSION} intel-pti-dev | ||||
|         apt-get install -y intel-for-pytorch-gpu-dev-${XPU_VERSION} | ||||
|     else | ||||
|         apt-get install -y intel-for-pytorch-gpu-dev intel-pti-dev | ||||
|         apt-get install -y intel-for-pytorch-gpu-dev | ||||
|     fi | ||||
|  | ||||
|     # Cleanup | ||||
| @ -55,49 +51,44 @@ function install_ubuntu() { | ||||
|     rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||||
| } | ||||
|  | ||||
| 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 | ||||
|  | ||||
| function install_centos() { | ||||
|     dnf install -y 'dnf-command(config-manager)' | ||||
|     # To add the online network package repository for the GPU Driver | ||||
|     dnf config-manager --add-repo \ | ||||
|         https://repositories.intel.com/gpu/rhel/${VERSION_ID}${XPU_DRIVER_VERSION}/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 | ||||
|         https://repositories.intel.com/gpu/rhel/8.6/production/2328/unified/intel-gpu-8.6.repo | ||||
|     # To add the EPEL repository needed for DKMS | ||||
|     dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm | ||||
|         # https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm | ||||
|  | ||||
|     # Create the YUM repository file in the /temp directory as a normal user | ||||
|     tee > /tmp/oneAPI.repo << EOF | ||||
| [oneAPI] | ||||
| name=Intel® oneAPI repository | ||||
| baseurl=https://yum.repos.intel.com/oneapi | ||||
| enabled=1 | ||||
| gpgcheck=1 | ||||
| repo_gpgcheck=1 | ||||
| gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | ||||
| EOF | ||||
|  | ||||
|     # Move the newly created oneAPI.repo file to the YUM configuration directory /etc/yum.repos.d | ||||
|     mv /tmp/oneAPI.repo /etc/yum.repos.d | ||||
|  | ||||
|     # The xpu-smi packages | ||||
|     dnf install -y xpu-smi | ||||
|     dnf install -y flex bison xpu-smi | ||||
|     # Compute and Media Runtimes | ||||
|     dnf install --skip-broken -y \ | ||||
|     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 | ||||
|         libva libva-utils intel-gmmlib libmetee intel-gsc intel-ocloc hwinfo clinfo | ||||
|     # 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 | ||||
|     # Install Intel® oneAPI Base Toolkit | ||||
|     dnf install intel-basekit -y | ||||
|  | ||||
|     # Cleanup | ||||
|     dnf clean all | ||||
| @ -106,41 +97,6 @@ EOF | ||||
|     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 | ||||
|     zypper addrepo -f -r \ | ||||
|         https://repositories.intel.com/gpu/sles/${VERSION_SP}${XPU_DRIVER_VERSION}/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 | ||||
|  | ||||
| } | ||||
|  | ||||
| # Default use GPU driver LTS releases | ||||
| XPU_DRIVER_VERSION="/lts/2350" | ||||
| if [[ "${XPU_DRIVER_TYPE,,}" == "rolling" ]]; then | ||||
|     # Use GPU driver rolling releases | ||||
|     XPU_DRIVER_VERSION="" | ||||
| fi | ||||
|  | ||||
| # The installation depends on the base OS | ||||
| ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') | ||||
| @ -148,11 +104,8 @@ case "$ID" in | ||||
|     ubuntu) | ||||
|         install_ubuntu | ||||
|     ;; | ||||
|     rhel|almalinux) | ||||
|         install_rhel | ||||
|     ;; | ||||
|     sles) | ||||
|         install_sles | ||||
|     centos) | ||||
|         install_centos | ||||
|     ;; | ||||
|     *) | ||||
|         echo "Unable to determine OS..." | ||||
|  | ||||
| @ -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 ./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 | ||||
| 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 | ||||
| ENV DESIRED_CUDA ${CUDA_VERSION} | ||||
| 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 ./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,157 +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 | ||||
| # XPU CD use rolling driver | ||||
| ENV XPU_DRIVER_TYPE ROLLING | ||||
| # cmake-3.28.4 from pip | ||||
| RUN python3 -m pip install --upgrade pip && \ | ||||
|     python3 -mpip install cmake==3.28.4 | ||||
| # Install setuptools and wheel for python 3.13 | ||||
| RUN /opt/python/cp313-cp313/bin/python -m pip install setuptools wheel | ||||
| 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 nvpl | ||||
| # Install nvpl | ||||
| ADD ./common/install_nvpl.sh install_nvpl.sh | ||||
| RUN bash ./install_nvpl.sh && rm install_nvpl.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=nvpl /opt/nvpl/lib/  /usr/local/lib/ | ||||
| COPY --from=nvpl /opt/nvpl/include/  /usr/local/include/ | ||||
| RUN ln -sf /usr/local/cuda-${BASE_CUDA_VERSION} /usr/local/cuda | ||||
| ENV PATH=/usr/local/cuda/bin:$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="2.5" | ||||
| 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.") | ||||
| @ -30,14 +30,9 @@ dill==0.3.7 | ||||
| #Pinned versions: 0.3.7 | ||||
| #test that import: dynamo/test_replay_record.py test_dataloader.py test_datapipe.py test_serialization.py | ||||
|  | ||||
| expecttest==0.2.1 | ||||
| expecttest==0.1.6 | ||||
| #Description: method for writing tests where test framework auto populates | ||||
| # the expected output based on previous runs | ||||
| #Pinned versions: 0.2.1 | ||||
| #test that import: | ||||
|  | ||||
| fbscribelogger==0.1.6 | ||||
| #Description: write to scribe from authenticated jobs on CI | ||||
| #Pinned versions: 0.1.6 | ||||
| #test that import: | ||||
|  | ||||
| @ -109,7 +104,7 @@ networkx==2.8.8 | ||||
| #test that import: run_test.py, test_cpp_extensions_aot.py,test_determination.py | ||||
|  | ||||
| numba==0.49.0 ; python_version < "3.9" | ||||
| numba==0.55.2 ; python_version == "3.9" | ||||
| numba==0.54.1 ; python_version == "3.9" | ||||
| numba==0.55.2 ; python_version == "3.10" | ||||
| #Description: Just-In-Time Compiler for Numerical Functions | ||||
| #Pinned versions: 0.54.1, 0.49.0, <=0.49.1 | ||||
| @ -139,9 +134,9 @@ opt-einsum==3.3 | ||||
| #Pinned versions: 3.3 | ||||
| #test that import: test_linalg.py | ||||
|  | ||||
| optree==0.12.1 | ||||
| optree==0.11.0 | ||||
| #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_pytree.py, test_ops.py, test_control_flow.py, test_modules.py, | ||||
| #common_utils.py, test_eager_transforms.py, test_python_dispatch.py, | ||||
| @ -223,7 +218,7 @@ pygments==2.15.0 | ||||
| #test that import: | ||||
|  | ||||
| scikit-image==0.19.3 ; python_version < "3.10" | ||||
| scikit-image==0.22.0 ; python_version >= "3.10" | ||||
| scikit-image==0.20.0 ; python_version >= "3.10" | ||||
| #Description: image processing routines | ||||
| #Pinned versions: | ||||
| #test that import: test_nn.py | ||||
| @ -274,10 +269,6 @@ lintrunner==0.12.5 | ||||
| #Pinned versions: 0.12.5 | ||||
| #test that import: | ||||
|  | ||||
| redis>=4.0.0 | ||||
| #Description: redis database | ||||
| #test that import: anything that tests OSS caching/mocking (inductor/test_codecache.py, inductor/test_max_autotune.py) | ||||
|  | ||||
| rockset==1.0.3 | ||||
| #Description: queries Rockset | ||||
| #Pinned versions: 1.0.3 | ||||
| @ -321,19 +312,3 @@ lxml==5.0.0 | ||||
| # Python-3.9 binaries | ||||
|  | ||||
| PyGithub==2.3.0 | ||||
|  | ||||
| sympy==1.12.1 ; python_version == "3.8" | ||||
| sympy==1.13.1 ; python_version >= "3.9" | ||||
| #Description: Required by coremltools, also pinned in .github/requirements/pip-requirements-macOS.txt | ||||
| #Pinned versions: | ||||
| #test that import: | ||||
|  | ||||
| onnx==1.16.1 | ||||
| #Description: Required by mypy and test_public_bindings.py when checking torch.onnx._internal | ||||
| #Pinned versions: | ||||
| #test that import: | ||||
|  | ||||
| onnxscript==0.1.0.dev20240817 | ||||
| #Description: Required by mypy and test_public_bindings.py when checking torch.onnx._internal | ||||
| #Pinned versions: | ||||
| #test that import: | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| 3.1.0 | ||||
| 3.0.0 | ||||
|  | ||||
| @ -156,12 +156,6 @@ COPY ./common/install_cusparselt.sh install_cusparselt.sh | ||||
| RUN bash install_cusparselt.sh | ||||
| RUN rm install_cusparselt.sh | ||||
|  | ||||
| # Install CUDSS | ||||
| ARG CUDA_VERSION | ||||
| COPY ./common/install_cudss.sh install_cudss.sh | ||||
| RUN bash install_cudss.sh | ||||
| RUN rm install_cudss.sh | ||||
|  | ||||
| # Delete /usr/local/cuda-11.X/cuda-11.X symlinks | ||||
| RUN if [ -h /usr/local/cuda-11.6/cuda-11.6 ]; then rm /usr/local/cuda-11.6/cuda-11.6; fi | ||||
| RUN if [ -h /usr/local/cuda-11.7/cuda-11.7 ]; then rm /usr/local/cuda-11.7/cuda-11.7; fi | ||||
|  | ||||
| @ -68,8 +68,6 @@ RUN rm install_rocm.sh | ||||
| COPY ./common/install_rocm_magma.sh install_rocm_magma.sh | ||||
| RUN bash ./install_rocm_magma.sh | ||||
| RUN rm install_rocm_magma.sh | ||||
| ADD ./common/install_miopen.sh install_miopen.sh | ||||
| RUN bash ./install_miopen.sh ${ROCM_VERSION} && rm install_miopen.sh | ||||
| ENV ROCM_PATH /opt/rocm | ||||
| ENV PATH /opt/rocm/bin:$PATH | ||||
| ENV PATH /opt/rocm/hcc/bin:$PATH | ||||
| @ -102,10 +100,10 @@ ARG TRITON | ||||
| # try to reach out to S3, which docker build runners don't have access | ||||
| COPY ./common/install_triton.sh install_triton.sh | ||||
| COPY ./common/common_utils.sh common_utils.sh | ||||
| COPY ci_commit_pins/triton.txt triton.txt | ||||
| COPY ci_commit_pins/triton-rocm.txt triton-rocm.txt | ||||
| COPY triton_version.txt triton_version.txt | ||||
| 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-rocm.txt triton_version.txt | ||||
|  | ||||
| # Install AOTriton | ||||
| COPY ./aotriton_version.txt aotriton_version.txt | ||||
| @ -123,8 +121,5 @@ RUN bash ./install_cache.sh && rm install_cache.sh | ||||
| ARG BUILD_ENVIRONMENT | ||||
| ENV BUILD_ENVIRONMENT ${BUILD_ENVIRONMENT} | ||||
|  | ||||
| # Install LLVM dev version (Defined in the pytorch/builder github repository) | ||||
| COPY --from=pytorch/llvm:9.0.1 /opt/llvm /opt/llvm | ||||
|  | ||||
| USER jenkins | ||||
| CMD ["bash"] | ||||
|  | ||||
| @ -30,7 +30,6 @@ RUN bash ./install_docs_reqs.sh && rm install_docs_reqs.sh | ||||
| ARG ANACONDA_PYTHON_VERSION | ||||
| ARG CONDA_CMAKE | ||||
| ARG DOCS | ||||
| ARG BUILD_ENVIRONMENT | ||||
| ENV ANACONDA_PYTHON_VERSION=$ANACONDA_PYTHON_VERSION | ||||
| ENV PATH /opt/conda/envs/py_$ANACONDA_PYTHON_VERSION/bin:/opt/conda/bin:$PATH | ||||
| ENV DOCS=$DOCS | ||||
|  | ||||
| @ -50,7 +50,7 @@ RUN  bash ./install_lcov.sh && rm install_lcov.sh | ||||
|  | ||||
| # Install cuda and cudnn | ||||
| 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 | ||||
| ENV DESIRED_CUDA ${CUDA_VERSION} | ||||
| ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH | ||||
|  | ||||
| @ -1 +1,42 @@ | ||||
| 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. | ||||
|  | ||||
| @ -49,8 +49,13 @@ if [[ ${BUILD_ENVIRONMENT} == *"parallelnative"* ]]; then | ||||
| fi | ||||
|  | ||||
| # Enable LLVM dependency for TensorExpr testing | ||||
| export USE_LLVM=/opt/llvm | ||||
| export LLVM_DIR=/opt/llvm/lib/cmake/llvm | ||||
| if [[ "$BUILD_ENVIRONMENT" == *rocm* ]]; then | ||||
|   export USE_LLVM=/opt/rocm/llvm | ||||
|   export LLVM_DIR=/opt/rocm/llvm/lib/cmake/llvm | ||||
| else | ||||
|   export USE_LLVM=/opt/llvm | ||||
|   export LLVM_DIR=/opt/llvm/lib/cmake/llvm | ||||
| fi | ||||
|  | ||||
| if [[ "$BUILD_ENVIRONMENT" == *executorch* ]]; then | ||||
|   # To build test_edge_op_registration | ||||
| @ -171,8 +176,7 @@ fi | ||||
| if [[ "$BUILD_ENVIRONMENT" == *xpu* ]]; then | ||||
|   # shellcheck disable=SC1091 | ||||
|   source /opt/intel/oneapi/compiler/latest/env/vars.sh | ||||
|   # XPU kineto feature dependencies are not fully ready, disable kineto build as temp WA | ||||
|   export USE_KINETO=0 | ||||
|   export USE_XPU=1 | ||||
| fi | ||||
|  | ||||
| # sccache will fail for CUDA builds if all cores are used for compiling | ||||
| @ -280,8 +284,9 @@ else | ||||
|     if [[ "$BUILD_ENVIRONMENT" != *rocm*  && | ||||
|           "$BUILD_ENVIRONMENT" != *xla* ]]; then | ||||
|       if [[ "$BUILD_ENVIRONMENT" != *py3.8* ]]; then | ||||
|         # Install numpy-2.0.2 for builds which are backward compatible with 1.X | ||||
|         python -mpip install --pre numpy==2.0.2 | ||||
|         # Install numpy-2.0 release candidate for builds | ||||
|         # Which should be backward compatible with Numpy-1.X | ||||
|         python -mpip install --pre numpy==2.0.0rc1 | ||||
|       fi | ||||
|  | ||||
|       WERROR=1 python setup.py clean | ||||
|  | ||||
| @ -179,7 +179,7 @@ function install_torchvision() { | ||||
| } | ||||
|  | ||||
| function install_tlparse() { | ||||
|   pip_install --user "tlparse==0.3.25" | ||||
|   pip_install --user "tlparse==0.3.7" | ||||
|   PATH="$(python -m site --user-base)/bin:$PATH" | ||||
| } | ||||
|  | ||||
| @ -198,7 +198,7 @@ function install_torchrec_and_fbgemm() { | ||||
|  | ||||
| function clone_pytorch_xla() { | ||||
|   if [[ ! -d ./xla ]]; then | ||||
|     git clone --recursive -b r2.5 https://github.com/pytorch/xla.git | ||||
|     git clone --recursive --quiet https://github.com/pytorch/xla.git | ||||
|     pushd xla | ||||
|     # pin the xla hash so that we don't get broken by changes to xla | ||||
|     git checkout "$(cat ../.github/ci_commit_pins/xla.txt)" | ||||
|  | ||||
| @ -44,15 +44,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 | ||||
|  | ||||
| # 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_random_state | ||||
|  | ||||
| # FSDP2 tests | ||||
| 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 | ||||
| time python test/run_test.py --verbose -i distributed/_composable/test_composability/test_2d_composability | ||||
| time python test/run_test.py --verbose -i distributed/_composable/test_composability/test_pp_composability | ||||
| # Pipelining composability tests | ||||
| time python test/run_test.py --verbose -i distributed/pipelining/test_composability.py | ||||
|  | ||||
| # Other tests | ||||
| time python test/run_test.py --verbose -i test_cuda_primary_ctx | ||||
|  | ||||
| @ -6,9 +6,6 @@ | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| # Suppress ANSI color escape sequences | ||||
| export TERM=vt100 | ||||
|  | ||||
| # shellcheck source=./common.sh | ||||
| source "$(dirname "${BASH_SOURCE[0]}")/common.sh" | ||||
|  | ||||
| @ -169,7 +166,7 @@ fi | ||||
|  | ||||
| if [[ "$BUILD_ENVIRONMENT" == *xpu* ]]; then | ||||
|   # Source Intel oneAPI envrioment script to enable xpu runtime related libraries | ||||
|   # refer to https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu/2-5.html | ||||
|   # refer to https://www.intel.com/content/www/us/en/docs/oneapi/programming-guide/2024-0/use-the-setvars-and-oneapi-vars-scripts-with-linux.html | ||||
|   # shellcheck disable=SC1091 | ||||
|   source /opt/intel/oneapi/compiler/latest/env/vars.sh | ||||
|   # Check XPU status before testing | ||||
| @ -319,14 +316,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 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/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_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_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_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_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_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 | ||||
| @ -361,12 +358,10 @@ test_inductor_shard() { | ||||
| test_inductor_aoti() { | ||||
|   # docker build uses bdist_wheel which does not work with test_aot_inductor | ||||
|   # TODO: need a faster way to build | ||||
|   if [[ "$BUILD_ENVIRONMENT" == *rocm* ]]; then | ||||
|     # We need to hipify before building again | ||||
|     python3 tools/amd_build/build_amd.py | ||||
|   if [[ "$BUILD_ENVIRONMENT" != *rocm* ]]; then | ||||
|     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 | ||||
|   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() { | ||||
| @ -395,22 +390,7 @@ test_inductor_cpp_wrapper_abi_compatible() { | ||||
| # .github/workflows/inductor-perf-test-nightly.yml | ||||
| DYNAMO_BENCHMARK_FLAGS=() | ||||
|  | ||||
| pr_time_benchmarks() { | ||||
|  | ||||
|   pip_install --user "fbscribelogger" | ||||
|  | ||||
|   TEST_REPORTS_DIR=$(pwd)/test/test-reports | ||||
|   mkdir -p "$TEST_REPORTS_DIR" | ||||
|   PYTHONPATH=$(pwd)/benchmarks/dynamo/pr_time_benchmarks source benchmarks/dynamo/pr_time_benchmarks/benchmark_runner.sh "$TEST_REPORTS_DIR/pr_time_benchmarks_after.txt" "benchmarks/dynamo/pr_time_benchmarks/benchmarks" | ||||
|   echo "benchmark results on current PR: " | ||||
|   cat  "$TEST_REPORTS_DIR/pr_time_benchmarks_after.txt" | ||||
|  | ||||
| } | ||||
|  | ||||
| if [[ "${TEST_CONFIG}" == *pr_time_benchmarks* ]]; then | ||||
|   pr_time_benchmarks | ||||
|   exit 0 | ||||
| elif [[ "${TEST_CONFIG}" == *dynamo_eager* ]]; then | ||||
| if [[ "${TEST_CONFIG}" == *dynamo_eager* ]]; then | ||||
|   DYNAMO_BENCHMARK_FLAGS+=(--backend eager) | ||||
| elif [[ "${TEST_CONFIG}" == *aot_eager* ]]; then | ||||
|   DYNAMO_BENCHMARK_FLAGS+=(--backend aot_eager) | ||||
| @ -424,7 +404,7 @@ if [[ "${TEST_CONFIG}" == *dynamic* ]]; then | ||||
|   DYNAMO_BENCHMARK_FLAGS+=(--dynamic-shapes --dynamic-batch-only) | ||||
| fi | ||||
|  | ||||
| if [[ "${TEST_CONFIG}" == *cpu* ]]; then | ||||
| if [[ "${TEST_CONFIG}" == *cpu_inductor* || "${TEST_CONFIG}" == *cpu_aot_inductor* ]]; then | ||||
|   DYNAMO_BENCHMARK_FLAGS+=(--device cpu) | ||||
| else | ||||
|   DYNAMO_BENCHMARK_FLAGS+=(--device cuda) | ||||
| @ -448,18 +428,6 @@ test_perf_for_dashboard() { | ||||
|   # TODO: All the accuracy tests can be skipped once the CI accuracy checking is stable enough | ||||
|   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 | ||||
|     if [[ "$mode" == "inference" ]]; then | ||||
|       dtype=bfloat16 | ||||
| @ -475,62 +443,56 @@ test_perf_for_dashboard() { | ||||
|       fi | ||||
|  | ||||
|       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 "$@" \ | ||||
|             --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 | ||||
|       if [[ "$DASHBOARD_TAG" == *cudagraphs-true* ]]; then | ||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ | ||||
|         python "benchmarks/dynamo/$suite.py" \ | ||||
|             "${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 | ||||
|       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 \ | ||||
|             --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 | ||||
|       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 "$@" \ | ||||
|             --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 | ||||
|       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 \ | ||||
|             --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 | ||||
|       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 \ | ||||
|             --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 | ||||
|       if [[ "$DASHBOARD_TAG" == *aotinductor-true* ]] && [[ "$mode" == "inference" ]]; then | ||||
|         if [[ "$target" == "accuracy" ]]; then | ||||
|           # Also collect Export pass rate and display as a separate row | ||||
|           $TASKSET python "benchmarks/dynamo/$suite.py" \ | ||||
|               "${target_flag[@]}" --"$mode" --"$dtype" --export --disable-cudagraphs "$@" \ | ||||
|               --output "$TEST_REPORTS_DIR/${backend}_export_${suite}_${dtype}_${mode}_${device}_${target}.csv" | ||||
|         fi | ||||
|         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 "$@" \ | ||||
|             --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 | ||||
|       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" "$@" \ | ||||
|             --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 | ||||
|       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. | ||||
|         # 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. | ||||
|         $TASKSET python "benchmarks/dynamo/$suite.py" \ | ||||
|         python "benchmarks/dynamo/$suite.py" \ | ||||
|           "${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? | ||||
|         cp "$TEST_REPORTS_DIR/${backend}_with_cudagraphs_${suite}_${dtype}_${mode}_${device}_${target}.csv" \ | ||||
|           "$TEST_REPORTS_DIR/${backend}_cudagraphs_low_precision_${suite}_quant_${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}_cuda_${target}.csv" | ||||
|       fi | ||||
|     done | ||||
|   done | ||||
| @ -573,13 +535,6 @@ test_single_dynamo_benchmark() { | ||||
|       # For CPU device, we perfer non ABI-compatible mode on CI when testing AOTInductor. | ||||
|       export TORCHINDUCTOR_ABI_COMPATIBLE=1 | ||||
|     fi | ||||
|  | ||||
|     if [[ "${TEST_CONFIG}" == *_avx2* ]]; then | ||||
|       TEST_CONFIG=${TEST_CONFIG//_avx2/} | ||||
|     fi | ||||
|     if [[ "${TEST_CONFIG}" == *_avx512* ]]; then | ||||
|       TEST_CONFIG=${TEST_CONFIG//_avx512/} | ||||
|     fi | ||||
|     python "benchmarks/dynamo/$suite.py" \ | ||||
|       --ci --accuracy --timing --explain \ | ||||
|       "${DYNAMO_BENCHMARK_FLAGS[@]}" \ | ||||
| @ -596,9 +551,6 @@ test_single_dynamo_benchmark() { | ||||
|  | ||||
| test_inductor_micro_benchmark() { | ||||
|   TEST_REPORTS_DIR=$(pwd)/test/test-reports | ||||
|   if [[ "${TEST_CONFIG}" == *cpu* ]]; then | ||||
|     test_inductor_set_cpu_affinity | ||||
|   fi | ||||
|   python benchmarks/gpt_fast/benchmark.py --output "${TEST_REPORTS_DIR}/gpt_fast_benchmark.csv" | ||||
| } | ||||
|  | ||||
| @ -621,7 +573,7 @@ test_dynamo_benchmark() { | ||||
|   elif [[ "${TEST_CONFIG}" == *perf* ]]; then | ||||
|     test_single_dynamo_benchmark "dashboard" "$suite" "$shard_id" "$@" | ||||
|   else | ||||
|     if [[ "${TEST_CONFIG}" == *cpu* ]]; then | ||||
|     if [[ "${TEST_CONFIG}" == *cpu_inductor* || "${TEST_CONFIG}" == *cpu_aot_inductor* ]]; then | ||||
|       local dt="float32" | ||||
|       if [[ "${TEST_CONFIG}" == *amp* ]]; then | ||||
|         dt="amp" | ||||
| @ -668,7 +620,8 @@ test_inductor_torchbench_smoketest_perf() { | ||||
|   # 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, | ||||
|   # we switch to use some other model. | ||||
|   python benchmarks/dynamo/check_perf_csv.py -f "$TEST_REPORTS_DIR/inductor_inference_smoketest.csv" -t 4.9 | ||||
|   # lowering threshold from 4.9 to 4.7 for cu124. Will bump it up after cuda 12.4.0->12.4.1 update | ||||
|   python benchmarks/dynamo/check_perf_csv.py -f "$TEST_REPORTS_DIR/inductor_inference_smoketest.csv" -t 4.7 | ||||
|  | ||||
|   # Check memory compression ratio for a few models | ||||
|   for test in hf_Albert timm_vision_transformer; do | ||||
| @ -691,77 +644,48 @@ test_inductor_torchbench_smoketest_perf() { | ||||
|   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)" | ||||
|   export LD_PRELOAD="$JEMALLOC_LIB":"$LD_PRELOAD" | ||||
|   export MALLOC_CONF="oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:-1,muzzy_decay_ms:-1" | ||||
|  | ||||
|   if [[ "${TEST_CONFIG}" != *aarch64* ]]; then | ||||
|     # Use Intel OpenMP for x86 | ||||
|     IOMP_LIB="$(dirname "$(which python)")/../lib/libiomp5.so" | ||||
|     export LD_PRELOAD="$IOMP_LIB":"$LD_PRELOAD" | ||||
|     export KMP_AFFINITY=granularity=fine,compact,1,0 | ||||
|     export KMP_BLOCKTIME=1 | ||||
|   fi | ||||
|   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_REPORTS_DIR=$(pwd)/test/test-reports | ||||
|   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 | ||||
|  | ||||
|   grep -v '^ *#' < "$MODELS_SPEEDUP_TARGET" | while IFS=',' read -r -a model_cfg | ||||
|   do | ||||
|     local model_name=${model_cfg[0]} | ||||
|     local data_type=${model_cfg[2]} | ||||
|     local speedup_target=${model_cfg[5]} | ||||
|     local backend=${model_cfg[1]} | ||||
|     if [[ ${model_cfg[4]} == "cpp" ]]; then | ||||
|     local data_type=${model_cfg[1]} | ||||
|     local speedup_target=${model_cfg[4]} | ||||
|     if [[ ${model_cfg[3]} == "cpp" ]]; then | ||||
|       export TORCHINDUCTOR_CPP_WRAPPER=1 | ||||
|     else | ||||
|       unset TORCHINDUCTOR_CPP_WRAPPER | ||||
|     fi | ||||
|     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 | ||||
|       $TASKSET python benchmarks/dynamo/torchbench.py \ | ||||
|     if [[ ${model_cfg[2]} == "dynamic" ]]; then | ||||
|       taskset -c 0-"$end_core" python benchmarks/dynamo/torchbench.py \ | ||||
|         --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 | ||||
|       $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" \ | ||||
|         --freezing --timeout 9000 --"$backend" --output "$output_name" | ||||
|         --freezing --timeout 9000 --backend=inductor --output "$output_name" | ||||
|     fi | ||||
|     cat "$output_name" | ||||
|     # 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" | ||||
|   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(){ | ||||
| @ -1075,113 +999,11 @@ test_xla() { | ||||
|   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. | ||||
| # Because this function uninstalls the torch built from branch and installs | ||||
| # the torch built on its base commit. | ||||
| test_forward_backward_compatibility() { | ||||
|   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) | ||||
|   if [[ "${BASE_SHA}" == "${SHA1}" ]]; then | ||||
|     echo "On trunk, we should compare schemas with torch built from the parent commit" | ||||
| @ -1407,7 +1229,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__.parallel_info())") | ||||
| fi | ||||
| if [[ "${BUILD_ENVIRONMENT}" == *aarch64* && "${TEST_CONFIG}" != *perf_cpu_aarch64* ]]; then | ||||
| if [[ "$BUILD_ENVIRONMENT" == *aarch64* ]]; then | ||||
|   test_linux_aarch64 | ||||
| elif [[ "${TEST_CONFIG}" == *backward* ]]; then | ||||
|   test_forward_backward_compatibility | ||||
| @ -1444,7 +1266,7 @@ elif [[ "${TEST_CONFIG}" == *timm* ]]; then | ||||
|   id=$((SHARD_NUMBER-1)) | ||||
|   test_dynamo_benchmark timm_models "$id" | ||||
| elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | ||||
|   if [[ "${TEST_CONFIG}" == *cpu* ]]; then | ||||
|   if [[ "${TEST_CONFIG}" == *cpu_inductor* || "${TEST_CONFIG}" == *cpu_aot_inductor* ]]; then | ||||
|     install_torchaudio cpu | ||||
|   else | ||||
|     install_torchaudio cuda | ||||
| @ -1459,9 +1281,9 @@ elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | ||||
|     checkout_install_torchbench hf_Bert hf_Albert nanogpt timm_vision_transformer | ||||
|     PYTHONPATH=$(pwd)/torchbench test_inductor_torchbench_smoketest_perf | ||||
|   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 \ | ||||
|       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 | ||||
|   elif [[ "${TEST_CONFIG}" == *torchbench_gcp_smoketest* ]]; then | ||||
|     checkout_install_torchbench | ||||
| @ -1470,7 +1292,7 @@ elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then | ||||
|     checkout_install_torchbench | ||||
|     # Do this after checkout_install_torchbench to ensure we clobber any | ||||
|     # nightlies that torchbench may pull in | ||||
|     if [[ "${TEST_CONFIG}" != *cpu* ]]; then | ||||
|     if [[ "${TEST_CONFIG}" != *cpu_inductor* && "${TEST_CONFIG}" != *cpu_aot_inductor* ]]; then | ||||
|       install_torchrec_and_fbgemm | ||||
|     fi | ||||
|     PYTHONPATH=$(pwd)/torchbench test_dynamo_benchmark torchbench "$id" | ||||
| @ -1482,9 +1304,8 @@ elif [[ "${TEST_CONFIG}" == *inductor* ]]; then | ||||
|   install_torchvision | ||||
|   test_inductor_shard "${SHARD_NUMBER}" | ||||
|   if [[ "${SHARD_NUMBER}" == 1 ]]; then | ||||
|     if [[ "${BUILD_ENVIRONMENT}" != linux-jammy-py3.9-gcc11-build ]]; then | ||||
|       test_inductor_distributed | ||||
|     fi | ||||
|     test_inductor_aoti | ||||
|     test_inductor_distributed | ||||
|   fi | ||||
| elif [[ "${TEST_CONFIG}" == *dynamo* ]]; then | ||||
|   install_torchvision | ||||
|  | ||||
| @ -24,12 +24,6 @@ call %INSTALLER_DIR%\install_sccache.bat | ||||
| if errorlevel 1 goto fail | ||||
| if not errorlevel 0 goto fail | ||||
|  | ||||
| if "%USE_XPU%"=="1" ( | ||||
|   :: Install xpu support packages | ||||
|   call %INSTALLER_DIR%\install_xpu.bat | ||||
|   if errorlevel 1 exit /b 1 | ||||
| ) | ||||
|  | ||||
| :: Miniconda has been installed as part of the Windows AMI with all the dependencies. | ||||
| :: We just need to activate it here | ||||
| call %INSTALLER_DIR%\activate_miniconda3.bat | ||||
| @ -49,16 +43,6 @@ if "%VC_VERSION%" == "" ( | ||||
| ) | ||||
| if errorlevel 1 goto fail | ||||
| if not errorlevel 0 goto fail | ||||
|  | ||||
| if "%USE_XPU%"=="1" ( | ||||
|   :: Activate xpu environment - VS env is required for xpu | ||||
|   call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" | ||||
|   if errorlevel 1 exit /b 1 | ||||
|   :: Reduce build time. Only have MTL self-hosted runner now | ||||
|   SET TORCH_XPU_ARCH_LIST=xe-lpg | ||||
|   SET USE_KINETO=0 | ||||
| ) | ||||
|  | ||||
| @echo on | ||||
| popd | ||||
|  | ||||
| @ -81,6 +65,13 @@ set CUDA_PATH_V%VERSION_SUFFIX%=%CUDA_PATH% | ||||
| set CUDNN_LIB_DIR=%CUDA_PATH%\lib\x64 | ||||
| set CUDA_TOOLKIT_ROOT_DIR=%CUDA_PATH% | ||||
| set CUDNN_ROOT_DIR=%CUDA_PATH% | ||||
| set NVTOOLSEXT_PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt | ||||
| set PATH=%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%PATH% | ||||
|  | ||||
| set CUDNN_LIB_DIR=%CUDA_PATH%\lib\x64 | ||||
| set CUDA_TOOLKIT_ROOT_DIR=%CUDA_PATH% | ||||
| set CUDNN_ROOT_DIR=%CUDA_PATH% | ||||
| set NVTOOLSEXT_PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt | ||||
| set PATH=%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%PATH% | ||||
|  | ||||
| :cuda_build_end | ||||
|  | ||||
| @ -1,91 +0,0 @@ | ||||
| @echo on | ||||
| REM Description: Install Intel Support Packages on Windows | ||||
| REM BKM reference: https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu/2-5.html | ||||
|  | ||||
| set XPU_INSTALL_MODE=%~1 | ||||
| if "%XPU_INSTALL_MODE%"=="" goto xpu_bundle_install_start | ||||
| if "%XPU_INSTALL_MODE%"=="bundle" goto xpu_bundle_install_start | ||||
| if "%XPU_INSTALL_MODE%"=="driver" goto xpu_driver_install_start | ||||
| if "%XPU_INSTALL_MODE%"=="all" goto xpu_driver_install_start | ||||
|  | ||||
| :arg_error | ||||
|  | ||||
| echo Illegal XPU installation mode. The value can be "bundle"/"driver"/"all" | ||||
| echo If keep the value as space, will use default "bundle" mode | ||||
| exit /b 1 | ||||
|  | ||||
| :xpu_driver_install_start | ||||
| :: TODO Need more testing for driver installation | ||||
| set XPU_DRIVER_LINK=https://downloadmirror.intel.com/830975/gfx_win_101.5972.exe | ||||
| curl -o xpu_driver.exe --retry 3 --retry-all-errors -k %XPU_DRIVER_LINK% | ||||
| echo "XPU Driver installing..." | ||||
| start /wait "Intel XPU Driver Installer" "xpu_driver.exe" | ||||
| if errorlevel 1 exit /b 1 | ||||
| del xpu_driver.exe | ||||
| if "%XPU_INSTALL_MODE%"=="driver" goto xpu_install_end | ||||
|  | ||||
| :xpu_bundle_install_start | ||||
|  | ||||
| set XPU_BUNDLE_PARENT_DIR=C:\Program Files (x86)\Intel\oneAPI | ||||
| set XPU_BUNDLE_URL=https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9d1a91e2-e8b8-40a5-8c7f-5db768a6a60c/w_intel-for-pytorch-gpu-dev_p_0.5.3.37_offline.exe | ||||
| set XPU_PTI_URL=https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9d1a91e2-e8b8-40a5-8c7f-5db768a6a60c/w_intel-pti-dev_p_0.9.0.37_offline.exe | ||||
| set XPU_BUNDLE_VERSION=0.5.3+31 | ||||
| set XPU_PTI_VERSION=0.9.0+36 | ||||
| set XPU_BUNDLE_PRODUCT_NAME=intel.oneapi.win.intel-for-pytorch-gpu-dev.product | ||||
| set XPU_PTI_PRODUCT_NAME=intel.oneapi.win.intel-pti-dev.product | ||||
| set XPU_BUNDLE_INSTALLED=0 | ||||
| set XPU_PTI_INSTALLED=0 | ||||
| set XPU_BUNDLE_UNINSTALL=0 | ||||
| set XPU_PTI_UNINSTALL=0 | ||||
|  | ||||
| :: Check if XPU bundle is target version or already installed | ||||
| if exist "%XPU_BUNDLE_PARENT_DIR%\Installer\installer.exe" goto xpu_bundle_ver_check | ||||
| goto xpu_bundle_install | ||||
|  | ||||
| :xpu_bundle_ver_check | ||||
|  | ||||
| "%XPU_BUNDLE_PARENT_DIR%\Installer\installer.exe" --list-products > xpu_bundle_installed_ver.log | ||||
|  | ||||
| for /f "tokens=1,2" %%a in (xpu_bundle_installed_ver.log) do ( | ||||
|     if "%%a"=="%XPU_BUNDLE_PRODUCT_NAME%" ( | ||||
|         echo %%a Installed Version: %%b | ||||
|         set XPU_BUNDLE_INSTALLED=1 | ||||
|         if not "%XPU_BUNDLE_VERSION%"=="%%b" ( | ||||
|             start /wait "Installer Title" "%XPU_BUNDLE_PARENT_DIR%\Installer\installer.exe" --action=remove --eula=accept --silent --product-id %XPU_BUNDLE_PRODUCT_NAME% --product-ver %%b --log-dir uninstall_bundle | ||||
|             set XPU_BUNDLE_UNINSTALL=1 | ||||
|         ) | ||||
|     ) | ||||
|     if "%%a"=="%XPU_PTI_PRODUCT_NAME%" ( | ||||
|         echo %%a Installed Version: %%b | ||||
|         set XPU_PTI_INSTALLED=1 | ||||
|         if not "%XPU_PTI_VERSION%"=="%%b" ( | ||||
|             start /wait "Installer Title" "%XPU_BUNDLE_PARENT_DIR%\Installer\installer.exe" --action=remove --eula=accept --silent --product-id %XPU_PTI_PRODUCT_NAME% --product-ver %%b --log-dir uninstall_bundle | ||||
|             set XPU_PTI_UNINSTALL=1 | ||||
|         ) | ||||
|     ) | ||||
| ) | ||||
| if errorlevel 1 exit /b 1 | ||||
| if exist xpu_bundle_installed_ver.log del xpu_bundle_installed_ver.log | ||||
| if "%XPU_BUNDLE_INSTALLED%"=="0" goto xpu_bundle_install | ||||
| if "%XPU_BUNDLE_UNINSTALL%"=="1" goto xpu_bundle_install | ||||
| if "%XPU_PTI_INSTALLED%"=="0" goto xpu_pti_install | ||||
| if "%XPU_PTI_UNINSTALL%"=="1" goto xpu_pti_install | ||||
| goto xpu_install_end | ||||
|  | ||||
| :xpu_bundle_install | ||||
|  | ||||
| curl -o xpu_bundle.exe --retry 3 --retry-all-errors -k %XPU_BUNDLE_URL% | ||||
| echo "XPU Bundle installing..." | ||||
| start /wait "Intel Pytorch Bundle Installer" "xpu_bundle.exe" --action=install --eula=accept --silent --log-dir install_bundle | ||||
| if errorlevel 1 exit /b 1 | ||||
| del xpu_bundle.exe | ||||
|  | ||||
| :xpu_pti_install | ||||
|  | ||||
| curl -o xpu_pti.exe --retry 3 --retry-all-errors -k %XPU_PTI_URL% | ||||
| echo "XPU PTI installing..." | ||||
| start /wait "Intel PTI Installer" "xpu_pti.exe" --action=install --eula=accept --silent --log-dir install_bundle | ||||
| if errorlevel 1 exit /b 1 | ||||
| del xpu_pti.exe | ||||
|  | ||||
| :xpu_install_end | ||||
| @ -40,6 +40,7 @@ set CUDA_PATH_V%VERSION_SUFFIX%=%CUDA_PATH% | ||||
| set CUDNN_LIB_DIR=%CUDA_PATH%\lib\x64 | ||||
| set CUDA_TOOLKIT_ROOT_DIR=%CUDA_PATH% | ||||
| set CUDNN_ROOT_DIR=%CUDA_PATH% | ||||
| set NVTOOLSEXT_PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt | ||||
| set PATH=%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%PATH% | ||||
| set NUMBAPRO_CUDALIB=%CUDA_PATH%\bin | ||||
| set NUMBAPRO_LIBDEVICE=%CUDA_PATH%\nvvm\libdevice | ||||
|  | ||||
| @ -31,6 +31,6 @@ if ERRORLEVEL 1 exit /b 1 | ||||
|  | ||||
| :: Run tests C++-side and load the exported script module. | ||||
| cd build | ||||
| set PATH=%TMP_DIR_WIN%\build\torch\lib;%PATH% | ||||
| set PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt\bin\x64;%TMP_DIR_WIN%\build\torch\lib;%PATH% | ||||
| test_custom_backend.exe model.pt | ||||
| if ERRORLEVEL 1 exit /b 1 | ||||
|  | ||||
| @ -31,6 +31,6 @@ if ERRORLEVEL 1 exit /b 1 | ||||
|  | ||||
| :: Run tests C++-side and load the exported script module. | ||||
| cd build | ||||
| set PATH=%TMP_DIR_WIN%\build\torch\lib;%PATH% | ||||
| set PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt\bin\x64;%TMP_DIR_WIN%\build\torch\lib;%PATH% | ||||
| test_custom_ops.exe model.pt | ||||
| if ERRORLEVEL 1 exit /b 1 | ||||
|  | ||||
| @ -5,7 +5,7 @@ if errorlevel 1 exit /b 1 | ||||
| set CWD=%cd% | ||||
|  | ||||
| set CPP_TESTS_DIR=%TMP_DIR_WIN%\build\torch\bin | ||||
| set PATH=%TMP_DIR_WIN%\build\torch\lib;%PATH% | ||||
| set PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt\bin\x64;%TMP_DIR_WIN%\build\torch\lib;%PATH% | ||||
|  | ||||
| set TORCH_CPP_TEST_MNIST_PATH=%CWD%\test\cpp\api\mnist | ||||
| python tools\download_mnist.py --quiet -d %TORCH_CPP_TEST_MNIST_PATH% | ||||
|  | ||||
| @ -40,9 +40,6 @@ python -m pip install pytest-rerunfailures==10.3 pytest-cpp==2.3.0 tensorboard== | ||||
| # Install Z3 optional dependency for Windows builds. | ||||
| python -m pip install z3-solver==4.12.2.0 | ||||
|  | ||||
| # Install tlparse for test\dynamo\test_structured_trace.py UTs. | ||||
| python -m pip install tlparse==0.3.25 | ||||
|  | ||||
| run_tests() { | ||||
|     # Run nvidia-smi if available | ||||
|     for path in '/c/Program Files/NVIDIA Corporation/NVSMI/nvidia-smi.exe' /c/Windows/System32/nvidia-smi.exe; do | ||||
|  | ||||
| @ -46,12 +46,14 @@ if [[ "\$python_nodot" = *310* ]]; then | ||||
|   PROTOBUF_PACKAGE="protobuf>=3.19.0" | ||||
| 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 | ||||
|   # we set a lower boundary here just to be safe | ||||
|   NUMPY_PIN=">=1.20" | ||||
| fi | ||||
|  | ||||
|  | ||||
|  | ||||
| # Move debug wheels out of the package dir so they don't get installed | ||||
| mkdir -p /tmp/debug_final_pkgs | ||||
| 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}" \ | ||||
|       mkl>=2018 \ | ||||
|       ninja \ | ||||
|       sympy>=1.12 \ | ||||
|       sympy \ | ||||
|       typing-extensions \ | ||||
|       ${PROTOBUF_PACKAGE} | ||||
|     if [[ "$DESIRED_CUDA" == 'cpu' ]]; then | ||||
| @ -116,14 +118,15 @@ if [[ "$PACKAGE_TYPE" == libtorch ]]; then | ||||
|   cd /tmp/libtorch | ||||
| 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 | ||||
| /builder/check_binary.sh | ||||
|  | ||||
| if [[ "\$GPU_ARCH_TYPE" != *s390x* && "\$GPU_ARCH_TYPE" != *xpu* && "\$GPU_ARCH_TYPE" != *rocm*  && "$PACKAGE_TYPE" != libtorch ]]; then | ||||
|   # Exclude s390, xpu, rocm and libtorch builds from smoke testing | ||||
|   python /builder/test/smoke_test/smoke_test.py --package=torchonly --torch-compile-check disabled | ||||
| fi | ||||
|  | ||||
| # Clean temp files | ||||
| cd /builder && git clean -ffdx | ||||
|  | ||||
|  | ||||
| @ -90,7 +90,7 @@ fi | ||||
| if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*rocm.* && $(uname) == "Linux" ]]; then | ||||
|     TRITON_REQUIREMENT="pytorch-triton-rocm==${TRITON_VERSION}; ${TRITON_CONSTRAINT}" | ||||
|     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-rocm.txt) | ||||
|         TRITON_REQUIREMENT="pytorch-triton-rocm==${TRITON_VERSION}+${TRITON_SHORTHASH}; ${TRITON_CONSTRAINT}" | ||||
|     fi | ||||
|     if [[ -z "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then | ||||
| @ -102,10 +102,10 @@ fi | ||||
|  | ||||
| # Set triton via PYTORCH_EXTRA_INSTALL_REQUIREMENTS for triton xpu package | ||||
| if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*xpu.* && $(uname) == "Linux" ]]; then | ||||
|     TRITON_REQUIREMENT="pytorch-triton-xpu==${TRITON_VERSION}; ${TRITON_CONSTRAINT}" | ||||
|     TRITON_REQUIREMENT="pytorch-triton-xpu==${TRITON_VERSION}" | ||||
|     if [[ -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_BUILD_VERSION" =~ .*dev.* ]]; then | ||||
|         TRITON_SHORTHASH=$(cut -c1-10 $PYTORCH_ROOT/.ci/docker/ci_commit_pins/triton-xpu.txt) | ||||
|         TRITON_REQUIREMENT="pytorch-triton-xpu==${TRITON_VERSION}+${TRITON_SHORTHASH}; ${TRITON_CONSTRAINT}" | ||||
|         TRITON_REQUIREMENT="pytorch-triton-xpu==${TRITON_VERSION}+${TRITON_SHORTHASH}" | ||||
|     fi | ||||
|     if [[ -z "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then | ||||
|         export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${TRITON_REQUIREMENT}" | ||||
|  | ||||
| @ -10,11 +10,6 @@ export SCCACHE_BUCKET=ossci-compiler-cache | ||||
| export SCCACHE_IGNORE_SERVER_IO_ERROR=1 | ||||
| export VC_YEAR=2019 | ||||
|  | ||||
| if [[ "$DESIRED_CUDA" == 'xpu' ]]; then | ||||
|     export VC_YEAR=2022 | ||||
|     export USE_SCCACHE=0 | ||||
| fi | ||||
|  | ||||
| echo "Free space on filesystem before build:" | ||||
| df -h | ||||
|  | ||||
|  | ||||
| @ -6,10 +6,6 @@ source "${BINARY_ENV_FILE:-/c/w/env}" | ||||
| export CUDA_VERSION="${DESIRED_CUDA/cu/}" | ||||
| export VC_YEAR=2019 | ||||
|  | ||||
| if [[ "$DESIRED_CUDA" == 'xpu' ]]; then | ||||
|     export VC_YEAR=2022 | ||||
| fi | ||||
|  | ||||
| pushd "$BUILDER_ROOT" | ||||
|  | ||||
| ./windows/internal/smoke_test.bat | ||||
|  | ||||
| @ -5,7 +5,7 @@ git submodule sync | ||||
| git submodule update --init --recursive | ||||
|  | ||||
| # This takes some time | ||||
| make setup-lint | ||||
| make setup_lint | ||||
|  | ||||
| # Add CMAKE_PREFIX_PATH to bashrc | ||||
| echo 'export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}' >> ~/.bashrc | ||||
|  | ||||
							
								
								
									
										5
									
								
								.flake8
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								.flake8
									
									
									
									
									
								
							| @ -7,7 +7,7 @@ max-line-length = 120 | ||||
| # C408 ignored because we like the dict keyword argument syntax | ||||
| # E501 is not flexible enough, we're using B950 instead | ||||
| 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 | ||||
|     # to line this up with executable bit | ||||
|     EXE001, | ||||
| @ -55,9 +55,6 @@ per-file-ignores = | ||||
|     torch/distributed/_functional_collectives.py: TOR901 | ||||
|     torch/distributed/_spmd/data_parallel.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/_aten_impl.py: TOR901 | ||||
| optional-ascii-coding = True | ||||
| exclude = | ||||
|     ./.git, | ||||
|  | ||||
							
								
								
									
										38
									
								
								.github/actionlint.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								.github/actionlint.yaml
									
									
									
									
										vendored
									
									
								
							| @ -3,25 +3,20 @@ self-hosted-runner: | ||||
|     # GitHub hosted x86 Linux runners | ||||
|     - linux.20_04.4x | ||||
|     - linux.20_04.16x | ||||
|     # Repo-specific LF hosted ARC runners | ||||
|     - linux.large.arc | ||||
|     # Organization-wide AWS Linux Runners | ||||
|     - linux.large | ||||
|     - linux.2xlarge | ||||
|     - linux.4xlarge | ||||
|     - linux.9xlarge.ephemeral | ||||
|     - am2.linux.9xlarge.ephemeral | ||||
|     - linux.12xlarge | ||||
|     - linux.12xlarge.ephemeral | ||||
|     - linux.24xlarge | ||||
|     - linux.24xlarge.ephemeral | ||||
|     - linux.arm64.2xlarge | ||||
|     - linux.arm64.2xlarge.ephemeral | ||||
|     - linux.arm64.m7g.4xlarge | ||||
|     - linux.arm64.m7g.4xlarge.ephemeral | ||||
|     - linux.4xlarge.nvidia.gpu | ||||
|     - linux.8xlarge.nvidia.gpu | ||||
|     - linux.16xlarge.nvidia.gpu | ||||
|     - linux.g5.4xlarge.nvidia.gpu | ||||
|     # Pytorch/pytorch AWS Linux Runners on Linux Foundation account | ||||
|     # Organization-wide AWS Linux Runners on Linux Foundation account | ||||
|     - lf.linux.large | ||||
|     - lf.linux.2xlarge | ||||
|     - lf.linux.4xlarge | ||||
| @ -32,36 +27,9 @@ self-hosted-runner: | ||||
|     - 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.arm64.m7g.4xlarge.ephemeral | ||||
|     - 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 | ||||
|     - linux.s390x | ||||
|     # Organization wide AWS Windows runners | ||||
|     - windows.g4dn.xlarge | ||||
|     - windows.g4dn.xlarge.nonephemeral | ||||
|     - windows.4xlarge | ||||
|     - windows.4xlarge.nonephemeral | ||||
|     - windows.8xlarge.nvidia.gpu | ||||
|     - windows.8xlarge.nvidia.gpu.nonephemeral | ||||
|  | ||||
| @ -41,9 +41,6 @@ outputs: | ||||
|   ci-verbose-test-logs: | ||||
|     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 }} | ||||
|   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: | ||||
|     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 }} | ||||
| @ -57,7 +54,7 @@ outputs: | ||||
| runs: | ||||
|   using: composite | ||||
|   steps: | ||||
|     - uses: nick-fields/retry@v3.0.0 | ||||
|     - uses: nick-fields/retry@3e91a01664abd3c5cd539100d10d33b9c5b68482 | ||||
|       name: Setup dependencies | ||||
|       env: | ||||
|         GITHUB_TOKEN: ${{ inputs.github-token }} | ||||
|  | ||||
							
								
								
									
										226
									
								
								.github/actions/linux-build/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								.github/actions/linux-build/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,226 @@ | ||||
| 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: "" | ||||
|   use_split_build: | ||||
|     description: | | ||||
|       [Experimental] Build a libtorch only wheel and build pytorch such that | ||||
|       are built from the libtorch wheel. | ||||
|     required: false | ||||
|     type: boolean | ||||
|     default: false | ||||
| 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 }} | ||||
|         USE_SPLIT_BUILD: ${{ inputs.use_split_build }} | ||||
|       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 \ | ||||
|           -e USE_SPLIT_BUILD \ | ||||
|           --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' && inputs.use_split_build != 'true' | ||||
|       with: | ||||
|         name: ${{ inputs.build-environment }} | ||||
|         retention-days: 14 | ||||
|         if-no-files-found: error | ||||
|         path: artifacts.zip | ||||
|         s3-bucket: ${{ inputs.s3-bucket }} | ||||
|  | ||||
|     - name: Store PyTorch Build Artifacts on S3 for split build | ||||
|       uses: seemethere/upload-artifact-s3@v5 | ||||
|       if: inputs.build-generates-artifacts == 'true' && steps.build.outcome != 'skipped' && inputs.use_split_build == 'true' | ||||
|       with: | ||||
|         name: ${{ inputs.build-environment }}-experimental-split-build | ||||
|         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 }} | ||||
|         CONTINUE_THROUGH_ERROR: ${{ steps.keep-going.outputs.keep-going }} | ||||
|         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_TD: ${{ steps.keep-going.outputs.ci-no-td }} | ||||
|         TD_DISTRIBUTED: ${{ steps.keep-going.outputs.ci-td-distributed }} | ||||
|  | ||||
| @ -17,7 +17,7 @@ inputs: | ||||
| runs: | ||||
|   using: composite | ||||
|   steps: | ||||
|     - uses: nick-fields/retry@v3.0.0 | ||||
|     - uses: nick-fields/retry@3e91a01664abd3c5cd539100d10d33b9c5b68482 | ||||
|       name: Setup dependencies | ||||
|       with: | ||||
|         shell: bash | ||||
|  | ||||
| @ -24,7 +24,7 @@ inputs: | ||||
| runs: | ||||
|   using: composite | ||||
|   steps: | ||||
|     - uses: nick-fields/retry@v3.0.0 | ||||
|     - uses: nick-fields/retry@3e91a01664abd3c5cd539100d10d33b9c5b68482 | ||||
|       name: Setup dependencies | ||||
|       with: | ||||
|         shell: bash | ||||
|  | ||||
							
								
								
									
										9
									
								
								.github/actions/setup-linux/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/actions/setup-linux/action.yml
									
									
									
									
										vendored
									
									
								
							| @ -44,7 +44,7 @@ runs: | ||||
|         fi | ||||
|  | ||||
|     - name: Log in to ECR | ||||
|       uses: nick-fields/retry@v3.0.0 | ||||
|       uses: nick-fields/retry@3e91a01664abd3c5cd539100d10d33b9c5b68482 | ||||
|       env: | ||||
|         AWS_RETRY_MODE: standard | ||||
|         AWS_MAX_ATTEMPTS: "5" | ||||
| @ -59,13 +59,6 @@ runs: | ||||
|           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" | ||||
|  | ||||
|           # 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 | ||||
|       shell: bash | ||||
|       run: | | ||||
|  | ||||
							
								
								
									
										2
									
								
								.github/actions/teardown-win/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/actions/teardown-win/action.yml
									
									
									
									
										vendored
									
									
								
							| @ -31,7 +31,7 @@ runs: | ||||
|     # retry this step several time similar to how checkout-pytorch GHA does | ||||
|     - name: Cleanup workspace | ||||
|       if: always() | ||||
|       uses: nick-fields/retry@v3.0.0 | ||||
|       uses: nick-fields/retry@v2.8.2 | ||||
|       env: | ||||
|         EXTRA_DELETE_DIR: ${{ inputs.extra-delete-dir }} | ||||
|       with: | ||||
|  | ||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/audio.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/audio.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | ||||
| 97ed7b36b7a741253d4e41e4da3c901d83294503 | ||||
| 69b2a0adc2ec03ab99990d7e8be3d4510438c148 | ||||
|  | ||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | ||||
| r2.5 | ||||
| 6f0b61e5d782913a0fc7743812f2a8e522189111 | ||||
|  | ||||
							
								
								
									
										39
									
								
								.github/label_to_label.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/label_to_label.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,50 +1,13 @@ | ||||
| # Use this to auto apply labels based on other labels.  Applies to both PRs and | ||||
| # issues. Currently only supports any and all | ||||
| - any: | ||||
|   - "module: opcheck" | ||||
|   then: | ||||
|   - "module: custom-operators" | ||||
| - any: | ||||
|   - "module: custom-operators" | ||||
|   - "module: functionalization" | ||||
|   - "module: custom operators" | ||||
|   - "module: aotdispatch" | ||||
|   - "module: higher order operators" | ||||
|   - "module: fakeTensor" | ||||
|   - "module: ProxyTensor" | ||||
|   - "module: library" | ||||
|   - "module: reinplacing" | ||||
|   then: | ||||
|   - "module: pt2-dispatcher" | ||||
| - any: | ||||
|   - "module: vmap" | ||||
|   then: | ||||
|   - "module: functorch" | ||||
| - any: | ||||
|   - "module: reinplacing" | ||||
|   then: | ||||
|   - "module: inductor" | ||||
| - any: | ||||
|   - "module: pt2 optimizer" | ||||
|   then: | ||||
|   - "module: dynamo" | ||||
| - any: | ||||
|   - "module: flex attention" | ||||
|   then: | ||||
|   - "module: higher order operators" | ||||
| - any: | ||||
|   - "module: aotinductor" | ||||
|   then: | ||||
|   - "oncall: export" | ||||
| - any: | ||||
|   - "module: dynamo" | ||||
|   - "module: pt2-dispatcher" | ||||
|   - "module: inductor" | ||||
|   - "module: aotinductor" | ||||
|   - "module: cudagraphs" | ||||
|   - "oncall: export" | ||||
|   - "module: startup-tracing-compile" | ||||
|   - "module: compiled autograd" | ||||
|   - "module: flex attention" | ||||
|   - "module: dynamic shapes" | ||||
|   then: | ||||
|   - "oncall: pt2" | ||||
|  | ||||
							
								
								
									
										1
									
								
								.github/labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/labeler.yml
									
									
									
									
										vendored
									
									
								
							| @ -29,6 +29,7 @@ | ||||
| - torch/fx/experimental/recording.py | ||||
| - torch/fx/experimental/sym_node.py | ||||
| - torch/fx/experimental/validator.py | ||||
| - torch/fx/experimental/_sym_dispatch_mode.py | ||||
| - torch/fx/experimental/proxy_tensor.py | ||||
| - test/distributed/_tensor/test_dtensor_compile.py | ||||
| - test/distributed/tensor/parallel/test_fsdp_2d_parallel.py | ||||
|  | ||||
							
								
								
									
										255
									
								
								.github/lf-canary-scale-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										255
									
								
								.github/lf-canary-scale-config.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,23 +1,13 @@ | ||||
|  | ||||
| # This file is generated by .github/scripts/validate_scale_config.py in test-infra | ||||
| # 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. | ||||
| # Defines runner types that will be provisioned by by LF Self-hosted | ||||
| # runners for pytorch/pytorch-canary and their labels. | ||||
| # | ||||
| # 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 | ||||
| #                     to avoid RequestLimitExceeded issues | ||||
| # | ||||
| # TODO: Add some documentation on how the auto-scaling works | ||||
| # | ||||
| # NOTE: Default values, | ||||
| # Default values: | ||||
| # | ||||
| # runner_types: | ||||
| #   runner_label: | ||||
| #   runner_label: # label to specify in the Github Actions workflow | ||||
| #     instance_type: m4.large | ||||
| #     os: linux | ||||
| #     max_available: 20 | ||||
| @ -31,312 +21,107 @@ runner_types: | ||||
|     is_ephemeral: false | ||||
|     max_available: 1000 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.10xlarge.avx2: | ||||
|     disk_size: 200 | ||||
|     instance_type: m4.10xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 450 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.24xl.spr-metal: | ||||
|     disk_size: 200 | ||||
|     instance_type: c7i.metal-24xl | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.16xlarge.spr: | ||||
|     disk_size: 200 | ||||
|     instance_type: c7i.16xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.9xlarge.ephemeral: | ||||
|     disk_size: 200 | ||||
|     instance_type: c5.9xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 50 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.12xlarge.ephemeral: | ||||
|     disk_size: 200 | ||||
|     instance_type: c5.12xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 300 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.16xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g3.16xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.24xlarge: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.24xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 500 | ||||
|     max_available: 250 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.24xlarge.ephemeral: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.24xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.2xlarge: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.2xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 3120 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.4xlarge: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 1000 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.4xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g3.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 1000 | ||||
|     max_available: 520 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.8xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g3.8xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 400 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.g4dn.12xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g4dn.12xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 250 | ||||
|     max_available: 50 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.g4dn.metal.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g4dn.metal | ||||
|     is_ephemeral: false | ||||
|     max_available: 300 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.g5.48xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g5.48xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 200 | ||||
|     max_available: 20 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.g5.12xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g5.12xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.g5.4xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g5.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 2400 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.g6.4xlarge.experimental.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g6.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 50 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.large: | ||||
|     max_available: 1200 | ||||
|     os: linux | ||||
|   lf.c.linux.large: | ||||
|     disk_size: 15 | ||||
|     instance_type: c5.large | ||||
|     is_ephemeral: false | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.c.linux.arm64.2xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: t4g.2xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.c.linux.arm64.m7g.4xlarge: | ||||
|   lf.c.linux.arm64.m7g.2xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: m7g.4xlarge | ||||
|     instance_type: m7g.2xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 200 | ||||
|     max_available: 20 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.c.linux.arm64.2xlarge.ephemeral: | ||||
|     disk_size: 256 | ||||
|     instance_type: t4g.2xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.c.linux.arm64.m7g.4xlarge.ephemeral: | ||||
|     disk_size: 256 | ||||
|     instance_type: m7g.4xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.c.linux.arm64.m7g.metal: | ||||
|     disk_size: 256 | ||||
|     instance_type: m7g.metal | ||||
|     is_ephemeral: false | ||||
|     max_available: 100 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.c.windows.g4dn.xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: g4dn.xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 100 | ||||
|     os: windows | ||||
|   lf.c.windows.g4dn.xlarge.nonephemeral: | ||||
|     disk_size: 256 | ||||
|     instance_type: g4dn.xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 100 | ||||
|     os: windows | ||||
|   lf.c.windows.4xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: c5d.4xlarge | ||||
| @ -353,7 +138,7 @@ runner_types: | ||||
|     disk_size: 256 | ||||
|     instance_type: p3.2xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 300 | ||||
|     max_available: 150 | ||||
|     os: windows | ||||
|   lf.c.windows.8xlarge.nvidia.gpu.nonephemeral: | ||||
|     disk_size: 256 | ||||
|  | ||||
							
								
								
									
										255
									
								
								.github/lf-scale-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										255
									
								
								.github/lf-scale-config.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,23 +1,13 @@ | ||||
|  | ||||
| # This file is generated by .github/scripts/validate_scale_config.py in test-infra | ||||
| # 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. | ||||
| # Defines runner types that will be provisioned by by LF Self-hosted | ||||
| # runners for pytorch/pytorch and their labels. | ||||
| # | ||||
| # 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 | ||||
| #                     to avoid RequestLimitExceeded issues | ||||
| # | ||||
| # TODO: Add some documentation on how the auto-scaling works | ||||
| # | ||||
| # NOTE: Default values, | ||||
| # Default values: | ||||
| # | ||||
| # runner_types: | ||||
| #   runner_label: | ||||
| #   runner_label: # label to specify in the Github Actions workflow | ||||
| #     instance_type: m4.large | ||||
| #     os: linux | ||||
| #     max_available: 20 | ||||
| @ -31,312 +21,107 @@ runner_types: | ||||
|     is_ephemeral: false | ||||
|     max_available: 1000 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.10xlarge.avx2: | ||||
|     disk_size: 200 | ||||
|     instance_type: m4.10xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 450 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.24xl.spr-metal: | ||||
|     disk_size: 200 | ||||
|     instance_type: c7i.metal-24xl | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.16xlarge.spr: | ||||
|     disk_size: 200 | ||||
|     instance_type: c7i.16xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.9xlarge.ephemeral: | ||||
|     disk_size: 200 | ||||
|     instance_type: c5.9xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 50 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.12xlarge.ephemeral: | ||||
|     disk_size: 200 | ||||
|     instance_type: c5.12xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 300 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.16xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g3.16xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.24xlarge: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.24xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 500 | ||||
|     max_available: 250 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.24xlarge.ephemeral: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.24xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.2xlarge: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.2xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 3120 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.4xlarge: | ||||
|     disk_size: 150 | ||||
|     instance_type: c5.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 1000 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.4xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g3.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 1000 | ||||
|     max_available: 520 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.8xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g3.8xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 400 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.g4dn.12xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g4dn.12xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 250 | ||||
|     max_available: 50 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.g4dn.metal.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g4dn.metal | ||||
|     is_ephemeral: false | ||||
|     max_available: 300 | ||||
|     max_available: 30 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.g5.48xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g5.48xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 200 | ||||
|     max_available: 20 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.g5.12xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g5.12xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 150 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.g5.4xlarge.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g5.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 2400 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.g6.4xlarge.experimental.nvidia.gpu: | ||||
|     disk_size: 150 | ||||
|     instance_type: g6.4xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 50 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.large: | ||||
|     max_available: 1200 | ||||
|     os: linux | ||||
|   lf.linux.large: | ||||
|     disk_size: 15 | ||||
|     instance_type: c5.large | ||||
|     is_ephemeral: false | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-x86_64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-x86_64-ebs | ||||
|   lf.linux.arm64.2xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: t4g.2xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.linux.arm64.m7g.4xlarge: | ||||
|   lf.linux.arm64.m7g.2xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: m7g.4xlarge | ||||
|     instance_type: m7g.2xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 200 | ||||
|     max_available: 20 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.linux.arm64.2xlarge.ephemeral: | ||||
|     disk_size: 256 | ||||
|     instance_type: t4g.2xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.linux.arm64.m7g.4xlarge.ephemeral: | ||||
|     disk_size: 256 | ||||
|     instance_type: m7g.4xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 200 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.linux.arm64.m7g.metal: | ||||
|     disk_size: 256 | ||||
|     instance_type: m7g.metal | ||||
|     is_ephemeral: false | ||||
|     max_available: 100 | ||||
|     os: linux | ||||
|     ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|     variants: | ||||
|       amz2023: | ||||
|         ami: al2023-ami-2023.5.20240701.0-kernel-6.1-arm64 | ||||
|       am2: | ||||
|         ami: amzn2-ami-hvm-2.0.20240306.2-arm64-gp2 | ||||
|   lf.windows.g4dn.xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: g4dn.xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 100 | ||||
|     os: windows | ||||
|   lf.windows.g4dn.xlarge.nonephemeral: | ||||
|     disk_size: 256 | ||||
|     instance_type: g4dn.xlarge | ||||
|     is_ephemeral: false | ||||
|     max_available: 100 | ||||
|     os: windows | ||||
|   lf.windows.4xlarge: | ||||
|     disk_size: 256 | ||||
|     instance_type: c5d.4xlarge | ||||
| @ -353,7 +138,7 @@ runner_types: | ||||
|     disk_size: 256 | ||||
|     instance_type: p3.2xlarge | ||||
|     is_ephemeral: true | ||||
|     max_available: 300 | ||||
|     max_available: 150 | ||||
|     os: windows | ||||
|   lf.windows.8xlarge.nvidia.gpu.nonephemeral: | ||||
|     disk_size: 256 | ||||
|  | ||||
							
								
								
									
										15
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							| @ -107,8 +107,8 @@ | ||||
|   mandatory_checks_name: | ||||
|   - EasyCLA | ||||
|   - Lint | ||||
|   - pull / linux-focal-py3_9-clang9-xla / build | ||||
|   - pull / linux-focal-py3_9-clang9-xla / test (xla, 1, 1, linux.12xlarge) | ||||
|   - pull / linux-focal-py3_8-clang9-xla / build | ||||
|   - pull / linux-focal-py3_8-clang9-xla / test (xla, 1, 1, linux.12xlarge) | ||||
|  | ||||
| - name: Documentation | ||||
|   patterns: | ||||
| @ -282,11 +282,9 @@ | ||||
|   - torch/_C/_distributed* | ||||
|   - torch/csrc/distributed/** | ||||
|   - torch/testing/_internal/distributed/** | ||||
|   - torch/multiprocessing/** | ||||
|   - test/distributed/** | ||||
|   - test/cpp/dist_autograd/** | ||||
|   - test/cpp/rpc/** | ||||
|   - test/*multiprocessing* | ||||
|   approved_by: | ||||
|   - wconstab | ||||
|   - mrshenli | ||||
| @ -525,13 +523,6 @@ | ||||
|   - Skylion007 | ||||
|   - ngimel | ||||
|   - peterbell10 | ||||
|   - eqy | ||||
|   - jansel | ||||
|   - jeffdaily | ||||
|   - eellison | ||||
|   - anijain2305 | ||||
|   - bdhirsh | ||||
|   - zou3519 | ||||
|   mandatory_checks_name: | ||||
|   - EasyCLA | ||||
|   - Lint | ||||
| @ -546,8 +537,6 @@ | ||||
|   - ezyang | ||||
|   - dzhulgakov | ||||
|   - malfet | ||||
|   - albanD | ||||
|   - ptrblck | ||||
|   mandatory_checks_name: | ||||
|   - EasyCLA | ||||
|   - Lint | ||||
|  | ||||
							
								
								
									
										5
									
								
								.github/nitpicks.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/nitpicks.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +0,0 @@ | ||||
| - markdown: | | ||||
|     ## Attention! native_functions.yaml was changed | ||||
|     If you are adding a new function or defaulted argument to native_functions.yaml, you cannot use it from pre-existing Python frontend code until our FC window passes (two weeks).  Split your PR into two PRs, one which adds the new C++ functionality, and one that makes use of it from Python, and land them two weeks apart.  See https://github.com/pytorch/pytorch/wiki/PyTorch's-Python-Frontend-Backward-and-Forward-Compatibility-Policy#forwards-compatibility-fc for more info. | ||||
|   pathFilter: | ||||
|     - 'aten/src/ATen/native/native_functions.yaml' | ||||
							
								
								
									
										2
									
								
								.github/pytorch-probot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/pytorch-probot.yml
									
									
									
									
										vendored
									
									
								
							| @ -6,10 +6,8 @@ ciflow_push_tags: | ||||
| - ciflow/binaries_libtorch | ||||
| - ciflow/binaries_wheel | ||||
| - ciflow/inductor | ||||
| - ciflow/inductor-rocm | ||||
| - ciflow/inductor-perf-compare | ||||
| - ciflow/inductor-micro-benchmark | ||||
| - ciflow/inductor-micro-benchmark-cpu-x86 | ||||
| - ciflow/inductor-cu124 | ||||
| - ciflow/linux-aarch64 | ||||
| - ciflow/mps | ||||
|  | ||||
							
								
								
									
										2
									
								
								.github/requirements/conda-env-iOS.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/requirements/conda-env-iOS.txt
									
									
									
									
										vendored
									
									
								
							| @ -4,4 +4,4 @@ ninja=1.10.2 | ||||
| numpy=1.23.3 | ||||
| pyyaml=6.0 | ||||
| setuptools=68.2.2 | ||||
| typing-extensions=4.11.0 | ||||
| typing-extensions=4.9.0 | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| # iOS simulator requirements | ||||
| coremltools==5.0b5 | ||||
| protobuf==3.20.2 | ||||
| optree==0.12.1 | ||||
| optree==0.11.0 | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| boto3==1.19.12 | ||||
| hypothesis==6.56.4 | ||||
| expecttest==0.2.1 | ||||
| fbscribelogger==0.1.6 | ||||
| expecttest==0.1.6 | ||||
| librosa>=0.6.2 | ||||
| mpmath==1.3.0 | ||||
| networkx==2.8.7 | ||||
| @ -18,16 +17,16 @@ pytest-xdist==3.3.1 | ||||
| pytest-rerunfailures==10.3 | ||||
| pytest-flakefinder==1.1.0 | ||||
| scipy==1.10.1 | ||||
| sympy==1.12.1 ; python_version == "3.8" | ||||
| sympy==1.13.1 ; python_version >= "3.9" | ||||
| sympy==1.11.1 | ||||
| unittest-xml-reporting<=3.2.0,>=2.0.0 | ||||
| xdoctest==1.1.0 | ||||
| filelock==3.6.0 | ||||
| sympy==1.11.1 | ||||
| pytest-cpp==2.3.0 | ||||
| rockset==1.0.3 | ||||
| z3-solver==4.12.2.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 | ||||
| # which the stringify metadata is wrong when escaping double quote | ||||
| protobuf==3.20.2 | ||||
|  | ||||
							
								
								
									
										26
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							| @ -15,7 +15,9 @@ REPO_DIR = SCRIPT_DIR.parent.parent | ||||
|  | ||||
| def read_triton_pin(device: str = "cuda") -> str: | ||||
|     triton_file = "triton.txt" | ||||
|     if device == "xpu": | ||||
|     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: | ||||
|         return f.read().strip() | ||||
| @ -48,25 +50,6 @@ def patch_init_py( | ||||
|         f.write(orig) | ||||
|  | ||||
|  | ||||
| # TODO: remove patch_setup_py() once we have a proper fix for https://github.com/triton-lang/triton/issues/4527 | ||||
| def patch_setup_py(path: Path) -> None: | ||||
|     with open(path) as f: | ||||
|         orig = f.read() | ||||
|     try: | ||||
|         orig = check_and_replace( | ||||
|             orig, | ||||
|             "https://tritonlang.blob.core.windows.net/llvm-builds/", | ||||
|             "https://oaitriton.blob.core.windows.net/public/llvm-builds/", | ||||
|         ) | ||||
|         with open(path, "w") as f: | ||||
|             f.write(orig) | ||||
|     except RuntimeError as e: | ||||
|         print( | ||||
|             f"Applying patch_setup_py() for llvm-build package failed: {e}.", | ||||
|             "If you are trying to build a newer version of Triton, you can ignore this.", | ||||
|         ) | ||||
|  | ||||
|  | ||||
| def build_triton( | ||||
|     *, | ||||
|     version: str, | ||||
| @ -108,9 +91,6 @@ def build_triton( | ||||
|         else: | ||||
|             check_call(["git", "checkout", commit_hash], cwd=triton_basedir) | ||||
|  | ||||
|         # TODO: remove this and patch_setup_py() once we have a proper fix for https://github.com/triton-lang/triton/issues/4527 | ||||
|         patch_setup_py(triton_pythondir / "setup.py") | ||||
|  | ||||
|         if build_conda: | ||||
|             with open(triton_basedir / "meta.yaml", "w") as meta: | ||||
|                 print( | ||||
|  | ||||
							
								
								
									
										11
									
								
								.github/scripts/check_labels.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/scripts/check_labels.py
									
									
									
									
										vendored
									
									
								
							| @ -27,12 +27,6 @@ def parse_args() -> Any: | ||||
|  | ||||
|     parser = ArgumentParser("Check PR labels") | ||||
|     parser.add_argument("pr_num", type=int) | ||||
|     # add a flag to return a non-zero exit code if the PR does not have the required labels | ||||
|     parser.add_argument( | ||||
|         "--exit-non-zero", | ||||
|         action="store_true", | ||||
|         help="Return a non-zero exit code if the PR does not have the required labels", | ||||
|     ) | ||||
|  | ||||
|     return parser.parse_args() | ||||
|  | ||||
| @ -47,13 +41,10 @@ def main() -> None: | ||||
|         if not has_required_labels(pr): | ||||
|             print(LABEL_ERR_MSG) | ||||
|             add_label_err_comment(pr) | ||||
|             if args.exit_non_zero: | ||||
|                 sys.exit(1) | ||||
|         else: | ||||
|             delete_all_label_err_comments(pr) | ||||
|     except Exception as e: | ||||
|         if args.exit_non_zero: | ||||
|             sys.exit(1) | ||||
|         pass | ||||
|  | ||||
|     sys.exit(0) | ||||
|  | ||||
|  | ||||
							
								
								
									
										3
									
								
								.github/scripts/cherry_pick.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/scripts/cherry_pick.py
									
									
									
									
										vendored
									
									
								
							| @ -169,8 +169,7 @@ def create_cherry_pick_branch( | ||||
|     repo.create_branch_and_checkout(branch=cherry_pick_branch) | ||||
|  | ||||
|     # We might want to support ghstack later | ||||
|     # We don't want to resolve conflicts here. | ||||
|     repo._run_git("cherry-pick", "-x", commit_sha) | ||||
|     repo._run_git("cherry-pick", "-x", "-X", "theirs", commit_sha) | ||||
|     repo.push(branch=cherry_pick_branch, dry_run=False) | ||||
|  | ||||
|     return cherry_pick_branch | ||||
|  | ||||
							
								
								
									
										7
									
								
								.github/scripts/filter_test_configs.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/scripts/filter_test_configs.py
									
									
									
									
										vendored
									
									
								
							| @ -39,9 +39,9 @@ SUPPORTED_PERIODICAL_MODES: Dict[str, Callable[[Optional[str]], bool]] = { | ||||
| } | ||||
|  | ||||
| # The link to the published list of disabled jobs | ||||
| DISABLED_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/disabled-jobs.json?versionId=sxzMTP57qj.Vwz8dN1glkTK560Txq9W3" | ||||
| DISABLED_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/disabled-jobs.json" | ||||
| # and unstable jobs | ||||
| UNSTABLE_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/unstable-jobs.json?versionId=8f1.4S3MupuHXH8t0waxyGnPsGHJYdv9" | ||||
| UNSTABLE_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/unstable-jobs.json" | ||||
|  | ||||
| # Some constants used to handle disabled and unstable jobs | ||||
| JOB_NAME_SEP = "/" | ||||
| @ -505,9 +505,6 @@ def perform_misc_tasks( | ||||
|         "ci-verbose-test-logs", | ||||
|         check_for_setting(labels, pr_body, "ci-verbose-test-logs"), | ||||
|     ) | ||||
|     set_output( | ||||
|         "ci-test-showlocals", check_for_setting(labels, pr_body, "ci-test-showlocals") | ||||
|     ) | ||||
|     set_output( | ||||
|         "ci-no-test-timeout", check_for_setting(labels, pr_body, "ci-no-test-timeout") | ||||
|     ) | ||||
|  | ||||
							
								
								
									
										87
									
								
								.github/scripts/generate_binary_build_matrix.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										87
									
								
								.github/scripts/generate_binary_build_matrix.py
									
									
									
									
										vendored
									
									
								
							| @ -18,13 +18,13 @@ from typing import Dict, List, Optional, Tuple | ||||
| CUDA_ARCHES = ["11.8", "12.1", "12.4"] | ||||
|  | ||||
|  | ||||
| CUDA_ARCHES_FULL_VERSION = {"11.8": "11.8.0", "12.1": "12.1.1", "12.4": "12.4.1"} | ||||
| CUDA_ARCHES_FULL_VERSION = {"11.8": "11.8.0", "12.1": "12.1.1", "12.4": "12.4.0"} | ||||
|  | ||||
|  | ||||
| CUDA_ARCHES_CUDNN_VERSION = {"11.8": "9", "12.1": "9", "12.4": "9"} | ||||
|  | ||||
|  | ||||
| ROCM_ARCHES = ["6.1", "6.2"] | ||||
| ROCM_ARCHES = ["6.0", "6.1"] | ||||
|  | ||||
| XPU_ARCHES = ["xpu"] | ||||
|  | ||||
| @ -68,18 +68,18 @@ PYTORCH_EXTRA_INSTALL_REQUIREMENTS = { | ||||
|         "nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'" | ||||
|     ), | ||||
|     "12.4": ( | ||||
|         "nvidia-cuda-nvrtc-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cuda-runtime-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cuda-cupti-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cuda-nvrtc-cu12==12.4.99; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cuda-runtime-cu12==12.4.99; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cuda-cupti-cu12==12.4.99; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cudnn-cu12==9.1.0.70; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cublas-cu12==12.4.5.8; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cufft-cu12==11.2.1.3; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-curand-cu12==10.3.5.147; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cusolver-cu12==11.6.1.9; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cusparse-cu12==12.3.1.170; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cublas-cu12==12.4.2.65; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cufft-cu12==11.2.0.44; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-curand-cu12==10.3.5.119; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cusolver-cu12==11.6.0.99; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-cusparse-cu12==12.3.0.142; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-nccl-cu12==2.21.5; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-nvtx-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-nvjitlink-cu12==12.4.127; platform_system == 'Linux' and platform_machine == 'x86_64'" | ||||
|         "nvidia-nvtx-cu12==12.4.99; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||
|         "nvidia-nvjitlink-cu12==12.4.99; platform_system == 'Linux' and platform_machine == 'x86_64'" | ||||
|     ), | ||||
| } | ||||
|  | ||||
| @ -215,7 +215,7 @@ LIBTORCH_CONTAINER_IMAGES: Dict[Tuple[str, str], str] = { | ||||
|     ("cpu", CXX11_ABI): f"pytorch/libtorch-cxx11-builder:cpu-{DEFAULT_TAG}", | ||||
| } | ||||
|  | ||||
| FULL_PYTHON_VERSIONS = ["3.9", "3.10", "3.11", "3.12"] | ||||
| FULL_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||||
|  | ||||
|  | ||||
| def translate_desired_cuda(gpu_arch_type: str, gpu_arch_version: str) -> str: | ||||
| @ -325,7 +325,6 @@ def generate_wheels_matrix( | ||||
|     os: str, | ||||
|     arches: Optional[List[str]] = None, | ||||
|     python_versions: Optional[List[str]] = None, | ||||
|     use_split_build: bool = False, | ||||
| ) -> List[Dict[str, str]]: | ||||
|     package_type = "wheel" | ||||
|     if os == "linux" or os == "linux-aarch64" or os == "linux-s390x": | ||||
| @ -341,7 +340,7 @@ def generate_wheels_matrix( | ||||
|         if os == "linux": | ||||
|             arches += CPU_CXX11_ABI_ARCH + CUDA_ARCHES + ROCM_ARCHES + XPU_ARCHES | ||||
|         elif os == "windows": | ||||
|             arches += CUDA_ARCHES + XPU_ARCHES | ||||
|             arches += CUDA_ARCHES | ||||
|         elif os == "linux-aarch64": | ||||
|             # Only want the one arch as the CPU type is different and | ||||
|             # uses different build/test scripts | ||||
| @ -366,23 +365,13 @@ def generate_wheels_matrix( | ||||
|                 else arch_version | ||||
|             ) | ||||
|  | ||||
|             # TODO: Enable python 3.13 on rocm, aarch64, windows | ||||
|             # TODO: Enable python 3.13 on rocm, xpu, aarch64, windows | ||||
|             if ( | ||||
|                 gpu_arch_type == "rocm" or (os != "linux" and os != "linux-s390x") | ||||
|                 gpu_arch_type in ["rocm", "xpu"] or os != "linux" | ||||
|             ) and python_version == "3.13": | ||||
|                 continue | ||||
|  | ||||
|             if use_split_build and ( | ||||
|                 arch_version not in ["12.4", "12.1", "11.8", "cpu"] or os != "linux" | ||||
|             ): | ||||
|                 raise RuntimeError( | ||||
|                     "Split build is only supported on linux with cuda 12.4, 12.1, 11.8, and cpu.\n" | ||||
|                     f"Currently attempting to build on arch version {arch_version} and os {os}.\n" | ||||
|                     "Please modify the matrix generation to exclude this combination." | ||||
|                 ) | ||||
|  | ||||
|             # 12.1 linux wheels require PYTORCH_EXTRA_INSTALL_REQUIREMENTS to install | ||||
|  | ||||
|             if ( | ||||
|                 arch_version in ["12.4", "12.1", "11.8"] | ||||
|                 and os == "linux" | ||||
| @ -396,7 +385,6 @@ def generate_wheels_matrix( | ||||
|                         "desired_cuda": translate_desired_cuda( | ||||
|                             gpu_arch_type, gpu_arch_version | ||||
|                         ), | ||||
|                         "use_split_build": "True" if use_split_build else "False", | ||||
|                         "devtoolset": ( | ||||
|                             "cxx11-abi" if arch_version == "cuda-aarch64" else "" | ||||
|                         ), | ||||
| @ -412,8 +400,7 @@ def generate_wheels_matrix( | ||||
|                         ), | ||||
|                     } | ||||
|                 ) | ||||
|                 # Special build building to use on Colab. PyThon 3.10 for 12.1 CUDA | ||||
|                 if python_version == "3.10" and arch_version == "12.1": | ||||
|                 if arch_version != "cuda-aarch64": | ||||
|                     ret.append( | ||||
|                         { | ||||
|                             "python_version": python_version, | ||||
| @ -422,16 +409,40 @@ def generate_wheels_matrix( | ||||
|                             "desired_cuda": translate_desired_cuda( | ||||
|                                 gpu_arch_type, gpu_arch_version | ||||
|                             ), | ||||
|                             "use_split_build": "True" if use_split_build else "False", | ||||
|                             "use_split_build": "True", | ||||
|                             "devtoolset": "", | ||||
|                             "container_image": WHEEL_CONTAINER_IMAGES[arch_version], | ||||
|                             "package_type": package_type, | ||||
|                             "pytorch_extra_install_requirements": "", | ||||
|                             "build_name": f"{package_type}-py{python_version}-{gpu_arch_type}{gpu_arch_version}-full".replace(  # noqa: B950 | ||||
|                             "pytorch_extra_install_requirements": ( | ||||
|                                 PYTORCH_EXTRA_INSTALL_REQUIREMENTS[arch_version]  # fmt: skip | ||||
|                                 if os != "linux-aarch64" | ||||
|                                 else "" | ||||
|                             ), | ||||
|                             "build_name": f"{package_type}-py{python_version}-{gpu_arch_type}{gpu_arch_version}-split".replace(  # noqa: B950 | ||||
|                                 ".", "_" | ||||
|                             ), | ||||
|                         } | ||||
|                     ) | ||||
|                     # Special build building to use on Colab. PyThon 3.10 for 12.1 CUDA | ||||
|                     if python_version == "3.10" and arch_version == "12.1": | ||||
|                         ret.append( | ||||
|                             { | ||||
|                                 "python_version": python_version, | ||||
|                                 "gpu_arch_type": gpu_arch_type, | ||||
|                                 "gpu_arch_version": gpu_arch_version, | ||||
|                                 "desired_cuda": translate_desired_cuda( | ||||
|                                     gpu_arch_type, gpu_arch_version | ||||
|                                 ), | ||||
|                                 "use_split_build": "False", | ||||
|                                 "devtoolset": "", | ||||
|                                 "container_image": WHEEL_CONTAINER_IMAGES[arch_version], | ||||
|                                 "package_type": package_type, | ||||
|                                 "pytorch_extra_install_requirements": "", | ||||
|                                 "build_name": f"{package_type}-py{python_version}-{gpu_arch_type}{gpu_arch_version}-full".replace(  # noqa: B950 | ||||
|                                     ".", "_" | ||||
|                                 ), | ||||
|                             } | ||||
|                         ) | ||||
|             else: | ||||
|                 ret.append( | ||||
|                     { | ||||
| @ -441,9 +452,10 @@ def generate_wheels_matrix( | ||||
|                         "desired_cuda": translate_desired_cuda( | ||||
|                             gpu_arch_type, gpu_arch_version | ||||
|                         ), | ||||
|                         "use_split_build": "True" if use_split_build else "False", | ||||
|                         "devtoolset": ( | ||||
|                             "cxx11-abi" if arch_version == "cpu-cxx11-abi" else "" | ||||
|                             "cxx11-abi" | ||||
|                             if arch_version in ["cpu-cxx11-abi", "xpu"] | ||||
|                             else "" | ||||
|                         ), | ||||
|                         "container_image": WHEEL_CONTAINER_IMAGES[arch_version], | ||||
|                         "package_type": package_type, | ||||
| @ -451,13 +463,12 @@ def generate_wheels_matrix( | ||||
|                             ".", "_" | ||||
|                         ), | ||||
|                         "pytorch_extra_install_requirements": ( | ||||
|                             PYTORCH_EXTRA_INSTALL_REQUIREMENTS["12.4"]  # fmt: skip | ||||
|                             if os != "linux" and gpu_arch_type != "xpu" | ||||
|                             PYTORCH_EXTRA_INSTALL_REQUIREMENTS["12.1"]  # fmt: skip | ||||
|                             if os != "linux" | ||||
|                             else "" | ||||
|                         ), | ||||
|                     } | ||||
|                 ) | ||||
|  | ||||
|     return ret | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										40
									
								
								.github/scripts/generate_ci_workflows.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								.github/scripts/generate_ci_workflows.py
									
									
									
									
										vendored
									
									
								
							| @ -61,7 +61,6 @@ class BinaryBuildWorkflow: | ||||
|     # Mainly for macos | ||||
|     cross_compile_arm64: bool = False | ||||
|     macos_runner: str = "macos-14-xlarge" | ||||
|     use_split_build: bool = False | ||||
|  | ||||
|     def __post_init__(self) -> None: | ||||
|         if self.abi_version: | ||||
| @ -70,20 +69,12 @@ class BinaryBuildWorkflow: | ||||
|             ) | ||||
|         else: | ||||
|             self.build_environment = f"{self.os}-binary-{self.package_type}" | ||||
|         if self.use_split_build: | ||||
|             # added to distinguish concurrency groups | ||||
|             self.build_environment += "-split" | ||||
|  | ||||
|     def generate_workflow_file(self, workflow_template: jinja2.Template) -> None: | ||||
|         output_file_path = ( | ||||
|             GITHUB_DIR | ||||
|             / f"workflows/generated-{self.build_environment}-{self.branches}.yml" | ||||
|         ) | ||||
|         if self.use_split_build: | ||||
|             output_file_path = ( | ||||
|                 GITHUB_DIR | ||||
|                 / f"workflows/generated-{self.build_environment}-{self.branches}" | ||||
|             ) | ||||
|         with open(output_file_path, "w") as output_file: | ||||
|             GENERATED = "generated"  # Note that please keep the variable GENERATED otherwise phabricator will hide the whole file | ||||
|             output_file.writelines([f"# @{GENERATED} DO NOT EDIT MANUALLY\n"]) | ||||
| @ -119,20 +110,6 @@ LINUX_BINARY_BUILD_WORFKLOWS = [ | ||||
|             isolated_workflow=True, | ||||
|         ), | ||||
|     ), | ||||
|     BinaryBuildWorkflow( | ||||
|         os=OperatingSystem.LINUX, | ||||
|         package_type="manywheel", | ||||
|         build_configs=generate_binary_build_matrix.generate_wheels_matrix( | ||||
|             OperatingSystem.LINUX, | ||||
|             use_split_build=True, | ||||
|             arches=["11.8", "12.1", "12.4", "cpu"], | ||||
|         ), | ||||
|         ciflow_config=CIFlowConfig( | ||||
|             labels={LABEL_CIFLOW_BINARIES, LABEL_CIFLOW_BINARIES_WHEEL}, | ||||
|             isolated_workflow=True, | ||||
|         ), | ||||
|         use_split_build=True, | ||||
|     ), | ||||
|     BinaryBuildWorkflow( | ||||
|         os=OperatingSystem.LINUX, | ||||
|         package_type="conda", | ||||
| @ -181,25 +158,10 @@ LINUX_BINARY_SMOKE_WORKFLOWS = [ | ||||
|         build_configs=generate_binary_build_matrix.generate_wheels_matrix( | ||||
|             OperatingSystem.LINUX, | ||||
|             arches=["11.8", "12.1", "12.4"], | ||||
|             python_versions=["3.9"], | ||||
|             python_versions=["3.8"], | ||||
|         ), | ||||
|         branches="main", | ||||
|     ), | ||||
|     BinaryBuildWorkflow( | ||||
|         os=OperatingSystem.LINUX, | ||||
|         package_type="manywheel", | ||||
|         build_configs=generate_binary_build_matrix.generate_wheels_matrix( | ||||
|             OperatingSystem.LINUX, | ||||
|             arches=["11.8", "12.1", "12.4"], | ||||
|             python_versions=["3.9"], | ||||
|             use_split_build=True, | ||||
|         ), | ||||
|         ciflow_config=CIFlowConfig( | ||||
|             labels={LABEL_CIFLOW_PERIODIC}, | ||||
|         ), | ||||
|         branches="main", | ||||
|         use_split_build=True, | ||||
|     ), | ||||
|     BinaryBuildWorkflow( | ||||
|         os=OperatingSystem.LINUX, | ||||
|         package_type="libtorch", | ||||
|  | ||||
							
								
								
									
										14
									
								
								.github/scripts/github_utils.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/scripts/github_utils.py
									
									
									
									
										vendored
									
									
								
							| @ -46,24 +46,16 @@ def gh_fetch_url_and_headers( | ||||
|         with urlopen(Request(url, headers=headers, data=data_, method=method)) as conn: | ||||
|             return conn.headers, reader(conn) | ||||
|     except HTTPError as err: | ||||
|         if ( | ||||
|             err.code == 403 | ||||
|             and all( | ||||
|                 key in err.headers | ||||
|                 for key in ["X-RateLimit-Limit", "X-RateLimit-Remaining"] | ||||
|             ) | ||||
|             and int(err.headers["X-RateLimit-Remaining"]) == 0 | ||||
|         if err.code == 403 and all( | ||||
|             key in err.headers for key in ["X-RateLimit-Limit", "X-RateLimit-Used"] | ||||
|         ): | ||||
|             print( | ||||
|                 f"""{url} | ||||
|                 Rate limit exceeded: | ||||
|                 f"""Rate limit exceeded: | ||||
|                 Used: {err.headers['X-RateLimit-Used']} | ||||
|                 Limit: {err.headers['X-RateLimit-Limit']} | ||||
|                 Remaining: {err.headers['X-RateLimit-Remaining']} | ||||
|                 Resets at: {err.headers['x-RateLimit-Reset']}""" | ||||
|             ) | ||||
|         else: | ||||
|             print(f"Error fetching {url} {err}") | ||||
|         raise | ||||
|  | ||||
|  | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	