mirror of
				https://github.com/pytorch/pytorch.git
				synced 2025-11-04 16:04:58 +08:00 
			
		
		
		
	Compare commits
	
		
			51 Commits
		
	
	
		
			fastmath_b
			...
			v2.4.0-rc8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e4ee3be406 | |||
| 9afe4ec096 | |||
| 499621e7bb | |||
| e5bda62849 | |||
| 705e3ae420 | |||
| b26cde49b6 | |||
| 12ad767daf | |||
| 1164d3cb9c | |||
| 9533637daa | |||
| fadd3cc4ab | |||
| 80277a50bc | |||
| d0831d65aa | |||
| ca8d4d1751 | |||
| 3d7d7927ca | |||
| 5f7de217cb | |||
| 072d9e8ac9 | |||
| 1f84579407 | |||
| 4d83bca8d8 | |||
| 04339eec05 | |||
| 22a4d46e2b | |||
| 560869918d | |||
| 2bf37985b1 | |||
| 491e9e2d4a | |||
| ec19059347 | |||
| 04e98d3d0e | |||
| 699c056479 | |||
| 49d2eec960 | |||
| 165e09874b | |||
| 93c51dc84b | |||
| 67a815abd2 | |||
| d2e4cc71f1 | |||
| 0233f8df5b | |||
| 434bf9559f | |||
| 50e57d4f3f | |||
| edcc77dadb | |||
| 0e0a9c5a5c | |||
| 4af5000bff | |||
| 562cdc2084 | |||
| b1d53f07b2 | |||
| 86271445d6 | |||
| d71de3c95c | |||
| e7dde73d43 | |||
| 9ad8a5b657 | |||
| ed624a0483 | |||
| 082c4f7e64 | |||
| 459e2aa454 | |||
| 6be0234f07 | |||
| 24a3885ef6 | |||
| 62417c6ca9 | |||
| 1cd41997e9 | |||
| c85e2cacd3 | 
@ -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.6b
 | 
			
		||||
manylinux_2_17
 | 
			
		||||
rocm6.2
 | 
			
		||||
7f07e8a1cb1f99627eb6d77f5c0e9295c775f3c7
 | 
			
		||||
e4ab195d2bd19e939c675a13280c29714c6ef9f2cf420690da150fa0cac043b1
 | 
			
		||||
rocm6
 | 
			
		||||
04b5df8c8123f90cba3ede7e971e6fbc6040d506
 | 
			
		||||
3db6ecbc915893ff967abd6e1b43bd5f54949868873be60dc802086c3863e648
 | 
			
		||||
 | 
			
		||||
@ -373,13 +373,6 @@ case "$image" in
 | 
			
		||||
    CONDA_CMAKE=yes
 | 
			
		||||
    EXECUTORCH=yes
 | 
			
		||||
    ;;
 | 
			
		||||
  pytorch-linux-jammy-py3.12-halide)
 | 
			
		||||
    CUDA_VERSION=12.4
 | 
			
		||||
    ANACONDA_PYTHON_VERSION=3.12
 | 
			
		||||
    GCC_VERSION=11
 | 
			
		||||
    CONDA_CMAKE=yes
 | 
			
		||||
    HALIDE=yes
 | 
			
		||||
    ;;
 | 
			
		||||
  pytorch-linux-focal-linter)
 | 
			
		||||
    # TODO: Use 3.9 here because of this issue https://github.com/python/mypy/issues/13627.
 | 
			
		||||
    # We will need to update mypy version eventually, but that's for another day. The task
 | 
			
		||||
@ -407,22 +400,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
 | 
			
		||||
@ -513,7 +490,6 @@ docker build \
 | 
			
		||||
       --build-arg "DOCS=${DOCS}" \
 | 
			
		||||
       --build-arg "INDUCTOR_BENCHMARKS=${INDUCTOR_BENCHMARKS}" \
 | 
			
		||||
       --build-arg "EXECUTORCH=${EXECUTORCH}" \
 | 
			
		||||
       --build-arg "HALIDE=${HALIDE}" \
 | 
			
		||||
       --build-arg "XPU_VERSION=${XPU_VERSION}" \
 | 
			
		||||
       --build-arg "ACL=${ACL:-}" \
 | 
			
		||||
       --build-arg "SKIP_SCCACHE_INSTALL=${SKIP_SCCACHE_INSTALL:-}" \
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
5e9bab8c5956249e75a0f187bf8075df97ca2555
 | 
			
		||||
d4b3e5cc607e97afdba79dc90f8ef968142f347c
 | 
			
		||||
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
340136fec6d3ebc73e7a19eba1663e9b0ba8ab2d
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
1b2f15840e0d70eec50d84c7a0575cb835524def
 | 
			
		||||
aac14a3b93f11d781d1d5ebc5400b15ae8df5185
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
dedb7bdf339a3546896d4820366ca562c586bfa0
 | 
			
		||||
45fff310c891f5a92d55445adf8cc9d29df5841e
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ TARBALL='aotriton.tar.bz2'
 | 
			
		||||
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.bz2"
 | 
			
		||||
AOTRITON_URL="https://github.com/ROCm/aotriton/releases/download/${VER}/aotriton-${VER}-${MANYLINUX}_${ARCH}-${ROCMBASE}.tar.bz2"
 | 
			
		||||
 | 
			
		||||
cd "${AOTRITON_INSTALL_PREFIX}"
 | 
			
		||||
# Must use -L to follow redirects
 | 
			
		||||
 | 
			
		||||
@ -85,7 +85,7 @@ 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
 | 
			
		||||
    if [ "$ANACONDA_PYTHON_VERSION" = "3.11" ] || [ "$ANACONDA_PYTHON_VERSION" = "3.12" ]; then
 | 
			
		||||
      conda_install numpy=1.26.0 ${CONDA_COMMON_DEPS}
 | 
			
		||||
    else
 | 
			
		||||
      conda_install numpy=1.21.2 ${CONDA_COMMON_DEPS}
 | 
			
		||||
 | 
			
		||||
@ -1,20 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# Anaconda
 | 
			
		||||
# Latest anaconda is using openssl-3 which is incompatible with all currently published versions of git
 | 
			
		||||
# Which are using openssl-1.1.1, see https://anaconda.org/anaconda/git/files?version=2.40.1 for example
 | 
			
		||||
MINICONDA_URL=https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-x86_64.sh
 | 
			
		||||
wget -q $MINICONDA_URL
 | 
			
		||||
# NB: Manually invoke bash per https://github.com/conda/conda/issues/10431
 | 
			
		||||
bash $(basename "$MINICONDA_URL") -b -p /opt/conda
 | 
			
		||||
rm $(basename "$MINICONDA_URL")
 | 
			
		||||
export PATH=/opt/conda/bin:$PATH
 | 
			
		||||
# See https://github.com/pytorch/builder/issues/1473
 | 
			
		||||
# Pin conda to 23.5.2 as it's the last one compatible with openssl-1.1.1
 | 
			
		||||
conda install -y conda=23.5.2 conda-build anaconda-client git ninja
 | 
			
		||||
# The cmake version here needs to match with the minimum version of cmake
 | 
			
		||||
# supported by PyTorch (3.18). There is only 3.18.2 on anaconda
 | 
			
		||||
/opt/conda/bin/pip3 install cmake==3.18.2
 | 
			
		||||
conda remove -y --force patchelf
 | 
			
		||||
@ -1,95 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
set -uex -o pipefail
 | 
			
		||||
 | 
			
		||||
PYTHON_DOWNLOAD_URL=https://www.python.org/ftp/python
 | 
			
		||||
PYTHON_DOWNLOAD_GITHUB_BRANCH=https://github.com/python/cpython/archive/refs/heads
 | 
			
		||||
GET_PIP_URL=https://bootstrap.pypa.io/get-pip.py
 | 
			
		||||
 | 
			
		||||
# Python versions to be installed in /opt/$VERSION_NO
 | 
			
		||||
CPYTHON_VERSIONS=${CPYTHON_VERSIONS:-"3.8.1 3.9.0 3.10.1 3.11.0 3.12.0 3.13.0"}
 | 
			
		||||
 | 
			
		||||
function check_var {
 | 
			
		||||
    if [ -z "$1" ]; then
 | 
			
		||||
        echo "required variable not defined"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function do_cpython_build {
 | 
			
		||||
    local py_ver=$1
 | 
			
		||||
    local py_folder=$2
 | 
			
		||||
    check_var $py_ver
 | 
			
		||||
    check_var $py_folder
 | 
			
		||||
    tar -xzf Python-$py_ver.tgz
 | 
			
		||||
    pushd $py_folder
 | 
			
		||||
 | 
			
		||||
    local prefix="/opt/_internal/cpython-${py_ver}"
 | 
			
		||||
    mkdir -p ${prefix}/lib
 | 
			
		||||
    if [[ -n $(which patchelf) ]]; then
 | 
			
		||||
        local shared_flags="--enable-shared"
 | 
			
		||||
    else
 | 
			
		||||
        local shared_flags="--disable-shared"
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -z  "${WITH_OPENSSL+x}" ]]; then
 | 
			
		||||
        local openssl_flags=""
 | 
			
		||||
    else
 | 
			
		||||
        local openssl_flags="--with-openssl=${WITH_OPENSSL} --with-openssl-rpath=auto"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # -Wformat added for https://bugs.python.org/issue17547 on Python 2.6
 | 
			
		||||
    CFLAGS="-Wformat" ./configure --prefix=${prefix} ${openssl_flags} ${shared_flags} > /dev/null
 | 
			
		||||
 | 
			
		||||
    make -j40 > /dev/null
 | 
			
		||||
    make install > /dev/null
 | 
			
		||||
 | 
			
		||||
    if [[ "${shared_flags}" == "--enable-shared" ]]; then
 | 
			
		||||
        patchelf --set-rpath '$ORIGIN/../lib' ${prefix}/bin/python3
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    popd
 | 
			
		||||
    rm -rf $py_folder
 | 
			
		||||
    # Some python's install as bin/python3. Make them available as
 | 
			
		||||
    # bin/python.
 | 
			
		||||
    if [ -e ${prefix}/bin/python3 ]; then
 | 
			
		||||
        ln -s python3 ${prefix}/bin/python
 | 
			
		||||
    fi
 | 
			
		||||
    ${prefix}/bin/python get-pip.py
 | 
			
		||||
    if [ -e ${prefix}/bin/pip3 ] && [ ! -e ${prefix}/bin/pip ]; then
 | 
			
		||||
        ln -s pip3 ${prefix}/bin/pip
 | 
			
		||||
    fi
 | 
			
		||||
    ${prefix}/bin/pip install wheel==0.34.2
 | 
			
		||||
    local abi_tag=$(${prefix}/bin/python -c "from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag; print('{0}{1}-{2}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag()))")
 | 
			
		||||
    ln -s ${prefix} /opt/python/${abi_tag}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function build_cpython {
 | 
			
		||||
    local py_ver=$1
 | 
			
		||||
    check_var $py_ver
 | 
			
		||||
    check_var $PYTHON_DOWNLOAD_URL
 | 
			
		||||
    local py_ver_folder=$py_ver
 | 
			
		||||
    if [ "$py_ver" = "3.13.0" ]; then
 | 
			
		||||
        PY_VER_SHORT="3.13"
 | 
			
		||||
        check_var $PYTHON_DOWNLOAD_GITHUB_BRANCH
 | 
			
		||||
        wget $PYTHON_DOWNLOAD_GITHUB_BRANCH/$PY_VER_SHORT.tar.gz -O Python-$py_ver.tgz
 | 
			
		||||
        do_cpython_build $py_ver cpython-$PY_VER_SHORT
 | 
			
		||||
    else
 | 
			
		||||
        wget -q $PYTHON_DOWNLOAD_URL/$py_ver_folder/Python-$py_ver.tgz
 | 
			
		||||
        do_cpython_build $py_ver Python-$py_ver
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    rm -f Python-$py_ver.tgz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function build_cpythons {
 | 
			
		||||
    check_var $GET_PIP_URL
 | 
			
		||||
    curl -sLO $GET_PIP_URL
 | 
			
		||||
    for py_ver in $@; do
 | 
			
		||||
        build_cpython $py_ver
 | 
			
		||||
    done
 | 
			
		||||
    rm -f get-pip.py
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mkdir -p /opt/python
 | 
			
		||||
mkdir -p /opt/_internal
 | 
			
		||||
build_cpythons $CPYTHON_VERSIONS
 | 
			
		||||
@ -1,239 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
NCCL_VERSION=v2.21.5-1
 | 
			
		||||
CUDNN_VERSION=9.1.0.70
 | 
			
		||||
 | 
			
		||||
function install_cusparselt_040 {
 | 
			
		||||
    # cuSparseLt license: https://docs.nvidia.com/cuda/cusparselt/license.html
 | 
			
		||||
    mkdir tmp_cusparselt && pushd tmp_cusparselt
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-x86_64/libcusparse_lt-linux-x86_64-0.4.0.7-archive.tar.xz
 | 
			
		||||
    tar xf libcusparse_lt-linux-x86_64-0.4.0.7-archive.tar.xz
 | 
			
		||||
    cp -a libcusparse_lt-linux-x86_64-0.4.0.7-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a libcusparse_lt-linux-x86_64-0.4.0.7-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    popd
 | 
			
		||||
    rm -rf tmp_cusparselt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function install_cusparselt_052 {
 | 
			
		||||
    # cuSparseLt license: https://docs.nvidia.com/cuda/cusparselt/license.html
 | 
			
		||||
    mkdir tmp_cusparselt && pushd tmp_cusparselt
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-x86_64/libcusparse_lt-linux-x86_64-0.5.2.1-archive.tar.xz
 | 
			
		||||
    tar xf libcusparse_lt-linux-x86_64-0.5.2.1-archive.tar.xz
 | 
			
		||||
    cp -a libcusparse_lt-linux-x86_64-0.5.2.1-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a libcusparse_lt-linux-x86_64-0.5.2.1-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    popd
 | 
			
		||||
    rm -rf tmp_cusparselt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function install_118 {
 | 
			
		||||
    echo "Installing CUDA 11.8 and cuDNN ${CUDNN_VERSION} and NCCL ${NCCL_VERSION} and cuSparseLt-0.4.0"
 | 
			
		||||
    rm -rf /usr/local/cuda-11.8 /usr/local/cuda
 | 
			
		||||
    # install CUDA 11.8.0 in the same container
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
 | 
			
		||||
    chmod +x cuda_11.8.0_520.61.05_linux.run
 | 
			
		||||
    ./cuda_11.8.0_520.61.05_linux.run --toolkit --silent
 | 
			
		||||
    rm -f cuda_11.8.0_520.61.05_linux.run
 | 
			
		||||
    rm -f /usr/local/cuda && ln -s /usr/local/cuda-11.8 /usr/local/cuda
 | 
			
		||||
 | 
			
		||||
    # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement
 | 
			
		||||
    mkdir tmp_cudnn && cd tmp_cudnn
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive.tar.xz -O cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive.tar.xz
 | 
			
		||||
    tar xf cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive.tar.xz
 | 
			
		||||
    cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda11-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    cd ..
 | 
			
		||||
    rm -rf tmp_cudnn
 | 
			
		||||
 | 
			
		||||
    # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses
 | 
			
		||||
    # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build
 | 
			
		||||
    git clone -b $NCCL_VERSION --depth 1 https://github.com/NVIDIA/nccl.git
 | 
			
		||||
    cd nccl && make -j src.build
 | 
			
		||||
    cp -a build/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a build/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    cd ..
 | 
			
		||||
    rm -rf nccl
 | 
			
		||||
 | 
			
		||||
    install_cusparselt_040
 | 
			
		||||
 | 
			
		||||
    ldconfig
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function install_121 {
 | 
			
		||||
    echo "Installing CUDA 12.1 and cuDNN ${CUDNN_VERSION} and NCCL ${NCCL_VERSION} and cuSparseLt-0.5.2"
 | 
			
		||||
    rm -rf /usr/local/cuda-12.1 /usr/local/cuda
 | 
			
		||||
    # install CUDA 12.1.0 in the same container
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
 | 
			
		||||
    chmod +x cuda_12.1.1_530.30.02_linux.run
 | 
			
		||||
    ./cuda_12.1.1_530.30.02_linux.run --toolkit --silent
 | 
			
		||||
    rm -f cuda_12.1.1_530.30.02_linux.run
 | 
			
		||||
    rm -f /usr/local/cuda && ln -s /usr/local/cuda-12.1 /usr/local/cuda
 | 
			
		||||
 | 
			
		||||
    # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement
 | 
			
		||||
    mkdir tmp_cudnn && cd tmp_cudnn
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz -O cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz
 | 
			
		||||
    tar xf cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz
 | 
			
		||||
    cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    cd ..
 | 
			
		||||
    rm -rf tmp_cudnn
 | 
			
		||||
 | 
			
		||||
    # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses
 | 
			
		||||
    # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build
 | 
			
		||||
    git clone -b $NCCL_VERSION --depth 1 https://github.com/NVIDIA/nccl.git
 | 
			
		||||
    cd nccl && make -j src.build
 | 
			
		||||
    cp -a build/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a build/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    cd ..
 | 
			
		||||
    rm -rf nccl
 | 
			
		||||
 | 
			
		||||
    install_cusparselt_052
 | 
			
		||||
 | 
			
		||||
    ldconfig
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function install_124 {
 | 
			
		||||
  echo "Installing CUDA 12.4 and cuDNN ${CUDNN_VERSION} and NCCL ${NCCL_VERSION} and cuSparseLt-0.5.2"
 | 
			
		||||
  rm -rf /usr/local/cuda-12.4 /usr/local/cuda
 | 
			
		||||
  # install CUDA 12.4.0 in the same container
 | 
			
		||||
  wget -q https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
 | 
			
		||||
  chmod +x cuda_12.4.0_550.54.14_linux.run
 | 
			
		||||
  ./cuda_12.4.0_550.54.14_linux.run --toolkit --silent
 | 
			
		||||
  rm -f cuda_12.4.0_550.54.14_linux.run
 | 
			
		||||
  rm -f /usr/local/cuda && ln -s /usr/local/cuda-12.4 /usr/local/cuda
 | 
			
		||||
 | 
			
		||||
  # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement
 | 
			
		||||
  mkdir tmp_cudnn && cd tmp_cudnn
 | 
			
		||||
  wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz -O cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz
 | 
			
		||||
  tar xf cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive.tar.xz
 | 
			
		||||
  cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
  cp -a cudnn-linux-x86_64-${CUDNN_VERSION}_cuda12-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
  cd ..
 | 
			
		||||
  rm -rf tmp_cudnn
 | 
			
		||||
 | 
			
		||||
  # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses
 | 
			
		||||
  # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build
 | 
			
		||||
  git clone -b $NCCL_VERSION --depth 1 https://github.com/NVIDIA/nccl.git
 | 
			
		||||
  cd nccl && make -j src.build
 | 
			
		||||
  cp -a build/include/* /usr/local/cuda/include/
 | 
			
		||||
  cp -a build/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
  cd ..
 | 
			
		||||
  rm -rf nccl
 | 
			
		||||
 | 
			
		||||
  install_cusparselt_052
 | 
			
		||||
 | 
			
		||||
  ldconfig
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prune_118 {
 | 
			
		||||
    echo "Pruning CUDA 11.8 and cuDNN"
 | 
			
		||||
    #####################################################################################
 | 
			
		||||
    # CUDA 11.8 prune static libs
 | 
			
		||||
    #####################################################################################
 | 
			
		||||
    export NVPRUNE="/usr/local/cuda-11.8/bin/nvprune"
 | 
			
		||||
    export CUDA_LIB_DIR="/usr/local/cuda-11.8/lib64"
 | 
			
		||||
 | 
			
		||||
    export GENCODE="-gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
    export GENCODE_CUDNN="-gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
 | 
			
		||||
    if [[ -n "$OVERRIDE_GENCODE" ]]; then
 | 
			
		||||
        export GENCODE=$OVERRIDE_GENCODE
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # all CUDA libs except CuDNN and CuBLAS (cudnn and cublas need arch 3.7 included)
 | 
			
		||||
    ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \
 | 
			
		||||
      | xargs -I {} bash -c \
 | 
			
		||||
                "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}"
 | 
			
		||||
 | 
			
		||||
    # prune CuDNN and CuBLAS
 | 
			
		||||
    $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a
 | 
			
		||||
    $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a
 | 
			
		||||
 | 
			
		||||
    #####################################################################################
 | 
			
		||||
    # CUDA 11.8 prune visual tools
 | 
			
		||||
    #####################################################################################
 | 
			
		||||
    export CUDA_BASE="/usr/local/cuda-11.8/"
 | 
			
		||||
    rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2022.3.0 $CUDA_BASE/nsight-systems-2022.4.2/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prune_121 {
 | 
			
		||||
  echo "Pruning CUDA 12.1"
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  # CUDA 12.1 prune static libs
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
    export NVPRUNE="/usr/local/cuda-12.1/bin/nvprune"
 | 
			
		||||
    export CUDA_LIB_DIR="/usr/local/cuda-12.1/lib64"
 | 
			
		||||
 | 
			
		||||
    export GENCODE="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
    export GENCODE_CUDNN="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
 | 
			
		||||
    if [[ -n "$OVERRIDE_GENCODE" ]]; then
 | 
			
		||||
        export GENCODE=$OVERRIDE_GENCODE
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # all CUDA libs except CuDNN and CuBLAS
 | 
			
		||||
    ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \
 | 
			
		||||
      | xargs -I {} bash -c \
 | 
			
		||||
                "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}"
 | 
			
		||||
 | 
			
		||||
    # prune CuDNN and CuBLAS
 | 
			
		||||
    $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a
 | 
			
		||||
    $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a
 | 
			
		||||
 | 
			
		||||
    #####################################################################################
 | 
			
		||||
    # CUDA 12.1 prune visual tools
 | 
			
		||||
    #####################################################################################
 | 
			
		||||
    export CUDA_BASE="/usr/local/cuda-12.1/"
 | 
			
		||||
    rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2023.1.0 $CUDA_BASE/nsight-systems-2023.1.2/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prune_124 {
 | 
			
		||||
  echo "Pruning CUDA 12.4"
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  # CUDA 12.4 prune static libs
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  export NVPRUNE="/usr/local/cuda-12.4/bin/nvprune"
 | 
			
		||||
  export CUDA_LIB_DIR="/usr/local/cuda-12.4/lib64"
 | 
			
		||||
 | 
			
		||||
  export GENCODE="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
  export GENCODE_CUDNN="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
 | 
			
		||||
  if [[ -n "$OVERRIDE_GENCODE" ]]; then
 | 
			
		||||
      export GENCODE=$OVERRIDE_GENCODE
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -n "$OVERRIDE_GENCODE_CUDNN" ]]; then
 | 
			
		||||
      export GENCODE_CUDNN=$OVERRIDE_GENCODE_CUDNN
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # all CUDA libs except CuDNN and CuBLAS
 | 
			
		||||
  ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \
 | 
			
		||||
      | xargs -I {} bash -c \
 | 
			
		||||
                "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}"
 | 
			
		||||
 | 
			
		||||
  # prune CuDNN and CuBLAS
 | 
			
		||||
  $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a
 | 
			
		||||
  $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a
 | 
			
		||||
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  # CUDA 12.1 prune visual tools
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  export CUDA_BASE="/usr/local/cuda-12.4/"
 | 
			
		||||
  rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2024.1.0 $CUDA_BASE/nsight-systems-2023.4.4/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# idiomatic parameter and option handling in sh
 | 
			
		||||
while test $# -gt 0
 | 
			
		||||
do
 | 
			
		||||
    case "$1" in
 | 
			
		||||
    11.8) install_118; prune_118
 | 
			
		||||
        ;;
 | 
			
		||||
    12.1) install_121; prune_121
 | 
			
		||||
        ;;
 | 
			
		||||
    12.4) install_124; prune_124
 | 
			
		||||
        ;;
 | 
			
		||||
    *) echo "bad argument $1"; exit 1
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    shift
 | 
			
		||||
done
 | 
			
		||||
@ -1,93 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
NCCL_VERSION=v2.21.5-1
 | 
			
		||||
 | 
			
		||||
function install_cusparselt_052 {
 | 
			
		||||
    # cuSparseLt license: https://docs.nvidia.com/cuda/cusparselt/license.html
 | 
			
		||||
    mkdir tmp_cusparselt && pushd tmp_cusparselt
 | 
			
		||||
    wget -q https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-sbsa/libcusparse_lt-linux-sbsa-0.5.2.1-archive.tar.xz
 | 
			
		||||
    tar xf libcusparse_lt-linux-sbsa-0.5.2.1-archive.tar.xz
 | 
			
		||||
    cp -a libcusparse_lt-linux-sbsa-0.5.2.1-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
    cp -a libcusparse_lt-linux-sbsa-0.5.2.1-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
    popd
 | 
			
		||||
    rm -rf tmp_cusparselt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function install_124 {
 | 
			
		||||
  echo "Installing CUDA 12.4 and cuDNN 9.1 and NCCL ${NCCL_VERSION} and cuSparseLt-0.5.2"
 | 
			
		||||
  rm -rf /usr/local/cuda-12.4 /usr/local/cuda
 | 
			
		||||
  # install CUDA 12.4.0 in the same container
 | 
			
		||||
  wget -q https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux_sbsa.run
 | 
			
		||||
  chmod +x cuda_12.4.0_550.54.14_linux_sbsa.run
 | 
			
		||||
  ./cuda_12.4.0_550.54.14_linux_sbsa.run --toolkit --silent
 | 
			
		||||
  rm -f cuda_12.4.0_550.54.14_linux_sbsa.run
 | 
			
		||||
  rm -f /usr/local/cuda && ln -s /usr/local/cuda-12.4 /usr/local/cuda
 | 
			
		||||
 | 
			
		||||
  # cuDNN license: https://developer.nvidia.com/cudnn/license_agreement
 | 
			
		||||
  mkdir tmp_cudnn && cd tmp_cudnn
 | 
			
		||||
  wget -q https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-sbsa/cudnn-linux-sbsa-9.1.0.70_cuda12-archive.tar.xz -O cudnn-linux-sbsa-9.1.0.70_cuda12-archive.tar.xz
 | 
			
		||||
  tar xf cudnn-linux-sbsa-9.1.0.70_cuda12-archive.tar.xz
 | 
			
		||||
  cp -a cudnn-linux-sbsa-9.1.0.70_cuda12-archive/include/* /usr/local/cuda/include/
 | 
			
		||||
  cp -a cudnn-linux-sbsa-9.1.0.70_cuda12-archive/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
  cd ..
 | 
			
		||||
  rm -rf tmp_cudnn
 | 
			
		||||
 | 
			
		||||
  # NCCL license: https://docs.nvidia.com/deeplearning/nccl/#licenses
 | 
			
		||||
  # Follow build: https://github.com/NVIDIA/nccl/tree/master?tab=readme-ov-file#build
 | 
			
		||||
  git clone -b ${NCCL_VERSION} --depth 1 https://github.com/NVIDIA/nccl.git
 | 
			
		||||
  cd nccl && make -j src.build
 | 
			
		||||
  cp -a build/include/* /usr/local/cuda/include/
 | 
			
		||||
  cp -a build/lib/* /usr/local/cuda/lib64/
 | 
			
		||||
  cd ..
 | 
			
		||||
  rm -rf nccl
 | 
			
		||||
 | 
			
		||||
  install_cusparselt_052
 | 
			
		||||
 | 
			
		||||
  ldconfig
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prune_124 {
 | 
			
		||||
  echo "Pruning CUDA 12.4"
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  # CUDA 12.4 prune static libs
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  export NVPRUNE="/usr/local/cuda-12.4/bin/nvprune"
 | 
			
		||||
  export CUDA_LIB_DIR="/usr/local/cuda-12.4/lib64"
 | 
			
		||||
 | 
			
		||||
  export GENCODE="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
  export GENCODE_CUDNN="-gencode arch=compute_50,code=sm_50 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90"
 | 
			
		||||
 | 
			
		||||
  if [[ -n "$OVERRIDE_GENCODE" ]]; then
 | 
			
		||||
      export GENCODE=$OVERRIDE_GENCODE
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # all CUDA libs except CuDNN and CuBLAS
 | 
			
		||||
  ls $CUDA_LIB_DIR/ | grep "\.a" | grep -v "culibos" | grep -v "cudart" | grep -v "cudnn" | grep -v "cublas" | grep -v "metis"  \
 | 
			
		||||
      | xargs -I {} bash -c \
 | 
			
		||||
                "echo {} && $NVPRUNE $GENCODE $CUDA_LIB_DIR/{} -o $CUDA_LIB_DIR/{}"
 | 
			
		||||
 | 
			
		||||
  # prune CuDNN and CuBLAS
 | 
			
		||||
  $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublas_static.a -o $CUDA_LIB_DIR/libcublas_static.a
 | 
			
		||||
  $NVPRUNE $GENCODE_CUDNN $CUDA_LIB_DIR/libcublasLt_static.a -o $CUDA_LIB_DIR/libcublasLt_static.a
 | 
			
		||||
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  # CUDA 12.1 prune visual tools
 | 
			
		||||
  #####################################################################################
 | 
			
		||||
  export CUDA_BASE="/usr/local/cuda-12.4/"
 | 
			
		||||
  rm -rf $CUDA_BASE/libnvvp $CUDA_BASE/nsightee_plugins $CUDA_BASE/nsight-compute-2024.1.0 $CUDA_BASE/nsight-systems-2023.4.4/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# idiomatic parameter and option handling in sh
 | 
			
		||||
while test $# -gt 0
 | 
			
		||||
do
 | 
			
		||||
    case "$1" in
 | 
			
		||||
    12.4) install_124; prune_124
 | 
			
		||||
        ;;
 | 
			
		||||
    *) echo "bad argument $1"; exit 1
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    shift
 | 
			
		||||
done
 | 
			
		||||
@ -37,9 +37,6 @@ install_conda_dependencies() {
 | 
			
		||||
 | 
			
		||||
install_pip_dependencies() {
 | 
			
		||||
  pushd executorch/.ci/docker
 | 
			
		||||
  # Install PyTorch CPU build beforehand to avoid installing the much bigger CUDA
 | 
			
		||||
  # binaries later, ExecuTorch only needs CPU
 | 
			
		||||
  pip_install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
 | 
			
		||||
  # Install all Python dependencies
 | 
			
		||||
  pip_install -r requirements-ci.txt
 | 
			
		||||
  popd
 | 
			
		||||
@ -47,14 +44,13 @@ install_pip_dependencies() {
 | 
			
		||||
 | 
			
		||||
setup_executorch() {
 | 
			
		||||
  pushd executorch
 | 
			
		||||
  # Setup swiftshader and Vulkan SDK which are required to build the Vulkan delegate
 | 
			
		||||
  as_jenkins bash .ci/scripts/setup-vulkan-linux-deps.sh
 | 
			
		||||
  source .ci/scripts/utils.sh
 | 
			
		||||
 | 
			
		||||
  export PYTHON_EXECUTABLE=python
 | 
			
		||||
  export EXECUTORCH_BUILD_PYBIND=ON
 | 
			
		||||
  export CMAKE_ARGS="-DEXECUTORCH_BUILD_XNNPACK=ON -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON"
 | 
			
		||||
  install_flatc_from_source
 | 
			
		||||
  pip_install .
 | 
			
		||||
 | 
			
		||||
  as_jenkins .ci/scripts/setup-linux.sh cmake
 | 
			
		||||
  # Make sure that all the newly generate files are owned by Jenkins
 | 
			
		||||
  chown -R jenkins .
 | 
			
		||||
  popd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh"
 | 
			
		||||
 | 
			
		||||
COMMIT=$(get_pinned_commit halide)
 | 
			
		||||
test -n "$COMMIT"
 | 
			
		||||
 | 
			
		||||
# activate conda to populate CONDA_PREFIX
 | 
			
		||||
test -n "$ANACONDA_PYTHON_VERSION"
 | 
			
		||||
eval "$(conda shell.bash hook)"
 | 
			
		||||
conda activate py_$ANACONDA_PYTHON_VERSION
 | 
			
		||||
 | 
			
		||||
if [ -n "${UBUNTU_VERSION}" ];then
 | 
			
		||||
    apt update
 | 
			
		||||
    apt-get install -y lld liblld-15-dev libpng-dev libjpeg-dev libgl-dev \
 | 
			
		||||
                  libopenblas-dev libeigen3-dev libatlas-base-dev libzstd-dev
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
conda_install numpy scipy imageio cmake ninja
 | 
			
		||||
 | 
			
		||||
git clone --depth 1 --branch release/16.x --recursive https://github.com/llvm/llvm-project.git
 | 
			
		||||
cmake -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
        -DLLVM_ENABLE_PROJECTS="clang" \
 | 
			
		||||
        -DLLVM_TARGETS_TO_BUILD="X86;NVPTX" \
 | 
			
		||||
        -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ASSERTIONS=ON \
 | 
			
		||||
        -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF \
 | 
			
		||||
        -S llvm-project/llvm -B llvm-build -G Ninja
 | 
			
		||||
cmake --build llvm-build
 | 
			
		||||
cmake --install llvm-build --prefix llvm-install
 | 
			
		||||
export LLVM_ROOT=`pwd`/llvm-install
 | 
			
		||||
export LLVM_CONFIG=$LLVM_ROOT/bin/llvm-config
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/halide/Halide.git
 | 
			
		||||
pushd Halide
 | 
			
		||||
git checkout ${COMMIT} && git submodule update --init --recursive
 | 
			
		||||
pip_install -r requirements.txt
 | 
			
		||||
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -S . -B build
 | 
			
		||||
cmake --build build
 | 
			
		||||
test -e ${CONDA_PREFIX}/lib/python3 || ln -s python${ANACONDA_PYTHON_VERSION} ${CONDA_PREFIX}/lib/python3
 | 
			
		||||
cmake --install build --prefix ${CONDA_PREFIX}
 | 
			
		||||
chown -R jenkins ${CONDA_PREFIX}
 | 
			
		||||
popd
 | 
			
		||||
rm -rf Halide llvm-build llvm-project llvm-install
 | 
			
		||||
 | 
			
		||||
python -c "import halide"  # check for errors
 | 
			
		||||
@ -1,23 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
LIBPNG_VERSION=1.6.37
 | 
			
		||||
 | 
			
		||||
mkdir -p libpng
 | 
			
		||||
pushd libpng
 | 
			
		||||
 | 
			
		||||
wget http://download.sourceforge.net/libpng/libpng-$LIBPNG_VERSION.tar.gz
 | 
			
		||||
tar -xvzf libpng-$LIBPNG_VERSION.tar.gz
 | 
			
		||||
 | 
			
		||||
pushd libpng-$LIBPNG_VERSION
 | 
			
		||||
 | 
			
		||||
./configure
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
rm -rf libpng
 | 
			
		||||
@ -1,29 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
set -eou pipefail
 | 
			
		||||
 | 
			
		||||
MAGMA_VERSION="2.5.2"
 | 
			
		||||
 | 
			
		||||
function do_install() {
 | 
			
		||||
    cuda_version=$1
 | 
			
		||||
    cuda_version_nodot=${1/./}
 | 
			
		||||
 | 
			
		||||
    MAGMA_VERSION="2.6.1"
 | 
			
		||||
    magma_archive="magma-cuda${cuda_version_nodot}-${MAGMA_VERSION}-1.tar.bz2"
 | 
			
		||||
 | 
			
		||||
    cuda_dir="/usr/local/cuda-${cuda_version}"
 | 
			
		||||
    (
 | 
			
		||||
        set -x
 | 
			
		||||
        tmp_dir=$(mktemp -d)
 | 
			
		||||
        pushd ${tmp_dir}
 | 
			
		||||
        curl -OLs https://anaconda.org/pytorch/magma-cuda${cuda_version_nodot}/${MAGMA_VERSION}/download/linux-64/${magma_archive}
 | 
			
		||||
        tar -xvf "${magma_archive}"
 | 
			
		||||
        mkdir -p "${cuda_dir}/magma"
 | 
			
		||||
        mv include "${cuda_dir}/magma/include"
 | 
			
		||||
        mv lib "${cuda_dir}/magma/lib"
 | 
			
		||||
        popd
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
do_install $1
 | 
			
		||||
@ -1,137 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
ROCM_VERSION=$1
 | 
			
		||||
 | 
			
		||||
if [[ -z $ROCM_VERSION ]]; then
 | 
			
		||||
    echo "missing ROCM_VERSION"
 | 
			
		||||
    exit 1;
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# To make version comparison easier, create an integer representation.
 | 
			
		||||
save_IFS="$IFS"
 | 
			
		||||
IFS=. ROCM_VERSION_ARRAY=(${ROCM_VERSION})
 | 
			
		||||
IFS="$save_IFS"
 | 
			
		||||
if [[ ${#ROCM_VERSION_ARRAY[@]} == 2 ]]; then
 | 
			
		||||
    ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]}
 | 
			
		||||
    ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]}
 | 
			
		||||
    ROCM_VERSION_PATCH=0
 | 
			
		||||
elif [[ ${#ROCM_VERSION_ARRAY[@]} == 3 ]]; then
 | 
			
		||||
    ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]}
 | 
			
		||||
    ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]}
 | 
			
		||||
    ROCM_VERSION_PATCH=${ROCM_VERSION_ARRAY[2]}
 | 
			
		||||
else
 | 
			
		||||
    echo "Unhandled ROCM_VERSION ${ROCM_VERSION}"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
ROCM_INT=$(($ROCM_VERSION_MAJOR * 10000 + $ROCM_VERSION_MINOR * 100 + $ROCM_VERSION_PATCH))
 | 
			
		||||
 | 
			
		||||
# Install custom MIOpen + COMgr for ROCm >= 4.0.1
 | 
			
		||||
if [[ $ROCM_INT -lt 40001 ]]; then
 | 
			
		||||
    echo "ROCm version < 4.0.1; will not install custom MIOpen"
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Function to retry functions that sometimes timeout or have flaky failures
 | 
			
		||||
retry () {
 | 
			
		||||
    $*  || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Build custom MIOpen to use comgr for offline compilation.
 | 
			
		||||
 | 
			
		||||
## Need a sanitized ROCM_VERSION without patchlevel; patchlevel version 0 must be added to paths.
 | 
			
		||||
ROCM_DOTS=$(echo ${ROCM_VERSION} | tr -d -c '.' | wc -c)
 | 
			
		||||
if [[ ${ROCM_DOTS} == 1 ]]; then
 | 
			
		||||
    ROCM_VERSION_NOPATCH="${ROCM_VERSION}"
 | 
			
		||||
    ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}.0"
 | 
			
		||||
else
 | 
			
		||||
    ROCM_VERSION_NOPATCH="${ROCM_VERSION%.*}"
 | 
			
		||||
    ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# MIOPEN_USE_HIP_KERNELS is a Workaround for COMgr issues
 | 
			
		||||
MIOPEN_CMAKE_COMMON_FLAGS="
 | 
			
		||||
-DMIOPEN_USE_COMGR=ON
 | 
			
		||||
-DMIOPEN_BUILD_DRIVER=OFF
 | 
			
		||||
"
 | 
			
		||||
# Pull MIOpen repo and set DMIOPEN_EMBED_DB based on ROCm version
 | 
			
		||||
if [[ $ROCM_INT -ge 60200 ]] && [[ $ROCM_INT -lt 60300 ]]; then
 | 
			
		||||
    echo "ROCm 6.2 MIOpen does not need any patches, do not build from source"
 | 
			
		||||
    exit 0
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
yum remove -y miopen-hip
 | 
			
		||||
 | 
			
		||||
git clone https://github.com/ROCm/MIOpen -b ${MIOPEN_BRANCH}
 | 
			
		||||
pushd MIOpen
 | 
			
		||||
# remove .git to save disk space since CI runner was running out
 | 
			
		||||
rm -rf .git
 | 
			
		||||
# Don't build MLIR to save docker build time
 | 
			
		||||
# since we are disabling MLIR backend for MIOpen anyway
 | 
			
		||||
if [[ $ROCM_INT -ge 50400 ]] && [[ $ROCM_INT -lt 50500 ]]; then
 | 
			
		||||
    sed -i '/rocMLIR/d' requirements.txt
 | 
			
		||||
elif [[ $ROCM_INT -ge 50200 ]] && [[ $ROCM_INT -lt 50400 ]]; then
 | 
			
		||||
    sed -i '/llvm-project-mlir/d' requirements.txt
 | 
			
		||||
fi
 | 
			
		||||
## MIOpen minimum requirements
 | 
			
		||||
cmake -P install_deps.cmake --minimum
 | 
			
		||||
 | 
			
		||||
# clean up since CI runner was running out of disk space
 | 
			
		||||
rm -rf /tmp/*
 | 
			
		||||
yum clean all
 | 
			
		||||
rm -rf /var/cache/yum
 | 
			
		||||
rm -rf /var/lib/yum/yumdb
 | 
			
		||||
rm -rf /var/lib/yum/history
 | 
			
		||||
 | 
			
		||||
## Build MIOpen
 | 
			
		||||
mkdir -p build
 | 
			
		||||
cd build
 | 
			
		||||
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig CXX=${ROCM_INSTALL_PATH}/llvm/bin/clang++ cmake .. \
 | 
			
		||||
    ${MIOPEN_CMAKE_COMMON_FLAGS} \
 | 
			
		||||
    ${MIOPEN_CMAKE_DB_FLAGS} \
 | 
			
		||||
    -DCMAKE_PREFIX_PATH="${ROCM_INSTALL_PATH}/hip;${ROCM_INSTALL_PATH}"
 | 
			
		||||
make MIOpen -j $(nproc)
 | 
			
		||||
 | 
			
		||||
# Build MIOpen package
 | 
			
		||||
make -j $(nproc) package
 | 
			
		||||
 | 
			
		||||
# clean up since CI runner was running out of disk space
 | 
			
		||||
rm -rf /usr/local/cget
 | 
			
		||||
 | 
			
		||||
yum install -y miopen-*.rpm
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
rm -rf MIOpen
 | 
			
		||||
@ -1,16 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# MKL
 | 
			
		||||
MKL_VERSION=2024.2.0
 | 
			
		||||
 | 
			
		||||
MKLROOT=/opt/intel
 | 
			
		||||
mkdir -p ${MKLROOT}
 | 
			
		||||
pushd /tmp
 | 
			
		||||
 | 
			
		||||
python3 -mpip install wheel
 | 
			
		||||
python3 -mpip download -d . mkl-static==${MKL_VERSION}
 | 
			
		||||
python3 -m wheel unpack mkl_static-${MKL_VERSION}-py2.py3-none-manylinux1_x86_64.whl
 | 
			
		||||
python3 -m wheel unpack mkl_include-${MKL_VERSION}-py2.py3-none-manylinux1_x86_64.whl
 | 
			
		||||
mv mkl_static-${MKL_VERSION}/mkl_static-${MKL_VERSION}.data/data/lib ${MKLROOT}
 | 
			
		||||
mv mkl_include-${MKL_VERSION}/mkl_include-${MKL_VERSION}.data/data/include ${MKLROOT}
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
mkdir -p /usr/local/mnist/
 | 
			
		||||
 | 
			
		||||
cd /usr/local/mnist
 | 
			
		||||
 | 
			
		||||
for img in train-images-idx3-ubyte.gz train-labels-idx1-ubyte.gz t10k-images-idx3-ubyte.gz t10k-labels-idx1-ubyte.gz; do
 | 
			
		||||
  wget -q https://ossci-datasets.s3.amazonaws.com/mnist/$img
 | 
			
		||||
  gzip -d $img
 | 
			
		||||
done
 | 
			
		||||
@ -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
 | 
			
		||||
@ -33,9 +33,7 @@ pip_install coloredlogs packaging
 | 
			
		||||
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
 | 
			
		||||
pip_install onnxscript==0.1.0.dev20240523 --no-deps
 | 
			
		||||
 | 
			
		||||
# Cache the transformers model to be used later by ONNX tests. We need to run the transformers
 | 
			
		||||
# package to download the model. By default, the model is cached at ~/.cache/huggingface/hub/
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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 LTS releases
 | 
			
		||||
 | 
			
		||||
    # Set up the repository. To do this, download the key to the system keyring
 | 
			
		||||
    wget -qO - https://repositories.intel.com/gpu/intel-graphics.key \
 | 
			
		||||
        | 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}/lts/2350 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,35 +51,30 @@ 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 LTS releases
 | 
			
		||||
    dnf config-manager --add-repo \
 | 
			
		||||
        https://repositories.intel.com/gpu/rhel/${VERSION_ID}/lts/2350/unified/intel-gpu-${VERSION_ID}.repo
 | 
			
		||||
    # To add the online network network package repository for the Intel Support Packages
 | 
			
		||||
    tee > /etc/yum.repos.d/intel-for-pytorch-gpu-dev.repo << EOF
 | 
			
		||||
[intel-for-pytorch-gpu-dev]
 | 
			
		||||
name=Intel for Pytorch GPU dev repository
 | 
			
		||||
baseurl=https://yum.repos.intel.com/intel-for-pytorch-gpu-dev
 | 
			
		||||
        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 -y \
 | 
			
		||||
        intel-opencl intel-media intel-mediasdk libmfxgen1 libvpl2\
 | 
			
		||||
@ -91,13 +82,13 @@ EOF
 | 
			
		||||
        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,35 +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 LTS releases
 | 
			
		||||
    zypper addrepo -f -r \
 | 
			
		||||
        https://repositories.intel.com/gpu/sles/${VERSION_SP}/lts/2350/unified/intel-gpu-${VERSION_SP}.repo
 | 
			
		||||
    rpm --import https://repositories.intel.com/gpu/intel-graphics.key
 | 
			
		||||
    # To add the online network network package repository for the Intel Support Packages
 | 
			
		||||
    zypper addrepo https://yum.repos.intel.com/intel-for-pytorch-gpu-dev intel-for-pytorch-gpu-dev
 | 
			
		||||
    rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
 | 
			
		||||
 | 
			
		||||
    # The xpu-smi packages
 | 
			
		||||
    zypper install -y lsb-release flex bison xpu-smi
 | 
			
		||||
    # Compute and Media Runtimes
 | 
			
		||||
    zypper install -y intel-level-zero-gpu level-zero intel-gsc intel-opencl intel-ocloc \
 | 
			
		||||
        intel-media-driver libigfxcmrt7 libvpl2 libvpl-tools libmfxgen1 libmfx1
 | 
			
		||||
    # Development packages
 | 
			
		||||
    zypper install -y libigdfcl-devel intel-igc-cm libigfxcmrt-devel level-zero-devel
 | 
			
		||||
 | 
			
		||||
    # Install Intel Support Packages
 | 
			
		||||
    zypper install -y intel-for-pytorch-gpu-dev intel-pti-dev
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# The installation depends on the base OS
 | 
			
		||||
ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
 | 
			
		||||
@ -142,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,153 +0,0 @@
 | 
			
		||||
# syntax = docker/dockerfile:experimental
 | 
			
		||||
ARG ROCM_VERSION=3.7
 | 
			
		||||
ARG BASE_CUDA_VERSION=11.8
 | 
			
		||||
ARG GPU_IMAGE=amd64/almalinux:8
 | 
			
		||||
FROM quay.io/pypa/manylinux_2_28_x86_64 as base
 | 
			
		||||
 | 
			
		||||
ENV LC_ALL en_US.UTF-8
 | 
			
		||||
ENV LANG en_US.UTF-8
 | 
			
		||||
ENV LANGUAGE en_US.UTF-8
 | 
			
		||||
 | 
			
		||||
ARG DEVTOOLSET_VERSION=11
 | 
			
		||||
RUN yum install -y sudo wget curl perl util-linux xz bzip2 git patch which perl zlib-devel yum-utils gcc-toolset-${DEVTOOLSET_VERSION}-toolchain
 | 
			
		||||
ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH
 | 
			
		||||
ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
 | 
			
		||||
 | 
			
		||||
# cmake-3.18.4 from pip
 | 
			
		||||
RUN yum install -y python3-pip && \
 | 
			
		||||
    python3 -mpip install cmake==3.18.4 && \
 | 
			
		||||
    ln -s /usr/local/bin/cmake /usr/bin/cmake3
 | 
			
		||||
 | 
			
		||||
FROM base as openssl
 | 
			
		||||
# Install openssl (this must precede `build python` step)
 | 
			
		||||
# (In order to have a proper SSL module, Python is compiled
 | 
			
		||||
# against a recent openssl [see env vars above], which is linked
 | 
			
		||||
# statically. We delete openssl afterwards.)
 | 
			
		||||
ADD ./common/install_openssl.sh install_openssl.sh
 | 
			
		||||
RUN bash ./install_openssl.sh && rm install_openssl.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# remove unncessary python versions
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4
 | 
			
		||||
RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6
 | 
			
		||||
RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6
 | 
			
		||||
 | 
			
		||||
FROM base as cuda
 | 
			
		||||
ARG BASE_CUDA_VERSION=11.8
 | 
			
		||||
# Install CUDA
 | 
			
		||||
ADD ./common/install_cuda.sh install_cuda.sh
 | 
			
		||||
RUN bash ./install_cuda.sh ${BASE_CUDA_VERSION} && rm install_cuda.sh
 | 
			
		||||
 | 
			
		||||
FROM base as intel
 | 
			
		||||
# MKL
 | 
			
		||||
ADD ./common/install_mkl.sh install_mkl.sh
 | 
			
		||||
RUN bash ./install_mkl.sh && rm install_mkl.sh
 | 
			
		||||
 | 
			
		||||
FROM base as magma
 | 
			
		||||
ARG BASE_CUDA_VERSION=10.2
 | 
			
		||||
# Install magma
 | 
			
		||||
ADD ./common/install_magma.sh install_magma.sh
 | 
			
		||||
RUN bash ./install_magma.sh ${BASE_CUDA_VERSION} && rm install_magma.sh
 | 
			
		||||
 | 
			
		||||
FROM base as jni
 | 
			
		||||
# Install java jni header
 | 
			
		||||
ADD ./common/install_jni.sh install_jni.sh
 | 
			
		||||
ADD ./java/jni.h jni.h
 | 
			
		||||
RUN bash ./install_jni.sh && rm install_jni.sh
 | 
			
		||||
 | 
			
		||||
FROM base as libpng
 | 
			
		||||
# Install libpng
 | 
			
		||||
ADD ./common/install_libpng.sh install_libpng.sh
 | 
			
		||||
RUN bash ./install_libpng.sh && rm install_libpng.sh
 | 
			
		||||
 | 
			
		||||
FROM ${GPU_IMAGE} as common
 | 
			
		||||
ARG DEVTOOLSET_VERSION=11
 | 
			
		||||
ENV LC_ALL en_US.UTF-8
 | 
			
		||||
ENV LANG en_US.UTF-8
 | 
			
		||||
ENV LANGUAGE en_US.UTF-8
 | 
			
		||||
RUN yum -y install epel-release
 | 
			
		||||
RUN yum -y update
 | 
			
		||||
RUN yum install -y \
 | 
			
		||||
        autoconf \
 | 
			
		||||
        automake \
 | 
			
		||||
        bison \
 | 
			
		||||
        bzip2 \
 | 
			
		||||
        curl \
 | 
			
		||||
        diffutils \
 | 
			
		||||
        file \
 | 
			
		||||
        git \
 | 
			
		||||
        make \
 | 
			
		||||
        patch \
 | 
			
		||||
        perl \
 | 
			
		||||
        unzip \
 | 
			
		||||
        util-linux \
 | 
			
		||||
        wget \
 | 
			
		||||
        which \
 | 
			
		||||
        xz \
 | 
			
		||||
        gcc-toolset-${DEVTOOLSET_VERSION}-toolchain \
 | 
			
		||||
        glibc-langpack-en
 | 
			
		||||
RUN yum install -y \
 | 
			
		||||
    https://repo.ius.io/ius-release-el7.rpm \
 | 
			
		||||
    https://ossci-linux.s3.amazonaws.com/epel-release-7-14.noarch.rpm
 | 
			
		||||
 | 
			
		||||
RUN yum swap -y git git236-core
 | 
			
		||||
# git236+ would refuse to run git commands in repos owned by other users
 | 
			
		||||
# Which causes version check to fail, as pytorch repo is bind-mounted into the image
 | 
			
		||||
# Override this behaviour by treating every folder as safe
 | 
			
		||||
# For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327
 | 
			
		||||
RUN git config --global --add safe.directory "*"
 | 
			
		||||
 | 
			
		||||
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
 | 
			
		||||
# Install LLVM version
 | 
			
		||||
COPY --from=openssl            /opt/openssl                          /opt/openssl
 | 
			
		||||
COPY --from=base               /opt/python                           /opt/python
 | 
			
		||||
COPY --from=base               /opt/_internal                        /opt/_internal
 | 
			
		||||
COPY --from=base               /usr/local/bin/auditwheel             /usr/local/bin/auditwheel
 | 
			
		||||
COPY --from=intel              /opt/intel                            /opt/intel
 | 
			
		||||
COPY --from=base               /usr/local/bin/patchelf               /usr/local/bin/patchelf
 | 
			
		||||
COPY --from=libpng             /usr/local/bin/png*                   /usr/local/bin/
 | 
			
		||||
COPY --from=libpng             /usr/local/bin/libpng*                /usr/local/bin/
 | 
			
		||||
COPY --from=libpng             /usr/local/include/png*               /usr/local/include/
 | 
			
		||||
COPY --from=libpng             /usr/local/include/libpng*            /usr/local/include/
 | 
			
		||||
COPY --from=libpng             /usr/local/lib/libpng*                /usr/local/lib/
 | 
			
		||||
COPY --from=libpng             /usr/local/lib/pkgconfig              /usr/local/lib/pkgconfig
 | 
			
		||||
COPY --from=jni                /usr/local/include/jni.h              /usr/local/include/jni.h
 | 
			
		||||
 | 
			
		||||
FROM common as cpu_final
 | 
			
		||||
ARG BASE_CUDA_VERSION=11.8
 | 
			
		||||
ARG DEVTOOLSET_VERSION=11
 | 
			
		||||
# Ensure the expected devtoolset is used
 | 
			
		||||
ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH
 | 
			
		||||
ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
 | 
			
		||||
 | 
			
		||||
# cmake-3.18.4 from pip
 | 
			
		||||
RUN yum install -y python3-pip && \
 | 
			
		||||
    python3 -mpip install cmake==3.18.4 && \
 | 
			
		||||
    ln -s /usr/local/bin/cmake /usr/bin/cmake3
 | 
			
		||||
 | 
			
		||||
FROM cpu_final as cuda_final
 | 
			
		||||
RUN rm -rf /usr/local/cuda-${BASE_CUDA_VERSION}
 | 
			
		||||
COPY --from=cuda     /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION}
 | 
			
		||||
COPY --from=magma    /usr/local/cuda-${BASE_CUDA_VERSION}  /usr/local/cuda-${BASE_CUDA_VERSION}
 | 
			
		||||
 | 
			
		||||
FROM common as rocm_final
 | 
			
		||||
ARG ROCM_VERSION=3.7
 | 
			
		||||
# Install ROCm
 | 
			
		||||
ADD ./common/install_rocm.sh install_rocm.sh
 | 
			
		||||
RUN bash ./install_rocm.sh ${ROCM_VERSION} && rm install_rocm.sh
 | 
			
		||||
# cmake is already installed inside the rocm base image, but both 2 and 3 exist
 | 
			
		||||
# cmake3 is needed for the later MIOpen custom build, so that step is last.
 | 
			
		||||
RUN yum install -y cmake3 && \
 | 
			
		||||
    rm -f /usr/bin/cmake && \
 | 
			
		||||
    ln -s /usr/bin/cmake3 /usr/bin/cmake
 | 
			
		||||
ADD ./common/install_miopen.sh install_miopen.sh
 | 
			
		||||
RUN bash ./install_miopen.sh ${ROCM_VERSION} && rm install_miopen.sh
 | 
			
		||||
 | 
			
		||||
FROM cpu_final as xpu_final
 | 
			
		||||
# cmake-3.28.4 from pip
 | 
			
		||||
RUN python3 -m pip install --upgrade pip && \
 | 
			
		||||
    python3 -mpip install cmake==3.28.4
 | 
			
		||||
ADD ./common/install_xpu.sh install_xpu.sh
 | 
			
		||||
RUN bash ./install_xpu.sh && rm install_xpu.sh
 | 
			
		||||
RUN pushd /opt/_internal && tar -xJf static-libs-for-embedding-only.tar.xz && popd
 | 
			
		||||
@ -1,57 +0,0 @@
 | 
			
		||||
FROM quay.io/pypa/manylinux_2_28_aarch64 as base
 | 
			
		||||
 | 
			
		||||
# Graviton needs GCC 10 or above for the build. GCC12 is the default version in almalinux-8.
 | 
			
		||||
ARG GCCTOOLSET_VERSION=11
 | 
			
		||||
 | 
			
		||||
# Language variabes
 | 
			
		||||
ENV LC_ALL=en_US.UTF-8
 | 
			
		||||
ENV LANG=en_US.UTF-8
 | 
			
		||||
ENV LANGUAGE=en_US.UTF-8
 | 
			
		||||
 | 
			
		||||
# Installed needed OS packages. This is to support all
 | 
			
		||||
# the binary builds (torch, vision, audio, text, data)
 | 
			
		||||
RUN yum -y install epel-release
 | 
			
		||||
RUN yum -y update
 | 
			
		||||
RUN yum install -y \
 | 
			
		||||
  autoconf \
 | 
			
		||||
  automake \
 | 
			
		||||
  bison \
 | 
			
		||||
  bzip2 \
 | 
			
		||||
  curl \
 | 
			
		||||
  diffutils \
 | 
			
		||||
  file \
 | 
			
		||||
  git \
 | 
			
		||||
  less \
 | 
			
		||||
  libffi-devel \
 | 
			
		||||
  libgomp \
 | 
			
		||||
  make \
 | 
			
		||||
  openssl-devel \
 | 
			
		||||
  patch \
 | 
			
		||||
  perl \
 | 
			
		||||
  unzip \
 | 
			
		||||
  util-linux \
 | 
			
		||||
  wget \
 | 
			
		||||
  which \
 | 
			
		||||
  xz \
 | 
			
		||||
  yasm \
 | 
			
		||||
  zstd \
 | 
			
		||||
  sudo \
 | 
			
		||||
  gcc-toolset-${GCCTOOLSET_VERSION}-toolchain
 | 
			
		||||
 | 
			
		||||
# Ensure the expected devtoolset is used
 | 
			
		||||
ENV PATH=/opt/rh/gcc-toolset-${GCCTOOLSET_VERSION}/root/usr/bin:$PATH
 | 
			
		||||
ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${GCCTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${GCCTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
 | 
			
		||||
 | 
			
		||||
# git236+ would refuse to run git commands in repos owned by other users
 | 
			
		||||
# Which causes version check to fail, as pytorch repo is bind-mounted into the image
 | 
			
		||||
# Override this behaviour by treating every folder as safe
 | 
			
		||||
# For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327
 | 
			
		||||
RUN git config --global --add safe.directory "*"
 | 
			
		||||
 | 
			
		||||
FROM base as final
 | 
			
		||||
 | 
			
		||||
# remove unncessary python versions
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4
 | 
			
		||||
RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6
 | 
			
		||||
RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6
 | 
			
		||||
@ -1,94 +0,0 @@
 | 
			
		||||
FROM quay.io/pypa/manylinux2014_aarch64 as base
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Graviton needs GCC 10 for the build
 | 
			
		||||
ARG DEVTOOLSET_VERSION=10
 | 
			
		||||
 | 
			
		||||
# Language variabes
 | 
			
		||||
ENV LC_ALL=en_US.UTF-8
 | 
			
		||||
ENV LANG=en_US.UTF-8
 | 
			
		||||
ENV LANGUAGE=en_US.UTF-8
 | 
			
		||||
 | 
			
		||||
# Installed needed OS packages. This is to support all
 | 
			
		||||
# the binary builds (torch, vision, audio, text, data)
 | 
			
		||||
RUN yum -y install epel-release
 | 
			
		||||
RUN yum -y update
 | 
			
		||||
RUN yum install -y \
 | 
			
		||||
  autoconf \
 | 
			
		||||
  automake \
 | 
			
		||||
  bison \
 | 
			
		||||
  bzip2 \
 | 
			
		||||
  curl \
 | 
			
		||||
  diffutils \
 | 
			
		||||
  file \
 | 
			
		||||
  git \
 | 
			
		||||
  make \
 | 
			
		||||
  patch \
 | 
			
		||||
  perl \
 | 
			
		||||
  unzip \
 | 
			
		||||
  util-linux \
 | 
			
		||||
  wget \
 | 
			
		||||
  which \
 | 
			
		||||
  xz \
 | 
			
		||||
  yasm \
 | 
			
		||||
  less \
 | 
			
		||||
  zstd \
 | 
			
		||||
  libgomp \
 | 
			
		||||
  sudo \
 | 
			
		||||
  devtoolset-${DEVTOOLSET_VERSION}-gcc \
 | 
			
		||||
  devtoolset-${DEVTOOLSET_VERSION}-gcc-c++ \
 | 
			
		||||
  devtoolset-${DEVTOOLSET_VERSION}-gcc-gfortran \
 | 
			
		||||
  devtoolset-${DEVTOOLSET_VERSION}-binutils
 | 
			
		||||
 | 
			
		||||
# Ensure the expected devtoolset is used
 | 
			
		||||
ENV PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH
 | 
			
		||||
ENV LD_LIBRARY_PATH=/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/devtoolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# git236+ would refuse to run git commands in repos owned by other users
 | 
			
		||||
# Which causes version check to fail, as pytorch repo is bind-mounted into the image
 | 
			
		||||
# Override this behaviour by treating every folder as safe
 | 
			
		||||
# For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327
 | 
			
		||||
RUN git config --global --add safe.directory "*"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# libglfortran.a hack
 | 
			
		||||
#
 | 
			
		||||
# libgfortran.a from quay.io/pypa/manylinux2014_aarch64 is not compiled with -fPIC.
 | 
			
		||||
# This causes __stack_chk_guard@@GLIBC_2.17 on pytorch build. To solve, get
 | 
			
		||||
# ubuntu's libgfortran.a which is compiled with -fPIC
 | 
			
		||||
# NOTE: Need a better way to get this library as Ubuntu's package can be removed by the vender, or changed
 | 
			
		||||
###############################################################################
 | 
			
		||||
RUN cd ~/ \
 | 
			
		||||
  && curl -L -o ~/libgfortran-10-dev.deb http://ports.ubuntu.com/ubuntu-ports/pool/universe/g/gcc-10/libgfortran-10-dev_10.5.0-1ubuntu1_arm64.deb \
 | 
			
		||||
  && ar x ~/libgfortran-10-dev.deb \
 | 
			
		||||
  && tar --use-compress-program=unzstd -xvf data.tar.zst -C ~/ \
 | 
			
		||||
  && cp -f ~/usr/lib/gcc/aarch64-linux-gnu/10/libgfortran.a /opt/rh/devtoolset-10/root/usr/lib/gcc/aarch64-redhat-linux/10/
 | 
			
		||||
 | 
			
		||||
# install cmake
 | 
			
		||||
RUN yum install -y cmake3 && \
 | 
			
		||||
    ln -s /usr/bin/cmake3 /usr/bin/cmake
 | 
			
		||||
 | 
			
		||||
FROM base as openssl
 | 
			
		||||
# Install openssl (this must precede `build python` step)
 | 
			
		||||
# (In order to have a proper SSL module, Python is compiled
 | 
			
		||||
# against a recent openssl [see env vars above], which is linked
 | 
			
		||||
# statically. We delete openssl afterwards.)
 | 
			
		||||
ADD ./common/install_openssl.sh install_openssl.sh
 | 
			
		||||
RUN bash ./install_openssl.sh && rm install_openssl.sh
 | 
			
		||||
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
 | 
			
		||||
 | 
			
		||||
FROM base as openblas
 | 
			
		||||
# Install openblas
 | 
			
		||||
ADD ./common/install_openblas.sh install_openblas.sh
 | 
			
		||||
RUN bash ./install_openblas.sh && rm install_openblas.sh
 | 
			
		||||
 | 
			
		||||
FROM openssl as final
 | 
			
		||||
# remove unncessary python versions
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4
 | 
			
		||||
RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6
 | 
			
		||||
RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6
 | 
			
		||||
COPY --from=openblas     /opt/OpenBLAS/  /opt/OpenBLAS/
 | 
			
		||||
ENV LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH
 | 
			
		||||
@ -1,91 +0,0 @@
 | 
			
		||||
FROM quay.io/pypa/manylinux_2_28_aarch64 as base
 | 
			
		||||
 | 
			
		||||
# Cuda ARM build needs gcc 11
 | 
			
		||||
ARG DEVTOOLSET_VERSION=11
 | 
			
		||||
 | 
			
		||||
# Language variables
 | 
			
		||||
ENV LC_ALL=en_US.UTF-8
 | 
			
		||||
ENV LANG=en_US.UTF-8
 | 
			
		||||
ENV LANGUAGE=en_US.UTF-8
 | 
			
		||||
 | 
			
		||||
# Installed needed OS packages. This is to support all
 | 
			
		||||
# the binary builds (torch, vision, audio, text, data)
 | 
			
		||||
RUN yum -y install epel-release
 | 
			
		||||
RUN yum -y update
 | 
			
		||||
RUN yum install -y \
 | 
			
		||||
  autoconf \
 | 
			
		||||
  automake \
 | 
			
		||||
  bison \
 | 
			
		||||
  bzip2 \
 | 
			
		||||
  curl \
 | 
			
		||||
  diffutils \
 | 
			
		||||
  file \
 | 
			
		||||
  git \
 | 
			
		||||
  make \
 | 
			
		||||
  patch \
 | 
			
		||||
  perl \
 | 
			
		||||
  unzip \
 | 
			
		||||
  util-linux \
 | 
			
		||||
  wget \
 | 
			
		||||
  which \
 | 
			
		||||
  xz \
 | 
			
		||||
  yasm \
 | 
			
		||||
  less \
 | 
			
		||||
  zstd \
 | 
			
		||||
  libgomp \
 | 
			
		||||
  sudo \
 | 
			
		||||
  gcc-toolset-${DEVTOOLSET_VERSION}-toolchain
 | 
			
		||||
 | 
			
		||||
# Ensure the expected devtoolset is used
 | 
			
		||||
ENV PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/bin:$PATH
 | 
			
		||||
ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib64:/opt/rh/gcc-toolset-${DEVTOOLSET_VERSION}/root/usr/lib:$LD_LIBRARY_PATH
 | 
			
		||||
 | 
			
		||||
# git236+ would refuse to run git commands in repos owned by other users
 | 
			
		||||
# Which causes version check to fail, as pytorch repo is bind-mounted into the image
 | 
			
		||||
# Override this behaviour by treating every folder as safe
 | 
			
		||||
# For more details see https://github.com/pytorch/pytorch/issues/78659#issuecomment-1144107327
 | 
			
		||||
RUN git config --global --add safe.directory "*"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FROM base as openssl
 | 
			
		||||
# Install openssl (this must precede `build python` step)
 | 
			
		||||
# (In order to have a proper SSL module, Python is compiled
 | 
			
		||||
# against a recent openssl [see env vars above], which is linked
 | 
			
		||||
# statically. We delete openssl afterwards.)
 | 
			
		||||
ADD ./common/install_openssl.sh install_openssl.sh
 | 
			
		||||
RUN bash ./install_openssl.sh && rm install_openssl.sh
 | 
			
		||||
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
 | 
			
		||||
 | 
			
		||||
FROM openssl as final
 | 
			
		||||
# remove unncessary python versions
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26m /opt/_internal/cpython-2.6.9-ucs2
 | 
			
		||||
RUN rm -rf /opt/python/cp26-cp26mu /opt/_internal/cpython-2.6.9-ucs4
 | 
			
		||||
RUN rm -rf /opt/python/cp33-cp33m /opt/_internal/cpython-3.3.6
 | 
			
		||||
RUN rm -rf /opt/python/cp34-cp34m /opt/_internal/cpython-3.4.6
 | 
			
		||||
 | 
			
		||||
FROM base as cuda
 | 
			
		||||
ARG BASE_CUDA_VERSION
 | 
			
		||||
# Install CUDA
 | 
			
		||||
ADD ./common/install_cuda_aarch64.sh install_cuda_aarch64.sh
 | 
			
		||||
RUN bash ./install_cuda_aarch64.sh ${BASE_CUDA_VERSION} && rm install_cuda_aarch64.sh
 | 
			
		||||
 | 
			
		||||
FROM base as magma
 | 
			
		||||
ARG BASE_CUDA_VERSION
 | 
			
		||||
# Install magma
 | 
			
		||||
ADD ./common/install_magma.sh install_magma.sh
 | 
			
		||||
RUN bash ./install_magma.sh ${BASE_CUDA_VERSION} && rm install_magma.sh
 | 
			
		||||
 | 
			
		||||
FROM base as 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=${GITHUB_REF##*/}
 | 
			
		||||
GIT_COMMIT_SHA=${GITHUB_SHA:-$(git rev-parse HEAD)}
 | 
			
		||||
DOCKER_IMAGE_BRANCH_TAG=${DOCKER_IMAGE}-${GIT_BRANCH_NAME}
 | 
			
		||||
DOCKER_IMAGE_SHA_TAG=${DOCKER_IMAGE}-${GIT_COMMIT_SHA}
 | 
			
		||||
 | 
			
		||||
if [[ "${WITH_PUSH}" == true ]]; then
 | 
			
		||||
    (
 | 
			
		||||
        set -x
 | 
			
		||||
        docker push "${DOCKER_IMAGE}"
 | 
			
		||||
        if [[ -n ${GITHUB_REF} ]]; then
 | 
			
		||||
            docker tag ${DOCKER_IMAGE} ${DOCKER_IMAGE_BRANCH_TAG}
 | 
			
		||||
            docker tag ${DOCKER_IMAGE} ${DOCKER_IMAGE_SHA_TAG}
 | 
			
		||||
            docker push "${DOCKER_IMAGE_BRANCH_TAG}"
 | 
			
		||||
            docker push "${DOCKER_IMAGE_SHA_TAG}"
 | 
			
		||||
        fi
 | 
			
		||||
    )
 | 
			
		||||
fi
 | 
			
		||||
@ -1,131 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Top-level build script called from Dockerfile
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
# Stop at any error, show all commands
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
# openssl version to build, with expected sha256 hash of .tar.gz
 | 
			
		||||
# archive
 | 
			
		||||
OPENSSL_ROOT=openssl-1.1.1l
 | 
			
		||||
OPENSSL_HASH=0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
 | 
			
		||||
DEVTOOLS_HASH=a8ebeb4bed624700f727179e6ef771dafe47651131a00a78b342251415646acc
 | 
			
		||||
PATCHELF_HASH=d9afdff4baeacfbc64861454f368b7f2c15c44d245293f7587bbf726bfe722fb
 | 
			
		||||
CURL_ROOT=curl-7.73.0
 | 
			
		||||
CURL_HASH=cf34fe0b07b800f1c01a499a6e8b2af548f6d0e044dca4a29d88a4bee146d131
 | 
			
		||||
AUTOCONF_ROOT=autoconf-2.69
 | 
			
		||||
AUTOCONF_HASH=954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969
 | 
			
		||||
 | 
			
		||||
# Get build utilities
 | 
			
		||||
MY_DIR=$(dirname "${BASH_SOURCE[0]}")
 | 
			
		||||
source $MY_DIR/build_utils.sh
 | 
			
		||||
 | 
			
		||||
if [ "$(uname -m)" != "s390x" ] ; then
 | 
			
		||||
    # Dependencies for compiling Python that we want to remove from
 | 
			
		||||
    # the final image after compiling Python
 | 
			
		||||
    PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel"
 | 
			
		||||
 | 
			
		||||
    # Libraries that are allowed as part of the manylinux1 profile
 | 
			
		||||
    MANYLINUX1_DEPS="glibc-devel libstdc++-devel glib2-devel libX11-devel libXext-devel libXrender-devel  mesa-libGL-devel libICE-devel libSM-devel ncurses-devel"
 | 
			
		||||
 | 
			
		||||
    # Development tools and libraries
 | 
			
		||||
    yum -y install bzip2 make git patch unzip bison yasm diffutils \
 | 
			
		||||
        automake which file cmake28 \
 | 
			
		||||
        kernel-devel-`uname -r` \
 | 
			
		||||
        ${PYTHON_COMPILE_DEPS}
 | 
			
		||||
else
 | 
			
		||||
    # Dependencies for compiling Python that we want to remove from
 | 
			
		||||
    # the final image after compiling Python
 | 
			
		||||
    PYTHON_COMPILE_DEPS="zlib1g-dev libbz2-dev libncurses-dev libsqlite3-dev libdb-dev libpcap-dev liblzma-dev libffi-dev"
 | 
			
		||||
 | 
			
		||||
    # Libraries that are allowed as part of the manylinux1 profile
 | 
			
		||||
    MANYLINUX1_DEPS="libglib2.0-dev libX11-dev libncurses-dev"
 | 
			
		||||
 | 
			
		||||
    # Development tools and libraries
 | 
			
		||||
    apt install -y bzip2 make git patch unzip diffutils \
 | 
			
		||||
        automake which file cmake \
 | 
			
		||||
        linux-headers-virtual \
 | 
			
		||||
        ${PYTHON_COMPILE_DEPS}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Install newest autoconf
 | 
			
		||||
build_autoconf $AUTOCONF_ROOT $AUTOCONF_HASH
 | 
			
		||||
autoconf --version
 | 
			
		||||
 | 
			
		||||
# Compile the latest Python releases.
 | 
			
		||||
# (In order to have a proper SSL module, Python is compiled
 | 
			
		||||
# against a recent openssl [see env vars above], which is linked
 | 
			
		||||
# statically. We delete openssl afterwards.)
 | 
			
		||||
build_openssl $OPENSSL_ROOT $OPENSSL_HASH
 | 
			
		||||
/build_scripts/install_cpython.sh
 | 
			
		||||
 | 
			
		||||
PY39_BIN=/opt/python/cp39-cp39/bin
 | 
			
		||||
 | 
			
		||||
# Our openssl doesn't know how to find the system CA trust store
 | 
			
		||||
#   (https://github.com/pypa/manylinux/issues/53)
 | 
			
		||||
# And it's not clear how up-to-date that is anyway
 | 
			
		||||
# So let's just use the same one pip and everyone uses
 | 
			
		||||
$PY39_BIN/pip install certifi
 | 
			
		||||
ln -s $($PY39_BIN/python -c 'import certifi; print(certifi.where())') \
 | 
			
		||||
      /opt/_internal/certs.pem
 | 
			
		||||
# If you modify this line you also have to modify the versions in the
 | 
			
		||||
# Dockerfiles:
 | 
			
		||||
export SSL_CERT_FILE=/opt/_internal/certs.pem
 | 
			
		||||
 | 
			
		||||
# Install newest curl
 | 
			
		||||
build_curl $CURL_ROOT $CURL_HASH
 | 
			
		||||
rm -rf /usr/local/include/curl /usr/local/lib/libcurl* /usr/local/lib/pkgconfig/libcurl.pc
 | 
			
		||||
hash -r
 | 
			
		||||
curl --version
 | 
			
		||||
curl-config --features
 | 
			
		||||
 | 
			
		||||
# Install patchelf (latest with unreleased bug fixes)
 | 
			
		||||
curl -sLOk https://nixos.org/releases/patchelf/patchelf-0.10/patchelf-0.10.tar.gz
 | 
			
		||||
# check_sha256sum patchelf-0.9njs2.tar.gz $PATCHELF_HASH
 | 
			
		||||
tar -xzf patchelf-0.10.tar.gz
 | 
			
		||||
(cd patchelf-0.10 && ./configure && make && make install)
 | 
			
		||||
rm -rf patchelf-0.10.tar.gz patchelf-0.10
 | 
			
		||||
 | 
			
		||||
# Install latest pypi release of auditwheel
 | 
			
		||||
$PY39_BIN/pip install auditwheel
 | 
			
		||||
ln -s $PY39_BIN/auditwheel /usr/local/bin/auditwheel
 | 
			
		||||
 | 
			
		||||
# Clean up development headers and other unnecessary stuff for
 | 
			
		||||
# final image
 | 
			
		||||
if [ "$(uname -m)" != "s390x" ] ; then
 | 
			
		||||
    yum -y erase wireless-tools gtk2 libX11 hicolor-icon-theme \
 | 
			
		||||
        avahi freetype bitstream-vera-fonts \
 | 
			
		||||
        ${PYTHON_COMPILE_DEPS} || true > /dev/null 2>&1
 | 
			
		||||
    yum -y install ${MANYLINUX1_DEPS}
 | 
			
		||||
    yum -y clean all > /dev/null 2>&1
 | 
			
		||||
    yum list installed
 | 
			
		||||
else
 | 
			
		||||
    apt purge -y ${PYTHON_COMPILE_DEPS} || true > /dev/null 2>&1
 | 
			
		||||
fi
 | 
			
		||||
# we don't need libpython*.a, and they're many megabytes
 | 
			
		||||
find /opt/_internal -name '*.a' -print0 | xargs -0 rm -f
 | 
			
		||||
# Strip what we can -- and ignore errors, because this just attempts to strip
 | 
			
		||||
# *everything*, including non-ELF files:
 | 
			
		||||
find /opt/_internal -type f -print0 \
 | 
			
		||||
    | xargs -0 -n1 strip --strip-unneeded 2>/dev/null || true
 | 
			
		||||
# We do not need the Python test suites, or indeed the precompiled .pyc and
 | 
			
		||||
# .pyo files. Partially cribbed from:
 | 
			
		||||
#    https://github.com/docker-library/python/blob/master/3.4/slim/Dockerfile
 | 
			
		||||
find /opt/_internal \
 | 
			
		||||
     \( -type d -a -name test -o -name tests \) \
 | 
			
		||||
  -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
 | 
			
		||||
  -print0 | xargs -0 rm -f
 | 
			
		||||
 | 
			
		||||
for PYTHON in /opt/python/*/bin/python; do
 | 
			
		||||
    # Smoke test to make sure that our Pythons work, and do indeed detect as
 | 
			
		||||
    # being manylinux compatible:
 | 
			
		||||
    $PYTHON $MY_DIR/manylinux1-check.py
 | 
			
		||||
    # Make sure that SSL cert checking works
 | 
			
		||||
    $PYTHON $MY_DIR/ssl-check.py
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Fix libc headers to remain compatible with C99 compilers.
 | 
			
		||||
find /usr/include/ -type f -exec sed -i 's/\bextern _*inline_*\b/extern __inline __attribute__ ((__gnu_inline__))/g' {} +
 | 
			
		||||
 | 
			
		||||
# Now we can delete our built SSL
 | 
			
		||||
rm -rf /usr/local/ssl
 | 
			
		||||
@ -1,91 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Helper utilities for build
 | 
			
		||||
# Script used only in CD pipeline
 | 
			
		||||
 | 
			
		||||
OPENSSL_DOWNLOAD_URL=https://www.openssl.org/source/old/1.1.1/
 | 
			
		||||
CURL_DOWNLOAD_URL=https://curl.askapache.com/download
 | 
			
		||||
 | 
			
		||||
AUTOCONF_DOWNLOAD_URL=https://ftp.gnu.org/gnu/autoconf
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function check_var {
 | 
			
		||||
    if [ -z "$1" ]; then
 | 
			
		||||
        echo "required variable not defined"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function do_openssl_build {
 | 
			
		||||
    ./config no-ssl2 no-shared -fPIC --prefix=/usr/local/ssl > /dev/null
 | 
			
		||||
    make > /dev/null
 | 
			
		||||
    make install > /dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function check_sha256sum {
 | 
			
		||||
    local fname=$1
 | 
			
		||||
    check_var ${fname}
 | 
			
		||||
    local sha256=$2
 | 
			
		||||
    check_var ${sha256}
 | 
			
		||||
 | 
			
		||||
    echo "${sha256}  ${fname}" > ${fname}.sha256
 | 
			
		||||
    sha256sum -c ${fname}.sha256
 | 
			
		||||
    rm -f ${fname}.sha256
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function build_openssl {
 | 
			
		||||
    local openssl_fname=$1
 | 
			
		||||
    check_var ${openssl_fname}
 | 
			
		||||
    local openssl_sha256=$2
 | 
			
		||||
    check_var ${openssl_sha256}
 | 
			
		||||
    check_var ${OPENSSL_DOWNLOAD_URL}
 | 
			
		||||
    curl -sLO ${OPENSSL_DOWNLOAD_URL}/${openssl_fname}.tar.gz
 | 
			
		||||
    check_sha256sum ${openssl_fname}.tar.gz ${openssl_sha256}
 | 
			
		||||
    tar -xzf ${openssl_fname}.tar.gz
 | 
			
		||||
    (cd ${openssl_fname} && do_openssl_build)
 | 
			
		||||
    rm -rf ${openssl_fname} ${openssl_fname}.tar.gz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function do_curl_build {
 | 
			
		||||
    LIBS=-ldl ./configure --with-ssl --disable-shared > /dev/null
 | 
			
		||||
    make > /dev/null
 | 
			
		||||
    make install > /dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function build_curl {
 | 
			
		||||
    local curl_fname=$1
 | 
			
		||||
    check_var ${curl_fname}
 | 
			
		||||
    local curl_sha256=$2
 | 
			
		||||
    check_var ${curl_sha256}
 | 
			
		||||
    check_var ${CURL_DOWNLOAD_URL}
 | 
			
		||||
    curl -sLO ${CURL_DOWNLOAD_URL}/${curl_fname}.tar.bz2
 | 
			
		||||
    check_sha256sum ${curl_fname}.tar.bz2 ${curl_sha256}
 | 
			
		||||
    tar -jxf ${curl_fname}.tar.bz2
 | 
			
		||||
    (cd ${curl_fname} && do_curl_build)
 | 
			
		||||
    rm -rf ${curl_fname} ${curl_fname}.tar.bz2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function do_standard_install {
 | 
			
		||||
    ./configure > /dev/null
 | 
			
		||||
    make > /dev/null
 | 
			
		||||
    make install > /dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function build_autoconf {
 | 
			
		||||
    local autoconf_fname=$1
 | 
			
		||||
    check_var ${autoconf_fname}
 | 
			
		||||
    local autoconf_sha256=$2
 | 
			
		||||
    check_var ${autoconf_sha256}
 | 
			
		||||
    check_var ${AUTOCONF_DOWNLOAD_URL}
 | 
			
		||||
    curl -sLO ${AUTOCONF_DOWNLOAD_URL}/${autoconf_fname}.tar.gz
 | 
			
		||||
    check_sha256sum ${autoconf_fname}.tar.gz ${autoconf_sha256}
 | 
			
		||||
    tar -zxf ${autoconf_fname}.tar.gz
 | 
			
		||||
    (cd ${autoconf_fname} && do_standard_install)
 | 
			
		||||
    rm -rf ${autoconf_fname} ${autoconf_fname}.tar.gz
 | 
			
		||||
}
 | 
			
		||||
@ -1,60 +0,0 @@
 | 
			
		||||
# Logic copied from PEP 513
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def is_manylinux1_compatible():
 | 
			
		||||
    # Only Linux, and only x86-64 / i686
 | 
			
		||||
    from distutils.util import get_platform
 | 
			
		||||
 | 
			
		||||
    if get_platform() not in ["linux-x86_64", "linux-i686", "linux-s390x"]:
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    # Check for presence of _manylinux module
 | 
			
		||||
    try:
 | 
			
		||||
        import _manylinux
 | 
			
		||||
 | 
			
		||||
        return bool(_manylinux.manylinux1_compatible)
 | 
			
		||||
    except (ImportError, AttributeError):
 | 
			
		||||
        # Fall through to heuristic check below
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    # Check glibc version. CentOS 5 uses glibc 2.5.
 | 
			
		||||
    return have_compatible_glibc(2, 5)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def have_compatible_glibc(major, minimum_minor):
 | 
			
		||||
    import ctypes
 | 
			
		||||
 | 
			
		||||
    process_namespace = ctypes.CDLL(None)
 | 
			
		||||
    try:
 | 
			
		||||
        gnu_get_libc_version = process_namespace.gnu_get_libc_version
 | 
			
		||||
    except AttributeError:
 | 
			
		||||
        # Symbol doesn't exist -> therefore, we are not linked to
 | 
			
		||||
        # glibc.
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    # Call gnu_get_libc_version, which returns a string like "2.5".
 | 
			
		||||
    gnu_get_libc_version.restype = ctypes.c_char_p
 | 
			
		||||
    version_str = gnu_get_libc_version()
 | 
			
		||||
    # py2 / py3 compatibility:
 | 
			
		||||
    if not isinstance(version_str, str):
 | 
			
		||||
        version_str = version_str.decode("ascii")
 | 
			
		||||
 | 
			
		||||
    # Parse string and check against requested version.
 | 
			
		||||
    version = [int(piece) for piece in version_str.split(".")]
 | 
			
		||||
    assert len(version) == 2
 | 
			
		||||
    if major != version[0]:
 | 
			
		||||
        return False
 | 
			
		||||
    if minimum_minor > version[1]:
 | 
			
		||||
        return False
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if is_manylinux1_compatible():
 | 
			
		||||
    print(f"{sys.executable} is manylinux1 compatible")
 | 
			
		||||
    sys.exit(0)
 | 
			
		||||
else:
 | 
			
		||||
    print(f"{sys.executable} is NOT manylinux1 compatible")
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
# cf. https://github.com/pypa/manylinux/issues/53
 | 
			
		||||
 | 
			
		||||
GOOD_SSL = "https://google.com"
 | 
			
		||||
BAD_SSL = "https://self-signed.badssl.com"
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
print("Testing SSL certificate checking for Python:", sys.version)
 | 
			
		||||
 | 
			
		||||
if sys.version_info[:2] < (2, 7) or sys.version_info[:2] < (3, 4):
 | 
			
		||||
    print("This version never checks SSL certs; skipping tests")
 | 
			
		||||
    sys.exit(0)
 | 
			
		||||
 | 
			
		||||
if sys.version_info[0] >= 3:
 | 
			
		||||
    from urllib.request import urlopen
 | 
			
		||||
 | 
			
		||||
    EXC = OSError
 | 
			
		||||
else:
 | 
			
		||||
    from urllib import urlopen
 | 
			
		||||
 | 
			
		||||
    EXC = IOError
 | 
			
		||||
 | 
			
		||||
print(f"Connecting to {GOOD_SSL} should work")
 | 
			
		||||
urlopen(GOOD_SSL)
 | 
			
		||||
print("...it did, yay.")
 | 
			
		||||
 | 
			
		||||
print(f"Connecting to {BAD_SSL} should fail")
 | 
			
		||||
try:
 | 
			
		||||
    urlopen(BAD_SSL)
 | 
			
		||||
    # If we get here then we failed:
 | 
			
		||||
    print("...it DIDN'T!!!!!11!!1one!")
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
except EXC:
 | 
			
		||||
    print("...it did, yay.")
 | 
			
		||||
@ -85,10 +85,10 @@ librosa>=0.6.2 ; python_version < "3.11"
 | 
			
		||||
#Pinned versions:
 | 
			
		||||
#test that import:
 | 
			
		||||
 | 
			
		||||
mypy==1.10.0
 | 
			
		||||
mypy==1.9.0
 | 
			
		||||
# Pin MyPy version because new errors are likely to appear with each release
 | 
			
		||||
#Description: linter
 | 
			
		||||
#Pinned versions: 1.10.0
 | 
			
		||||
#Pinned versions: 1.9.0
 | 
			
		||||
#test that import: test_typing.py, test_type_hints.py
 | 
			
		||||
 | 
			
		||||
networkx==2.8.8
 | 
			
		||||
@ -134,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,
 | 
			
		||||
@ -306,15 +306,9 @@ pywavelets==1.5.0 ; python_version >= "3.12"
 | 
			
		||||
#Pinned versions: 1.4.1
 | 
			
		||||
#test that import:
 | 
			
		||||
 | 
			
		||||
lxml==5.0.0
 | 
			
		||||
lxml==5.0.0.
 | 
			
		||||
#Description: This is a requirement of unittest-xml-reporting
 | 
			
		||||
 | 
			
		||||
# 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:
 | 
			
		||||
 | 
			
		||||
@ -103,14 +103,6 @@ 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
 | 
			
		||||
 | 
			
		||||
ARG HALIDE
 | 
			
		||||
# Build and install halide
 | 
			
		||||
COPY ./common/install_halide.sh install_halide.sh
 | 
			
		||||
COPY ./common/common_utils.sh common_utils.sh
 | 
			
		||||
COPY ci_commit_pins/halide.txt halide.txt
 | 
			
		||||
RUN if [ -n "${HALIDE}" ]; then bash ./install_halide.sh; fi
 | 
			
		||||
RUN rm install_halide.sh common_utils.sh halide.txt
 | 
			
		||||
 | 
			
		||||
# Install ccache/sccache (do this last, so we get priority in PATH)
 | 
			
		||||
COPY ./common/install_cache.sh install_cache.sh
 | 
			
		||||
ENV PATH /opt/cache/bin:$PATH
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
@ -155,14 +155,6 @@ COPY ci_commit_pins/executorch.txt executorch.txt
 | 
			
		||||
RUN if [ -n "${EXECUTORCH}" ]; then bash ./install_executorch.sh; fi
 | 
			
		||||
RUN rm install_executorch.sh common_utils.sh executorch.txt
 | 
			
		||||
 | 
			
		||||
ARG HALIDE
 | 
			
		||||
# Build and install halide
 | 
			
		||||
COPY ./common/install_halide.sh install_halide.sh
 | 
			
		||||
COPY ./common/common_utils.sh common_utils.sh
 | 
			
		||||
COPY ci_commit_pins/halide.txt halide.txt
 | 
			
		||||
RUN if [ -n "${HALIDE}" ]; then bash ./install_halide.sh; fi
 | 
			
		||||
RUN rm install_halide.sh common_utils.sh halide.txt
 | 
			
		||||
 | 
			
		||||
ARG ONNX
 | 
			
		||||
# Install ONNX dependencies
 | 
			
		||||
COPY ./common/install_onnx.sh ./common/common_utils.sh ./
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -176,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
 | 
			
		||||
@ -231,10 +230,6 @@ if [[ "${BUILD_ENVIRONMENT}" != *android* && "${BUILD_ENVIRONMENT}" != *cuda* ]]
 | 
			
		||||
  export BUILD_STATIC_RUNTIME_BENCHMARK=ON
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "$BUILD_ENVIRONMENT" == *-debug* ]]; then
 | 
			
		||||
  export CMAKE_BUILD_TYPE=RelWithAssert
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Do not change workspace permissions for ROCm CI jobs
 | 
			
		||||
# as it can leave workspace with bad permissions for cancelled jobs
 | 
			
		||||
if [[ "$BUILD_ENVIRONMENT" != *rocm* ]]; then
 | 
			
		||||
@ -289,26 +284,12 @@ else
 | 
			
		||||
        # Which should be backward compatible with Numpy-1.X
 | 
			
		||||
        python -mpip install --pre numpy==2.0.0rc1
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      WERROR=1 python setup.py clean
 | 
			
		||||
 | 
			
		||||
      if [[ "$USE_SPLIT_BUILD" == "true" ]]; then
 | 
			
		||||
        BUILD_LIBTORCH_WHL=1 BUILD_PYTHON_ONLY=0 python setup.py bdist_wheel
 | 
			
		||||
        BUILD_LIBTORCH_WHL=0 BUILD_PYTHON_ONLY=1 python setup.py bdist_wheel --cmake
 | 
			
		||||
      else
 | 
			
		||||
        WERROR=1 python setup.py bdist_wheel
 | 
			
		||||
      fi
 | 
			
		||||
      WERROR=1 python setup.py bdist_wheel
 | 
			
		||||
    else
 | 
			
		||||
      python setup.py clean
 | 
			
		||||
      if [[ "$BUILD_ENVIRONMENT" == *xla* ]]; then
 | 
			
		||||
        source .ci/pytorch/install_cache_xla.sh
 | 
			
		||||
      fi
 | 
			
		||||
      if [[ "$USE_SPLIT_BUILD" == "true" ]]; then
 | 
			
		||||
        echo "USE_SPLIT_BUILD cannot be used with xla or rocm"
 | 
			
		||||
        exit 1
 | 
			
		||||
      else
 | 
			
		||||
        python setup.py bdist_wheel
 | 
			
		||||
      fi
 | 
			
		||||
      python setup.py bdist_wheel
 | 
			
		||||
    fi
 | 
			
		||||
    pip_install_whl "$(echo dist/*.whl)"
 | 
			
		||||
 | 
			
		||||
@ -347,10 +328,9 @@ else
 | 
			
		||||
    CUSTOM_OP_TEST="$PWD/test/custom_operator"
 | 
			
		||||
    python --version
 | 
			
		||||
    SITE_PACKAGES="$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')"
 | 
			
		||||
 | 
			
		||||
    mkdir -p "$CUSTOM_OP_BUILD"
 | 
			
		||||
    pushd "$CUSTOM_OP_BUILD"
 | 
			
		||||
    cmake "$CUSTOM_OP_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch;$SITE_PACKAGES" -DPython_EXECUTABLE="$(which python)" \
 | 
			
		||||
    cmake "$CUSTOM_OP_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch" -DPython_EXECUTABLE="$(which python)" \
 | 
			
		||||
          -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM"
 | 
			
		||||
    make VERBOSE=1
 | 
			
		||||
    popd
 | 
			
		||||
@ -363,7 +343,7 @@ else
 | 
			
		||||
    SITE_PACKAGES="$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')"
 | 
			
		||||
    mkdir -p "$JIT_HOOK_BUILD"
 | 
			
		||||
    pushd "$JIT_HOOK_BUILD"
 | 
			
		||||
    cmake "$JIT_HOOK_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch;$SITE_PACKAGES" -DPython_EXECUTABLE="$(which python)" \
 | 
			
		||||
    cmake "$JIT_HOOK_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch" -DPython_EXECUTABLE="$(which python)" \
 | 
			
		||||
          -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM"
 | 
			
		||||
    make VERBOSE=1
 | 
			
		||||
    popd
 | 
			
		||||
@ -375,7 +355,7 @@ else
 | 
			
		||||
    python --version
 | 
			
		||||
    mkdir -p "$CUSTOM_BACKEND_BUILD"
 | 
			
		||||
    pushd "$CUSTOM_BACKEND_BUILD"
 | 
			
		||||
    cmake "$CUSTOM_BACKEND_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch;$SITE_PACKAGES" -DPython_EXECUTABLE="$(which python)" \
 | 
			
		||||
    cmake "$CUSTOM_BACKEND_TEST" -DCMAKE_PREFIX_PATH="$SITE_PACKAGES/torch" -DPython_EXECUTABLE="$(which python)" \
 | 
			
		||||
          -DCMAKE_MODULE_PATH="$CUSTOM_TEST_MODULE_PATH" -DUSE_ROCM="$CUSTOM_TEST_USE_ROCM"
 | 
			
		||||
    make VERBOSE=1
 | 
			
		||||
    popd
 | 
			
		||||
 | 
			
		||||
@ -56,29 +56,9 @@ function assert_git_not_dirty() {
 | 
			
		||||
function pip_install_whl() {
 | 
			
		||||
  # This is used to install PyTorch and other build artifacts wheel locally
 | 
			
		||||
  # without using any network connection
 | 
			
		||||
 | 
			
		||||
  # Convert the input arguments into an array
 | 
			
		||||
  local args=("$@")
 | 
			
		||||
 | 
			
		||||
  # Check if the first argument contains multiple paths separated by spaces
 | 
			
		||||
  if [[ "${args[0]}" == *" "* ]]; then
 | 
			
		||||
    # Split the string by spaces into an array
 | 
			
		||||
    IFS=' ' read -r -a paths <<< "${args[0]}"
 | 
			
		||||
    # Loop through each path and install individually
 | 
			
		||||
    for path in "${paths[@]}"; do
 | 
			
		||||
      echo "Installing $path"
 | 
			
		||||
      python3 -mpip install --no-index --no-deps "$path"
 | 
			
		||||
    done
 | 
			
		||||
  else
 | 
			
		||||
    # Loop through each argument and install individually
 | 
			
		||||
    for path in "${args[@]}"; do
 | 
			
		||||
      echo "Installing $path"
 | 
			
		||||
      python3 -mpip install --no-index --no-deps "$path"
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
  python3 -mpip install --no-index --no-deps "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function pip_install() {
 | 
			
		||||
  # retry 3 times
 | 
			
		||||
  # old versions of pip don't have the "--progress-bar" flag
 | 
			
		||||
@ -179,7 +159,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 +178,7 @@ function install_torchrec_and_fbgemm() {
 | 
			
		||||
 | 
			
		||||
function clone_pytorch_xla() {
 | 
			
		||||
  if [[ ! -d ./xla ]]; then
 | 
			
		||||
    git clone --recursive --quiet https://github.com/pytorch/xla.git
 | 
			
		||||
    git clone --recursive -b r2.4 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)"
 | 
			
		||||
@ -208,6 +188,28 @@ function clone_pytorch_xla() {
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function checkout_install_torchdeploy() {
 | 
			
		||||
  local commit
 | 
			
		||||
  commit=$(get_pinned_commit multipy)
 | 
			
		||||
  pushd ..
 | 
			
		||||
  git clone --recurse-submodules https://github.com/pytorch/multipy.git
 | 
			
		||||
  pushd multipy
 | 
			
		||||
  git checkout "${commit}"
 | 
			
		||||
  python multipy/runtime/example/generate_examples.py
 | 
			
		||||
  BUILD_CUDA_TESTS=1 pip install -e .
 | 
			
		||||
  popd
 | 
			
		||||
  popd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function test_torch_deploy(){
 | 
			
		||||
 pushd ..
 | 
			
		||||
 pushd multipy
 | 
			
		||||
 ./multipy/runtime/build/test_deploy
 | 
			
		||||
 ./multipy/runtime/build/test_deploy_gpu
 | 
			
		||||
 popd
 | 
			
		||||
 popd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function checkout_install_torchbench() {
 | 
			
		||||
  local commit
 | 
			
		||||
  commit=$(get_pinned_commit torchbench)
 | 
			
		||||
@ -222,8 +224,6 @@ function checkout_install_torchbench() {
 | 
			
		||||
    # to install and test other models
 | 
			
		||||
    python install.py --continue_on_fail
 | 
			
		||||
  fi
 | 
			
		||||
  echo "Print all dependencies after TorchBench is installed"
 | 
			
		||||
  python -mpip freeze
 | 
			
		||||
  popd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,6 @@ from cryptography.hazmat.primitives import hashes, serialization
 | 
			
		||||
from cryptography.hazmat.primitives.asymmetric import rsa
 | 
			
		||||
from cryptography.x509.oid import NameOID
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
temp_dir = mkdtemp()
 | 
			
		||||
print(temp_dir)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,9 +18,8 @@ time python test/run_test.py --verbose -i distributed/test_c10d_gloo
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_c10d_nccl
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_c10d_spawn_gloo
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_c10d_spawn_nccl
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_compute_comm_reordering
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_cuda_p2p
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_store
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_symmetric_memory
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_pg_wrapper
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/rpc/cuda/test_tensorpipe_agent
 | 
			
		||||
# FSDP tests
 | 
			
		||||
@ -44,15 +43,16 @@ time python test/run_test.py --verbose -i distributed/_tensor/test_dtensor_compi
 | 
			
		||||
time python test/run_test.py --verbose -i distributed/test_device_mesh
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,6 @@ import json
 | 
			
		||||
import math
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
parser = argparse.ArgumentParser()
 | 
			
		||||
parser.add_argument(
 | 
			
		||||
    "--test-name", dest="test_name", action="store", required=True, help="test name"
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,6 @@ import sys
 | 
			
		||||
 | 
			
		||||
import numpy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sample_data_list = sys.argv[1:]
 | 
			
		||||
sample_data_list = [float(v.strip()) for v in sample_data_list]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
import json
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
data_file_path = sys.argv[1]
 | 
			
		||||
commit_hash = sys.argv[2]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
log_file_path = sys.argv[1]
 | 
			
		||||
 | 
			
		||||
with open(log_file_path) as f:
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
@ -252,7 +249,9 @@ fi
 | 
			
		||||
# This tests that the debug asserts are working correctly.
 | 
			
		||||
if [[ "$BUILD_ENVIRONMENT" == *-debug* ]]; then
 | 
			
		||||
    echo "We are in debug mode: $BUILD_ENVIRONMENT. Expect the python assertion to fail"
 | 
			
		||||
    (cd test && ! get_exit_code python -c "import torch; torch._C._crash_if_debug_asserts_fail(424242)")
 | 
			
		||||
    # TODO: Enable the check after we setup the build to run debug asserts without having
 | 
			
		||||
    #       to do a full (and slow) debug build
 | 
			
		||||
    # (cd test && ! get_exit_code python -c "import torch; torch._C._crash_if_debug_asserts_fail(424242)")
 | 
			
		||||
elif [[ "$BUILD_ENVIRONMENT" != *-bazel-* ]]; then
 | 
			
		||||
    # Noop when debug is disabled. Skip bazel jobs because torch isn't available there yet.
 | 
			
		||||
    echo "We are not in debug mode: $BUILD_ENVIRONMENT. Expect the assertion to pass"
 | 
			
		||||
@ -265,6 +264,18 @@ elif [[ $TEST_CONFIG == 'nogpu_AVX512' ]]; then
 | 
			
		||||
  export ATEN_CPU_CAPABILITY=avx2
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# temp workarounds for https://github.com/pytorch/pytorch/issues/126692, remove when fixed
 | 
			
		||||
if [[ "$BUILD_ENVIRONMENT" != *-bazel-* ]]; then
 | 
			
		||||
  pushd test
 | 
			
		||||
  CUDA_VERSION=$(python -c "import torch; print(torch.version.cuda)")
 | 
			
		||||
  if [ "$CUDA_VERSION" == "12.4" ]; then
 | 
			
		||||
    ISCUDA124="cu124"
 | 
			
		||||
  else
 | 
			
		||||
    ISCUDA124=""
 | 
			
		||||
  fi
 | 
			
		||||
  popd
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
test_python_legacy_jit() {
 | 
			
		||||
  time python test/run_test.py --include test_jit_legacy test_jit_fuser_legacy --verbose
 | 
			
		||||
  assert_git_not_dirty
 | 
			
		||||
@ -278,9 +289,6 @@ test_python_shard() {
 | 
			
		||||
 | 
			
		||||
  # Bare --include flag is not supported and quoting for lint ends up with flag not being interpreted correctly
 | 
			
		||||
  # shellcheck disable=SC2086
 | 
			
		||||
 | 
			
		||||
  # modify LD_LIBRARY_PATH to ensure it has the conda env.
 | 
			
		||||
  # This set of tests has been shown to be buggy without it for the split-build
 | 
			
		||||
  time python test/run_test.py --exclude-jit-executor --exclude-distributed-tests $INCLUDE_CLAUSE --shard "$1" "$NUM_TEST_SHARDS" --verbose $PYTHON_TEST_EXTRA_OPTION
 | 
			
		||||
 | 
			
		||||
  assert_git_not_dirty
 | 
			
		||||
@ -319,14 +327,14 @@ test_inductor_distributed() {
 | 
			
		||||
  python test/run_test.py -i inductor/test_aot_inductor.py -k test_replicate_on_devices --verbose
 | 
			
		||||
  python test/run_test.py -i 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
 | 
			
		||||
@ -339,34 +347,18 @@ test_inductor_distributed() {
 | 
			
		||||
  assert_git_not_dirty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test_inductor_shard() {
 | 
			
		||||
  if [[ -z "$NUM_TEST_SHARDS" ]]; then
 | 
			
		||||
    echo "NUM_TEST_SHARDS must be defined to run a Python test shard"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
test_inductor() {
 | 
			
		||||
  python tools/dynamo/verify_dynamo.py
 | 
			
		||||
  python test/run_test.py --inductor \
 | 
			
		||||
    --include test_modules test_ops test_ops_gradients test_torch \
 | 
			
		||||
    --shard "$1" "$NUM_TEST_SHARDS" \
 | 
			
		||||
    --verbose
 | 
			
		||||
 | 
			
		||||
  python test/run_test.py --inductor --include test_modules test_ops test_ops_gradients test_torch --verbose
 | 
			
		||||
  # Do not add --inductor for the following inductor unit tests, otherwise we will fail because of nested dynamo state
 | 
			
		||||
  python test/run_test.py \
 | 
			
		||||
    --include inductor/test_torchinductor inductor/test_torchinductor_opinfo inductor/test_aot_inductor \
 | 
			
		||||
    --shard "$1" "$NUM_TEST_SHARDS" \
 | 
			
		||||
    --verbose
 | 
			
		||||
}
 | 
			
		||||
  python test/run_test.py --include inductor/test_torchinductor inductor/test_torchinductor_opinfo inductor/test_aot_inductor --verbose
 | 
			
		||||
 | 
			
		||||
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() {
 | 
			
		||||
@ -384,7 +376,7 @@ test_inductor_cpp_wrapper_abi_compatible() {
 | 
			
		||||
    --output "$TEST_REPORTS_DIR/inductor_cpp_wrapper_training.csv"
 | 
			
		||||
  python benchmarks/dynamo/check_accuracy.py \
 | 
			
		||||
    --actual "$TEST_REPORTS_DIR/inductor_cpp_wrapper_training.csv" \
 | 
			
		||||
    --expected "benchmarks/dynamo/ci_expected_accuracy/inductor_timm_training.csv"
 | 
			
		||||
    --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/inductor_timm_training.csv"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# "Global" flags for inductor benchmarking controlled by TEST_CONFIG
 | 
			
		||||
@ -395,20 +387,7 @@ test_inductor_cpp_wrapper_abi_compatible() {
 | 
			
		||||
# .github/workflows/inductor-perf-test-nightly.yml
 | 
			
		||||
DYNAMO_BENCHMARK_FLAGS=()
 | 
			
		||||
 | 
			
		||||
pr_time_benchmarks() {
 | 
			
		||||
 | 
			
		||||
  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)
 | 
			
		||||
@ -422,7 +401,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* ]]; then
 | 
			
		||||
  DYNAMO_BENCHMARK_FLAGS+=(--device cpu)
 | 
			
		||||
else
 | 
			
		||||
  DYNAMO_BENCHMARK_FLAGS+=(--device cuda)
 | 
			
		||||
@ -446,18 +425,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
 | 
			
		||||
@ -473,56 +440,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
 | 
			
		||||
        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
 | 
			
		||||
@ -559,19 +526,11 @@ test_single_dynamo_benchmark() {
 | 
			
		||||
    test_perf_for_dashboard "$suite" \
 | 
			
		||||
      "${DYNAMO_BENCHMARK_FLAGS[@]}" "$@" "${partition_flags[@]}"
 | 
			
		||||
  else
 | 
			
		||||
    if [[ "${TEST_CONFIG}" == *aot_inductor* && "${TEST_CONFIG}" != *cpu_aot_inductor* ]]; then
 | 
			
		||||
    if [[ "${TEST_CONFIG}" == *aot_inductor* ]]; then
 | 
			
		||||
      # Test AOTInductor with the ABI-compatible mode on CI
 | 
			
		||||
      # This can be removed once the ABI-compatible mode becomes default.
 | 
			
		||||
      # For CPU device, we perfer non ABI-compatible mode on CI when testing AOTInductor.
 | 
			
		||||
      export TORCHINDUCTOR_ABI_COMPATIBLE=1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "${TEST_CONFIG}" == *_avx2* ]]; then
 | 
			
		||||
      TEST_CONFIG=${TEST_CONFIG::-5}
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "${TEST_CONFIG}" == *_avx512* ]]; then
 | 
			
		||||
      TEST_CONFIG=${TEST_CONFIG::-7}
 | 
			
		||||
    fi
 | 
			
		||||
    python "benchmarks/dynamo/$suite.py" \
 | 
			
		||||
      --ci --accuracy --timing --explain \
 | 
			
		||||
      "${DYNAMO_BENCHMARK_FLAGS[@]}" \
 | 
			
		||||
@ -579,10 +538,10 @@ test_single_dynamo_benchmark() {
 | 
			
		||||
      --output "$TEST_REPORTS_DIR/${name}_${suite}.csv"
 | 
			
		||||
    python benchmarks/dynamo/check_accuracy.py \
 | 
			
		||||
      --actual "$TEST_REPORTS_DIR/${name}_$suite.csv" \
 | 
			
		||||
      --expected "benchmarks/dynamo/ci_expected_accuracy/${TEST_CONFIG}_${name}.csv"
 | 
			
		||||
      --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/${TEST_CONFIG}_${name}.csv"
 | 
			
		||||
    python benchmarks/dynamo/check_graph_breaks.py \
 | 
			
		||||
      --actual "$TEST_REPORTS_DIR/${name}_$suite.csv" \
 | 
			
		||||
      --expected "benchmarks/dynamo/ci_expected_accuracy/${TEST_CONFIG}_${name}.csv"
 | 
			
		||||
      --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/${TEST_CONFIG}_${name}.csv"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -591,11 +550,6 @@ test_inductor_micro_benchmark() {
 | 
			
		||||
  python benchmarks/gpt_fast/benchmark.py --output "${TEST_REPORTS_DIR}/gpt_fast_benchmark.csv"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test_inductor_halide() {
 | 
			
		||||
  python test/run_test.py --include inductor/test_halide.py --verbose
 | 
			
		||||
  assert_git_not_dirty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test_dynamo_benchmark() {
 | 
			
		||||
  # Usage: test_dynamo_benchmark huggingface 0
 | 
			
		||||
  TEST_REPORTS_DIR=$(pwd)/test/test-reports
 | 
			
		||||
@ -610,15 +564,11 @@ test_dynamo_benchmark() {
 | 
			
		||||
  elif [[ "${TEST_CONFIG}" == *perf* ]]; then
 | 
			
		||||
    test_single_dynamo_benchmark "dashboard" "$suite" "$shard_id" "$@"
 | 
			
		||||
  else
 | 
			
		||||
    if [[ "${TEST_CONFIG}" == *cpu* ]]; then
 | 
			
		||||
      local dt="float32"
 | 
			
		||||
      if [[ "${TEST_CONFIG}" == *amp* ]]; then
 | 
			
		||||
        dt="amp"
 | 
			
		||||
      fi
 | 
			
		||||
    if [[ "${TEST_CONFIG}" == *cpu_inductor* ]]; then
 | 
			
		||||
      if [[ "${TEST_CONFIG}" == *freezing* ]]; then
 | 
			
		||||
        test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --"$dt" --freezing "$@"
 | 
			
		||||
        test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --float32 --freezing "$@"
 | 
			
		||||
      else
 | 
			
		||||
        test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --"$dt" "$@"
 | 
			
		||||
        test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --float32 "$@"
 | 
			
		||||
      fi
 | 
			
		||||
    elif [[ "${TEST_CONFIG}" == *aot_inductor* ]]; then
 | 
			
		||||
      test_single_dynamo_benchmark "inference" "$suite" "$shard_id" --inference --bfloat16 "$@"
 | 
			
		||||
@ -642,7 +592,7 @@ test_inductor_torchbench_smoketest_perf() {
 | 
			
		||||
    --bfloat16 --inference --inductor --only moco --output "$TEST_REPORTS_DIR/inductor_cpp_wrapper_inference.csv"
 | 
			
		||||
  python benchmarks/dynamo/check_accuracy.py \
 | 
			
		||||
    --actual "$TEST_REPORTS_DIR/inductor_cpp_wrapper_inference.csv" \
 | 
			
		||||
    --expected "benchmarks/dynamo/ci_expected_accuracy/inductor_torchbench_inference.csv"
 | 
			
		||||
    --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/inductor_torchbench_inference.csv"
 | 
			
		||||
 | 
			
		||||
  python benchmarks/dynamo/torchbench.py --device cuda --performance --backend inductor --float16 --training \
 | 
			
		||||
    --batch-size-file "$(realpath benchmarks/dynamo/torchbench_models_list.txt)" --only hf_Bert \
 | 
			
		||||
@ -657,8 +607,13 @@ 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.
 | 
			
		||||
  # 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
 | 
			
		||||
  # Use 4.7 for cuda 12.4, change back to 4.9 after fixing https://github.com/pytorch/pytorch/issues/126692
 | 
			
		||||
  if [ "$CUDA_VERSION" == "12.4" ]; then
 | 
			
		||||
    THRESHOLD=4.7
 | 
			
		||||
  else
 | 
			
		||||
    THRESHOLD=4.9
 | 
			
		||||
  fi
 | 
			
		||||
  python benchmarks/dynamo/check_perf_csv.py -f "$TEST_REPORTS_DIR/inductor_inference_smoketest.csv" -t $THRESHOLD
 | 
			
		||||
 | 
			
		||||
  # Check memory compression ratio for a few models
 | 
			
		||||
  for test in hf_Albert timm_vision_transformer; do
 | 
			
		||||
@ -677,76 +632,52 @@ test_inductor_torchbench_smoketest_perf() {
 | 
			
		||||
      --only $test --output "$TEST_REPORTS_DIR/inductor_warm_start_smoketest_$test.csv"
 | 
			
		||||
    python benchmarks/dynamo/check_accuracy.py \
 | 
			
		||||
      --actual "$TEST_REPORTS_DIR/inductor_warm_start_smoketest_$test.csv" \
 | 
			
		||||
      --expected "benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_training.csv"
 | 
			
		||||
      --expected "benchmarks/dynamo/ci_expected_accuracy/${ISCUDA124}/inductor_huggingface_training.csv"
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test_inductor_get_core_number() {
 | 
			
		||||
  if [[ "${TEST_CONFIG}" == *aarch64 ]]; then
 | 
			
		||||
    echo "$(($(lscpu | grep 'Cluster(s):' | awk '{print $2}') * $(lscpu | grep 'Core(s) per cluster:' | awk '{print $4}')))"
 | 
			
		||||
  else
 | 
			
		||||
    echo "$(($(lscpu | grep 'Socket(s):' | awk '{print $2}') * $(lscpu | grep 'Core(s) per socket:' | awk '{print $4}')))"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test_inductor_set_cpu_affinity(){
 | 
			
		||||
  #set jemalloc
 | 
			
		||||
  JEMALLOC_LIB="$(find /usr/lib -name libjemalloc.so.2)"
 | 
			
		||||
  IOMP_LIB="$(dirname "$(which python)")/../lib/libiomp5.so"
 | 
			
		||||
  export LD_PRELOAD="$JEMALLOC_LIB":"$IOMP_LIB":"$LD_PRELOAD"
 | 
			
		||||
  export MALLOC_CONF="oversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:-1,muzzy_decay_ms:-1"
 | 
			
		||||
  export KMP_AFFINITY=granularity=fine,compact,1,0
 | 
			
		||||
  export KMP_BLOCKTIME=1
 | 
			
		||||
  cores=$(test_inductor_get_core_number)
 | 
			
		||||
  export OMP_NUM_THREADS=$cores
 | 
			
		||||
  end_core=$((cores-1))
 | 
			
		||||
  export TASKSET="taskset -c 0-$end_core"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test_inductor_torchbench_cpu_smoketest_perf(){
 | 
			
		||||
  TEST_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(){
 | 
			
		||||
@ -1060,113 +991,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"
 | 
			
		||||
@ -1340,21 +1169,15 @@ test_executorch() {
 | 
			
		||||
 | 
			
		||||
  pushd /executorch
 | 
			
		||||
 | 
			
		||||
  export PYTHON_EXECUTABLE=python
 | 
			
		||||
  export EXECUTORCH_BUILD_PYBIND=ON
 | 
			
		||||
  export CMAKE_ARGS="-DEXECUTORCH_BUILD_XNNPACK=ON -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON"
 | 
			
		||||
 | 
			
		||||
  # NB: We need to rebuild ExecuTorch runner here because it depends on PyTorch
 | 
			
		||||
  # from the PR
 | 
			
		||||
  # NB: We need to build ExecuTorch runner here and not inside the Docker image
 | 
			
		||||
  # because it depends on PyTorch
 | 
			
		||||
  # shellcheck disable=SC1091
 | 
			
		||||
  source .ci/scripts/setup-linux.sh cmake
 | 
			
		||||
 | 
			
		||||
  echo "Run ExecuTorch unit tests"
 | 
			
		||||
  pytest -v -n auto
 | 
			
		||||
  # shellcheck disable=SC1091
 | 
			
		||||
  LLVM_PROFDATA=llvm-profdata-12 LLVM_COV=llvm-cov-12 bash test/run_oss_cpp_tests.sh
 | 
			
		||||
  source .ci/scripts/utils.sh
 | 
			
		||||
  build_executorch_runner "cmake"
 | 
			
		||||
 | 
			
		||||
  echo "Run ExecuTorch regression tests for some models"
 | 
			
		||||
  # NB: This is a sample model, more can be added here
 | 
			
		||||
  export PYTHON_EXECUTABLE=python
 | 
			
		||||
  # TODO(huydhn): Add more coverage here using ExecuTorch's gather models script
 | 
			
		||||
  # shellcheck disable=SC1091
 | 
			
		||||
  source .ci/scripts/test.sh mv3 cmake xnnpack-quantization-delegation ''
 | 
			
		||||
@ -1392,7 +1215,7 @@ if ! [[ "${BUILD_ENVIRONMENT}" == *libtorch* || "${BUILD_ENVIRONMENT}" == *-baze
 | 
			
		||||
  (cd test && python -c "import torch; print(torch.__config__.show())")
 | 
			
		||||
  (cd test && python -c "import torch; print(torch.__config__.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
 | 
			
		||||
@ -1414,10 +1237,11 @@ elif [[ "$TEST_CONFIG" == distributed ]]; then
 | 
			
		||||
  if [[ "${SHARD_NUMBER}" == 1 ]]; then
 | 
			
		||||
    test_rpc
 | 
			
		||||
  fi
 | 
			
		||||
elif [[ "$TEST_CONFIG" == deploy ]]; then
 | 
			
		||||
  checkout_install_torchdeploy
 | 
			
		||||
  test_torch_deploy
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *inductor_distributed* ]]; then
 | 
			
		||||
  test_inductor_distributed
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *inductor-halide* ]]; then
 | 
			
		||||
  test_inductor_halide
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *inductor-micro-benchmark* ]]; then
 | 
			
		||||
  test_inductor_micro_benchmark
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *huggingface* ]]; then
 | 
			
		||||
@ -1429,14 +1253,13 @@ 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* ]]; then
 | 
			
		||||
    install_torchaudio cpu
 | 
			
		||||
  else
 | 
			
		||||
    install_torchaudio cuda
 | 
			
		||||
  fi
 | 
			
		||||
  install_torchtext
 | 
			
		||||
  install_torchvision
 | 
			
		||||
  TORCH_CUDA_ARCH_LIST="8.0;8.6" pip_install git+https://github.com/pytorch/ao.git
 | 
			
		||||
  id=$((SHARD_NUMBER-1))
 | 
			
		||||
  # https://github.com/opencv/opencv-python/issues/885
 | 
			
		||||
  pip_install opencv-python==4.8.0.74
 | 
			
		||||
@ -1444,9 +1267,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
 | 
			
		||||
@ -1455,7 +1278,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* ]]; then
 | 
			
		||||
      install_torchrec_and_fbgemm
 | 
			
		||||
    fi
 | 
			
		||||
    PYTHONPATH=$(pwd)/torchbench test_dynamo_benchmark torchbench "$id"
 | 
			
		||||
@ -1463,22 +1286,17 @@ elif [[ "${TEST_CONFIG}" == *torchbench* ]]; then
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *inductor_cpp_wrapper_abi_compatible* ]]; then
 | 
			
		||||
  install_torchvision
 | 
			
		||||
  test_inductor_cpp_wrapper_abi_compatible
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *inductor* ]]; then
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *inductor* && "${SHARD_NUMBER}" == 1 ]]; then
 | 
			
		||||
  install_torchvision
 | 
			
		||||
  test_inductor_shard "${SHARD_NUMBER}"
 | 
			
		||||
  if [[ "${SHARD_NUMBER}" == 1 ]]; then
 | 
			
		||||
    if [[ "${BUILD_ENVIRONMENT}" != linux-jammy-py3.8-gcc11-build ]]; then
 | 
			
		||||
      # Temporarily skip test_inductor_aoti due to https://github.com/pytorch/pytorch/issues/130311
 | 
			
		||||
      test_inductor_aoti
 | 
			
		||||
      test_inductor_distributed
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *dynamo* ]]; then
 | 
			
		||||
  test_inductor
 | 
			
		||||
  test_inductor_distributed
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *dynamo* && "${SHARD_NUMBER}" == 1 && $NUM_TEST_SHARDS -gt 1 ]]; then
 | 
			
		||||
  install_torchvision
 | 
			
		||||
  test_dynamo_shard 1
 | 
			
		||||
  test_aten
 | 
			
		||||
elif [[ "${TEST_CONFIG}" == *dynamo* && $SHARD_NUMBER -gt 1 && $NUM_TEST_SHARDS -gt 1 ]]; then
 | 
			
		||||
  install_torchvision
 | 
			
		||||
  test_dynamo_shard "${SHARD_NUMBER}"
 | 
			
		||||
  if [[ "${SHARD_NUMBER}" == 1 ]]; then
 | 
			
		||||
    test_aten
 | 
			
		||||
  fi
 | 
			
		||||
elif [[ "${BUILD_ENVIRONMENT}" == *rocm* && -n "$TESTS_TO_INCLUDE" ]]; then
 | 
			
		||||
  install_torchvision
 | 
			
		||||
  test_python_shard "$SHARD_NUMBER"
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,6 @@ import os
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
COMMON_TESTS = [
 | 
			
		||||
    (
 | 
			
		||||
        "Checking that torch is available",
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,6 @@ import sys
 | 
			
		||||
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Need to import modules that lie on an upward-relative path
 | 
			
		||||
sys.path.append(os.path.join(sys.path[0], ".."))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
@ -95,16 +97,8 @@ if [[ "$PACKAGE_TYPE" == conda ]]; then
 | 
			
		||||
  )
 | 
			
		||||
elif [[ "$PACKAGE_TYPE" != libtorch ]]; then
 | 
			
		||||
  if [[ "\$BUILD_ENVIRONMENT" != *s390x* ]]; then
 | 
			
		||||
    if [[ "$USE_SPLIT_BUILD" == "true" ]]; then
 | 
			
		||||
      pkg_no_python="$(ls -1 /final_pkgs/torch_no_python* | sort |tail -1)"
 | 
			
		||||
      pkg_torch="$(ls -1 /final_pkgs/torch-* | sort |tail -1)"
 | 
			
		||||
      # todo: after folder is populated use the pypi_pkg channel instead
 | 
			
		||||
      pip install "\$pkg_no_python" "\$pkg_torch" --index-url "https://download.pytorch.org/whl/\${CHANNEL}/${DESIRED_CUDA}_pypi_pkg"
 | 
			
		||||
      retry pip install -q numpy protobuf typing-extensions
 | 
			
		||||
    else
 | 
			
		||||
      pip install "\$pkg" --index-url "https://download.pytorch.org/whl/\${CHANNEL}/${DESIRED_CUDA}"
 | 
			
		||||
      retry pip install -q numpy protobuf typing-extensions
 | 
			
		||||
    fi
 | 
			
		||||
    pip install "\$pkg" --index-url "https://download.pytorch.org/whl/\${CHANNEL}/${DESIRED_CUDA}"
 | 
			
		||||
    retry pip install -q numpy protobuf typing-extensions
 | 
			
		||||
  else
 | 
			
		||||
    pip install "\$pkg"
 | 
			
		||||
    retry pip install -q numpy protobuf typing-extensions
 | 
			
		||||
@ -116,18 +110,9 @@ 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
 | 
			
		||||
 | 
			
		||||
# Clean temp files
 | 
			
		||||
cd /builder && git clean -ffdx
 | 
			
		||||
 | 
			
		||||
# =================== The above code will be executed inside Docker container ===================
 | 
			
		||||
EOL
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
@ -33,9 +33,9 @@ if [[ -z "$DOCKER_IMAGE" ]]; then
 | 
			
		||||
  if [[ "$PACKAGE_TYPE" == conda ]]; then
 | 
			
		||||
    export DOCKER_IMAGE="pytorch/conda-cuda"
 | 
			
		||||
  elif [[ "$DESIRED_CUDA" == cpu ]]; then
 | 
			
		||||
    export DOCKER_IMAGE="pytorch/manylinux:cpu"
 | 
			
		||||
    export DOCKER_IMAGE="pytorch/manylinux-cpu"
 | 
			
		||||
  else
 | 
			
		||||
    export DOCKER_IMAGE="pytorch/manylinux-builder:${DESIRED_CUDA:2}"
 | 
			
		||||
    export DOCKER_IMAGE="pytorch/manylinux-cuda${DESIRED_CUDA:2}"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@ -77,7 +77,6 @@ TRITON_VERSION=$(cat $PYTORCH_ROOT/.ci/docker/triton_version.txt)
 | 
			
		||||
# Here PYTORCH_EXTRA_INSTALL_REQUIREMENTS is already set for the all the wheel builds hence append TRITON_CONSTRAINT
 | 
			
		||||
TRITON_CONSTRAINT="platform_system == 'Linux' and platform_machine == 'x86_64' and python_version < '3.13'"
 | 
			
		||||
if [[ "$PACKAGE_TYPE" =~ .*wheel.* &&  -n "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then
 | 
			
		||||
  # Only linux Python < 3.13 are supported wheels for triton
 | 
			
		||||
  TRITON_REQUIREMENT="triton==${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)
 | 
			
		||||
@ -100,18 +99,30 @@ if [[ "$PACKAGE_TYPE" =~ .*wheel.* && -n "$PYTORCH_BUILD_VERSION" && "$PYTORCH_B
 | 
			
		||||
    fi
 | 
			
		||||
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}"
 | 
			
		||||
    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}"
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -z "${PYTORCH_EXTRA_INSTALL_REQUIREMENTS:-}" ]]; then
 | 
			
		||||
        export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${TRITON_REQUIREMENT}"
 | 
			
		||||
    else
 | 
			
		||||
        export PYTORCH_EXTRA_INSTALL_REQUIREMENTS="${PYTORCH_EXTRA_INSTALL_REQUIREMENTS} | ${TRITON_REQUIREMENT}"
 | 
			
		||||
JAVA_HOME=
 | 
			
		||||
BUILD_JNI=OFF
 | 
			
		||||
if [[ "$PACKAGE_TYPE" == libtorch ]]; then
 | 
			
		||||
  POSSIBLE_JAVA_HOMES=()
 | 
			
		||||
  POSSIBLE_JAVA_HOMES+=(/usr/local)
 | 
			
		||||
  POSSIBLE_JAVA_HOMES+=(/usr/lib/jvm/java-8-openjdk-amd64)
 | 
			
		||||
  POSSIBLE_JAVA_HOMES+=(/Library/Java/JavaVirtualMachines/*.jdk/Contents/Home)
 | 
			
		||||
  # Add the Windows-specific JNI path
 | 
			
		||||
  POSSIBLE_JAVA_HOMES+=("$PWD/pytorch/.circleci/windows-jni/")
 | 
			
		||||
  for JH in "${POSSIBLE_JAVA_HOMES[@]}" ; do
 | 
			
		||||
    if [[ -e "$JH/include/jni.h" ]] ; then
 | 
			
		||||
      # Skip if we're not on Windows but haven't found a JAVA_HOME
 | 
			
		||||
      if [[ "$JH" == "$PWD/pytorch/.circleci/windows-jni/" && "$OSTYPE" != "msys" ]] ; then
 | 
			
		||||
        break
 | 
			
		||||
      fi
 | 
			
		||||
      echo "Found jni.h under $JH"
 | 
			
		||||
      JAVA_HOME="$JH"
 | 
			
		||||
      BUILD_JNI=ON
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  if [ -z "$JAVA_HOME" ]; then
 | 
			
		||||
    echo "Did not find jni.h"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cat >"$envfile" <<EOL
 | 
			
		||||
@ -124,7 +135,6 @@ export DESIRED_PYTHON="${DESIRED_PYTHON:-}"
 | 
			
		||||
export DESIRED_CUDA="$DESIRED_CUDA"
 | 
			
		||||
export LIBTORCH_VARIANT="${LIBTORCH_VARIANT:-}"
 | 
			
		||||
export BUILD_PYTHONLESS="${BUILD_PYTHONLESS:-}"
 | 
			
		||||
export USE_SPLIT_BUILD="${USE_SPLIT_BUILD:-}"
 | 
			
		||||
if [[ "${OSTYPE}" == "msys" ]]; then
 | 
			
		||||
  export LIBTORCH_CONFIG="${LIBTORCH_CONFIG:-}"
 | 
			
		||||
  if [[ "${LIBTORCH_CONFIG:-}" == 'debug' ]]; then
 | 
			
		||||
@ -148,6 +158,8 @@ export TORCH_CONDA_BUILD_FOLDER='pytorch-nightly'
 | 
			
		||||
export ANACONDA_USER='pytorch'
 | 
			
		||||
 | 
			
		||||
export USE_FBGEMM=1
 | 
			
		||||
export JAVA_HOME=$JAVA_HOME
 | 
			
		||||
export BUILD_JNI=$BUILD_JNI
 | 
			
		||||
export PIP_UPLOAD_FOLDER="$PIP_UPLOAD_FOLDER"
 | 
			
		||||
export DOCKER_IMAGE="$DOCKER_IMAGE"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,15 +25,6 @@ if [[ "${DRY_RUN}" = "disabled" ]]; then
 | 
			
		||||
  AWS_S3_CP="aws s3 cp"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "${USE_SPLIT_BUILD:-false}" == "true" ]]; then
 | 
			
		||||
  UPLOAD_SUBFOLDER="${UPLOAD_SUBFOLDER}_pypi_pkg"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# this is special build with all dependencies packaged
 | 
			
		||||
if [[ ${BUILD_NAME} == *-full* ]]; then
 | 
			
		||||
  UPLOAD_SUBFOLDER="${UPLOAD_SUBFOLDER}_full"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Sleep 2 minutes between retries for conda upload
 | 
			
		||||
retry () {
 | 
			
		||||
  "$@"  || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@")
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,6 @@ import time
 | 
			
		||||
 | 
			
		||||
import requests
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AZURE_PIPELINE_BASE_URL = "https://aiinfra.visualstudio.com/PyTorch/"
 | 
			
		||||
AZURE_DEVOPS_PAT_BASE64 = os.environ.get("AZURE_DEVOPS_PAT_BASE64_SECRET", "")
 | 
			
		||||
PIPELINE_ID = "911"
 | 
			
		||||
 | 
			
		||||
@ -62,6 +62,4 @@ readability-string-compare,
 | 
			
		||||
'
 | 
			
		||||
HeaderFilterRegex: '^(aten/|c10/|torch/).*$'
 | 
			
		||||
WarningsAsErrors: '*'
 | 
			
		||||
CheckOptions:
 | 
			
		||||
  misc-header-include-cycle.IgnoredFilesList: 'format.h;ivalue.h;custom_class.h;Dict.h;List.h'
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ git submodule sync
 | 
			
		||||
git submodule update --init --recursive
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								.flake8
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								.flake8
									
									
									
									
									
								
							@ -2,12 +2,12 @@
 | 
			
		||||
# NOTE: **Mirror any changes** to this file the [tool.ruff] config in pyproject.toml
 | 
			
		||||
# before we can fully move to use ruff
 | 
			
		||||
enable-extensions = G
 | 
			
		||||
select = B,C,E,F,G,P,SIM1,SIM911,T4,W,B9,TOR0,TOR1,TOR2,TOR9
 | 
			
		||||
select = B,C,E,F,G,P,SIM1,T4,W,B9,TOR0,TOR1,TOR2,TOR9
 | 
			
		||||
max-line-length = 120
 | 
			
		||||
# 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/__init__.py: TOR901
 | 
			
		||||
optional-ascii-coding = True
 | 
			
		||||
exclude =
 | 
			
		||||
    ./.git,
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,3 @@ e6ec0efaf87703c5f889cfc20b29be455885d58d
 | 
			
		||||
a53cda1ddc15336dc1ff0ce1eff2a49cdc5f882e
 | 
			
		||||
# 2024-01-02 clangformat: fused adam #116583
 | 
			
		||||
9dc68d1aa9e554d09344a10fff69f7b50b2d23a0
 | 
			
		||||
# 2024-06-28 enable UFMT in `torch/storage.py`
 | 
			
		||||
d80939e5e9337e8078f11489afefec59fd42f93b
 | 
			
		||||
# 2024-06-28 enable UFMT in `torch.utils.data`
 | 
			
		||||
7cf0b90e49689d45be91aa539fdf54cf2ea8a9a3
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								.github/actionlint.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								.github/actionlint.yaml
									
									
									
									
										vendored
									
									
								
							@ -9,17 +9,14 @@ self-hosted-runner:
 | 
			
		||||
    - linux.large
 | 
			
		||||
    - linux.2xlarge
 | 
			
		||||
    - linux.4xlarge
 | 
			
		||||
    - linux.9xlarge.ephemeral
 | 
			
		||||
    - linux.12xlarge
 | 
			
		||||
    - linux.12xlarge.ephemeral
 | 
			
		||||
    - linux.24xlarge
 | 
			
		||||
    - linux.arm64.2xlarge
 | 
			
		||||
    - linux.arm64.m7g.4xlarge
 | 
			
		||||
    - 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
 | 
			
		||||
@ -30,34 +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.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.nonephemeral
 | 
			
		||||
    - windows.8xlarge.nvidia.gpu
 | 
			
		||||
    - windows.8xlarge.nvidia.gpu.nonephemeral
 | 
			
		||||
@ -75,5 +47,3 @@ self-hosted-runner:
 | 
			
		||||
    - macos-latest-xlarge
 | 
			
		||||
    - macos-13-xlarge
 | 
			
		||||
    - macos-14-xlarge
 | 
			
		||||
    # Organization-wide Intel hosted XPU runners
 | 
			
		||||
    - linux.idc.xpu
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/actions/diskspace-cleanup/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/actions/diskspace-cleanup/action.yml
									
									
									
									
										vendored
									
									
								
							@ -14,14 +14,12 @@ runs:
 | 
			
		||||
    - name: Cleans up diskspace
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        set -ex
 | 
			
		||||
        diskspace_cutoff=${{ inputs.diskspace-cutoff }}
 | 
			
		||||
        docker_root_dir=$(docker info -f '{{.DockerRootDir}}')
 | 
			
		||||
        diskspace=$(df -H --output=pcent ${docker_root_dir} | sed -n 2p | sed 's/%//' | sed 's/ //')
 | 
			
		||||
        diskspace=$(df -H / --output=pcent | sed -n 2p | sed 's/%//' | sed 's/ //')
 | 
			
		||||
        msg="Please file an issue on pytorch/pytorch reporting the faulty runner. Include a link to the runner logs so the runner can be identified"
 | 
			
		||||
        if [[ "$diskspace" -ge "$diskspace_cutoff" ]] ; then
 | 
			
		||||
            docker system prune -af
 | 
			
		||||
            diskspace_new=$(df -H --output=pcent ${docker_root_dir} | sed -n 2p | sed 's/%//' | sed 's/ //')
 | 
			
		||||
            diskspace_new=$(df -H / --output=pcent | sed -n 2p | sed 's/%//' | sed 's/ //')
 | 
			
		||||
            if [[ "$diskspace_new" -gt "$diskspace_cutoff" ]] ; then
 | 
			
		||||
                echo "Error: Available diskspace is less than $diskspace_cutoff percent. Not enough diskspace."
 | 
			
		||||
                echo "$msg"
 | 
			
		||||
 | 
			
		||||
@ -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 }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										207
									
								
								.github/actions/linux-build/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								.github/actions/linux-build/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,207 @@
 | 
			
		||||
name: linux-build
 | 
			
		||||
 | 
			
		||||
inputs:
 | 
			
		||||
  build-environment:
 | 
			
		||||
    required: true
 | 
			
		||||
    description: Top-level label for what's being built/tested.
 | 
			
		||||
  docker-image-name:
 | 
			
		||||
    required: true
 | 
			
		||||
    description: Name of the base docker image to build with.
 | 
			
		||||
  build-generates-artifacts:
 | 
			
		||||
    required: false
 | 
			
		||||
    default: "true"
 | 
			
		||||
    description: If set, upload generated build artifacts.
 | 
			
		||||
  build-with-debug:
 | 
			
		||||
    required: false
 | 
			
		||||
    default: "false"
 | 
			
		||||
    description: If set, build in debug mode.
 | 
			
		||||
  sync-tag:
 | 
			
		||||
    required: false
 | 
			
		||||
    default: ""
 | 
			
		||||
    description: |
 | 
			
		||||
      If this is set, our linter will use this to make sure that every other
 | 
			
		||||
      job with the same `sync-tag` is identical.
 | 
			
		||||
  cuda-arch-list:
 | 
			
		||||
    required: false
 | 
			
		||||
    default: "5.2"
 | 
			
		||||
    description: Runner label to select worker type
 | 
			
		||||
  runner:
 | 
			
		||||
    required: false
 | 
			
		||||
    default: "linux.2xlarge"
 | 
			
		||||
    description: |
 | 
			
		||||
      List of CUDA architectures CI build should target.
 | 
			
		||||
  test-matrix:
 | 
			
		||||
    required: false
 | 
			
		||||
    type: string
 | 
			
		||||
    description: |
 | 
			
		||||
      An option JSON description of what test configs to run later on. This
 | 
			
		||||
      is moved here from the Linux test workflow so that we can apply filter
 | 
			
		||||
      logic using test-config labels earlier and skip unnecessary builds
 | 
			
		||||
  s3-bucket:
 | 
			
		||||
    description: S3 bucket to download artifact
 | 
			
		||||
    required: false
 | 
			
		||||
    default: "gha-artifacts"
 | 
			
		||||
  aws-role-to-assume:
 | 
			
		||||
    description: role to assume for downloading artifacts
 | 
			
		||||
    required: false
 | 
			
		||||
    default: ""
 | 
			
		||||
  GITHUB_TOKEN:
 | 
			
		||||
    description: GitHub token
 | 
			
		||||
    required: true
 | 
			
		||||
  HUGGING_FACE_HUB_TOKEN:
 | 
			
		||||
    description: Hugging Face Hub token
 | 
			
		||||
    required: false
 | 
			
		||||
    default: ""
 | 
			
		||||
outputs:
 | 
			
		||||
  docker-image:
 | 
			
		||||
    value: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
    description: The docker image containing the built PyTorch.
 | 
			
		||||
  test-matrix:
 | 
			
		||||
    value: ${{ steps.filter.outputs.test-matrix }}
 | 
			
		||||
    description: An optional JSON description of what test configs to run later on.
 | 
			
		||||
 | 
			
		||||
runs:
 | 
			
		||||
  using: composite
 | 
			
		||||
  steps:
 | 
			
		||||
    - name: Setup Linux
 | 
			
		||||
      uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
    - name: configure aws credentials
 | 
			
		||||
      uses: aws-actions/configure-aws-credentials@v3
 | 
			
		||||
      if: ${{ inputs.aws-role-to-assume != '' }}
 | 
			
		||||
      with:
 | 
			
		||||
        role-to-assume: ${{ inputs.aws-role-to-assume }}
 | 
			
		||||
        role-session-name: gha-linux-build
 | 
			
		||||
        role-duration-seconds: 10800
 | 
			
		||||
        aws-region: us-east-1
 | 
			
		||||
 | 
			
		||||
    - name: Calculate docker image
 | 
			
		||||
      id: calculate-docker-image
 | 
			
		||||
      uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
      with:
 | 
			
		||||
        docker-image-name: ${{ inputs.docker-image-name }}
 | 
			
		||||
 | 
			
		||||
    - name: Use following to pull public copy of the image
 | 
			
		||||
      id: print-ghcr-mirror
 | 
			
		||||
      env:
 | 
			
		||||
        ECR_DOCKER_IMAGE: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        tag=${ECR_DOCKER_IMAGE##*/}
 | 
			
		||||
        echo "docker pull ghcr.io/pytorch/ci-image:${tag/:/-}"
 | 
			
		||||
 | 
			
		||||
    - name: Pull docker image
 | 
			
		||||
      uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
      with:
 | 
			
		||||
        docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
    - name: Parse ref
 | 
			
		||||
      id: parse-ref
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: .github/scripts/parse_ref.py
 | 
			
		||||
 | 
			
		||||
    - name: Get workflow job id
 | 
			
		||||
      id: get-job-id
 | 
			
		||||
      uses: ./.github/actions/get-workflow-job-id
 | 
			
		||||
      if: always()
 | 
			
		||||
      with:
 | 
			
		||||
        github-token: ${{ inputs.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
    # Apply the filter logic to the build step too if the test-config label is already there
 | 
			
		||||
    - name: Select all requested test configurations (if the test matrix is available)
 | 
			
		||||
      id: filter
 | 
			
		||||
      uses: ./.github/actions/filter-test-configs
 | 
			
		||||
      with:
 | 
			
		||||
        github-token: ${{ inputs.GITHUB_TOKEN }}
 | 
			
		||||
        test-matrix: ${{ inputs.test-matrix }}
 | 
			
		||||
        job-name: ${{ steps.get-job-id.outputs.job-name }}
 | 
			
		||||
 | 
			
		||||
    - name: Download pytest cache
 | 
			
		||||
      uses: ./.github/actions/pytest-cache-download
 | 
			
		||||
      continue-on-error: true
 | 
			
		||||
      with:
 | 
			
		||||
        cache_dir: .pytest_cache
 | 
			
		||||
        job_identifier: ${{ github.workflow }}_${{ inputs.build-environment }}
 | 
			
		||||
        s3_bucket: ${{ inputs.s3-bucket }}
 | 
			
		||||
 | 
			
		||||
    - name: Build
 | 
			
		||||
      if: steps.filter.outputs.is-test-matrix-empty == 'False' || inputs.test-matrix == ''
 | 
			
		||||
      id: build
 | 
			
		||||
      env:
 | 
			
		||||
        BUILD_ENVIRONMENT: ${{ inputs.build-environment }}
 | 
			
		||||
        BRANCH: ${{ steps.parse-ref.outputs.branch }}
 | 
			
		||||
        # TODO duplicated
 | 
			
		||||
        AWS_DEFAULT_REGION: us-east-1
 | 
			
		||||
        PR_NUMBER: ${{ github.event.pull_request.number }}
 | 
			
		||||
        SHA1: ${{ github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
        SCCACHE_BUCKET: ossci-compiler-cache-circleci-v2
 | 
			
		||||
        SCCACHE_S3_KEY_PREFIX: ${{ github.workflow }}
 | 
			
		||||
        XLA_CLANG_CACHE_S3_BUCKET_NAME: ossci-compiler-clang-cache-circleci-xla
 | 
			
		||||
        PR_LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }}
 | 
			
		||||
        TORCH_CUDA_ARCH_LIST: ${{ inputs.cuda-arch-list }}
 | 
			
		||||
        DOCKER_IMAGE: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
        XLA_CUDA: ${{ contains(inputs.build-environment, 'xla') && '0' || '' }}
 | 
			
		||||
        DEBUG: ${{ inputs.build-with-debug == 'true' && '1' || '0' }}
 | 
			
		||||
        OUR_GITHUB_JOB_ID: ${{ steps.get-job-id.outputs.job-id }}
 | 
			
		||||
        HUGGING_FACE_HUB_TOKEN: ${{ inputs.HUGGING_FACE_HUB_TOKEN }}
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        # detached container should get cleaned up by teardown_ec2_linux
 | 
			
		||||
        container_name=$(docker run \
 | 
			
		||||
          -e BUILD_ENVIRONMENT \
 | 
			
		||||
          -e MAX_JOBS="$(nproc --ignore=2)" \
 | 
			
		||||
          -e AWS_DEFAULT_REGION \
 | 
			
		||||
          -e PR_NUMBER \
 | 
			
		||||
          -e SHA1 \
 | 
			
		||||
          -e BRANCH \
 | 
			
		||||
          -e SCCACHE_BUCKET \
 | 
			
		||||
          -e SCCACHE_S3_KEY_PREFIX \
 | 
			
		||||
          -e XLA_CUDA \
 | 
			
		||||
          -e XLA_CLANG_CACHE_S3_BUCKET_NAME \
 | 
			
		||||
          -e SKIP_SCCACHE_INITIALIZATION=1 \
 | 
			
		||||
          -e TORCH_CUDA_ARCH_LIST \
 | 
			
		||||
          -e PR_LABELS \
 | 
			
		||||
          -e OUR_GITHUB_JOB_ID \
 | 
			
		||||
          -e HUGGING_FACE_HUB_TOKEN \
 | 
			
		||||
          --env-file="/tmp/github_env_${GITHUB_RUN_ID}" \
 | 
			
		||||
          --security-opt seccomp=unconfined \
 | 
			
		||||
          --cap-add=SYS_PTRACE \
 | 
			
		||||
          --tty \
 | 
			
		||||
          --detach \
 | 
			
		||||
          --user jenkins \
 | 
			
		||||
          -v "${GITHUB_WORKSPACE}:/var/lib/jenkins/workspace" \
 | 
			
		||||
          -w /var/lib/jenkins/workspace \
 | 
			
		||||
          "${DOCKER_IMAGE}"
 | 
			
		||||
        )
 | 
			
		||||
        docker exec -t "${container_name}" sh -c '.ci/pytorch/build.sh'
 | 
			
		||||
 | 
			
		||||
    - name: Archive artifacts into zip
 | 
			
		||||
      if: inputs.build-generates-artifacts == 'true' && steps.build.outcome != 'skipped'
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        zip -1 -r artifacts.zip dist/ build/custom_test_artifacts build/lib build/bin .additional_ci_files
 | 
			
		||||
 | 
			
		||||
    - name: Store PyTorch Build Artifacts on S3
 | 
			
		||||
      uses: seemethere/upload-artifact-s3@v5
 | 
			
		||||
      if: inputs.build-generates-artifacts == 'true' && steps.build.outcome != 'skipped'
 | 
			
		||||
      with:
 | 
			
		||||
        name: ${{ inputs.build-environment }}
 | 
			
		||||
        retention-days: 14
 | 
			
		||||
        if-no-files-found: error
 | 
			
		||||
        path: artifacts.zip
 | 
			
		||||
        s3-bucket: ${{ inputs.s3-bucket }}
 | 
			
		||||
 | 
			
		||||
    - name: Upload sccache stats
 | 
			
		||||
      if: steps.build.outcome != 'skipped'
 | 
			
		||||
      uses: seemethere/upload-artifact-s3@v5
 | 
			
		||||
      with:
 | 
			
		||||
        s3-prefix: |
 | 
			
		||||
          ${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/artifact
 | 
			
		||||
        retention-days: 365
 | 
			
		||||
        if-no-files-found: warn
 | 
			
		||||
        path: sccache-stats-*.json
 | 
			
		||||
        s3-bucket: ${{ inputs.s3-bucket }}
 | 
			
		||||
 | 
			
		||||
    - name: Teardown Linux
 | 
			
		||||
      uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
      if: always()
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/actions/linux-test/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/actions/linux-test/action.yml
									
									
									
									
										vendored
									
									
								
							@ -167,7 +167,6 @@ runs:
 | 
			
		||||
        REENABLED_ISSUES: ${{ steps.keep-going.outputs.reenabled-issues }}
 | 
			
		||||
        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 }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								.github/actions/setup-linux/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/actions/setup-linux/action.yml
									
									
									
									
										vendored
									
									
								
							@ -59,13 +59,6 @@ runs:
 | 
			
		||||
          aws ecr get-login-password --region "$AWS_DEFAULT_REGION" | docker login --username AWS \
 | 
			
		||||
              --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: |
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								.github/actions/test-pytorch-binary/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/actions/test-pytorch-binary/action.yml
									
									
									
									
										vendored
									
									
								
							@ -26,7 +26,6 @@ runs:
 | 
			
		||||
          -e PYTORCH_FINAL_PACKAGE_DIR \
 | 
			
		||||
          -e PYTORCH_ROOT \
 | 
			
		||||
          -e SKIP_ALL_TESTS \
 | 
			
		||||
          -e USE_SPLIT_BUILD \
 | 
			
		||||
          --tty \
 | 
			
		||||
          --detach \
 | 
			
		||||
          -v "${GITHUB_WORKSPACE}/pytorch:/pytorch" \
 | 
			
		||||
@ -36,8 +35,7 @@ runs:
 | 
			
		||||
          "${DOCKER_IMAGE}"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        echo "CONTAINER_NAME=${container_name}" >> "$GITHUB_ENV"
 | 
			
		||||
        if [[ "${GPU_ARCH_TYPE}" != "rocm" && "${BUILD_ENVIRONMENT}" != "linux-aarch64-binary-manywheel" && "${BUILD_ENVIRONMENT}" != "linux-s390x-binary-manywheel" && "${GPU_ARCH_TYPE}" != "xpu" ]]; then
 | 
			
		||||
        if [[ "${GPU_ARCH_TYPE}" != "rocm" && "${BUILD_ENVIRONMENT}" != "linux-aarch64-binary-manywheel" && "${BUILD_ENVIRONMENT}" != "linux-s390x-binary-manywheel" ]]; then
 | 
			
		||||
          # Propagate download.pytorch.org IP to container. This is only needed on Linux non aarch64 runner
 | 
			
		||||
          grep download.pytorch.org /etc/hosts | docker exec -i "${container_name}" bash -c "/bin/cat >> /etc/hosts"
 | 
			
		||||
        fi
 | 
			
		||||
@ -48,9 +46,10 @@ runs:
 | 
			
		||||
        docker exec -t "${container_name}" bash -c "source ${BINARY_ENV_FILE} && bash -x /run.sh"
 | 
			
		||||
 | 
			
		||||
    - name: Cleanup docker
 | 
			
		||||
      if: always() && (env.BUILD_ENVIRONMENT == 'linux-s390x-binary-manywheel' || env.GPU_ARCH_TYPE == 'xpu')
 | 
			
		||||
      if: always() && env.BUILD_ENVIRONMENT == 'linux-s390x-binary-manywheel'
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        # on s390x or xpu stop the container for clean worker stop
 | 
			
		||||
        # on s390x stop the container for clean worker stop
 | 
			
		||||
        # ignore expansion of "docker ps -q" since it could be empty
 | 
			
		||||
        # shellcheck disable=SC2046
 | 
			
		||||
        docker stop "${{ env.CONTAINER_NAME }}" || true
 | 
			
		||||
        docker stop $(docker ps -q) || true
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/audio.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/audio.txt
									
									
									
									
										vendored
									
									
								
							@ -1 +1 @@
 | 
			
		||||
b3f6f511f2a1082bd56b13a3f6794e7fc3ba4862
 | 
			
		||||
b829e936f7cc61b48149f5f957a451a38bf2a178
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							@ -1 +1 @@
 | 
			
		||||
2eb4a60ed14a38260b85b0c765161f0ce45be6d1
 | 
			
		||||
r2.4
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										197
									
								
								.github/lf-canary-scale-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										197
									
								
								.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,254 +21,107 @@ runner_types:
 | 
			
		||||
    is_ephemeral: false
 | 
			
		||||
    max_available: 1000
 | 
			
		||||
    os: linux
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
@ -295,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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										197
									
								
								.github/lf-scale-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										197
									
								
								.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,254 +21,107 @@ runner_types:
 | 
			
		||||
    is_ephemeral: false
 | 
			
		||||
    max_available: 1000
 | 
			
		||||
    os: linux
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
@ -295,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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										42
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							@ -27,9 +27,11 @@
 | 
			
		||||
  - third_party/onnx
 | 
			
		||||
  - caffe2/python/onnx/**
 | 
			
		||||
  approved_by:
 | 
			
		||||
  - BowenBao
 | 
			
		||||
  - justinchuby
 | 
			
		||||
  - liqunfu
 | 
			
		||||
  - shubhambhokare1
 | 
			
		||||
  - thiagocrepaldi
 | 
			
		||||
  - titaiwangms
 | 
			
		||||
  - wschin
 | 
			
		||||
  - xadupre
 | 
			
		||||
@ -242,7 +244,6 @@
 | 
			
		||||
  - torch/csrc/xpu/**
 | 
			
		||||
  - torch/xpu/**
 | 
			
		||||
  - test/xpu/**
 | 
			
		||||
  - test/test_xpu.py
 | 
			
		||||
  - third_party/xpu.txt
 | 
			
		||||
  - .ci/docker/ci_commit_pins/triton-xpu.txt
 | 
			
		||||
  approved_by:
 | 
			
		||||
@ -286,7 +287,6 @@
 | 
			
		||||
  - test/cpp/dist_autograd/**
 | 
			
		||||
  - test/cpp/rpc/**
 | 
			
		||||
  approved_by:
 | 
			
		||||
  - wconstab
 | 
			
		||||
  - mrshenli
 | 
			
		||||
  - pritamdamania87
 | 
			
		||||
  - zhaojuanmao
 | 
			
		||||
@ -313,25 +313,6 @@
 | 
			
		||||
  - Lint
 | 
			
		||||
  - pull
 | 
			
		||||
 | 
			
		||||
- name: DCP
 | 
			
		||||
  patterns:
 | 
			
		||||
  - torch/distributed/checkpoint/**
 | 
			
		||||
  approved_by:
 | 
			
		||||
  - LucasLLC
 | 
			
		||||
  - fegin
 | 
			
		||||
  - wz337
 | 
			
		||||
  - saumishr
 | 
			
		||||
  - daulet-askarov
 | 
			
		||||
  - pradeepdfb
 | 
			
		||||
  - kirtiteja
 | 
			
		||||
  - mhorowitz
 | 
			
		||||
  - saiteja64
 | 
			
		||||
  mandatory_checks_name:
 | 
			
		||||
  - EasyCLA
 | 
			
		||||
  - Lint
 | 
			
		||||
  - pull
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- name: IDEEP
 | 
			
		||||
  patterns:
 | 
			
		||||
  - third_party/ideep
 | 
			
		||||
@ -395,21 +376,13 @@
 | 
			
		||||
 | 
			
		||||
- name: CPU inductor
 | 
			
		||||
  patterns:
 | 
			
		||||
  - torch/_inductor/mkldnn_ir.py
 | 
			
		||||
  - torch/_inductor/mkldnn_lowerings.py
 | 
			
		||||
  - torch/_inductor/fx_passes/mkldnn_fusion.py
 | 
			
		||||
  - torch/_inductor/fx_passes/quantization.py
 | 
			
		||||
  - torch/_inductor/codegen/cpp_prefix.h
 | 
			
		||||
  - torch/_inductor/codegen/cpp.py
 | 
			
		||||
  - torch/_inductor/codegen/cpp_utils.py
 | 
			
		||||
  - torch/_inductor/codegen/cpp_micro_gemm.py
 | 
			
		||||
  - torch/_inductor/codegen/cpp_template_kernel.py
 | 
			
		||||
  - torch/_inductor/codegen/cpp_template.py
 | 
			
		||||
  - torch/_inductor/codegen/cpp_gemm_template.py
 | 
			
		||||
  - test/inductor/test_mkldnn_pattern_matcher.py
 | 
			
		||||
  - test/inductor/test_cpu_repro.py
 | 
			
		||||
  - test/inductor/test_cpu_repo.py
 | 
			
		||||
  - test/inductor/test_cpu_cpp_wrapper.py
 | 
			
		||||
  - test/inductor/test_cpu_select_algorithm.py
 | 
			
		||||
  - aten/src/ATen/cpu/**
 | 
			
		||||
  - aten/src/ATen/native/quantized/cpu/**
 | 
			
		||||
  - test/quantization/core/test_quantized_op.py
 | 
			
		||||
@ -523,13 +496,6 @@
 | 
			
		||||
  - Skylion007
 | 
			
		||||
  - ngimel
 | 
			
		||||
  - peterbell10
 | 
			
		||||
  - eqy
 | 
			
		||||
  - jansel
 | 
			
		||||
  - jeffdaily
 | 
			
		||||
  - eellison
 | 
			
		||||
  - anijain2305
 | 
			
		||||
  - bdhirsh
 | 
			
		||||
  - zou3519
 | 
			
		||||
  mandatory_checks_name:
 | 
			
		||||
  - EasyCLA
 | 
			
		||||
  - Lint
 | 
			
		||||
@ -544,8 +510,6 @@
 | 
			
		||||
  - ezyang
 | 
			
		||||
  - dzhulgakov
 | 
			
		||||
  - malfet
 | 
			
		||||
  - albanD
 | 
			
		||||
  - ptrblck
 | 
			
		||||
  mandatory_checks_name:
 | 
			
		||||
  - EasyCLA
 | 
			
		||||
  - Lint
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/pytorch-probot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/pytorch-probot.yml
									
									
									
									
										vendored
									
									
								
							@ -6,7 +6,6 @@ ciflow_push_tags:
 | 
			
		||||
- ciflow/binaries_libtorch
 | 
			
		||||
- ciflow/binaries_wheel
 | 
			
		||||
- ciflow/inductor
 | 
			
		||||
- ciflow/inductor-rocm
 | 
			
		||||
- ciflow/inductor-perf-compare
 | 
			
		||||
- ciflow/inductor-micro-benchmark
 | 
			
		||||
- ciflow/inductor-cu124
 | 
			
		||||
@ -27,4 +26,3 @@ retryable_workflows:
 | 
			
		||||
- windows-binary
 | 
			
		||||
labeler_config: labeler.yml
 | 
			
		||||
label_to_label_config: label_to_label.yml
 | 
			
		||||
mergebot: True
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
# iOS simulator requirements
 | 
			
		||||
coremltools==5.0b5
 | 
			
		||||
protobuf==3.20.2
 | 
			
		||||
optree==0.12.1
 | 
			
		||||
optree==0.11.0
 | 
			
		||||
 | 
			
		||||
@ -17,16 +17,16 @@ pytest-xdist==3.3.1
 | 
			
		||||
pytest-rerunfailures==10.3
 | 
			
		||||
pytest-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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							@ -1,5 +1,4 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
import sys
 | 
			
		||||
@ -8,17 +7,12 @@ from subprocess import check_call
 | 
			
		||||
from tempfile import TemporaryDirectory
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SCRIPT_DIR = Path(__file__).parent
 | 
			
		||||
REPO_DIR = SCRIPT_DIR.parent.parent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def read_triton_pin(device: str = "cuda") -> str:
 | 
			
		||||
    triton_file = "triton.txt"
 | 
			
		||||
    if device == "rocm":
 | 
			
		||||
        triton_file = "triton-rocm.txt"
 | 
			
		||||
    elif device == "xpu":
 | 
			
		||||
        triton_file = "triton-xpu.txt"
 | 
			
		||||
def read_triton_pin(rocm_hash: bool = False) -> str:
 | 
			
		||||
    triton_file = "triton.txt" if not rocm_hash else "triton-rocm.txt"
 | 
			
		||||
    with open(REPO_DIR / ".ci" / "docker" / "ci_commit_pins" / triton_file) as f:
 | 
			
		||||
        return f.read().strip()
 | 
			
		||||
 | 
			
		||||
@ -55,7 +49,7 @@ def build_triton(
 | 
			
		||||
    version: str,
 | 
			
		||||
    commit_hash: str,
 | 
			
		||||
    build_conda: bool = False,
 | 
			
		||||
    device: str = "cuda",
 | 
			
		||||
    build_rocm: bool = False,
 | 
			
		||||
    py_version: Optional[str] = None,
 | 
			
		||||
    release: bool = False,
 | 
			
		||||
) -> Path:
 | 
			
		||||
@ -75,14 +69,11 @@ def build_triton(
 | 
			
		||||
        triton_basedir = Path(tmpdir) / "triton"
 | 
			
		||||
        triton_pythondir = triton_basedir / "python"
 | 
			
		||||
        triton_repo = "https://github.com/openai/triton"
 | 
			
		||||
        if device == "rocm":
 | 
			
		||||
        if build_rocm:
 | 
			
		||||
            triton_pkg_name = "pytorch-triton-rocm"
 | 
			
		||||
        elif device == "xpu":
 | 
			
		||||
            triton_pkg_name = "pytorch-triton-xpu"
 | 
			
		||||
            triton_repo = "https://github.com/intel/intel-xpu-backend-for-triton"
 | 
			
		||||
        else:
 | 
			
		||||
            triton_pkg_name = "pytorch-triton"
 | 
			
		||||
        check_call(["git", "clone", triton_repo, "triton"], cwd=tmpdir)
 | 
			
		||||
        check_call(["git", "clone", triton_repo], cwd=tmpdir)
 | 
			
		||||
        if release:
 | 
			
		||||
            ver, rev, patch = version.split(".")
 | 
			
		||||
            check_call(
 | 
			
		||||
@ -149,7 +140,7 @@ def build_triton(
 | 
			
		||||
            expected_version=None,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if device == "rocm":
 | 
			
		||||
        if build_rocm:
 | 
			
		||||
            check_call(
 | 
			
		||||
                [f"{SCRIPT_DIR}/amd/package_triton_wheel.sh"],
 | 
			
		||||
                cwd=triton_basedir,
 | 
			
		||||
@ -164,7 +155,7 @@ def build_triton(
 | 
			
		||||
        whl_path = next(iter((triton_pythondir / "dist").glob("*.whl")))
 | 
			
		||||
        shutil.copy(whl_path, Path.cwd())
 | 
			
		||||
 | 
			
		||||
        if device == "rocm":
 | 
			
		||||
        if build_rocm:
 | 
			
		||||
            check_call(
 | 
			
		||||
                [f"{SCRIPT_DIR}/amd/patch_triton_wheel.sh", Path.cwd()],
 | 
			
		||||
                cwd=triton_basedir,
 | 
			
		||||
@ -179,19 +170,17 @@ def main() -> None:
 | 
			
		||||
    parser = ArgumentParser("Build Triton binaries")
 | 
			
		||||
    parser.add_argument("--release", action="store_true")
 | 
			
		||||
    parser.add_argument("--build-conda", action="store_true")
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        "--device", type=str, default="cuda", choices=["cuda", "rocm", "xpu"]
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument("--build-rocm", action="store_true")
 | 
			
		||||
    parser.add_argument("--py-version", type=str)
 | 
			
		||||
    parser.add_argument("--commit-hash", type=str)
 | 
			
		||||
    parser.add_argument("--triton-version", type=str, default=read_triton_version())
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    build_triton(
 | 
			
		||||
        device=args.device,
 | 
			
		||||
        build_rocm=args.build_rocm,
 | 
			
		||||
        commit_hash=args.commit_hash
 | 
			
		||||
        if args.commit_hash
 | 
			
		||||
        else read_triton_pin(args.device),
 | 
			
		||||
        else read_triton_pin(args.build_rocm),
 | 
			
		||||
        version=args.triton_version,
 | 
			
		||||
        build_conda=args.build_conda,
 | 
			
		||||
        py_version=args.py_version,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/scripts/check_labels.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/scripts/check_labels.py
									
									
									
									
										vendored
									
									
								
							@ -5,6 +5,7 @@ import sys
 | 
			
		||||
from typing import Any
 | 
			
		||||
 | 
			
		||||
from github_utils import gh_delete_comment, gh_post_pr_comment
 | 
			
		||||
 | 
			
		||||
from gitutils import get_git_remote_name, get_git_repo_dir, GitRepo
 | 
			
		||||
from label_utils import has_required_labels, is_label_err_comment, LABEL_ERR_MSG
 | 
			
		||||
from trymerge import GitHubPR
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								.github/scripts/cherry_pick.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								.github/scripts/cherry_pick.py
									
									
									
									
										vendored
									
									
								
							@ -3,10 +3,12 @@
 | 
			
		||||
import json
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
from typing import Any, cast, Dict, List, Optional
 | 
			
		||||
from typing import Any, Optional
 | 
			
		||||
 | 
			
		||||
from urllib.error import HTTPError
 | 
			
		||||
 | 
			
		||||
from github_utils import gh_fetch_url, gh_post_pr_comment, gh_query_issues_by_labels
 | 
			
		||||
from github_utils import gh_fetch_url, gh_post_pr_comment
 | 
			
		||||
 | 
			
		||||
from gitutils import get_git_remote_name, get_git_repo_dir, GitRepo
 | 
			
		||||
from trymerge import get_pr_commit_sha, GitHubPR
 | 
			
		||||
 | 
			
		||||
@ -17,7 +19,6 @@ REQUIRES_ISSUE = {
 | 
			
		||||
    "critical",
 | 
			
		||||
    "fixnewfeature",
 | 
			
		||||
}
 | 
			
		||||
RELEASE_BRANCH_REGEX = re.compile(r"release/(?P<version>.+)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_args() -> Any:
 | 
			
		||||
@ -57,33 +58,6 @@ def get_merge_commit_sha(repo: GitRepo, pr: GitHubPR) -> Optional[str]:
 | 
			
		||||
    return commit_sha if pr.is_closed() else None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_release_version(onto_branch: str) -> Optional[str]:
 | 
			
		||||
    """
 | 
			
		||||
    Return the release version if the target branch is a release branch
 | 
			
		||||
    """
 | 
			
		||||
    m = re.match(RELEASE_BRANCH_REGEX, onto_branch)
 | 
			
		||||
    return m.group("version") if m else ""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_tracker_issues(
 | 
			
		||||
    org: str, project: str, onto_branch: str
 | 
			
		||||
) -> List[Dict[str, Any]]:
 | 
			
		||||
    """
 | 
			
		||||
    Find the tracker issue from the repo. The tracker issue needs to have the title
 | 
			
		||||
    like [VERSION] Release Tracker following the convention on PyTorch
 | 
			
		||||
    """
 | 
			
		||||
    version = get_release_version(onto_branch)
 | 
			
		||||
    if not version:
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    tracker_issues = gh_query_issues_by_labels(org, project, labels=["release tracker"])
 | 
			
		||||
    if not tracker_issues:
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    # Figure out the tracker issue from the list by looking at the title
 | 
			
		||||
    return [issue for issue in tracker_issues if version in issue.get("title", "")]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def cherry_pick(
 | 
			
		||||
    github_actor: str,
 | 
			
		||||
    repo: GitRepo,
 | 
			
		||||
@ -103,49 +77,17 @@ def cherry_pick(
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        org, project = repo.gh_owner_and_name()
 | 
			
		||||
 | 
			
		||||
        cherry_pick_pr = ""
 | 
			
		||||
        if not dry_run:
 | 
			
		||||
            org, project = repo.gh_owner_and_name()
 | 
			
		||||
            cherry_pick_pr = submit_pr(repo, pr, cherry_pick_branch, onto_branch)
 | 
			
		||||
 | 
			
		||||
        tracker_issues_comments = []
 | 
			
		||||
        tracker_issues = get_tracker_issues(org, project, onto_branch)
 | 
			
		||||
        for issue in tracker_issues:
 | 
			
		||||
            issue_number = int(str(issue.get("number", "0")))
 | 
			
		||||
            if not issue_number:
 | 
			
		||||
                continue
 | 
			
		||||
            msg = f"The cherry pick PR is at {cherry_pick_pr}"
 | 
			
		||||
            if fixes:
 | 
			
		||||
                msg += f" and it is linked with issue {fixes}"
 | 
			
		||||
            elif classification in REQUIRES_ISSUE:
 | 
			
		||||
                msg += f" and it is recommended to link a {classification} cherry pick PR with an issue"
 | 
			
		||||
 | 
			
		||||
            res = cast(
 | 
			
		||||
                Dict[str, Any],
 | 
			
		||||
                post_tracker_issue_comment(
 | 
			
		||||
                    org,
 | 
			
		||||
                    project,
 | 
			
		||||
                    issue_number,
 | 
			
		||||
                    pr.pr_num,
 | 
			
		||||
                    cherry_pick_pr,
 | 
			
		||||
                    classification,
 | 
			
		||||
                    fixes,
 | 
			
		||||
                    dry_run,
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            comment_url = res.get("html_url", "")
 | 
			
		||||
            if comment_url:
 | 
			
		||||
                tracker_issues_comments.append(comment_url)
 | 
			
		||||
 | 
			
		||||
        msg = f"The cherry pick PR is at {cherry_pick_pr}"
 | 
			
		||||
        if fixes:
 | 
			
		||||
            msg += f" and it is linked with issue {fixes}."
 | 
			
		||||
        elif classification in REQUIRES_ISSUE:
 | 
			
		||||
            msg += f" and it is recommended to link a {classification} cherry pick PR with an issue."
 | 
			
		||||
 | 
			
		||||
        if tracker_issues_comments:
 | 
			
		||||
            msg += " The following tracker issues are updated:\n"
 | 
			
		||||
            for tracker_issues_comment in tracker_issues_comments:
 | 
			
		||||
                msg += f"* {tracker_issues_comment}\n"
 | 
			
		||||
 | 
			
		||||
        post_pr_comment(org, project, pr.pr_num, msg, dry_run)
 | 
			
		||||
            post_comment(org, project, pr.pr_num, msg)
 | 
			
		||||
 | 
			
		||||
    finally:
 | 
			
		||||
        if current_branch:
 | 
			
		||||
@ -217,9 +159,7 @@ def submit_pr(
 | 
			
		||||
        raise RuntimeError(msg) from error
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def post_pr_comment(
 | 
			
		||||
    org: str, project: str, pr_num: int, msg: str, dry_run: bool = False
 | 
			
		||||
) -> List[Dict[str, Any]]:
 | 
			
		||||
def post_comment(org: str, project: str, pr_num: int, msg: str) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    Post a comment on the PR itself to point to the cherry picking PR when success
 | 
			
		||||
    or print the error when failure
 | 
			
		||||
@ -242,35 +182,7 @@ def post_pr_comment(
 | 
			
		||||
    comment = "\n".join(
 | 
			
		||||
        (f"### Cherry picking #{pr_num}", f"{msg}", "", f"{internal_debugging}")
 | 
			
		||||
    )
 | 
			
		||||
    return gh_post_pr_comment(org, project, pr_num, comment, dry_run)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def post_tracker_issue_comment(
 | 
			
		||||
    org: str,
 | 
			
		||||
    project: str,
 | 
			
		||||
    issue_num: int,
 | 
			
		||||
    pr_num: int,
 | 
			
		||||
    cherry_pick_pr: str,
 | 
			
		||||
    classification: str,
 | 
			
		||||
    fixes: str,
 | 
			
		||||
    dry_run: bool = False,
 | 
			
		||||
) -> List[Dict[str, Any]]:
 | 
			
		||||
    """
 | 
			
		||||
    Post a comment on the tracker issue (if any) to record the cherry pick
 | 
			
		||||
    """
 | 
			
		||||
    comment = "\n".join(
 | 
			
		||||
        (
 | 
			
		||||
            "Link to landed trunk PR (if applicable):",
 | 
			
		||||
            f"* https://github.com/{org}/{project}/pull/{pr_num}",
 | 
			
		||||
            "",
 | 
			
		||||
            "Link to release branch PR:",
 | 
			
		||||
            f"* {cherry_pick_pr}",
 | 
			
		||||
            "",
 | 
			
		||||
            "Criteria Category:",
 | 
			
		||||
            " - ".join((classification.capitalize(), fixes.capitalize())),
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    return gh_post_pr_comment(org, project, issue_num, comment, dry_run)
 | 
			
		||||
    gh_post_pr_comment(org, project, pr_num, comment)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main() -> None:
 | 
			
		||||
@ -302,7 +214,7 @@ def main() -> None:
 | 
			
		||||
 | 
			
		||||
    except RuntimeError as error:
 | 
			
		||||
        if not args.dry_run:
 | 
			
		||||
            post_pr_comment(org, project, pr_num, str(error))
 | 
			
		||||
            post_comment(org, project, pr_num, str(error))
 | 
			
		||||
        else:
 | 
			
		||||
            raise error
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,6 @@ import requests
 | 
			
		||||
import rockset  # type: ignore[import]
 | 
			
		||||
from gitutils import retries_decorator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LOGS_QUERY = """
 | 
			
		||||
with
 | 
			
		||||
    shas as (
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/scripts/collect_ciflow_labels.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/scripts/collect_ciflow_labels.py
									
									
									
									
										vendored
									
									
								
							@ -1,12 +1,10 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from typing import Any, cast, Dict, List, Set
 | 
			
		||||
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GITHUB_DIR = Path(__file__).parent.parent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
import json
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
from enum import Enum
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from typing import NamedTuple, Optional
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/scripts/delete_old_branches.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/scripts/delete_old_branches.py
									
									
									
									
										vendored
									
									
								
							@ -9,7 +9,6 @@ from typing import Any, Callable, Dict, List, Set
 | 
			
		||||
from github_utils import gh_fetch_json_dict, gh_graphql
 | 
			
		||||
from gitutils import GitRepo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SEC_IN_DAY = 24 * 60 * 60
 | 
			
		||||
CLOSED_PR_RETENTION = 30 * SEC_IN_DAY
 | 
			
		||||
NO_PR_RETENTION = 1.5 * 365 * SEC_IN_DAY
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								.github/scripts/drci_mocks.json.gz
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.github/scripts/drci_mocks.json.gz
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							@ -1,6 +1,7 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/scripts/export_pytorch_labels.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/scripts/export_pytorch_labels.py
									
									
									
									
										vendored
									
									
								
							@ -14,6 +14,7 @@ import json
 | 
			
		||||
from typing import Any
 | 
			
		||||
 | 
			
		||||
import boto3  # type: ignore[import]
 | 
			
		||||
 | 
			
		||||
from label_utils import gh_get_labels
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/scripts/filter_test_configs.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/scripts/filter_test_configs.py
									
									
									
									
										vendored
									
									
								
							@ -15,7 +15,6 @@ from urllib.request import Request, urlopen
 | 
			
		||||
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
REENABLE_TEST_REGEX = "(?i)(Close(d|s)?|Resolve(d|s)?|Fix(ed|es)?) (#|https://github.com/pytorch/pytorch/issues/)([0-9]+)"
 | 
			
		||||
 | 
			
		||||
PREFIX = "test-config/"
 | 
			
		||||
@ -39,9 +38,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"
 | 
			
		||||
DISABLED_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/disabled-jobs.json?versionId=tIl0Qo224T_NDVw0dtG4hU1cZJM97inV"
 | 
			
		||||
# and unstable jobs
 | 
			
		||||
UNSTABLE_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/unstable-jobs.json"
 | 
			
		||||
UNSTABLE_JOBS_URL = "https://ossci-metrics.s3.amazonaws.com/unstable-jobs.json?versionId=GPyRZRsOo26Gfk_WjAoNNxEMGXkIxIes"
 | 
			
		||||
 | 
			
		||||
# Some constants used to handle disabled and unstable jobs
 | 
			
		||||
JOB_NAME_SEP = "/"
 | 
			
		||||
@ -505,9 +504,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")
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										69
									
								
								.github/scripts/generate_binary_build_matrix.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								.github/scripts/generate_binary_build_matrix.py
									
									
									
									
										vendored
									
									
								
							@ -8,13 +8,11 @@ architectures:
 | 
			
		||||
    * CPU
 | 
			
		||||
    * Latest CUDA
 | 
			
		||||
    * Latest ROCM
 | 
			
		||||
    * Latest XPU
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
from typing import Dict, List, Optional, Tuple
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CUDA_ARCHES = ["11.8", "12.1", "12.4"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -26,7 +24,6 @@ CUDA_ARCHES_CUDNN_VERSION = {"11.8": "9", "12.1": "9", "12.4": "9"}
 | 
			
		||||
 | 
			
		||||
ROCM_ARCHES = ["6.0", "6.1"]
 | 
			
		||||
 | 
			
		||||
XPU_ARCHES = ["xpu"]
 | 
			
		||||
 | 
			
		||||
CPU_CXX11_ABI_ARCH = ["cpu-cxx11-abi"]
 | 
			
		||||
 | 
			
		||||
@ -51,7 +48,7 @@ PYTORCH_EXTRA_INSTALL_REQUIREMENTS = {
 | 
			
		||||
        "nvidia-curand-cu11==10.3.0.86; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-cusolver-cu11==11.4.1.48; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-cusparse-cu11==11.7.5.86; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-nccl-cu11==2.21.5; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-nccl-cu11==2.20.5; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-nvtx-cu11==11.8.86; platform_system == 'Linux' and platform_machine == 'x86_64'"
 | 
			
		||||
    ),
 | 
			
		||||
    "12.1": (
 | 
			
		||||
@ -64,7 +61,7 @@ PYTORCH_EXTRA_INSTALL_REQUIREMENTS = {
 | 
			
		||||
        "nvidia-curand-cu12==10.3.2.106; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-cusolver-cu12==11.4.5.107; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-cusparse-cu12==12.1.0.106; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-nccl-cu12==2.21.5; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-nccl-cu12==2.20.5; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
        "nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'"
 | 
			
		||||
    ),
 | 
			
		||||
    "12.4": (
 | 
			
		||||
@ -77,7 +74,7 @@ PYTORCH_EXTRA_INSTALL_REQUIREMENTS = {
 | 
			
		||||
        "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-nccl-cu12==2.20.5; 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'"
 | 
			
		||||
    ),
 | 
			
		||||
@ -135,8 +132,6 @@ def arch_type(arch_version: str) -> str:
 | 
			
		||||
        return "cuda"
 | 
			
		||||
    elif arch_version in ROCM_ARCHES:
 | 
			
		||||
        return "rocm"
 | 
			
		||||
    elif arch_version in XPU_ARCHES:
 | 
			
		||||
        return "xpu"
 | 
			
		||||
    elif arch_version in CPU_CXX11_ABI_ARCH:
 | 
			
		||||
        return "cpu-cxx11-abi"
 | 
			
		||||
    elif arch_version in CPU_AARCH64_ARCH:
 | 
			
		||||
@ -161,7 +156,6 @@ WHEEL_CONTAINER_IMAGES = {
 | 
			
		||||
        gpu_arch: f"pytorch/manylinux-builder:rocm{gpu_arch}-{DEFAULT_TAG}"
 | 
			
		||||
        for gpu_arch in ROCM_ARCHES
 | 
			
		||||
    },
 | 
			
		||||
    "xpu": f"pytorch/manylinux2_28-builder:xpu-{DEFAULT_TAG}",
 | 
			
		||||
    "cpu": f"pytorch/manylinux-builder:cpu-{DEFAULT_TAG}",
 | 
			
		||||
    "cpu-cxx11-abi": f"pytorch/manylinuxcxx11-abi-builder:cpu-cxx11-abi-{DEFAULT_TAG}",
 | 
			
		||||
    "cpu-aarch64": f"pytorch/manylinuxaarch64-builder:cpu-aarch64-{DEFAULT_TAG}",
 | 
			
		||||
@ -215,7 +209,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:
 | 
			
		||||
@ -227,7 +221,6 @@ def translate_desired_cuda(gpu_arch_type: str, gpu_arch_version: str) -> str:
 | 
			
		||||
        "cuda": f"cu{gpu_arch_version.replace('.', '')}",
 | 
			
		||||
        "cuda-aarch64": "cu124",
 | 
			
		||||
        "rocm": f"rocm{gpu_arch_version}",
 | 
			
		||||
        "xpu": "xpu",
 | 
			
		||||
    }.get(gpu_arch_type, gpu_arch_version)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -332,13 +325,13 @@ def generate_wheels_matrix(
 | 
			
		||||
        package_type = "manywheel"
 | 
			
		||||
 | 
			
		||||
    if python_versions is None:
 | 
			
		||||
        python_versions = FULL_PYTHON_VERSIONS + ["3.13"]
 | 
			
		||||
        python_versions = FULL_PYTHON_VERSIONS
 | 
			
		||||
 | 
			
		||||
    if arches is None:
 | 
			
		||||
        # Define default compute archivectures
 | 
			
		||||
        arches = ["cpu"]
 | 
			
		||||
        if os == "linux":
 | 
			
		||||
            arches += CPU_CXX11_ABI_ARCH + CUDA_ARCHES + ROCM_ARCHES + XPU_ARCHES
 | 
			
		||||
            arches += CPU_CXX11_ABI_ARCH + CUDA_ARCHES + ROCM_ARCHES
 | 
			
		||||
        elif os == "windows":
 | 
			
		||||
            arches += CUDA_ARCHES
 | 
			
		||||
        elif os == "linux-aarch64":
 | 
			
		||||
@ -361,16 +354,9 @@ def generate_wheels_matrix(
 | 
			
		||||
                or arch_version == "cpu-aarch64"
 | 
			
		||||
                or arch_version == "cpu-s390x"
 | 
			
		||||
                or arch_version == "cuda-aarch64"
 | 
			
		||||
                or arch_version == "xpu"
 | 
			
		||||
                else arch_version
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            # TODO: Enable python 3.13 on rocm, xpu, aarch64, windows
 | 
			
		||||
            if (
 | 
			
		||||
                gpu_arch_type in ["rocm", "xpu"] or os != "linux"
 | 
			
		||||
            ) and python_version == "3.13":
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            # 12.1 linux wheels require PYTORCH_EXTRA_INSTALL_REQUIREMENTS to install
 | 
			
		||||
            if (
 | 
			
		||||
                arch_version in ["12.4", "12.1", "11.8"]
 | 
			
		||||
@ -400,49 +386,6 @@ def generate_wheels_matrix(
 | 
			
		||||
                        ),
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
                if arch_version != "cuda-aarch64":
 | 
			
		||||
                    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": "True",
 | 
			
		||||
                            "devtoolset": "",
 | 
			
		||||
                            "container_image": WHEEL_CONTAINER_IMAGES[arch_version],
 | 
			
		||||
                            "package_type": package_type,
 | 
			
		||||
                            "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(
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/scripts/generate_ci_workflows.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/scripts/generate_ci_workflows.py
									
									
									
									
										vendored
									
									
								
							@ -8,8 +8,8 @@ from typing import Dict, Iterable, List, Literal, Set
 | 
			
		||||
from typing_extensions import TypedDict  # Python 3.11+
 | 
			
		||||
 | 
			
		||||
import generate_binary_build_matrix  # type: ignore[import]
 | 
			
		||||
import jinja2
 | 
			
		||||
 | 
			
		||||
import jinja2
 | 
			
		||||
 | 
			
		||||
Arch = Literal["windows", "linux", "macos"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,6 @@ from typing import Dict, List
 | 
			
		||||
 | 
			
		||||
import generate_binary_build_matrix
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DOCKER_IMAGE_TYPES = ["runtime", "devel"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/scripts/generate_pytorch_version.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/scripts/generate_pytorch_version.py
									
									
									
									
										vendored
									
									
								
							@ -4,11 +4,11 @@ import argparse
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
import subprocess
 | 
			
		||||
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from distutils.util import strtobool
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LEADING_V_PATTERN = re.compile("^v")
 | 
			
		||||
TRAILING_RC_PATTERN = re.compile("-rc[0-9]*$")
 | 
			
		||||
LEGACY_BASE_VERSION_SUFFIX_PATTERN = re.compile("a0$")
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/scripts/get_workflow_job_id.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/scripts/get_workflow_job_id.py
									
									
									
									
										vendored
									
									
								
							@ -11,6 +11,7 @@ import sys
 | 
			
		||||
import time
 | 
			
		||||
import urllib
 | 
			
		||||
import urllib.parse
 | 
			
		||||
 | 
			
		||||
from typing import Any, Callable, Dict, List, Optional, Tuple
 | 
			
		||||
from urllib.request import Request, urlopen
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user