mirror of
				https://github.com/pytorch/pytorch.git
				synced 2025-11-04 16:04:58 +08:00 
			
		
		
		
	Compare commits
	
		
			56 Commits
		
	
	
		
			atalman-pa
			...
			v2.1.0-rc5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ced78cc2a7 | |||
| d8db5808ce | |||
| 889811ab5b | |||
| 1191449343 | |||
| 6d9fad8474 | |||
| ed62318bea | |||
| ee67c4dd6a | |||
| 5529b81631 | |||
| 7e23b4907d | |||
| 71c9d5c3a6 | |||
| 91e414957b | |||
| ce3ed7f293 | |||
| bd372d460b | |||
| 12b8c26f35 | |||
| 7397cf324c | |||
| fa8259db8d | |||
| d83c8287ea | |||
| ba19c52e31 | |||
| c5c9536aa7 | |||
| 6b7a777661 | |||
| ebd3224303 | |||
| 6e4ae13657 | |||
| 265e46e193 | |||
| da7290dfbd | |||
| 828992cf13 | |||
| 48246f3dfb | |||
| 7d6971dcee | |||
| 5417e23ba8 | |||
| 7a9101951d | |||
| 03e7f0b99d | |||
| c0e7239f43 | |||
| 04c1e07fd7 | |||
| cb4362ba5f | |||
| bddd30ca7a | |||
| 9cc99906e9 | |||
| a49fca4dd4 | |||
| 83964c761e | |||
| 085bd1da62 | |||
| 90452f41e3 | |||
| 35c3d5a080 | |||
| d07ac50e26 | |||
| 8a3b017769 | |||
| a82894b0d3 | |||
| 050fc31538 | |||
| b3cb05b396 | |||
| fec68a2799 | |||
| f139dda1cc | |||
| 5252dfb762 | |||
| da1ccca830 | |||
| c9cbdaf24f | |||
| f187e42a54 | |||
| 9175987fcc | |||
| d8e6594fb8 | |||
| f82c027774 | |||
| 6d20b39d3f | |||
| 17f400404f | 
@ -1 +1 @@
 | 
			
		||||
05d67b9418cacda0d356c2102d7c1a887948b013
 | 
			
		||||
34f8189eae57a23cc15b4b4f032fe25757e0db8e
 | 
			
		||||
 | 
			
		||||
@ -7,18 +7,14 @@ source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh"
 | 
			
		||||
function install_huggingface() {
 | 
			
		||||
  local version
 | 
			
		||||
  version=$(get_pinned_commit huggingface)
 | 
			
		||||
  pip_install pandas
 | 
			
		||||
  pip_install scipy
 | 
			
		||||
  pip_install z3-solver
 | 
			
		||||
  pip_install pandas==2.0.3
 | 
			
		||||
  pip_install "transformers==${version}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function install_timm() {
 | 
			
		||||
  local commit
 | 
			
		||||
  commit=$(get_pinned_commit timm)
 | 
			
		||||
  pip_install pandas
 | 
			
		||||
  pip_install scipy
 | 
			
		||||
  pip_install z3-solver
 | 
			
		||||
  pip_install pandas==2.0.3
 | 
			
		||||
  pip_install "git+https://github.com/rwightman/pytorch-image-models@${commit}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								.ci/docker/common/install_onnx.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										17
									
								
								.ci/docker/common/install_onnx.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@ -4,6 +4,10 @@ set -ex
 | 
			
		||||
 | 
			
		||||
source "$(dirname "${BASH_SOURCE[0]}")/common_utils.sh"
 | 
			
		||||
 | 
			
		||||
retry () {
 | 
			
		||||
    "$@" || (sleep 10 && "$@") || (sleep 20 && "$@") || (sleep 40 && "$@")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# A bunch of custom pip dependencies for ONNX
 | 
			
		||||
pip_install \
 | 
			
		||||
  beartype==0.10.4 \
 | 
			
		||||
@ -18,22 +22,17 @@ pip_install \
 | 
			
		||||
# onnx-weekly. Otherwise, onnx-weekly could be
 | 
			
		||||
# overwritten by onnx.
 | 
			
		||||
pip_install \
 | 
			
		||||
  onnxruntime==1.15.1 \
 | 
			
		||||
  parameterized==0.8.1 \
 | 
			
		||||
  pytest-cov==4.0.0 \
 | 
			
		||||
  pytest-subtests==0.10.0 \
 | 
			
		||||
  tabulate==0.9.0 \
 | 
			
		||||
  transformers==4.31.0
 | 
			
		||||
 | 
			
		||||
# Using 1.15dev branch for the following not yet released features and fixes.
 | 
			
		||||
# - Segfault fix for shape inference.
 | 
			
		||||
# - Inliner to workaround ORT segfault.
 | 
			
		||||
pip_install onnx-weekly==1.15.0.dev20230717
 | 
			
		||||
pip_install coloredlogs packaging
 | 
			
		||||
retry pip_install -i https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/ --no-cache-dir --no-input ort-nightly==1.16.0.dev20230908001
 | 
			
		||||
 | 
			
		||||
# TODO: change this when onnx-script is on testPypi
 | 
			
		||||
# pip_install onnxscript-preview==0.1.0.dev20230809 --no-deps
 | 
			
		||||
# NOTE: temp change for CI to run on unpublished onnxscript PR.
 | 
			
		||||
pip_install "onnxscript@git+https://github.com/microsoft/onnxscript@f69be19ebd3f2e0d7efe64b0c7be3329cbab3822" --no-deps
 | 
			
		||||
pip_install onnx==1.14.1
 | 
			
		||||
pip_install onnxscript-preview==0.1.0.dev20230828 --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/
 | 
			
		||||
 | 
			
		||||
@ -271,7 +271,7 @@ pytest-cpp==2.3.0
 | 
			
		||||
#Pinned versions: 2.3.0
 | 
			
		||||
#test that import:
 | 
			
		||||
 | 
			
		||||
z3-solver
 | 
			
		||||
z3-solver==4.12.2.0
 | 
			
		||||
#Description: The Z3 Theorem Prover Project
 | 
			
		||||
#Pinned versions:
 | 
			
		||||
#test that import:
 | 
			
		||||
 | 
			
		||||
@ -180,7 +180,7 @@ function install_numpy_pytorch_interop() {
 | 
			
		||||
 | 
			
		||||
function clone_pytorch_xla() {
 | 
			
		||||
  if [[ ! -d ./xla ]]; then
 | 
			
		||||
    git clone --recursive --quiet https://github.com/pytorch/xla.git
 | 
			
		||||
    git clone --recursive -b r2.1 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)"
 | 
			
		||||
 | 
			
		||||
@ -62,7 +62,7 @@ git --no-pager log --max-count 1
 | 
			
		||||
popd
 | 
			
		||||
 | 
			
		||||
# Clone the Builder main repo
 | 
			
		||||
retry git clone -q https://github.com/pytorch/builder.git "$BUILDER_ROOT"
 | 
			
		||||
retry git clone -q https://github.com/pytorch/builder.git -b release/2.1 "$BUILDER_ROOT"
 | 
			
		||||
pushd "$BUILDER_ROOT"
 | 
			
		||||
echo "Using builder from "
 | 
			
		||||
git --no-pager log --max-count 1
 | 
			
		||||
 | 
			
		||||
@ -90,7 +90,7 @@ if [[ "$PACKAGE_TYPE" == conda ]]; then
 | 
			
		||||
      if [[ "\${TORCH_CONDA_BUILD_FOLDER}" == "pytorch-nightly" ]]; then
 | 
			
		||||
              PYTORCH_CHANNEL="pytorch-nightly"
 | 
			
		||||
      fi
 | 
			
		||||
      retry conda install \${EXTRA_CONDA_FLAGS} -yq -c nvidia -c "\${PYTORCH_CHANNEL}" "pytorch-cuda=\${cu_ver}"
 | 
			
		||||
      retry conda install \${EXTRA_CONDA_FLAGS} -yq -c nvidia -c pytorch-test "pytorch-cuda=\${cu_ver}"
 | 
			
		||||
    fi
 | 
			
		||||
    conda install \${EXTRA_CONDA_FLAGS} -y "\$pkg" --offline
 | 
			
		||||
  )
 | 
			
		||||
@ -98,9 +98,9 @@ elif [[ "$PACKAGE_TYPE" != libtorch ]]; then
 | 
			
		||||
  if [[ "$(uname -m)" == aarch64 ]]; then
 | 
			
		||||
    # Using "extra-index-url" until all needed aarch64 dependencies are
 | 
			
		||||
    # added to "https://download.pytorch.org/whl/nightly/"
 | 
			
		||||
    pip install "\$pkg" --extra-index-url "https://download.pytorch.org/whl/nightly/${DESIRED_CUDA}"
 | 
			
		||||
    pip install "\$pkg" --extra-index-url "https://download.pytorch.org/whl/test/${DESIRED_CUDA}"
 | 
			
		||||
  else
 | 
			
		||||
    pip install "\$pkg" --index-url "https://download.pytorch.org/whl/nightly/${DESIRED_CUDA}"
 | 
			
		||||
    pip install "\$pkg" --index-url "https://download.pytorch.org/whl/test/${DESIRED_CUDA}"
 | 
			
		||||
  fi
 | 
			
		||||
  retry pip install -q numpy protobuf typing-extensions
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ PKG_DIR=${PKG_DIR:-/tmp/workspace/final_pkgs}
 | 
			
		||||
# currently set within `designate_upload_channel`
 | 
			
		||||
UPLOAD_CHANNEL=${UPLOAD_CHANNEL:-nightly}
 | 
			
		||||
# Designates what subfolder to put packages into
 | 
			
		||||
UPLOAD_SUBFOLDER=${UPLOAD_SUBFOLDER:-cpu}
 | 
			
		||||
UPLOAD_SUBFOLDER=${UPLOAD_SUBFOLDER:-}
 | 
			
		||||
UPLOAD_BUCKET="s3://pytorch"
 | 
			
		||||
BACKUP_BUCKET="s3://pytorch-backup"
 | 
			
		||||
BUILD_NAME=${BUILD_NAME:-}
 | 
			
		||||
@ -64,12 +64,17 @@ s3_upload() {
 | 
			
		||||
  local pkg_type
 | 
			
		||||
  extension="$1"
 | 
			
		||||
  pkg_type="$2"
 | 
			
		||||
  s3_dir="${UPLOAD_BUCKET}/${pkg_type}/${UPLOAD_CHANNEL}/${UPLOAD_SUBFOLDER}/"
 | 
			
		||||
  s3_root_dir="${UPLOAD_BUCKET}/${pkg_type}/${UPLOAD_CHANNEL}"
 | 
			
		||||
  if [[ -z ${UPLOAD_SUBFOLDER:-} ]]; then
 | 
			
		||||
    s3_upload_dir="${s3_root_dir}/"
 | 
			
		||||
  else
 | 
			
		||||
    s3_upload_dir="${s3_root_dir}/${UPLOAD_SUBFOLDER}/"
 | 
			
		||||
  fi
 | 
			
		||||
  (
 | 
			
		||||
    for pkg in ${PKG_DIR}/*.${extension}; do
 | 
			
		||||
      (
 | 
			
		||||
        set -x
 | 
			
		||||
        ${AWS_S3_CP} --no-progress --acl public-read "${pkg}" "${s3_dir}"
 | 
			
		||||
        ${AWS_S3_CP} --no-progress --acl public-read "${pkg}" "${s3_upload_dir}"
 | 
			
		||||
      )
 | 
			
		||||
    done
 | 
			
		||||
  )
 | 
			
		||||
@ -82,15 +87,17 @@ pip install -q awscli
 | 
			
		||||
case "${PACKAGE_TYPE}" in
 | 
			
		||||
  conda)
 | 
			
		||||
    conda_upload
 | 
			
		||||
    # Fetch  platform (eg. win-64, linux-64, etc.) from index file
 | 
			
		||||
    # Because there's no actual conda command to read this
 | 
			
		||||
    subdir=$(\
 | 
			
		||||
      tar -xOf ${PKG_DIR}/*.bz2 info/index.json \
 | 
			
		||||
        | grep subdir  \
 | 
			
		||||
        | cut -d ':' -f2 \
 | 
			
		||||
        | sed -e 's/[[:space:]]//' -e 's/"//g' -e 's/,//' \
 | 
			
		||||
    )
 | 
			
		||||
    BACKUP_DIR="conda/${subdir}"
 | 
			
		||||
    for conda_archive in ${PKG_DIR}/*.tar.bz2; do
 | 
			
		||||
      # Fetch  platform (eg. win-64, linux-64, etc.) from index file because
 | 
			
		||||
      # there's no actual conda command to read this
 | 
			
		||||
      subdir=$(\
 | 
			
		||||
        tar -xOf "${conda_archive}" info/index.json \
 | 
			
		||||
          | grep subdir  \
 | 
			
		||||
          | cut -d ':' -f2 \
 | 
			
		||||
          | sed -e 's/[[:space:]]//' -e 's/"//g' -e 's/,//' \
 | 
			
		||||
      )
 | 
			
		||||
      BACKUP_DIR="conda/${subdir}"
 | 
			
		||||
    done
 | 
			
		||||
    ;;
 | 
			
		||||
  libtorch)
 | 
			
		||||
    s3_upload "zip" "libtorch"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							@ -1 +1 @@
 | 
			
		||||
e1ee592d9806216d7ac0bb711cae6307b0c5b68a
 | 
			
		||||
r2.1
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/merge_rules.yaml
									
									
									
									
										vendored
									
									
								
							@ -7,6 +7,7 @@
 | 
			
		||||
  - docs/source/onnx.rst
 | 
			
		||||
  - docs/source/onnx*
 | 
			
		||||
  - docs/source/scripts/onnx/**
 | 
			
		||||
  - docs/source/_static/img/onnx/**
 | 
			
		||||
  - scripts/onnx/**
 | 
			
		||||
  - test/onnx/**
 | 
			
		||||
  - tools/onnx/**
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							@ -60,12 +60,18 @@ def build_triton(
 | 
			
		||||
    build_conda: bool = False,
 | 
			
		||||
    build_rocm: bool = False,
 | 
			
		||||
    py_version: Optional[str] = None,
 | 
			
		||||
    release: bool = False,
 | 
			
		||||
) -> Path:
 | 
			
		||||
    env = os.environ.copy()
 | 
			
		||||
    if "MAX_JOBS" not in env:
 | 
			
		||||
        max_jobs = os.cpu_count() or 1
 | 
			
		||||
        env["MAX_JOBS"] = str(max_jobs)
 | 
			
		||||
 | 
			
		||||
    if not release:
 | 
			
		||||
        # Nightly binaries include the triton commit hash, i.e. 2.1.0+e6216047b8
 | 
			
		||||
        # while release build should only include the version, i.e. 2.1.0
 | 
			
		||||
        version = f"{version}+{commit_hash[:10]}"
 | 
			
		||||
 | 
			
		||||
    with TemporaryDirectory() as tmpdir:
 | 
			
		||||
        triton_basedir = Path(tmpdir) / "triton"
 | 
			
		||||
        triton_pythondir = triton_basedir / "python"
 | 
			
		||||
@ -80,7 +86,7 @@ def build_triton(
 | 
			
		||||
        if build_conda:
 | 
			
		||||
            with open(triton_basedir / "meta.yaml", "w") as meta:
 | 
			
		||||
                print(
 | 
			
		||||
                    f"package:\n  name: torchtriton\n  version: {version}+{commit_hash[:10]}\n",
 | 
			
		||||
                    f"package:\n  name: torchtriton\n  version: {version}\n",
 | 
			
		||||
                    file=meta,
 | 
			
		||||
                )
 | 
			
		||||
                print("source:\n  path: .\n", file=meta)
 | 
			
		||||
@ -103,7 +109,7 @@ def build_triton(
 | 
			
		||||
 | 
			
		||||
            patch_init_py(
 | 
			
		||||
                triton_pythondir / "triton" / "__init__.py",
 | 
			
		||||
                version=f"{version}+{commit_hash[:10]}",
 | 
			
		||||
                version=f"{version}",
 | 
			
		||||
            )
 | 
			
		||||
            if py_version is None:
 | 
			
		||||
                py_version = f"{sys.version_info.major}.{sys.version_info.minor}"
 | 
			
		||||
@ -129,11 +135,11 @@ def build_triton(
 | 
			
		||||
        patch_setup_py(
 | 
			
		||||
            triton_pythondir / "setup.py",
 | 
			
		||||
            name=triton_pkg_name,
 | 
			
		||||
            version=f"{version}+{commit_hash[:10]}",
 | 
			
		||||
            version=f"{version}",
 | 
			
		||||
        )
 | 
			
		||||
        patch_init_py(
 | 
			
		||||
            triton_pythondir / "triton" / "__init__.py",
 | 
			
		||||
            version=f"{version}+{commit_hash[:10]}",
 | 
			
		||||
            version=f"{version}",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if build_rocm:
 | 
			
		||||
@ -157,12 +163,14 @@ def main() -> None:
 | 
			
		||||
    from argparse import ArgumentParser
 | 
			
		||||
 | 
			
		||||
    parser = ArgumentParser("Build Triton binaries")
 | 
			
		||||
    parser.add_argument("--release", action="store_true")
 | 
			
		||||
    parser.add_argument("--build-conda", action="store_true")
 | 
			
		||||
    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(
 | 
			
		||||
        build_rocm=args.build_rocm,
 | 
			
		||||
        commit_hash=args.commit_hash
 | 
			
		||||
@ -171,6 +179,7 @@ def main() -> None:
 | 
			
		||||
        version=args.triton_version,
 | 
			
		||||
        build_conda=args.build_conda,
 | 
			
		||||
        py_version=args.py_version,
 | 
			
		||||
        release=args.release,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -248,7 +248,8 @@ def generate_wheels_matrix(
 | 
			
		||||
                        "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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
                        "nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'",
 | 
			
		||||
                        "nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | "
 | 
			
		||||
                        "triton==2.1.0; platform_system == 'Linux' and platform_machine == 'x86_64'",
 | 
			
		||||
                        "build_name": f"{package_type}-py{python_version}-{gpu_arch_type}{gpu_arch_version}-with-pypi-cudnn".replace(  # noqa: B950
 | 
			
		||||
                            ".", "_"
 | 
			
		||||
                        ),
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/templates/common.yml.j2
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/templates/common.yml.j2
									
									
									
									
										vendored
									
									
								
							@ -8,7 +8,7 @@
 | 
			
		||||
# NOTE: If testing pytorch/builder changes you can change this variable to change what pytorch/builder reference
 | 
			
		||||
#       the binary builds will check out
 | 
			
		||||
{%- set builder_repo = "pytorch/builder" -%}
 | 
			
		||||
{%- set builder_branch = "main" -%}
 | 
			
		||||
{%- set builder_branch = "release/2.1" -%}
 | 
			
		||||
 | 
			
		||||
{%- macro concurrency(build_environment) -%}
 | 
			
		||||
concurrency:
 | 
			
		||||
 | 
			
		||||
@ -97,13 +97,13 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
          name: !{{ config["build_name"] }}
 | 
			
		||||
          path: "${{ runner.temp }}/artifacts/"
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch") }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch", checkout_pr_head=False) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }}
 | 
			
		||||
      - name: ROCm set GPU_FLAG
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: !{{ config["container_image"] }}
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
 | 
			
		||||
@ -74,8 +74,8 @@ jobs:
 | 
			
		||||
          /bin/bash "${RUNNER_TEMP}/conda.sh" -b -p "${RUNNER_TEMP}/anaconda"
 | 
			
		||||
          echo "${RUNNER_TEMP}/anaconda/bin" >> "${GITHUB_PATH}"
 | 
			
		||||
          echo "DEVELOPER_DIR=/Applications/Xcode_13.3.1.app/Contents/Developer" >> "${GITHUB_ENV}"
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch") }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch", checkout_pr_head=False) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }}
 | 
			
		||||
      - name: Install sccache (only for non-forked PRs, and pushes to trunk)
 | 
			
		||||
        uses: nick-fields/retry@v2.8.2
 | 
			
		||||
        if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/templates/upload.yml.j2
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/templates/upload.yml.j2
									
									
									
									
										vendored
									
									
								
							@ -67,6 +67,6 @@
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
 | 
			
		||||
@ -62,8 +62,8 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
      !{{ common.setup_ec2_windows() }}
 | 
			
		||||
      !{{ set_runner_specific_vars() }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch") }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch", checkout_pr_head=False) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }}
 | 
			
		||||
      - name: Populate binary env
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
@ -102,8 +102,8 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
          name: !{{ config["build_name"] }}
 | 
			
		||||
          path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}"
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch") }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="pytorch", checkout_pr_head=False) }}
 | 
			
		||||
      !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }}
 | 
			
		||||
      - name: Populate binary env
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/workflows/_android-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/_android-build-test.yml
									
									
									
									
										vendored
									
									
								
							@ -36,7 +36,7 @@ jobs:
 | 
			
		||||
      keep-going: ${{ steps.filter.outputs.keep-going }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -58,25 +58,25 @@ jobs:
 | 
			
		||||
    runs-on: ${{ matrix.runner }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image-name }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
@ -140,5 +140,5 @@ jobs:
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/workflows/_android-full-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/_android-full-build-test.yml
									
									
									
									
										vendored
									
									
								
							@ -36,7 +36,7 @@ jobs:
 | 
			
		||||
      keep-going: ${{ steps.filter.outputs.keep-going }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -58,25 +58,25 @@ jobs:
 | 
			
		||||
    runs-on: ${{ matrix.runner }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image-name }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
@ -185,5 +185,5 @@ jobs:
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								.github/workflows/_bazel-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/_bazel-build-test.yml
									
									
									
									
										vendored
									
									
								
							@ -41,7 +41,7 @@ jobs:
 | 
			
		||||
      reenabled-issues: ${{ steps.filter.outputs.reenabled-issues }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -63,30 +63,30 @@ jobs:
 | 
			
		||||
    runs-on: ${{ matrix.runner }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image-name }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
      - name: Install nvidia driver, nvidia-docker runtime, set GPU_FLAG
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-nvidia@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-nvidia@release/2.1
 | 
			
		||||
        if: ${{ inputs.cuda-version != 'cpu' }}
 | 
			
		||||
 | 
			
		||||
      - name: Output disk space left
 | 
			
		||||
@ -197,5 +197,5 @@ jobs:
 | 
			
		||||
          file-suffix: bazel-${{ github.job }}_${{ steps.get-job-id.outputs.job-id }}
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								.github/workflows/_binary-build-linux.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/_binary-build-linux.yml
									
									
									
									
										vendored
									
									
								
							@ -139,12 +139,12 @@ jobs:
 | 
			
		||||
        run: env
 | 
			
		||||
 | 
			
		||||
      - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)"
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.github-token }}
 | 
			
		||||
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          no-sudo: ${{ inputs.build_environment == 'linux-aarch64-binary-manywheel' }}
 | 
			
		||||
 | 
			
		||||
@ -159,10 +159,12 @@ jobs:
 | 
			
		||||
      - name: Clean workspace
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          rm -rf "${GITHUB_WORKSPACE}"
 | 
			
		||||
          mkdir "${GITHUB_WORKSPACE}"
 | 
			
		||||
 | 
			
		||||
          if [[ inputs.build_environment == 'linux-aarch64-binary-manywheel' ]]; then
 | 
			
		||||
          if [[ ${{ inputs.build_environment }} == 'linux-aarch64-binary-manywheel' ]]; then
 | 
			
		||||
            rm -rf "${RUNNER_TEMP}/artifacts"
 | 
			
		||||
            mkdir "${RUNNER_TEMP}/artifacts"
 | 
			
		||||
          fi
 | 
			
		||||
@ -170,7 +172,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch to pytorch dir
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -184,7 +185,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder to builder dir
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -210,7 +211,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        if: ${{ steps.filter.outputs.is-test-matrix-empty == 'False' }}
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ inputs.DOCKER_IMAGE }}
 | 
			
		||||
 | 
			
		||||
@ -267,7 +268,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        if: always()
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Chown workspace
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								.github/workflows/_binary-test-linux.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/_binary-test-linux.yml
									
									
									
									
										vendored
									
									
								
							@ -127,13 +127,13 @@ jobs:
 | 
			
		||||
          } >> "${GITHUB_ENV} }}"
 | 
			
		||||
 | 
			
		||||
      - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)"
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.github-token }}
 | 
			
		||||
 | 
			
		||||
        # Setup the environment
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          no-sudo: ${{ inputs.build_environment == 'linux-aarch64-binary-manywheel' }}
 | 
			
		||||
 | 
			
		||||
@ -154,7 +154,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch to pytorch dir
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
 | 
			
		||||
@ -167,7 +166,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder to builder dir
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -198,12 +197,12 @@ jobs:
 | 
			
		||||
          path: "${{ runner.temp }}/artifacts/"
 | 
			
		||||
 | 
			
		||||
      - name: Install nvidia driver, nvidia-docker runtime, set GPU_FLAG
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-nvidia@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-nvidia@release/2.1
 | 
			
		||||
        if: ${{ inputs.GPU_ARCH_TYPE == 'cuda' && steps.filter.outputs.is-test-matrix-empty == 'False' }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        if: ${{ steps.filter.outputs.is-test-matrix-empty == 'False' }}
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ inputs.DOCKER_IMAGE }}
 | 
			
		||||
 | 
			
		||||
@ -213,7 +212,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        if: always()
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Chown workspace
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/_binary-upload.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/_binary-upload.yml
									
									
									
									
										vendored
									
									
								
							@ -97,7 +97,7 @@ jobs:
 | 
			
		||||
      SHA1: ${{ github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          no-sudo: true
 | 
			
		||||
 | 
			
		||||
@ -121,7 +121,7 @@ jobs:
 | 
			
		||||
        shell: bash -e -l {0}
 | 
			
		||||
        run: |
 | 
			
		||||
          # reference ends with an RC suffix
 | 
			
		||||
          if [[ ${GITHUB_REF_NAME} = *-rc[0-9]* ]]; then
 | 
			
		||||
          if [[ "${GITHUB_REF_NAME}" = *-rc[0-9]* ]]; then
 | 
			
		||||
            echo "UPLOAD_CHANNEL=test" >> "$GITHUB_ENV"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/_buck-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/_buck-build-test.yml
									
									
									
									
										vendored
									
									
								
							@ -22,7 +22,7 @@ jobs:
 | 
			
		||||
      keep-going: ${{ steps.filter.outputs.keep-going }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -43,7 +43,7 @@ jobs:
 | 
			
		||||
    runs-on: ${{ matrix.runner }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Set up JDK 8
 | 
			
		||||
        uses: actions/setup-java@v3
 | 
			
		||||
@ -52,7 +52,7 @@ jobs:
 | 
			
		||||
          distribution: 'temurin'
 | 
			
		||||
 | 
			
		||||
      - name: Setup miniconda
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: 3.8
 | 
			
		||||
          environment-file: .github/requirements/conda-env-${{ runner.os }}-${{ runner.arch }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								.github/workflows/_docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/_docs.yml
									
									
									
									
										vendored
									
									
								
							@ -66,7 +66,7 @@ jobs:
 | 
			
		||||
    name: build-docs-${{ matrix.docs_type }}-${{ inputs.push }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
          instructions: |
 | 
			
		||||
@ -77,19 +77,19 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
@ -187,5 +187,5 @@ jobs:
 | 
			
		||||
          s3-prefix: pytorch/pytorch/${{ github.event.pull_request.number }}/functorchdocs
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										371
									
								
								.github/workflows/_ios-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										371
									
								
								.github/workflows/_ios-build-test.yml
									
									
									
									
										vendored
									
									
								
							@ -7,14 +7,6 @@ on:
 | 
			
		||||
        required: true
 | 
			
		||||
        type: string
 | 
			
		||||
        description: Top-level label for what's being built/tested.
 | 
			
		||||
      ios-platform:
 | 
			
		||||
        required: true
 | 
			
		||||
        type: string
 | 
			
		||||
        description: Which iOS platform to build for.
 | 
			
		||||
      ios-arch:
 | 
			
		||||
        required: true
 | 
			
		||||
        type: string
 | 
			
		||||
        description: Which iOS arch to build for.
 | 
			
		||||
      sync-tag:
 | 
			
		||||
        required: false
 | 
			
		||||
        type: string
 | 
			
		||||
@ -31,8 +23,6 @@ on:
 | 
			
		||||
env:
 | 
			
		||||
  GIT_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
 | 
			
		||||
  BUILD_ENVIRONMENT: ${{ inputs.build-environment }}
 | 
			
		||||
  IOS_PLATFORM: ${{ inputs.ios-platform }}
 | 
			
		||||
  IOS_ARCH: ${{ inputs.ios-arch }}
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  filter:
 | 
			
		||||
@ -43,7 +33,7 @@ jobs:
 | 
			
		||||
      keep-going: ${{ steps.filter.outputs.keep-going }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -63,33 +53,30 @@ jobs:
 | 
			
		||||
      matrix: ${{ fromJSON(needs.filter.outputs.test-matrix) }}
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
    runs-on: ${{ matrix.runner }}
 | 
			
		||||
    env:
 | 
			
		||||
      IOS_PLATFORM: ${{ matrix.ios_platform }}
 | 
			
		||||
      IOS_ARCH: ${{ matrix.ios_arch }}
 | 
			
		||||
      BUILD_LITE_INTERPRETER: ${{ matrix.use_lite_interpreter }}
 | 
			
		||||
      USE_PYTORCH_METAL: ${{ matrix.use_metal }}
 | 
			
		||||
      USE_COREML_DELEGATE: ${{ matrix.use_coreml }}
 | 
			
		||||
      CUSTOM_OP_LIST: ${{ matrix.use_custom_op_list }}
 | 
			
		||||
      # TODO: Bump it to 2.2.0 after cherry pick this or figure out a better way
 | 
			
		||||
      # to get this version instead of hard coding it here
 | 
			
		||||
      PYTORCH_VERSION: 2.1.0
 | 
			
		||||
    timeout-minutes: 240
 | 
			
		||||
    steps:
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Populate CI build options
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          # Most builds use the lite interpreter, if certain builds shouldn't
 | 
			
		||||
          # build the lite interpreter this env variable should get over-written
 | 
			
		||||
          # in the following case statement
 | 
			
		||||
          echo "BUILD_LITE_INTERPRETER=1" >> "${GITHUB_ENV}"
 | 
			
		||||
          set -ex
 | 
			
		||||
 | 
			
		||||
          case ${BUILD_ENVIRONMENT} in
 | 
			
		||||
            *metal*)
 | 
			
		||||
              echo "USE_PYTORCH_METAL=1" >> "${GITHUB_ENV}"
 | 
			
		||||
              ;;
 | 
			
		||||
            *full_jit*)
 | 
			
		||||
              echo "BUILD_LITE_INTERPRETER=0" >> "${GITHUB_ENV}"
 | 
			
		||||
              ;;
 | 
			
		||||
            *custom*)
 | 
			
		||||
              echo "SELECTED_OP_LIST=${GITHUB_WORKSPACE}/ios/TestApp/custom_build/mobilenetv2.yaml" >> "${GITHUB_ENV}"
 | 
			
		||||
              ;;
 | 
			
		||||
            *coreml*)
 | 
			
		||||
              echo "USE_COREML_DELEGATE=1" >> "${GITHUB_ENV}"
 | 
			
		||||
              ;;
 | 
			
		||||
          esac
 | 
			
		||||
          if [ -n "${CUSTOM_OP_LIST:-}" ]; then
 | 
			
		||||
            echo "SELECTED_OP_LIST=${GITHUB_WORKSPACE}/ios/TestApp/custom_build/${CUSTOM_OP_LIST}" >> "${GITHUB_ENV}"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Install brew dependencies
 | 
			
		||||
        uses: nick-fields/retry@v2.8.2
 | 
			
		||||
@ -102,7 +89,7 @@ jobs:
 | 
			
		||||
            brew install libtool
 | 
			
		||||
 | 
			
		||||
      - name: Setup miniconda for iOS
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: "3.9"
 | 
			
		||||
          environment-file: .github/requirements/conda-env-iOS
 | 
			
		||||
@ -116,54 +103,67 @@ jobs:
 | 
			
		||||
          retry_wait_seconds: 90
 | 
			
		||||
          command: |
 | 
			
		||||
            set -x
 | 
			
		||||
            cd ios/TestApp
 | 
			
		||||
            # install fastlane
 | 
			
		||||
 | 
			
		||||
            pushd ios/TestApp
 | 
			
		||||
            # Install fastlane
 | 
			
		||||
            sudo gem install bundler && bundle install
 | 
			
		||||
            bundle update fastlane
 | 
			
		||||
            popd
 | 
			
		||||
 | 
			
		||||
      - name: Build PyTorch Mobile Runtime
 | 
			
		||||
      - name: Build PyTorch mobile runtime
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
          # shellcheck disable=SC1091
 | 
			
		||||
          export TCLLIBPATH="/usr/local/lib"
 | 
			
		||||
          python -VV
 | 
			
		||||
          ${CONDA_RUN} scripts/build_ios.sh
 | 
			
		||||
 | 
			
		||||
      - name: Build TestApp
 | 
			
		||||
        if: inputs.ios-platform == 'SIMULATOR'
 | 
			
		||||
        if: matrix.ios_platform == 'SIMULATOR'
 | 
			
		||||
        timeout-minutes: 15
 | 
			
		||||
        run: |
 | 
			
		||||
          # run the ruby build script
 | 
			
		||||
          # Run the ruby build script
 | 
			
		||||
          if ! [ -x "$(command -v xcodebuild)" ]; then
 | 
			
		||||
            echo 'Error: xcodebuild is not installed.'
 | 
			
		||||
            exit 1
 | 
			
		||||
          fi
 | 
			
		||||
          ruby scripts/xcode_build.rb -i build_ios/install -x ios/TestApp/TestApp.xcodeproj -p "${IOS_PLATFORM}"
 | 
			
		||||
 | 
			
		||||
      - name: Run Simulator Tests
 | 
			
		||||
        if: inputs.ios-platform == 'SIMULATOR'
 | 
			
		||||
      - name: Run simulator tests
 | 
			
		||||
        if: matrix.ios_platform == 'SIMULATOR'
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
          # shellcheck disable=SC1091
 | 
			
		||||
          # use the pytorch nightly build to generate models
 | 
			
		||||
          ${CONDA_RUN} pip3 install --pre torch torchvision torchaudio -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html
 | 
			
		||||
          # generate models for differnet backends
 | 
			
		||||
          cd "${GITHUB_WORKSPACE}/ios/TestApp/benchmark"
 | 
			
		||||
          # Use the pytorch nightly build to generate models
 | 
			
		||||
          ${CONDA_RUN} pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
 | 
			
		||||
 | 
			
		||||
          # Generate models for differnet backends
 | 
			
		||||
          pushd "${GITHUB_WORKSPACE}/ios/TestApp/benchmark"
 | 
			
		||||
          mkdir -p ../models
 | 
			
		||||
          # NB: Both of the following scripts only export models with lite interpreter
 | 
			
		||||
          if [ "${USE_COREML_DELEGATE}" == 1 ]; then
 | 
			
		||||
            ${CONDA_RUN} python coreml_backend.py
 | 
			
		||||
          else
 | 
			
		||||
            cd "${GITHUB_WORKSPACE}"
 | 
			
		||||
            pushd "${GITHUB_WORKSPACE}"
 | 
			
		||||
            ${CONDA_RUN} python test/mobile/model_test/gen_test_model.py ios-test
 | 
			
		||||
            popd
 | 
			
		||||
          fi
 | 
			
		||||
          cd "${GITHUB_WORKSPACE}/ios/TestApp/benchmark"
 | 
			
		||||
 | 
			
		||||
          if [ "${BUILD_LITE_INTERPRETER}" == 1 ]; then
 | 
			
		||||
            echo "Setting up the TestApp for LiteInterpreter"
 | 
			
		||||
            ruby setup.rb --lite 1
 | 
			
		||||
          else
 | 
			
		||||
            # Generate some models for JIT without lite interpreter
 | 
			
		||||
            ${CONDA_RUN} python trace_model.py
 | 
			
		||||
 | 
			
		||||
            echo "Setting up the TestApp for Full JIT"
 | 
			
		||||
            ruby setup.rb
 | 
			
		||||
          fi
 | 
			
		||||
          cd "${GITHUB_WORKSPACE}/ios/TestApp"
 | 
			
		||||
          # instruments -s -devices
 | 
			
		||||
          popd
 | 
			
		||||
 | 
			
		||||
          pushd "${GITHUB_WORKSPACE}/ios/TestApp"
 | 
			
		||||
          # Instruments -s -devices
 | 
			
		||||
          if [ "${BUILD_LITE_INTERPRETER}" == 1 ]; then
 | 
			
		||||
            if [ "${USE_COREML_DELEGATE}" == 1 ]; then
 | 
			
		||||
              bundle exec fastlane scan --only_testing TestAppTests/TestAppTests/testCoreML
 | 
			
		||||
@ -173,9 +173,282 @@ jobs:
 | 
			
		||||
          else
 | 
			
		||||
            bundle exec fastlane scan --only_testing TestAppTests/TestAppTests/testFullJIT
 | 
			
		||||
          fi
 | 
			
		||||
          popd
 | 
			
		||||
 | 
			
		||||
      - name: Dump Simulator Tests On a Failure
 | 
			
		||||
        if: failure() && inputs.ios-platform == 'SIMULATOR'
 | 
			
		||||
      - name: Dump simulator tests on failure
 | 
			
		||||
        if: failure() && matrix.ios_platform == 'SIMULATOR'
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "Simulator Tests Logs:"
 | 
			
		||||
          cat /Users/runner/Library/Logs/scan/*.log
 | 
			
		||||
 | 
			
		||||
      - name: Prepare the build artifacts for upload
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          # The structure of the folder is as follows:
 | 
			
		||||
          #
 | 
			
		||||
          # RUNNER_TEMP/
 | 
			
		||||
          # └── IOS_ARCH/
 | 
			
		||||
          #     ├── LICENSE
 | 
			
		||||
          #     ├── install
 | 
			
		||||
          #     │   ├── include
 | 
			
		||||
          #     │   │   └── headers
 | 
			
		||||
          #     │   └── lib
 | 
			
		||||
          #     │       ├── libXNNPACK.a
 | 
			
		||||
          #     │       ├── libc10.a
 | 
			
		||||
          #     │       ├── libclog.a
 | 
			
		||||
          #     │       ├── libcpuinfo.a
 | 
			
		||||
          #     │       ├── libeigen_blas.a
 | 
			
		||||
          #     │       ├── libpthreadpool.a
 | 
			
		||||
          #     │       ├── libpytorch_qnnpack.a
 | 
			
		||||
          #     │       ├── libtorch.a
 | 
			
		||||
          #     │       └── libtorch_cpu.a
 | 
			
		||||
          #     ├── src
 | 
			
		||||
          #     │   └── LibTorch-Lite.h
 | 
			
		||||
          #     └── version.txt
 | 
			
		||||
          SETUP_DIR="${RUNNER_TEMP}/${IOS_ARCH}"
 | 
			
		||||
          mkdir -p "${SETUP_DIR}/src"
 | 
			
		||||
 | 
			
		||||
          cp -R "${GITHUB_WORKSPACE}/build_ios/install" "${SETUP_DIR}"
 | 
			
		||||
          # Copy the umbrella header and license
 | 
			
		||||
          if [ "${BUILD_LITE_INTERPRETER}" == 1 ]; then
 | 
			
		||||
            cp "${GITHUB_WORKSPACE}/ios/LibTorch-Lite.h" "${SETUP_DIR}/src"
 | 
			
		||||
          else
 | 
			
		||||
            cp "${GITHUB_WORKSPACE}/ios/LibTorch.h" "${SETUP_DIR}/src"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          # Copy license and version
 | 
			
		||||
          cp "${GITHUB_WORKSPACE}/LICENSE" "${SETUP_DIR}"
 | 
			
		||||
          echo "${PYTORCH_VERSION}" > "${SETUP_DIR}"/version.txt
 | 
			
		||||
 | 
			
		||||
          # Save the podspec for the upload job later
 | 
			
		||||
          if [ "${BUILD_LITE_INTERPRETER}" == "1" ]; then
 | 
			
		||||
            DATE=$(date -u +%Y%m%d)
 | 
			
		||||
            cp "${GITHUB_WORKSPACE}"/ios/LibTorch-Lite-Nightly.podspec.template "${SETUP_DIR}"/LibTorch-Lite-Nightly.podspec
 | 
			
		||||
            sed -i '' -e "s/IOS_NIGHTLY_BUILD_VERSION/${PYTORCH_VERSION}.${DATE}/g" "${SETUP_DIR}"/LibTorch-Lite-Nightly.podspec
 | 
			
		||||
 | 
			
		||||
            cp "${GITHUB_WORKSPACE}"/ios/LibTorch-Lite.podspec.template "${SETUP_DIR}"/LibTorch-Lite.podspec
 | 
			
		||||
            sed -i '' -e "s/IOS_BUILD_VERSION/${PYTORCH_VERSION}/g" "${SETUP_DIR}"/LibTorch-Lite.podspec
 | 
			
		||||
          else
 | 
			
		||||
            # NB: There is no nightly build without lite interpreter atm
 | 
			
		||||
            cp "${GITHUB_WORKSPACE}"/ios/LibTorch.podspec.template "${SETUP_DIR}"/LibTorch.podspec
 | 
			
		||||
            sed -i '' -e "s/IOS_BUILD_VERSION/${PYTORCH_VERSION}/g" "${SETUP_DIR}"/LibTorch.podspec
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          pushd "${SETUP_DIR}"
 | 
			
		||||
          # NB: It's important to zip all the files before uploading because the GHA will upload
 | 
			
		||||
          # all files sequentially which is both slow and has too many requests. More info is at
 | 
			
		||||
          # https://github.com/actions/upload-artifact#too-many-uploads-resulting-in-429-responses
 | 
			
		||||
          zip -r "${IOS_ARCH}.zip" install src version.txt LICENSE ./*.podspec
 | 
			
		||||
          popd
 | 
			
		||||
 | 
			
		||||
      - uses: actions/upload-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: pytorch-ios-build-artifacts-${{ matrix.ios_arch }}
 | 
			
		||||
          if-no-files-found: error
 | 
			
		||||
          path: ${{ runner.temp }}/${{ matrix.ios_arch }}/${{ matrix.ios_arch }}.zip
 | 
			
		||||
 | 
			
		||||
  upload-ios-artifacts:
 | 
			
		||||
    # NB: this job run on GitHub MacOS ephemeral runner so that it can use lipo
 | 
			
		||||
    # to create the fat iOS binaries for both x86_64 and arm64
 | 
			
		||||
    runs-on: macos-12
 | 
			
		||||
    needs: build
 | 
			
		||||
    # NB: Only upload release build, if we need it, we could also turn on nightly here
 | 
			
		||||
    environment: ${{ (github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || startsWith(github.event.ref, 'refs/tags/v'))) && 'ios-upload' || '' }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v3
 | 
			
		||||
 | 
			
		||||
      # For awscli S3 upload
 | 
			
		||||
      - uses: actions/setup-python@v4
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: '3.10'
 | 
			
		||||
          cache: pip
 | 
			
		||||
 | 
			
		||||
      # For cocoapods pod upload
 | 
			
		||||
      - uses: ruby/setup-ruby@v1
 | 
			
		||||
        with:
 | 
			
		||||
          ruby-version: '3.2'
 | 
			
		||||
          bundler-cache: true
 | 
			
		||||
 | 
			
		||||
      - name: Download arm64 artifacts
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: pytorch-ios-build-artifacts-arm64
 | 
			
		||||
 | 
			
		||||
      - name: Download x86_64 artifacts
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: pytorch-ios-build-artifacts-x86_64
 | 
			
		||||
 | 
			
		||||
      - name: Unzip arm64 and x86_64 artifacts
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          for ARCH in "arm64" "x86_64"; do
 | 
			
		||||
            TMP_DIR="${RUNNER_TEMP}/${ARCH}"
 | 
			
		||||
            mkdir -p "${TMP_DIR}"
 | 
			
		||||
 | 
			
		||||
            cp "${ARCH}.zip" "${TMP_DIR}"
 | 
			
		||||
 | 
			
		||||
            pushd "${TMP_DIR}"
 | 
			
		||||
            unzip -o "${ARCH}.zip"
 | 
			
		||||
            popd
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
      - name: Prepare the artifact
 | 
			
		||||
        env:
 | 
			
		||||
          IS_NIGHTLY: ${{ github.event.ref == 'refs/heads/nightly' }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        working-directory: ${{ runner.temp }}/arm64
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          DEST_DIR="${RUNNER_TEMP}"/ios
 | 
			
		||||
          echo "DEST_DIR=${DEST_DIR}" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
          # Prepare all the sub directories
 | 
			
		||||
          mkdir -p "${DEST_DIR}"/install/lib
 | 
			
		||||
 | 
			
		||||
          # Copy header and share files, arm64 or x86_64 both work
 | 
			
		||||
          cp -R install/include "${DEST_DIR}"/install
 | 
			
		||||
          cp -R install/share "${DEST_DIR}"/install
 | 
			
		||||
          # The last dash is important to copy only files under src
 | 
			
		||||
          cp -R src "${DEST_DIR}"
 | 
			
		||||
          cp LICENSE "${DEST_DIR}"
 | 
			
		||||
 | 
			
		||||
          if [ "${IS_NIGHTLY}" == true ]; then
 | 
			
		||||
            PYTORCH_VERSION=$(cat version.txt)
 | 
			
		||||
            DATE=$(date -u +%Y%m%d)
 | 
			
		||||
            echo "${PYTORCH_VERSION}.${DATE}" > "${DEST_DIR}"/version.txt
 | 
			
		||||
          else
 | 
			
		||||
            cp version.txt "${DEST_DIR}"
 | 
			
		||||
          fi
 | 
			
		||||
          PYTORCH_VERSION=$(cat "${DEST_DIR}"/version.txt)
 | 
			
		||||
          echo "PYTORCH_VERSION=${PYTORCH_VERSION}" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
          pushd install/lib
 | 
			
		||||
          # shellcheck disable=SC2207
 | 
			
		||||
          LIBRARIES=($(ls ./*.a))
 | 
			
		||||
          popd
 | 
			
		||||
 | 
			
		||||
          for LIB in "${LIBRARIES[@]}"; do
 | 
			
		||||
            FROM_LIBS=("${RUNNER_TEMP}"/arm64/install/lib/"${LIB}" "${RUNNER_TEMP}"/x86_64/install/lib/"${LIB}")
 | 
			
		||||
            # Create a fat binary for both arm64 and x86_64
 | 
			
		||||
            lipo -create "${FROM_LIBS[@]}" -o "${DEST_DIR}"/install/lib/"${LIB}"
 | 
			
		||||
            # Print the info
 | 
			
		||||
            lipo -i "${DEST_DIR}"/install/lib/"${LIB}"
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
          BUILD_LITE_INTERPRETER=1
 | 
			
		||||
          if [ -f "${RUNNER_TEMP}"/arm64/LibTorch.podspec ]; then
 | 
			
		||||
            # If LibTorch.podspec is used instead of LibTorch-Lite.podspec, the artifact is built
 | 
			
		||||
            # without lite interpreter
 | 
			
		||||
            BUILD_LITE_INTERPRETER=0
 | 
			
		||||
          fi
 | 
			
		||||
          echo "BUILD_LITE_INTERPRETER=${BUILD_LITE_INTERPRETER}" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
      - name: Prepare the podspec
 | 
			
		||||
        env:
 | 
			
		||||
          IS_NIGHTLY: ${{ github.event.ref == 'refs/heads/nightly' }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        working-directory: ${{ env.DEST_DIR }}
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          ARTIFACT_NAME=libtorch
 | 
			
		||||
          SPEC_NAME=LibTorch
 | 
			
		||||
 | 
			
		||||
          if [ "${BUILD_LITE_INTERPRETER}" == "1" ]; then
 | 
			
		||||
            ARTIFACT_NAME="${ARTIFACT_NAME}_lite_ios"
 | 
			
		||||
            SPEC_NAME="${SPEC_NAME}-Lite"
 | 
			
		||||
          else
 | 
			
		||||
            ARTIFACT_NAME="${ARTIFACT_NAME}_ios"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          if [ "${IS_NIGHTLY}" == true ]; then
 | 
			
		||||
            ARTIFACT_NAME="${ARTIFACT_NAME}_nightly_${PYTORCH_VERSION}.zip"
 | 
			
		||||
            SPEC_NAME="${SPEC_NAME}-Nightly"
 | 
			
		||||
          else
 | 
			
		||||
            ARTIFACT_NAME="${ARTIFACT_NAME}_${PYTORCH_VERSION}.zip"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          SPEC_NAME_WITH_VERSION="${SPEC_NAME}-${PYTORCH_VERSION}.podspec"
 | 
			
		||||
          SPEC_NAME="${SPEC_NAME}.podspec"
 | 
			
		||||
 | 
			
		||||
          # Also copy the spec file
 | 
			
		||||
          cp "${RUNNER_TEMP}"/arm64/"${SPEC_NAME}" "${SPEC_NAME_WITH_VERSION}"
 | 
			
		||||
 | 
			
		||||
          # NB: It's important to zip all the files before uploading because the GHA will upload
 | 
			
		||||
          # all files sequentially which is both slow and has too many requests. More info is at
 | 
			
		||||
          # https://github.com/actions/upload-artifact#too-many-uploads-resulting-in-429-responses
 | 
			
		||||
          zip -r "${ARTIFACT_NAME}" install src version.txt LICENSE
 | 
			
		||||
 | 
			
		||||
          {
 | 
			
		||||
            echo "ARTIFACT_NAME=${ARTIFACT_NAME}"
 | 
			
		||||
            echo "SPEC_NAME_WITH_VERSION=${SPEC_NAME_WITH_VERSION}"
 | 
			
		||||
            echo "SPEC_NAME=${SPEC_NAME}"
 | 
			
		||||
          } >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
      - uses: actions/upload-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: pytorch-ios-artifacts
 | 
			
		||||
          if-no-files-found: error
 | 
			
		||||
          path: ${{ env.DEST_DIR }}/${{ env.ARTIFACT_NAME }}
 | 
			
		||||
 | 
			
		||||
      - uses: actions/upload-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: pytorch-ios-podspec
 | 
			
		||||
          if-no-files-found: error
 | 
			
		||||
          path: ${{ env.DEST_DIR }}/${{ env.SPEC_NAME_WITH_VERSION }}
 | 
			
		||||
 | 
			
		||||
      - name: Set DRY_RUN
 | 
			
		||||
        if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || (startsWith(github.event.ref, 'refs/tags/v'))) }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "DRY_RUN=disabled" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
      - name: Upload the artifact to S3
 | 
			
		||||
        env:
 | 
			
		||||
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
          IS_NIGHTLY: ${{ github.event.ref == 'refs/heads/nightly' }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        working-directory: ${{ env.DEST_DIR }}
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          pip install -q awscli==1.29.40
 | 
			
		||||
 | 
			
		||||
          DRY_RUN=${DRY_RUN:-enabled}
 | 
			
		||||
          AWS_S3_CP="aws s3 cp --dryrun"
 | 
			
		||||
          if [ "${DRY_RUN}" == "disabled" ]; then
 | 
			
		||||
            AWS_S3_CP="aws s3 cp"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          if [ "${IS_NIGHTLY}" == true ]; then
 | 
			
		||||
            BUCKET_NAME="ossci-ios-build"
 | 
			
		||||
          else
 | 
			
		||||
            BUCKET_NAME="ossci-ios"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          ${AWS_S3_CP} "${ARTIFACT_NAME}" "s3://${BUCKET_NAME}/" --acl public-read
 | 
			
		||||
          ${AWS_S3_CP} "${SPEC_NAME_WITH_VERSION}" "s3://${BUCKET_NAME}/" --acl public-read
 | 
			
		||||
 | 
			
		||||
      - name: Upload the artifact to cocoapods (nightly only)
 | 
			
		||||
        env:
 | 
			
		||||
          # We need to set this secret to upload to cocoapods. However, we might want
 | 
			
		||||
          # to NOT set this for PROD release so that we can upload the artifacts manually
 | 
			
		||||
          COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN || '' }}
 | 
			
		||||
        if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/nightly' && env.COCOAPODS_TRUNK_TOKEN != '' }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        working-directory: ${{ runner.temp }}/arm64
 | 
			
		||||
        run: |
 | 
			
		||||
          set -eux
 | 
			
		||||
 | 
			
		||||
          gem install cocoapods
 | 
			
		||||
 | 
			
		||||
          pod trunk me
 | 
			
		||||
          # Upload the spec to cocoapods
 | 
			
		||||
          pod trunk push --verbose --allow-warnings --use-libraries --skip-import-validation "${SPEC_NAME}"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								.github/workflows/_linux-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/_linux-build.yml
									
									
									
									
										vendored
									
									
								
							@ -73,7 +73,7 @@ jobs:
 | 
			
		||||
      test-matrix: ${{ steps.filter.outputs.test-matrix }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
@ -82,19 +82,19 @@ jobs:
 | 
			
		||||
      # checkout because when we run this action we don't *have* a local
 | 
			
		||||
      # checkout. In other cases you should prefer a local checkout.
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image-name }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
@ -192,5 +192,5 @@ jobs:
 | 
			
		||||
          path: sccache-stats-*.json
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/workflows/_linux-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/_linux-test.yml
									
									
									
									
										vendored
									
									
								
							@ -57,7 +57,7 @@ jobs:
 | 
			
		||||
    timeout-minutes: ${{ inputs.timeout-minutes }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        if: ${{ !contains(matrix.runner, 'gcp.a100') }}
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
@ -66,25 +66,25 @@ jobs:
 | 
			
		||||
              docker exec -it $(docker container ps --format '{{.ID}}') bash
 | 
			
		||||
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
      - name: Install nvidia driver, nvidia-docker runtime, set GPU_FLAG
 | 
			
		||||
        id: install-nvidia-driver
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-nvidia@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-nvidia@release/2.1
 | 
			
		||||
        if: contains(inputs.build-environment, 'cuda') && !contains(matrix.config, 'nogpu')
 | 
			
		||||
 | 
			
		||||
      - name: Lock NVIDIA A100 40GB Frequency
 | 
			
		||||
@ -292,7 +292,7 @@ jobs:
 | 
			
		||||
          path: ./**/core.[1-9]*
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
      # NB: We are currently having an intermittent GPU-related issue on G5 runners with
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								.github/workflows/_mac-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/_mac-build.yml
									
									
									
									
										vendored
									
									
								
							@ -71,11 +71,11 @@ jobs:
 | 
			
		||||
      test-matrix: ${{ steps.filter.outputs.test-matrix }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Clean up disk space before running MacOS workflow
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@release/2.1
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Set xcode version
 | 
			
		||||
        env:
 | 
			
		||||
@ -87,7 +87,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Setup miniconda
 | 
			
		||||
        if: inputs.environment-file == ''
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: ${{ inputs.python-version }}
 | 
			
		||||
          environment-file: .github/requirements/conda-env-${{ runner.os }}-${{ runner.arch }}
 | 
			
		||||
@ -97,7 +97,7 @@ jobs:
 | 
			
		||||
      # environment even though the arch is x86-64
 | 
			
		||||
      - name: Setup miniconda using the provided environment file
 | 
			
		||||
        if: inputs.environment-file != ''
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: ${{ inputs.python-version }}
 | 
			
		||||
          environment-file: ${{ inputs.environment-file }}
 | 
			
		||||
@ -206,4 +206,4 @@ jobs:
 | 
			
		||||
      - name: Clean up disk space
 | 
			
		||||
        if: always()
 | 
			
		||||
        continue-on-error: true
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@release/2.1
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/_mac-test-mps.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/_mac-test-mps.yml
									
									
									
									
										vendored
									
									
								
							@ -41,7 +41,7 @@ jobs:
 | 
			
		||||
      reenabled-issues: ${{ steps.filter.outputs.reenabled-issues }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -85,7 +85,7 @@ jobs:
 | 
			
		||||
          use-gha: true
 | 
			
		||||
 | 
			
		||||
      - name: Setup miniconda
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: ${{ inputs.python-version }}
 | 
			
		||||
          environment-file: .github/requirements/conda-env-${{ runner.os }}-${{ runner.arch }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/_mac-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/_mac-test.yml
									
									
									
									
										vendored
									
									
								
							@ -69,11 +69,11 @@ jobs:
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
      - name: Clean up disk space before running MacOS workflow
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@release/2.1
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Download build artifacts
 | 
			
		||||
        uses: ./.github/actions/download-build-artifacts
 | 
			
		||||
@ -82,7 +82,7 @@ jobs:
 | 
			
		||||
          use-gha: true
 | 
			
		||||
 | 
			
		||||
      - name: Setup miniconda
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: ${{ inputs.python-version }}
 | 
			
		||||
          environment-file: .github/requirements/conda-env-${{ runner.os }}-${{ runner.arch }}
 | 
			
		||||
@ -205,4 +205,4 @@ jobs:
 | 
			
		||||
      - name: Clean up disk space
 | 
			
		||||
        if: always()
 | 
			
		||||
        continue-on-error: true
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/check-disk-space@release/2.1
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/_rocm-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/_rocm-test.yml
									
									
									
									
										vendored
									
									
								
							@ -48,7 +48,7 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          no-sudo: true
 | 
			
		||||
 | 
			
		||||
@ -57,12 +57,12 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Calculate docker image
 | 
			
		||||
        id: calculate-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ inputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/_run_android_tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/_run_android_tests.yml
									
									
									
									
										vendored
									
									
								
							@ -22,7 +22,7 @@ jobs:
 | 
			
		||||
      keep-going: ${{ steps.filter.outputs.keep-going }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
@ -45,10 +45,10 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup miniconda
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-miniconda@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: 3.8
 | 
			
		||||
          environment-file: .github/requirements/conda-env-${{ runner.os }}-${{ runner.arch }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/_win-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/_win-build.yml
									
									
									
									
										vendored
									
									
								
							@ -60,10 +60,10 @@ jobs:
 | 
			
		||||
          git config --global core.fsmonitor false
 | 
			
		||||
 | 
			
		||||
      - name: Clean up leftover processes on non-ephemeral Windows runner
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/cleanup-runner@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/cleanup-runner@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
          instructions: |
 | 
			
		||||
@ -78,7 +78,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          no-sudo: true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/_win-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/_win-test.yml
									
									
									
									
										vendored
									
									
								
							@ -48,10 +48,10 @@ jobs:
 | 
			
		||||
          git config --global core.fsmonitor false
 | 
			
		||||
 | 
			
		||||
      - name: Clean up leftover processes on non-ephemeral Windows runner
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/cleanup-runner@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/cleanup-runner@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
          instructions: |
 | 
			
		||||
@ -67,7 +67,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          no-sudo: true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										70
									
								
								.github/workflows/build-ios-binaries.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								.github/workflows/build-ios-binaries.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
name: Build iOS binaries
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - nightly
 | 
			
		||||
    tags:
 | 
			
		||||
      # NOTE: Binary build pipelines should only get triggered on release candidate builds
 | 
			
		||||
      # Release candidate tags look like: v1.11.0-rc1
 | 
			
		||||
      - v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+
 | 
			
		||||
    paths:
 | 
			
		||||
      - .github/workflows/build-ios-binaries.yml
 | 
			
		||||
      - .github/workflows/_ios-build-test.yml
 | 
			
		||||
  pull_request:
 | 
			
		||||
    paths:
 | 
			
		||||
      - .github/workflows/build-ios-binaries.yml
 | 
			
		||||
      - .github/workflows/_ios-build-test.yml
 | 
			
		||||
  # NB: We can use this workflow dispatch to test and build iOS binaries manually
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
    inputs:
 | 
			
		||||
      use_lite_interpreter:
 | 
			
		||||
        description: "Use PyTorch lite interpreter?"
 | 
			
		||||
        type: string
 | 
			
		||||
        default: 1
 | 
			
		||||
      use_coreml:
 | 
			
		||||
        description: "Use Apple Core ML?"
 | 
			
		||||
        type: string
 | 
			
		||||
        default: 1
 | 
			
		||||
      use_custom_op_list:
 | 
			
		||||
        description: "Specify the custom ops list to include in the binaries"
 | 
			
		||||
        type: string
 | 
			
		||||
        default: ""
 | 
			
		||||
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.event_name == 'workflow_dispatch' }}
 | 
			
		||||
  cancel-in-progress: true
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  # TODO: Figure out how to migrate this job to M1 runner
 | 
			
		||||
  ios-build-test:
 | 
			
		||||
    name: ios-build-test
 | 
			
		||||
    uses: ./.github/workflows/_ios-build-test.yml
 | 
			
		||||
    with:
 | 
			
		||||
      build-environment: ios-build-test
 | 
			
		||||
      sync-tag: ios-build-test
 | 
			
		||||
      test-matrix: |
 | 
			
		||||
        { include: [
 | 
			
		||||
          { config: "default",
 | 
			
		||||
            shard: 1,
 | 
			
		||||
            num_shards: 1,
 | 
			
		||||
            runner: "macos-12",
 | 
			
		||||
            ios_platform: "SIMULATOR",
 | 
			
		||||
            ios_arch: "x86_64",
 | 
			
		||||
            use_lite_interpreter: ${{ inputs.use_lite_interpreter || 1 }},
 | 
			
		||||
            use_metal: 0,
 | 
			
		||||
            use_coreml: ${{ inputs.use_coreml || 1 }},
 | 
			
		||||
            use_custom_op_list: ${{ inputs.use_custom_op_list || '' }}
 | 
			
		||||
          },
 | 
			
		||||
          { config: "default",
 | 
			
		||||
            shard: 1,
 | 
			
		||||
            num_shards: 1,
 | 
			
		||||
            runner: "macos-12",
 | 
			
		||||
            ios_platform: "OS",
 | 
			
		||||
            ios_arch: "arm64",
 | 
			
		||||
            use_lite_interpreter: ${{ inputs.use_lite_interpreter || 1 }},
 | 
			
		||||
            use_metal: 1,
 | 
			
		||||
            use_coreml: ${{ inputs.use_coreml || 1 }},
 | 
			
		||||
            use_custom_op_list: ${{ inputs.use_custom_op_list || '' }}
 | 
			
		||||
          }
 | 
			
		||||
        ]}
 | 
			
		||||
							
								
								
									
										192
									
								
								.github/workflows/build-triton-wheel.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										192
									
								
								.github/workflows/build-triton-wheel.yml
									
									
									
									
										vendored
									
									
								
							@ -3,7 +3,11 @@ name: Build Triton wheels
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
      - release/2.1
 | 
			
		||||
    tags:
 | 
			
		||||
      # NOTE: Binary build pipelines should only get triggered on release candidate builds
 | 
			
		||||
      # Release candidate tags look like: v1.11.0-rc1
 | 
			
		||||
      - v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+
 | 
			
		||||
    paths:
 | 
			
		||||
      - .github/workflows/build-triton-wheel.yml
 | 
			
		||||
      - .github/scripts/build_triton_wheel.py
 | 
			
		||||
@ -43,12 +47,12 @@ jobs:
 | 
			
		||||
      BUILD_DEVICE: ${{ matrix.device }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
 | 
			
		||||
@ -56,11 +60,13 @@ jobs:
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ env.DOCKER_IMAGE }}
 | 
			
		||||
 | 
			
		||||
      - name: Build Triton wheel
 | 
			
		||||
        env:
 | 
			
		||||
          IS_RELEASE_TAG: ${{ startsWith(github.event.ref, 'refs/tags/v') }}
 | 
			
		||||
        run: |
 | 
			
		||||
          set -x
 | 
			
		||||
          mkdir -p "${RUNNER_TEMP}/artifacts/"
 | 
			
		||||
@ -98,64 +104,75 @@ jobs:
 | 
			
		||||
            BUILD_ROCM="--build-rocm"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          RELEASE=""
 | 
			
		||||
          if [[ "${IS_RELEASE_TAG}" == true ]]; then
 | 
			
		||||
            RELEASE="--release"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          docker exec -t "${container_name}" yum install -y zlib-devel zip
 | 
			
		||||
          docker exec -t "${container_name}" "${PYTHON_EXECUTABLE}"  -m pip install -U setuptools==67.4.0
 | 
			
		||||
          docker exec -t "${container_name}" "${PYTHON_EXECUTABLE}" /pytorch/.github/scripts/build_triton_wheel.py $BUILD_ROCM
 | 
			
		||||
          docker exec -t "${container_name}" "${PYTHON_EXECUTABLE}" /pytorch/.github/scripts/build_triton_wheel.py $BUILD_ROCM $RELEASE
 | 
			
		||||
          docker exec -t "${container_name}" chown -R 1000.1000 /artifacts
 | 
			
		||||
 | 
			
		||||
      - uses: actions/upload-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: "pytorch-triton-wheel-${{ matrix.py_vers }}"
 | 
			
		||||
          # NB: Use the same name here and all wheels can be downloaded by referring to the same artifact
 | 
			
		||||
          name: pytorch-triton-wheel
 | 
			
		||||
          if-no-files-found: error
 | 
			
		||||
          path:
 | 
			
		||||
            ${{ runner.temp }}/artifacts/*
 | 
			
		||||
          path: ${{ runner.temp }}/artifacts/*
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
  upload-wheel:
 | 
			
		||||
    runs-on: linux.20_04.4x
 | 
			
		||||
    runs-on: ubuntu-22.04
 | 
			
		||||
    needs: build-wheel
 | 
			
		||||
    container:
 | 
			
		||||
      image: continuumio/miniconda3:4.12.0
 | 
			
		||||
    env:
 | 
			
		||||
      GITHUB_TOKEN: ${{ secrets.github-token }}
 | 
			
		||||
    environment: ${{ (github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || startsWith(github.event.ref, 'refs/tags/v'))) && 'conda-aws-upload' || '' }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Download Build Artifacts (3.8)
 | 
			
		||||
      - uses: actions/checkout@v3
 | 
			
		||||
 | 
			
		||||
      - name: Download Build Artifacts
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: "pytorch-triton-wheel-3.8"
 | 
			
		||||
          path: "${{ runner.temp }}/artifacts/"
 | 
			
		||||
      - name: Download Build Artifacts (3.9)
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: "pytorch-triton-wheel-3.9"
 | 
			
		||||
          path: "${{ runner.temp }}/artifacts/"
 | 
			
		||||
      - name: Download Build Artifacts (3.10)
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: "pytorch-triton-wheel-3.10"
 | 
			
		||||
          path: "${{ runner.temp }}/artifacts/"
 | 
			
		||||
      - name: Download Build Artifacts (3.11)
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: "pytorch-triton-wheel-3.11"
 | 
			
		||||
          path: "${{ runner.temp }}/artifacts/"
 | 
			
		||||
      - name: Upload binaries
 | 
			
		||||
        if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/main' }}
 | 
			
		||||
        env:
 | 
			
		||||
          PKG_DIR: "${{ runner.temp }}/artifacts"
 | 
			
		||||
          # When running these on pull_request events these should be blank
 | 
			
		||||
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_S3_UPDATE_ACCESS_KEY_ID }}
 | 
			
		||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_UPDATE_SECRET_ACCESS_KEY }}
 | 
			
		||||
          UPLOAD_BUCKET: "s3://pytorch"
 | 
			
		||||
          name: pytorch-triton-wheel
 | 
			
		||||
          path: ${{ runner.temp }}/artifacts/
 | 
			
		||||
 | 
			
		||||
      - name: Set DRY_RUN (only for tagged pushes)
 | 
			
		||||
        if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || (startsWith(github.event.ref, 'refs/tags/v'))) }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
            set -ex
 | 
			
		||||
            pip install -q awscli
 | 
			
		||||
            s3_dir="${UPLOAD_BUCKET}/whl/nightly/"
 | 
			
		||||
            for pkg in "${PKG_DIR}/"*.whl; do
 | 
			
		||||
              aws s3 cp --no-progress --acl public-read "${pkg}" "${s3_dir}"
 | 
			
		||||
             done
 | 
			
		||||
          echo "DRY_RUN=disabled" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
      - name: Set UPLOAD_CHANNEL (only for tagged pushes)
 | 
			
		||||
        if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -ex
 | 
			
		||||
 | 
			
		||||
          # reference ends with an RC suffix
 | 
			
		||||
          if [[ "${GITHUB_REF_NAME}" = *-rc[0-9]* ]]; then
 | 
			
		||||
            echo "UPLOAD_CHANNEL=test" >> "$GITHUB_ENV"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      # NB: This step is gated by DRY_RUN, which is enabled everywhere except nightly and release branches
 | 
			
		||||
      - name: Upload binaries
 | 
			
		||||
        env:
 | 
			
		||||
          PACKAGE_TYPE: wheel
 | 
			
		||||
          # The UPLOAD_SUBFOLDER needs to be empty here so that triton wheels are uploaded
 | 
			
		||||
          # to nightly or test
 | 
			
		||||
          UPLOAD_SUBFOLDER: ""
 | 
			
		||||
          PKG_DIR: ${{ runner.temp }}/artifacts
 | 
			
		||||
          # When running these on pull_request events these should be blank
 | 
			
		||||
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -ex
 | 
			
		||||
          bash .circleci/scripts/binary_upload.sh
 | 
			
		||||
 | 
			
		||||
  build-conda:
 | 
			
		||||
    name: "Build Triton Conda"
 | 
			
		||||
    runs-on: [self-hosted, linux.2xlarge]
 | 
			
		||||
@ -164,19 +181,17 @@ jobs:
 | 
			
		||||
      matrix:
 | 
			
		||||
        py_vers: [ "3.8", "3.9", "3.10", "3.11" ]
 | 
			
		||||
    timeout-minutes: 40
 | 
			
		||||
    environment: ${{ (github.event_name == 'push' && github.event.ref == 'refs/heads/main') && 'conda-aws-upload' || '' }}
 | 
			
		||||
    env:
 | 
			
		||||
      DOCKER_IMAGE: pytorch/conda-builder:cpu
 | 
			
		||||
      PY_VERS: ${{ matrix.py_vers }}
 | 
			
		||||
      ANACONDA_API_TOKEN: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
 | 
			
		||||
@ -184,11 +199,13 @@ jobs:
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ env.DOCKER_IMAGE }}
 | 
			
		||||
 | 
			
		||||
      - name: Build Triton conda package
 | 
			
		||||
        env:
 | 
			
		||||
          IS_RELEASE_TAG: ${{ startsWith(github.event.ref, 'refs/tags/v') }}
 | 
			
		||||
        run: |
 | 
			
		||||
          set -x
 | 
			
		||||
          mkdir -p "${RUNNER_TEMP}/artifacts/"
 | 
			
		||||
@ -198,31 +215,76 @@ jobs:
 | 
			
		||||
            -v "${GITHUB_WORKSPACE}:/pytorch" \
 | 
			
		||||
            -v "${RUNNER_TEMP}/artifacts:/artifacts" \
 | 
			
		||||
            -w /artifacts/ \
 | 
			
		||||
            -e ANACONDA_API_TOKEN \
 | 
			
		||||
            "${DOCKER_IMAGE}" \
 | 
			
		||||
          )
 | 
			
		||||
 | 
			
		||||
          RELEASE=""
 | 
			
		||||
          if [[ "${IS_RELEASE_TAG}" == true ]]; then
 | 
			
		||||
            RELEASE="--release"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          docker exec -t "${container_name}" yum install -y llvm11 llvm11-devel llvm11-static llvm11-libs zlib-devel
 | 
			
		||||
          docker exec -t "${container_name}" python /pytorch/.github/scripts/build_triton_wheel.py --build-conda --py-version="${PY_VERS}"
 | 
			
		||||
 | 
			
		||||
      - name: Upload artifacts to Anaconda
 | 
			
		||||
        if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/main' }}
 | 
			
		||||
        run: |
 | 
			
		||||
          container_name=$(docker container ps --format '{{.ID}}')
 | 
			
		||||
          docker exec -t "${container_name}" sh -c "anaconda upload /artifacts/torch*.tar.bz2 -u pytorch-nightly --label main --no-progress --force"
 | 
			
		||||
 | 
			
		||||
      - name: Chown artifacts
 | 
			
		||||
        run: |
 | 
			
		||||
          container_name=$(docker container ps --format '{{.ID}}')
 | 
			
		||||
          docker exec -t "${container_name}" python /pytorch/.github/scripts/build_triton_wheel.py --build-conda --py-version="${PY_VERS}" $RELEASE
 | 
			
		||||
          docker exec -t "${container_name}" chown -R 1000.1000 /artifacts
 | 
			
		||||
 | 
			
		||||
      - uses: actions/upload-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: "pytorch-triton-conda-${{ matrix.py_vers }}"
 | 
			
		||||
          # NB: Use the same name here and all wheels can be downloaded by referring to the same artifact
 | 
			
		||||
          name: pytorch-triton-conda
 | 
			
		||||
          if-no-files-found: error
 | 
			
		||||
          path:
 | 
			
		||||
            ${{ runner.temp }}/artifacts/*
 | 
			
		||||
          path: ${{ runner.temp }}/artifacts/*
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
  upload-conda:
 | 
			
		||||
    runs-on: ubuntu-22.04
 | 
			
		||||
    needs: build-conda
 | 
			
		||||
    container:
 | 
			
		||||
      image: continuumio/miniconda3:4.12.0
 | 
			
		||||
    environment: ${{ (github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || startsWith(github.event.ref, 'refs/tags/v'))) && 'conda-aws-upload' || '' }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v3
 | 
			
		||||
 | 
			
		||||
      - name: Download Build Artifacts
 | 
			
		||||
        uses: actions/download-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          name: pytorch-triton-conda
 | 
			
		||||
          path: ${{ runner.temp }}/artifacts/
 | 
			
		||||
 | 
			
		||||
      - name: Set DRY_RUN (only for tagged pushes)
 | 
			
		||||
        if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/nightly' || (startsWith(github.event.ref, 'refs/tags/v'))) }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "DRY_RUN=disabled" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
      - name: Set UPLOAD_CHANNEL (only for tagged pushes)
 | 
			
		||||
        if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -ex
 | 
			
		||||
 | 
			
		||||
          # reference ends with an RC suffix
 | 
			
		||||
          if [[ "${GITHUB_REF_NAME}" = *-rc[0-9]* ]]; then
 | 
			
		||||
            echo "UPLOAD_CHANNEL=test" >> "$GITHUB_ENV"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      # NB: This step is gated by DRY_RUN, which is enabled everywhere except nightly and release branches
 | 
			
		||||
      - name: Upload binaries to Anaconda
 | 
			
		||||
        env:
 | 
			
		||||
          PACKAGE_TYPE: conda
 | 
			
		||||
          PKG_DIR: ${{ runner.temp }}/artifacts
 | 
			
		||||
          # When running these on pull_request events these should be blank
 | 
			
		||||
          CONDA_PYTORCHBOT_TOKEN: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
          CONDA_PYTORCHBOT_TOKEN_TEST: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          set -ex
 | 
			
		||||
 | 
			
		||||
          if [[ "${UPLOAD_CHANNEL}" = "nightly" ]]; then
 | 
			
		||||
            export ANACONDA_API_TOKEN="${CONDA_PYTORCHBOT_TOKEN}"
 | 
			
		||||
          else
 | 
			
		||||
            export ANACONDA_API_TOKEN="${CONDA_PYTORCHBOT_TOKEN_TEST}"
 | 
			
		||||
          fi
 | 
			
		||||
          bash .circleci/scripts/binary_upload.sh
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/check-labels.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/check-labels.yml
									
									
									
									
										vendored
									
									
								
							@ -29,7 +29,7 @@ jobs:
 | 
			
		||||
    runs-on: linux.20_04.4x
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Run close_nonexistent_disable_issues.py
 | 
			
		||||
        env:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/docker-builds.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/docker-builds.yml
									
									
									
									
										vendored
									
									
								
							@ -61,21 +61,21 @@ jobs:
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      # deep clone (fetch-depth 0) required for git merge-base
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - name: Setup Linux
 | 
			
		||||
        uses: ./.github/actions/setup-linux
 | 
			
		||||
 | 
			
		||||
      - name: Build docker image
 | 
			
		||||
        id: build-docker-image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image-name: ${{ matrix.docker-image-name }}
 | 
			
		||||
          always-rebuild: true
 | 
			
		||||
          push: true
 | 
			
		||||
 | 
			
		||||
      - name: Pull docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: ${{ steps.build-docker-image.outputs.docker-image }}
 | 
			
		||||
 | 
			
		||||
@ -105,5 +105,5 @@ jobs:
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/docker-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/docker-release.yml
									
									
									
									
										vendored
									
									
								
							@ -47,7 +47,7 @@ jobs:
 | 
			
		||||
      BUILD_PLATFORMS: ${{ matrix.platform }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Setup SSH (Click me for login details)
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-secret: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
@ -109,5 +109,5 @@ jobs:
 | 
			
		||||
                 ghcr.io/pytorch/pytorch-nightly:latest
 | 
			
		||||
          docker push ghcr.io/pytorch/pytorch-nightly:latest
 | 
			
		||||
      - name: Teardown Linux
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.1
 | 
			
		||||
        if: always()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/generated-linux-aarch64-binary-manywheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/generated-linux-aarch64-binary-manywheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -93,7 +93,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-cpu-aarch64-build:
 | 
			
		||||
@ -153,7 +153,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-cpu-aarch64-build:
 | 
			
		||||
@ -213,7 +213,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-cpu-aarch64-build:
 | 
			
		||||
@ -273,5 +273,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										24
									
								
								.github/workflows/generated-linux-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.github/workflows/generated-linux-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -90,7 +90,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_8-cuda11_8-build:
 | 
			
		||||
@ -150,7 +150,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_8-cuda12_1-build:
 | 
			
		||||
@ -210,7 +210,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_9-cpu-build:
 | 
			
		||||
@ -267,7 +267,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_9-cuda11_8-build:
 | 
			
		||||
@ -327,7 +327,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_9-cuda12_1-build:
 | 
			
		||||
@ -387,7 +387,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_10-cpu-build:
 | 
			
		||||
@ -444,7 +444,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_10-cuda11_8-build:
 | 
			
		||||
@ -504,7 +504,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_10-cuda12_1-build:
 | 
			
		||||
@ -564,7 +564,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_11-cpu-build:
 | 
			
		||||
@ -621,7 +621,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_11-cuda11_8-build:
 | 
			
		||||
@ -681,7 +681,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  conda-py3_11-cuda12_1-build:
 | 
			
		||||
@ -741,5 +741,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								.github/workflows/generated-linux-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.github/workflows/generated-linux-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -93,7 +93,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cpu-shared-without-deps-cxx11-abi-build:
 | 
			
		||||
@ -153,7 +153,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cpu-static-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -213,7 +213,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cpu-static-without-deps-cxx11-abi-build:
 | 
			
		||||
@ -273,7 +273,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-shared-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -336,7 +336,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-shared-without-deps-cxx11-abi-build:
 | 
			
		||||
@ -399,7 +399,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-static-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -462,7 +462,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-static-without-deps-cxx11-abi-build:
 | 
			
		||||
@ -525,7 +525,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-shared-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -588,7 +588,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-shared-without-deps-cxx11-abi-build:
 | 
			
		||||
@ -651,7 +651,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-static-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -714,7 +714,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-static-without-deps-cxx11-abi-build:
 | 
			
		||||
@ -777,7 +777,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_5-shared-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -828,7 +828,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -840,7 +839,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -854,7 +853,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/libtorch-cxx11-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -881,7 +880,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_5-static-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -932,7 +931,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -944,7 +942,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -958,7 +956,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/libtorch-cxx11-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -985,7 +983,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_6-shared-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -1036,7 +1034,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1048,7 +1045,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1062,7 +1059,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/libtorch-cxx11-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1089,7 +1086,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_6-static-with-deps-cxx11-abi-build:
 | 
			
		||||
@ -1140,7 +1137,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1152,7 +1148,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1166,7 +1162,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/libtorch-cxx11-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1193,5 +1189,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								.github/workflows/generated-linux-binary-libtorch-pre-cxx11-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.github/workflows/generated-linux-binary-libtorch-pre-cxx11-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -93,7 +93,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cpu-shared-without-deps-pre-cxx11-build:
 | 
			
		||||
@ -153,7 +153,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cpu-static-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -213,7 +213,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cpu-static-without-deps-pre-cxx11-build:
 | 
			
		||||
@ -273,7 +273,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-shared-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -336,7 +336,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-shared-without-deps-pre-cxx11-build:
 | 
			
		||||
@ -399,7 +399,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-static-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -462,7 +462,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda11_8-static-without-deps-pre-cxx11-build:
 | 
			
		||||
@ -525,7 +525,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-shared-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -588,7 +588,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-shared-without-deps-pre-cxx11-build:
 | 
			
		||||
@ -651,7 +651,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-static-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -714,7 +714,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-cuda12_1-static-without-deps-pre-cxx11-build:
 | 
			
		||||
@ -777,7 +777,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_5-shared-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -828,7 +828,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -840,7 +839,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -854,7 +853,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -881,7 +880,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_5-static-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -932,7 +931,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -944,7 +942,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -958,7 +956,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -985,7 +983,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_6-shared-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -1036,7 +1034,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1048,7 +1045,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1062,7 +1059,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1089,7 +1086,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  libtorch-rocm5_6-static-with-deps-pre-cxx11-build:
 | 
			
		||||
@ -1140,7 +1137,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1152,7 +1148,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1166,7 +1162,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1193,5 +1189,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/generated-linux-binary-manywheel-main.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/generated-linux-binary-manywheel-main.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -86,7 +86,7 @@ jobs:
 | 
			
		||||
      DESIRED_PYTHON: "3.8"
 | 
			
		||||
      build_name: manywheel-py3_8-cuda12_1-with-pypi-cudnn
 | 
			
		||||
      build_environment: linux-binary-manywheel
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.1.0; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
    secrets:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
  manywheel-py3_8-cuda12_1-with-pypi-cudnn-test:  # Testing
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										104
									
								
								.github/workflows/generated-linux-binary-manywheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										104
									
								
								.github/workflows/generated-linux-binary-manywheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -90,7 +90,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_8-cpu-cxx11-abi-build:
 | 
			
		||||
@ -150,7 +150,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_8-cuda11_8-build:
 | 
			
		||||
@ -210,7 +210,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_8-cuda12_1-with-pypi-cudnn-build:
 | 
			
		||||
@ -229,7 +229,7 @@ jobs:
 | 
			
		||||
      DESIRED_PYTHON: "3.8"
 | 
			
		||||
      build_name: manywheel-py3_8-cuda12_1-with-pypi-cudnn
 | 
			
		||||
      build_environment: linux-binary-manywheel
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.1.0; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
    secrets:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
  manywheel-py3_8-cuda12_1-with-pypi-cudnn-test:  # Testing
 | 
			
		||||
@ -271,7 +271,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_8-cuda12_1-build:
 | 
			
		||||
@ -331,7 +331,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_8-rocm5_5-build:
 | 
			
		||||
@ -380,7 +380,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -392,7 +391,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -406,7 +405,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -432,7 +431,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_8-rocm5_6-build:
 | 
			
		||||
@ -481,7 +480,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -493,7 +491,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -507,7 +505,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -533,7 +531,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-cpu-build:
 | 
			
		||||
@ -590,7 +588,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-cpu-cxx11-abi-build:
 | 
			
		||||
@ -650,7 +648,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-cuda11_8-build:
 | 
			
		||||
@ -710,7 +708,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-cuda12_1-with-pypi-cudnn-build:
 | 
			
		||||
@ -729,7 +727,7 @@ jobs:
 | 
			
		||||
      DESIRED_PYTHON: "3.9"
 | 
			
		||||
      build_name: manywheel-py3_9-cuda12_1-with-pypi-cudnn
 | 
			
		||||
      build_environment: linux-binary-manywheel
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.1.0; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
    secrets:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
  manywheel-py3_9-cuda12_1-with-pypi-cudnn-test:  # Testing
 | 
			
		||||
@ -771,7 +769,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-cuda12_1-build:
 | 
			
		||||
@ -831,7 +829,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-rocm5_5-build:
 | 
			
		||||
@ -880,7 +878,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -892,7 +889,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -906,7 +903,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -932,7 +929,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_9-rocm5_6-build:
 | 
			
		||||
@ -981,7 +978,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -993,7 +989,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1007,7 +1003,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1033,7 +1029,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-cpu-build:
 | 
			
		||||
@ -1090,7 +1086,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-cpu-cxx11-abi-build:
 | 
			
		||||
@ -1150,7 +1146,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-cuda11_8-build:
 | 
			
		||||
@ -1210,7 +1206,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-cuda12_1-with-pypi-cudnn-build:
 | 
			
		||||
@ -1229,7 +1225,7 @@ jobs:
 | 
			
		||||
      DESIRED_PYTHON: "3.10"
 | 
			
		||||
      build_name: manywheel-py3_10-cuda12_1-with-pypi-cudnn
 | 
			
		||||
      build_environment: linux-binary-manywheel
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.1.0; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
    secrets:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
  manywheel-py3_10-cuda12_1-with-pypi-cudnn-test:  # Testing
 | 
			
		||||
@ -1271,7 +1267,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-cuda12_1-build:
 | 
			
		||||
@ -1331,7 +1327,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-rocm5_5-build:
 | 
			
		||||
@ -1380,7 +1376,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1392,7 +1387,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1406,7 +1401,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1432,7 +1427,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_10-rocm5_6-build:
 | 
			
		||||
@ -1481,7 +1476,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1493,7 +1487,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1507,7 +1501,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1533,7 +1527,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-cpu-build:
 | 
			
		||||
@ -1590,7 +1584,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-cpu-cxx11-abi-build:
 | 
			
		||||
@ -1650,7 +1644,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-cuda11_8-build:
 | 
			
		||||
@ -1710,7 +1704,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-cuda12_1-with-pypi-cudnn-build:
 | 
			
		||||
@ -1729,7 +1723,7 @@ jobs:
 | 
			
		||||
      DESIRED_PYTHON: "3.11"
 | 
			
		||||
      build_name: manywheel-py3_11-cuda12_1-with-pypi-cudnn
 | 
			
		||||
      build_environment: linux-binary-manywheel
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
      PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu12==8.9.2.26; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu12==12.1.3.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu12==11.0.2.54; platform_system == 'Linux' and platform_machine == 'x86_64' | 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.18.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu12==12.1.105; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.1.0; platform_system == 'Linux' and platform_machine == 'x86_64'
 | 
			
		||||
    secrets:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
  manywheel-py3_11-cuda12_1-with-pypi-cudnn-test:  # Testing
 | 
			
		||||
@ -1771,7 +1765,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-cuda12_1-build:
 | 
			
		||||
@ -1831,7 +1825,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-rocm5_5-build:
 | 
			
		||||
@ -1880,7 +1874,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1892,7 +1885,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1906,7 +1899,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.5
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -1932,7 +1925,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
  manywheel-py3_11-rocm5_6-build:
 | 
			
		||||
@ -1981,7 +1974,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1993,7 +1985,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2007,7 +1999,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}"
 | 
			
		||||
      - name: Pull Docker image
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/pull-docker-image@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          docker-image: pytorch/manylinux-builder:rocm5.6
 | 
			
		||||
      - name: Test Pytorch binary
 | 
			
		||||
@ -2033,5 +2025,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/generated-macos-arm64-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/generated-macos-arm64-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -75,7 +75,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -87,7 +86,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -144,7 +143,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_9-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -187,7 +186,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -199,7 +197,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -256,7 +254,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_10-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -299,7 +297,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -311,7 +308,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -368,7 +365,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_11-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -411,7 +408,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -423,7 +419,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -480,5 +476,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/generated-macos-arm64-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/generated-macos-arm64-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -75,7 +75,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -87,7 +86,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -144,7 +143,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_9-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -187,7 +186,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -199,7 +197,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -256,7 +254,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_10-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -299,7 +297,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -311,7 +308,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -368,7 +365,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_11-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -411,7 +408,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -423,7 +419,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -480,5 +476,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/generated-macos-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/generated-macos-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -73,7 +73,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -85,7 +84,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -142,7 +141,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_9-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -185,7 +184,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -197,7 +195,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -254,7 +252,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_10-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -297,7 +295,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -309,7 +306,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -366,7 +363,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_11-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -409,7 +406,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -421,7 +417,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -478,5 +474,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/generated-macos-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/generated-macos-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -77,7 +77,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -89,7 +88,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -147,7 +146,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-shared-without-deps-cxx11-abi-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -194,7 +193,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -206,7 +204,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -264,7 +262,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-static-with-deps-cxx11-abi-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -311,7 +309,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -323,7 +320,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -381,7 +378,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-static-without-deps-cxx11-abi-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -428,7 +425,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -440,7 +436,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -498,5 +494,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/generated-macos-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/generated-macos-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -73,7 +73,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -85,7 +84,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -142,7 +141,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_9-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -185,7 +184,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -197,7 +195,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -254,7 +252,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_10-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -297,7 +295,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -309,7 +306,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -366,7 +363,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_11-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -409,7 +406,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -421,7 +417,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -478,5 +474,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										96
									
								
								.github/workflows/generated-windows-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										96
									
								
								.github/workflows/generated-windows-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -92,7 +92,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -104,7 +103,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -208,7 +207,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -220,7 +218,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -268,7 +266,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_8-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -331,7 +329,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -343,7 +340,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -448,7 +445,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -460,7 +456,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -509,7 +505,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_8-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -572,7 +568,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -584,7 +579,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -689,7 +684,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -701,7 +695,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -750,7 +744,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_9-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -812,7 +806,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -824,7 +817,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -928,7 +921,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -940,7 +932,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -988,7 +980,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_9-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1051,7 +1043,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1063,7 +1054,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1168,7 +1159,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1180,7 +1170,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1229,7 +1219,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_9-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1292,7 +1282,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1304,7 +1293,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1409,7 +1398,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1421,7 +1409,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1470,7 +1458,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_10-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1532,7 +1520,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1544,7 +1531,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1648,7 +1635,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1660,7 +1646,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1708,7 +1694,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_10-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1771,7 +1757,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1783,7 +1768,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1888,7 +1873,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1900,7 +1884,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1949,7 +1933,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_10-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2012,7 +1996,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2024,7 +2007,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2129,7 +2112,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2141,7 +2123,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2190,7 +2172,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_11-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2252,7 +2234,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2264,7 +2245,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2368,7 +2349,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2380,7 +2360,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2428,7 +2408,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_11-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2491,7 +2471,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2503,7 +2482,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2608,7 +2587,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2620,7 +2598,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2669,7 +2647,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  conda-py3_11-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2732,7 +2710,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2744,7 +2721,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2849,7 +2826,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2861,7 +2837,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2910,5 +2886,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-main.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-main.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -89,7 +89,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -101,7 +100,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -209,7 +208,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -221,7 +219,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										96
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										96
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -96,7 +96,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -108,7 +107,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -216,7 +215,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -228,7 +226,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -280,7 +278,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-shared-without-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -346,7 +344,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -358,7 +355,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -466,7 +463,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -478,7 +474,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -530,7 +526,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-static-with-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -596,7 +592,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -608,7 +603,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -716,7 +711,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -728,7 +722,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -780,7 +774,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-static-without-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -846,7 +840,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -858,7 +851,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -966,7 +959,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -978,7 +970,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1030,7 +1022,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-shared-with-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1097,7 +1089,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1109,7 +1100,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1218,7 +1209,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1230,7 +1220,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1283,7 +1273,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-shared-without-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1350,7 +1340,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1362,7 +1351,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1471,7 +1460,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1483,7 +1471,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1536,7 +1524,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-static-with-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1603,7 +1591,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1615,7 +1602,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1724,7 +1711,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1736,7 +1722,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1789,7 +1775,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-static-without-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1856,7 +1842,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1868,7 +1853,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1977,7 +1962,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1989,7 +1973,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2042,7 +2026,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-shared-with-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2109,7 +2093,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2121,7 +2104,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2230,7 +2213,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2242,7 +2224,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2295,7 +2277,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-shared-without-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2362,7 +2344,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2374,7 +2355,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2483,7 +2464,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2495,7 +2475,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2548,7 +2528,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-static-with-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2615,7 +2595,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2627,7 +2606,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2736,7 +2715,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2748,7 +2726,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2801,7 +2779,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-static-without-deps-debug-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2868,7 +2846,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2880,7 +2857,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2989,7 +2966,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -3001,7 +2977,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -3054,5 +3030,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-release-main.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-release-main.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -89,7 +89,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -101,7 +100,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -209,7 +208,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -221,7 +219,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										96
									
								
								.github/workflows/generated-windows-binary-libtorch-release-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										96
									
								
								.github/workflows/generated-windows-binary-libtorch-release-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -96,7 +96,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -108,7 +107,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -216,7 +215,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -228,7 +226,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -280,7 +278,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-shared-without-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -346,7 +344,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -358,7 +355,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -466,7 +463,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -478,7 +474,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -530,7 +526,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-static-with-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -596,7 +592,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -608,7 +603,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -716,7 +711,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -728,7 +722,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -780,7 +774,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cpu-static-without-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -846,7 +840,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -858,7 +851,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -966,7 +959,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -978,7 +970,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1030,7 +1022,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-shared-with-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1097,7 +1089,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1109,7 +1100,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1218,7 +1209,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1230,7 +1220,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1283,7 +1273,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-shared-without-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1350,7 +1340,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1362,7 +1351,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1471,7 +1460,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1483,7 +1471,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1536,7 +1524,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-static-with-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1603,7 +1591,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1615,7 +1602,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1724,7 +1711,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1736,7 +1722,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1789,7 +1775,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda11_8-static-without-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1856,7 +1842,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1868,7 +1853,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1977,7 +1962,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1989,7 +1973,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2042,7 +2026,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-shared-with-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2109,7 +2093,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2121,7 +2104,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2230,7 +2213,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2242,7 +2224,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2295,7 +2277,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-shared-without-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2362,7 +2344,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2374,7 +2355,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2483,7 +2464,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2495,7 +2475,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2548,7 +2528,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-static-with-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2615,7 +2595,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2627,7 +2606,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2736,7 +2715,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2748,7 +2726,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2801,7 +2779,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  libtorch-cuda12_1-static-without-deps-release-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2868,7 +2846,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2880,7 +2857,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2989,7 +2966,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -3001,7 +2977,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -3054,5 +3030,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										96
									
								
								.github/workflows/generated-windows-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										96
									
								
								.github/workflows/generated-windows-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -92,7 +92,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -104,7 +103,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -208,7 +207,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -220,7 +218,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -268,7 +266,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_8-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -331,7 +329,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -343,7 +340,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -448,7 +445,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -460,7 +456,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -509,7 +505,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_8-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -572,7 +568,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -584,7 +579,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -689,7 +684,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -701,7 +695,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -750,7 +744,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_9-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -812,7 +806,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -824,7 +817,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -928,7 +921,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -940,7 +932,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -988,7 +980,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_9-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1051,7 +1043,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1063,7 +1054,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1168,7 +1159,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1180,7 +1170,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1229,7 +1219,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_9-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1292,7 +1282,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1304,7 +1293,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1409,7 +1398,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1421,7 +1409,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1470,7 +1458,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_10-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1532,7 +1520,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1544,7 +1531,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1648,7 +1635,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1660,7 +1646,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1708,7 +1694,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_10-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -1771,7 +1757,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1783,7 +1768,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1888,7 +1873,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -1900,7 +1884,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -1949,7 +1933,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_10-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2012,7 +1996,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2024,7 +2007,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2129,7 +2112,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2141,7 +2123,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2190,7 +2172,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_11-cpu-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2252,7 +2234,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2264,7 +2245,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2368,7 +2349,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2380,7 +2360,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2428,7 +2408,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_11-cuda11_8-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2491,7 +2471,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2503,7 +2482,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2608,7 +2587,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2620,7 +2598,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2669,7 +2647,7 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
  wheel-py3_11-cuda12_1-build:
 | 
			
		||||
    if: ${{ github.repository_owner == 'pytorch' }}
 | 
			
		||||
@ -2732,7 +2710,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2744,7 +2721,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2849,7 +2826,6 @@ jobs:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          path: pytorch
 | 
			
		||||
          quiet-checkout: true
 | 
			
		||||
@ -2861,7 +2837,7 @@ jobs:
 | 
			
		||||
      - name: Checkout pytorch/builder
 | 
			
		||||
        uses: malfet/checkout@silent-checkout
 | 
			
		||||
        with:
 | 
			
		||||
          ref: main
 | 
			
		||||
          ref: release/2.1
 | 
			
		||||
          submodules: recursive
 | 
			
		||||
          repository: pytorch/builder
 | 
			
		||||
          path: builder
 | 
			
		||||
@ -2910,5 +2886,5 @@ jobs:
 | 
			
		||||
      github-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
      aws-pytorch-uploader-access-key-id: ${{ secrets.AWS_PYTORCH_UPLOADER_ACCESS_KEY_ID }}
 | 
			
		||||
      aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN }}
 | 
			
		||||
      conda-pytorchbot-token: ${{ secrets.CONDA_PYTORCHBOT_TOKEN_TEST }}
 | 
			
		||||
    uses: ./.github/workflows/_binary-upload.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/lint-bc.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/lint-bc.yml
									
									
									
									
										vendored
									
									
								
							@ -26,7 +26,7 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Run BC Lint Action
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/bc-lint@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/bc-lint@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          repo: ${{ github.event.pull_request.head.repo.full_name }}
 | 
			
		||||
          base_sha: ${{ github.event.pull_request.base.sha }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							@ -15,7 +15,7 @@ on:
 | 
			
		||||
# When any other step fails, it's job will be retried once by retryBot.
 | 
			
		||||
jobs:
 | 
			
		||||
  lintrunner:
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@release/2.1
 | 
			
		||||
    with:
 | 
			
		||||
      runner: linux.2xlarge
 | 
			
		||||
      docker-image: pytorch-linux-focal-linter
 | 
			
		||||
@ -62,7 +62,7 @@ jobs:
 | 
			
		||||
        exit $RC
 | 
			
		||||
 | 
			
		||||
  quick-checks:
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@release/2.1
 | 
			
		||||
    with:
 | 
			
		||||
      runner: linux.2xlarge
 | 
			
		||||
      docker-image: pytorch-linux-focal-linter
 | 
			
		||||
@ -103,7 +103,7 @@ jobs:
 | 
			
		||||
    if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'skip-pr-sanity-checks')
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
          fetch-depth: -1
 | 
			
		||||
@ -116,7 +116,7 @@ jobs:
 | 
			
		||||
          bash .github/scripts/pr-sanity-check.sh
 | 
			
		||||
 | 
			
		||||
  workflow-checks:
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@release/2.1
 | 
			
		||||
    with:
 | 
			
		||||
      runner: linux.2xlarge
 | 
			
		||||
      docker-image: pytorch-linux-focal-linter
 | 
			
		||||
@ -151,7 +151,7 @@ jobs:
 | 
			
		||||
        exit $RC
 | 
			
		||||
 | 
			
		||||
  toc:
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@release/2.1
 | 
			
		||||
    with:
 | 
			
		||||
      runner: linux.2xlarge
 | 
			
		||||
      docker-image: pytorch-linux-focal-linter
 | 
			
		||||
@ -189,7 +189,7 @@ jobs:
 | 
			
		||||
  test-tools:
 | 
			
		||||
    name: Test tools
 | 
			
		||||
    if: ${{ github.repository == 'pytorch/pytorch' }}
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
 | 
			
		||||
    uses: pytorch/test-infra/.github/workflows/linux_job.yml@release/2.1
 | 
			
		||||
    with:
 | 
			
		||||
      runner: linux.2xlarge
 | 
			
		||||
      docker-image: pytorch-linux-focal-linter
 | 
			
		||||
@ -210,7 +210,7 @@ jobs:
 | 
			
		||||
    runs-on: linux.20_04.4x
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
@ -240,7 +240,7 @@ jobs:
 | 
			
		||||
      # [see note: pytorch repo ref]
 | 
			
		||||
      # deep clone (fetch-depth 0) required, to allow us to use git log
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ jobs:
 | 
			
		||||
    environment: upload-stats
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										46
									
								
								.github/workflows/periodic.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								.github/workflows/periodic.yml
									
									
									
									
										vendored
									
									
								
							@ -112,30 +112,38 @@ jobs:
 | 
			
		||||
      cuda-version: "11.8"
 | 
			
		||||
      test-matrix: ${{ needs.win-vs2019-cuda11_8-py3-build.outputs.test-matrix }}
 | 
			
		||||
 | 
			
		||||
  ios-12-5-1-x86-64-coreml:
 | 
			
		||||
    name: ios-12-5-1-x86-64-coreml
 | 
			
		||||
  # TODO: Figure out how to migrate this job to M1 runner
 | 
			
		||||
  ios-build-test:
 | 
			
		||||
    name: ios-build-test
 | 
			
		||||
    if: github.event_name != 'schedule' || github.event.schedule == '45 0,8,16 * * 1-5' || github.event.schedule == '45 4 * * 0,6'
 | 
			
		||||
    uses: ./.github/workflows/_ios-build-test.yml
 | 
			
		||||
    with:
 | 
			
		||||
      build-environment: ios-12-5-1-x86-64-coreml
 | 
			
		||||
      ios-platform: SIMULATOR
 | 
			
		||||
      ios-arch: x86_64
 | 
			
		||||
      build-environment: ios-build-test
 | 
			
		||||
      sync-tag: ios-build-test
 | 
			
		||||
      test-matrix: |
 | 
			
		||||
        { include: [
 | 
			
		||||
          { config: "default", shard: 1, num_shards: 1, runner: "macos-12" },
 | 
			
		||||
        ]}
 | 
			
		||||
 | 
			
		||||
  ios-12-5-1-arm64-custom-ops:
 | 
			
		||||
    name: ios-12-5-1-arm64-custom-ops
 | 
			
		||||
    if: github.event_name != 'schedule' || github.event.schedule == '45 0,8,16 * * 1-5' || github.event.schedule == '45 4 * * 0,6'
 | 
			
		||||
    uses: ./.github/workflows/_ios-build-test.yml
 | 
			
		||||
    with:
 | 
			
		||||
      build-environment: ios-12-5-1-arm64-custom-ops
 | 
			
		||||
      ios-platform: OS
 | 
			
		||||
      ios-arch: arm64
 | 
			
		||||
      test-matrix: |
 | 
			
		||||
        { include: [
 | 
			
		||||
          { config: "default", shard: 1, num_shards: 1, runner: "macos-12" },
 | 
			
		||||
          { config: "default",
 | 
			
		||||
            shard: 1,
 | 
			
		||||
            num_shards: 1,
 | 
			
		||||
            runner: "macos-12",
 | 
			
		||||
            ios_platform: "SIMULATOR",
 | 
			
		||||
            ios_arch: "x86_64",
 | 
			
		||||
            use_lite_interpreter: 1,
 | 
			
		||||
            use_metal: 0,
 | 
			
		||||
            use_coreml: 1,
 | 
			
		||||
            use_custom_op_list: ""
 | 
			
		||||
          },
 | 
			
		||||
          { config: "default",
 | 
			
		||||
            shard: 1,
 | 
			
		||||
            num_shards: 1,
 | 
			
		||||
            runner: "macos-12",
 | 
			
		||||
            ios_platform: "OS",
 | 
			
		||||
            ios_arch: "arm64",
 | 
			
		||||
            use_lite_interpreter: 1,
 | 
			
		||||
            use_metal: 1,
 | 
			
		||||
            use_coreml: 1,
 | 
			
		||||
            use_custom_op_list: "mobilenetv2.yaml"
 | 
			
		||||
          }
 | 
			
		||||
        ]}
 | 
			
		||||
 | 
			
		||||
  buck-build-test:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/update_pytorch_labels.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/update_pytorch_labels.yml
									
									
									
									
										vendored
									
									
								
							@ -14,7 +14,7 @@ jobs:
 | 
			
		||||
    if: ${{ github.repository == 'pytorch/pytorch' }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
          submodules: false
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/upload-alerts.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/upload-alerts.yml
									
									
									
									
										vendored
									
									
								
							@ -44,7 +44,7 @@ jobs:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
 | 
			
		||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/upload-alerts@main
 | 
			
		||||
        uses: pytorch/test-infra/.github/actions/upload-alerts@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          alerts: '${{ steps.alert_creation_step.outputs.script-output }}'
 | 
			
		||||
          organization: "pytorch"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/upload-test-stats.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/upload-test-stats.yml
									
									
									
									
										vendored
									
									
								
							@ -37,7 +37,7 @@ jobs:
 | 
			
		||||
        run: echo "${TRIGGERING_WORKFLOW}"
 | 
			
		||||
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
 | 
			
		||||
      - uses: actions/setup-python@v4
 | 
			
		||||
        with:
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ jobs:
 | 
			
		||||
    name: Upload dynamo performance stats for ${{ github.event.workflow_run.id }}, attempt ${{ github.event.workflow_run.run_attempt }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout PyTorch
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
 | 
			
		||||
        uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.1
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: false
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
 | 
			
		||||
@ -125,6 +125,7 @@ file(GLOB native_ao_sparse_h
 | 
			
		||||
            "native/ao_sparse/quantized/cpu/*.h")
 | 
			
		||||
file(GLOB native_quantized_h "native/quantized/*.h" "native/quantized/cpu/*.h" "native/quantized/cudnn/*.h")
 | 
			
		||||
file(GLOB native_cpu_h "native/cpu/*.h")
 | 
			
		||||
file(GLOB native_utils_h "native/utils/*.h")
 | 
			
		||||
 | 
			
		||||
file(GLOB native_cuda_cu "native/cuda/*.cu")
 | 
			
		||||
file(GLOB native_cuda_cpp "native/cuda/*.cpp")
 | 
			
		||||
@ -540,7 +541,7 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake-exports/ATenConfig.cmake"
 | 
			
		||||
 | 
			
		||||
set(INSTALL_HEADERS ${base_h} ${ATen_CORE_HEADERS})
 | 
			
		||||
if(NOT INTERN_BUILD_MOBILE)
 | 
			
		||||
  list(APPEND INSTALL_HEADERS ${native_h} ${native_cpu_h} ${native_ao_sparse_h} ${native_quantized_h} ${cuda_h} ${native_cuda_h} ${native_hip_h} ${cudnn_h} ${hip_h} ${mps_h} ${native_mps_h} ${miopen_h})
 | 
			
		||||
  list(APPEND INSTALL_HEADERS ${native_h} ${native_cpu_h} ${native_ao_sparse_h} ${native_quantized_h} ${cuda_h} ${native_cuda_h} ${native_hip_h} ${cudnn_h} ${hip_h} ${mps_h} ${native_mps_h} ${native_utils_h} ${miopen_h})
 | 
			
		||||
  # Metal
 | 
			
		||||
  if(USE_PYTORCH_METAL_EXPORT)
 | 
			
		||||
    # Add files needed from exporting metal models(optimized_for_mobile)
 | 
			
		||||
 | 
			
		||||
@ -389,8 +389,9 @@ static inline bool mkldnn_conv_use_channels_last(const at::Tensor& input, const
 | 
			
		||||
      (input_memory_format  == at::MemoryFormat::ChannelsLast) ||
 | 
			
		||||
      (weight_memory_format == at::MemoryFormat::ChannelsLast);
 | 
			
		||||
 | 
			
		||||
  // TODO: add channels last 3d support
 | 
			
		||||
  bool can_use_mkldnn_channels_last_3d = false;
 | 
			
		||||
  bool can_use_mkldnn_channels_last_3d =
 | 
			
		||||
      (input_memory_format  == at::MemoryFormat::ChannelsLast3d) ||
 | 
			
		||||
      (weight_memory_format == at::MemoryFormat::ChannelsLast3d);
 | 
			
		||||
 | 
			
		||||
  return can_use_mkldnn_channels_last_2d || can_use_mkldnn_channels_last_3d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -508,9 +508,6 @@ struct ConvParams {
 | 
			
		||||
    if (transposed && is_output_padding_big()) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (transposed && groups > 1 && at::symint::size<T>(input, 1) == groups) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (input.device().is_cpu() && input.scalar_type() == kBFloat16 && mkldnn_bf16_device_check()) {
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -253,7 +253,9 @@ static Tensor & copy_impl(Tensor & self, const Tensor & src, bool non_blocking)
 | 
			
		||||
      self.storage_offset() == src.storage_offset() &&
 | 
			
		||||
      self.strides().equals(src.strides()) &&
 | 
			
		||||
      self.sizes().equals(src.sizes()) &&
 | 
			
		||||
      self.scalar_type() == src.scalar_type()
 | 
			
		||||
      self.scalar_type() == src.scalar_type() &&
 | 
			
		||||
      self.is_conj() == src.is_conj() &&
 | 
			
		||||
      self.is_neg() == src.is_neg()
 | 
			
		||||
    );
 | 
			
		||||
  if (is_same_data) {
 | 
			
		||||
    return self;
 | 
			
		||||
 | 
			
		||||
@ -727,7 +727,7 @@ Tensor _mkldnn_convolution_transpose(
 | 
			
		||||
 | 
			
		||||
  if (bias.defined()) {
 | 
			
		||||
    const ideep::tensor b = itensor_from_tensor(bias);
 | 
			
		||||
    ideep::convolution_transpose_forward::compute(
 | 
			
		||||
    ideep::convolution_transpose_forward::compute_v3(
 | 
			
		||||
        x,
 | 
			
		||||
        w,
 | 
			
		||||
        b,
 | 
			
		||||
@ -738,9 +738,10 @@ Tensor _mkldnn_convolution_transpose(
 | 
			
		||||
        padding_r(padding_expanded, output_padding_expanded),
 | 
			
		||||
        dilation.vec(),
 | 
			
		||||
        groups,
 | 
			
		||||
        use_channels_last,
 | 
			
		||||
        op_attr);
 | 
			
		||||
  } else {
 | 
			
		||||
    ideep::convolution_transpose_forward::compute(
 | 
			
		||||
    ideep::convolution_transpose_forward::compute_v3(
 | 
			
		||||
        x,
 | 
			
		||||
        w,
 | 
			
		||||
        output_sizes,
 | 
			
		||||
@ -750,6 +751,7 @@ Tensor _mkldnn_convolution_transpose(
 | 
			
		||||
        padding_r(padding_expanded, output_padding_expanded),
 | 
			
		||||
        dilation.vec(),
 | 
			
		||||
        groups,
 | 
			
		||||
        use_channels_last,
 | 
			
		||||
        op_attr);
 | 
			
		||||
  }
 | 
			
		||||
  if (input.is_mkldnn()) {
 | 
			
		||||
@ -988,7 +990,7 @@ Tensor mkldnn_convolution_transpose_backward_input(
 | 
			
		||||
    grad_input.resize_(input_size, memory_format);
 | 
			
		||||
    grad_x = itensor_from_tensor(grad_input);
 | 
			
		||||
  }
 | 
			
		||||
  ideep::convolution_transpose_backward_data::compute(
 | 
			
		||||
  ideep::convolution_transpose_backward_data::compute_v3(
 | 
			
		||||
      grad_y,
 | 
			
		||||
      w,
 | 
			
		||||
      input_size.vec(),
 | 
			
		||||
@ -997,7 +999,8 @@ Tensor mkldnn_convolution_transpose_backward_input(
 | 
			
		||||
      padding.vec(),
 | 
			
		||||
      padding_r(padding, output_padding),
 | 
			
		||||
      dilation.vec(),
 | 
			
		||||
      groups);
 | 
			
		||||
      groups,
 | 
			
		||||
      is_channels_last);
 | 
			
		||||
 | 
			
		||||
  if (grad_output.is_mkldnn()) {
 | 
			
		||||
    return MKLDNNTensor(grad_x, grad_output.options());
 | 
			
		||||
@ -1024,7 +1027,7 @@ std::tuple<Tensor,Tensor> mkldnn_convolution_transpose_backward_weights(
 | 
			
		||||
 | 
			
		||||
  ideep::tensor grad_w, grad_b;
 | 
			
		||||
  if (bias_defined) {
 | 
			
		||||
    ideep::convolution_transpose_backward_weights::compute(
 | 
			
		||||
    ideep::convolution_transpose_backward_weights::compute_v3(
 | 
			
		||||
        x,
 | 
			
		||||
        grad_y,
 | 
			
		||||
        weight_size.vec(),
 | 
			
		||||
@ -1034,9 +1037,10 @@ std::tuple<Tensor,Tensor> mkldnn_convolution_transpose_backward_weights(
 | 
			
		||||
        padding.vec(),
 | 
			
		||||
        padding_r(padding, output_padding),
 | 
			
		||||
        dilation.vec(),
 | 
			
		||||
        groups);
 | 
			
		||||
        groups,
 | 
			
		||||
        is_channels_last);
 | 
			
		||||
  } else {
 | 
			
		||||
    ideep::convolution_transpose_backward_weights::compute(
 | 
			
		||||
    ideep::convolution_transpose_backward_weights::compute_v3(
 | 
			
		||||
        x,
 | 
			
		||||
        grad_y,
 | 
			
		||||
        weight_size.vec(),
 | 
			
		||||
@ -1045,7 +1049,8 @@ std::tuple<Tensor,Tensor> mkldnn_convolution_transpose_backward_weights(
 | 
			
		||||
        padding.vec(),
 | 
			
		||||
        padding_r(padding, output_padding),
 | 
			
		||||
        dilation.vec(),
 | 
			
		||||
        groups);
 | 
			
		||||
        groups,
 | 
			
		||||
        is_channels_last);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!is_channels_last) {
 | 
			
		||||
@ -1061,18 +1066,21 @@ std::tuple<Tensor,Tensor> mkldnn_convolution_transpose_backward_weights(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::tuple<Tensor, Tensor, Tensor> mkldnn_convolution_transpose_backward(
 | 
			
		||||
    const Tensor& input, const Tensor& grad_output_t, const Tensor& weight,
 | 
			
		||||
    const Tensor& input_t, const Tensor& grad_output_t, const Tensor& weight_t,
 | 
			
		||||
    IntArrayRef padding, IntArrayRef output_padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups,
 | 
			
		||||
    std::array<bool,3> output_mask)
 | 
			
		||||
{
 | 
			
		||||
  bool is_channels_last = mkldnn_conv_use_channels_last(input, weight);
 | 
			
		||||
  auto memory_format = mkldnn_convolution_memory_format(input.ndimension(), is_channels_last);
 | 
			
		||||
  bool is_channels_last = mkldnn_conv_use_channels_last(input_t, weight_t);
 | 
			
		||||
  auto memory_format = mkldnn_convolution_memory_format(input_t.ndimension(), is_channels_last);
 | 
			
		||||
  Tensor grad_output = grad_output_t.is_mkldnn() ? grad_output_t : grad_output_t.contiguous(memory_format);
 | 
			
		||||
  auto input = input_t.is_mkldnn() ? input_t : input_t.contiguous(memory_format);
 | 
			
		||||
  auto weight = weight_t.is_mkldnn() ? weight_t : weight_t.contiguous(memory_format);
 | 
			
		||||
  int64_t dim = input.ndimension() - 2;
 | 
			
		||||
  const auto padding_expanded = expand_param_if_needed(padding, "padding", dim);
 | 
			
		||||
  const auto stride_expanded = expand_param_if_needed(stride, "stride", dim);
 | 
			
		||||
  const auto dilation_expanded = expand_param_if_needed(dilation, "dilation", dim);
 | 
			
		||||
  const auto output_padding_expanded = expand_param_if_needed(output_padding, "output_padding", dim);
 | 
			
		||||
 | 
			
		||||
  Tensor grad_input, grad_weight, grad_bias;
 | 
			
		||||
  if (output_mask[0]) {
 | 
			
		||||
    grad_input = mkldnn_convolution_transpose_backward_input(
 | 
			
		||||
 | 
			
		||||
@ -293,7 +293,8 @@ at::Tensor& mps_copy_(at::Tensor& dst, const at::Tensor& src, bool non_blocking)
 | 
			
		||||
    dst.resize_as_(src);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  TORCH_CHECK(dst.dim() >= src.dim());
 | 
			
		||||
  TORCH_CHECK(
 | 
			
		||||
      dst.dim() >= src.dim(), "Destination ", dst.sym_sizes(), " doesn't match the broadcast shape ", src.sym_sizes());
 | 
			
		||||
  if (dst.dim() > src.dim()) {
 | 
			
		||||
    needs_broadcasting = true;
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
@ -16,15 +16,14 @@ namespace at::native {
 | 
			
		||||
Scalar _local_scalar_dense_mps(const Tensor& self) {
 | 
			
		||||
  Scalar r;
 | 
			
		||||
 | 
			
		||||
  auto output = at::empty_like(self, TensorOptions(kCPU));
 | 
			
		||||
  mps::mps_copy_(output, self, false);
 | 
			
		||||
  AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND3(at::ScalarType::Half,
 | 
			
		||||
                                         at::ScalarType::Bool,
 | 
			
		||||
                                         at::ScalarType::BFloat16,
 | 
			
		||||
                                         self.scalar_type(),
 | 
			
		||||
                                         "_local_scalar_dense_mps",
 | 
			
		||||
                                         [&] {
 | 
			
		||||
                                           Tensor output = at::empty({1}, TensorOptions(at::CPU(self.scalar_type())));
 | 
			
		||||
 | 
			
		||||
                                           mps::mps_copy_(output, self, false);
 | 
			
		||||
                                           scalar_t value = *output.data_ptr<scalar_t>();
 | 
			
		||||
                                           r = Scalar(value);
 | 
			
		||||
                                         });
 | 
			
		||||
 | 
			
		||||
@ -53,9 +53,9 @@ set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE)
 | 
			
		||||
set(PKG_CONFIG_EXECUTABLE pkg-config CACHE FILEPATH "" FORCE)
 | 
			
		||||
 | 
			
		||||
# Setup iOS platform unless specified manually with IOS_PLATFORM
 | 
			
		||||
if(NOT DEFINED IOS_PLATFORM)
 | 
			
		||||
if(NOT IOS_PLATFORM)
 | 
			
		||||
    set(IOS_PLATFORM "OS")
 | 
			
		||||
endif(NOT DEFINED IOS_PLATFORM)
 | 
			
		||||
endif(NOT IOS_PLATFORM)
 | 
			
		||||
set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
 | 
			
		||||
 | 
			
		||||
# Check the platform selection and setup for developer root
 | 
			
		||||
@ -118,9 +118,9 @@ set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
 | 
			
		||||
# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
 | 
			
		||||
# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
 | 
			
		||||
# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
 | 
			
		||||
if(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
 | 
			
		||||
if(NOT CMAKE_INSTALL_NAME_TOOL)
 | 
			
		||||
    find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
 | 
			
		||||
endif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
 | 
			
		||||
endif(NOT CMAKE_INSTALL_NAME_TOOL)
 | 
			
		||||
 | 
			
		||||
# Setup iOS deployment target
 | 
			
		||||
set(IOS_DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET} CACHE STRING "Minimum iOS version")
 | 
			
		||||
@ -130,17 +130,17 @@ set(IOS_DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET} CACHE STRING "Minimum iOS ver
 | 
			
		||||
exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR)
 | 
			
		||||
set(XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
 | 
			
		||||
set(XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
 | 
			
		||||
if(NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
 | 
			
		||||
if(NOT CMAKE_IOS_DEVELOPER_ROOT)
 | 
			
		||||
    if(EXISTS ${XCODE_POST_43_ROOT})
 | 
			
		||||
        set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
 | 
			
		||||
    elseif(EXISTS ${XCODE_PRE_43_ROOT})
 | 
			
		||||
        set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
 | 
			
		||||
    endif(EXISTS ${XCODE_POST_43_ROOT})
 | 
			
		||||
endif(NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
 | 
			
		||||
endif(NOT CMAKE_IOS_DEVELOPER_ROOT)
 | 
			
		||||
set(CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform")
 | 
			
		||||
 | 
			
		||||
# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT
 | 
			
		||||
if(NOT DEFINED CMAKE_IOS_SDK_ROOT)
 | 
			
		||||
if(NOT CMAKE_IOS_SDK_ROOT)
 | 
			
		||||
    file(GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
 | 
			
		||||
    if(_CMAKE_IOS_SDKS)
 | 
			
		||||
        list(SORT _CMAKE_IOS_SDKS)
 | 
			
		||||
@ -150,7 +150,7 @@ if(NOT DEFINED CMAKE_IOS_SDK_ROOT)
 | 
			
		||||
        message(FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
 | 
			
		||||
    endif(_CMAKE_IOS_SDKS)
 | 
			
		||||
    message(STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
 | 
			
		||||
endif(NOT DEFINED CMAKE_IOS_SDK_ROOT)
 | 
			
		||||
endif(NOT CMAKE_IOS_SDK_ROOT)
 | 
			
		||||
set(CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
 | 
			
		||||
 | 
			
		||||
# Set the sysroot default to the most recent SDK
 | 
			
		||||
 | 
			
		||||
@ -18,8 +18,8 @@ figures:
 | 
			
		||||
	@$(PYCMD) source/scripts/build_quantization_configs.py
 | 
			
		||||
 | 
			
		||||
onnx:
 | 
			
		||||
	@$(PYCMD) source/scripts/onnx/build_onnx_supported_aten_op_csv_table.py
 | 
			
		||||
	@$(PYCMD) source/scripts/onnx/build_onnx_diagnostics_rules_md.py $(SOURCEDIR)/generated/onnx_diagnostics_rules
 | 
			
		||||
	@$(PYCMD) source/scripts/onnx/build_onnx_torchscript_supported_aten_op_csv_table.py
 | 
			
		||||
	@$(PYCMD) source/scripts/onnx/build_onnx_dynamo_diagnostics_rules_md.py $(SOURCEDIR)/generated/onnx_dynamo_diagnostics_rules
 | 
			
		||||
 | 
			
		||||
opset:
 | 
			
		||||
	@$(PYCMD) source/scripts/build_opsets.py
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								docs/source/_static/img/onnx/onnx_dynamo_mlp_model.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/source/_static/img/onnx/onnx_dynamo_mlp_model.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 36 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 11 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 5.7 KiB  | 
@ -179,6 +179,7 @@ Tensor autograd functions
 | 
			
		||||
   torch.Tensor.detach
 | 
			
		||||
   torch.Tensor.detach_
 | 
			
		||||
   torch.Tensor.register_hook
 | 
			
		||||
   torch.Tensor.register_post_accumulate_grad_hook
 | 
			
		||||
   torch.Tensor.retain_grad
 | 
			
		||||
 | 
			
		||||
:hidden:`Function`
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,551 @@
 | 
			
		||||
.. _torch.export:
 | 
			
		||||
 | 
			
		||||
torch.export
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
.. TODO: Add torch.export() tutorial here.
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
    This feature is a prototype and may have compatibility breaking changes in the future.
 | 
			
		||||
    This feature is a prototype under active development and there WILL BE
 | 
			
		||||
    BREAKING CHANGES in the future.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
:func:`torch.export.export` takes an arbitrary Python callable (a
 | 
			
		||||
:class:`torch.nn.Module`, a function or a method) and produces a traced graph
 | 
			
		||||
representing only the Tensor computation of the function in an Ahead-of-Time
 | 
			
		||||
(AOT) fashion, which can subsequently be executed with different outputs or
 | 
			
		||||
serialized.
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    from torch.export import export
 | 
			
		||||
 | 
			
		||||
    def f(x: torch.Tensor, y: torch.Tensor) -> torch.Tensor:
 | 
			
		||||
        a = torch.sin(x)
 | 
			
		||||
        b = torch.cos(y)
 | 
			
		||||
        return a + b
 | 
			
		||||
 | 
			
		||||
    example_args = (torch.randn(10, 10), torch.randn(10, 10))
 | 
			
		||||
 | 
			
		||||
    exported_program: torch.export.ExportedProgram = export(
 | 
			
		||||
        f, args=example_args
 | 
			
		||||
    )
 | 
			
		||||
    print(exported_program)
 | 
			
		||||
 | 
			
		||||
.. code-block::
 | 
			
		||||
 | 
			
		||||
    ExportedProgram:
 | 
			
		||||
        class GraphModule(torch.nn.Module):
 | 
			
		||||
            def forward(self, arg0_1: f32[10, 10], arg1_1: f32[10, 10]):
 | 
			
		||||
                # code: a = torch.sin(x)
 | 
			
		||||
                sin: f32[10, 10] = torch.ops.aten.sin.default(arg0_1);
 | 
			
		||||
 | 
			
		||||
                # code: b = torch.cos(y)
 | 
			
		||||
                cos: f32[10, 10] = torch.ops.aten.cos.default(arg1_1);
 | 
			
		||||
 | 
			
		||||
                # code: return a + b
 | 
			
		||||
                add: f32[10, 10] = torch.ops.aten.add.Tensor(sin, cos);
 | 
			
		||||
                return (add,)
 | 
			
		||||
 | 
			
		||||
        Graph signature: ExportGraphSignature(
 | 
			
		||||
            parameters=[],
 | 
			
		||||
            buffers=[],
 | 
			
		||||
            user_inputs=['arg0_1', 'arg1_1'],
 | 
			
		||||
            user_outputs=['add'],
 | 
			
		||||
            inputs_to_parameters={},
 | 
			
		||||
            inputs_to_buffers={},
 | 
			
		||||
            buffers_to_mutate={},
 | 
			
		||||
            backward_signature=None,
 | 
			
		||||
            assertion_dep_token=None,
 | 
			
		||||
        )
 | 
			
		||||
        Range constraints: {}
 | 
			
		||||
        Equality constraints: []
 | 
			
		||||
 | 
			
		||||
``torch.export`` produces a clean intermediate representation (IR) with the
 | 
			
		||||
following invariants. More specifications about the IR can be found here (coming
 | 
			
		||||
soon!).
 | 
			
		||||
 | 
			
		||||
* **Soundness**: It is guaranteed to be a sound representation of the original
 | 
			
		||||
  program, and maintains the same calling conventions of the original program.
 | 
			
		||||
 | 
			
		||||
* **Normalized**: There are no Python semantics within the graph. Submodules
 | 
			
		||||
  from the original programs are inlined to form one fully flattened
 | 
			
		||||
  computational graph.
 | 
			
		||||
 | 
			
		||||
* **Defined Operator Set**: The graph produced contains only a small defined
 | 
			
		||||
  :ref:`Core ATen IR <torch.compiler_ir>` opset and registered custom
 | 
			
		||||
  operators.
 | 
			
		||||
 | 
			
		||||
* **Graph properties**: The graph is purely functional, meaning it does not
 | 
			
		||||
  contain operations with side effects such as mutations or aliasing. It does
 | 
			
		||||
  not mutate any intermediate values, parameters, or buffers.
 | 
			
		||||
 | 
			
		||||
* **Metadata**: The graph contains metadata captured during tracing, such as a
 | 
			
		||||
  stacktrace from user's code.
 | 
			
		||||
 | 
			
		||||
Under the hood, ``torch.export`` leverages the following latest technologies:
 | 
			
		||||
 | 
			
		||||
* **TorchDynamo (torch._dynamo)** is an internal API that uses a CPython feature
 | 
			
		||||
  called the Frame Evaluation API to safely trace PyTorch graphs. This
 | 
			
		||||
  provides a massively improved graph capturing experience, with much fewer
 | 
			
		||||
  rewrites needed in order to fully trace the PyTorch code.
 | 
			
		||||
 | 
			
		||||
* **AOT Autograd** provides a functionalized PyTorch graph and ensures the graph
 | 
			
		||||
  is decomposed/lowered to the small defined Core ATen operator set.
 | 
			
		||||
 | 
			
		||||
* **Torch FX (torch.fx)** is the underlying representation of the graph,
 | 
			
		||||
  allowing flexible Python-based transformations.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Existing frameworks
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
:func:`torch.compile` also utilizes the same PT2 stack as ``torch.export``, but
 | 
			
		||||
is slightly different:
 | 
			
		||||
 | 
			
		||||
* **JIT vs. AOT**: :func:`torch.compile` is a JIT compiler whereas
 | 
			
		||||
  which is not intended to be used to produce compiled artifacts outside of
 | 
			
		||||
  deployment.
 | 
			
		||||
 | 
			
		||||
* **Partial vs. Full Graph Capture**: When :func:`torch.compile` runs into an
 | 
			
		||||
  untraceable part of a model, it will "graph break" and fall back to running
 | 
			
		||||
  the program in the eager Python runtime. In comparison, ``torch.export`` aims
 | 
			
		||||
  to get a full graph representation of a PyTorch model, so it will error out
 | 
			
		||||
  when something untraceable is reached. Since ``torch.export`` produces a full
 | 
			
		||||
  graph disjoint from any Python features or runtime, this graph can then be
 | 
			
		||||
  saved, loaded, and run in different environments and languages.
 | 
			
		||||
 | 
			
		||||
* **Usability tradeoff**: Since :func:`torch.compile` is able to fallback to the
 | 
			
		||||
  Python runtime whenever it reaches something untraceable, it is a lot more
 | 
			
		||||
  flexible. ``torch.export`` will instead require users to provide more
 | 
			
		||||
  information or rewrite their code to make it traceable.
 | 
			
		||||
 | 
			
		||||
Compared to :func:`torch.fx.symbolic_trace`, ``torch.export`` traces using
 | 
			
		||||
TorchDynamo which operates at the Python bytecode level, giving it the ability
 | 
			
		||||
to trace arbitrary Python constructs not limited by what Python operator
 | 
			
		||||
overloading supports. Additionally, ``torch.export`` keeps fine-grained track of
 | 
			
		||||
tensor metadata, so that conditionals on things like tensor shapes do not
 | 
			
		||||
fail tracing. In general, ``torch.export`` is expected to work on more user
 | 
			
		||||
programs, and produce lower-level graphs (at the ``torch.ops.aten`` operator
 | 
			
		||||
level). Note that users can still use :func:`torch.fx.symbolic_trace` as a
 | 
			
		||||
preprocessing step before ``torch.export``.
 | 
			
		||||
 | 
			
		||||
Compared to :func:`torch.jit.script`, ``torch.export`` does not capture Python
 | 
			
		||||
control flow or data structures, but it supports more Python language features
 | 
			
		||||
than TorchScript (as it is easier to have comprehensive coverage over Python
 | 
			
		||||
bytecodes). The resulting graphs are simpler and only have straight line control
 | 
			
		||||
flow (except for explicit control flow operators).
 | 
			
		||||
 | 
			
		||||
Compared to :func:`torch.jit.trace`, ``torch.export`` is sound: it is able to
 | 
			
		||||
trace code that performs integer computation on sizes and records all of the
 | 
			
		||||
side-conditions necessary to show that a particular trace is valid for other
 | 
			
		||||
inputs.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Exporting a PyTorch Model
 | 
			
		||||
-------------------------
 | 
			
		||||
 | 
			
		||||
An Example
 | 
			
		||||
^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
The main entrypoint is through :func:`torch.export.export`, which takes a
 | 
			
		||||
callable (:class:`torch.nn.Module`, function, or method) and sample inputs, and
 | 
			
		||||
captures the computation graph into an :class:`torch.export.ExportedProgram`. An
 | 
			
		||||
example:
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    from torch.export import export
 | 
			
		||||
 | 
			
		||||
    # Simple module for demonstration
 | 
			
		||||
    class M(torch.nn.Module):
 | 
			
		||||
        def __init__(self) -> None:
 | 
			
		||||
            super().__init__()
 | 
			
		||||
            self.conv = torch.nn.Conv2d(
 | 
			
		||||
                in_channels=3, out_channels=16, kernel_size=3, padding=1
 | 
			
		||||
            )
 | 
			
		||||
            self.relu = torch.nn.ReLU()
 | 
			
		||||
            self.maxpool = torch.nn.MaxPool2d(kernel_size=3)
 | 
			
		||||
 | 
			
		||||
        def forward(self, x: torch.Tensor, *, constant=None) -> torch.Tensor:
 | 
			
		||||
            a = self.conv(x)
 | 
			
		||||
            a.add_(constant)
 | 
			
		||||
            return self.maxpool(self.relu(a))
 | 
			
		||||
 | 
			
		||||
    example_args = (torch.randn(1, 3, 256, 256),)
 | 
			
		||||
    example_kwargs = {"constant": torch.ones(1, 16, 256, 256)}
 | 
			
		||||
 | 
			
		||||
    exported_program: torch.export.ExportedProgram = export(
 | 
			
		||||
        M(), args=example_args, kwargs=example_kwargs
 | 
			
		||||
    )
 | 
			
		||||
    print(exported_program)
 | 
			
		||||
 | 
			
		||||
.. code-block::
 | 
			
		||||
 | 
			
		||||
    ExportedProgram:
 | 
			
		||||
        class GraphModule(torch.nn.Module):
 | 
			
		||||
            def forward(self, arg0_1: f32[16, 3, 3, 3], arg1_1: f32[16], arg2_1: f32[1, 3, 256, 256], arg3_1: f32[1, 16, 256, 256]):
 | 
			
		||||
 | 
			
		||||
                # code: a = self.conv(x)
 | 
			
		||||
                convolution: f32[1, 16, 256, 256] = torch.ops.aten.convolution.default(
 | 
			
		||||
                    arg2_1, arg0_1, arg1_1, [1, 1], [1, 1], [1, 1], False, [0, 0], 1
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
                # code: a.add_(constant)
 | 
			
		||||
                add: f32[1, 16, 256, 256] = torch.ops.aten.add.Tensor(convolution, arg3_1);
 | 
			
		||||
 | 
			
		||||
                # code: return self.maxpool(self.relu(a))
 | 
			
		||||
                relu: f32[1, 16, 256, 256] = torch.ops.aten.relu.default(add);
 | 
			
		||||
                max_pool2d_with_indices = torch.ops.aten.max_pool2d_with_indices.default(
 | 
			
		||||
                    relu, [3, 3], [3, 3]
 | 
			
		||||
                );
 | 
			
		||||
                getitem: f32[1, 16, 85, 85] = max_pool2d_with_indices[0];
 | 
			
		||||
                return (getitem,)
 | 
			
		||||
 | 
			
		||||
        Graph signature: ExportGraphSignature(
 | 
			
		||||
            parameters=['L__self___conv.weight', 'L__self___conv.bias'],
 | 
			
		||||
            buffers=[],
 | 
			
		||||
            user_inputs=['arg2_1', 'arg3_1'],
 | 
			
		||||
            user_outputs=['getitem'],
 | 
			
		||||
            inputs_to_parameters={
 | 
			
		||||
                'arg0_1': 'L__self___conv.weight',
 | 
			
		||||
                'arg1_1': 'L__self___conv.bias',
 | 
			
		||||
            },
 | 
			
		||||
            inputs_to_buffers={},
 | 
			
		||||
            buffers_to_mutate={},
 | 
			
		||||
            backward_signature=None,
 | 
			
		||||
            assertion_dep_token=None,
 | 
			
		||||
        )
 | 
			
		||||
        Range constraints: {}
 | 
			
		||||
        Equality constraints: []
 | 
			
		||||
 | 
			
		||||
Inspecting the ``ExportedProgram``, we can note the following:
 | 
			
		||||
 | 
			
		||||
* The :class:`torch.fx.Graph` contains the computation graph of the original
 | 
			
		||||
  program, along with records of the original code for easy debugging.
 | 
			
		||||
 | 
			
		||||
* The graph contains only ``torch.ops.aten`` operators found in the
 | 
			
		||||
  :ref:`Core ATen IR <torch.compiler_ir>` opset and custom operators, and is
 | 
			
		||||
  fully functional, without any inplace operators such as ``torch.add_``.
 | 
			
		||||
 | 
			
		||||
* The parameters (weight and bias to conv) are lifted as inputs to the graph,
 | 
			
		||||
  resulting in no ``get_attr`` nodes in the graph, which previously existed in
 | 
			
		||||
  the result of :func:`torch.fx.symbolic_trace`.
 | 
			
		||||
 | 
			
		||||
* The :class:`torch.export.ExportGraphSignature` models the input and output
 | 
			
		||||
  signature, along with specifying which inputs are parameters.
 | 
			
		||||
 | 
			
		||||
* The resulting shape and dtype of tensors produced by each node in the graph is
 | 
			
		||||
  noted. For example, the ``convolution`` node will result in a tensor of dtype
 | 
			
		||||
  ``torch.float32`` and shape (1, 16, 256, 256).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Expressing Dynamism
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
By default ``torch.export`` will trace the program assuming all input shapes are
 | 
			
		||||
**static**, and specializing the exported program to those dimensions. However,
 | 
			
		||||
some dimensions, such as a batch dimension, can be dynamic and vary from run to
 | 
			
		||||
run. Such dimensions must be marked dynamic using the
 | 
			
		||||
:func:`torch.export.dynamic_dim` API, and passed into
 | 
			
		||||
:func:`torch.export.export` through the ``constraints`` argument. An example:
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    from torch.export import export, dynamic_dim
 | 
			
		||||
 | 
			
		||||
    class M(torch.nn.Module):
 | 
			
		||||
        def __init__(self):
 | 
			
		||||
            super().__init__()
 | 
			
		||||
 | 
			
		||||
            self.branch1 = torch.nn.Sequential(
 | 
			
		||||
                torch.nn.Linear(64, 32), torch.nn.ReLU()
 | 
			
		||||
            )
 | 
			
		||||
            self.branch2 = torch.nn.Sequential(
 | 
			
		||||
                torch.nn.Linear(128, 64), torch.nn.ReLU()
 | 
			
		||||
            )
 | 
			
		||||
            self.buffer = torch.ones(32)
 | 
			
		||||
 | 
			
		||||
        def forward(self, x1, x2):
 | 
			
		||||
            out1 = self.branch1(x1)
 | 
			
		||||
            out2 = self.branch2(x2)
 | 
			
		||||
            return (out1 + self.buffer, out2)
 | 
			
		||||
 | 
			
		||||
    example_args = (torch.randn(32, 64), torch.randn(32, 128))
 | 
			
		||||
    constraints = [
 | 
			
		||||
        # First dimension of each input is a dynamic batch size
 | 
			
		||||
        dynamic_dim(example_args[0], 0),
 | 
			
		||||
        dynamic_dim(example_args[1], 0),
 | 
			
		||||
        # The dynamic batch size between the inputs are equal
 | 
			
		||||
        dynamic_dim(example_args[0], 0) == dynamic_dim(example_args[1], 0),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    exported_program: torch.export.ExportedProgram = export(
 | 
			
		||||
      M(), args=example_args, constraints=constraints
 | 
			
		||||
    )
 | 
			
		||||
    print(exported_program)
 | 
			
		||||
 | 
			
		||||
.. code-block::
 | 
			
		||||
 | 
			
		||||
    ExportedProgram:
 | 
			
		||||
        class GraphModule(torch.nn.Module):
 | 
			
		||||
            def forward(self, arg0_1: f32[32, 64], arg1_1: f32[32], arg2_1: f32[64, 128], arg3_1: f32[64], arg4_1: f32[32], arg5_1: f32[s0, 64], arg6_1: f32[s0, 128]):
 | 
			
		||||
 | 
			
		||||
                # code: out1 = self.branch1(x1)
 | 
			
		||||
                permute: f32[64, 32] = torch.ops.aten.permute.default(arg0_1, [1, 0]);
 | 
			
		||||
                addmm: f32[s0, 32] = torch.ops.aten.addmm.default(arg1_1, arg5_1, permute);
 | 
			
		||||
                relu: f32[s0, 32] = torch.ops.aten.relu.default(addmm);
 | 
			
		||||
 | 
			
		||||
                # code: out2 = self.branch2(x2)
 | 
			
		||||
                permute_1: f32[128, 64] = torch.ops.aten.permute.default(arg2_1, [1, 0]);
 | 
			
		||||
                addmm_1: f32[s0, 64] = torch.ops.aten.addmm.default(arg3_1, arg6_1, permute_1);
 | 
			
		||||
                relu_1: f32[s0, 64] = torch.ops.aten.relu.default(addmm_1);  addmm_1 = None
 | 
			
		||||
 | 
			
		||||
                # code: return (out1 + self.buffer, out2)
 | 
			
		||||
                add: f32[s0, 32] = torch.ops.aten.add.Tensor(relu, arg4_1);
 | 
			
		||||
                return (add, relu_1)
 | 
			
		||||
 | 
			
		||||
        Graph signature: ExportGraphSignature(
 | 
			
		||||
            parameters=[
 | 
			
		||||
                'branch1.0.weight',
 | 
			
		||||
                'branch1.0.bias',
 | 
			
		||||
                'branch2.0.weight',
 | 
			
		||||
                'branch2.0.bias',
 | 
			
		||||
            ],
 | 
			
		||||
            buffers=['L__self___buffer'],
 | 
			
		||||
            user_inputs=['arg5_1', 'arg6_1'],
 | 
			
		||||
            user_outputs=['add', 'relu_1'],
 | 
			
		||||
            inputs_to_parameters={
 | 
			
		||||
                'arg0_1': 'branch1.0.weight',
 | 
			
		||||
                'arg1_1': 'branch1.0.bias',
 | 
			
		||||
                'arg2_1': 'branch2.0.weight',
 | 
			
		||||
                'arg3_1': 'branch2.0.bias',
 | 
			
		||||
            },
 | 
			
		||||
            inputs_to_buffers={'arg4_1': 'L__self___buffer'},
 | 
			
		||||
            buffers_to_mutate={},
 | 
			
		||||
            backward_signature=None,
 | 
			
		||||
            assertion_dep_token=None,
 | 
			
		||||
        )
 | 
			
		||||
        Range constraints: {s0: RangeConstraint(min_val=2, max_val=9223372036854775806)}
 | 
			
		||||
        Equality constraints: [(InputDim(input_name='arg5_1', dim=0), InputDim(input_name='arg6_1', dim=0))]
 | 
			
		||||
 | 
			
		||||
Some additional things to note:
 | 
			
		||||
 | 
			
		||||
* Through the :func:`torch.export.dynamic_dim` API, we specified the first
 | 
			
		||||
  dimension of each input to be dynamic. Looking at the inputs ``arg5_1`` and
 | 
			
		||||
  ``arg6_1``, they have a symbolic shape of (s0, 64) and (s0, 128), instead of
 | 
			
		||||
  the (32, 64) and (32, 128) shaped tensors that we passed in as example inputs.
 | 
			
		||||
  ``s0`` is a symbol representing that this dimension can be a range
 | 
			
		||||
  of values.
 | 
			
		||||
 | 
			
		||||
* ``exported_program.range_constraints`` describes the ranges of each symbol
 | 
			
		||||
  appearing in the graph. In this case, we see that ``s0`` has the range
 | 
			
		||||
  [2, inf]. For technical reasons that are difficult to explain here, they are
 | 
			
		||||
  assumed to be not 0 or 1. This is not a bug, and does not necessarily mean
 | 
			
		||||
  that the exported program will not work for dimensions 0 or 1. See
 | 
			
		||||
  `The 0/1 Specialization Problem <https://docs.google.com/document/d/16VPOa3d-Liikf48teAOmxLc92rgvJdfosIy-yoT38Io/edit?fbclid=IwAR3HNwmmexcitV0pbZm_x1a4ykdXZ9th_eJWK-3hBtVgKnrkmemz6Pm5jRQ#heading=h.ez923tomjvyk>`_
 | 
			
		||||
  for an in-depth discussion of this topic.
 | 
			
		||||
 | 
			
		||||
* ``exported_program.equality_constraints`` describes which dimensions are
 | 
			
		||||
  required to be equal. Since we specified in the constraints that the first
 | 
			
		||||
  dimension of each argument is equivalent,
 | 
			
		||||
  (``dynamic_dim(example_args[0], 0) == dynamic_dim(example_args[1], 0)``),
 | 
			
		||||
  we see in the equality constraints the tuple specifying that ``arg5_1``
 | 
			
		||||
  dimension 0 and ``arg6_1`` dimension 0 are equal.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Serialization
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
To save the ``ExportedProgram``, users can use the :func:`torch.export.save` and
 | 
			
		||||
:func:`torch.export.load` APIs. A convention is to save the ``ExportedProgram``
 | 
			
		||||
using a ``.pt2`` file extension.
 | 
			
		||||
 | 
			
		||||
An example:
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    import io
 | 
			
		||||
 | 
			
		||||
    class MyModule(torch.nn.Module):
 | 
			
		||||
        def forward(self, x):
 | 
			
		||||
            return x + 10
 | 
			
		||||
 | 
			
		||||
    exported_program = torch.export.export(MyModule(), torch.randn(5))
 | 
			
		||||
 | 
			
		||||
    torch.export.save(exported_program, 'exported_program.pt2')
 | 
			
		||||
    saved_exported_program = torch.export.load('exported_program.pt2')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Specialization
 | 
			
		||||
^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Input shapes
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
As mentioned before, by default, ``torch.export`` will trace the program
 | 
			
		||||
specializing on the input tensors' shapes, unless a dimension is specified as
 | 
			
		||||
dynamic via the :func:`torch.export.dynamic_dim` API. This means that if there
 | 
			
		||||
exists shape-dependent control flow, ``torch.export`` will specialize on the
 | 
			
		||||
branch that is being taken with the given sample inputs. For example:
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    from torch.export import export
 | 
			
		||||
 | 
			
		||||
    def fn(x):
 | 
			
		||||
        if x.shape[0] > 5:
 | 
			
		||||
            return x + 1
 | 
			
		||||
        else:
 | 
			
		||||
            return x - 1
 | 
			
		||||
 | 
			
		||||
    example_inputs = (torch.rand(10, 2),)
 | 
			
		||||
    exported_program = export(fn, example_inputs)
 | 
			
		||||
    print(exported_program)
 | 
			
		||||
 | 
			
		||||
.. code-block::
 | 
			
		||||
 | 
			
		||||
    ExportedProgram:
 | 
			
		||||
        class GraphModule(torch.nn.Module):
 | 
			
		||||
            def forward(self, arg0_1: f32[10, 2]):
 | 
			
		||||
                add: f32[10, 2] = torch.ops.aten.add.Tensor(arg0_1, 1);
 | 
			
		||||
                return (add,)
 | 
			
		||||
 | 
			
		||||
The conditional of (``x.shape[0] > 5``) does not appear in the
 | 
			
		||||
``ExportedProgram`` because the example inputs have the static
 | 
			
		||||
shape of (10, 2). Since ``torch.export`` specializes on the inputs' static
 | 
			
		||||
shapes, the else branch (``x - 1``) will never be reached. To preserve the dynamic
 | 
			
		||||
branching behavior based on the shape of a tensor in the traced graph,
 | 
			
		||||
:func:`torch.export.dynamic_dim` will need to be used to specify the dimension
 | 
			
		||||
of the input tensor (``x.shape[0]``) to be dynamic, and the source code will
 | 
			
		||||
need to be :ref:`rewritten <Data/Shape-Dependent Control Flow>`.
 | 
			
		||||
 | 
			
		||||
Non-tensor inputs
 | 
			
		||||
~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
``torch.export`` also specializes the traced graph based on the values of inputs
 | 
			
		||||
that are not ``torch.Tensor``, such as ``int``, ``float``, ``bool``, and ``str``.
 | 
			
		||||
However, we will likely change this in the near future to not specialize on
 | 
			
		||||
inputs of primitive types.
 | 
			
		||||
 | 
			
		||||
For example:
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    from torch.export import export
 | 
			
		||||
 | 
			
		||||
    def fn(x: torch.Tensor, const: int, times: int):
 | 
			
		||||
        for i in range(times):
 | 
			
		||||
            x = x + const
 | 
			
		||||
        return x
 | 
			
		||||
 | 
			
		||||
    example_inputs = (torch.rand(2, 2), 1, 3)
 | 
			
		||||
    exported_program = export(fn, example_inputs)
 | 
			
		||||
    print(exported_program)
 | 
			
		||||
 | 
			
		||||
.. code-block::
 | 
			
		||||
 | 
			
		||||
    ExportedProgram:
 | 
			
		||||
        class GraphModule(torch.nn.Module):
 | 
			
		||||
            def forward(self, arg0_1: f32[2, 2], arg1_1, arg2_1):
 | 
			
		||||
                add: f32[2, 2] = torch.ops.aten.add.Tensor(arg0_1, 1);
 | 
			
		||||
                add_1: f32[2, 2] = torch.ops.aten.add.Tensor(add, 1);
 | 
			
		||||
                add_2: f32[2, 2] = torch.ops.aten.add.Tensor(add_1, 1);
 | 
			
		||||
                return (add_2,)
 | 
			
		||||
 | 
			
		||||
Because integers are specialized, the ``torch.ops.aten.add.Tensor`` operations
 | 
			
		||||
are all computed with the inlined constant ``1``, rather than ``arg1_1``.
 | 
			
		||||
Additionally, the ``times`` iterator used in the ``for`` loop is also "inlined"
 | 
			
		||||
in the graph through the 3 repeated ``torch.ops.aten.add.Tensor`` calls, and the
 | 
			
		||||
input ``arg2_1`` is never used.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Limitations of torch.export
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
Graph Breaks
 | 
			
		||||
^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
As ``torch.export`` is a one-shot process for capturing a computation graph from
 | 
			
		||||
a PyTorch program, it might ultimately run into untraceable parts of programs as
 | 
			
		||||
it is nearly impossible to support tracing all PyTorch and Python features. In
 | 
			
		||||
the case of ``torch.compile``, an unsupported operation will cause a "graph
 | 
			
		||||
break" and the unsupported operation will be run with default Python evaluation.
 | 
			
		||||
In contrast, ``torch.export`` will require users to provide additional
 | 
			
		||||
information or rewrite parts of their code to make it traceable. As the
 | 
			
		||||
tracing is based on TorchDynamo, which evaluates at the Python
 | 
			
		||||
bytecode level, there will be significantly fewer rewrites required compared to
 | 
			
		||||
previous tracing frameworks.
 | 
			
		||||
 | 
			
		||||
When a graph break is encountered, :ref:`ExportDB <torch.export_db>` is a great
 | 
			
		||||
resource for learning about the kinds of programs that are supported and
 | 
			
		||||
unsupported, along with ways to rewrite programs to make them traceable.
 | 
			
		||||
 | 
			
		||||
.. _Data/Shape-Dependent Control Flow:
 | 
			
		||||
 | 
			
		||||
Data/Shape-Dependent Control Flow
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Graph breaks can also be encountered on data-dependent control flow (``if
 | 
			
		||||
x.shape[0] > 2``) when shapes are not being specialized, as a tracing compiler cannot
 | 
			
		||||
possibly deal with without generating code for a combinatorially exploding
 | 
			
		||||
number of paths. In such cases, users will need to rewrite their code using
 | 
			
		||||
special control flow operators (coming soon!).
 | 
			
		||||
 | 
			
		||||
Data-Dependent Accesses
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Data dependent behavior such as using the value inside of a tensor to construct
 | 
			
		||||
another tensor, or using the value of a tensor to slice into another tensor, is
 | 
			
		||||
also something the tracer cannot fully determine. Users will need to rewrite
 | 
			
		||||
their code using the inline constraint APIs
 | 
			
		||||
:func:`torch.export.constrain_as_size` and
 | 
			
		||||
:func:`torch.export.constrain_as_value`.
 | 
			
		||||
 | 
			
		||||
Missing Meta Kernels for Operators
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
When tracing, a META implementation (or "meta kernel") is required for all
 | 
			
		||||
operators. This is used to reason about the input/output shapes for this
 | 
			
		||||
operator.
 | 
			
		||||
 | 
			
		||||
Note that the official API for registering custom meta kernels for custom ops is
 | 
			
		||||
currently undergoing development. While the final API is being refined, you can
 | 
			
		||||
refer to the documentation `here <https://docs.google.com/document/d/1GgvOe7C8_NVOMLOCwDaYV1mXXyHMXY7ExoewHqooxrs/edit#heading=h.64r4npvq0w0>`_.
 | 
			
		||||
 | 
			
		||||
In the unfortunate case where your model uses an ATen operator that is does not
 | 
			
		||||
have a meta kernel implementation yet, please file an issue.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Read More
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :caption: Additional Links for Export Users
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
   torch.compiler_transformations
 | 
			
		||||
   torch.compiler_ir
 | 
			
		||||
   generated/exportdb/index
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :caption: Deep Dive for PyTorch Developers
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
   torch.compiler_deepdive
 | 
			
		||||
   torch.compiler_dynamic_shapes
 | 
			
		||||
   torch.compiler_fake_tensor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API Reference
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
.. automodule:: torch.export
 | 
			
		||||
.. autofunction:: export
 | 
			
		||||
@ -24,10 +565,3 @@ torch.export
 | 
			
		||||
.. autoclass:: ArgumentSpec
 | 
			
		||||
.. autoclass:: ModuleCallSignature
 | 
			
		||||
.. autoclass:: ModuleCallEntry
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :glob:
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
   generated/exportdb/index
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,6 @@ Features described in this documentation are classified by release status:
 | 
			
		||||
   profiler
 | 
			
		||||
   nn.init
 | 
			
		||||
   onnx
 | 
			
		||||
   onnx_diagnostics
 | 
			
		||||
   optim
 | 
			
		||||
   complex_numbers
 | 
			
		||||
   ddp_comm_hooks
 | 
			
		||||
 | 
			
		||||
@ -185,6 +185,7 @@ If you don't see an operation listed here, but it would help your use case, plea
 | 
			
		||||
   :meth:`Tensor.reciprocal_`,None
 | 
			
		||||
   :meth:`Tensor.refine_names`,See documentation
 | 
			
		||||
   :meth:`Tensor.register_hook`,None
 | 
			
		||||
   :meth:`Tensor.register_post_accumulate_grad_hook`,None
 | 
			
		||||
   :meth:`Tensor.rename`,See documentation
 | 
			
		||||
   :meth:`Tensor.rename_`,See documentation
 | 
			
		||||
   :attr:`Tensor.requires_grad`,None
 | 
			
		||||
 | 
			
		||||
@ -1,745 +1,64 @@
 | 
			
		||||
torch.onnx
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
.. contents:: :local:
 | 
			
		||||
 | 
			
		||||
.. automodule:: torch.onnx
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
`Open Neural Network eXchange (ONNX) <https://onnx.ai/>`_ is an open standard
 | 
			
		||||
format for representing machine learning models. The torch.onnx module can export
 | 
			
		||||
PyTorch models to ONNX. The model can then be consumed by any of the many
 | 
			
		||||
`runtimes that support ONNX <https://onnx.ai/supported-tools.html#deployModel>`_.
 | 
			
		||||
format for representing machine learning models. The ``torch.onnx`` module captures the computation graph from a
 | 
			
		||||
native PyTorch :class:`torch.nn.Module` model and converts it into an
 | 
			
		||||
`ONNX graph <https://github.com/onnx/onnx/blob/main/docs/IR.md>`_.
 | 
			
		||||
 | 
			
		||||
Example: AlexNet from PyTorch to ONNX
 | 
			
		||||
-------------------------------------
 | 
			
		||||
The exported model can be consumed by any of the many
 | 
			
		||||
`runtimes that support ONNX <https://onnx.ai/supported-tools.html#deployModel>`_, including
 | 
			
		||||
Microsoft's `ONNX Runtime <https://www.onnxruntime.ai>`_.
 | 
			
		||||
 | 
			
		||||
Here is a simple script which exports a pretrained AlexNet to an ONNX file named ``alexnet.onnx``.
 | 
			
		||||
The call to ``torch.onnx.export`` runs the model once to trace its execution and then exports the
 | 
			
		||||
traced model to the specified file::
 | 
			
		||||
**There are two flavors of ONNX exporter API that you can use, as listed below:**
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    import torchvision
 | 
			
		||||
TorchDynamo-based ONNX Exporter
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
    dummy_input = torch.randn(10, 3, 224, 224, device="cuda")
 | 
			
		||||
    model = torchvision.models.alexnet(pretrained=True).cuda()
 | 
			
		||||
*The TorchDynamo-based ONNX exporter is the newest (and Beta) exporter for PyTorch 2.0 and newer*
 | 
			
		||||
 | 
			
		||||
    # Providing input and output names sets the display names for values
 | 
			
		||||
    # within the model's graph. Setting these does not change the semantics
 | 
			
		||||
    # of the graph; it is only for readability.
 | 
			
		||||
    #
 | 
			
		||||
    # The inputs to the network consist of the flat list of inputs (i.e.
 | 
			
		||||
    # the values you would pass to the forward() method) followed by the
 | 
			
		||||
    # flat list of parameters. You can partially specify names, i.e. provide
 | 
			
		||||
    # a list here shorter than the number of inputs to the model, and we will
 | 
			
		||||
    # only set that subset of names, starting from the beginning.
 | 
			
		||||
    input_names = [ "actual_input_1" ] + [ "learned_%d" % i for i in range(16) ]
 | 
			
		||||
    output_names = [ "output1" ]
 | 
			
		||||
TorchDynamo engine is leveraged to hook into Python's frame evaluation API and dynamically rewrite its
 | 
			
		||||
bytecode into an FX Graph. The resulting FX Graph is then polished before it is finally translated into an
 | 
			
		||||
ONNX graph.
 | 
			
		||||
 | 
			
		||||
    torch.onnx.export(model, dummy_input, "alexnet.onnx", verbose=True, input_names=input_names, output_names=output_names)
 | 
			
		||||
The main advantage of this approach is that the `FX graph <https://pytorch.org/docs/stable/fx.html>`_ is captured using
 | 
			
		||||
bytecode analysis that preserves the dynamic nature of the model instead of using traditional static tracing techniques.
 | 
			
		||||
 | 
			
		||||
The resulting ``alexnet.onnx`` file contains a binary `protocol buffer <https://developers.google.com/protocol-buffers/>`_
 | 
			
		||||
which contains both the network structure and parameters of the model you exported
 | 
			
		||||
(in this case, AlexNet).  The argument ``verbose=True`` causes the
 | 
			
		||||
exporter to print out a human-readable representation of the model::
 | 
			
		||||
:doc:`Learn more about the TorchDynamo-based ONNX Exporter <onnx_dynamo>`
 | 
			
		||||
 | 
			
		||||
    # These are the inputs and parameters to the network, which have taken on
 | 
			
		||||
    # the names we specified earlier.
 | 
			
		||||
    graph(%actual_input_1 : Float(10, 3, 224, 224)
 | 
			
		||||
          %learned_0 : Float(64, 3, 11, 11)
 | 
			
		||||
          %learned_1 : Float(64)
 | 
			
		||||
          %learned_2 : Float(192, 64, 5, 5)
 | 
			
		||||
          %learned_3 : Float(192)
 | 
			
		||||
          # ---- omitted for brevity ----
 | 
			
		||||
          %learned_14 : Float(1000, 4096)
 | 
			
		||||
          %learned_15 : Float(1000)) {
 | 
			
		||||
      # Every statement consists of some output tensors (and their types),
 | 
			
		||||
      # the operator to be run (with its attributes, e.g., kernels, strides,
 | 
			
		||||
      # etc.), its input tensors (%actual_input_1, %learned_0, %learned_1)
 | 
			
		||||
      %17 : Float(10, 64, 55, 55) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[11, 11], pads=[2, 2, 2, 2], strides=[4, 4]](%actual_input_1, %learned_0, %learned_1), scope: AlexNet/Sequential[features]/Conv2d[0]
 | 
			
		||||
      %18 : Float(10, 64, 55, 55) = onnx::Relu(%17), scope: AlexNet/Sequential[features]/ReLU[1]
 | 
			
		||||
      %19 : Float(10, 64, 27, 27) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%18), scope: AlexNet/Sequential[features]/MaxPool2d[2]
 | 
			
		||||
      # ---- omitted for brevity ----
 | 
			
		||||
      %29 : Float(10, 256, 6, 6) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%28), scope: AlexNet/Sequential[features]/MaxPool2d[12]
 | 
			
		||||
      # Dynamic means that the shape is not known. This may be because of a
 | 
			
		||||
      # limitation of our implementation (which we would like to fix in a
 | 
			
		||||
      # future release) or shapes which are truly dynamic.
 | 
			
		||||
      %30 : Dynamic = onnx::Shape(%29), scope: AlexNet
 | 
			
		||||
      %31 : Dynamic = onnx::Slice[axes=[0], ends=[1], starts=[0]](%30), scope: AlexNet
 | 
			
		||||
      %32 : Long() = onnx::Squeeze[axes=[0]](%31), scope: AlexNet
 | 
			
		||||
      %33 : Long() = onnx::Constant[value={9216}](), scope: AlexNet
 | 
			
		||||
      # ---- omitted for brevity ----
 | 
			
		||||
      %output1 : Float(10, 1000) = onnx::Gemm[alpha=1, beta=1, broadcast=1, transB=1](%45, %learned_14, %learned_15), scope: AlexNet/Sequential[classifier]/Linear[6]
 | 
			
		||||
      return (%output1);
 | 
			
		||||
    }
 | 
			
		||||
TorchScript-based ONNX Exporter
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
You can also verify the output using the `ONNX <https://github.com/onnx/onnx/>`_ library,
 | 
			
		||||
which you can install using ``pip``::
 | 
			
		||||
*The TorchScript-based ONNX exporter is available since PyTorch 1.2.0*
 | 
			
		||||
 | 
			
		||||
    pip install onnx
 | 
			
		||||
`TorchScript <https://pytorch.org/docs/stable/jit.html>`_ is leveraged to trace (through :func:`torch.jit.trace`)
 | 
			
		||||
the model and capture a static computation graph.
 | 
			
		||||
 | 
			
		||||
Then, you can run::
 | 
			
		||||
As a consequence, the resulting graph has a couple limitations:
 | 
			
		||||
 | 
			
		||||
    import onnx
 | 
			
		||||
* It does not record any control-flow, like if-statements or loops;
 | 
			
		||||
* Does not handle nuances between ``training`` and ``eval`` mode;
 | 
			
		||||
* Does not truly handle dynamic inputs
 | 
			
		||||
 | 
			
		||||
    # Load the ONNX model
 | 
			
		||||
    model = onnx.load("alexnet.onnx")
 | 
			
		||||
As an attempt to support the static tracing limitations, the exporter also supports TorchScript scripting
 | 
			
		||||
(through :func:`torch.jit.script`), which adds support for data-dependent control-flow, for example. However, TorchScript
 | 
			
		||||
itself is a subset of the Python language, so not all features in Python are supported, such as in-place operations.
 | 
			
		||||
 | 
			
		||||
    # Check that the model is well formed
 | 
			
		||||
    onnx.checker.check_model(model)
 | 
			
		||||
:doc:`Learn more about the TorchScript-based ONNX Exporter <onnx_torchscript>`
 | 
			
		||||
 | 
			
		||||
    # Print a human readable representation of the graph
 | 
			
		||||
    print(onnx.helper.printable_graph(model.graph))
 | 
			
		||||
 | 
			
		||||
You can also run the exported model with one of the many
 | 
			
		||||
`runtimes that support ONNX <https://onnx.ai/supported-tools.html#deployModel>`_.
 | 
			
		||||
For example after installing `ONNX Runtime <https://www.onnxruntime.ai>`_, you can
 | 
			
		||||
load and run the model::
 | 
			
		||||
 | 
			
		||||
    import onnxruntime as ort
 | 
			
		||||
    import numpy as np
 | 
			
		||||
 | 
			
		||||
    ort_session = ort.InferenceSession("alexnet.onnx")
 | 
			
		||||
 | 
			
		||||
    outputs = ort_session.run(
 | 
			
		||||
        None,
 | 
			
		||||
        {"actual_input_1": np.random.randn(10, 3, 224, 224).astype(np.float32)},
 | 
			
		||||
    )
 | 
			
		||||
    print(outputs[0])
 | 
			
		||||
 | 
			
		||||
Here is a more involved `tutorial on exporting a model and running it with ONNX Runtime <https://pytorch.org/tutorials/advanced/super_resolution_with_onnxruntime.html>`_.
 | 
			
		||||
 | 
			
		||||
.. _tracing-vs-scripting:
 | 
			
		||||
 | 
			
		||||
Tracing vs Scripting
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
Internally, :func:`torch.onnx.export()` requires a :class:`torch.jit.ScriptModule` rather than
 | 
			
		||||
a :class:`torch.nn.Module`. If the passed-in model is not already a ``ScriptModule``,
 | 
			
		||||
``export()`` will use *tracing* to convert it to one:
 | 
			
		||||
 | 
			
		||||
.. TODO(justinchuby): Add a word on recommending tracing over scripting for most use cases.
 | 
			
		||||
 | 
			
		||||
* **Tracing**: If ``torch.onnx.export()`` is called with a Module that is not already a
 | 
			
		||||
  ``ScriptModule``, it first does the equivalent of :func:`torch.jit.trace`, which executes the model
 | 
			
		||||
  once with the given ``args`` and records all operations that happen during that execution. This
 | 
			
		||||
  means that if your model is dynamic, e.g., changes behavior depending on input data, the exported
 | 
			
		||||
  model will *not* capture this dynamic behavior.
 | 
			
		||||
  We recommend examining the exported model and making sure the operators look
 | 
			
		||||
  reasonable. Tracing will unroll loops and if statements, exporting a static graph that is exactly
 | 
			
		||||
  the same as the traced run. If you want to export your model with dynamic control flow, you will
 | 
			
		||||
  need to use *scripting*.
 | 
			
		||||
 | 
			
		||||
* **Scripting**: Compiling a model via scripting preserves dynamic control flow and is valid for inputs
 | 
			
		||||
  of different sizes. To use scripting:
 | 
			
		||||
 | 
			
		||||
  * Use :func:`torch.jit.script` to produce a ``ScriptModule``.
 | 
			
		||||
  * Call ``torch.onnx.export()`` with the ``ScriptModule`` as the model. The ``args`` are still required,
 | 
			
		||||
    but they will be used internally only to produce example outputs, so that the types and shapes of the
 | 
			
		||||
    outputs can be captured. No tracing will be performed.
 | 
			
		||||
 | 
			
		||||
See `Introduction to TorchScript <https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html>`_
 | 
			
		||||
and `TorchScript <jit.html>`_ for more details, including how to compose tracing and scripting to suit the
 | 
			
		||||
particular requirements of different models.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Avoiding Pitfalls
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Avoid NumPy and built-in Python types
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
PyTorch models can be written using NumPy or Python types and functions, but
 | 
			
		||||
during :ref:`tracing<tracing-vs-scripting>`, any variables of NumPy or Python
 | 
			
		||||
types (rather than torch.Tensor) are converted to constants, which will produce
 | 
			
		||||
the wrong result if those values should change depending on the inputs.
 | 
			
		||||
 | 
			
		||||
For example, rather than using numpy functions on numpy.ndarrays: ::
 | 
			
		||||
 | 
			
		||||
    # Bad! Will be replaced with constants during tracing.
 | 
			
		||||
    x, y = np.random.rand(1, 2), np.random.rand(1, 2)
 | 
			
		||||
    np.concatenate((x, y), axis=1)
 | 
			
		||||
 | 
			
		||||
Use torch operators on torch.Tensors: ::
 | 
			
		||||
 | 
			
		||||
    # Good! Tensor operations will be captured during tracing.
 | 
			
		||||
    x, y = torch.randn(1, 2), torch.randn(1, 2)
 | 
			
		||||
    torch.cat((x, y), dim=1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
And rather than use :func:`torch.Tensor.item` (which converts a Tensor to a Python
 | 
			
		||||
built-in number): ::
 | 
			
		||||
 | 
			
		||||
    # Bad! y.item() will be replaced with a constant during tracing.
 | 
			
		||||
    def forward(self, x, y):
 | 
			
		||||
        return x.reshape(y.item(), -1)
 | 
			
		||||
 | 
			
		||||
Use torch's support for implicit casting of single-element tensors: ::
 | 
			
		||||
 | 
			
		||||
    # Good! y will be preserved as a variable during tracing.
 | 
			
		||||
    def forward(self, x, y):
 | 
			
		||||
        return x.reshape(y, -1)
 | 
			
		||||
 | 
			
		||||
Avoid Tensor.data
 | 
			
		||||
^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Using the Tensor.data field can produce an incorrect trace and therefore an incorrect ONNX graph.
 | 
			
		||||
Use :func:`torch.Tensor.detach` instead. (Work is ongoing to
 | 
			
		||||
`remove Tensor.data entirely <https://github.com/pytorch/pytorch/issues/30987>`_).
 | 
			
		||||
 | 
			
		||||
Avoid in-place operations when using tensor.shape in tracing mode
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
In tracing mode, shapes obtained from ``tensor.shape`` are traced as tensors,
 | 
			
		||||
and share the same memory. This might cause a mismatch the final output values.
 | 
			
		||||
As a workaround, avoid the use of inplace operations in these scenarios.
 | 
			
		||||
For example, in the model::
 | 
			
		||||
 | 
			
		||||
    class Model(torch.nn.Module):
 | 
			
		||||
      def forward(self, states):
 | 
			
		||||
          batch_size, seq_length = states.shape[:2]
 | 
			
		||||
          real_seq_length = seq_length
 | 
			
		||||
          real_seq_length += 2
 | 
			
		||||
          return real_seq_length + seq_length
 | 
			
		||||
 | 
			
		||||
``real_seq_length`` and ``seq_length`` share the same memory in tracing mode.
 | 
			
		||||
This could be avoided by rewriting the inplace operation::
 | 
			
		||||
 | 
			
		||||
    real_seq_length = real_seq_length + 2
 | 
			
		||||
 | 
			
		||||
Limitations
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
Types
 | 
			
		||||
^^^^^
 | 
			
		||||
 | 
			
		||||
* Only :class:`torch.Tensors`, numeric types that can be trivially converted to torch.Tensors (e.g. float, int),
 | 
			
		||||
  and tuples and lists of those types are supported as model inputs or outputs. Dict and str inputs and
 | 
			
		||||
  outputs are accepted in :ref:`tracing<tracing-vs-scripting>` mode, but:
 | 
			
		||||
 | 
			
		||||
  * Any computation that depends on the value of a dict or a str input **will be replaced with the
 | 
			
		||||
    constant value** seen during the one traced execution.
 | 
			
		||||
  * Any output that is a dict will be silently replaced with a **flattened sequence of its values
 | 
			
		||||
    (keys will be removed)**. E.g. ``{"foo": 1, "bar": 2}`` becomes ``(1, 2)``.
 | 
			
		||||
  * Any output that is a str will be silently removed.
 | 
			
		||||
 | 
			
		||||
* Certain operations involving tuples and lists are not supported in
 | 
			
		||||
  :ref:`scripting<tracing-vs-scripting>` mode due to limited support in ONNX for nested sequences.
 | 
			
		||||
  In particular appending a tuple to a list is not supported. In tracing mode, the nested sequences
 | 
			
		||||
  will be flattened automatically during the tracing.
 | 
			
		||||
 | 
			
		||||
Differences in Operator Implementations
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Due to differences in implementations of operators, running the exported model on different runtimes
 | 
			
		||||
may produce different results from each other or from PyTorch. Normally these differences are
 | 
			
		||||
numerically small, so this should only be a concern if your application is sensitive to these
 | 
			
		||||
small differences.
 | 
			
		||||
 | 
			
		||||
.. _tensor-indexing:
 | 
			
		||||
 | 
			
		||||
Unsupported Tensor Indexing Patterns
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Tensor indexing patterns that cannot be exported are listed below.
 | 
			
		||||
If you are experiencing issues exporting a model that does not include any of
 | 
			
		||||
the unsupported patterns below, please double check that you are exporting with
 | 
			
		||||
the latest ``opset_version``.
 | 
			
		||||
 | 
			
		||||
Reads / Gets
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When indexing into a tensor for reading, the following patterns are not supported: ::
 | 
			
		||||
 | 
			
		||||
  # Tensor indices that includes negative values.
 | 
			
		||||
  data[torch.tensor([[1, 2], [2, -3]]), torch.tensor([-2, 3])]
 | 
			
		||||
  # Workarounds: use positive index values.
 | 
			
		||||
 | 
			
		||||
Writes / Sets
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When indexing into a Tensor for writing, the following patterns are not supported: ::
 | 
			
		||||
 | 
			
		||||
  # Multiple tensor indices if any has rank >= 2
 | 
			
		||||
  data[torch.tensor([[1, 2], [2, 3]]), torch.tensor([2, 3])] = new_data
 | 
			
		||||
  # Workarounds: use single tensor index with rank >= 2,
 | 
			
		||||
  #              or multiple consecutive tensor indices with rank == 1.
 | 
			
		||||
 | 
			
		||||
  # Multiple tensor indices that are not consecutive
 | 
			
		||||
  data[torch.tensor([2, 3]), :, torch.tensor([1, 2])] = new_data
 | 
			
		||||
  # Workarounds: transpose `data` such that tensor indices are consecutive.
 | 
			
		||||
 | 
			
		||||
  # Tensor indices that includes negative values.
 | 
			
		||||
  data[torch.tensor([1, -2]), torch.tensor([-2, 3])] = new_data
 | 
			
		||||
  # Workarounds: use positive index values.
 | 
			
		||||
 | 
			
		||||
  # Implicit broadcasting required for new_data.
 | 
			
		||||
  data[torch.tensor([[0, 2], [1, 1]]), 1:3] = new_data
 | 
			
		||||
  # Workarounds: expand new_data explicitly.
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   data shape: [3, 4, 5]
 | 
			
		||||
  #   new_data shape: [5]
 | 
			
		||||
  #   expected new_data shape after broadcasting: [2, 2, 2, 5]
 | 
			
		||||
 | 
			
		||||
Adding support for operators
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
When exporting a model that includes unsupported operators, you'll see an error message like:
 | 
			
		||||
 | 
			
		||||
.. code-block:: text
 | 
			
		||||
 | 
			
		||||
    RuntimeError: ONNX export failed: Couldn't export operator foo
 | 
			
		||||
 | 
			
		||||
When that happens, there are a few things you can do:
 | 
			
		||||
 | 
			
		||||
#. Change the model to not use that operator.
 | 
			
		||||
#. Create a symbolic function to convert the operator and register it as a custom symbolic function.
 | 
			
		||||
#. Contribute to PyTorch to add the same symbolic function to :mod:`torch.onnx` itself.
 | 
			
		||||
 | 
			
		||||
If you decided to implement a symbolic function (we hope you will contribute it back to PyTorch!), here is how you can get started:
 | 
			
		||||
 | 
			
		||||
ONNX exporter internals
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
A "symbolic function" is a function that decomposes a PyTorch operator into a
 | 
			
		||||
composition of a series of ONNX operators.
 | 
			
		||||
 | 
			
		||||
During export, each node (which contains a PyTorch operator) in the TorchScript
 | 
			
		||||
graph is visited by the exporter in topological order.
 | 
			
		||||
Upon visiting a node, the exporter looks for a registered symbolic functions for
 | 
			
		||||
that operator. Symbolic functions are implemented in Python. A symbolic function for
 | 
			
		||||
an op named ``foo`` would look something like::
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def foo(
 | 
			
		||||
      g,
 | 
			
		||||
      input_0: torch._C.Value,
 | 
			
		||||
      input_1: torch._C.Value) -> Union[None, torch._C.Value, List[torch._C.Value]]:
 | 
			
		||||
      """
 | 
			
		||||
      Adds the ONNX operations representing this PyTorch function by updating the
 | 
			
		||||
      graph g with `g.op()` calls.
 | 
			
		||||
 | 
			
		||||
      Args:
 | 
			
		||||
        g (Graph): graph to write the ONNX representation into.
 | 
			
		||||
        input_0 (Value): value representing the variables which contain
 | 
			
		||||
            the first input for this operator.
 | 
			
		||||
        input_1 (Value): value representing the variables which contain
 | 
			
		||||
            the second input for this operator.
 | 
			
		||||
 | 
			
		||||
      Returns:
 | 
			
		||||
        A Value or List of Values specifying the ONNX nodes that compute something
 | 
			
		||||
        equivalent to the original PyTorch operator with the given inputs.
 | 
			
		||||
 | 
			
		||||
        None if it cannot be converted to ONNX.
 | 
			
		||||
      """
 | 
			
		||||
      ...
 | 
			
		||||
 | 
			
		||||
The ``torch._C`` types are Python wrappers around the types defined in C++ in
 | 
			
		||||
`ir.h <https://github.com/pytorch/pytorch/blob/main/torch/csrc/jit/ir/ir.h>`_.
 | 
			
		||||
 | 
			
		||||
The process for adding a symbolic function depends on the type of operator.
 | 
			
		||||
 | 
			
		||||
.. _adding-support-aten:
 | 
			
		||||
 | 
			
		||||
ATen operators
 | 
			
		||||
^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
`ATen <https://pytorch.org/cppdocs/#aten>`_ is PyTorch's built-in tensor library.
 | 
			
		||||
If the operator is an ATen operator (shows up in the TorchScript graph with the prefix
 | 
			
		||||
``aten::``), make sure it is not supported already.
 | 
			
		||||
 | 
			
		||||
List of supported operators
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Visit the auto generated :doc:`list of supported TorchScript operators <../onnx_supported_aten_ops>`
 | 
			
		||||
for details on which operator are supported in each ``opset_version``.
 | 
			
		||||
 | 
			
		||||
Adding support for an aten or quantized operator
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If the operator is not in the list above:
 | 
			
		||||
 | 
			
		||||
* Define the symbolic function in ``torch/onnx/symbolic_opset<version>.py``, for example
 | 
			
		||||
  `torch/onnx/symbolic_opset9.py <https://github.com/pytorch/pytorch/blob/main/torch/onnx/symbolic_opset9.py>`_.
 | 
			
		||||
  Make sure the function has the same name as the ATen function, which may be declared in
 | 
			
		||||
  ``torch/_C/_VariableFunctions.pyi`` or ``torch/nn/functional.pyi`` (these files are generated at
 | 
			
		||||
  build time, so will not appear in your checkout until you build PyTorch).
 | 
			
		||||
* By default, the first arg is the ONNX graph.
 | 
			
		||||
  Other arg names must EXACTLY match the names in the ``.pyi`` file,
 | 
			
		||||
  because dispatch is done with keyword arguments.
 | 
			
		||||
* In the symbolic function, if the operator is in the
 | 
			
		||||
  `ONNX standard operator set <https://github.com/onnx/onnx/blob/master/docs/Operators.md>`_,
 | 
			
		||||
  we only need to create a node to represent the ONNX operator in the graph.
 | 
			
		||||
  If not, we can compose several standard operators that have the
 | 
			
		||||
  equivalent semantics to the ATen operator.
 | 
			
		||||
 | 
			
		||||
Here is an example of handling missing symbolic function for the ``ELU`` operator.
 | 
			
		||||
 | 
			
		||||
If we run the following code::
 | 
			
		||||
 | 
			
		||||
    print(
 | 
			
		||||
        torch.jit.trace(
 | 
			
		||||
            torch.nn.ELU(), # module
 | 
			
		||||
            torch.ones(1)   # example input
 | 
			
		||||
        ).graph
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
We see something like::
 | 
			
		||||
 | 
			
		||||
  graph(%self : __torch__.torch.nn.modules.activation.___torch_mangle_0.ELU,
 | 
			
		||||
        %input : Float(1, strides=[1], requires_grad=0, device=cpu)):
 | 
			
		||||
    %4 : float = prim::Constant[value=1.]()
 | 
			
		||||
    %5 : int = prim::Constant[value=1]()
 | 
			
		||||
    %6 : int = prim::Constant[value=1]()
 | 
			
		||||
    %7 : Float(1, strides=[1], requires_grad=0, device=cpu) = aten::elu(%input, %4, %5, %6)
 | 
			
		||||
    return (%7)
 | 
			
		||||
 | 
			
		||||
Since we see ``aten::elu`` in the graph, we know this is an ATen operator.
 | 
			
		||||
 | 
			
		||||
We check the `ONNX operator list <https://github.com/onnx/onnx/blob/master/docs/Operators.md>`_,
 | 
			
		||||
and confirm that ``Elu`` is standardized in ONNX.
 | 
			
		||||
 | 
			
		||||
We find a signature for ``elu`` in ``torch/nn/functional.pyi``::
 | 
			
		||||
 | 
			
		||||
    def elu(input: Tensor, alpha: float = ..., inplace: bool = ...) -> Tensor: ...
 | 
			
		||||
 | 
			
		||||
We add the following lines to ``symbolic_opset9.py``::
 | 
			
		||||
 | 
			
		||||
    def elu(g, input: torch.Value, alpha: torch.Value, inplace: bool = False):
 | 
			
		||||
        return g.op("Elu", input, alpha_f=alpha)
 | 
			
		||||
 | 
			
		||||
Now PyTorch is able to export models containing the ``aten::elu`` operator!
 | 
			
		||||
 | 
			
		||||
See the ``torch/onnx/symbolic_opset*.py`` files for more examples.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
torch.autograd.Functions
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
If the operator is a sub-class of :class:`torch.autograd.Function`, there are three ways
 | 
			
		||||
to export it.
 | 
			
		||||
 | 
			
		||||
Static Symbolic Method
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can add a static method named ``symbolic`` to your function class. It should return
 | 
			
		||||
ONNX operators that represent the function's behavior in ONNX. For example::
 | 
			
		||||
 | 
			
		||||
    class MyRelu(torch.autograd.Function):
 | 
			
		||||
        @staticmethod
 | 
			
		||||
        def forward(ctx, input: torch.Tensor) -> torch.Tensor:
 | 
			
		||||
            ctx.save_for_backward(input)
 | 
			
		||||
            return input.clamp(min=0)
 | 
			
		||||
 | 
			
		||||
        @staticmethod
 | 
			
		||||
        def symbolic(g: torch.Graph, input: torch.Value) -> torch.Value:
 | 
			
		||||
            return g.op("Clip", input, g.op("Constant", value_t=torch.tensor(0, dtype=torch.float)))
 | 
			
		||||
 | 
			
		||||
.. FIXME(justinchuby): PythonOps are too complicated and the example below
 | 
			
		||||
..  uses private methods we do not expose. We are looking to
 | 
			
		||||
..  improve the experience. Since SymbolicContext is deprecated, we think
 | 
			
		||||
..  defining a symbolic staticmethod is a better way to go for now.
 | 
			
		||||
 | 
			
		||||
.. PythonOp Symbolic
 | 
			
		||||
.. ~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
.. Alternatively, you can register a custom symbolic function.
 | 
			
		||||
.. This gives the symbolic function access to more info through the
 | 
			
		||||
.. ``torch.onnx.SymbolicContext`` object, which gets passed in as the first
 | 
			
		||||
.. argument (before the ``Graph`` object).
 | 
			
		||||
 | 
			
		||||
.. All autograd ``Function``\ s appear in the TorchScript graph as ``prim::PythonOp`` nodes.
 | 
			
		||||
.. In order to differentiate between different ``Function`` subclasses, the
 | 
			
		||||
.. symbolic function should use the ``name`` kwarg which gets set to the name of the class.
 | 
			
		||||
 | 
			
		||||
.. Custom symbolic functions should add type and shape information by calling ``setType(...)``
 | 
			
		||||
.. on Value objects before returning them (implemented in C++ by
 | 
			
		||||
.. . ``torch::jit::Value::setType``). This is not required, but it can help the exporter's
 | 
			
		||||
.. shape and type inference for down-stream nodes. For a non-trivial example of ``setType``, see
 | 
			
		||||
.. ``test_aten_embedding_2`` in
 | 
			
		||||
.. `test_operators.py <https://github.com/pytorch/pytorch/blob/main/test/onnx/test_operators.py>`_.
 | 
			
		||||
 | 
			
		||||
.. The example below shows how you can access ``requires_grad`` via the ``Node`` object:
 | 
			
		||||
 | 
			
		||||
..     class MyClip(torch.autograd.Function):
 | 
			
		||||
..         @staticmethod
 | 
			
		||||
..         def forward(ctx, input, min):
 | 
			
		||||
..             ctx.save_for_backward(input)
 | 
			
		||||
..             return input.clamp(min=min)
 | 
			
		||||
 | 
			
		||||
..     class MyRelu(torch.autograd.Function):
 | 
			
		||||
..         @staticmethod
 | 
			
		||||
..         def forward(ctx, input):
 | 
			
		||||
..             ctx.save_for_backward(input)
 | 
			
		||||
..             return input.clamp(min=0)
 | 
			
		||||
 | 
			
		||||
..     def symbolic_python_op(g: "GraphContext", *args, **kwargs):
 | 
			
		||||
..         n = ctx.cur_node
 | 
			
		||||
..         print("original node: ", n)
 | 
			
		||||
..         for i, out in enumerate(n.outputs()):
 | 
			
		||||
..             print("original output {}: {}, requires grad: {}".format(i, out, out.requiresGrad()))
 | 
			
		||||
..         import torch.onnx.symbolic_helper as sym_helper
 | 
			
		||||
..         for i, arg in enumerate(args):
 | 
			
		||||
..             requires_grad = arg.requiresGrad() if sym_helper._is_value(arg) else False
 | 
			
		||||
..             print("arg {}: {}, requires grad: {}".format(i, arg, requires_grad))
 | 
			
		||||
 | 
			
		||||
..         name = kwargs["name"]
 | 
			
		||||
..         ret = None
 | 
			
		||||
..         if name == "MyClip":
 | 
			
		||||
..             ret = g.op("Clip", args[0], args[1])
 | 
			
		||||
..         elif name == "MyRelu":
 | 
			
		||||
..             ret = g.op("Relu", args[0])
 | 
			
		||||
..         else:
 | 
			
		||||
..             # Logs a warning and returns None
 | 
			
		||||
..             return _unimplemented("prim::PythonOp", "unknown node kind: " + name)
 | 
			
		||||
..         # Copy type and shape from original node.
 | 
			
		||||
..         ret.setType(n.type())
 | 
			
		||||
..         return ret
 | 
			
		||||
 | 
			
		||||
..     from torch.onnx import register_custom_op_symbolic
 | 
			
		||||
.. .     register_custom_op_symbolic("prim::PythonOp", symbolic_python_op, 1)
 | 
			
		||||
 | 
			
		||||
Inline Autograd Function
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
In cases where a static symbolic method is not provided for its subsequent :class:`torch.autograd.Function` or
 | 
			
		||||
where a function to register ``prim::PythonOp`` as custom symbolic functions is not provided,
 | 
			
		||||
:func:`torch.onnx.export` tries to inline the graph that corresponds to that :class:`torch.autograd.Function` such that
 | 
			
		||||
this function is broken down into individual operators that were used within the function.
 | 
			
		||||
The export should be successful as long as these individual operators are supported. For example::
 | 
			
		||||
 | 
			
		||||
    class MyLogExp(torch.autograd.Function):
 | 
			
		||||
        @staticmethod
 | 
			
		||||
        def forward(ctx, input: torch.Tensor) -> torch.Tensor:
 | 
			
		||||
            ctx.save_for_backward(input)
 | 
			
		||||
            h = input.exp()
 | 
			
		||||
            return h.log().log()
 | 
			
		||||
 | 
			
		||||
There is no static symbolic method present for this model, yet it is exported as follows::
 | 
			
		||||
 | 
			
		||||
    graph(%input : Float(1, strides=[1], requires_grad=0, device=cpu)):
 | 
			
		||||
        %1 : float = onnx::Exp[](%input)
 | 
			
		||||
        %2 : float = onnx::Log[](%1)
 | 
			
		||||
        %3 : float = onnx::Log[](%2)
 | 
			
		||||
        return (%3)
 | 
			
		||||
 | 
			
		||||
If you need to avoid inlining of :class:`torch.autograd.Function`, you should export models with
 | 
			
		||||
``operator_export_type`` set to ``ONNX_FALLTHROUGH`` or ``ONNX_ATEN_FALLBACK``.
 | 
			
		||||
 | 
			
		||||
Custom operators
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
You can export your model with custom operators that includes a combination of many standard ONNX ops,
 | 
			
		||||
or are driven by self-defined C++ backend.
 | 
			
		||||
 | 
			
		||||
ONNX-script functions
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If an operator is not a standard ONNX op, but can be composed of multiple existing ONNX ops, you can utilize
 | 
			
		||||
`ONNX-script <https://github.com/microsoft/onnx-script>`_ to create an external ONNX function to support the operator.
 | 
			
		||||
You can export it by following this example::
 | 
			
		||||
 | 
			
		||||
    import onnxscript
 | 
			
		||||
    # There are three opset version needed to be aligned
 | 
			
		||||
    # This is (1) the opset version in ONNX function
 | 
			
		||||
    from onnxscript.onnx_opset import opset15 as op
 | 
			
		||||
    opset_version = 15
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(1, 2, 3, 4, requires_grad=True)
 | 
			
		||||
    model = torch.nn.SELU()
 | 
			
		||||
 | 
			
		||||
    custom_opset = onnxscript.values.Opset(domain="onnx-script", version=1)
 | 
			
		||||
 | 
			
		||||
    @onnxscript.script(custom_opset)
 | 
			
		||||
    def Selu(X):
 | 
			
		||||
        alpha = 1.67326  # auto wrapped as Constants
 | 
			
		||||
        gamma = 1.0507
 | 
			
		||||
        alphaX = op.CastLike(alpha, X)
 | 
			
		||||
        gammaX = op.CastLike(gamma, X)
 | 
			
		||||
        neg = gammaX * (alphaX * op.Exp(X) - alphaX)
 | 
			
		||||
        pos = gammaX * X
 | 
			
		||||
        zero = op.CastLike(0, X)
 | 
			
		||||
        return op.Where(X <= zero, neg, pos)
 | 
			
		||||
 | 
			
		||||
    # setType API provides shape/type to ONNX shape/type inference
 | 
			
		||||
    def custom_selu(g: jit_utils.GraphContext, X):
 | 
			
		||||
        return g.onnxscript_op(Selu, X).setType(X.type())
 | 
			
		||||
 | 
			
		||||
    # Register custom symbolic function
 | 
			
		||||
    # There are three opset version needed to be aligned
 | 
			
		||||
    # This is (2) the opset version in registry
 | 
			
		||||
    torch.onnx.register_custom_op_symbolic(
 | 
			
		||||
        symbolic_name="aten::selu",
 | 
			
		||||
        symbolic_fn=custom_selu,
 | 
			
		||||
        opset_version=opset_version,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # There are three opset version needed to be aligned
 | 
			
		||||
    # This is (2) the opset version in exporter
 | 
			
		||||
    torch.onnx.export(
 | 
			
		||||
        model,
 | 
			
		||||
        x,
 | 
			
		||||
        "model.onnx",
 | 
			
		||||
        opset_version=opset_version,
 | 
			
		||||
        # only needed if you want to specify an opset version > 1.
 | 
			
		||||
        custom_opsets={"onnx-script": 2}
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
The example above exports it as a custom operator in the "onnx-script" opset.
 | 
			
		||||
When exporting a custom operator, you can specify the custom domain version using the
 | 
			
		||||
``custom_opsets`` dictionary at export. If not specified, the custom opset version defaults to 1.
 | 
			
		||||
 | 
			
		||||
NOTE: Be careful to align the opset version mentioned in the above example, and make sure they are consumed in exporter step.
 | 
			
		||||
The example usage of how to write a onnx-script function is a beta version in terms of the active development on onnx-script.
 | 
			
		||||
Please follow the latest `ONNX-script <https://github.com/microsoft/onnx-script>`_
 | 
			
		||||
 | 
			
		||||
C++ Operators
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If a model uses a custom operator implemented in C++ as described in
 | 
			
		||||
`Extending TorchScript with Custom C++ Operators <https://pytorch.org/tutorials/advanced/torch_script_custom_ops.html>`_,
 | 
			
		||||
you can export it by following this example::
 | 
			
		||||
 | 
			
		||||
    from torch.onnx import symbolic_helper
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Define custom symbolic function
 | 
			
		||||
    @symbolic_helper.parse_args("v", "v", "f", "i")
 | 
			
		||||
    def symbolic_foo_forward(g, input1, input2, attr1, attr2):
 | 
			
		||||
        return g.op("custom_domain::Foo", input1, input2, attr1_f=attr1, attr2_i=attr2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Register custom symbolic function
 | 
			
		||||
    torch.onnx.register_custom_op_symbolic("custom_ops::foo_forward", symbolic_foo_forward, 9)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    class FooModel(torch.nn.Module):
 | 
			
		||||
        def __init__(self, attr1, attr2):
 | 
			
		||||
            super().__init__()
 | 
			
		||||
            self.attr1 = attr1
 | 
			
		||||
            self.attr2 = attr2
 | 
			
		||||
 | 
			
		||||
        def forward(self, input1, input2):
 | 
			
		||||
            # Calling custom op
 | 
			
		||||
            return torch.ops.custom_ops.foo_forward(input1, input2, self.attr1, self.attr2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    model = FooModel(attr1, attr2)
 | 
			
		||||
    torch.onnx.export(
 | 
			
		||||
        model,
 | 
			
		||||
        (example_input1, example_input1),
 | 
			
		||||
        "model.onnx",
 | 
			
		||||
        # only needed if you want to specify an opset version > 1.
 | 
			
		||||
        custom_opsets={"custom_domain": 2}
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
The example above exports it as a custom operator in the "custom_domain" opset.
 | 
			
		||||
When exporting a custom operator, you can specify the custom domain version using the
 | 
			
		||||
``custom_opsets`` dictionary at export. If not specified, the custom opset version defaults to 1.
 | 
			
		||||
 | 
			
		||||
The runtime that consumes the model needs to support the custom op. See
 | 
			
		||||
`Caffe2 custom ops <https://caffe2.ai/docs/custom-operators.html>`_,
 | 
			
		||||
`ONNX Runtime custom ops <https://onnxruntime.ai/docs/reference/operators/add-custom-op.html>`_,
 | 
			
		||||
or your runtime of choice's documentation.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Discovering all unconvertible ATen ops at once
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
When export fails due to an unconvertible ATen op, there may in fact be more
 | 
			
		||||
than one such op but the error message only mentions the first. To discover
 | 
			
		||||
all of the unconvertible ops in one go you can::
 | 
			
		||||
 | 
			
		||||
    # prepare model, args, opset_version
 | 
			
		||||
    ...
 | 
			
		||||
 | 
			
		||||
    torch_script_graph, unconvertible_ops = torch.onnx.utils.unconvertible_ops(
 | 
			
		||||
        model, args, opset_version=opset_version
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    print(set(unconvertible_ops))
 | 
			
		||||
 | 
			
		||||
The set is approximated because some ops may be removed during the conversion
 | 
			
		||||
process and don't need to be converted. Some other ops may have partial support
 | 
			
		||||
that will fail conversion with particular inputs, but this should give you a
 | 
			
		||||
general idea of what ops are not supported. Please feel free to open GitHub Issues
 | 
			
		||||
for op support requests.
 | 
			
		||||
 | 
			
		||||
Frequently Asked Questions
 | 
			
		||||
--------------------------
 | 
			
		||||
Q: I have exported my LSTM model, but its input size seems to be fixed?
 | 
			
		||||
 | 
			
		||||
  The tracer records the shapes of the example inputs. If the model should accept
 | 
			
		||||
  inputs of dynamic shapes, set ``dynamic_axes`` when calling :func:`torch.onnx.export`.
 | 
			
		||||
 | 
			
		||||
Q: How to export models containing loops?
 | 
			
		||||
 | 
			
		||||
  See `Tracing vs Scripting`_.
 | 
			
		||||
 | 
			
		||||
Q: How to export models with primitive type inputs (e.g. int, float)?
 | 
			
		||||
 | 
			
		||||
  Support for primitive numeric type inputs was added in PyTorch 1.9.
 | 
			
		||||
  However, the exporter does not support models with str inputs.
 | 
			
		||||
 | 
			
		||||
Q: Does ONNX support implicit scalar datatype casting?
 | 
			
		||||
 | 
			
		||||
  The ONNX standard does not, but the exporter will try to handle that part.
 | 
			
		||||
  Scalars are exported as constant tensors.
 | 
			
		||||
  The exporter will figure out the right data type for scalars. In rare cases when it is unable
 | 
			
		||||
  to do so, you will need to manually specify the datatype with e.g. `dtype=torch.float32`.
 | 
			
		||||
  If you see any errors, please [create a GitHub issue](https://github.com/pytorch/pytorch/issues).
 | 
			
		||||
 | 
			
		||||
Q: Are lists of Tensors exportable to ONNX?
 | 
			
		||||
 | 
			
		||||
  Yes, for ``opset_version`` >= 11, since ONNX introduced the Sequence type in opset 11.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Contributing / developing
 | 
			
		||||
Contributing / Developing
 | 
			
		||||
-------------------------
 | 
			
		||||
`Developer docs <https://github.com/pytorch/pytorch/wiki/PyTorch-ONNX-exporter>`_.
 | 
			
		||||
 | 
			
		||||
Functions
 | 
			
		||||
---------
 | 
			
		||||
.. autofunction:: export
 | 
			
		||||
.. autofunction:: export_to_pretty_string
 | 
			
		||||
.. autofunction:: register_custom_op_symbolic
 | 
			
		||||
.. autofunction:: unregister_custom_op_symbolic
 | 
			
		||||
.. autofunction:: select_model_mode_for_export
 | 
			
		||||
.. autofunction:: is_in_onnx_export
 | 
			
		||||
.. autofunction:: enable_log
 | 
			
		||||
.. autofunction:: disable_log
 | 
			
		||||
.. autofunction:: torch.onnx.verification.find_mismatch
 | 
			
		||||
The ONNX exporter is a community project and we welcome contributions. We follow the
 | 
			
		||||
`PyTorch guidelines for contributions <https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md>`_, but you might
 | 
			
		||||
also be interested in reading our `development wiki <https://github.com/pytorch/pytorch/wiki/PyTorch-ONNX-exporter>`_.
 | 
			
		||||
 | 
			
		||||
Classes
 | 
			
		||||
-------
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :hidden:
 | 
			
		||||
 | 
			
		||||
.. autosummary::
 | 
			
		||||
    :toctree: generated
 | 
			
		||||
    :nosignatures:
 | 
			
		||||
    :template: classtemplate.rst
 | 
			
		||||
 | 
			
		||||
    JitScalarType
 | 
			
		||||
    torch.onnx.verification.GraphInfo
 | 
			
		||||
    torch.onnx.verification.VerificationOptions
 | 
			
		||||
 | 
			
		||||
Preview: torch.onnx TorchDynamo Exporter
 | 
			
		||||
----------------------------------------
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
  The ONNX exporter for TorchDynamo is under active development and is
 | 
			
		||||
  subject to rapid change.
 | 
			
		||||
 | 
			
		||||
.. autofunction:: torch.onnx.dynamo_export
 | 
			
		||||
.. autofunction:: torch.onnx.enable_fake_mode
 | 
			
		||||
.. autofunction:: torch.onnx.is_onnxrt_backend_supported
 | 
			
		||||
 | 
			
		||||
.. autosummary::
 | 
			
		||||
    :toctree: generated
 | 
			
		||||
    :nosignatures:
 | 
			
		||||
    :template: classtemplate.rst
 | 
			
		||||
 | 
			
		||||
    torch.onnx.DiagnosticOptions
 | 
			
		||||
    torch.onnx.ExportOptions
 | 
			
		||||
    torch.onnx.ExportOutput
 | 
			
		||||
    torch.onnx.ExportOutputSerializer
 | 
			
		||||
    torch.onnx.OnnxExporterError
 | 
			
		||||
    torch.onnx.OnnxRegistry
 | 
			
		||||
    onnx_dynamo
 | 
			
		||||
    onnx_dynamo_onnxruntime_backend
 | 
			
		||||
    onnx_torchscript
 | 
			
		||||
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
torch.onnx diagnostics
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
.. contents:: :local:
 | 
			
		||||
.. automodule:: torch.onnx._internal.diagnostics
 | 
			
		||||
.. currentmodule:: torch.onnx._internal.diagnostics
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
NOTE: This feature is underdevelopment and is subject to change.
 | 
			
		||||
 | 
			
		||||
The goal is to improve the diagnostics to help users debug and improve their model export to ONNX.
 | 
			
		||||
 | 
			
		||||
- The diagnostics are emitted in machine parsable `Static Analysis Results Interchange Format (SARIF) <https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html>`__.
 | 
			
		||||
- A new clearer, structured way to add new and keep track of diagnostic rules.
 | 
			
		||||
- Serve as foundation for more future improvements consuming the diagnostics.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Diagnostic Rules
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :glob:
 | 
			
		||||
 | 
			
		||||
    generated/onnx_diagnostics_rules/*
 | 
			
		||||
							
								
								
									
										156
									
								
								docs/source/onnx_dynamo.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								docs/source/onnx_dynamo.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,156 @@
 | 
			
		||||
TorchDynamo-based ONNX Exporter
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
.. automodule:: torch.onnx
 | 
			
		||||
  :noindex:
 | 
			
		||||
 | 
			
		||||
.. contents:: :local:
 | 
			
		||||
    :depth: 3
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
  The ONNX exporter for TorchDynamo is a rapidly evolving beta technology.
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
The ONNX exporter leverages TorchDynamo engine to hook into Python's frame evaluation API
 | 
			
		||||
and dynamically rewrite its bytecode into an FX Graph.
 | 
			
		||||
The resulting FX Graph is then polished before it is finally translated into an ONNX graph.
 | 
			
		||||
 | 
			
		||||
The main advantage of this approach is that the `FX graph <https://pytorch.org/docs/stable/fx.html>`_ is captured using
 | 
			
		||||
bytecode analysis that preserves the dynamic nature of the model instead of using traditional static tracing techniques.
 | 
			
		||||
 | 
			
		||||
The exporter is designed to be modular and extensible. It is composed of the following components:
 | 
			
		||||
 | 
			
		||||
  - **ONNX Exporter**: :class:`Exporter` main class that orchestrates the export process.
 | 
			
		||||
  - **ONNX Export Options**: :class:`ExportOptions` has a set of options that control the export process.
 | 
			
		||||
  - **ONNX Registry**: :class:`OnnxRegistry` is the registry of ONNX operators and functions.
 | 
			
		||||
  - **FX Graph Extractor**: :class:`FXGraphExtractor` extracts the FX graph from the PyTorch model.
 | 
			
		||||
  - **Fake Mode**: :class:`ONNXFakeContext` is a context manager that enables fake mode for large scale models.
 | 
			
		||||
  - **ONNX Export Output**: :class:`ExportOutput` is the output of the exporter that contains the exported ONNX graph and diagnostics.
 | 
			
		||||
  - **ONNX Export Output Serializer**: :class:`ExportOutputSerializer` serializes the exported model to a file.
 | 
			
		||||
  - **ONNX Diagnostic Options**: :class:`DiagnosticOptions` has a set of options that control the diagnostics emitted by the exporter.
 | 
			
		||||
 | 
			
		||||
Dependencies
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
The ONNX exporter depends on extra Python packages:
 | 
			
		||||
 | 
			
		||||
  - `ONNX <https://onnx.ai>`_
 | 
			
		||||
  - `ONNX Script <https://onnxscript.ai>`_
 | 
			
		||||
 | 
			
		||||
They can be installed through `pip <https://pypi.org/project/pip/>`_:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
  pip install --upgrade onnx onnxscript
 | 
			
		||||
 | 
			
		||||
A simple example
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
See below a demonstration of exporter API in action with a simple Multilayer Perceptron (MLP) as example:
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
  import torch
 | 
			
		||||
 | 
			
		||||
  class MLPModel(nn.Module):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self.fc0 = nn.Linear(8, 8, bias=True)
 | 
			
		||||
        self.fc1 = nn.Linear(8, 4, bias=True)
 | 
			
		||||
        self.fc2 = nn.Linear(4, 2, bias=True)
 | 
			
		||||
        self.fc3 = nn.Linear(2, 2, bias=True)
 | 
			
		||||
 | 
			
		||||
    def forward(self, tensor_x: torch.Tensor):
 | 
			
		||||
        tensor_x = self.fc0(tensor_x)
 | 
			
		||||
        tensor_x = torch.sigmoid(tensor_x)
 | 
			
		||||
        tensor_x = self.fc1(tensor_x)
 | 
			
		||||
        tensor_x = torch.sigmoid(tensor_x)
 | 
			
		||||
        tensor_x = self.fc2(tensor_x)
 | 
			
		||||
        tensor_x = torch.sigmoid(tensor_x)
 | 
			
		||||
        output = self.fc3(tensor_x)
 | 
			
		||||
        return output
 | 
			
		||||
 | 
			
		||||
  model = MLPModel()
 | 
			
		||||
  tensor_x = torch.rand((97, 8), dtype=torch.float32)
 | 
			
		||||
  export_output = torch.onnx.dynamo_export(model, tensor_x)
 | 
			
		||||
 | 
			
		||||
As the code above shows, all you need is to provide :func:`torch.onnx.dynamo_export` with an instance of the model and its input.
 | 
			
		||||
The exporter will then return an instance of :class:`torch.onnx.ExportOutput` that contains the exported ONNX graph along with extra information.
 | 
			
		||||
 | 
			
		||||
The in-memory model available through ``export_output.model_proto`` is an ``onnx.ModelProto`` object in compliance with the `ONNX IR spec <https://github.com/onnx/onnx/blob/main/docs/IR.md>`_.
 | 
			
		||||
The ONNX model may then be serialized into a `Protobuf file <https://protobuf.dev/>`_ using the :meth:`torch.onnx.ExportOutput.save` API.
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
  export_output.save("mlp.onnx")
 | 
			
		||||
 | 
			
		||||
Inspecting the ONNX model using GUI
 | 
			
		||||
-----------------------------------
 | 
			
		||||
 | 
			
		||||
You can view the exported model using `Netron <https://netron.app/>`__.
 | 
			
		||||
 | 
			
		||||
.. image:: _static/img/onnx/onnx_dynamo_mlp_model.png
 | 
			
		||||
    :width: 40%
 | 
			
		||||
    :alt: MLP model as viewed using Netron
 | 
			
		||||
 | 
			
		||||
Note that each layer is represented in a rectangular box with a *f* icon in the top right corner.
 | 
			
		||||
 | 
			
		||||
.. image:: _static/img/onnx/onnx_dynamo_mlp_model_function_highlight.png
 | 
			
		||||
    :width: 40%
 | 
			
		||||
    :alt: ONNX function highlighted on MLP model
 | 
			
		||||
 | 
			
		||||
By expanding it, the function body is shown.
 | 
			
		||||
 | 
			
		||||
.. image:: _static/img/onnx/onnx_dynamo_mlp_model_function_body.png
 | 
			
		||||
    :width: 50%
 | 
			
		||||
    :alt: ONNX function body
 | 
			
		||||
 | 
			
		||||
The function body is a sequence of ONNX operators or other functions.
 | 
			
		||||
 | 
			
		||||
Diagnosing issues with SARIF
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
ONNX diagnostics goes beyond regular logs through the adoption of
 | 
			
		||||
`Static Analysis Results Interchange Format (aka SARIF) <https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html>`__
 | 
			
		||||
to help users debug and improve their model using a GUI, such as
 | 
			
		||||
Visual Studio Code's `SARIF Viewer <https://marketplace.visualstudio.com/items?itemName=MS-SarifVSCode.sarif-viewer>`_.
 | 
			
		||||
 | 
			
		||||
The main advantages are:
 | 
			
		||||
 | 
			
		||||
  - The diagnostics are emitted in machine parseable `Static Analysis Results Interchange Format (SARIF) <https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html>`__.
 | 
			
		||||
  - A new clearer, structured way to add new and keep track of diagnostic rules.
 | 
			
		||||
  - Serve as foundation for more future improvements consuming the diagnostics.
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
   :caption: ONNX Diagnostic SARIF Rules
 | 
			
		||||
   :glob:
 | 
			
		||||
 | 
			
		||||
   generated/onnx_dynamo_diagnostics_rules/*
 | 
			
		||||
 | 
			
		||||
API Reference
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
.. autofunction:: torch.onnx.dynamo_export
 | 
			
		||||
 | 
			
		||||
.. autoclass:: torch.onnx.ExportOptions
 | 
			
		||||
    :members:
 | 
			
		||||
 | 
			
		||||
.. autofunction:: torch.onnx.enable_fake_mode
 | 
			
		||||
 | 
			
		||||
.. autoclass:: torch.onnx.ExportOutput
 | 
			
		||||
    :members:
 | 
			
		||||
 | 
			
		||||
.. autoclass:: torch.onnx.ExportOutputSerializer
 | 
			
		||||
    :members:
 | 
			
		||||
 | 
			
		||||
.. autoclass:: torch.onnx.OnnxExporterError
 | 
			
		||||
    :members:
 | 
			
		||||
 | 
			
		||||
.. autoclass:: torch.onnx.OnnxRegistry
 | 
			
		||||
    :members:
 | 
			
		||||
 | 
			
		||||
.. autoclass:: torch.onnx.DiagnosticOptions
 | 
			
		||||
    :members:
 | 
			
		||||
							
								
								
									
										9
									
								
								docs/source/onnx_dynamo_onnxruntime_backend.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								docs/source/onnx_dynamo_onnxruntime_backend.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
ONNX Backend for TorchDynamo
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
For a quick overview of ``torch.compiler``, see :ref:`torch.compiler_overview`.
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
  The ONNX backend for torch.compile is a rapidly evolving beta technology.
 | 
			
		||||
 | 
			
		||||
.. autofunction:: torch.onnx.is_onnxrt_backend_supported
 | 
			
		||||
							
								
								
									
										719
									
								
								docs/source/onnx_torchscript.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										719
									
								
								docs/source/onnx_torchscript.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,719 @@
 | 
			
		||||
TorchScript-based ONNX Exporter
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
    To export an ONNX model using TorchDynamo instead of TorchScript, see :func:`torch.onnx.dynamo_export`.
 | 
			
		||||
 | 
			
		||||
.. contents:: :local:
 | 
			
		||||
 | 
			
		||||
Example: AlexNet from PyTorch to ONNX
 | 
			
		||||
-------------------------------------
 | 
			
		||||
 | 
			
		||||
Here is a simple script which exports a pretrained AlexNet to an ONNX file named ``alexnet.onnx``.
 | 
			
		||||
The call to ``torch.onnx.export`` runs the model once to trace its execution and then exports the
 | 
			
		||||
traced model to the specified file::
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
    import torchvision
 | 
			
		||||
 | 
			
		||||
    dummy_input = torch.randn(10, 3, 224, 224, device="cuda")
 | 
			
		||||
    model = torchvision.models.alexnet(pretrained=True).cuda()
 | 
			
		||||
 | 
			
		||||
    # Providing input and output names sets the display names for values
 | 
			
		||||
    # within the model's graph. Setting these does not change the semantics
 | 
			
		||||
    # of the graph; it is only for readability.
 | 
			
		||||
    #
 | 
			
		||||
    # The inputs to the network consist of the flat list of inputs (i.e.
 | 
			
		||||
    # the values you would pass to the forward() method) followed by the
 | 
			
		||||
    # flat list of parameters. You can partially specify names, i.e. provide
 | 
			
		||||
    # a list here shorter than the number of inputs to the model, and we will
 | 
			
		||||
    # only set that subset of names, starting from the beginning.
 | 
			
		||||
    input_names = [ "actual_input_1" ] + [ "learned_%d" % i for i in range(16) ]
 | 
			
		||||
    output_names = [ "output1" ]
 | 
			
		||||
 | 
			
		||||
    torch.onnx.export(model, dummy_input, "alexnet.onnx", verbose=True, input_names=input_names, output_names=output_names)
 | 
			
		||||
 | 
			
		||||
The resulting ``alexnet.onnx`` file contains a binary `protocol buffer <https://developers.google.com/protocol-buffers/>`_
 | 
			
		||||
which contains both the network structure and parameters of the model you exported
 | 
			
		||||
(in this case, AlexNet).  The argument ``verbose=True`` causes the
 | 
			
		||||
exporter to print out a human-readable representation of the model::
 | 
			
		||||
 | 
			
		||||
    # These are the inputs and parameters to the network, which have taken on
 | 
			
		||||
    # the names we specified earlier.
 | 
			
		||||
    graph(%actual_input_1 : Float(10, 3, 224, 224)
 | 
			
		||||
          %learned_0 : Float(64, 3, 11, 11)
 | 
			
		||||
          %learned_1 : Float(64)
 | 
			
		||||
          %learned_2 : Float(192, 64, 5, 5)
 | 
			
		||||
          %learned_3 : Float(192)
 | 
			
		||||
          # ---- omitted for brevity ----
 | 
			
		||||
          %learned_14 : Float(1000, 4096)
 | 
			
		||||
          %learned_15 : Float(1000)) {
 | 
			
		||||
      # Every statement consists of some output tensors (and their types),
 | 
			
		||||
      # the operator to be run (with its attributes, e.g., kernels, strides,
 | 
			
		||||
      # etc.), its input tensors (%actual_input_1, %learned_0, %learned_1)
 | 
			
		||||
      %17 : Float(10, 64, 55, 55) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[11, 11], pads=[2, 2, 2, 2], strides=[4, 4]](%actual_input_1, %learned_0, %learned_1), scope: AlexNet/Sequential[features]/Conv2d[0]
 | 
			
		||||
      %18 : Float(10, 64, 55, 55) = onnx::Relu(%17), scope: AlexNet/Sequential[features]/ReLU[1]
 | 
			
		||||
      %19 : Float(10, 64, 27, 27) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%18), scope: AlexNet/Sequential[features]/MaxPool2d[2]
 | 
			
		||||
      # ---- omitted for brevity ----
 | 
			
		||||
      %29 : Float(10, 256, 6, 6) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%28), scope: AlexNet/Sequential[features]/MaxPool2d[12]
 | 
			
		||||
      # Dynamic means that the shape is not known. This may be because of a
 | 
			
		||||
      # limitation of our implementation (which we would like to fix in a
 | 
			
		||||
      # future release) or shapes which are truly dynamic.
 | 
			
		||||
      %30 : Dynamic = onnx::Shape(%29), scope: AlexNet
 | 
			
		||||
      %31 : Dynamic = onnx::Slice[axes=[0], ends=[1], starts=[0]](%30), scope: AlexNet
 | 
			
		||||
      %32 : Long() = onnx::Squeeze[axes=[0]](%31), scope: AlexNet
 | 
			
		||||
      %33 : Long() = onnx::Constant[value={9216}](), scope: AlexNet
 | 
			
		||||
      # ---- omitted for brevity ----
 | 
			
		||||
      %output1 : Float(10, 1000) = onnx::Gemm[alpha=1, beta=1, broadcast=1, transB=1](%45, %learned_14, %learned_15), scope: AlexNet/Sequential[classifier]/Linear[6]
 | 
			
		||||
      return (%output1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
You can also verify the output using the `ONNX <https://github.com/onnx/onnx/>`_ library,
 | 
			
		||||
which you can install using ``pip``::
 | 
			
		||||
 | 
			
		||||
    pip install onnx
 | 
			
		||||
 | 
			
		||||
Then, you can run::
 | 
			
		||||
 | 
			
		||||
    import onnx
 | 
			
		||||
 | 
			
		||||
    # Load the ONNX model
 | 
			
		||||
    model = onnx.load("alexnet.onnx")
 | 
			
		||||
 | 
			
		||||
    # Check that the model is well formed
 | 
			
		||||
    onnx.checker.check_model(model)
 | 
			
		||||
 | 
			
		||||
    # Print a human readable representation of the graph
 | 
			
		||||
    print(onnx.helper.printable_graph(model.graph))
 | 
			
		||||
 | 
			
		||||
You can also run the exported model with one of the many
 | 
			
		||||
`runtimes that support ONNX <https://onnx.ai/supported-tools.html#deployModel>`_.
 | 
			
		||||
For example after installing `ONNX Runtime <https://www.onnxruntime.ai>`_, you can
 | 
			
		||||
load and run the model::
 | 
			
		||||
 | 
			
		||||
    import onnxruntime as ort
 | 
			
		||||
    import numpy as np
 | 
			
		||||
 | 
			
		||||
    ort_session = ort.InferenceSession("alexnet.onnx")
 | 
			
		||||
 | 
			
		||||
    outputs = ort_session.run(
 | 
			
		||||
        None,
 | 
			
		||||
        {"actual_input_1": np.random.randn(10, 3, 224, 224).astype(np.float32)},
 | 
			
		||||
    )
 | 
			
		||||
    print(outputs[0])
 | 
			
		||||
 | 
			
		||||
Here is a more involved `tutorial on exporting a model and running it with ONNX Runtime <https://pytorch.org/tutorials/advanced/super_resolution_with_onnxruntime.html>`_.
 | 
			
		||||
 | 
			
		||||
.. _tracing-vs-scripting:
 | 
			
		||||
 | 
			
		||||
Tracing vs Scripting
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
Internally, :func:`torch.onnx.export()` requires a :class:`torch.jit.ScriptModule` rather than
 | 
			
		||||
a :class:`torch.nn.Module`. If the passed-in model is not already a ``ScriptModule``,
 | 
			
		||||
``export()`` will use *tracing* to convert it to one:
 | 
			
		||||
 | 
			
		||||
.. TODO(justinchuby): Add a word on recommending tracing over scripting for most use cases.
 | 
			
		||||
 | 
			
		||||
* **Tracing**: If ``torch.onnx.export()`` is called with a Module that is not already a
 | 
			
		||||
  ``ScriptModule``, it first does the equivalent of :func:`torch.jit.trace`, which executes the model
 | 
			
		||||
  once with the given ``args`` and records all operations that happen during that execution. This
 | 
			
		||||
  means that if your model is dynamic, e.g., changes behavior depending on input data, the exported
 | 
			
		||||
  model will *not* capture this dynamic behavior.
 | 
			
		||||
  We recommend examining the exported model and making sure the operators look
 | 
			
		||||
  reasonable. Tracing will unroll loops and if statements, exporting a static graph that is exactly
 | 
			
		||||
  the same as the traced run. If you want to export your model with dynamic control flow, you will
 | 
			
		||||
  need to use *scripting*.
 | 
			
		||||
 | 
			
		||||
* **Scripting**: Compiling a model via scripting preserves dynamic control flow and is valid for inputs
 | 
			
		||||
  of different sizes. To use scripting:
 | 
			
		||||
 | 
			
		||||
  * Use :func:`torch.jit.script` to produce a ``ScriptModule``.
 | 
			
		||||
  * Call ``torch.onnx.export()`` with the ``ScriptModule`` as the model. The ``args`` are still required,
 | 
			
		||||
    but they will be used internally only to produce example outputs, so that the types and shapes of the
 | 
			
		||||
    outputs can be captured. No tracing will be performed.
 | 
			
		||||
 | 
			
		||||
See `Introduction to TorchScript <https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html>`_
 | 
			
		||||
and `TorchScript <jit.html>`_ for more details, including how to compose tracing and scripting to suit the
 | 
			
		||||
particular requirements of different models.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Avoiding Pitfalls
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Avoid NumPy and built-in Python types
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
PyTorch models can be written using NumPy or Python types and functions, but
 | 
			
		||||
during :ref:`tracing<tracing-vs-scripting>`, any variables of NumPy or Python
 | 
			
		||||
types (rather than torch.Tensor) are converted to constants, which will produce
 | 
			
		||||
the wrong result if those values should change depending on the inputs.
 | 
			
		||||
 | 
			
		||||
For example, rather than using numpy functions on numpy.ndarrays: ::
 | 
			
		||||
 | 
			
		||||
    # Bad! Will be replaced with constants during tracing.
 | 
			
		||||
    x, y = np.random.rand(1, 2), np.random.rand(1, 2)
 | 
			
		||||
    np.concatenate((x, y), axis=1)
 | 
			
		||||
 | 
			
		||||
Use torch operators on torch.Tensors: ::
 | 
			
		||||
 | 
			
		||||
    # Good! Tensor operations will be captured during tracing.
 | 
			
		||||
    x, y = torch.randn(1, 2), torch.randn(1, 2)
 | 
			
		||||
    torch.cat((x, y), dim=1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
And rather than use :func:`torch.Tensor.item` (which converts a Tensor to a Python
 | 
			
		||||
built-in number): ::
 | 
			
		||||
 | 
			
		||||
    # Bad! y.item() will be replaced with a constant during tracing.
 | 
			
		||||
    def forward(self, x, y):
 | 
			
		||||
        return x.reshape(y.item(), -1)
 | 
			
		||||
 | 
			
		||||
Use torch's support for implicit casting of single-element tensors: ::
 | 
			
		||||
 | 
			
		||||
    # Good! y will be preserved as a variable during tracing.
 | 
			
		||||
    def forward(self, x, y):
 | 
			
		||||
        return x.reshape(y, -1)
 | 
			
		||||
 | 
			
		||||
Avoid Tensor.data
 | 
			
		||||
^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Using the Tensor.data field can produce an incorrect trace and therefore an incorrect ONNX graph.
 | 
			
		||||
Use :func:`torch.Tensor.detach` instead. (Work is ongoing to
 | 
			
		||||
`remove Tensor.data entirely <https://github.com/pytorch/pytorch/issues/30987>`_).
 | 
			
		||||
 | 
			
		||||
Avoid in-place operations when using tensor.shape in tracing mode
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
In tracing mode, shapes obtained from ``tensor.shape`` are traced as tensors,
 | 
			
		||||
and share the same memory. This might cause a mismatch the final output values.
 | 
			
		||||
As a workaround, avoid the use of inplace operations in these scenarios.
 | 
			
		||||
For example, in the model::
 | 
			
		||||
 | 
			
		||||
    class Model(torch.nn.Module):
 | 
			
		||||
      def forward(self, states):
 | 
			
		||||
          batch_size, seq_length = states.shape[:2]
 | 
			
		||||
          real_seq_length = seq_length
 | 
			
		||||
          real_seq_length += 2
 | 
			
		||||
          return real_seq_length + seq_length
 | 
			
		||||
 | 
			
		||||
``real_seq_length`` and ``seq_length`` share the same memory in tracing mode.
 | 
			
		||||
This could be avoided by rewriting the inplace operation::
 | 
			
		||||
 | 
			
		||||
    real_seq_length = real_seq_length + 2
 | 
			
		||||
 | 
			
		||||
Limitations
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
Types
 | 
			
		||||
^^^^^
 | 
			
		||||
 | 
			
		||||
* Only :class:`torch.Tensors`, numeric types that can be trivially converted to torch.Tensors (e.g. float, int),
 | 
			
		||||
  and tuples and lists of those types are supported as model inputs or outputs. Dict and str inputs and
 | 
			
		||||
  outputs are accepted in :ref:`tracing<tracing-vs-scripting>` mode, but:
 | 
			
		||||
 | 
			
		||||
  * Any computation that depends on the value of a dict or a str input **will be replaced with the
 | 
			
		||||
    constant value** seen during the one traced execution.
 | 
			
		||||
  * Any output that is a dict will be silently replaced with a **flattened sequence of its values
 | 
			
		||||
    (keys will be removed)**. E.g. ``{"foo": 1, "bar": 2}`` becomes ``(1, 2)``.
 | 
			
		||||
  * Any output that is a str will be silently removed.
 | 
			
		||||
 | 
			
		||||
* Certain operations involving tuples and lists are not supported in
 | 
			
		||||
  :ref:`scripting<tracing-vs-scripting>` mode due to limited support in ONNX for nested sequences.
 | 
			
		||||
  In particular appending a tuple to a list is not supported. In tracing mode, the nested sequences
 | 
			
		||||
  will be flattened automatically during the tracing.
 | 
			
		||||
 | 
			
		||||
Differences in Operator Implementations
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Due to differences in implementations of operators, running the exported model on different runtimes
 | 
			
		||||
may produce different results from each other or from PyTorch. Normally these differences are
 | 
			
		||||
numerically small, so this should only be a concern if your application is sensitive to these
 | 
			
		||||
small differences.
 | 
			
		||||
 | 
			
		||||
.. _tensor-indexing:
 | 
			
		||||
 | 
			
		||||
Unsupported Tensor Indexing Patterns
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Tensor indexing patterns that cannot be exported are listed below.
 | 
			
		||||
If you are experiencing issues exporting a model that does not include any of
 | 
			
		||||
the unsupported patterns below, please double check that you are exporting with
 | 
			
		||||
the latest ``opset_version``.
 | 
			
		||||
 | 
			
		||||
Reads / Gets
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When indexing into a tensor for reading, the following patterns are not supported: ::
 | 
			
		||||
 | 
			
		||||
  # Tensor indices that includes negative values.
 | 
			
		||||
  data[torch.tensor([[1, 2], [2, -3]]), torch.tensor([-2, 3])]
 | 
			
		||||
  # Workarounds: use positive index values.
 | 
			
		||||
 | 
			
		||||
Writes / Sets
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When indexing into a Tensor for writing, the following patterns are not supported: ::
 | 
			
		||||
 | 
			
		||||
  # Multiple tensor indices if any has rank >= 2
 | 
			
		||||
  data[torch.tensor([[1, 2], [2, 3]]), torch.tensor([2, 3])] = new_data
 | 
			
		||||
  # Workarounds: use single tensor index with rank >= 2,
 | 
			
		||||
  #              or multiple consecutive tensor indices with rank == 1.
 | 
			
		||||
 | 
			
		||||
  # Multiple tensor indices that are not consecutive
 | 
			
		||||
  data[torch.tensor([2, 3]), :, torch.tensor([1, 2])] = new_data
 | 
			
		||||
  # Workarounds: transpose `data` such that tensor indices are consecutive.
 | 
			
		||||
 | 
			
		||||
  # Tensor indices that includes negative values.
 | 
			
		||||
  data[torch.tensor([1, -2]), torch.tensor([-2, 3])] = new_data
 | 
			
		||||
  # Workarounds: use positive index values.
 | 
			
		||||
 | 
			
		||||
  # Implicit broadcasting required for new_data.
 | 
			
		||||
  data[torch.tensor([[0, 2], [1, 1]]), 1:3] = new_data
 | 
			
		||||
  # Workarounds: expand new_data explicitly.
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   data shape: [3, 4, 5]
 | 
			
		||||
  #   new_data shape: [5]
 | 
			
		||||
  #   expected new_data shape after broadcasting: [2, 2, 2, 5]
 | 
			
		||||
 | 
			
		||||
Adding support for operators
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
When exporting a model that includes unsupported operators, you'll see an error message like:
 | 
			
		||||
 | 
			
		||||
.. code-block:: text
 | 
			
		||||
 | 
			
		||||
    RuntimeError: ONNX export failed: Couldn't export operator foo
 | 
			
		||||
 | 
			
		||||
When that happens, there are a few things you can do:
 | 
			
		||||
 | 
			
		||||
#. Change the model to not use that operator.
 | 
			
		||||
#. Create a symbolic function to convert the operator and register it as a custom symbolic function.
 | 
			
		||||
#. Contribute to PyTorch to add the same symbolic function to :mod:`torch.onnx` itself.
 | 
			
		||||
 | 
			
		||||
If you decided to implement a symbolic function (we hope you will contribute it back to PyTorch!), here is how you can get started:
 | 
			
		||||
 | 
			
		||||
ONNX exporter internals
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
A "symbolic function" is a function that decomposes a PyTorch operator into a
 | 
			
		||||
composition of a series of ONNX operators.
 | 
			
		||||
 | 
			
		||||
During export, each node (which contains a PyTorch operator) in the TorchScript
 | 
			
		||||
graph is visited by the exporter in topological order.
 | 
			
		||||
Upon visiting a node, the exporter looks for a registered symbolic functions for
 | 
			
		||||
that operator. Symbolic functions are implemented in Python. A symbolic function for
 | 
			
		||||
an op named ``foo`` would look something like::
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def foo(
 | 
			
		||||
      g,
 | 
			
		||||
      input_0: torch._C.Value,
 | 
			
		||||
      input_1: torch._C.Value) -> Union[None, torch._C.Value, List[torch._C.Value]]:
 | 
			
		||||
      """
 | 
			
		||||
      Adds the ONNX operations representing this PyTorch function by updating the
 | 
			
		||||
      graph g with `g.op()` calls.
 | 
			
		||||
 | 
			
		||||
      Args:
 | 
			
		||||
        g (Graph): graph to write the ONNX representation into.
 | 
			
		||||
        input_0 (Value): value representing the variables which contain
 | 
			
		||||
            the first input for this operator.
 | 
			
		||||
        input_1 (Value): value representing the variables which contain
 | 
			
		||||
            the second input for this operator.
 | 
			
		||||
 | 
			
		||||
      Returns:
 | 
			
		||||
        A Value or List of Values specifying the ONNX nodes that compute something
 | 
			
		||||
        equivalent to the original PyTorch operator with the given inputs.
 | 
			
		||||
 | 
			
		||||
        None if it cannot be converted to ONNX.
 | 
			
		||||
      """
 | 
			
		||||
      ...
 | 
			
		||||
 | 
			
		||||
The ``torch._C`` types are Python wrappers around the types defined in C++ in
 | 
			
		||||
`ir.h <https://github.com/pytorch/pytorch/blob/main/torch/csrc/jit/ir/ir.h>`_.
 | 
			
		||||
 | 
			
		||||
The process for adding a symbolic function depends on the type of operator.
 | 
			
		||||
 | 
			
		||||
.. _adding-support-aten:
 | 
			
		||||
 | 
			
		||||
ATen operators
 | 
			
		||||
^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
`ATen <https://pytorch.org/cppdocs/#aten>`_ is PyTorch's built-in tensor library.
 | 
			
		||||
If the operator is an ATen operator (shows up in the TorchScript graph with the prefix
 | 
			
		||||
``aten::``), make sure it is not supported already.
 | 
			
		||||
 | 
			
		||||
List of supported operators
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Visit the auto generated :doc:`list of supported TorchScript operators <../onnx_torchscript_supported_aten_ops>`
 | 
			
		||||
for details on which operator are supported in each ``opset_version``.
 | 
			
		||||
 | 
			
		||||
Adding support for an aten or quantized operator
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If the operator is not in the list above:
 | 
			
		||||
 | 
			
		||||
* Define the symbolic function in ``torch/onnx/symbolic_opset<version>.py``, for example
 | 
			
		||||
  `torch/onnx/symbolic_opset9.py <https://github.com/pytorch/pytorch/blob/main/torch/onnx/symbolic_opset9.py>`_.
 | 
			
		||||
  Make sure the function has the same name as the ATen function, which may be declared in
 | 
			
		||||
  ``torch/_C/_VariableFunctions.pyi`` or ``torch/nn/functional.pyi`` (these files are generated at
 | 
			
		||||
  build time, so will not appear in your checkout until you build PyTorch).
 | 
			
		||||
* By default, the first arg is the ONNX graph.
 | 
			
		||||
  Other arg names must EXACTLY match the names in the ``.pyi`` file,
 | 
			
		||||
  because dispatch is done with keyword arguments.
 | 
			
		||||
* In the symbolic function, if the operator is in the
 | 
			
		||||
  `ONNX standard operator set <https://github.com/onnx/onnx/blob/master/docs/Operators.md>`_,
 | 
			
		||||
  we only need to create a node to represent the ONNX operator in the graph.
 | 
			
		||||
  If not, we can compose several standard operators that have the
 | 
			
		||||
  equivalent semantics to the ATen operator.
 | 
			
		||||
 | 
			
		||||
Here is an example of handling missing symbolic function for the ``ELU`` operator.
 | 
			
		||||
 | 
			
		||||
If we run the following code::
 | 
			
		||||
 | 
			
		||||
    print(
 | 
			
		||||
        torch.jit.trace(
 | 
			
		||||
            torch.nn.ELU(), # module
 | 
			
		||||
            torch.ones(1)   # example input
 | 
			
		||||
        ).graph
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
We see something like::
 | 
			
		||||
 | 
			
		||||
  graph(%self : __torch__.torch.nn.modules.activation.___torch_mangle_0.ELU,
 | 
			
		||||
        %input : Float(1, strides=[1], requires_grad=0, device=cpu)):
 | 
			
		||||
    %4 : float = prim::Constant[value=1.]()
 | 
			
		||||
    %5 : int = prim::Constant[value=1]()
 | 
			
		||||
    %6 : int = prim::Constant[value=1]()
 | 
			
		||||
    %7 : Float(1, strides=[1], requires_grad=0, device=cpu) = aten::elu(%input, %4, %5, %6)
 | 
			
		||||
    return (%7)
 | 
			
		||||
 | 
			
		||||
Since we see ``aten::elu`` in the graph, we know this is an ATen operator.
 | 
			
		||||
 | 
			
		||||
We check the `ONNX operator list <https://github.com/onnx/onnx/blob/master/docs/Operators.md>`_,
 | 
			
		||||
and confirm that ``Elu`` is standardized in ONNX.
 | 
			
		||||
 | 
			
		||||
We find a signature for ``elu`` in ``torch/nn/functional.pyi``::
 | 
			
		||||
 | 
			
		||||
    def elu(input: Tensor, alpha: float = ..., inplace: bool = ...) -> Tensor: ...
 | 
			
		||||
 | 
			
		||||
We add the following lines to ``symbolic_opset9.py``::
 | 
			
		||||
 | 
			
		||||
    def elu(g, input: torch.Value, alpha: torch.Value, inplace: bool = False):
 | 
			
		||||
        return g.op("Elu", input, alpha_f=alpha)
 | 
			
		||||
 | 
			
		||||
Now PyTorch is able to export models containing the ``aten::elu`` operator!
 | 
			
		||||
 | 
			
		||||
See the ``torch/onnx/symbolic_opset*.py`` files for more examples.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
torch.autograd.Functions
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
If the operator is a sub-class of :class:`torch.autograd.Function`, there are three ways
 | 
			
		||||
to export it.
 | 
			
		||||
 | 
			
		||||
Static Symbolic Method
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can add a static method named ``symbolic`` to your function class. It should return
 | 
			
		||||
ONNX operators that represent the function's behavior in ONNX. For example::
 | 
			
		||||
 | 
			
		||||
    class MyRelu(torch.autograd.Function):
 | 
			
		||||
        @staticmethod
 | 
			
		||||
        def forward(ctx, input: torch.Tensor) -> torch.Tensor:
 | 
			
		||||
            ctx.save_for_backward(input)
 | 
			
		||||
            return input.clamp(min=0)
 | 
			
		||||
 | 
			
		||||
        @staticmethod
 | 
			
		||||
        def symbolic(g: torch.Graph, input: torch.Value) -> torch.Value:
 | 
			
		||||
            return g.op("Clip", input, g.op("Constant", value_t=torch.tensor(0, dtype=torch.float)))
 | 
			
		||||
 | 
			
		||||
.. FIXME(justinchuby): PythonOps are too complicated and the example below
 | 
			
		||||
..  uses private methods we do not expose. We are looking to
 | 
			
		||||
..  improve the experience. Since SymbolicContext is deprecated, we think
 | 
			
		||||
..  defining a symbolic staticmethod is a better way to go for now.
 | 
			
		||||
 | 
			
		||||
.. PythonOp Symbolic
 | 
			
		||||
.. ~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
.. Alternatively, you can register a custom symbolic function.
 | 
			
		||||
.. This gives the symbolic function access to more info through the
 | 
			
		||||
.. ``torch.onnx.SymbolicContext`` object, which gets passed in as the first
 | 
			
		||||
.. argument (before the ``Graph`` object).
 | 
			
		||||
 | 
			
		||||
.. All autograd ``Function``\ s appear in the TorchScript graph as ``prim::PythonOp`` nodes.
 | 
			
		||||
.. In order to differentiate between different ``Function`` subclasses, the
 | 
			
		||||
.. symbolic function should use the ``name`` kwarg which gets set to the name of the class.
 | 
			
		||||
 | 
			
		||||
.. Custom symbolic functions should add type and shape information by calling ``setType(...)``
 | 
			
		||||
.. on Value objects before returning them (implemented in C++ by
 | 
			
		||||
.. . ``torch::jit::Value::setType``). This is not required, but it can help the exporter's
 | 
			
		||||
.. shape and type inference for down-stream nodes. For a non-trivial example of ``setType``, see
 | 
			
		||||
.. ``test_aten_embedding_2`` in
 | 
			
		||||
.. `test_operators.py <https://github.com/pytorch/pytorch/blob/main/test/onnx/test_operators.py>`_.
 | 
			
		||||
 | 
			
		||||
.. The example below shows how you can access ``requires_grad`` via the ``Node`` object:
 | 
			
		||||
 | 
			
		||||
..     class MyClip(torch.autograd.Function):
 | 
			
		||||
..         @staticmethod
 | 
			
		||||
..         def forward(ctx, input, min):
 | 
			
		||||
..             ctx.save_for_backward(input)
 | 
			
		||||
..             return input.clamp(min=min)
 | 
			
		||||
 | 
			
		||||
..     class MyRelu(torch.autograd.Function):
 | 
			
		||||
..         @staticmethod
 | 
			
		||||
..         def forward(ctx, input):
 | 
			
		||||
..             ctx.save_for_backward(input)
 | 
			
		||||
..             return input.clamp(min=0)
 | 
			
		||||
 | 
			
		||||
..     def symbolic_python_op(g: "GraphContext", *args, **kwargs):
 | 
			
		||||
..         n = ctx.cur_node
 | 
			
		||||
..         print("original node: ", n)
 | 
			
		||||
..         for i, out in enumerate(n.outputs()):
 | 
			
		||||
..             print("original output {}: {}, requires grad: {}".format(i, out, out.requiresGrad()))
 | 
			
		||||
..         import torch.onnx.symbolic_helper as sym_helper
 | 
			
		||||
..         for i, arg in enumerate(args):
 | 
			
		||||
..             requires_grad = arg.requiresGrad() if sym_helper._is_value(arg) else False
 | 
			
		||||
..             print("arg {}: {}, requires grad: {}".format(i, arg, requires_grad))
 | 
			
		||||
 | 
			
		||||
..         name = kwargs["name"]
 | 
			
		||||
..         ret = None
 | 
			
		||||
..         if name == "MyClip":
 | 
			
		||||
..             ret = g.op("Clip", args[0], args[1])
 | 
			
		||||
..         elif name == "MyRelu":
 | 
			
		||||
..             ret = g.op("Relu", args[0])
 | 
			
		||||
..         else:
 | 
			
		||||
..             # Logs a warning and returns None
 | 
			
		||||
..             return _unimplemented("prim::PythonOp", "unknown node kind: " + name)
 | 
			
		||||
..         # Copy type and shape from original node.
 | 
			
		||||
..         ret.setType(n.type())
 | 
			
		||||
..         return ret
 | 
			
		||||
 | 
			
		||||
..     from torch.onnx import register_custom_op_symbolic
 | 
			
		||||
.. .     register_custom_op_symbolic("prim::PythonOp", symbolic_python_op, 1)
 | 
			
		||||
 | 
			
		||||
Inline Autograd Function
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
In cases where a static symbolic method is not provided for its subsequent :class:`torch.autograd.Function` or
 | 
			
		||||
where a function to register ``prim::PythonOp`` as custom symbolic functions is not provided,
 | 
			
		||||
:func:`torch.onnx.export` tries to inline the graph that corresponds to that :class:`torch.autograd.Function` such that
 | 
			
		||||
this function is broken down into individual operators that were used within the function.
 | 
			
		||||
The export should be successful as long as these individual operators are supported. For example::
 | 
			
		||||
 | 
			
		||||
    class MyLogExp(torch.autograd.Function):
 | 
			
		||||
        @staticmethod
 | 
			
		||||
        def forward(ctx, input: torch.Tensor) -> torch.Tensor:
 | 
			
		||||
            ctx.save_for_backward(input)
 | 
			
		||||
            h = input.exp()
 | 
			
		||||
            return h.log().log()
 | 
			
		||||
 | 
			
		||||
There is no static symbolic method present for this model, yet it is exported as follows::
 | 
			
		||||
 | 
			
		||||
    graph(%input : Float(1, strides=[1], requires_grad=0, device=cpu)):
 | 
			
		||||
        %1 : float = onnx::Exp[](%input)
 | 
			
		||||
        %2 : float = onnx::Log[](%1)
 | 
			
		||||
        %3 : float = onnx::Log[](%2)
 | 
			
		||||
        return (%3)
 | 
			
		||||
 | 
			
		||||
If you need to avoid inlining of :class:`torch.autograd.Function`, you should export models with
 | 
			
		||||
``operator_export_type`` set to ``ONNX_FALLTHROUGH`` or ``ONNX_ATEN_FALLBACK``.
 | 
			
		||||
 | 
			
		||||
Custom operators
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
You can export your model with custom operators that includes a combination of many standard ONNX ops,
 | 
			
		||||
or are driven by self-defined C++ backend.
 | 
			
		||||
 | 
			
		||||
ONNX-script functions
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If an operator is not a standard ONNX op, but can be composed of multiple existing ONNX ops, you can utilize
 | 
			
		||||
`ONNX-script <https://github.com/microsoft/onnx-script>`_ to create an external ONNX function to support the operator.
 | 
			
		||||
You can export it by following this example::
 | 
			
		||||
 | 
			
		||||
    import onnxscript
 | 
			
		||||
    # There are three opset version needed to be aligned
 | 
			
		||||
    # This is (1) the opset version in ONNX function
 | 
			
		||||
    from onnxscript.onnx_opset import opset15 as op
 | 
			
		||||
    opset_version = 15
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(1, 2, 3, 4, requires_grad=True)
 | 
			
		||||
    model = torch.nn.SELU()
 | 
			
		||||
 | 
			
		||||
    custom_opset = onnxscript.values.Opset(domain="onnx-script", version=1)
 | 
			
		||||
 | 
			
		||||
    @onnxscript.script(custom_opset)
 | 
			
		||||
    def Selu(X):
 | 
			
		||||
        alpha = 1.67326  # auto wrapped as Constants
 | 
			
		||||
        gamma = 1.0507
 | 
			
		||||
        alphaX = op.CastLike(alpha, X)
 | 
			
		||||
        gammaX = op.CastLike(gamma, X)
 | 
			
		||||
        neg = gammaX * (alphaX * op.Exp(X) - alphaX)
 | 
			
		||||
        pos = gammaX * X
 | 
			
		||||
        zero = op.CastLike(0, X)
 | 
			
		||||
        return op.Where(X <= zero, neg, pos)
 | 
			
		||||
 | 
			
		||||
    # setType API provides shape/type to ONNX shape/type inference
 | 
			
		||||
    def custom_selu(g: jit_utils.GraphContext, X):
 | 
			
		||||
        return g.onnxscript_op(Selu, X).setType(X.type())
 | 
			
		||||
 | 
			
		||||
    # Register custom symbolic function
 | 
			
		||||
    # There are three opset version needed to be aligned
 | 
			
		||||
    # This is (2) the opset version in registry
 | 
			
		||||
    torch.onnx.register_custom_op_symbolic(
 | 
			
		||||
        symbolic_name="aten::selu",
 | 
			
		||||
        symbolic_fn=custom_selu,
 | 
			
		||||
        opset_version=opset_version,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # There are three opset version needed to be aligned
 | 
			
		||||
    # This is (2) the opset version in exporter
 | 
			
		||||
    torch.onnx.export(
 | 
			
		||||
        model,
 | 
			
		||||
        x,
 | 
			
		||||
        "model.onnx",
 | 
			
		||||
        opset_version=opset_version,
 | 
			
		||||
        # only needed if you want to specify an opset version > 1.
 | 
			
		||||
        custom_opsets={"onnx-script": 2}
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
The example above exports it as a custom operator in the "onnx-script" opset.
 | 
			
		||||
When exporting a custom operator, you can specify the custom domain version using the
 | 
			
		||||
``custom_opsets`` dictionary at export. If not specified, the custom opset version defaults to 1.
 | 
			
		||||
 | 
			
		||||
NOTE: Be careful to align the opset version mentioned in the above example, and make sure they are consumed in exporter step.
 | 
			
		||||
The example usage of how to write a onnx-script function is a beta version in terms of the active development on onnx-script.
 | 
			
		||||
Please follow the latest `ONNX-script <https://github.com/microsoft/onnx-script>`_
 | 
			
		||||
 | 
			
		||||
C++ Operators
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If a model uses a custom operator implemented in C++ as described in
 | 
			
		||||
`Extending TorchScript with Custom C++ Operators <https://pytorch.org/tutorials/advanced/torch_script_custom_ops.html>`_,
 | 
			
		||||
you can export it by following this example::
 | 
			
		||||
 | 
			
		||||
    from torch.onnx import symbolic_helper
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Define custom symbolic function
 | 
			
		||||
    @symbolic_helper.parse_args("v", "v", "f", "i")
 | 
			
		||||
    def symbolic_foo_forward(g, input1, input2, attr1, attr2):
 | 
			
		||||
        return g.op("custom_domain::Foo", input1, input2, attr1_f=attr1, attr2_i=attr2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Register custom symbolic function
 | 
			
		||||
    torch.onnx.register_custom_op_symbolic("custom_ops::foo_forward", symbolic_foo_forward, 9)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    class FooModel(torch.nn.Module):
 | 
			
		||||
        def __init__(self, attr1, attr2):
 | 
			
		||||
            super().__init__()
 | 
			
		||||
            self.attr1 = attr1
 | 
			
		||||
            self.attr2 = attr2
 | 
			
		||||
 | 
			
		||||
        def forward(self, input1, input2):
 | 
			
		||||
            # Calling custom op
 | 
			
		||||
            return torch.ops.custom_ops.foo_forward(input1, input2, self.attr1, self.attr2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    model = FooModel(attr1, attr2)
 | 
			
		||||
    torch.onnx.export(
 | 
			
		||||
        model,
 | 
			
		||||
        (example_input1, example_input1),
 | 
			
		||||
        "model.onnx",
 | 
			
		||||
        # only needed if you want to specify an opset version > 1.
 | 
			
		||||
        custom_opsets={"custom_domain": 2}
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
The example above exports it as a custom operator in the "custom_domain" opset.
 | 
			
		||||
When exporting a custom operator, you can specify the custom domain version using the
 | 
			
		||||
``custom_opsets`` dictionary at export. If not specified, the custom opset version defaults to 1.
 | 
			
		||||
 | 
			
		||||
The runtime that consumes the model needs to support the custom op. See
 | 
			
		||||
`Caffe2 custom ops <https://caffe2.ai/docs/custom-operators.html>`_,
 | 
			
		||||
`ONNX Runtime custom ops <https://onnxruntime.ai/docs/reference/operators/add-custom-op.html>`_,
 | 
			
		||||
or your runtime of choice's documentation.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Discovering all unconvertible ATen ops at once
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
When export fails due to an unconvertible ATen op, there may in fact be more
 | 
			
		||||
than one such op but the error message only mentions the first. To discover
 | 
			
		||||
all of the unconvertible ops in one go you can::
 | 
			
		||||
 | 
			
		||||
    # prepare model, args, opset_version
 | 
			
		||||
    ...
 | 
			
		||||
 | 
			
		||||
    torch_script_graph, unconvertible_ops = torch.onnx.utils.unconvertible_ops(
 | 
			
		||||
        model, args, opset_version=opset_version
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    print(set(unconvertible_ops))
 | 
			
		||||
 | 
			
		||||
The set is approximated because some ops may be removed during the conversion
 | 
			
		||||
process and don't need to be converted. Some other ops may have partial support
 | 
			
		||||
that will fail conversion with particular inputs, but this should give you a
 | 
			
		||||
general idea of what ops are not supported. Please feel free to open GitHub Issues
 | 
			
		||||
for op support requests.
 | 
			
		||||
 | 
			
		||||
Frequently Asked Questions
 | 
			
		||||
--------------------------
 | 
			
		||||
Q: I have exported my LSTM model, but its input size seems to be fixed?
 | 
			
		||||
 | 
			
		||||
  The tracer records the shapes of the example inputs. If the model should accept
 | 
			
		||||
  inputs of dynamic shapes, set ``dynamic_axes`` when calling :func:`torch.onnx.export`.
 | 
			
		||||
 | 
			
		||||
Q: How to export models containing loops?
 | 
			
		||||
 | 
			
		||||
  See `Tracing vs Scripting`_.
 | 
			
		||||
 | 
			
		||||
Q: How to export models with primitive type inputs (e.g. int, float)?
 | 
			
		||||
 | 
			
		||||
  Support for primitive numeric type inputs was added in PyTorch 1.9.
 | 
			
		||||
  However, the exporter does not support models with str inputs.
 | 
			
		||||
 | 
			
		||||
Q: Does ONNX support implicit scalar datatype casting?
 | 
			
		||||
 | 
			
		||||
  The ONNX standard does not, but the exporter will try to handle that part.
 | 
			
		||||
  Scalars are exported as constant tensors.
 | 
			
		||||
  The exporter will figure out the right data type for scalars. In rare cases when it is unable
 | 
			
		||||
  to do so, you will need to manually specify the datatype with e.g. `dtype=torch.float32`.
 | 
			
		||||
  If you see any errors, please [create a GitHub issue](https://github.com/pytorch/pytorch/issues).
 | 
			
		||||
 | 
			
		||||
Q: Are lists of Tensors exportable to ONNX?
 | 
			
		||||
 | 
			
		||||
  Yes, for ``opset_version`` >= 11, since ONNX introduced the Sequence type in opset 11.
 | 
			
		||||
 | 
			
		||||
Python API
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
.. automodule:: torch.onnx
 | 
			
		||||
 | 
			
		||||
Functions
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
.. autofunction:: export
 | 
			
		||||
.. autofunction:: export_to_pretty_string
 | 
			
		||||
.. autofunction:: register_custom_op_symbolic
 | 
			
		||||
.. autofunction:: unregister_custom_op_symbolic
 | 
			
		||||
.. autofunction:: select_model_mode_for_export
 | 
			
		||||
.. autofunction:: is_in_onnx_export
 | 
			
		||||
.. autofunction:: enable_log
 | 
			
		||||
.. autofunction:: disable_log
 | 
			
		||||
.. autofunction:: torch.onnx.verification.find_mismatch
 | 
			
		||||
 | 
			
		||||
Classes
 | 
			
		||||
^^^^^^^
 | 
			
		||||
 | 
			
		||||
.. autosummary::
 | 
			
		||||
    :toctree: generated
 | 
			
		||||
    :nosignatures:
 | 
			
		||||
    :template: classtemplate.rst
 | 
			
		||||
 | 
			
		||||
    JitScalarType
 | 
			
		||||
    torch.onnx.verification.GraphInfo
 | 
			
		||||
    torch.onnx.verification.VerificationOptions
 | 
			
		||||
@ -5,7 +5,7 @@ ONNX supported TorchScript operators
 | 
			
		||||
 | 
			
		||||
.. This file is automatically generated during the documentation build
 | 
			
		||||
.. by cross referencing ONNX operator symbolics with TorchScript operators via
 | 
			
		||||
.. ``docs/source/scripts/build_onnx_supported_aten_op_csv_table.py``.
 | 
			
		||||
.. ``docs/source/scripts/build_onnx_torchscript_supported_aten_op_csv_table.py``.
 | 
			
		||||
.. Do not modify directly and instead `rebuild the docs <https://github.com/pytorch/pytorch#building-the-documentation>`_.
 | 
			
		||||
 | 
			
		||||
This page lists the TorchScript operators that are supported/unsupported by ONNX export.
 | 
			
		||||
@ -119,7 +119,9 @@ def generate_index_rst(example_cases, tag_to_modules, support_level_to_modules):
 | 
			
		||||
        blurb = file.read()
 | 
			
		||||
 | 
			
		||||
    # Generate contents of the .rst file
 | 
			
		||||
    doc_contents = f"""ExportDB
 | 
			
		||||
    doc_contents = f""".. _torch.export_db:
 | 
			
		||||
 | 
			
		||||
ExportDB
 | 
			
		||||
========
 | 
			
		||||
 | 
			
		||||
{blurb}
 | 
			
		||||
 | 
			
		||||
@ -575,6 +575,7 @@ Tensor class reference
 | 
			
		||||
    Tensor.reciprocal_
 | 
			
		||||
    Tensor.record_stream
 | 
			
		||||
    Tensor.register_hook
 | 
			
		||||
    Tensor.register_post_accumulate_grad_hook
 | 
			
		||||
    Tensor.remainder
 | 
			
		||||
    Tensor.remainder_
 | 
			
		||||
    Tensor.renorm
 | 
			
		||||
 | 
			
		||||
@ -54,6 +54,10 @@ Some of the most commonly used backends include:
 | 
			
		||||
     - Uses the TorchInductor backend. `Read more <https://dev-discuss.pytorch.org/t/torchinductor-a-pytorch-native-compiler-with-define-by-run-ir-and-symbolic-shapes/747>`__
 | 
			
		||||
   * - ``torch.compile(m, backend="cudagraphs")``
 | 
			
		||||
     - CUDA graphs with AOT Autograd. `Read more <https://github.com/pytorch/torchdynamo/pull/757>`__
 | 
			
		||||
   * - ``torch.compile(m, backend="ipex")``
 | 
			
		||||
     - Uses IPEX on CPU. `Read more <https://github.com/intel/intel-extension-for-pytorch>`__
 | 
			
		||||
   * - ``torch.compile(m, backend="onnxrt")``
 | 
			
		||||
     - Uses ONNX Runtime for training on CPU/GPU. :doc:`Read more <onnx_dynamo_onnxruntime_backend>`
 | 
			
		||||
 | 
			
		||||
**Inference-only backends**
 | 
			
		||||
 | 
			
		||||
@ -63,10 +67,8 @@ Some of the most commonly used backends include:
 | 
			
		||||
 | 
			
		||||
   * - Backend
 | 
			
		||||
     - Description
 | 
			
		||||
   * - ``torch.compile(m, backend="onnxrt")``
 | 
			
		||||
     - Uses ONNXRT for inference on CPU/GPU. `Read more <https://onnxruntime.ai/>`__
 | 
			
		||||
   * - ``torch.compile(m, backend="tensorrt")``
 | 
			
		||||
     - Uses ONNXRT to run TensorRT for inference optimizations. `Read more <https://github.com/onnx/onnx-tensorrt>`__
 | 
			
		||||
     - Uses ONNX Runtime to run TensorRT for inference optimizations. `Read more <https://github.com/onnx/onnx-tensorrt>`__
 | 
			
		||||
   * - ``torch.compile(m, backend="ipex")``
 | 
			
		||||
     - Uses IPEX for inference on CPU. `Read more <https://github.com/intel/intel-extension-for-pytorch>`__
 | 
			
		||||
   * - ``torch.compile(m, backend="tvm")``
 | 
			
		||||
 | 
			
		||||
@ -317,47 +317,12 @@ them by default: ``env TORCHDYNAMO_DYNAMIC_SHAPES=0 python model.py`` 2.
 | 
			
		||||
CUDA graphs with Triton are enabled by default in inductor but removing
 | 
			
		||||
them may alleviate some OOM issues: ``torch._inductor.config.triton.cudagraphs = False``.
 | 
			
		||||
 | 
			
		||||
``torch.func`` does not work with ``torch.compile``
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
``torch.func`` works with ``torch.compile`` (for `grad` and `vmap` transforms)
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Applying a ``torch.func`` transform to a function that uses ``torch.compile``
 | 
			
		||||
does not work:
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    @torch.compile
 | 
			
		||||
    def f(x):
 | 
			
		||||
        return torch.sin(x)
 | 
			
		||||
 | 
			
		||||
    def g(x):
 | 
			
		||||
        return torch.grad(f)(x)
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(2, 3)
 | 
			
		||||
    g(x)
 | 
			
		||||
 | 
			
		||||
As a workaround, use ``torch.compile`` outside of the ``torch.func`` function:
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    def f(x):
 | 
			
		||||
        return torch.sin(x)
 | 
			
		||||
 | 
			
		||||
    @torch.compile
 | 
			
		||||
    def g(x):
 | 
			
		||||
        return torch.vmap(f)(x)
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(2, 3)
 | 
			
		||||
    g(x)
 | 
			
		||||
 | 
			
		||||
Applying a ``torch.func`` transform to a function handled with ``torch.compile``
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
For example, you have the following code:
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
@ -374,12 +339,18 @@ For example, you have the following code:
 | 
			
		||||
 | 
			
		||||
This code will not work. There is an `issue <https://github.com/pytorch/pytorch/issues/100320>`__
 | 
			
		||||
that you can track for this.
 | 
			
		||||
As a workaround, please put the ``torch.compile`` outside of ``torch.func`` transform:
 | 
			
		||||
 | 
			
		||||
As a workaround, use ``torch.compile`` outside of the ``torch.func`` function:
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
    This is an experimental feature and can be used by setting `torch._dynamo.config.capture_func_transforms=True`
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    def f(x):
 | 
			
		||||
        return torch.sin(x)
 | 
			
		||||
 | 
			
		||||
@ -393,18 +364,137 @@ As a workaround, please put the ``torch.compile`` outside of ``torch.func`` tran
 | 
			
		||||
Calling ``torch.func`` transform inside of a function handled with ``torch.compile``
 | 
			
		||||
------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Compiling ``torch.func.grad`` with ``torch.compile``
 | 
			
		||||
----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    @torch.compile
 | 
			
		||||
    def f(x):
 | 
			
		||||
        return torch.vmap(torch.sum)(x)
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(2, 3)
 | 
			
		||||
    f(x)
 | 
			
		||||
    def wrapper_fn(x):
 | 
			
		||||
        return torch.func.grad(lambda x: x.sin().sum())(x)
 | 
			
		||||
 | 
			
		||||
This doesn't work yet. As a workaround, use ``torch._dynamo.allow_in_graph``
 | 
			
		||||
    x = torch.randn(3, 3, 3)
 | 
			
		||||
    grad_x = torch.compile(wrapper_fn)(x)
 | 
			
		||||
 | 
			
		||||
Compiling ``torch.vmap`` with ``torch.compile``
 | 
			
		||||
-----------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    def my_fn(x):
 | 
			
		||||
        return torch.vmap(lambda x: x.sum(1))(x)
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(3, 3, 3)
 | 
			
		||||
    output = torch.compile(my_fn)(x)
 | 
			
		||||
 | 
			
		||||
Limitations
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
There are currently a few cases which are not supported and lead to graph breaks
 | 
			
		||||
(that is, torch.compile falls back to eager-mode PyTorch on these). We are working
 | 
			
		||||
on improving the situation for the next release (PyTorch 2.2)
 | 
			
		||||
 | 
			
		||||
1. The inputs and outputs of the function being transformed over must be tensors.
 | 
			
		||||
We do not yet support things like tuple of Tensors.
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    def fn(x):
 | 
			
		||||
        x1, x2 = x
 | 
			
		||||
        return x1 + x2
 | 
			
		||||
 | 
			
		||||
    def my_fn(x):
 | 
			
		||||
        return torch.func.vmap(fn)(x)
 | 
			
		||||
 | 
			
		||||
    x1 = torch.randn(3, 3, 3)
 | 
			
		||||
    x2 = torch.randn(3, 3, 3)
 | 
			
		||||
    # Unsupported, falls back to eager-mode PyTorch
 | 
			
		||||
    output = torch.compile(my_fn)((x1, x2))
 | 
			
		||||
 | 
			
		||||
2. Keyword arguments are not supported.
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    def fn(x, y):
 | 
			
		||||
        return (x + y).sum()
 | 
			
		||||
 | 
			
		||||
    def my_fn(x, y):
 | 
			
		||||
        return torch.func.grad(fn)(x, y=y)
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(3, 3)
 | 
			
		||||
    y = torch.randn(3, 3)
 | 
			
		||||
    # Unsupported, falls back to eager-mode PyTorch
 | 
			
		||||
    output = torch.compile(my_fn)(x, y)
 | 
			
		||||
 | 
			
		||||
3. Functions with observable side effects. For example, it is OK to mutate a list created in the function,
 | 
			
		||||
but not OK to mutate a list created outside of the function.
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    some_list = []
 | 
			
		||||
 | 
			
		||||
    def f(x, y):
 | 
			
		||||
        some_list.append(1)
 | 
			
		||||
        return x + y
 | 
			
		||||
 | 
			
		||||
    def my_fn(x, y):
 | 
			
		||||
        return torch.func.vmap(f)(x, y)
 | 
			
		||||
 | 
			
		||||
    x = torch.ones(2, 3)
 | 
			
		||||
    y = torch.randn(2, 3)
 | 
			
		||||
    # Unsupported, falls back to eager-mode PyTorch
 | 
			
		||||
    output = torch.compile(my_fn)(x, y)
 | 
			
		||||
 | 
			
		||||
4. ``torch.vmap`` over a function that calls one or more operators in the following list.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
    'stride', 'requires_grad', 'storage_offset', 'layout', 'data', 'is_coalesced', 'is_complex',
 | 
			
		||||
    'is_conj', 'is_contiguous', 'is_cpu', 'is_cuda', 'is_distributed', 'is_floating_point',
 | 
			
		||||
    'is_inference', 'is_ipu', 'is_leaf', 'is_meta', 'is_mkldnn', 'is_mps', 'is_neg', 'is_nested',
 | 
			
		||||
    'is_nonzero', 'is_ort', 'is_pinned', 'is_quantized', 'is_same_size', 'is_set_to', 'is_shared',
 | 
			
		||||
    'is_signed', 'is_sparse', 'is_sparse_csr', 'is_vulkan', 'is_xla', 'is_xpu'
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import torch
 | 
			
		||||
 | 
			
		||||
    torch._dynamo.config.capture_func_transforms=True
 | 
			
		||||
 | 
			
		||||
    def bad_fn(x):
 | 
			
		||||
        x.stride()
 | 
			
		||||
        return x
 | 
			
		||||
 | 
			
		||||
    def my_fn(x):
 | 
			
		||||
        return torch.func.vmap(bad_fn)(x)
 | 
			
		||||
 | 
			
		||||
    x = torch.randn(3, 3, 3)
 | 
			
		||||
    # Unsupported, falls back to eager-mode PyTorch
 | 
			
		||||
    output = torch.compile(my_fn)(x)
 | 
			
		||||
 | 
			
		||||
Compiling functions besides the ones which are supported (escape hatch)
 | 
			
		||||
-----------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
For other transforms, as a workaround, use ``torch._dynamo.allow_in_graph``
 | 
			
		||||
 | 
			
		||||
``allow_in_graph`` is an escape hatch. If your code does not work with
 | 
			
		||||
``torch.compile``, which introspects Python bytecode, but you believe it
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,5 @@
 | 
			
		||||
.. _torch.compiler_ir:
 | 
			
		||||
 | 
			
		||||
IRs
 | 
			
		||||
===============
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
Pod::Spec.new do |s|
 | 
			
		||||
    s.name             = 'LibTorch-Lite'
 | 
			
		||||
    s.version          = '1.13.0'
 | 
			
		||||
    s.version          = 'IOS_BUILD_VERSION'
 | 
			
		||||
    s.authors          = 'PyTorch Team'
 | 
			
		||||
    s.license          = { :type => 'BSD' }
 | 
			
		||||
    s.homepage         = 'https://github.com/pytorch/pytorch'
 | 
			
		||||
@ -33,5 +33,5 @@ Pod::Spec.new do |s|
 | 
			
		||||
        'VALID_ARCHS' => 'x86_64 arm64'
 | 
			
		||||
    }
 | 
			
		||||
    s.library = ['c++', 'stdc++']
 | 
			
		||||
    s.frameworks = 'Accelerate'
 | 
			
		||||
    s.frameworks = 'Accelerate', 'MetalPerformanceShaders', 'CoreML'
 | 
			
		||||
end
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
Pod::Spec.new do |s|
 | 
			
		||||
    s.name             = 'LibTorch'
 | 
			
		||||
    s.version          = '1.13.0'
 | 
			
		||||
    s.version          = 'IOS_BUILD_VERSION'
 | 
			
		||||
    s.authors          = 'PyTorch Team'
 | 
			
		||||
    s.license          = { :type => 'BSD' }
 | 
			
		||||
    s.homepage         = 'https://github.com/pytorch/pytorch'
 | 
			
		||||
@ -33,5 +33,5 @@ Pod::Spec.new do |s|
 | 
			
		||||
        'VALID_ARCHS' => 'x86_64 arm64'
 | 
			
		||||
    }
 | 
			
		||||
    s.library = ['c++', 'stdc++']
 | 
			
		||||
    s.frameworks = 'Accelerate'
 | 
			
		||||
    s.frameworks = 'Accelerate', 'MetalPerformanceShaders', 'CoreML'
 | 
			
		||||
end
 | 
			
		||||
@ -32,6 +32,7 @@ def main():
 | 
			
		||||
    mlmodel = torch._C._jit_to_backend("coreml", model, compile_spec)
 | 
			
		||||
    print(mlmodel._c._get_method("forward").graph)
 | 
			
		||||
    mlmodel._save_for_lite_interpreter("../models/model_coreml.ptl")
 | 
			
		||||
    torch.jit.save(mlmodel, "../models/model_coreml.pt")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
 | 
			
		||||
@ -9,5 +9,5 @@ traced_script_module = torch.jit.trace(model, example)
 | 
			
		||||
optimized_scripted_module = optimize_for_mobile(traced_script_module)
 | 
			
		||||
torch.jit.save(optimized_scripted_module, "../models/model.pt")
 | 
			
		||||
exported_optimized_scripted_module = (
 | 
			
		||||
    optimized_scripted_module._save_for_lite_interpreter("../models/model_lite.ptl")
 | 
			
		||||
    optimized_scripted_module._save_for_lite_interpreter("../models/model.ptl")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										76
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								setup.py
									
									
									
									
									
								
							@ -1069,6 +1069,50 @@ def configure_extension_build():
 | 
			
		||||
    return extensions, cmdclass, packages, entry_points, extra_install_requires
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def add_triton(install_requires, extras_require) -> None:
 | 
			
		||||
    """
 | 
			
		||||
    Add triton package as a dependency when it's needed
 | 
			
		||||
    """
 | 
			
		||||
    # NB: If the installation requirments list already includes triton dependency,
 | 
			
		||||
    # there is no need to add it one more time as an extra dependency. In nightly
 | 
			
		||||
    # or when release PyTorch, that is done by setting PYTORCH_EXTRA_INSTALL_REQUIREMENTS
 | 
			
		||||
    # environment variable on pytorch/builder
 | 
			
		||||
    has_triton = any("triton" in pkg for pkg in install_requires)
 | 
			
		||||
    if has_triton:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    cmake_cache_vars = get_cmake_cache_vars()
 | 
			
		||||
    use_rocm = cmake_cache_vars["USE_ROCM"]
 | 
			
		||||
    use_cuda = cmake_cache_vars["USE_CUDA"]
 | 
			
		||||
 | 
			
		||||
    # Triton is only needed for CUDA or ROCm
 | 
			
		||||
    if not use_rocm and not use_cuda:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    if use_rocm:
 | 
			
		||||
        triton_text_file = "triton-rocm.txt"
 | 
			
		||||
        triton_package_name = "pytorch-triton-rocm"
 | 
			
		||||
    else:
 | 
			
		||||
        triton_text_file = "triton.txt"
 | 
			
		||||
        triton_package_name = "pytorch-triton"
 | 
			
		||||
    triton_pin_file = os.path.join(
 | 
			
		||||
        cwd, ".ci", "docker", "ci_commit_pins", triton_text_file
 | 
			
		||||
    )
 | 
			
		||||
    triton_version_file = os.path.join(cwd, ".ci", "docker", "triton_version.txt")
 | 
			
		||||
 | 
			
		||||
    if os.path.exists(triton_pin_file) and os.path.exists(triton_version_file):
 | 
			
		||||
        with open(triton_pin_file) as f:
 | 
			
		||||
            triton_pin = f.read().strip()
 | 
			
		||||
        with open(triton_version_file) as f:
 | 
			
		||||
            triton_version = f.read().strip()
 | 
			
		||||
 | 
			
		||||
        if "dynamo" not in extras_require:
 | 
			
		||||
            extras_require["dynamo"] = []
 | 
			
		||||
        extras_require["dynamo"].append(
 | 
			
		||||
            triton_package_name + "==" + triton_version + "+" + triton_pin[:10]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# post run, warnings, printed at the end to make them more visible
 | 
			
		||||
build_update_message = """
 | 
			
		||||
    It is no longer necessary to use the 'build' or 'rebuild' targets
 | 
			
		||||
@ -1102,29 +1146,6 @@ def main():
 | 
			
		||||
        "fsspec",
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    extras_require = {"opt-einsum": ["opt-einsum>=3.3"]}
 | 
			
		||||
    if platform.system() == "Linux":
 | 
			
		||||
        cmake_cache_vars = get_cmake_cache_vars()
 | 
			
		||||
        if cmake_cache_vars["USE_ROCM"]:
 | 
			
		||||
            triton_text_file = "triton-rocm.txt"
 | 
			
		||||
            triton_package_name = "pytorch-triton-rocm"
 | 
			
		||||
        else:
 | 
			
		||||
            triton_text_file = "triton.txt"
 | 
			
		||||
            triton_package_name = "pytorch-triton"
 | 
			
		||||
        triton_pin_file = os.path.join(
 | 
			
		||||
            cwd, ".ci", "docker", "ci_commit_pins", triton_text_file
 | 
			
		||||
        )
 | 
			
		||||
        triton_version_file = os.path.join(cwd, ".ci", "docker", "triton_version.txt")
 | 
			
		||||
        if os.path.exists(triton_pin_file) and os.path.exists(triton_version_file):
 | 
			
		||||
            with open(triton_pin_file) as f:
 | 
			
		||||
                triton_pin = f.read().strip()
 | 
			
		||||
            with open(triton_version_file) as f:
 | 
			
		||||
                triton_version = f.read().strip()
 | 
			
		||||
            extras_require["dynamo"] = [
 | 
			
		||||
                triton_package_name + "==" + triton_version + "+" + triton_pin[:10],
 | 
			
		||||
                "jinja2",
 | 
			
		||||
            ]
 | 
			
		||||
 | 
			
		||||
    # Parse the command line and check the arguments before we proceed with
 | 
			
		||||
    # building deps and setup. We need to set values so `--help` works.
 | 
			
		||||
    dist = Distribution()
 | 
			
		||||
@ -1150,6 +1171,14 @@ def main():
 | 
			
		||||
 | 
			
		||||
    install_requires += extra_install_requires
 | 
			
		||||
 | 
			
		||||
    extras_require = {
 | 
			
		||||
        "opt-einsum": ["opt-einsum>=3.3"],
 | 
			
		||||
    }
 | 
			
		||||
    # Triton is only available on Linux atm
 | 
			
		||||
    if platform.system() == "Linux":
 | 
			
		||||
        extras_require["dynamo"] = ["jinja2"]
 | 
			
		||||
        add_triton(install_requires=install_requires, extras_require=extras_require)
 | 
			
		||||
 | 
			
		||||
    # Read in README.md for our long_description
 | 
			
		||||
    with open(os.path.join(cwd, "README.md"), encoding="utf-8") as f:
 | 
			
		||||
        long_description = f.read()
 | 
			
		||||
@ -1209,6 +1238,7 @@ def main():
 | 
			
		||||
        "include/ATen/native/mps/*.h",
 | 
			
		||||
        "include/ATen/native/quantized/*.h",
 | 
			
		||||
        "include/ATen/native/quantized/cpu/*.h",
 | 
			
		||||
        "include/ATen/native/utils/*.h",
 | 
			
		||||
        "include/ATen/quantized/*.h",
 | 
			
		||||
        "include/caffe2/serialize/*.h",
 | 
			
		||||
        "include/c10/*.h",
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user