mirror of
				https://github.com/pytorch/pytorch.git
				synced 2025-10-31 12:15:03 +08:00 
			
		
		
		
	Compare commits
	
		
			87 Commits
		
	
	
		
			ciflow/tru
			...
			release/2.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 96ca226a73 | |||
| a78b5f6680 | |||
| 51b42d98d6 | |||
| 0bd6be966b | |||
| e9ebda29d8 | |||
| 9e8bd61836 | |||
| e4bdb86e80 | |||
| 55b4f95cd8 | |||
| 6943c4b15e | |||
| 91c455e85d | |||
| c83bbdc032 | |||
| 661fa0c5e7 | |||
| 0f49e97be9 | |||
| b90fd01221 | |||
| 3aae95a884 | |||
| 34dd578b91 | |||
| 654da19c7c | |||
| a470c041b0 | |||
| a943df045f | |||
| bbf91554d2 | |||
| 3f25fc3b86 | |||
| 763cfc219d | |||
| ea9ea40290 | |||
| 2e761498b4 | |||
| c8f2470047 | |||
| f08d20ade0 | |||
| 94f88b342b | |||
| 5c035a5131 | |||
| 8963d77163 | |||
| c039d2f59e | |||
| 81ea036fa6 | |||
| c0c76df6a6 | |||
| cb51da829e | |||
| 57cd423a4f | |||
| 78e2cc6d9c | |||
| e9606385ec | |||
| e31e512f7d | |||
| c263bd43e8 | |||
| c9913cf66f | |||
| 2f7d8bbf17 | |||
| ca0cdf52ca | |||
| 9cfa076da8 | |||
| 8e05e41dbc | |||
| d8ffc60bc1 | |||
| 1483723037 | |||
| c4572aa1b7 | |||
| 82b078ba64 | |||
| 77f7bc5f9d | |||
| 0865964576 | |||
| f18ac1b386 | |||
| c04134cdb1 | |||
| 72d0863ab2 | |||
| 1bd334dc25 | |||
| 93e13cd429 | |||
| 4e4d4b0afe | |||
| c4fa850827 | |||
| 36ead09873 | |||
| 66d23dbad7 | |||
| e2fff58844 | |||
| 735333a7ff | |||
| 6017488801 | |||
| e51e5e721c | |||
| 91739a0279 | |||
| 531f097b6f | |||
| 00eb7b0d78 | |||
| 2180f342c4 | |||
| a90b4f09ac | |||
| 1211ceeaa4 | |||
| beaa5c5908 | |||
| 4bd5c1e4f4 | |||
| f3c97a4e43 | |||
| 30cf0e70f7 | |||
| 96f627dcde | |||
| 6f11e6d6a1 | |||
| fcec27f7d5 | |||
| cddcb1e526 | |||
| 0553b46df1 | |||
| b45d7697a5 | |||
| 7ebb309457 | |||
| cedfcdab46 | |||
| 0b21e62406 | |||
| 91994c999f | |||
| 0b82f58866 | |||
| 1f7ab1c823 | |||
| 52a27dd0ee | |||
| e0c728c545 | |||
| dbcd11f3a7 | 
| @ -119,7 +119,7 @@ function install_torchvision() { | |||||||
|  |  | ||||||
| function clone_pytorch_xla() { | function clone_pytorch_xla() { | ||||||
|   if [[ ! -d ./xla ]]; then |   if [[ ! -d ./xla ]]; then | ||||||
|     git clone --recursive --quiet https://github.com/pytorch/xla.git |     git clone --recursive -b r2.0 --quiet https://github.com/pytorch/xla.git | ||||||
|     pushd xla |     pushd xla | ||||||
|     # pin the xla hash so that we don't get broken by changes to 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)" |     git checkout "$(cat ../.github/ci_commit_pins/xla.txt)" | ||||||
| @ -135,16 +135,10 @@ function install_filelock() { | |||||||
|  |  | ||||||
| function install_triton() { | function install_triton() { | ||||||
|   local commit |   local commit | ||||||
|   commit=$(get_pinned_commit triton) |  | ||||||
|   local short_hash |  | ||||||
|   short_hash=$(echo "${commit}"|cut -c -10) |  | ||||||
|   local index_url |  | ||||||
|   index_url=https://download.pytorch.org/whl/nightly/cpu |  | ||||||
|   if [[ "${TEST_CONFIG}" == *rocm* ]]; then |   if [[ "${TEST_CONFIG}" == *rocm* ]]; then | ||||||
|     echo "skipping triton due to rocm" |     echo "skipping triton due to rocm" | ||||||
|   elif pip install "pytorch-triton==2.0.0+${short_hash}" --index-url "${index_url}"; then |  | ||||||
|      echo "Using prebuilt version ${short_hash}" |  | ||||||
|   else |   else | ||||||
|  |     commit=$(get_pinned_commit triton) | ||||||
|     if [[ "${BUILD_ENVIRONMENT}" == *gcc7* ]]; then |     if [[ "${BUILD_ENVIRONMENT}" == *gcc7* ]]; then | ||||||
|       # Trition needs gcc-9 to build |       # Trition needs gcc-9 to build | ||||||
|       sudo apt-get install -y g++-9 |       sudo apt-get install -y g++-9 | ||||||
| @ -181,7 +175,7 @@ function checkout_install_torchdeploy() { | |||||||
|   pushd multipy |   pushd multipy | ||||||
|   git checkout "${commit}" |   git checkout "${commit}" | ||||||
|   python multipy/runtime/example/generate_examples.py |   python multipy/runtime/example/generate_examples.py | ||||||
|   pip install -e . --install-option="--cudatests" |   pip install -e . | ||||||
|   popd |   popd | ||||||
|   popd |   popd | ||||||
| } | } | ||||||
| @ -190,7 +184,6 @@ function test_torch_deploy(){ | |||||||
|  pushd .. |  pushd .. | ||||||
|  pushd multipy |  pushd multipy | ||||||
|  ./multipy/runtime/build/test_deploy |  ./multipy/runtime/build/test_deploy | ||||||
|  ./multipy/runtime/build/test_deploy_gpu |  | ||||||
|  popd |  popd | ||||||
|  popd |  popd | ||||||
| } | } | ||||||
|  | |||||||
| @ -62,7 +62,7 @@ git --no-pager log --max-count 1 | |||||||
| popd | popd | ||||||
|  |  | ||||||
| # Clone the Builder master repo | # Clone the Builder master 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.0 "$BUILDER_ROOT" | ||||||
| pushd "$BUILDER_ROOT" | pushd "$BUILDER_ROOT" | ||||||
| echo "Using builder from " | echo "Using builder from " | ||||||
| git --no-pager log --max-count 1 | git --no-pager log --max-count 1 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/triton.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/triton.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| c8bfe3f548b164f745ada620a560f87f41ab8465 | b8b470bc597c1c5bd03682c09fe3e6b7c53787fd | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci_commit_pins/xla.txt
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| d29eb67c27af0f18d4f487d76b86f43b0a69aade | r2.0 | ||||||
|  | |||||||
| @ -1 +1 @@ | |||||||
| pytorch-triton-rocm>=2.0.0.dev | pytorch-triton-rocm>=2.0.0,<2.1 | ||||||
							
								
								
									
										2
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/scripts/build_triton_wheel.py
									
									
									
									
										vendored
									
									
								
							| @ -38,7 +38,7 @@ def build_triton(commit_hash: str, build_conda: bool = False, py_version : Optio | |||||||
|         check_call(["git", "checkout", commit_hash], cwd=triton_basedir) |         check_call(["git", "checkout", commit_hash], cwd=triton_basedir) | ||||||
|         if build_conda: |         if build_conda: | ||||||
|             with open(triton_basedir / "meta.yaml", "w") as meta: |             with open(triton_basedir / "meta.yaml", "w") as meta: | ||||||
|                 print(f"package:\n  name: torchtriton\n  version: 2.0.0+{commit_hash[:10]}\n", file=meta) |                 print("package:\n  name: torchtriton\n  version: 2.0.0\n", file=meta) | ||||||
|                 print("source:\n  path: .\n", file=meta) |                 print("source:\n  path: .\n", file=meta) | ||||||
|                 print("build:\n  string: py{{py}}\n  number: 1\n  script: cd python; " |                 print("build:\n  string: py{{py}}\n  number: 1\n  script: cd python; " | ||||||
|                       "python setup.py install --single-version-externally-managed --record=record.txt\n", file=meta) |                       "python setup.py install --single-version-externally-managed --record=record.txt\n", file=meta) | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/scripts/generate_binary_build_matrix.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/scripts/generate_binary_build_matrix.py
									
									
									
									
										vendored
									
									
								
							| @ -196,10 +196,11 @@ def generate_wheels_matrix(os: str, | |||||||
|     for python_version in python_versions: |     for python_version in python_versions: | ||||||
|         for arch_version in arches: |         for arch_version in arches: | ||||||
|             gpu_arch_type = arch_type(arch_version) |             gpu_arch_type = arch_type(arch_version) | ||||||
|             gpu_arch_version = "" if arch_version == "cpu" or arch_version == "cpu-cxx11-abi" else arch_version |             gpu_arch_version = ( | ||||||
|             # Skip rocm 3.11 binaries for now as the docker image are not correct |                 "" | ||||||
|             if python_version == "3.11" and gpu_arch_type == "rocm": |                 if arch_version == "cpu" or arch_version == "cpu-cxx11-abi" | ||||||
|                 continue |                 else arch_version | ||||||
|  |             ) | ||||||
|  |  | ||||||
|             # special 11.7 wheels package without dependencies |             # special 11.7 wheels package without dependencies | ||||||
|             # dependency downloaded via pip install |             # dependency downloaded via pip install | ||||||
| @ -226,7 +227,8 @@ def generate_wheels_matrix(os: str, | |||||||
|                         "nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | " |                         "nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||||
|                         "nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | " |                         "nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||||
|                         "nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | " |                         "nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||||
|                         "nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64'", |                         "nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' | " | ||||||
|  |                         "triton==2.0.0; platform_system == 'Linux' and platform_machine == 'x86_64'", | ||||||
|                         "build_name": |                         "build_name": | ||||||
|                         f"{package_type}-py{python_version}-{gpu_arch_type}{gpu_arch_version}-with-pypi-cudnn" |                         f"{package_type}-py{python_version}-{gpu_arch_type}{gpu_arch_version}-with-pypi-cudnn" | ||||||
|                         .replace( |                         .replace( | ||||||
|  | |||||||
							
								
								
									
										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 | # NOTE: If testing pytorch/builder changes you can change this variable to change what pytorch/builder reference | ||||||
| #       the binary builds will check out | #       the binary builds will check out | ||||||
| {%- set builder_repo = "pytorch/builder" -%} | {%- set builder_repo = "pytorch/builder" -%} | ||||||
| {%- set builder_branch = "main" -%} | {%- set builder_branch = "release/2.0" -%} | ||||||
|  |  | ||||||
| {%- macro concurrency(build_environment) -%} | {%- macro concurrency(build_environment) -%} | ||||||
| concurrency: | concurrency: | ||||||
|  | |||||||
| @ -87,8 +87,8 @@ jobs: | |||||||
|         with: |         with: | ||||||
|           name: !{{ config["build_name"] }} |           name: !{{ config["build_name"] }} | ||||||
|           path: "${{ runner.temp }}/artifacts/" |           path: "${{ runner.temp }}/artifacts/" | ||||||
|       !{{ common.checkout(deep_clone=False, directory="pytorch") }} |       !{{ 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) }} |       !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }} | ||||||
|       - name: ROCm set GPU_FLAG |       - name: ROCm set GPU_FLAG | ||||||
|         run: | |         run: | | ||||||
|           echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}" |           echo "GPU_FLAG=--device=/dev/mem --device=/dev/kfd --device=/dev/dri --group-add video --group-add daemon" >> "${GITHUB_ENV}" | ||||||
|  | |||||||
| @ -74,8 +74,8 @@ jobs: | |||||||
|           /bin/bash "${RUNNER_TEMP}/conda.sh" -b -p "${RUNNER_TEMP}/anaconda" |           /bin/bash "${RUNNER_TEMP}/conda.sh" -b -p "${RUNNER_TEMP}/anaconda" | ||||||
|           echo "${RUNNER_TEMP}/anaconda/bin" >> "${GITHUB_PATH}" |           echo "${RUNNER_TEMP}/anaconda/bin" >> "${GITHUB_PATH}" | ||||||
|           echo "DEVELOPER_DIR=/Applications/Xcode_13.3.1.app/Contents/Developer" >> "${GITHUB_ENV}" |           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="pytorch", checkout_pr_head=False) }} | ||||||
|       !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch) }} |       !{{ 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) |       - name: Install sccache (only for non-forked PRs, and pushes to trunk) | ||||||
|         uses: nick-fields/retry@v2.8.2 |         uses: nick-fields/retry@v2.8.2 | ||||||
|         if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository }} |         if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository }} | ||||||
|  | |||||||
| @ -62,8 +62,8 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       !{{ common.setup_ec2_windows() }} |       !{{ common.setup_ec2_windows() }} | ||||||
|       !{{ set_runner_specific_vars() }} |       !{{ set_runner_specific_vars() }} | ||||||
|       !{{ common.checkout(deep_clone=False, directory="pytorch") }} |       !{{ 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) }} |       !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }} | ||||||
|       - name: Populate binary env |       - name: Populate binary env | ||||||
|         shell: bash |         shell: bash | ||||||
|         run: | |         run: | | ||||||
| @ -98,8 +98,8 @@ jobs: | |||||||
|         with: |         with: | ||||||
|           name: !{{ config["build_name"] }} |           name: !{{ config["build_name"] }} | ||||||
|           path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" |           path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" | ||||||
|       !{{ common.checkout(deep_clone=False, directory="pytorch") }} |       !{{ 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) }} |       !{{ common.checkout(deep_clone=False, directory="builder", repository=common.builder_repo, branch=common.builder_branch, checkout_pr_head=False) }} | ||||||
|       - name: Populate binary env |       - name: Populate binary env | ||||||
|         shell: bash |         shell: bash | ||||||
|         run: | |         run: | | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_android-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_android-build-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -35,7 +35,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_bazel-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_bazel-build-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -35,7 +35,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								.github/workflows/_binary-build-linux.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/_binary-build-linux.yml
									
									
									
									
										vendored
									
									
								
							| @ -131,7 +131,7 @@ jobs: | |||||||
|         with: |         with: | ||||||
|           github-secret: ${{ secrets.github-token }} |           github-secret: ${{ secrets.github-token }} | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|       - name: Chown workspace |       - name: Chown workspace | ||||||
| @ -145,7 +145,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch to pytorch dir |       - name: Checkout PyTorch to pytorch dir | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -158,7 +157,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder to builder dir |       - name: Checkout pytorch/builder to builder dir | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								.github/workflows/_binary-test-linux.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/_binary-test-linux.yml
									
									
									
									
										vendored
									
									
								
							| @ -128,7 +128,7 @@ jobs: | |||||||
|           github-secret: ${{ secrets.github-token }} |           github-secret: ${{ secrets.github-token }} | ||||||
|         # Setup the environment |         # Setup the environment | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|       - name: Chown workspace |       - name: Chown workspace | ||||||
| @ -142,7 +142,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch to pytorch dir |       - name: Checkout PyTorch to pytorch dir | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|       - name: Clean PyTorch checkout |       - name: Clean PyTorch checkout | ||||||
| @ -154,7 +153,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder to builder dir |       - name: Checkout pytorch/builder to builder dir | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_binary-upload.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_binary-upload.yml
									
									
									
									
										vendored
									
									
								
							| @ -96,7 +96,7 @@ jobs: | |||||||
|       SHA1: ${{ github.event.pull_request.head.sha || github.sha }} |       SHA1: ${{ github.event.pull_request.head.sha || github.sha }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           no-sudo: true |           no-sudo: true | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_buck-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_buck-build-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -12,7 +12,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Set up JDK 8 |       - name: Set up JDK 8 | ||||||
|         uses: actions/setup-java@v3 |         uses: actions/setup-java@v3 | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ jobs: | |||||||
|       docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }} |       docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           submodules: false |           submodules: false | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_docs.yml
									
									
									
									
										vendored
									
									
								
							| @ -76,7 +76,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_ios-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_ios-build-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -38,7 +38,7 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Populate CI build options |       - name: Populate CI build options | ||||||
|         run: | |         run: | | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_linux-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_linux-build.yml
									
									
									
									
										vendored
									
									
								
							| @ -76,7 +76,7 @@ jobs: | |||||||
|       # checkout because when we run this action we don't *have* a local |       # checkout because when we run this action we don't *have* a local | ||||||
|       # checkout. In other cases you should prefer a local checkout. |       # checkout. In other cases you should prefer a local checkout. | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/_linux-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/_linux-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -48,7 +48,7 @@ jobs: | |||||||
|       keep-going: ${{ steps.filter.outputs.keep-going }} |       keep-going: ${{ steps.filter.outputs.keep-going }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|           submodules: false |           submodules: false | ||||||
| @ -79,7 +79,7 @@ jobs: | |||||||
|               docker exec -it $(docker container ps --format '{{.ID}}') bash |               docker exec -it $(docker container ps --format '{{.ID}}') bash | ||||||
|  |  | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_mac-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_mac-build.yml
									
									
									
									
										vendored
									
									
								
							| @ -79,7 +79,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Set xcode version |       - name: Set xcode version | ||||||
|         env: |         env: | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/_mac-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/_mac-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -47,7 +47,7 @@ jobs: | |||||||
|       is-test-matrix-empty: ${{ steps.filter.outputs.is-test-matrix-empty }} |       is-test-matrix-empty: ${{ steps.filter.outputs.is-test-matrix-empty }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|           submodules: false |           submodules: false | ||||||
| @ -96,7 +96,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Download build artifacts |       - name: Download build artifacts | ||||||
|         uses: ./.github/actions/download-build-artifacts |         uses: ./.github/actions/download-build-artifacts | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/_rocm-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/_rocm-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -54,7 +54,7 @@ jobs: | |||||||
|       is-test-matrix-empty: ${{ steps.filter.outputs.is-test-matrix-empty }} |       is-test-matrix-empty: ${{ steps.filter.outputs.is-test-matrix-empty }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|           submodules: false |           submodules: false | ||||||
| @ -78,7 +78,7 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           no-sudo: true |           no-sudo: true | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_run_android_tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_run_android_tests.yml
									
									
									
									
										vendored
									
									
								
							| @ -13,7 +13,7 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup miniconda |       - name: Setup miniconda | ||||||
|         uses: pytorch/test-infra/.github/actions/setup-miniconda@main |         uses: pytorch/test-infra/.github/actions/setup-miniconda@main | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/_win-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/_win-build.yml
									
									
									
									
										vendored
									
									
								
							| @ -68,7 +68,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           no-sudo: true |           no-sudo: true | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/_win-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/_win-test.yml
									
									
									
									
										vendored
									
									
								
							| @ -36,7 +36,7 @@ jobs: | |||||||
|       is-test-matrix-empty: ${{ steps.filter.outputs.is-test-matrix-empty }} |       is-test-matrix-empty: ${{ steps.filter.outputs.is-test-matrix-empty }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|           submodules: false |           submodules: false | ||||||
| @ -119,7 +119,7 @@ jobs: | |||||||
|  |  | ||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           no-sudo: true |           no-sudo: true | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								.github/workflows/build-triton-wheel.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/build-triton-wheel.yml
									
									
									
									
										vendored
									
									
								
							| @ -38,7 +38,7 @@ jobs: | |||||||
|           github-secret: ${{ secrets.GITHUB_TOKEN }} |           github-secret: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           submodules: false |           submodules: false | ||||||
|  |  | ||||||
| @ -65,9 +65,6 @@ jobs: | |||||||
|  |  | ||||||
|           # Determine python executable for given version |           # Determine python executable for given version | ||||||
|           case $PY_VERS in |           case $PY_VERS in | ||||||
|           3.7) |  | ||||||
|             PYTHON_EXECUTABLE=/opt/python/cp37-cp37m/bin/python |  | ||||||
|             ;; |  | ||||||
|           3.8) |           3.8) | ||||||
|             PYTHON_EXECUTABLE=/opt/python/cp38-cp38/bin/python |             PYTHON_EXECUTABLE=/opt/python/cp38-cp38/bin/python | ||||||
|             ;; |             ;; | ||||||
| @ -86,7 +83,8 @@ jobs: | |||||||
|             ;; |             ;; | ||||||
|           esac |           esac | ||||||
|  |  | ||||||
|           docker exec -t "${container_name}" yum install -y llvm11 llvm11-devel llvm11-static llvm11-libs zlib-devel |           docker exec -t "${container_name}" yum install -y zlib-devel | ||||||
|  |           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 |           docker exec -t "${container_name}" "${PYTHON_EXECUTABLE}" /pytorch/.github/scripts/build_triton_wheel.py | ||||||
|           docker exec -t "${container_name}" chown -R 1000.1000 /artifacts |           docker exec -t "${container_name}" chown -R 1000.1000 /artifacts | ||||||
|  |  | ||||||
| @ -139,7 +137,7 @@ jobs: | |||||||
|         run: | |         run: | | ||||||
|             set -ex |             set -ex | ||||||
|             pip install -q awscli |             pip install -q awscli | ||||||
|             s3_dir="${UPLOAD_BUCKET}/whl/nightly/" |             s3_dir="${UPLOAD_BUCKET}/whl/test/" | ||||||
|             for pkg in "${PKG_DIR}/"*.whl; do |             for pkg in "${PKG_DIR}/"*.whl; do | ||||||
|               aws s3 cp --no-progress --acl public-read "${pkg}" "${s3_dir}" |               aws s3 cp --no-progress --acl public-read "${pkg}" "${s3_dir}" | ||||||
|              done |              done | ||||||
| @ -162,7 +160,7 @@ jobs: | |||||||
|           github-secret: ${{ secrets.GITHUB_TOKEN }} |           github-secret: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           submodules: false |           submodules: false | ||||||
|  |  | ||||||
| @ -195,7 +193,7 @@ jobs: | |||||||
|         if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/master' || github.event.ref == 'refs/heads/main') }} |         if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/master' || github.event.ref == 'refs/heads/main') }} | ||||||
|         run: | |         run: | | ||||||
|           container_name=$(docker container ps --format '{{.ID}}') |           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" |           docker exec -t "${container_name}" sh -c "anaconda upload /artifacts/torch*.tar.bz2 -u pytorch-test --label main --no-progress --force" | ||||||
|  |  | ||||||
|       - name: Chown artifacts |       - name: Chown artifacts | ||||||
|         run: | |         run: | | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/check-labels.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/check-labels.yml
									
									
									
									
										vendored
									
									
								
							| @ -15,7 +15,7 @@ jobs: | |||||||
|     runs-on: linux.20_04.4x |     runs-on: linux.20_04.4x | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           submodules: false |           submodules: false | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/docker-builds.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/docker-builds.yml
									
									
									
									
										vendored
									
									
								
							| @ -62,7 +62,7 @@ jobs: | |||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       # deep clone (fetch-depth 0) required for git merge-base |       # deep clone (fetch-depth 0) required for git merge-base | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - name: Setup Linux |       - name: Setup Linux | ||||||
|         uses: ./.github/actions/setup-linux |         uses: ./.github/actions/setup-linux | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-linux-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-linux-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -829,7 +829,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -841,7 +840,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -933,7 +932,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -945,7 +943,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1037,7 +1035,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1049,7 +1046,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1141,7 +1138,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1153,7 +1149,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-linux-binary-libtorch-pre-cxx11-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-linux-binary-libtorch-pre-cxx11-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -829,7 +829,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -841,7 +840,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -933,7 +932,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -945,7 +943,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1037,7 +1035,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1049,7 +1046,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1141,7 +1138,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1153,7 +1149,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/generated-linux-binary-manywheel-master.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/generated-linux-binary-manywheel-master.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -47,7 +47,7 @@ jobs: | |||||||
|       DESIRED_PYTHON: "3.8" |       DESIRED_PYTHON: "3.8" | ||||||
|       build_name: manywheel-py3_8-cuda11_7-with-pypi-cudnn |       build_name: manywheel-py3_8-cuda11_7-with-pypi-cudnn | ||||||
|       build_environment: linux-binary-manywheel |       build_environment: linux-binary-manywheel | ||||||
|       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' |       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.0.0; platform_system == 'Linux' and platform_machine == 'x86_64' | ||||||
|     secrets: |     secrets: | ||||||
|       github-token: ${{ secrets.GITHUB_TOKEN }} |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										226
									
								
								.github/workflows/generated-linux-binary-manywheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										226
									
								
								.github/workflows/generated-linux-binary-manywheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -169,7 +169,7 @@ jobs: | |||||||
|       DESIRED_PYTHON: "3.8" |       DESIRED_PYTHON: "3.8" | ||||||
|       build_name: manywheel-py3_8-cuda11_7-with-pypi-cudnn |       build_name: manywheel-py3_8-cuda11_7-with-pypi-cudnn | ||||||
|       build_environment: linux-binary-manywheel |       build_environment: linux-binary-manywheel | ||||||
|       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' |       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.0.0; platform_system == 'Linux' and platform_machine == 'x86_64' | ||||||
|     secrets: |     secrets: | ||||||
|       github-token: ${{ secrets.GITHUB_TOKEN }} |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
| @ -381,7 +381,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -393,7 +392,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -482,7 +481,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -494,7 +492,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -669,7 +667,7 @@ jobs: | |||||||
|       DESIRED_PYTHON: "3.9" |       DESIRED_PYTHON: "3.9" | ||||||
|       build_name: manywheel-py3_9-cuda11_7-with-pypi-cudnn |       build_name: manywheel-py3_9-cuda11_7-with-pypi-cudnn | ||||||
|       build_environment: linux-binary-manywheel |       build_environment: linux-binary-manywheel | ||||||
|       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' |       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.0.0; platform_system == 'Linux' and platform_machine == 'x86_64' | ||||||
|     secrets: |     secrets: | ||||||
|       github-token: ${{ secrets.GITHUB_TOKEN }} |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
| @ -881,7 +879,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -893,7 +890,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -982,7 +979,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -994,7 +990,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1169,7 +1165,7 @@ jobs: | |||||||
|       DESIRED_PYTHON: "3.10" |       DESIRED_PYTHON: "3.10" | ||||||
|       build_name: manywheel-py3_10-cuda11_7-with-pypi-cudnn |       build_name: manywheel-py3_10-cuda11_7-with-pypi-cudnn | ||||||
|       build_environment: linux-binary-manywheel |       build_environment: linux-binary-manywheel | ||||||
|       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' |       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.0.0; platform_system == 'Linux' and platform_machine == 'x86_64' | ||||||
|     secrets: |     secrets: | ||||||
|       github-token: ${{ secrets.GITHUB_TOKEN }} |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
| @ -1381,7 +1377,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1393,7 +1388,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1482,7 +1477,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1494,7 +1488,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1669,7 +1663,7 @@ jobs: | |||||||
|       DESIRED_PYTHON: "3.11" |       DESIRED_PYTHON: "3.11" | ||||||
|       build_name: manywheel-py3_11-cuda11_7-with-pypi-cudnn |       build_name: manywheel-py3_11-cuda11_7-with-pypi-cudnn | ||||||
|       build_environment: linux-binary-manywheel |       build_environment: linux-binary-manywheel | ||||||
|       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' |       PYTORCH_EXTRA_INSTALL_REQUIREMENTS: nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-runtime-cu11==11.7.99; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cuda-cupti-cu11==11.7.101; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cudnn-cu11==8.5.0.96; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cublas-cu11==11.10.3.66; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cufft-cu11==10.9.0.58; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-curand-cu11==10.2.10.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusolver-cu11==11.4.0.1; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-cusparse-cu11==11.7.4.91; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nccl-cu11==2.14.3; platform_system == 'Linux' and platform_machine == 'x86_64' | nvidia-nvtx-cu11==11.7.91; platform_system == 'Linux' and platform_machine == 'x86_64' | triton==2.0.0; platform_system == 'Linux' and platform_machine == 'x86_64' | ||||||
|     secrets: |     secrets: | ||||||
|       github-token: ${{ secrets.GITHUB_TOKEN }} |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
| @ -1834,3 +1828,203 @@ jobs: | |||||||
|       aws-pytorch-uploader-secret-access-key: ${{ secrets.AWS_PYTORCH_UPLOADER_SECRET_ACCESS_KEY }} |       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 }} | ||||||
|     uses: ./.github/workflows/_binary-upload.yml |     uses: ./.github/workflows/_binary-upload.yml | ||||||
|  |   manywheel-py3_11-rocm5_3-build: | ||||||
|  |     if: ${{ github.repository_owner == 'pytorch' }} | ||||||
|  |     uses: ./.github/workflows/_binary-build-linux.yml | ||||||
|  |     with: | ||||||
|  |       PYTORCH_ROOT: /pytorch | ||||||
|  |       BUILDER_ROOT: /builder | ||||||
|  |       PACKAGE_TYPE: manywheel | ||||||
|  |       # TODO: This is a legacy variable that we eventually want to get rid of in | ||||||
|  |       #       favor of GPU_ARCH_VERSION | ||||||
|  |       DESIRED_CUDA: rocm5.3 | ||||||
|  |       GPU_ARCH_VERSION: 5.3 | ||||||
|  |       GPU_ARCH_TYPE: rocm | ||||||
|  |       DOCKER_IMAGE: pytorch/manylinux-builder:rocm5.3 | ||||||
|  |       DESIRED_PYTHON: "3.11" | ||||||
|  |       build_name: manywheel-py3_11-rocm5_3 | ||||||
|  |       build_environment: linux-binary-manywheel | ||||||
|  |     secrets: | ||||||
|  |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
|  |   manywheel-py3_11-rocm5_3-test:  # Testing | ||||||
|  |     if: ${{ github.repository_owner == 'pytorch' }} | ||||||
|  |     needs: manywheel-py3_11-rocm5_3-build | ||||||
|  |     runs-on: linux.rocm.gpu | ||||||
|  |     timeout-minutes: 240 | ||||||
|  |     env: | ||||||
|  |       PYTORCH_ROOT: /pytorch | ||||||
|  |       BUILDER_ROOT: /builder | ||||||
|  |       PACKAGE_TYPE: manywheel | ||||||
|  |       # TODO: This is a legacy variable that we eventually want to get rid of in | ||||||
|  |       #       favor of GPU_ARCH_VERSION | ||||||
|  |       DESIRED_CUDA: rocm5.3 | ||||||
|  |       GPU_ARCH_VERSION: 5.3 | ||||||
|  |       GPU_ARCH_TYPE: rocm | ||||||
|  |       SKIP_ALL_TESTS: 1 | ||||||
|  |       DOCKER_IMAGE: pytorch/manylinux-builder:rocm5.3 | ||||||
|  |       DESIRED_PYTHON: "3.11" | ||||||
|  |     steps: | ||||||
|  |       - name: Setup ROCm | ||||||
|  |         uses: ./.github/actions/setup-rocm | ||||||
|  |       - uses: actions/download-artifact@v3 | ||||||
|  |         name: Download Build Artifacts | ||||||
|  |         with: | ||||||
|  |           name: manywheel-py3_11-rocm5_3 | ||||||
|  |           path: "${{ runner.temp }}/artifacts/" | ||||||
|  |       - name: Checkout PyTorch | ||||||
|  |         uses: malfet/checkout@silent-checkout | ||||||
|  |         with: | ||||||
|  |           submodules: recursive | ||||||
|  |           path: pytorch | ||||||
|  |           quiet-checkout: true | ||||||
|  |       - name: Clean PyTorch checkout | ||||||
|  |         run: | | ||||||
|  |           # Remove any artifacts from the previous checkouts | ||||||
|  |           git clean -fxd | ||||||
|  |         working-directory: pytorch | ||||||
|  |       - name: Checkout pytorch/builder | ||||||
|  |         uses: malfet/checkout@silent-checkout | ||||||
|  |         with: | ||||||
|  |           ref: release/2.0 | ||||||
|  |           submodules: recursive | ||||||
|  |           repository: pytorch/builder | ||||||
|  |           path: builder | ||||||
|  |           quiet-checkout: true | ||||||
|  |       - name: Clean pytorch/builder checkout | ||||||
|  |         run: | | ||||||
|  |           # Remove any artifacts from the previous checkouts | ||||||
|  |           git clean -fxd | ||||||
|  |         working-directory: builder | ||||||
|  |       - 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 | ||||||
|  |         with: | ||||||
|  |           docker-image: pytorch/manylinux-builder:rocm5.3 | ||||||
|  |       - name: Test Pytorch binary | ||||||
|  |         uses: ./pytorch/.github/actions/test-pytorch-binary | ||||||
|  |       - name: Teardown ROCm | ||||||
|  |         uses: ./.github/actions/teardown-rocm | ||||||
|  |   manywheel-py3_11-rocm5_3-upload:  # Uploading | ||||||
|  |     if: ${{ github.repository_owner == 'pytorch' }} | ||||||
|  |     needs: manywheel-py3_11-rocm5_3-test | ||||||
|  |     with: | ||||||
|  |       PYTORCH_ROOT: /pytorch | ||||||
|  |       BUILDER_ROOT: /builder | ||||||
|  |       PACKAGE_TYPE: manywheel | ||||||
|  |       # TODO: This is a legacy variable that we eventually want to get rid of in | ||||||
|  |       #       favor of GPU_ARCH_VERSION | ||||||
|  |       DESIRED_CUDA: rocm5.3 | ||||||
|  |       GPU_ARCH_VERSION: 5.3 | ||||||
|  |       GPU_ARCH_TYPE: rocm | ||||||
|  |       DOCKER_IMAGE: pytorch/manylinux-builder:rocm5.3 | ||||||
|  |       DESIRED_PYTHON: "3.11" | ||||||
|  |       build_name: manywheel-py3_11-rocm5_3 | ||||||
|  |     secrets: | ||||||
|  |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |       aws-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 }} | ||||||
|  |     uses: ./.github/workflows/_binary-upload.yml | ||||||
|  |   manywheel-py3_11-rocm5_4_2-build: | ||||||
|  |     if: ${{ github.repository_owner == 'pytorch' }} | ||||||
|  |     uses: ./.github/workflows/_binary-build-linux.yml | ||||||
|  |     with: | ||||||
|  |       PYTORCH_ROOT: /pytorch | ||||||
|  |       BUILDER_ROOT: /builder | ||||||
|  |       PACKAGE_TYPE: manywheel | ||||||
|  |       # TODO: This is a legacy variable that we eventually want to get rid of in | ||||||
|  |       #       favor of GPU_ARCH_VERSION | ||||||
|  |       DESIRED_CUDA: rocm5.4.2 | ||||||
|  |       GPU_ARCH_VERSION: 5.4.2 | ||||||
|  |       GPU_ARCH_TYPE: rocm | ||||||
|  |       DOCKER_IMAGE: pytorch/manylinux-builder:rocm5.4.2 | ||||||
|  |       DESIRED_PYTHON: "3.11" | ||||||
|  |       build_name: manywheel-py3_11-rocm5_4_2 | ||||||
|  |       build_environment: linux-binary-manywheel | ||||||
|  |     secrets: | ||||||
|  |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |  | ||||||
|  |   manywheel-py3_11-rocm5_4_2-test:  # Testing | ||||||
|  |     if: ${{ github.repository_owner == 'pytorch' }} | ||||||
|  |     needs: manywheel-py3_11-rocm5_4_2-build | ||||||
|  |     runs-on: linux.rocm.gpu | ||||||
|  |     timeout-minutes: 240 | ||||||
|  |     env: | ||||||
|  |       PYTORCH_ROOT: /pytorch | ||||||
|  |       BUILDER_ROOT: /builder | ||||||
|  |       PACKAGE_TYPE: manywheel | ||||||
|  |       # TODO: This is a legacy variable that we eventually want to get rid of in | ||||||
|  |       #       favor of GPU_ARCH_VERSION | ||||||
|  |       DESIRED_CUDA: rocm5.4.2 | ||||||
|  |       GPU_ARCH_VERSION: 5.4.2 | ||||||
|  |       GPU_ARCH_TYPE: rocm | ||||||
|  |       SKIP_ALL_TESTS: 1 | ||||||
|  |       DOCKER_IMAGE: pytorch/manylinux-builder:rocm5.4.2 | ||||||
|  |       DESIRED_PYTHON: "3.11" | ||||||
|  |     steps: | ||||||
|  |       - name: Setup ROCm | ||||||
|  |         uses: ./.github/actions/setup-rocm | ||||||
|  |       - uses: actions/download-artifact@v3 | ||||||
|  |         name: Download Build Artifacts | ||||||
|  |         with: | ||||||
|  |           name: manywheel-py3_11-rocm5_4_2 | ||||||
|  |           path: "${{ runner.temp }}/artifacts/" | ||||||
|  |       - name: Checkout PyTorch | ||||||
|  |         uses: malfet/checkout@silent-checkout | ||||||
|  |         with: | ||||||
|  |           submodules: recursive | ||||||
|  |           path: pytorch | ||||||
|  |           quiet-checkout: true | ||||||
|  |       - name: Clean PyTorch checkout | ||||||
|  |         run: | | ||||||
|  |           # Remove any artifacts from the previous checkouts | ||||||
|  |           git clean -fxd | ||||||
|  |         working-directory: pytorch | ||||||
|  |       - name: Checkout pytorch/builder | ||||||
|  |         uses: malfet/checkout@silent-checkout | ||||||
|  |         with: | ||||||
|  |           ref: release/2.0 | ||||||
|  |           submodules: recursive | ||||||
|  |           repository: pytorch/builder | ||||||
|  |           path: builder | ||||||
|  |           quiet-checkout: true | ||||||
|  |       - name: Clean pytorch/builder checkout | ||||||
|  |         run: | | ||||||
|  |           # Remove any artifacts from the previous checkouts | ||||||
|  |           git clean -fxd | ||||||
|  |         working-directory: builder | ||||||
|  |       - 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 | ||||||
|  |         with: | ||||||
|  |           docker-image: pytorch/manylinux-builder:rocm5.4.2 | ||||||
|  |       - name: Test Pytorch binary | ||||||
|  |         uses: ./pytorch/.github/actions/test-pytorch-binary | ||||||
|  |       - name: Teardown ROCm | ||||||
|  |         uses: ./.github/actions/teardown-rocm | ||||||
|  |   manywheel-py3_11-rocm5_4_2-upload:  # Uploading | ||||||
|  |     if: ${{ github.repository_owner == 'pytorch' }} | ||||||
|  |     needs: manywheel-py3_11-rocm5_4_2-test | ||||||
|  |     with: | ||||||
|  |       PYTORCH_ROOT: /pytorch | ||||||
|  |       BUILDER_ROOT: /builder | ||||||
|  |       PACKAGE_TYPE: manywheel | ||||||
|  |       # TODO: This is a legacy variable that we eventually want to get rid of in | ||||||
|  |       #       favor of GPU_ARCH_VERSION | ||||||
|  |       DESIRED_CUDA: rocm5.4.2 | ||||||
|  |       GPU_ARCH_VERSION: 5.4.2 | ||||||
|  |       GPU_ARCH_TYPE: rocm | ||||||
|  |       DOCKER_IMAGE: pytorch/manylinux-builder:rocm5.4.2 | ||||||
|  |       DESIRED_PYTHON: "3.11" | ||||||
|  |       build_name: manywheel-py3_11-rocm5_4_2 | ||||||
|  |     secrets: | ||||||
|  |       github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |       aws-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 }} | ||||||
|  |     uses: ./.github/workflows/_binary-upload.yml | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-macos-arm64-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-macos-arm64-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -75,7 +75,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -87,7 +86,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -187,7 +186,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -199,7 +197,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -299,7 +297,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -311,7 +308,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -411,7 +408,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -423,7 +419,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-macos-arm64-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-macos-arm64-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -75,7 +75,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -87,7 +86,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -187,7 +186,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -199,7 +197,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -299,7 +297,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -311,7 +308,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -411,7 +408,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -423,7 +419,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-macos-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-macos-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -73,7 +73,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -85,7 +84,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -185,7 +184,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -197,7 +195,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -297,7 +295,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -309,7 +306,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -409,7 +406,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -421,7 +417,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-macos-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-macos-binary-libtorch-cxx11-abi-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -77,7 +77,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -89,7 +88,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -194,7 +193,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -206,7 +204,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -311,7 +309,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -323,7 +320,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -428,7 +425,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -440,7 +436,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-macos-binary-libtorch-pre-cxx11-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-macos-binary-libtorch-pre-cxx11-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -77,7 +77,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -89,7 +88,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -194,7 +193,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -206,7 +204,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -311,7 +309,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -323,7 +320,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -428,7 +425,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -440,7 +436,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/generated-macos-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/generated-macos-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -73,7 +73,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -85,7 +84,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -185,7 +184,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -197,7 +195,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -297,7 +295,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -309,7 +306,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -409,7 +406,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -421,7 +417,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										72
									
								
								.github/workflows/generated-windows-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/workflows/generated-windows-binary-conda-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -87,7 +87,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -99,7 +98,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -198,7 +197,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -210,7 +208,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -316,7 +314,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -328,7 +325,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -428,7 +425,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -440,7 +436,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -547,7 +543,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -559,7 +554,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -659,7 +654,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -671,7 +665,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -777,7 +771,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -789,7 +782,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -888,7 +881,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -900,7 +892,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1006,7 +998,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1018,7 +1009,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1118,7 +1109,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1130,7 +1120,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1237,7 +1227,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1249,7 +1238,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1349,7 +1338,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1361,7 +1349,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1467,7 +1455,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1479,7 +1466,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1578,7 +1565,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1590,7 +1576,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1696,7 +1682,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1708,7 +1693,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1808,7 +1793,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1820,7 +1804,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1927,7 +1911,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1939,7 +1922,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2039,7 +2022,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2051,7 +2033,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2157,7 +2139,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2169,7 +2150,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2268,7 +2249,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2280,7 +2260,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2386,7 +2366,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2398,7 +2377,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2498,7 +2477,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2510,7 +2488,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2617,7 +2595,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2629,7 +2606,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2729,7 +2706,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2741,7 +2717,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-master.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-master.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -86,7 +86,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -98,7 +97,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -201,7 +200,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -213,7 +211,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										72
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/workflows/generated-windows-binary-libtorch-debug-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -91,7 +91,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -103,7 +102,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -206,7 +205,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -218,7 +216,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -331,7 +329,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -343,7 +340,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -446,7 +443,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -458,7 +454,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -571,7 +567,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -583,7 +578,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -686,7 +681,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -698,7 +692,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -811,7 +805,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -823,7 +816,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -926,7 +919,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -938,7 +930,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1052,7 +1044,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1064,7 +1055,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1168,7 +1159,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1180,7 +1170,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1295,7 +1285,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1307,7 +1296,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1411,7 +1400,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1423,7 +1411,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1538,7 +1526,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1550,7 +1537,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1654,7 +1641,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1666,7 +1652,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1781,7 +1767,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1793,7 +1778,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1897,7 +1882,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1909,7 +1893,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2024,7 +2008,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2036,7 +2019,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2140,7 +2123,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2152,7 +2134,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2267,7 +2249,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2279,7 +2260,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2383,7 +2364,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2395,7 +2375,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2510,7 +2490,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2522,7 +2501,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2626,7 +2605,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2638,7 +2616,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2753,7 +2731,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2765,7 +2742,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2869,7 +2846,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2881,7 +2857,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-release-master.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/generated-windows-binary-libtorch-release-master.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -86,7 +86,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -98,7 +97,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -201,7 +200,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -213,7 +211,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										72
									
								
								.github/workflows/generated-windows-binary-libtorch-release-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/workflows/generated-windows-binary-libtorch-release-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -91,7 +91,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -103,7 +102,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -206,7 +205,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -218,7 +216,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -331,7 +329,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -343,7 +340,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -446,7 +443,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -458,7 +454,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -571,7 +567,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -583,7 +578,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -686,7 +681,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -698,7 +692,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -811,7 +805,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -823,7 +816,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -926,7 +919,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -938,7 +930,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1052,7 +1044,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1064,7 +1055,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1168,7 +1159,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1180,7 +1170,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1295,7 +1285,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1307,7 +1296,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1411,7 +1400,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1423,7 +1411,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1538,7 +1526,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1550,7 +1537,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1654,7 +1641,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1666,7 +1652,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1781,7 +1767,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1793,7 +1778,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1897,7 +1882,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1909,7 +1893,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2024,7 +2008,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2036,7 +2019,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2140,7 +2123,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2152,7 +2134,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2267,7 +2249,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2279,7 +2260,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2383,7 +2364,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2395,7 +2375,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2510,7 +2490,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2522,7 +2501,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2626,7 +2605,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2638,7 +2616,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2753,7 +2731,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2765,7 +2742,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2869,7 +2846,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2881,7 +2857,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										72
									
								
								.github/workflows/generated-windows-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/workflows/generated-windows-binary-wheel-nightly.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -87,7 +87,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -99,7 +98,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -198,7 +197,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -210,7 +208,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -316,7 +314,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -328,7 +325,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -428,7 +425,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -440,7 +436,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -547,7 +543,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -559,7 +554,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -659,7 +654,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -671,7 +665,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -777,7 +771,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -789,7 +782,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -888,7 +881,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -900,7 +892,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1006,7 +998,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1018,7 +1009,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1118,7 +1109,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1130,7 +1120,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1237,7 +1227,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1249,7 +1238,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1349,7 +1338,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1361,7 +1349,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1467,7 +1455,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1479,7 +1466,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1578,7 +1565,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1590,7 +1576,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1696,7 +1682,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1708,7 +1693,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1808,7 +1793,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1820,7 +1804,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -1927,7 +1911,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -1939,7 +1922,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2039,7 +2022,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2051,7 +2033,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2157,7 +2139,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2169,7 +2150,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2268,7 +2249,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2280,7 +2260,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2386,7 +2366,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2398,7 +2377,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2498,7 +2477,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2510,7 +2488,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2617,7 +2595,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2629,7 +2606,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
| @ -2729,7 +2706,6 @@ jobs: | |||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} |  | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           path: pytorch |           path: pytorch | ||||||
|           quiet-checkout: true |           quiet-checkout: true | ||||||
| @ -2741,7 +2717,7 @@ jobs: | |||||||
|       - name: Checkout pytorch/builder |       - name: Checkout pytorch/builder | ||||||
|         uses: malfet/checkout@silent-checkout |         uses: malfet/checkout@silent-checkout | ||||||
|         with: |         with: | ||||||
|           ref: main |           ref: release/2.0 | ||||||
|           submodules: recursive |           submodules: recursive | ||||||
|           repository: pytorch/builder |           repository: pytorch/builder | ||||||
|           path: builder |           path: builder | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							| @ -106,7 +106,7 @@ jobs: | |||||||
|     if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'skip-pr-sanity-checks') |     if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'skip-pr-sanity-checks') | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           submodules: false |           submodules: false | ||||||
|           fetch-depth: -1 |           fetch-depth: -1 | ||||||
| @ -216,7 +216,7 @@ jobs: | |||||||
|       # [see note: pytorch repo ref] |       # [see note: pytorch repo ref] | ||||||
|       # deep clone (fetch-depth 0) required, to allow us to use git log |       # deep clone (fetch-depth 0) required, to allow us to use git log | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           submodules: false |           submodules: false | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|  | |||||||
							
								
								
									
										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' }} |     if: ${{ github.repository == 'pytorch/pytorch' }} | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 1 |           fetch-depth: 1 | ||||||
|           submodules: false |           submodules: false | ||||||
|  | |||||||
							
								
								
									
										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}" |         run: echo "${TRIGGERING_WORKFLOW}" | ||||||
|  |  | ||||||
|       - name: Checkout PyTorch |       - name: Checkout PyTorch | ||||||
|         uses: pytorch/pytorch/.github/actions/checkout-pytorch@master |         uses: pytorch/pytorch/.github/actions/checkout-pytorch@release/2.0 | ||||||
|  |  | ||||||
|       - run: | |       - run: | | ||||||
|           pip3 install requests==2.26 |           pip3 install requests==2.26 | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Dockerfile
									
									
									
									
									
								
							| @ -7,11 +7,11 @@ | |||||||
| # | # | ||||||
| #       For reference: | #       For reference: | ||||||
| #           https://docs.docker.com/develop/develop-images/build_enhancements/ | #           https://docs.docker.com/develop/develop-images/build_enhancements/ | ||||||
| ARG BASE_IMAGE=ubuntu:18.04 | ARG BASE_IMAGE=ubuntu:20.04 | ||||||
| ARG PYTHON_VERSION=3.8 | ARG PYTHON_VERSION=3.8 | ||||||
|  |  | ||||||
| FROM ${BASE_IMAGE} as dev-base | FROM ${BASE_IMAGE} as dev-base | ||||||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ | ||||||
|         build-essential \ |         build-essential \ | ||||||
|         ca-certificates \ |         ca-certificates \ | ||||||
|         ccache \ |         ccache \ | ||||||
| @ -82,15 +82,16 @@ ARG TRITON_VERSION | |||||||
| ARG TARGETPLATFORM | ARG TARGETPLATFORM | ||||||
| ARG CUDA_VERSION | ARG CUDA_VERSION | ||||||
| LABEL com.nvidia.volumes.needed="nvidia_driver" | LABEL com.nvidia.volumes.needed="nvidia_driver" | ||||||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ | ||||||
|         ca-certificates \ |         ca-certificates \ | ||||||
|         libjpeg-dev \ |         libjpeg-dev \ | ||||||
|         libpng-dev |         libpng-dev \ | ||||||
|  |         && rm -rf /var/lib/apt/lists/* | ||||||
| COPY --from=conda-installs /opt/conda /opt/conda | COPY --from=conda-installs /opt/conda /opt/conda | ||||||
| RUN if test -n "${TRITON_VERSION}" -a "${TARGETPLATFORM}" != "linux/arm64"; then \ | RUN if test -n "${TRITON_VERSION}" -a "${TARGETPLATFORM}" != "linux/arm64"; then \ | ||||||
|         apt install -y --no-install-recommends gcc; \ |         DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends gcc; \ | ||||||
|  |         rm -rf /var/lib/apt/lists/*; \ | ||||||
|     fi |     fi | ||||||
| RUN rm -rf /var/lib/apt/lists/* |  | ||||||
| ENV PATH /opt/conda/bin:$PATH | ENV PATH /opt/conda/bin:$PATH | ||||||
| ENV NVIDIA_VISIBLE_DEVICES all | ENV NVIDIA_VISIBLE_DEVICES all | ||||||
| ENV NVIDIA_DRIVER_CAPABILITIES compute,utility | ENV NVIDIA_DRIVER_CAPABILITIES compute,utility | ||||||
|  | |||||||
| @ -25,6 +25,10 @@ TORCH_LIBRARY_IMPL(aten, FuncTorchVmapMode, m) { | |||||||
|   OP_DECOMPOSE(feature_dropout_); |   OP_DECOMPOSE(feature_dropout_); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void unsupportedData(const c10::OperatorHandle& op, torch::jit::Stack* stack) { | ||||||
|  |     TORCH_CHECK(false, "mutating directly with `.data` under vmap transform is not allowed."); | ||||||
|  | } | ||||||
|  |  | ||||||
| TORCH_LIBRARY_IMPL(aten, FuncTorchBatchedDecomposition, m) { | TORCH_LIBRARY_IMPL(aten, FuncTorchBatchedDecomposition, m) { | ||||||
|   OP_DECOMPOSE2(__and__, Scalar); |   OP_DECOMPOSE2(__and__, Scalar); | ||||||
|   OP_DECOMPOSE2(__and__, Tensor); |   OP_DECOMPOSE2(__and__, Tensor); | ||||||
| @ -327,6 +331,7 @@ TORCH_LIBRARY_IMPL(aten, FuncTorchBatchedDecomposition, m) { | |||||||
|   OP_DECOMPOSE2(linalg_matrix_rank, atol_rtol_tensor); |   OP_DECOMPOSE2(linalg_matrix_rank, atol_rtol_tensor); | ||||||
|   OP_DECOMPOSE2(linalg_matrix_rank, atol_rtol_float); |   OP_DECOMPOSE2(linalg_matrix_rank, atol_rtol_float); | ||||||
|  |  | ||||||
|  |   m.impl("_has_compatible_shallow_copy_type", torch::CppFunction::makeFromBoxedFunction<&unsupportedData>()); | ||||||
| } | } | ||||||
|  |  | ||||||
| }} | }} | ||||||
|  | |||||||
| @ -836,6 +836,7 @@ Tensor get_expanded_index(const Tensor& index, IntArrayRef self_size, int64_t di | |||||||
|   if (index.dim() == 0) { |   if (index.dim() == 0) { | ||||||
|     return index.expand(self_size); |     return index.expand(self_size); | ||||||
|   } |   } | ||||||
|  |   dim = maybe_wrap_dim(dim, self_size.size()); | ||||||
|  |  | ||||||
|   // setup new_index_shape as [BS, 1, ..., idx_size, ..., 1] |   // setup new_index_shape as [BS, 1, ..., idx_size, ..., 1] | ||||||
|   // to reshape index_ |   // to reshape index_ | ||||||
|  | |||||||
| @ -103,6 +103,24 @@ const char* BatchedTensorImpl::tensorimpl_type_name() const { | |||||||
|   return "BatchedTensorImpl"; |   return "BatchedTensorImpl"; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | c10::intrusive_ptr<TensorImpl> BatchedTensorImpl::shallow_copy_and_detach( | ||||||
|  |     const c10::VariableVersion& version_counter, | ||||||
|  |     bool allow_tensor_metadata_change) const { | ||||||
|  |   TORCH_CHECK(false, "accessing `data` under vmap transform is not allowed"); | ||||||
|  |   return nullptr; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | c10::intrusive_ptr<TensorImpl> BatchedTensorImpl::shallow_copy_and_detach( | ||||||
|  |     c10::VariableVersion&& version_counter, | ||||||
|  |     bool allow_tensor_metadata_change) const { | ||||||
|  |   TORCH_CHECK(false, "accessing `data` under vmap transform is not allowed"); | ||||||
|  |   return nullptr; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void BatchedTensorImpl::shallow_copy_from(const c10::intrusive_ptr<TensorImpl>& impl) { | ||||||
|  |   TORCH_CHECK(false, "mutating directly with `.data` under vmap transform is not allowed."); | ||||||
|  | } | ||||||
|  |  | ||||||
| Tensor makeBatched(const Tensor& tensor, int64_t bdim, int64_t level) { | Tensor makeBatched(const Tensor& tensor, int64_t bdim, int64_t level) { | ||||||
|   DispatchKeySet key_set = getKeysToPropagateToWrapper(tensor); |   DispatchKeySet key_set = getKeysToPropagateToWrapper(tensor); | ||||||
|   auto* batched = maybeGetBatchedImpl(tensor); |   auto* batched = maybeGetBatchedImpl(tensor); | ||||||
|  | |||||||
| @ -71,6 +71,13 @@ struct TORCH_API BatchedTensorImpl : public c10::TensorImpl { | |||||||
|   void set_size(int64_t dim, int64_t new_size) override; |   void set_size(int64_t dim, int64_t new_size) override; | ||||||
|   void set_stride(int64_t dim, int64_t new_stride) override; |   void set_stride(int64_t dim, int64_t new_stride) override; | ||||||
|   void set_storage_offset(int64_t storage_offset) override; |   void set_storage_offset(int64_t storage_offset) override; | ||||||
|  |   c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach( | ||||||
|  |     const c10::VariableVersion& version_counter, | ||||||
|  |     bool allow_tensor_metadata_change) const override; | ||||||
|  |   c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach( | ||||||
|  |       c10::VariableVersion&& version_counter, | ||||||
|  |       bool allow_tensor_metadata_change) const override; | ||||||
|  |   void shallow_copy_from(const c10::intrusive_ptr<TensorImpl>& impl) override; | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
|   bool has_storage() const override; |   bool has_storage() const override; | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -94,13 +94,12 @@ MPSDevice::MPSDevice(): _mtl_device(nil), _mtl_indexing_library(nil)  { | |||||||
|  |  | ||||||
| bool MPSDevice::isMacOS13Plus(MacOSVersion version) const { | bool MPSDevice::isMacOS13Plus(MacOSVersion version) const { | ||||||
|   id mpsCD = NSClassFromString(@"MPSGraph"); |   id mpsCD = NSClassFromString(@"MPSGraph"); | ||||||
|  |   static auto compileOptions = [[[MTLCompileOptions alloc] init] autorelease]; | ||||||
|   static bool _macos_13_0_plus = [mpsCD instancesRespondToSelector:@selector(cumulativeSumWithTensor:axis:name:)] == YES; |   static bool _macos_13_0_plus = [mpsCD instancesRespondToSelector:@selector(cumulativeSumWithTensor:axis:name:)] == YES; | ||||||
|   static bool _macos_13_1_plus = [mpsCD instancesRespondToSelector:@selector( |   static bool _macos_13_1_plus = [mpsCD instancesRespondToSelector:@selector( | ||||||
|     sampleGridWithSourceTensor:coordinateTensor:layout:normalizeCoordinates:relativeCoordinates:alignCorners:paddingMode:samplingMode:constantValue:name:)] == YES; |     sampleGridWithSourceTensor:coordinateTensor:layout:normalizeCoordinates:relativeCoordinates:alignCorners:paddingMode:samplingMode:constantValue:name:)] == YES; | ||||||
|   static bool _macos_13_2_plus = [mpsCD instancesRespondToSelector:@selector(convolution3DWithSourceTensor:weightsTensor:descriptor:name:)] == YES; |   static bool _macos_13_2_plus = [mpsCD instancesRespondToSelector:@selector(convolution3DWithSourceTensor:weightsTensor:descriptor:name:)] == YES; | ||||||
|   static bool _macos_13_3_plus = NO; |   static bool _macos_13_3_plus = [compileOptions respondsToSelector:@selector(maxTotalThreadsPerThreadgroup)] == YES; | ||||||
|   if (@available(macOS 13.3, *)) |  | ||||||
|     _macos_13_3_plus = YES; |  | ||||||
|  |  | ||||||
|   switch (version) { |   switch (version) { | ||||||
|     case MacOSVersion::MACOS_VER_13_0_PLUS:  return _macos_13_0_plus; |     case MacOSVersion::MACOS_VER_13_0_PLUS:  return _macos_13_0_plus; | ||||||
|  | |||||||
| @ -54,8 +54,6 @@ TORCH_LIBRARY_IMPL(aten, MPS, m) { | |||||||
|   m.impl("embedding_renorm_", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |   m.impl("embedding_renorm_", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); | ||||||
|   m.impl("linalg_svd", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |   m.impl("linalg_svd", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); | ||||||
|   m.impl("linalg_svd.U", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |   m.impl("linalg_svd.U", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); | ||||||
|   m.impl("_fft_c2c", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |  | ||||||
|   m.impl("_fft_r2c", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |  | ||||||
|   m.impl("im2col", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); // Used in  preprocessing by nn.Unfold |   m.impl("im2col", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); // Used in  preprocessing by nn.Unfold | ||||||
|   m.impl("col2im", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |   m.impl("col2im", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); | ||||||
|   m.impl("linalg_vector_norm", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); |   m.impl("linalg_vector_norm", torch::CppFunction::makeFromBoxedFunction<&mps_fallback>()); | ||||||
|  | |||||||
| @ -9,7 +9,6 @@ | |||||||
| #include <ATen/Functions.h> | #include <ATen/Functions.h> | ||||||
| #include <ATen/NativeFunctions.h> | #include <ATen/NativeFunctions.h> | ||||||
| #else | #else | ||||||
| #include <ATen/ops/_mps_max_pool2d.h> |  | ||||||
| #include <ATen/ops/adaptive_avg_pool1d_native.h> | #include <ATen/ops/adaptive_avg_pool1d_native.h> | ||||||
| #include <ATen/ops/adaptive_avg_pool2d.h> | #include <ATen/ops/adaptive_avg_pool2d.h> | ||||||
| #include <ATen/ops/adaptive_max_pool1d_native.h> | #include <ATen/ops/adaptive_max_pool1d_native.h> | ||||||
| @ -141,12 +140,6 @@ Tensor max_pool2d( | |||||||
|     return at::mkldnn_max_pool2d( |     return at::mkldnn_max_pool2d( | ||||||
|         self, kernel_size, stride, padding, dilation, ceil_mode); |         self, kernel_size, stride, padding, dilation, ceil_mode); | ||||||
|   } |   } | ||||||
| #ifdef USE_MPS |  | ||||||
|   if (self.is_mps()) { |  | ||||||
|     return at::_mps_max_pool2d( |  | ||||||
|         self, kernel_size, stride, padding, dilation, ceil_mode); |  | ||||||
|   } |  | ||||||
| #endif |  | ||||||
| #if defined(C10_MOBILE) | #if defined(C10_MOBILE) | ||||||
|   if(xnnpack::use_max_pool2d(self, kernel_size, padding, stride, |   if(xnnpack::use_max_pool2d(self, kernel_size, padding, stride, | ||||||
|                              dilation, ceil_mode)) { |                              dilation, ceil_mode)) { | ||||||
|  | |||||||
| @ -1428,7 +1428,7 @@ std::tuple<Tensor, Tensor, Tensor> lstm( | |||||||
|   } |   } | ||||||
| #ifdef USE_MPS | #ifdef USE_MPS | ||||||
|   if (_input.is_mps() && !bidirectional) { |   if (_input.is_mps() && !bidirectional) { | ||||||
|     std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> output = at::_lstm_mps(_input, hx, _params, has_biases, |     std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor, Tensor> output = at::_lstm_mps(_input, hx, _params, has_biases, | ||||||
|             num_layers, dropout_p, train, bidirectional, batch_first); |             num_layers, dropout_p, train, bidirectional, batch_first); | ||||||
|     std::tuple<Tensor, Tensor, Tensor> return_values = std::make_tuple(std::get<0>(output), std::get<1>(output), std::get<2>(output)); |     std::tuple<Tensor, Tensor, Tensor> return_values = std::make_tuple(std::get<0>(output), std::get<1>(output), std::get<2>(output)); | ||||||
|     return return_values; |     return return_values; | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ void spmm_reduce_kernel_impl( | |||||||
|     const Tensor& values, |     const Tensor& values, | ||||||
|     const Tensor& other_) { |     const Tensor& other_) { | ||||||
|  |  | ||||||
|   int64_t nnz = other_.numel(); |   int64_t nnz = values.numel(); | ||||||
|   if (nnz == 0) { |   if (nnz == 0) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -40,6 +40,10 @@ C10_DIAGNOSTIC_POP() | |||||||
| #include <ATen/ops/empty.h> | #include <ATen/ops/empty.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #ifdef __linux__ | ||||||
|  | #include <dlfcn.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace at { namespace native { | namespace at { namespace native { | ||||||
|  |  | ||||||
| namespace { | namespace { | ||||||
| @ -62,6 +66,22 @@ uint8_t getAlignment(const Tensor &t) { | |||||||
| } | } | ||||||
|  |  | ||||||
| cudnn_frontend::Tensor getTensorDescriptorWithTypeVirtual(const Tensor &t, const int64_t id, const uint8_t alignment, const cudnnDataType_t dataType, const at::MemoryFormat memory_format, const bool _virtual) { | cudnn_frontend::Tensor getTensorDescriptorWithTypeVirtual(const Tensor &t, const int64_t id, const uint8_t alignment, const cudnnDataType_t dataType, const at::MemoryFormat memory_format, const bool _virtual) { | ||||||
|  | #if defined(__linux__) && !defined(FBCODE_CAFFE2) && CUDNN_MAJOR == 8 && CUDNN_MINOR > 5 | ||||||
|  |   // Workaround for cudnn error handling deficiency, that results in a crash on Ubuntu-22+ | ||||||
|  |   // if `libnvrtc.so` is not found on the system, which strictly speaking is not necessary | ||||||
|  |   // for usecases below | ||||||
|  |   // See https://github.com/pytorch/pytorch/issues/97041 | ||||||
|  |   static C10_UNUSED auto cudnn_cnn_infer_handler = [] { | ||||||
|  |     void *handle = dlopen("libcudnn_cnn_infer.so.8", RTLD_LAZY); | ||||||
|  |     char *err = dlerror(); | ||||||
|  |     if (!handle) { | ||||||
|  |       TORCH_WARN("Attempt to open cnn_infer failed: handle=", handle, " error: ", err); | ||||||
|  |     } else if (err) { | ||||||
|  |       TORCH_WARN("Applied workaround for CuDNN issue, install nvrtc.so"); | ||||||
|  |     } | ||||||
|  |     return handle; | ||||||
|  |   }(); | ||||||
|  | #endif | ||||||
|   auto sizes = t.sizes(); |   auto sizes = t.sizes(); | ||||||
|   auto strides = t.strides(); |   auto strides = t.strides(); | ||||||
|   bool channels_last = memory_format == at::MemoryFormat::ChannelsLast || |   bool channels_last = memory_format == at::MemoryFormat::ChannelsLast || | ||||||
| @ -153,8 +173,9 @@ cudnn_frontend::ExecutionPlan* find(const KeyType& key) { | |||||||
|   return &(it->second); |   return &(it->second); | ||||||
| } | } | ||||||
|  |  | ||||||
| void emplace(const KeyType& key, T& results) { | void update(const KeyType& key, T& results) { | ||||||
|   std::lock_guard<std::mutex> guard(mutex); |   std::lock_guard<std::mutex> guard(mutex); | ||||||
|  |   engine_cache.erase(key); | ||||||
|   engine_cache.emplace(key, std::move(results)); |   engine_cache.emplace(key, std::move(results)); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -548,7 +569,7 @@ void try_plans(cudnn_frontend::executionPlans_t& plans, const CacheKey& key, con | |||||||
|   for (auto & plan : plans) { |   for (auto & plan : plans) { | ||||||
|     try { |     try { | ||||||
|       run_conv_plan(handle, x, y, w, plan); |       run_conv_plan(handle, x, y, w, plan); | ||||||
|       benchmark_cache.emplace(key, plan); |       benchmark_cache.update(key, plan); | ||||||
|       return; |       return; | ||||||
|     } catch (cudnn_frontend::cudnnException &e) {} catch (CuDNNError &e) {} |     } catch (cudnn_frontend::cudnnException &e) {} catch (CuDNNError &e) {} | ||||||
|       catch (c10::OutOfMemoryError &e) { |       catch (c10::OutOfMemoryError &e) { | ||||||
| @ -562,7 +583,7 @@ void try_plans_fused(cudnn_frontend::executionPlans_t& plans, const CacheKeyFuse | |||||||
|   for (auto & plan : plans) { |   for (auto & plan : plans) { | ||||||
|     try { |     try { | ||||||
|       run_conv_plan_fused(handle, x, y, w, z, b, plan); |       run_conv_plan_fused(handle, x, y, w, z, b, plan); | ||||||
|       benchmark_cache_fused.emplace(key, plan); |       benchmark_cache_fused.update(key, plan); | ||||||
|       return; |       return; | ||||||
|     } catch (cudnn_frontend::cudnnException &e) {} catch (CuDNNError &e) {} |     } catch (cudnn_frontend::cudnnException &e) {} catch (CuDNNError &e) {} | ||||||
|       catch (c10::OutOfMemoryError &e) { |       catch (c10::OutOfMemoryError &e) { | ||||||
| @ -583,7 +604,7 @@ bool try_configs(cudnn_frontend::EngineConfigList& configs, const std::string& o | |||||||
|         continue; |         continue; | ||||||
|       } |       } | ||||||
|       run_conv_plan(handle, x, y, w, plan); |       run_conv_plan(handle, x, y, w, plan); | ||||||
|       benchmark_cache.emplace(key, plan); |       benchmark_cache.update(key, plan); | ||||||
|       return true; |       return true; | ||||||
|     } catch (cudnn_frontend::cudnnException &e) {} catch(CuDNNError &e) {} |     } catch (cudnn_frontend::cudnnException &e) {} catch(CuDNNError &e) {} | ||||||
|       catch (c10::OutOfMemoryError &e) { |       catch (c10::OutOfMemoryError &e) { | ||||||
| @ -604,7 +625,7 @@ bool try_configs_fused(cudnn_frontend::EngineConfigList& configs, const std::str | |||||||
|         continue; |         continue; | ||||||
|       } |       } | ||||||
|       run_conv_plan_fused(handle, x, y, w, z, b, plan); |       run_conv_plan_fused(handle, x, y, w, z, b, plan); | ||||||
|       benchmark_cache_fused.emplace(key, plan); |       benchmark_cache_fused.update(key, plan); | ||||||
|       return true; |       return true; | ||||||
|     } catch (cudnn_frontend::cudnnException &e) {} catch(CuDNNError &e) {} |     } catch (cudnn_frontend::cudnnException &e) {} catch(CuDNNError &e) {} | ||||||
|       catch (c10::OutOfMemoryError &e) { |       catch (c10::OutOfMemoryError &e) { | ||||||
|  | |||||||
| @ -138,4 +138,7 @@ typedef NS_ENUM(NSUInteger, MPSGraphResizeNearestRoundingMode) | |||||||
|                                      nearestRoundingMode:(MPSGraphResizeNearestRoundingMode) nearestRoundingMode |                                      nearestRoundingMode:(MPSGraphResizeNearestRoundingMode) nearestRoundingMode | ||||||
|                                            constantValue:(double) constantValue |                                            constantValue:(double) constantValue | ||||||
|                                                     name:(NSString * _Nullable) name; |                                                     name:(NSString * _Nullable) name; | ||||||
|  | - (MPSGraphTensor * _Nonnull) truncateWithTensor:(MPSGraphTensor * _Nonnull) tensor | ||||||
|  |                                             name:(NSString * _Nullable) name; | ||||||
|  |  | ||||||
| @end | @end | ||||||
|  | |||||||
| @ -265,7 +265,7 @@ Placeholder::Placeholder(MPSGraphTensor* mpsGraphTensor, const Tensor& src, MPSS | |||||||
|   id<MTLBuffer> srcBuf = getMTLBufferStorage(src); |   id<MTLBuffer> srcBuf = getMTLBufferStorage(src); | ||||||
|   bool sliceViewTensor = canSliceViewTensor(src, mpsShape); |   bool sliceViewTensor = canSliceViewTensor(src, mpsShape); | ||||||
|   // a view tensor could be contiguous (e.g., slice ops) or non-contiguous (e.g., transpose()) |   // a view tensor could be contiguous (e.g., slice ops) or non-contiguous (e.g., transpose()) | ||||||
|   if ((!src.is_contiguous() || (src.is_view() && src.storage_offset() && !sliceViewTensor)) && gatherTensorData) { |   if ((!src.is_contiguous() || (src.storage_offset() && !sliceViewTensor)) && gatherTensorData) { | ||||||
|      Tensor emptyShell = Tensor(); |      Tensor emptyShell = Tensor(); | ||||||
|     // use "_tensor" from Placeholder to retain view's output during its usage in other ops |     // use "_tensor" from Placeholder to retain view's output during its usage in other ops | ||||||
|     _tensor = gatherViewTensor(src, emptyShell); |     _tensor = gatherViewTensor(src, emptyShell); | ||||||
| @ -289,7 +289,7 @@ Placeholder::Placeholder(MPSGraphTensor* mpsGraphTensor, const Tensor& src, MPSS | |||||||
|   } else { |   } else { | ||||||
|     if (!mpsShape) { |     if (!mpsShape) { | ||||||
|       mpsShape = getMPSShape(_tensor); |       mpsShape = getMPSShape(_tensor); | ||||||
|   } |     } | ||||||
|  |  | ||||||
|     _value = [[[MPSGraphTensorData alloc] initWithMTLBuffer:srcBuf |     _value = [[[MPSGraphTensorData alloc] initWithMTLBuffer:srcBuf | ||||||
|                                                       shape:mpsShape |                                                       shape:mpsShape | ||||||
|  | |||||||
| @ -311,11 +311,25 @@ TORCH_IMPL_FUNC(log_softmax_mps_out) ( | |||||||
|  |  | ||||||
|           MPSGraphTensor* inputTensor = mpsGraphRankedPlaceHolder(mpsGraph, self); |           MPSGraphTensor* inputTensor = mpsGraphRankedPlaceHolder(mpsGraph, self); | ||||||
|  |  | ||||||
|           MPSGraphTensor* softmaxTensor = [mpsGraph softMaxWithTensor:inputTensor |           MPSGraphTensor* maximumsTensor = [mpsGraph reductionMaximumWithTensor:inputTensor | ||||||
|                                                                  axis:dim |                                                                             axis:dim | ||||||
|                                                                  name:nil]; |                                                                             name:nil]; | ||||||
|           MPSGraphTensor* outputTensor = [mpsGraph logarithmWithTensor:softmaxTensor |           MPSGraphTensor* inputTensorSubMax = [mpsGraph subtractionWithPrimaryTensor:inputTensor | ||||||
|                                                                   name:nil]; |                                                                      secondaryTensor:maximumsTensor | ||||||
|  |                                                                                 name:nil]; | ||||||
|  |           MPSGraphTensor* exponentTensor = [mpsGraph exponentWithTensor:inputTensorSubMax | ||||||
|  |                                                                    name:nil]; | ||||||
|  |  | ||||||
|  |           MPSGraphTensor* exponentTensorReduced = [mpsGraph reductionSumWithTensor:exponentTensor | ||||||
|  |                                                                               axis:dim | ||||||
|  |                                                                               name:nil]; | ||||||
|  |  | ||||||
|  |           MPSGraphTensor* logSumExpTensor = [mpsGraph logarithmWithTensor:exponentTensorReduced | ||||||
|  |                                                                     name:nil]; | ||||||
|  |  | ||||||
|  |           MPSGraphTensor* outputTensor = [mpsGraph subtractionWithPrimaryTensor:inputTensorSubMax | ||||||
|  |                                                                        secondaryTensor:logSumExpTensor | ||||||
|  |                                                                                   name:nil]; | ||||||
|  |  | ||||||
|           newCachedGraph->inputTensor_ = inputTensor; |           newCachedGraph->inputTensor_ = inputTensor; | ||||||
|           newCachedGraph->outputTensor_ = outputTensor; |           newCachedGraph->outputTensor_ = outputTensor; | ||||||
| @ -1208,8 +1222,7 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|   { |   { | ||||||
|     CachedGraph(MPSGraph *graph) : MPSCachedGraph(graph) {} |     CachedGraph(MPSGraph *graph) : MPSCachedGraph(graph) {} | ||||||
|     MPSGraphTensor *gradOutputTensor_ = nil; |     MPSGraphTensor *gradOutputTensor_ = nil; | ||||||
|     MPSGraphTensor *inputTensor_ = nil; |     MPSGraphTensor *selfOrResultTensor_ = nil; | ||||||
|     MPSGraphTensor *resultTensor_ = nil; |  | ||||||
|     MPSGraphTensor *gradInputTensor_ = nil; |     MPSGraphTensor *gradInputTensor_ = nil; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
| @ -1218,7 +1231,7 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|   MPSStream* stream = getCurrentMPSStream(); |   MPSStream* stream = getCurrentMPSStream(); | ||||||
|  |  | ||||||
|   @autoreleasepool { |   @autoreleasepool { | ||||||
|     string key = "elu_backward_out_mps:" + getTensorsStringKey({grad_output}) + ":" + |     string key = "elu_backward_out_mps:" + getTensorsStringKey({grad_output, self_or_result}) + ":" + | ||||||
|                                                  to_string(alpha.to<double>()) + ":" + |                                                  to_string(alpha.to<double>()) + ":" + | ||||||
|                                                  to_string(scale.to<double>()) + ":" + |                                                  to_string(scale.to<double>()) + ":" + | ||||||
|                                                  to_string(input_scale.to<double>()) + ":" + |                                                  to_string(input_scale.to<double>()) + ":" + | ||||||
| @ -1235,18 +1248,14 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|           newCachedGraph = new CachedGraph(mpsGraph); |           newCachedGraph = new CachedGraph(mpsGraph); | ||||||
|  |  | ||||||
|           MPSGraphTensor* gradOutputTensor = mpsGraphRankedPlaceHolder(mpsGraph, grad_output); |           MPSGraphTensor* gradOutputTensor = mpsGraphRankedPlaceHolder(mpsGraph, grad_output); | ||||||
|  |           MPSGraphTensor* selfOrResultTensor = mpsGraphRankedPlaceHolder(mpsGraph, self_or_result); | ||||||
|           MPSGraphTensor* inputTensor = nil; |  | ||||||
|           MPSGraphTensor* resultTensor = nil; |  | ||||||
|  |  | ||||||
|           MPSGraphTensor* lessThanZeroGradTensor = nil; |           MPSGraphTensor* lessThanZeroGradTensor = nil; | ||||||
|  |  | ||||||
|           if(is_result) { |           if(is_result) { | ||||||
|             resultTensor = mpsGraphRankedPlaceHolder(mpsGraph, self_or_result); |  | ||||||
|             MPSGraphTensor* alphaTensor = [mpsGraph constantWithScalar:alpha.to<double>() |             MPSGraphTensor* alphaTensor = [mpsGraph constantWithScalar:alpha.to<double>() | ||||||
|                                                                shape:@[@1] |                                                                shape:@[@1] | ||||||
|                                                             dataType:getMPSDataType(grad_output.scalar_type())]; |                                                             dataType:getMPSDataType(grad_output.scalar_type())]; | ||||||
|             MPSGraphTensor* resultPlusAlphaTensor = [mpsGraph additionWithPrimaryTensor:resultTensor |             MPSGraphTensor* resultPlusAlphaTensor = [mpsGraph additionWithPrimaryTensor:selfOrResultTensor | ||||||
|                                                                         secondaryTensor:alphaTensor |                                                                         secondaryTensor:alphaTensor | ||||||
|                                                                                    name:nil]; |                                                                                    name:nil]; | ||||||
|             auto constMul = scale.to<double>() * input_scale.to<double>(); |             auto constMul = scale.to<double>() * input_scale.to<double>(); | ||||||
| @ -1258,11 +1267,10 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|                                                                           name:nil]; |                                                                           name:nil]; | ||||||
|           } |           } | ||||||
|           else { |           else { | ||||||
|             inputTensor = mpsGraphRankedPlaceHolder(mpsGraph, self_or_result); |  | ||||||
|             MPSGraphTensor* inputScaleTensor = [mpsGraph constantWithScalar:input_scale.to<double>() |             MPSGraphTensor* inputScaleTensor = [mpsGraph constantWithScalar:input_scale.to<double>() | ||||||
|                                                                     shape:@[@1] |                                                                     shape:@[@1] | ||||||
|                                                                  dataType:getMPSDataType(grad_output.scalar_type())]; |                                                                  dataType:getMPSDataType(grad_output.scalar_type())]; | ||||||
|             MPSGraphTensor* scaledInputTensor = [mpsGraph multiplicationWithPrimaryTensor:inputTensor |             MPSGraphTensor* scaledInputTensor = [mpsGraph multiplicationWithPrimaryTensor:selfOrResultTensor | ||||||
|                                                                           secondaryTensor:inputScaleTensor |                                                                           secondaryTensor:inputScaleTensor | ||||||
|                                                                                      name:nil]; |                                                                                      name:nil]; | ||||||
|             MPSGraphTensor* expTensor = [mpsGraph exponentWithTensor:scaledInputTensor |             MPSGraphTensor* expTensor = [mpsGraph exponentWithTensor:scaledInputTensor | ||||||
| @ -1282,7 +1290,7 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|           MPSGraphTensor* zeroTensor = [mpsGraph constantWithScalar:0.0f |           MPSGraphTensor* zeroTensor = [mpsGraph constantWithScalar:0.0f | ||||||
|                                                               shape:@[@1] |                                                               shape:@[@1] | ||||||
|                                                            dataType:getMPSDataType(grad_output.scalar_type())]; |                                                            dataType:getMPSDataType(grad_output.scalar_type())]; | ||||||
|           MPSGraphTensor* predicateTensor = [mpsGraph greaterThanWithPrimaryTensor:inputTensor |           MPSGraphTensor* predicateTensor = [mpsGraph greaterThanWithPrimaryTensor:selfOrResultTensor | ||||||
|                                                                    secondaryTensor:zeroTensor |                                                                    secondaryTensor:zeroTensor | ||||||
|                                                                               name:nil]; |                                                                               name:nil]; | ||||||
|           MPSGraphTensor* gradTensor = [mpsGraph selectWithPredicateTensor:predicateTensor |           MPSGraphTensor* gradTensor = [mpsGraph selectWithPredicateTensor:predicateTensor | ||||||
| @ -1294,8 +1302,7 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|                                                                                  name:nil]; |                                                                                  name:nil]; | ||||||
|  |  | ||||||
|           newCachedGraph->gradOutputTensor_ = gradOutputTensor; |           newCachedGraph->gradOutputTensor_ = gradOutputTensor; | ||||||
|           newCachedGraph->inputTensor_ = inputTensor; |           newCachedGraph->selfOrResultTensor_ = selfOrResultTensor; | ||||||
|           newCachedGraph->resultTensor_ = resultTensor; |  | ||||||
|           newCachedGraph->gradInputTensor_ = gradInputTensor; |           newCachedGraph->gradInputTensor_ = gradInputTensor; | ||||||
|         } |         } | ||||||
|         return newCachedGraph; |         return newCachedGraph; | ||||||
| @ -1304,28 +1311,14 @@ TORCH_IMPL_FUNC(elu_backward_out_mps) ( | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     Placeholder gradOutputPlaceholder = Placeholder(cachedGraph->gradOutputTensor_, grad_output, nil, executeGatherOp); |     Placeholder gradOutputPlaceholder = Placeholder(cachedGraph->gradOutputTensor_, grad_output, nil, executeGatherOp); | ||||||
|     Placeholder selfPlaceholder = Placeholder(); |     Placeholder selfOrResultPlaceholder = Placeholder(cachedGraph->selfOrResultTensor_, self_or_result, nil, executeGatherOp); | ||||||
|     Placeholder resultPlaceholder = Placeholder(); |  | ||||||
|     if(is_result) |  | ||||||
|       resultPlaceholder = Placeholder(cachedGraph->resultTensor_, self_or_result, nil, executeGatherOp); |  | ||||||
|     else |  | ||||||
|       selfPlaceholder = Placeholder(cachedGraph->inputTensor_, self_or_result, nil, executeGatherOp); |  | ||||||
|     Placeholder gradInputPlaceholder = Placeholder(cachedGraph->gradInputTensor_, out.has_storage() ? out : grad_input, nil, false); |     Placeholder gradInputPlaceholder = Placeholder(cachedGraph->gradInputTensor_, out.has_storage() ? out : grad_input, nil, false); | ||||||
|  |  | ||||||
|     // Create dictionary of inputs and outputs |     // Create dictionary of inputs and outputs | ||||||
|     NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* feeds = nil; |     NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* feeds = @{ | ||||||
|  |       gradOutputPlaceholder.getMPSGraphTensor() : gradOutputPlaceholder.getMPSGraphTensorData(), | ||||||
|     if(is_result) |       selfOrResultPlaceholder.getMPSGraphTensor() : selfOrResultPlaceholder.getMPSGraphTensorData() | ||||||
|       feeds = @{ |     }; | ||||||
|         gradOutputPlaceholder.getMPSGraphTensor() : gradOutputPlaceholder.getMPSGraphTensorData(), |  | ||||||
|         resultPlaceholder.getMPSGraphTensor() : resultPlaceholder.getMPSGraphTensorData() |  | ||||||
|       }; |  | ||||||
|     else |  | ||||||
|       feeds = @{ |  | ||||||
|         gradOutputPlaceholder.getMPSGraphTensor() : gradOutputPlaceholder.getMPSGraphTensorData(), |  | ||||||
|         selfPlaceholder.getMPSGraphTensor() : selfPlaceholder.getMPSGraphTensorData() |  | ||||||
|       }; |  | ||||||
|  |  | ||||||
|     NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* results = @{ |     NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* results = @{ | ||||||
|       gradInputPlaceholder.getMPSGraphTensor() : gradInputPlaceholder.getMPSGraphTensorData() |       gradInputPlaceholder.getMPSGraphTensor() : gradInputPlaceholder.getMPSGraphTensorData() | ||||||
|     }; |     }; | ||||||
| @ -1840,7 +1833,7 @@ std::tuple<Tensor, Tensor> prelu_backward_mps(const Tensor& grad_output, const T | |||||||
|     using namespace mps; |     using namespace mps; | ||||||
|  |  | ||||||
|     Tensor grad_input = at::empty_like(self, self.suggest_memory_format()); |     Tensor grad_input = at::empty_like(self, self.suggest_memory_format()); | ||||||
|     Tensor weight_grad = at::empty_like(weight_, at::MemoryFormat::Contiguous); |     Tensor weight_grad = at::empty_like(self, at::MemoryFormat::Contiguous); | ||||||
|     if (grad_output.numel() == 0) { |     if (grad_output.numel() == 0) { | ||||||
|       return std::tuple<Tensor, Tensor>{grad_input, weight_grad}; |       return std::tuple<Tensor, Tensor>{grad_input, weight_grad}; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -177,10 +177,6 @@ void div_mode_template(const Tensor& self, const Tensor& other, | |||||||
|                        c10::optional<c10::string_view> rounding_mode, |                        c10::optional<c10::string_view> rounding_mode, | ||||||
|                        const Tensor& output, const string op_name) |                        const Tensor& output, const string op_name) | ||||||
| { | { | ||||||
|   if(rounding_mode.has_value() && *rounding_mode == "floor"){ |  | ||||||
|     TORCH_CHECK(self.scalar_type() != ScalarType::Long, |  | ||||||
|                 "MPS: does not support floor_divide op with int64 input"); |  | ||||||
|   } |  | ||||||
|   BinaryOpBlock div_mode_op_block = ^BinaryOpFn(cachedGraph, primaryCastTensor, secondaryCastTensor) { |   BinaryOpBlock div_mode_op_block = ^BinaryOpFn(cachedGraph, primaryCastTensor, secondaryCastTensor) { | ||||||
|     MPSGraph* mpsGraph = cachedGraph->graph(); |     MPSGraph* mpsGraph = cachedGraph->graph(); | ||||||
|     bool isFloatInput = ([primaryCastTensor dataType] & MPSDataTypeFloatBit) != 0; |     bool isFloatInput = ([primaryCastTensor dataType] & MPSDataTypeFloatBit) != 0; | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ Tensor& fill_scalar_mps_impl(Tensor& self, const Scalar& value) { | |||||||
|   } |   } | ||||||
|   Tensor output = self; |   Tensor output = self; | ||||||
|   bool needsCopyToOutput = false; |   bool needsCopyToOutput = false; | ||||||
|   if (!self.is_contiguous()) { |   if (!self.is_contiguous() || self.storage_offset()) { | ||||||
|     output = empty_mps(self.sizes(), self.scalar_type(), c10::nullopt, kMPS); |     output = empty_mps(self.sizes(), self.scalar_type(), c10::nullopt, kMPS); | ||||||
|     needsCopyToOutput = true; |     needsCopyToOutput = true; | ||||||
|   } |   } | ||||||
| @ -89,7 +89,7 @@ bool fill_mps_tensor_(Tensor& self, uint8_t value) { | |||||||
|   if (self.is_contiguous()) { |   if (self.is_contiguous()) { | ||||||
|     MPSStream* stream = getCurrentMPSStream(); |     MPSStream* stream = getCurrentMPSStream(); | ||||||
|     auto storage_byte_offset = self.storage_offset() * self.itemsize(); |     auto storage_byte_offset = self.storage_offset() * self.itemsize(); | ||||||
|     stream->fill(mps::getMTLBufferStorage(self), 0, self.nbytes(), storage_byte_offset); |     stream->fill(mps::getMTLBufferStorage(self), 0, self.storage().nbytes(), storage_byte_offset); | ||||||
|     return true; |     return true; | ||||||
|   } |   } | ||||||
|   return false; |   return false; | ||||||
|  | |||||||
| @ -56,15 +56,17 @@ void fill_conv_desc(MPSGraphConvolution2DOpDescriptor* descriptor_, | |||||||
|   descriptor_.groups = groups; |   descriptor_.groups = groups; | ||||||
| } | } | ||||||
|  |  | ||||||
| Tensor _mps_convolution( | Tensor _mps_convolution_impl( | ||||||
|     const Tensor& input_t, |     const Tensor& input_t, | ||||||
|     const Tensor& weight_t, |     const Tensor& weight_t, | ||||||
|     const c10::optional<Tensor>& bias_opt, |     const c10::optional<Tensor>& bias_opt, | ||||||
|     IntArrayRef padding, |     IntArrayRef padding, | ||||||
|     IntArrayRef stride, |     IntArrayRef stride, | ||||||
|     IntArrayRef dilation, |     IntArrayRef dilation, | ||||||
|     int64_t groups) { |     int64_t groups, | ||||||
|  |     c10::optional<IntArrayRef> input_shape) { | ||||||
|   TORCH_CHECK(input_t.dim() < 5, "Conv3D is not supported on MPS"); |   TORCH_CHECK(input_t.dim() < 5, "Conv3D is not supported on MPS"); | ||||||
|  |   TORCH_CHECK(isFloatingType(input_t.scalar_type()), "Convolution is supported only for Floating types"); | ||||||
|  |  | ||||||
|   namespace native_mps = at::native::mps; |   namespace native_mps = at::native::mps; | ||||||
|   CheckedFrom c = "mps_convolution"; |   CheckedFrom c = "mps_convolution"; | ||||||
| @ -83,6 +85,8 @@ Tensor _mps_convolution( | |||||||
|   auto memory_format = input_t.suggest_memory_format(); |   auto memory_format = input_t.suggest_memory_format(); | ||||||
|   bool is_channels_last = (memory_format == at::MemoryFormat::ChannelsLast); |   bool is_channels_last = (memory_format == at::MemoryFormat::ChannelsLast); | ||||||
|   auto output_t = at::empty( |   auto output_t = at::empty( | ||||||
|  |                     input_shape.has_value() ? | ||||||
|  |                     input_shape.value() : | ||||||
|                     conv_output_size(input->sizes(), weight->sizes(), |                     conv_output_size(input->sizes(), weight->sizes(), | ||||||
|                                      padding, stride, dilation), |                                      padding, stride, dilation), | ||||||
|                     input->scalar_type(), |                     input->scalar_type(), | ||||||
| @ -237,21 +241,30 @@ Tensor _mps_convolution( | |||||||
|   return *output; |   return *output; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | Tensor _mps_convolution( | ||||||
|  |     const Tensor& input_t, | ||||||
|  |     const Tensor& weight_t, | ||||||
|  |     const c10::optional<Tensor>& bias_opt, | ||||||
|  |     IntArrayRef padding, | ||||||
|  |     IntArrayRef stride, | ||||||
|  |     IntArrayRef dilation, | ||||||
|  |     int64_t groups) { | ||||||
|  |     return _mps_convolution_impl(input_t, weight_t, bias_opt, padding, stride, dilation, groups, c10::nullopt); | ||||||
|  | } | ||||||
|  |  | ||||||
| Tensor mps_convolution_backward_input( | Tensor mps_convolution_backward_input( | ||||||
|     IntArrayRef input_size, const Tensor& grad_output_, const Tensor& weight_, |     IntArrayRef input_size, const Tensor& grad_output_t, const Tensor& weight_t, | ||||||
|     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, bool bias_defined) { |     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, bool bias_defined) { | ||||||
|   namespace native_mps = at::native::mps; |   namespace native_mps = at::native::mps; | ||||||
|   using namespace mps; |   using namespace mps; | ||||||
|  |   TORCH_CHECK(isFloatingType(grad_output_t.scalar_type()), "Convolution is supported only for Floating types"); | ||||||
|   CheckedFrom c = "mps_convolution_backward_input"; |   CheckedFrom c = "mps_convolution_backward_input"; | ||||||
|   TensorArg grad_output{ grad_output_, "grad_output", 1 }, |   TensorArg grad_output{ grad_output_t, "grad_output", 1 }, | ||||||
|             weight{ weight_, "weight", 2 }; |             weight{ weight_t, "weight", 2 }; | ||||||
|   checkAllSameType(c, {grad_output, weight}); |   checkAllSameType(c, {grad_output, weight}); | ||||||
|   checkAllSameGPU(c, {grad_output, weight}); |   checkAllSameGPU(c, {grad_output, weight}); | ||||||
|   auto memory_format = grad_output_.suggest_memory_format(); |   auto memory_format = grad_output_t.suggest_memory_format(); | ||||||
|   bool is_channels_last = (memory_format == at::MemoryFormat::ChannelsLast); |   bool is_channels_last = (memory_format == at::MemoryFormat::ChannelsLast); | ||||||
|   Tensor grad_output_t = grad_output_.contiguous(memory_format); |  | ||||||
|   Tensor weight_t = weight_.contiguous(memory_format); |  | ||||||
|   MPSShape* weightShape = getMPSShape(weight_); |  | ||||||
|   auto grad_input_t = at::empty( input_size, grad_output_t.options(), c10::nullopt); |   auto grad_input_t = at::empty( input_size, grad_output_t.options(), c10::nullopt); | ||||||
|  |  | ||||||
|   // Avoid "grad_input" when this is being used as transposed convolution |   // Avoid "grad_input" when this is being used as transposed convolution | ||||||
| @ -327,10 +340,10 @@ Tensor mps_convolution_backward_input( | |||||||
|           } |           } | ||||||
|  |  | ||||||
|           MPSGraphTensor* gradOutputTensor = native_mps::mpsGraphRankedPlaceHolder(mpsGraph, native_mps::getMPSScalarType(grad_output_t.scalar_type()), gradOutputShape); |           MPSGraphTensor* gradOutputTensor = native_mps::mpsGraphRankedPlaceHolder(mpsGraph, native_mps::getMPSScalarType(grad_output_t.scalar_type()), gradOutputShape); | ||||||
|           MPSGraphTensor* weightTensor = native_mps::mpsGraphRankedPlaceHolder(mpsGraph, native_mps::getMPSScalarType(weight_t.scalar_type()), weightShape); |           MPSGraphTensor* weightTensor = native_mps::mpsGraphRankedPlaceHolder(mpsGraph, weight_t); | ||||||
|  |  | ||||||
|           MPSGraphTensor *gradOutputTensorTranspose = gradOutputTensor; |           MPSGraphTensor *gradOutputTensorTranspose = gradOutputTensor; | ||||||
|           if (is_channels_last && grad_output_t.is_contiguous() && !grad_output_t.is_view()) { |           if (is_channels_last) { | ||||||
|             gradOutputTensorTranspose = mps::convertNHWCtoNCHW(mpsGraph, gradOutputTensorTranspose); |             gradOutputTensorTranspose = mps::convertNHWCtoNCHW(mpsGraph, gradOutputTensorTranspose); | ||||||
|           } |           } | ||||||
|           MPSGraphTensor* gradInputTensor; |           MPSGraphTensor* gradInputTensor; | ||||||
| @ -359,7 +372,7 @@ Tensor mps_convolution_backward_input( | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     auto gradOutputPlaceholder = Placeholder(cachedGraph->gradOutputTensor_, grad_output_t, gradOutputShape); |     auto gradOutputPlaceholder = Placeholder(cachedGraph->gradOutputTensor_, grad_output_t, gradOutputShape); | ||||||
|     auto weightsPlaceholder = Placeholder(cachedGraph->weightTensor_, weight_t, weightShape); |     auto weightsPlaceholder = Placeholder(cachedGraph->weightTensor_, weight_t); | ||||||
|     auto outputPlaceholder = Placeholder(cachedGraph->gradInputTensor_, *grad_input); |     auto outputPlaceholder = Placeholder(cachedGraph->gradInputTensor_, *grad_input); | ||||||
|  |  | ||||||
|     NSDictionary<MPSGraphTensor *, MPSGraphTensorData *> *feeds = @{ |     NSDictionary<MPSGraphTensor *, MPSGraphTensorData *> *feeds = @{ | ||||||
| @ -377,17 +390,15 @@ Tensor mps_convolution_backward_input( | |||||||
| } | } | ||||||
|  |  | ||||||
| Tensor mps_convolution_backward_weights( | Tensor mps_convolution_backward_weights( | ||||||
|     IntArrayRef weight_size, const Tensor& grad_output_, const Tensor& input_, |     IntArrayRef weight_size, const Tensor& grad_output_t, const Tensor& input_t, | ||||||
|     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, bool bias_defined) { |     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, bool bias_defined) { | ||||||
|   namespace native_mps = at::native::mps; |   namespace native_mps = at::native::mps; | ||||||
|   using namespace mps; |   using namespace mps; | ||||||
|  |   TORCH_CHECK(isFloatingType(grad_output_t.scalar_type()), "Convolution is supported only for Floating types"); | ||||||
|   CheckedFrom c = "mps_convolution_backward_weights"; |   CheckedFrom c = "mps_convolution_backward_weights"; | ||||||
|   auto memory_format = input_.suggest_memory_format(); |   auto memory_format = grad_output_t.suggest_memory_format(); | ||||||
|   bool is_channels_last = (memory_format == at::MemoryFormat::ChannelsLast); |   bool is_channels_last = (memory_format == at::MemoryFormat::ChannelsLast); | ||||||
|  |  | ||||||
|   auto grad_output_t = grad_output_.to(memory_format); |  | ||||||
|   auto input_t = input_.to(memory_format); |  | ||||||
|  |  | ||||||
|   MPSShape* gradOutputShape = mps::getMPSShape(grad_output_t, memory_format); |   MPSShape* gradOutputShape = mps::getMPSShape(grad_output_t, memory_format); | ||||||
|  |  | ||||||
|   // For uniformity with everything else, although it seems grad_weight |   // For uniformity with everything else, although it seems grad_weight | ||||||
| @ -475,7 +486,7 @@ Tensor mps_convolution_backward_weights( | |||||||
|           MPSGraphTensor* inputTensor = native_mps::mpsGraphRankedPlaceHolder(mpsGraph, input_t); |           MPSGraphTensor* inputTensor = native_mps::mpsGraphRankedPlaceHolder(mpsGraph, input_t); | ||||||
|  |  | ||||||
|           MPSGraphTensor *gradOutputTensorTranspose = gradOutputTensor; |           MPSGraphTensor *gradOutputTensorTranspose = gradOutputTensor; | ||||||
|           if (is_channels_last && grad_output_t.is_contiguous() && !grad_output_t.is_view()) { |           if (is_channels_last) { | ||||||
|             gradOutputTensorTranspose = mps::convertNHWCtoNCHW(mpsGraph, gradOutputTensorTranspose); |             gradOutputTensorTranspose = mps::convertNHWCtoNCHW(mpsGraph, gradOutputTensorTranspose); | ||||||
|           } |           } | ||||||
|  |  | ||||||
| @ -525,12 +536,9 @@ Tensor mps_convolution_backward_weights( | |||||||
| } | } | ||||||
|  |  | ||||||
| std::tuple<at::Tensor,at::Tensor,at::Tensor> mps_convolution_backward( | std::tuple<at::Tensor,at::Tensor,at::Tensor> mps_convolution_backward( | ||||||
|     const at::Tensor& input, const at::Tensor& grad_output_t, const at::Tensor& weight, |     const at::Tensor& input, const at::Tensor& grad_output, const at::Tensor& weight, | ||||||
|     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, |     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, | ||||||
|     std::array<bool,3> output_mask) { |     std::array<bool,3> output_mask) { | ||||||
|  |  | ||||||
|   Tensor grad_output = grad_output_t.contiguous(input.suggest_memory_format()); |  | ||||||
|  |  | ||||||
|   Tensor grad_input, grad_weight, grad_bias; |   Tensor grad_input, grad_weight, grad_bias; | ||||||
|   if (input.numel() == 0) { |   if (input.numel() == 0) { | ||||||
|     if (output_mask[0]) { |     if (output_mask[0]) { | ||||||
| @ -576,10 +584,10 @@ Tensor _mps_convolution_transpose( | |||||||
| Tensor mps_convolution_transpose_backward_input( | Tensor mps_convolution_transpose_backward_input( | ||||||
|     const Tensor& grad_output_t, const Tensor& weight_t, |     const Tensor& grad_output_t, const Tensor& weight_t, | ||||||
|     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, |     IntArrayRef padding, IntArrayRef stride, IntArrayRef dilation, | ||||||
|     int64_t groups) |     int64_t groups, IntArrayRef input_shape) | ||||||
| { | { | ||||||
|   return at::_mps_convolution( |   return _mps_convolution_impl( | ||||||
|     grad_output_t, weight_t, c10::nullopt, padding, stride, dilation, groups); |     grad_output_t, weight_t, c10::nullopt, padding, stride, dilation, groups, input_shape); | ||||||
| } | } | ||||||
|  |  | ||||||
| Tensor mps_convolution_transpose_backward_weight( | Tensor mps_convolution_transpose_backward_weight( | ||||||
| @ -595,15 +603,12 @@ Tensor mps_convolution_transpose_backward_weight( | |||||||
|  |  | ||||||
|  |  | ||||||
| std::tuple<Tensor,Tensor> mps_convolution_transpose_backward( | std::tuple<Tensor,Tensor> mps_convolution_transpose_backward( | ||||||
|     const Tensor& input, const Tensor& grad_output_t, const Tensor& weight, |     const Tensor& input, const Tensor& grad_output, const Tensor& weight, | ||||||
|     IntArrayRef padding, IntArrayRef output_padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, |     IntArrayRef padding, IntArrayRef output_padding, IntArrayRef stride, IntArrayRef dilation, int64_t groups, | ||||||
|     std::array<bool,2> output_mask) { |     std::array<bool,2> output_mask) { | ||||||
|  |  | ||||||
|   Tensor grad_output = grad_output_t.contiguous(input.suggest_memory_format()); |  | ||||||
|  |  | ||||||
|   Tensor grad_input, grad_weight; |   Tensor grad_input, grad_weight; | ||||||
|   if (output_mask[0]) { |   if (output_mask[0]) { | ||||||
|     grad_input = mps_convolution_transpose_backward_input(grad_output, weight, padding, stride, dilation, groups); |     grad_input = mps_convolution_transpose_backward_input(grad_output, weight, padding, stride, dilation, groups, input.sizes()); | ||||||
|   } |   } | ||||||
|   if (output_mask[1]) { |   if (output_mask[1]) { | ||||||
|     grad_weight = mps_convolution_transpose_backward_weight(weight.sizes(), grad_output, input, padding, stride, dilation, groups); |     grad_weight = mps_convolution_transpose_backward_weight(weight.sizes(), grad_output, input, padding, stride, dilation, groups); | ||||||
|  | |||||||
| @ -251,8 +251,11 @@ static at::Tensor& copy_kernel_mps(at::Tensor& dst_, const at::Tensor& src_, boo | |||||||
|   bool returnGatherOutput = dst_.is_contiguous(); |   bool returnGatherOutput = dst_.is_contiguous(); | ||||||
|   Tensor src; |   Tensor src; | ||||||
|   auto sameMemFormat = src_.is_contiguous(dst_.suggest_memory_format()) && dst_.is_contiguous(dst_.suggest_memory_format()); |   auto sameMemFormat = src_.is_contiguous(dst_.suggest_memory_format()) && dst_.is_contiguous(dst_.suggest_memory_format()); | ||||||
|  |   const bool sameDataType = src_.dtype() == dst_.dtype(); | ||||||
|  |  | ||||||
|   if (!src_.is_contiguous(MemoryFormat::Contiguous) && !sameMemFormat) { |   if ((!src_.is_contiguous(MemoryFormat::Contiguous) && !sameMemFormat) || | ||||||
|  |       // the copy_cast path requires storage_offset to be applied before casting | ||||||
|  |       (src_.storage_offset() && !sameDataType)) { | ||||||
|     Tensor emptyShell = Tensor(); |     Tensor emptyShell = Tensor(); | ||||||
|     src = gatherViewTensor(src_, returnGatherOutput ? dst_ : emptyShell); |     src = gatherViewTensor(src_, returnGatherOutput ? dst_ : emptyShell); | ||||||
|  |  | ||||||
| @ -282,7 +285,7 @@ static at::Tensor& copy_kernel_mps(at::Tensor& dst_, const at::Tensor& src_, boo | |||||||
|   src._set_neg(src_.is_neg()); |   src._set_neg(src_.is_neg()); | ||||||
|  |  | ||||||
|   const size_t src_size = src.nbytes(); |   const size_t src_size = src.nbytes(); | ||||||
|   if (src.dtype() == dst_.dtype()) { |   if (sameDataType) { | ||||||
|     MPSStream* stream = getCurrentMPSStream(); |     MPSStream* stream = getCurrentMPSStream(); | ||||||
|     // for GPU to GPU copies we only encode to stream's command buffer (no flushing) |     // for GPU to GPU copies we only encode to stream's command buffer (no flushing) | ||||||
|     stream->copy(sourceBuffer, destBuffer, src_size, src_byte_offset, dst_byte_offset); |     stream->copy(sourceBuffer, destBuffer, src_size, src_byte_offset, dst_byte_offset); | ||||||
| @ -297,22 +300,27 @@ at::Tensor& mps_copy_(at::Tensor& dst, const at::Tensor& src, bool non_blocking) | |||||||
|   TORCH_CHECK(dst.defined(), "dst is undefined"); |   TORCH_CHECK(dst.defined(), "dst is undefined"); | ||||||
|   TORCH_CHECK(src.defined(), "src is undefined"); |   TORCH_CHECK(src.defined(), "src is undefined"); | ||||||
|  |  | ||||||
|  |   bool needs_broadcasting = false; | ||||||
|  |  | ||||||
|   if (src.numel() == 0 || dst.is_same(src)) { |   if (src.numel() == 0 || dst.is_same(src)) { | ||||||
|     return dst; |     return dst; | ||||||
|   } |   } | ||||||
|   if (dst.numel() == 0) { |   if (dst.numel() == 0) { | ||||||
|     dst.resize_as_(src); |     dst.resize_as_(src); | ||||||
|   } |   } | ||||||
|  |   if (dst.dim() > src.dim()) { | ||||||
|  |     needs_broadcasting = true; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   if (src.device().type() == at::kMPS && dst.device().type() == at::kCPU) { |   if (src.device().type() == at::kMPS && dst.device().type() == at::kCPU) { | ||||||
|     return copy_from_mps_(dst, src, non_blocking); |     return copy_from_mps_(dst, needs_broadcasting ? src.expand_as(dst) : src, non_blocking); | ||||||
|   } |   } | ||||||
|   if (src.device().type() == at::kCPU && dst.device().type() == at::kMPS) { |   if (src.device().type() == at::kCPU && dst.device().type() == at::kMPS) { | ||||||
|     return copy_to_mps_(dst, src, non_blocking); |     return copy_to_mps_(dst, needs_broadcasting ? src.expand_as(dst) : src, non_blocking); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (src.device().type() == at::kMPS && dst.device().type() == at::kMPS) { |   if (src.device().type() == at::kMPS && dst.device().type() == at::kMPS) { | ||||||
|     return copy_kernel_mps(dst, src, non_blocking); |     return copy_kernel_mps(dst, needs_broadcasting ? src.expand_as(dst) : src, non_blocking); | ||||||
|   } |   } | ||||||
|   TORCH_INTERNAL_ASSERT( |   TORCH_INTERNAL_ASSERT( | ||||||
|       src.device().type() == DeviceType::MPS, |       src.device().type() == DeviceType::MPS, | ||||||
|  | |||||||
| @ -886,19 +886,31 @@ Tensor embedding_dense_backward_mps( | |||||||
|  |  | ||||||
|             MPSGraphTensor* reshapedIndicesTensor = indicesTensor; |             MPSGraphTensor* reshapedIndicesTensor = indicesTensor; | ||||||
|  |  | ||||||
|  |             MPSGraphTensor* castGradTensor = incomingGradTensor; | ||||||
|  |             MPSDataType dataType = mps::getMPSDataType(grad_.scalar_type()); | ||||||
|  |             // issue 105486100, scatterNDWithUpdatesTensor produces wrong result for float16 | ||||||
|  |             if (dataType == MPSDataTypeFloat16) { | ||||||
|  |               castGradTensor = [mpsGraph castTensor: incomingGradTensor | ||||||
|  |                                              toType: MPSDataTypeFloat32 | ||||||
|  |                                                name: @"castGradTensor"]; | ||||||
|  |             } | ||||||
|             if (num_indices_dims != 0) { |             if (num_indices_dims != 0) { | ||||||
|               reshapedIndicesTensor = [mpsGraph  expandDimsOfTensor: indicesTensor |               reshapedIndicesTensor = [mpsGraph  expandDimsOfTensor: indicesTensor | ||||||
|                                                                axes: @[@-1] |                                                                axes: @[@-1] | ||||||
|                                                                name: nil]; |                                                                name: nil]; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             auto outgoingGradTensor = [mpsGraph scatterNDWithUpdatesTensor: incomingGradTensor |             auto outgoingGradTensor = [mpsGraph scatterNDWithUpdatesTensor: castGradTensor | ||||||
|                                                              indicesTensor: reshapedIndicesTensor |                                                              indicesTensor: reshapedIndicesTensor | ||||||
|                                                                      shape: native_mps::getMPSShape(IntArrayRef(outgoing_gradient_shape)) |                                                                      shape: native_mps::getMPSShape(IntArrayRef(outgoing_gradient_shape)) | ||||||
|                                                            batchDimensions: 0 |                                                            batchDimensions: 0 | ||||||
|                                                                       mode: MPSGraphScatterModeAdd |                                                                       mode: MPSGraphScatterModeAdd | ||||||
|                                                                       name: @"edb"]; |                                                                       name: @"edb"]; | ||||||
|  |             if (dataType == MPSDataTypeFloat16) { | ||||||
|  |               outgoingGradTensor = [mpsGraph castTensor: outgoingGradTensor | ||||||
|  |                                                  toType: MPSDataTypeFloat16 | ||||||
|  |                                                    name: @"castGradTensor"]; | ||||||
|  |             } | ||||||
|             newCachedGraph->incomingGradTensor_ = incomingGradTensor; |             newCachedGraph->incomingGradTensor_ = incomingGradTensor; | ||||||
|             newCachedGraph->indicesTensor_ = indicesTensor; |             newCachedGraph->indicesTensor_ = indicesTensor; | ||||||
|             newCachedGraph->outgoingGradTensor_ = outgoingGradTensor; |             newCachedGraph->outgoingGradTensor_ = outgoingGradTensor; | ||||||
|  | |||||||
| @ -609,11 +609,9 @@ std::tuple<Tensor, Tensor, Tensor> batch_norm_backward_mps | |||||||
|  |  | ||||||
|     NSString* ns_shape_key = [[input_shape valueForKey:@"description"] componentsJoinedByString:@","]; |     NSString* ns_shape_key = [[input_shape valueForKey:@"description"] componentsJoinedByString:@","]; | ||||||
|  |  | ||||||
|     string key = "batch_norm_backward_mps:" + mem_format_key + ":" + std::to_string(epsilon) + ":" |     string key = "batch_norm_backward_mps:" + mem_format_key + ":" + std::to_string(epsilon) + ":" + | ||||||
|                       + std::to_string(train) + ":" |         std::to_string(train) + ":" + std::to_string(has_running_mean) + ":" + std::to_string(has_weight) + ":" + | ||||||
|                       + std::to_string(has_running_mean) + ":" |         [ns_shape_key UTF8String] + ":" + c10::Join(",", grad_input_mask) + ":" + native_mps::getMPSTypeString(input.scalar_type()); | ||||||
|                       + std::to_string(has_weight) + ":" |  | ||||||
|                       + [ns_shape_key UTF8String] + ":" + native_mps::getMPSTypeString(input.scalar_type()); |  | ||||||
|     auto input_mps_dtype = native_mps::getMPSDataType(input.scalar_type()); |     auto input_mps_dtype = native_mps::getMPSDataType(input.scalar_type()); | ||||||
|     CachedGraph* cachedGraph = static_cast<CachedGraph *>(cache_->LookUp(key)); |     CachedGraph* cachedGraph = static_cast<CachedGraph *>(cache_->LookUp(key)); | ||||||
|  |  | ||||||
|  | |||||||
| @ -83,6 +83,7 @@ static void pool2d_template(const Tensor& input, const Tensor& output, | |||||||
|   pool2d_shape_check(input, kH, kW, dH, dW, padH, padW, dilationH, dilationW, |   pool2d_shape_check(input, kH, kW, dH, dW, padH, padW, dilationH, dilationW, | ||||||
|                      nInputPlane, inputHeight, inputWidth, outputHeight, outputWidth, memory_format); |                      nInputPlane, inputHeight, inputWidth, outputHeight, outputWidth, memory_format); | ||||||
|  |  | ||||||
|  |   auto output_memory_format = output.suggest_memory_format(); | ||||||
|   // the output and indices are 'empty', so we could avoid unnecessary gatherView on empty tensors |   // the output and indices are 'empty', so we could avoid unnecessary gatherView on empty tensors | ||||||
|   // by simply restriding them (instead of calling the costly Contiguous()). |   // by simply restriding them (instead of calling the costly Contiguous()). | ||||||
|   if (indices.suggest_memory_format() == MemoryFormat::ChannelsLast) { |   if (indices.suggest_memory_format() == MemoryFormat::ChannelsLast) { | ||||||
| @ -94,8 +95,9 @@ static void pool2d_template(const Tensor& input, const Tensor& output, | |||||||
|       outputSizes.insert(outputSizes.begin(), nbatch); |       outputSizes.insert(outputSizes.begin(), nbatch); | ||||||
|     } |     } | ||||||
|     output.resize_(outputSizes); |     output.resize_(outputSizes); | ||||||
|   } else if (output.suggest_memory_format() == MemoryFormat::ChannelsLast) { |   } else if (output_memory_format == MemoryFormat::ChannelsLast) { | ||||||
|     output.unsafeGetTensorImpl()->empty_tensor_restride(MemoryFormat::Contiguous); |     output.unsafeGetTensorImpl()->empty_tensor_restride(MemoryFormat::Contiguous); | ||||||
|  |     output_memory_format = MemoryFormat::Contiguous; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (output.numel() == 0 || (is_backward_pass && grad_output.numel() == 0)) { |   if (output.numel() == 0 || (is_backward_pass && grad_output.numel() == 0)) { | ||||||
| @ -196,6 +198,10 @@ static void pool2d_template(const Tensor& input, const Tensor& output, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     runMPSGraph(mpsStream, cachedGraph->graph(), feeds, results); |     runMPSGraph(mpsStream, cachedGraph->graph(), feeds, results); | ||||||
|  |  | ||||||
|  |     if (output_memory_format != suggested_memory_format) { | ||||||
|  |       const_cast<Tensor&>(output) = output.to(suggested_memory_format); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -302,7 +308,7 @@ static void avg_pool2d_template(const Tensor& input, const Tensor& output, | |||||||
|  |  | ||||||
| } // namespace mps | } // namespace mps | ||||||
|  |  | ||||||
| Tensor _mps_max_pool2d( | Tensor mps_max_pool2d( | ||||||
|     const Tensor& input, |     const Tensor& input, | ||||||
|     IntArrayRef kernel_size, |     IntArrayRef kernel_size, | ||||||
|     IntArrayRef stride, |     IntArrayRef stride, | ||||||
| @ -356,6 +362,8 @@ TORCH_IMPL_FUNC(max_pool2d_with_indices_out_mps)( | |||||||
|     const Tensor& output, |     const Tensor& output, | ||||||
|     const Tensor& indices) { |     const Tensor& indices) { | ||||||
|  |  | ||||||
|  |   auto indices_memory_format = indices.suggest_memory_format(); | ||||||
|  |  | ||||||
|   mps::PoolingOpBlock pooling_op_block = ^PoolingOpFn(cachedGraph, desc) { |   mps::PoolingOpBlock pooling_op_block = ^PoolingOpFn(cachedGraph, desc) { | ||||||
|     MPSGraph* mpsGraph = cachedGraph.graph(); |     MPSGraph* mpsGraph = cachedGraph.graph(); | ||||||
|     NSArray<MPSGraphTensor*>* poolOutputs = [mpsGraph maxPooling2DReturnIndicesWithSourceTensor: cachedGraph.inputTensor |     NSArray<MPSGraphTensor*>* poolOutputs = [mpsGraph maxPooling2DReturnIndicesWithSourceTensor: cachedGraph.inputTensor | ||||||
| @ -366,6 +374,10 @@ TORCH_IMPL_FUNC(max_pool2d_with_indices_out_mps)( | |||||||
|   }; |   }; | ||||||
|   mps::pool2d_template(input, output, indices, c10::nullopt, kernel_size, stride, |   mps::pool2d_template(input, output, indices, c10::nullopt, kernel_size, stride, | ||||||
|                        padding, dilation, ceil_mode, false, c10::nullopt, pooling_op_block, "max_pool2d_indices"); |                        padding, dilation, ceil_mode, false, c10::nullopt, pooling_op_block, "max_pool2d_indices"); | ||||||
|  |  | ||||||
|  |   if (indices_memory_format == MemoryFormat::ChannelsLast) { | ||||||
|  |     const_cast<Tensor&>(indices) = indices.to(MemoryFormat::ChannelsLast); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| TORCH_IMPL_FUNC(max_pool2d_with_indices_backward_out_mps)( | TORCH_IMPL_FUNC(max_pool2d_with_indices_backward_out_mps)( | ||||||
|  | |||||||
| @ -139,6 +139,10 @@ void reduction_out_mps( | |||||||
|   MPSReductionType reduction_type, |   MPSReductionType reduction_type, | ||||||
|   const std::string& func_name) { |   const std::string& func_name) { | ||||||
|  |  | ||||||
|  |   // issue 103641234, reduction ops does not have int64 support | ||||||
|  |   if (input_t.scalar_type() == ScalarType::Long) { | ||||||
|  |     TORCH_WARN_ONCE("MPS: no support for int64 reduction ops, casting it to int32"); | ||||||
|  |   } | ||||||
|   IntArrayRef input_shape = input_t.sizes(); |   IntArrayRef input_shape = input_t.sizes(); | ||||||
|  |  | ||||||
|   if (opt_dim.has_value()) { |   if (opt_dim.has_value()) { | ||||||
| @ -163,6 +167,9 @@ void reduction_out_mps( | |||||||
|     if (reduction_type == MPSReductionType::PROD) { |     if (reduction_type == MPSReductionType::PROD) { | ||||||
|       output_t.fill_(1); |       output_t.fill_(1); | ||||||
|     } |     } | ||||||
|  |     else if (reduction_type == MPSReductionType::SUM) { | ||||||
|  |       output_t.zero_(); | ||||||
|  |     } | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @ -197,7 +204,10 @@ void reduction_out_mps( | |||||||
|              (dtype.value() == kFloat || dtype.value() == kHalf || dtype.value() == kInt)) { |              (dtype.value() == kFloat || dtype.value() == kHalf || dtype.value() == kInt)) { | ||||||
|             inputCastDtype = getMPSDataType(dtype.value()); |             inputCastDtype = getMPSDataType(dtype.value()); | ||||||
|           } else if (input_type != MPSDataTypeInt32   && |           } else if (input_type != MPSDataTypeInt32   && | ||||||
|                      input_type != MPSDataTypeFloat32) { |                      input_type != MPSDataTypeFloat32 && | ||||||
|  |                      input_type != MPSDataTypeFloat16) { | ||||||
|  |             inputCastDtype = MPSDataTypeFloat32; | ||||||
|  |           } else if (!is_macos_13_or_newer() && input_type == MPSDataTypeFloat16) { | ||||||
|             inputCastDtype = MPSDataTypeFloat32; |             inputCastDtype = MPSDataTypeFloat32; | ||||||
|           } |           } | ||||||
|  |  | ||||||
| @ -241,7 +251,7 @@ void reduction_out_mps( | |||||||
|                                                                axes:wrappedAxes |                                                                axes:wrappedAxes | ||||||
|                                                                name:nil]; |                                                                name:nil]; | ||||||
|           } else if (reduction_type == MPSReductionType::TRACE) { |           } else if (reduction_type == MPSReductionType::TRACE) { | ||||||
|             MPSGraphTensor *bandPartWithTensor = [mpsGraph bandPartWithTensor:inputTensor |             MPSGraphTensor *bandPartWithTensor = [mpsGraph bandPartWithTensor:castInputTensor | ||||||
|                                                                      numLower:0 |                                                                      numLower:0 | ||||||
|                                                                      numUpper:0 |                                                                      numUpper:0 | ||||||
|                                                                          name:nil]; |                                                                          name:nil]; | ||||||
| @ -1257,7 +1267,9 @@ Tensor min_max_mps | |||||||
|   (const Tensor& input_t, |   (const Tensor& input_t, | ||||||
|    MPSReductionType reduction_type, |    MPSReductionType reduction_type, | ||||||
|    const std::string& func_name) { |    const std::string& func_name) { | ||||||
|   TORCH_WARN_ONCE(input_t.scalar_type() != ScalarType::Long, "MPS: no support for int64 min/max ops, casting it to int32"); |   if (input_t.scalar_type() == ScalarType::Long) { | ||||||
|  |     TORCH_WARN_ONCE("MPS: no support for int64 min/max ops, casting it to int32"); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   using CachedGraph = MPSUnaryCachedGraph; |   using CachedGraph = MPSUnaryCachedGraph; | ||||||
|  |  | ||||||
|  | |||||||
| @ -233,7 +233,7 @@ Tensor repeat_interleave_mps(const Tensor& repeat_, c10::optional<int64_t> outpu | |||||||
|   if (repeat.scalar_type() == kLong) { |   if (repeat.scalar_type() == kLong) { | ||||||
|     // #103810551: `repeat_interleave_common` uses cumsum to calculate the final shape of output, |     // #103810551: `repeat_interleave_common` uses cumsum to calculate the final shape of output, | ||||||
|     // which currently doesn't support int64_t as input. Casting internally the indices to int32_t. |     // which currently doesn't support int64_t as input. Casting internally the indices to int32_t. | ||||||
|     TORCH_WARN_ONCE(false, "MPS: no support for int64 repeats mask, casting it to int32"); |     TORCH_WARN_ONCE("MPS: no support for int64 repeats mask, casting it to int32"); | ||||||
|     repeat = repeat.to(kInt); |     repeat = repeat.to(kInt); | ||||||
|   } |   } | ||||||
|   AT_DISPATCH_INDEX_TYPES(repeat.scalar_type(), "repeat_interleave_mps", [&]() { |   AT_DISPATCH_INDEX_TYPES(repeat.scalar_type(), "repeat_interleave_mps", [&]() { | ||||||
| @ -243,4 +243,4 @@ Tensor repeat_interleave_mps(const Tensor& repeat_, c10::optional<int64_t> outpu | |||||||
|   return output; |   return output; | ||||||
| } | } | ||||||
|  |  | ||||||
| }  // namespace at::native | }  // namespace at::native | ||||||
|  | |||||||
| @ -23,17 +23,31 @@ std::vector<long long> getTensorShape(MPSGraphTensor* mpsTensor) { | |||||||
|     return output_dimensions; |     return output_dimensions; | ||||||
| } | } | ||||||
|  |  | ||||||
| std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input, TensorList hx, TensorList params, bool has_biases, int64_t num_layers, double dropout_p, bool train, bool bidirectional, bool batch_first) { | std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input, TensorList hx, TensorList params, bool has_biases, int64_t num_layers, double dropout_p, bool train, bool bidirectional, bool batch_first) { | ||||||
|     using namespace mps; |     using namespace mps; | ||||||
|  |  | ||||||
|  |     //Projections are not currently supported, raise an error if needed | ||||||
|  |     bool has_projections = (hx[0].size(2) != hx[1].size(2)); | ||||||
|  |     if(has_projections) { | ||||||
|  |         AT_ERROR("LSTM with projections is not currently supported with MPS."); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     TORCH_CHECK(!(!is_macos_13_or_newer() && num_layers > 1), "Multi-layer LSTM support in MPS available only on MacOS 13 onwards"); | ||||||
|  |  | ||||||
|     std::vector<Tensor> kernel_weights; |     std::vector<Tensor> kernel_weights; | ||||||
|     std::vector<Tensor> recurrent_kernel_weights; |     std::vector<Tensor> recurrent_kernel_weights; | ||||||
|     std::vector<Tensor> biases; |     std::vector<Tensor> biases; | ||||||
|     std::vector<Tensor> recurrent_biases; |     std::vector<Tensor> recurrent_biases; | ||||||
|     for (size_t i = 0; i < num_layers; i+=1) { |     for (size_t i = 0; i < num_layers; i+=1) { | ||||||
|         kernel_weights.push_back(params[i*4]); |         if (has_biases) { | ||||||
|         recurrent_kernel_weights.push_back(params[i*4+1]); |             kernel_weights.push_back(params[i*4]); | ||||||
|         biases.push_back(params[i*4+2]); |             recurrent_kernel_weights.push_back(params[i*4+1]); | ||||||
|         recurrent_biases.push_back(params[i*4+3]); |             biases.push_back(params[i*4+2]); | ||||||
|  |             recurrent_biases.push_back(params[i*4+3]); | ||||||
|  |         } else { | ||||||
|  |             kernel_weights.push_back(params[i*2]); | ||||||
|  |             recurrent_kernel_weights.push_back(params[i*2+1]); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     struct CachedGraph : public MPSCachedGraph { |     struct CachedGraph : public MPSCachedGraph { | ||||||
| @ -44,8 +58,6 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|       NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList_ = nil; |       NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *biasList_ = nil; |       NSMutableArray<MPSGraphTensor*> *biasList_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *recurrentBiasList_ = nil; |       NSMutableArray<MPSGraphTensor*> *recurrentBiasList_ = nil; | ||||||
|       std::vector<MPSGraphTensor*> outputCellStateFwdVector_; |  | ||||||
|       std::vector<MPSGraphTensor*> outputZStateVector_; |  | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     MPSGraphCache* cache_ = MPSGraphCache::getInstance(); |     MPSGraphCache* cache_ = MPSGraphCache::getInstance(); | ||||||
| @ -67,12 +79,15 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|             NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList = [[NSMutableArray alloc] initWithCapacity:params.size()]; |             NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList = [[NSMutableArray alloc] initWithCapacity:params.size()]; | ||||||
|             NSMutableArray<MPSGraphTensor*> *kernelBiasList = [[NSMutableArray alloc] initWithCapacity:params.size()]; |             NSMutableArray<MPSGraphTensor*> *kernelBiasList = [[NSMutableArray alloc] initWithCapacity:params.size()]; | ||||||
|             NSMutableArray<MPSGraphTensor*> *recurrentBiasList = [[NSMutableArray alloc] initWithCapacity:params.size()]; |             NSMutableArray<MPSGraphTensor*> *recurrentBiasList = [[NSMutableArray alloc] initWithCapacity:params.size()]; | ||||||
|  |             NSMutableArray<MPSGraphTensor*> *layersOutputsList = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|  |  | ||||||
|             for (size_t i = 0; i < num_layers; i += 1) { |             for (size_t i = 0; i < num_layers; i += 1) { | ||||||
|                 [kernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()), getMPSShape(kernel_weights[i]))]; |                 [kernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()), getMPSShape(kernel_weights[i]))]; | ||||||
|                 [recurrentKernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_kernel_weights[i]))]; |                 [recurrentKernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_kernel_weights[i]))]; | ||||||
|                 [kernelBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(biases[i]))]; |                 if(has_biases) { | ||||||
|                 [recurrentBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_biases[i]))]; |                     [kernelBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(biases[i]))]; | ||||||
|  |                     [recurrentBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_biases[i]))]; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             MPSGraphLSTMDescriptor * opDesc = [MPSGraphLSTMDescriptor descriptor]; |             MPSGraphLSTMDescriptor * opDesc = [MPSGraphLSTMDescriptor descriptor]; | ||||||
| @ -93,25 +108,28 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             MPSGraphTensor* inputTensor_ = inputTensor; |             MPSGraphTensor* inputTensor_ = inputTensor; | ||||||
|             MPSGraphTensor* stateTensor_ = [mpsGraph sliceTensor:stateTensor |  | ||||||
|                                                         dimension:0 |  | ||||||
|                                                         start:0 |  | ||||||
|                                                         length:1 |  | ||||||
|                                                         name:nil]; |  | ||||||
|             MPSGraphTensor* cellStateTensor_ = [mpsGraph sliceTensor:cellStateTensor |  | ||||||
|                                                                 dimension:0 |  | ||||||
|                                                                 start:0 |  | ||||||
|                                                                 length:1 |  | ||||||
|                                                                 name:nil]; |  | ||||||
|             NSArray<MPSGraphTensor*>* outputs = nil; |             NSArray<MPSGraphTensor*>* outputs = nil; | ||||||
|             NSMutableArray<MPSGraphTensor*>* outputStateArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |             NSMutableArray<MPSGraphTensor*>* outputStateArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|             NSMutableArray<MPSGraphTensor*>* outputCellStateArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |             NSMutableArray<MPSGraphTensor*>* outputCellStateArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|             NSMutableArray<MPSGraphTensor*>* outputZStateArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |             NSMutableArray<MPSGraphTensor*>* outputZStateArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|             NSMutableArray<MPSGraphTensor*>* outputCellStateFwdArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |             NSMutableArray<MPSGraphTensor*>* outputCellStateFwdArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|             for(int i = 0; i < num_layers; i++) { |             for(int i = 0; i < num_layers; i++) { | ||||||
|                 MPSGraphTensor* biasTensor = [mpsGraph additionWithPrimaryTensor:kernelBiasList[i] |                 MPSGraphTensor* biasTensor = nil; | ||||||
|                                                                     secondaryTensor:recurrentBiasList[i] |                 if(has_biases) { | ||||||
|                                                                             name:nil]; |                     biasTensor = [mpsGraph additionWithPrimaryTensor:kernelBiasList[i] | ||||||
|  |                                                      secondaryTensor:recurrentBiasList[i] | ||||||
|  |                                                                 name:nil]; | ||||||
|  |                 } | ||||||
|  |                 MPSGraphTensor* stateTensor_ = [mpsGraph sliceTensor:stateTensor | ||||||
|  |                                                            dimension:0 | ||||||
|  |                                                                start:i | ||||||
|  |                                                               length:1 | ||||||
|  |                                                                 name:nil]; | ||||||
|  |                 MPSGraphTensor* cellStateTensor_ = [mpsGraph sliceTensor:cellStateTensor | ||||||
|  |                                                                dimension:0 | ||||||
|  |                                                                    start:i | ||||||
|  |                                                                   length:1 | ||||||
|  |                                                                     name:nil]; | ||||||
|                 outputs = [mpsGraph LSTMWithSourceTensor:inputTensor_ |                 outputs = [mpsGraph LSTMWithSourceTensor:inputTensor_ | ||||||
|                                         recurrentWeight:recurrentKernelWeightsList[i] |                                         recurrentWeight:recurrentKernelWeightsList[i] | ||||||
|                                             inputWeight:kernelWeightsList[i] |                                             inputWeight:kernelWeightsList[i] | ||||||
| @ -121,18 +139,14 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|                                              descriptor:opDesc |                                              descriptor:opDesc | ||||||
|                                                    name:nil]; |                                                    name:nil]; | ||||||
|  |  | ||||||
|  |  | ||||||
|                 stateTensor_ = [mpsGraph sliceTensor:stateTensor |  | ||||||
|                                                             dimension:0 |  | ||||||
|                                                             start:i |  | ||||||
|                                                             length:1 |  | ||||||
|                                                             name:nil]; |  | ||||||
|                 cellStateTensor_ = [mpsGraph sliceTensor:cellStateTensor |  | ||||||
|                                                                     dimension:0 |  | ||||||
|                                                                     start:i |  | ||||||
|                                                                     length:1 |  | ||||||
|                                                                     name:nil]; |  | ||||||
|                 inputTensor_ = [outputs objectAtIndex:0]; |                 inputTensor_ = [outputs objectAtIndex:0]; | ||||||
|  |                 // no need to keep a final layer output copy as it is | ||||||
|  |                 // returned anyway and not used in backprop | ||||||
|  |                 if(i != num_layers - 1) { | ||||||
|  |                     [layersOutputsList addObject:[mpsGraph expandDimsOfTensor:inputTensor_ | ||||||
|  |                                                                          axis:0 | ||||||
|  |                                                                          name:nil]]; | ||||||
|  |                 } | ||||||
|                 if(dropout_p>0.0 && train && (i!=num_layers-1)) { |                 if(dropout_p>0.0 && train && (i!=num_layers-1)) { | ||||||
|                     inputTensor_ = [mpsGraph dropoutTensor:inputTensor_ |                     inputTensor_ = [mpsGraph dropoutTensor:inputTensor_ | ||||||
|                                                       rate:dropout_p |                                                       rate:dropout_p | ||||||
| @ -150,7 +164,7 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|                                                             name:nil]]; |                                                             name:nil]]; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             MPSGraphTensor* outputTensor = [outputs objectAtIndex:0]; |             MPSGraphTensor* outputTensor = inputTensor_; | ||||||
|             if (batch_first) { |             if (batch_first) { | ||||||
|                 outputTensor = [mpsGraph transposeTensor:outputTensor |                 outputTensor = [mpsGraph transposeTensor:outputTensor | ||||||
|                                                dimension:0 |                                                dimension:0 | ||||||
| @ -169,8 +183,11 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|             MPSGraphTensor* outputCellStatesFwd = [mpsGraph concatTensors:outputCellStateFwdArray |             MPSGraphTensor* outputCellStatesFwd = [mpsGraph concatTensors:outputCellStateFwdArray | ||||||
|                                                             dimension:0 |                                                             dimension:0 | ||||||
|                                                             name:nil]; |                                                             name:nil]; | ||||||
|  |             MPSGraphTensor* layersOutputs = (num_layers > 1) | ||||||
|  |                 ? [mpsGraph concatTensors:layersOutputsList dimension:0 name:nil] | ||||||
|  |                 : nil; | ||||||
|  |  | ||||||
|             std::vector<MPSGraphTensor*> outputTensors = {outputTensor, outputStates, outputCellStates, outputZStates, outputCellStatesFwd}; |             std::vector<MPSGraphTensor*> outputTensors = {outputTensor, outputStates, outputCellStates, outputZStates, outputCellStatesFwd, layersOutputs}; | ||||||
|             newCachedGraph->inputTensors_ = inputTensors; |             newCachedGraph->inputTensors_ = inputTensors; | ||||||
|             newCachedGraph->outputTensors_ = outputTensors; |             newCachedGraph->outputTensors_ = outputTensors; | ||||||
|             newCachedGraph->kernelWeightsList_ = kernelWeightsList; |             newCachedGraph->kernelWeightsList_ = kernelWeightsList; | ||||||
| @ -188,20 +205,20 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|       NSMutableArray<MPSGraphTensor*> *biasList = cachedGraph->biasList_; |       NSMutableArray<MPSGraphTensor*> *biasList = cachedGraph->biasList_; | ||||||
|       NSMutableArray<MPSGraphTensor*> *recurrentBiasList = cachedGraph->recurrentBiasList_; |       NSMutableArray<MPSGraphTensor*> *recurrentBiasList = cachedGraph->recurrentBiasList_; | ||||||
|  |  | ||||||
|       Placeholder kernelWeight; |       Placeholder kernelWeight, recurrentKernelWeight, bias, recurrentBias; | ||||||
|       Placeholder recurrentKernelWeight; |  | ||||||
|       Placeholder bias; |  | ||||||
|       Placeholder recurrentBias; |  | ||||||
|       NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*> *feeds = [[[NSMutableDictionary alloc] init] autorelease]; |       NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*> *feeds = [[[NSMutableDictionary alloc] init] autorelease]; | ||||||
|       for (size_t i = 0; i < num_layers; i+=1) { |       for (size_t i = 0; i < num_layers; i+=1) { | ||||||
|           kernelWeight = Placeholder([kernelWeightsList objectAtIndex:i], kernel_weights[i]); |           kernelWeight = Placeholder([kernelWeightsList objectAtIndex:i], kernel_weights[i]); | ||||||
|           recurrentKernelWeight = Placeholder([recurrentKernelWeightsList objectAtIndex:i], recurrent_kernel_weights[i]); |           recurrentKernelWeight = Placeholder([recurrentKernelWeightsList objectAtIndex:i], recurrent_kernel_weights[i]); | ||||||
|           bias = Placeholder([biasList objectAtIndex:i], biases[i]); |  | ||||||
|           recurrentBias = Placeholder([recurrentBiasList objectAtIndex:i], recurrent_biases[i]); |  | ||||||
|           [feeds setObject:kernelWeight.getMPSGraphTensorData() forKey:kernelWeight.getMPSGraphTensor()]; |           [feeds setObject:kernelWeight.getMPSGraphTensorData() forKey:kernelWeight.getMPSGraphTensor()]; | ||||||
|           [feeds setObject:recurrentKernelWeight.getMPSGraphTensorData() forKey:recurrentKernelWeight.getMPSGraphTensor()]; |           [feeds setObject:recurrentKernelWeight.getMPSGraphTensorData() forKey:recurrentKernelWeight.getMPSGraphTensor()]; | ||||||
|           [feeds setObject:bias.getMPSGraphTensorData() forKey:bias.getMPSGraphTensor()]; |           if(has_biases) { | ||||||
|           [feeds setObject:recurrentBias.getMPSGraphTensorData() forKey:recurrentBias.getMPSGraphTensor()]; |             bias = Placeholder([biasList objectAtIndex:i], biases[i]); | ||||||
|  |             recurrentBias = Placeholder([recurrentBiasList objectAtIndex:i], recurrent_biases[i]); | ||||||
|  |             [feeds setObject:bias.getMPSGraphTensorData() forKey:bias.getMPSGraphTensor()]; | ||||||
|  |             [feeds setObject:recurrentBias.getMPSGraphTensorData() forKey:recurrentBias.getMPSGraphTensor()]; | ||||||
|  |           } | ||||||
|  |  | ||||||
|       } |       } | ||||||
|       Placeholder selfPlaceholder   = Placeholder(cachedGraph->inputTensors_[0], input); |       Placeholder selfPlaceholder   = Placeholder(cachedGraph->inputTensors_[0], input); | ||||||
| @ -218,6 +235,9 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|       Tensor cy = at::empty_like(hx[1], input.options()); |       Tensor cy = at::empty_like(hx[1], input.options()); | ||||||
|       Tensor zState = at::empty(IntArrayRef(getTensorShape(cachedGraph->outputTensors_[3])), input.options()); |       Tensor zState = at::empty(IntArrayRef(getTensorShape(cachedGraph->outputTensors_[3])), input.options()); | ||||||
|       Tensor cellStateFwd = at::empty(IntArrayRef(getTensorShape(cachedGraph->outputTensors_[4])), input.options()); |       Tensor cellStateFwd = at::empty(IntArrayRef(getTensorShape(cachedGraph->outputTensors_[4])), input.options()); | ||||||
|  |       Tensor layerOutputs = (num_layers > 1) | ||||||
|  |           ? at::empty(IntArrayRef(getTensorShape(cachedGraph->outputTensors_[5])), input.options()) | ||||||
|  |           : at::empty({ 1 }, input.options()); // not used if num_layers == 1 | ||||||
|  |  | ||||||
|       Placeholder outputPlaceholder0 = Placeholder(cachedGraph->outputTensors_[0], output); |       Placeholder outputPlaceholder0 = Placeholder(cachedGraph->outputTensors_[0], output); | ||||||
|       Placeholder outputPlaceholder1 = Placeholder(cachedGraph->outputTensors_[1], hy); |       Placeholder outputPlaceholder1 = Placeholder(cachedGraph->outputTensors_[1], hy); | ||||||
| @ -225,20 +245,25 @@ std::tuple<Tensor, Tensor, Tensor, Tensor, Tensor> _lstm_mps(const Tensor& input | |||||||
|       Placeholder outputPlaceholder3 = Placeholder(cachedGraph->outputTensors_[3], zState); |       Placeholder outputPlaceholder3 = Placeholder(cachedGraph->outputTensors_[3], zState); | ||||||
|       Placeholder outputPlaceholder4 = Placeholder(cachedGraph->outputTensors_[4], cellStateFwd); |       Placeholder outputPlaceholder4 = Placeholder(cachedGraph->outputTensors_[4], cellStateFwd); | ||||||
|  |  | ||||||
|       NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* results = @{ |       NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*>* results = [@{ | ||||||
|         outputPlaceholder0.getMPSGraphTensor() : outputPlaceholder0.getMPSGraphTensorData(), |         outputPlaceholder0.getMPSGraphTensor() : outputPlaceholder0.getMPSGraphTensorData(), | ||||||
|         outputPlaceholder1.getMPSGraphTensor() : outputPlaceholder1.getMPSGraphTensorData(), |         outputPlaceholder1.getMPSGraphTensor() : outputPlaceholder1.getMPSGraphTensorData(), | ||||||
|         outputPlaceholder2.getMPSGraphTensor() : outputPlaceholder2.getMPSGraphTensorData(), |         outputPlaceholder2.getMPSGraphTensor() : outputPlaceholder2.getMPSGraphTensorData(), | ||||||
|         outputPlaceholder3.getMPSGraphTensor() : outputPlaceholder3.getMPSGraphTensorData(), |         outputPlaceholder3.getMPSGraphTensor() : outputPlaceholder3.getMPSGraphTensorData(), | ||||||
|         outputPlaceholder4.getMPSGraphTensor() : outputPlaceholder4.getMPSGraphTensorData() |         outputPlaceholder4.getMPSGraphTensor() : outputPlaceholder4.getMPSGraphTensorData(), | ||||||
|       }; |       } mutableCopy]; | ||||||
|  |  | ||||||
|  |       if (num_layers > 1) { | ||||||
|  |           Placeholder outputPlaceholder5 = Placeholder(cachedGraph->outputTensors_[5], layerOutputs); | ||||||
|  |           [results setObject:outputPlaceholder5.getMPSGraphTensorData() forKey: outputPlaceholder5.getMPSGraphTensor()]; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       runMPSGraph(stream, cachedGraph->graph(), feeds, results); |       runMPSGraph(stream, cachedGraph->graph(), feeds, results); | ||||||
|       return std::make_tuple(output, hy, cy, zState, cellStateFwd); |       return std::make_tuple(output, hy, cy, zState, cellStateFwd, layerOutputs); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(const Tensor& grad_y, const c10::optional<Tensor>& grad_hy_opt, const c10::optional<Tensor>& grad_cy_opt, const Tensor& z_state, const Tensor& cell_state_fwd, const Tensor& input, TensorList hx, TensorList params, bool has_biases, int64_t num_layers, double dropout_p, bool train, bool bidirectional, bool batch_first) { | std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(const Tensor& grad_y, const c10::optional<Tensor>& grad_hy_opt, const c10::optional<Tensor>& grad_cy_opt, const Tensor& z_state, const Tensor& cell_state_fwd, const Tensor& input, const Tensor& layersOutputs, TensorList hx, TensorList params, bool has_biases, int64_t num_layers, double dropout_p, bool train, bool bidirectional, bool batch_first) { | ||||||
|     using namespace mps; |     using namespace mps; | ||||||
|     const Tensor& grad_hy_r = c10::value_or_else(grad_hy_opt, [] {return Tensor();}); |     const Tensor& grad_hy_r = c10::value_or_else(grad_hy_opt, [] {return Tensor();}); | ||||||
|     const Tensor& grad_cy_r = c10::value_or_else(grad_cy_opt, [] {return Tensor();}); |     const Tensor& grad_cy_r = c10::value_or_else(grad_cy_opt, [] {return Tensor();}); | ||||||
| @ -250,10 +275,15 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|     std::vector<Tensor> biases; |     std::vector<Tensor> biases; | ||||||
|     std::vector<Tensor> recurrent_biases; |     std::vector<Tensor> recurrent_biases; | ||||||
|     for (size_t i = 0; i < num_layers; i+=1) { |     for (size_t i = 0; i < num_layers; i+=1) { | ||||||
|         kernel_weights.push_back(params[i*4]); |         if(has_biases) { | ||||||
|         recurrent_kernel_weights.push_back(params[i*4+1]); |             kernel_weights.push_back(params[i*4]); | ||||||
|         biases.push_back(params[i*4+2]); |             recurrent_kernel_weights.push_back(params[i*4+1]); | ||||||
|         recurrent_biases.push_back(params[i*4+3]); |             biases.push_back(params[i*4+2]); | ||||||
|  |             recurrent_biases.push_back(params[i*4+3]); | ||||||
|  |         } else { | ||||||
|  |             kernel_weights.push_back(params[i*2]); | ||||||
|  |             recurrent_kernel_weights.push_back(params[i*2+1]); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     struct CachedGraph : public MPSCachedGraph { |     struct CachedGraph : public MPSCachedGraph { | ||||||
| @ -264,12 +294,12 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|       NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList_ = nil; |       NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *biasList_ = nil; |       NSMutableArray<MPSGraphTensor*> *biasList_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *recurrentBiasList_ = nil; |       NSMutableArray<MPSGraphTensor*> *recurrentBiasList_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *gradOutput_ = nil; |  | ||||||
|       NSMutableArray<MPSGraphTensor*> *gradRecWeights_ = nil; |       NSMutableArray<MPSGraphTensor*> *gradRecWeights_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *gradWeights_ = nil; |       NSMutableArray<MPSGraphTensor*> *gradWeights_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *gradBias_ = nil; |       NSMutableArray<MPSGraphTensor*> *gradBias_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *gradState_ = nil; |       MPSGraphTensor* gradOutput_ = nil; | ||||||
|       NSMutableArray<MPSGraphTensor*> *gradCellState_ = nil; |       MPSGraphTensor* gradState_ = nil; | ||||||
|  |       MPSGraphTensor* gradCellState_ = nil; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     MPSGraphCache* cache_ = MPSGraphCache::getInstance(); |     MPSGraphCache* cache_ = MPSGraphCache::getInstance(); | ||||||
| @ -296,8 +326,10 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|                     for (size_t i = 0; i < num_layers; i += 1) { |                     for (size_t i = 0; i < num_layers; i += 1) { | ||||||
|                         [kernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()), getMPSShape(kernel_weights[i]))]; |                         [kernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()), getMPSShape(kernel_weights[i]))]; | ||||||
|                         [recurrentKernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_kernel_weights[i]))]; |                         [recurrentKernelWeightsList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_kernel_weights[i]))]; | ||||||
|                         [kernelBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(biases[i]))]; |                         if(has_biases) { | ||||||
|                         [recurrentBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_biases[i]))]; |                             [kernelBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(biases[i]))]; | ||||||
|  |                             [recurrentBiasList addObject:mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()),getMPSShape(recurrent_biases[i]))]; | ||||||
|  |                         } | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     MPSGraphTensor* inputTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()), getMPSShape(input)); |                     MPSGraphTensor* inputTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(input.scalar_type()), getMPSShape(input)); | ||||||
| @ -308,8 +340,22 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|                     MPSGraphTensor* gradientCyTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(grad_cy.scalar_type()), getMPSShape(grad_cy)); |                     MPSGraphTensor* gradientCyTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(grad_cy.scalar_type()), getMPSShape(grad_cy)); | ||||||
|                     MPSGraphTensor* gradientHyTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(grad_hy.scalar_type()), getMPSShape(grad_hy)); |                     MPSGraphTensor* gradientHyTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(grad_hy.scalar_type()), getMPSShape(grad_hy)); | ||||||
|                     MPSGraphTensor* cellStateFwdTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(cell_state_fwd.scalar_type()), getMPSShape(cell_state_fwd)); |                     MPSGraphTensor* cellStateFwdTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(cell_state_fwd.scalar_type()), getMPSShape(cell_state_fwd)); | ||||||
|  |                     MPSGraphTensor* layersOutputsTensor = mpsGraphRankedPlaceHolder(mpsGraph, getMPSDataType(layersOutputs.scalar_type()), getMPSShape(layersOutputs)); | ||||||
|  |  | ||||||
|  |                     std::vector<MPSGraphTensor*> inputs = {inputTensor, stateTensor, cellStateTensor, gradientTensor, zStateTensor, cellStateFwdTensor, gradientHyTensor, gradientCyTensor, layersOutputsTensor}; | ||||||
|  |  | ||||||
|  |                     if (batch_first) { | ||||||
|  |                         inputTensor = [mpsGraph transposeTensor: inputTensor | ||||||
|  |                                                       dimension: 0 | ||||||
|  |                                                   withDimension: 1 | ||||||
|  |                                                            name: nil]; | ||||||
|  |  | ||||||
|  |                         gradientTensor = [mpsGraph transposeTensor: gradientTensor | ||||||
|  |                                                          dimension: 0 | ||||||
|  |                                                      withDimension: 1 | ||||||
|  |                                                               name: nil]; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|                     std::vector<MPSGraphTensor*> inputs = {inputTensor, stateTensor, cellStateTensor, gradientTensor, zStateTensor, cellStateFwdTensor, gradientHyTensor, gradientCyTensor}; |  | ||||||
|                     newCachedGraph->recurrentKernelWeightsList_ = recurrentKernelWeightsList; |                     newCachedGraph->recurrentKernelWeightsList_ = recurrentKernelWeightsList; | ||||||
|                     newCachedGraph->kernelWeightsList_ = kernelWeightsList; |                     newCachedGraph->kernelWeightsList_ = kernelWeightsList; | ||||||
|                     newCachedGraph->biasList_ = kernelBiasList; |                     newCachedGraph->biasList_ = kernelBiasList; | ||||||
| @ -325,7 +371,6 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|  |  | ||||||
|                     NSArray<MPSGraphTensor*>* outputs = nil; |                     NSArray<MPSGraphTensor*>* outputs = nil; | ||||||
|  |  | ||||||
|                     NSMutableArray<MPSGraphTensor*>* gradOutputArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |  | ||||||
|                     NSMutableArray<MPSGraphTensor*>* gradRecWeightsArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |                     NSMutableArray<MPSGraphTensor*>* gradRecWeightsArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|                     NSMutableArray<MPSGraphTensor*>* gradWeightsArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |                     NSMutableArray<MPSGraphTensor*>* gradWeightsArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
|                     NSMutableArray<MPSGraphTensor*>* gradBiasArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; |                     NSMutableArray<MPSGraphTensor*>* gradBiasArray = [[NSMutableArray alloc] initWithCapacity:num_layers]; | ||||||
| @ -349,9 +394,15 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|                         cellStateFwd = [mpsGraph squeezeTensor:cellStateFwd |                         cellStateFwd = [mpsGraph squeezeTensor:cellStateFwd | ||||||
|                                                     axis:0 |                                                     axis:0 | ||||||
|                                                     name:nil]; |                                                     name:nil]; | ||||||
|                         MPSGraphTensor* biasTensor = [mpsGraph additionWithPrimaryTensor:kernelBiasList[i] |                         MPSGraphTensor* biasTensor = nil; | ||||||
|                                                                             secondaryTensor:recurrentBiasList[i] |                         if(has_biases) { | ||||||
|                                                                             name:nil]; |                             biasTensor = [mpsGraph additionWithPrimaryTensor:kernelBiasList[i] | ||||||
|  |                                                             secondaryTensor:recurrentBiasList[i] | ||||||
|  |                                                             name:nil]; | ||||||
|  |                         } else { | ||||||
|  |                             biasTensor = [mpsGraph constantWithScalar:0.0 | ||||||
|  |                                                             dataType:inputTensor.dataType]; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|                         MPSGraphTensor* stateTensor_ = [mpsGraph sliceTensor:stateTensor |                         MPSGraphTensor* stateTensor_ = [mpsGraph sliceTensor:stateTensor | ||||||
|                                                                     dimension:0 |                                                                     dimension:0 | ||||||
| @ -375,7 +426,23 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|                                                                             length:1 |                                                                             length:1 | ||||||
|                                                                             name:nil]; |                                                                             name:nil]; | ||||||
|  |  | ||||||
|                         outputs = [mpsGraph LSTMGradientsWithSourceTensor: inputTensor |                         MPSGraphTensor* iterationInputTensor_ = nil; | ||||||
|  |                         if (i == 0) { | ||||||
|  |                             iterationInputTensor_ = inputTensor; | ||||||
|  |                         } else { | ||||||
|  |                             iterationInputTensor_ = [mpsGraph sliceTensor:layersOutputsTensor | ||||||
|  |                                                                 dimension: 0 | ||||||
|  |                                                                     // last element in layersOutputsTensor contains | ||||||
|  |                                                                     // **inputs** for the last layer | ||||||
|  |                                                                     start: i - num_layers | ||||||
|  |                                                                    length: 1 | ||||||
|  |                                                                      name: nil]; | ||||||
|  |                             iterationInputTensor_ = [mpsGraph squeezeTensor:iterationInputTensor_ | ||||||
|  |                                                                        axis:0 | ||||||
|  |                                                                        name: nil]; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         outputs = [mpsGraph LSTMGradientsWithSourceTensor: iterationInputTensor_ | ||||||
|                                              recurrentWeight: recurrentKernelWeightsList[i] |                                              recurrentWeight: recurrentKernelWeightsList[i] | ||||||
|                                               sourceGradient: gradientTensor_ |                                               sourceGradient: gradientTensor_ | ||||||
|                                                       zState: zState |                                                       zState: zState | ||||||
| @ -391,24 +458,31 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|                                                   descriptor: opDesc |                                                   descriptor: opDesc | ||||||
|                                                         name: nil]; |                                                         name: nil]; | ||||||
|  |  | ||||||
|  |  | ||||||
|                         gradientTensor_ = [outputs objectAtIndex:0]; |                         gradientTensor_ = [outputs objectAtIndex:0]; | ||||||
|                         [gradOutputArray addObject:[outputs objectAtIndex:0]]; |                         [gradRecWeightsArray insertObject:[outputs objectAtIndex:1] atIndex:0]; | ||||||
|                         [gradRecWeightsArray addObject:[outputs objectAtIndex:1]]; |                         [gradWeightsArray insertObject:[outputs objectAtIndex:2] atIndex:0]; | ||||||
|                         [gradWeightsArray addObject:[outputs objectAtIndex:2]]; |                         [gradBiasArray insertObject: [outputs objectAtIndex:3] atIndex:0]; | ||||||
|                         [gradBiasArray addObject:[outputs objectAtIndex:3]]; |                         [gradStateArray insertObject: [mpsGraph expandDimsOfTensor:[outputs objectAtIndex:4] axis:0 name:nil]  atIndex:0]; | ||||||
|                         [gradStateArray addObject:[outputs objectAtIndex:4]]; |                         [gradCellStateArray insertObject: [mpsGraph expandDimsOfTensor:[outputs objectAtIndex:5] axis:0 name:nil] atIndex:0]; | ||||||
|                         [gradCellStateArray addObject:[outputs objectAtIndex:5]]; |  | ||||||
|                     } |                     } | ||||||
|                     std::vector<MPSGraphTensor*> outputTensors = {[outputs objectAtIndex:0],[outputs objectAtIndex:1],[outputs objectAtIndex:2],[outputs objectAtIndex:3], [outputs objectAtIndex:4], [outputs objectAtIndex:5]}; |                     std::vector<MPSGraphTensor*> outputTensors = {[outputs objectAtIndex:0],[outputs objectAtIndex:1],[outputs objectAtIndex:2],[outputs objectAtIndex:3], [outputs objectAtIndex:4], [outputs objectAtIndex:5]}; | ||||||
|  |  | ||||||
|  |                     if (batch_first) { | ||||||
|  |                         MPSGraphTensor* gradientTensorTransposed = [mpsGraph transposeTensor:gradientTensor_ | ||||||
|  |                                                                                    dimension: 0 | ||||||
|  |                                                                                withDimension: 1 | ||||||
|  |                                                                                         name:nil]; | ||||||
|  |                         newCachedGraph->gradOutput_ = gradientTensorTransposed; | ||||||
|  |                     } else { | ||||||
|  |                         newCachedGraph->gradOutput_ = gradientTensor_; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|                     newCachedGraph->outputTensors_ = outputTensors; |                     newCachedGraph->outputTensors_ = outputTensors; | ||||||
|                     newCachedGraph->gradOutput_ = gradOutputArray; |  | ||||||
|                     newCachedGraph->gradRecWeights_ = gradRecWeightsArray; |                     newCachedGraph->gradRecWeights_ = gradRecWeightsArray; | ||||||
|                     newCachedGraph->gradWeights_ = gradWeightsArray; |                     newCachedGraph->gradWeights_ = gradWeightsArray; | ||||||
|                     newCachedGraph->gradBias_ = gradBiasArray; |                     newCachedGraph->gradBias_ = gradBiasArray; | ||||||
|                     newCachedGraph->gradState_ = gradStateArray; |                     newCachedGraph->gradState_ = [mpsGraph concatTensors:gradStateArray dimension: 0 name: nil]; | ||||||
|                     newCachedGraph->gradCellState_ = gradCellStateArray; |                     newCachedGraph->gradCellState_ = [mpsGraph concatTensors:gradCellStateArray dimension: 0 name: nil]; | ||||||
|  |  | ||||||
|                 } |                 } | ||||||
|                 return newCachedGraph; |                 return newCachedGraph; | ||||||
|             }); |             }); | ||||||
| @ -423,6 +497,7 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|         Placeholder cellStateFwdPlaceholder   = Placeholder(cachedGraph->inputTensors_[5], cell_state_fwd); |         Placeholder cellStateFwdPlaceholder   = Placeholder(cachedGraph->inputTensors_[5], cell_state_fwd); | ||||||
|         Placeholder gradientHyPlaceholder   = Placeholder(cachedGraph->inputTensors_[6], grad_hy); |         Placeholder gradientHyPlaceholder   = Placeholder(cachedGraph->inputTensors_[6], grad_hy); | ||||||
|         Placeholder gradientCyPlaceholder   = Placeholder(cachedGraph->inputTensors_[7], grad_cy); |         Placeholder gradientCyPlaceholder   = Placeholder(cachedGraph->inputTensors_[7], grad_cy); | ||||||
|  |         Placeholder layersOutputsPlaceholder   = Placeholder(cachedGraph->inputTensors_[8], layersOutputs); | ||||||
|  |  | ||||||
|         NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*> *feeds = [[[NSMutableDictionary alloc] init] autorelease]; |         NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*> *feeds = [[[NSMutableDictionary alloc] init] autorelease]; | ||||||
|         [feeds setObject:gradientPlaceholder.getMPSGraphTensorData() forKey:gradientPlaceholder.getMPSGraphTensor()]; |         [feeds setObject:gradientPlaceholder.getMPSGraphTensorData() forKey:gradientPlaceholder.getMPSGraphTensor()]; | ||||||
| @ -433,6 +508,7 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|         [feeds setObject:cellStatePlaceholder.getMPSGraphTensorData() forKey:cellStatePlaceholder.getMPSGraphTensor()]; |         [feeds setObject:cellStatePlaceholder.getMPSGraphTensorData() forKey:cellStatePlaceholder.getMPSGraphTensor()]; | ||||||
|         [feeds setObject:zStatePlaceholder.getMPSGraphTensorData() forKey:zStatePlaceholder.getMPSGraphTensor()]; |         [feeds setObject:zStatePlaceholder.getMPSGraphTensorData() forKey:zStatePlaceholder.getMPSGraphTensor()]; | ||||||
|         [feeds setObject:cellStateFwdPlaceholder.getMPSGraphTensorData() forKey:cellStateFwdPlaceholder.getMPSGraphTensor()]; |         [feeds setObject:cellStateFwdPlaceholder.getMPSGraphTensorData() forKey:cellStateFwdPlaceholder.getMPSGraphTensor()]; | ||||||
|  |         [feeds setObject:layersOutputsPlaceholder.getMPSGraphTensorData() forKey:layersOutputsPlaceholder.getMPSGraphTensor()]; | ||||||
|  |  | ||||||
|         NSMutableArray<MPSGraphTensor*> *kernelWeightsList = cachedGraph->kernelWeightsList_; |         NSMutableArray<MPSGraphTensor*> *kernelWeightsList = cachedGraph->kernelWeightsList_; | ||||||
|         NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList = cachedGraph->recurrentKernelWeightsList_; |         NSMutableArray<MPSGraphTensor*> *recurrentKernelWeightsList = cachedGraph->recurrentKernelWeightsList_; | ||||||
| @ -445,68 +521,65 @@ std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> lstm_mps_backward(c | |||||||
|         for (size_t i = 0; i < num_layers; i+=1) { |         for (size_t i = 0; i < num_layers; i+=1) { | ||||||
|             kernelWeight = Placeholder([kernelWeightsList objectAtIndex:i], kernel_weights[i]); |             kernelWeight = Placeholder([kernelWeightsList objectAtIndex:i], kernel_weights[i]); | ||||||
|             recurrentKernelWeight = Placeholder([recurrentKernelWeightsList objectAtIndex:i], recurrent_kernel_weights[i]); |             recurrentKernelWeight = Placeholder([recurrentKernelWeightsList objectAtIndex:i], recurrent_kernel_weights[i]); | ||||||
|             bias = Placeholder([biasList objectAtIndex:i], biases[i]); |  | ||||||
|             recurrentBias = Placeholder([recurrentBiasList objectAtIndex:i], recurrent_biases[i]); |  | ||||||
|             [feeds setObject:kernelWeight.getMPSGraphTensorData() forKey:kernelWeight.getMPSGraphTensor()]; |             [feeds setObject:kernelWeight.getMPSGraphTensorData() forKey:kernelWeight.getMPSGraphTensor()]; | ||||||
|             [feeds setObject:recurrentKernelWeight.getMPSGraphTensorData() forKey:recurrentKernelWeight.getMPSGraphTensor()]; |             [feeds setObject:recurrentKernelWeight.getMPSGraphTensorData() forKey:recurrentKernelWeight.getMPSGraphTensor()]; | ||||||
|             [feeds setObject:bias.getMPSGraphTensorData() forKey:bias.getMPSGraphTensor()]; |             if(has_biases) { | ||||||
|             [feeds setObject:recurrentBias.getMPSGraphTensorData() forKey:recurrentBias.getMPSGraphTensor()]; |                 bias = Placeholder([biasList objectAtIndex:i], biases[i]); | ||||||
|  |                 recurrentBias = Placeholder([recurrentBiasList objectAtIndex:i], recurrent_biases[i]); | ||||||
|  |                 [feeds setObject:bias.getMPSGraphTensorData() forKey:bias.getMPSGraphTensor()]; | ||||||
|  |                 [feeds setObject:recurrentBias.getMPSGraphTensorData() forKey:recurrentBias.getMPSGraphTensor()]; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         Tensor output = at::empty_like(input); |         Tensor output_out = at::empty_like(input); | ||||||
|         Tensor grad_rec_weights = at::empty_like(recurrent_kernel_weights[0]); |         Tensor grad_state_out = at::empty_like(hx[0]); | ||||||
|         Tensor grad_weights = at::empty_like(kernel_weights[0]); |         Tensor grad_cell_state_out = at::empty_like(hx[1]); | ||||||
|         Tensor grad_bias = at::empty_like(biases[0]); |  | ||||||
|         Tensor grad_state = at::empty_like(hx[0]); |  | ||||||
|         Tensor grad_cell_state = at::empty_like(hx[1]); |  | ||||||
|         Placeholder outputPlaceholder   = Placeholder(cachedGraph->outputTensors_[0], output); |  | ||||||
|         Placeholder gradRecWeightsPlaceholder   = Placeholder(cachedGraph->outputTensors_[1], grad_rec_weights); |  | ||||||
|         Placeholder gradWeightsPlaceholder   = Placeholder(cachedGraph->outputTensors_[2], grad_weights); |  | ||||||
|         Placeholder gradBiasPlaceholder   = Placeholder(cachedGraph->outputTensors_[3], grad_bias); |  | ||||||
|         Placeholder gradStatePlaceholder   = Placeholder(cachedGraph->outputTensors_[4], grad_state); |  | ||||||
|         Placeholder gradCellStatePlaceholder   = Placeholder(cachedGraph->outputTensors_[5], grad_cell_state); |  | ||||||
|  |  | ||||||
|         std::vector<Tensor> grad_hx = {grad_state, grad_cell_state}; |  | ||||||
|  |         std::vector<Tensor> grad_hx = {grad_state_out, grad_cell_state_out}; | ||||||
|  |  | ||||||
|         NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*> *results = [[[NSMutableDictionary alloc] init] autorelease]; |         NSMutableDictionary<MPSGraphTensor*, MPSGraphTensorData*> *results = [[[NSMutableDictionary alloc] init] autorelease]; | ||||||
|         NSMutableArray<MPSGraphTensor*> *gradOutputArray = cachedGraph->gradOutput_; |  | ||||||
|         NSMutableArray<MPSGraphTensor*> *gradRecWeightsArray = cachedGraph->gradRecWeights_; |         NSMutableArray<MPSGraphTensor*> *gradRecWeightsArray = cachedGraph->gradRecWeights_; | ||||||
|         NSMutableArray<MPSGraphTensor*> *gradWeightsArray = cachedGraph->gradWeights_; |         NSMutableArray<MPSGraphTensor*> *gradWeightsArray = cachedGraph->gradWeights_; | ||||||
|         NSMutableArray<MPSGraphTensor*> *gradBiasArray = cachedGraph->gradBias_; |         NSMutableArray<MPSGraphTensor*> *gradBiasArray = cachedGraph->gradBias_; | ||||||
|         NSMutableArray<MPSGraphTensor*> *gradStateArray = cachedGraph->gradState_; |         MPSGraphTensor* gradOutput = cachedGraph->gradOutput_; | ||||||
|         NSMutableArray<MPSGraphTensor*> *gradCellStateArray = cachedGraph->gradCellState_; |         MPSGraphTensor* gradState = cachedGraph->gradState_; | ||||||
|         Placeholder gradOutPlaceholder; |         MPSGraphTensor* gradCellState = cachedGraph->gradCellState_; | ||||||
|  |  | ||||||
|  |         Placeholder gradStatePlaceholder = Placeholder(gradState, grad_state_out); | ||||||
|  |         Placeholder gradCellStatePlaceholder = Placeholder(gradCellState, grad_cell_state_out); | ||||||
|  |         Placeholder outputPlaceholder = Placeholder(gradOutput, output_out); | ||||||
|  |         [results setObject:gradStatePlaceholder.getMPSGraphTensorData() forKey:gradStatePlaceholder.getMPSGraphTensor()]; | ||||||
|  |         [results setObject:gradCellStatePlaceholder.getMPSGraphTensorData() forKey:gradCellStatePlaceholder.getMPSGraphTensor()]; | ||||||
|  |         [results setObject:outputPlaceholder.getMPSGraphTensorData() forKey:outputPlaceholder.getMPSGraphTensor()]; | ||||||
|  |  | ||||||
|  |         Placeholder gradRecWeightsPlaceholder, gradWeightsPlaceholder, gradBiasPlaceholder; | ||||||
|  |  | ||||||
|         std::vector<Tensor> weights; |         std::vector<Tensor> weights; | ||||||
|         for (int i = 0; i < num_layers; i++) { |         for (int i = 0; i < num_layers; i++) { | ||||||
|             Tensor output = at::empty_like(input); |  | ||||||
|             Tensor grad_rec_weights = at::empty_like(recurrent_kernel_weights[i]); |             Tensor grad_rec_weights = at::empty_like(recurrent_kernel_weights[i]); | ||||||
|             Tensor grad_weights = at::empty_like(kernel_weights[i]); |             Tensor grad_weights = at::empty_like(kernel_weights[i]); | ||||||
|             Tensor grad_bias = at::empty_like(biases[i]); |             Tensor grad_bias = at::empty((kernel_weights[i].size(0)), kernel_weights[i].options()); | ||||||
|             Tensor grad_state = at::empty_like(hx[0]); |  | ||||||
|             Tensor grad_cell_state = at::empty_like(hx[1]); |  | ||||||
|             weights.push_back(grad_weights); |             weights.push_back(grad_weights); | ||||||
|             weights.push_back(grad_rec_weights); |             weights.push_back(grad_rec_weights); | ||||||
|             weights.push_back(grad_bias); |  | ||||||
|             weights.push_back(grad_bias); |  | ||||||
|             gradOutPlaceholder = Placeholder([gradOutputArray objectAtIndex:i], output); |  | ||||||
|             gradRecWeightsPlaceholder = Placeholder([gradRecWeightsArray objectAtIndex:i], grad_rec_weights); |  | ||||||
|             gradWeightsPlaceholder = Placeholder([gradWeightsArray objectAtIndex:i], grad_weights); |  | ||||||
|             gradBiasPlaceholder = Placeholder([gradBiasArray objectAtIndex:i], grad_bias); |  | ||||||
|             gradStatePlaceholder = Placeholder([gradStateArray objectAtIndex:i], grad_state); |  | ||||||
|             gradCellStatePlaceholder = Placeholder([gradCellStateArray objectAtIndex:i], grad_cell_state); |  | ||||||
|  |  | ||||||
|             [results setObject:gradOutPlaceholder.getMPSGraphTensorData() forKey:gradOutPlaceholder.getMPSGraphTensor()]; |             if(has_biases) { | ||||||
|             [results setObject:gradRecWeightsPlaceholder.getMPSGraphTensorData() forKey:gradRecWeightsPlaceholder.getMPSGraphTensor()]; |                 weights.push_back(grad_bias); | ||||||
|  |                 weights.push_back(grad_bias); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             gradRecWeightsPlaceholder = Placeholder([gradRecWeightsArray objectAtIndex: i], grad_rec_weights); | ||||||
|  |             gradWeightsPlaceholder = Placeholder([gradWeightsArray objectAtIndex: i], grad_weights); | ||||||
|  |             gradBiasPlaceholder = Placeholder([gradBiasArray objectAtIndex: i], grad_bias); | ||||||
|  |  | ||||||
|             [results setObject:gradBiasPlaceholder.getMPSGraphTensorData() forKey:gradBiasPlaceholder.getMPSGraphTensor()]; |             [results setObject:gradBiasPlaceholder.getMPSGraphTensorData() forKey:gradBiasPlaceholder.getMPSGraphTensor()]; | ||||||
|             [results setObject:gradStatePlaceholder.getMPSGraphTensorData() forKey:gradStatePlaceholder.getMPSGraphTensor()]; |             [results setObject:gradRecWeightsPlaceholder.getMPSGraphTensorData() forKey:gradRecWeightsPlaceholder.getMPSGraphTensor()]; | ||||||
|             [results setObject:gradCellStatePlaceholder.getMPSGraphTensorData() forKey:gradCellStatePlaceholder.getMPSGraphTensor()]; |  | ||||||
|             [results setObject:gradWeightsPlaceholder.getMPSGraphTensorData() forKey:gradWeightsPlaceholder.getMPSGraphTensor()]; |             [results setObject:gradWeightsPlaceholder.getMPSGraphTensorData() forKey:gradWeightsPlaceholder.getMPSGraphTensor()]; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         runMPSGraph(stream, cachedGraph->graph(), feeds, results); |         runMPSGraph(stream, cachedGraph->graph(), feeds, results); | ||||||
|  |  | ||||||
|         return std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> (output, grad_hx, weights); |         return std::tuple<Tensor, std::vector<Tensor>, std::vector<Tensor>> (output_out, grad_hx, weights); | ||||||
|  |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -35,7 +35,9 @@ TORCH_IMPL_FUNC(sort_stable_out_mps) | |||||||
|     indices.copy_(cpu_indices); |     indices.copy_(cpu_indices); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   TORCH_WARN_ONCE(self.scalar_type() != ScalarType::Long, "MPS: no support for int64 min/max ops, casting it to int32"); |   if (self.scalar_type() == ScalarType::Long) { | ||||||
|  |     TORCH_WARN_ONCE("MPS: no support for int64 min/max ops, casting it to int32"); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   MPSStream* stream = getCurrentMPSStream(); |   MPSStream* stream = getCurrentMPSStream(); | ||||||
|   struct CachedGraph : public MPSCachedGraph { |   struct CachedGraph : public MPSCachedGraph { | ||||||
|  | |||||||
| @ -75,15 +75,20 @@ MPSGraphTensor* trunc_tensor(MPSGraph* mpsGraph, MPSGraphTensor* inputTensor) | |||||||
|     return inputTensor; |     return inputTensor; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   MPSGraphTensor* zeroTensor = [mpsGraph constantWithScalar:0.0 |   if(!is_macos_13_or_newer()) { | ||||||
|                                                    dataType:inputTensor.dataType]; |     MPSGraphTensor* zeroTensor = [mpsGraph constantWithScalar:0.0 | ||||||
|   MPSGraphTensor* predicateTensor = [mpsGraph lessThanWithPrimaryTensor:inputTensor |                                                     dataType:inputTensor.dataType]; | ||||||
|                                                         secondaryTensor:zeroTensor |     MPSGraphTensor* predicateTensor = [mpsGraph lessThanWithPrimaryTensor:inputTensor | ||||||
|                                                                     name:nil]; |                                                           secondaryTensor:zeroTensor | ||||||
|   return [mpsGraph selectWithPredicateTensor:predicateTensor |                                                                       name:nil]; | ||||||
|                          truePredicateTensor:[mpsGraph ceilWithTensor :inputTensor name:nil] |     return [mpsGraph selectWithPredicateTensor:predicateTensor | ||||||
|                         falsePredicateTensor:[mpsGraph floorWithTensor:inputTensor name:nil] |                           truePredicateTensor:[mpsGraph ceilWithTensor :inputTensor name:nil] | ||||||
|                                         name:nil]; |                           falsePredicateTensor:[mpsGraph floorWithTensor:inputTensor name:nil] | ||||||
|  |                                           name:nil]; | ||||||
|  |   } else { | ||||||
|  |     return [mpsGraph truncateWithTensor:inputTensor | ||||||
|  |                                    name:nil]; | ||||||
|  |   } | ||||||
| }; | }; | ||||||
|  |  | ||||||
| } // namespace mps | } // namespace mps | ||||||
|  | |||||||
| @ -26,6 +26,11 @@ void upsample_out_template(const Tensor& input, | |||||||
|   } else { |   } else { | ||||||
|     native::upsample_2d_common_check(input.sizes(), output_size); |     native::upsample_2d_common_check(input.sizes(), output_size); | ||||||
|   } |   } | ||||||
|  |   Tensor out; | ||||||
|  |   if (!output.is_contiguous()) { | ||||||
|  |     out = at::empty_like(output, MemoryFormat::Contiguous); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   bool centerResults = false; |   bool centerResults = false; | ||||||
|   MPSGraphResizeMode resizeMode = MPSGraphResizeNearest; |   MPSGraphResizeMode resizeMode = MPSGraphResizeNearest; | ||||||
|   MPSGraphResizeNearestRoundingMode nearestRoundingMode = MPSGraphResizeNearestRoundingModeFloor; |   MPSGraphResizeNearestRoundingMode nearestRoundingMode = MPSGraphResizeNearestRoundingModeFloor; | ||||||
| @ -199,7 +204,7 @@ void upsample_out_template(const Tensor& input, | |||||||
|     MPSGraphTensorData* sizeTensorData = [[[MPSGraphTensorData alloc] initWithMPSNDArray: sizeNDArray] autorelease]; |     MPSGraphTensorData* sizeTensorData = [[[MPSGraphTensorData alloc] initWithMPSNDArray: sizeNDArray] autorelease]; | ||||||
|  |  | ||||||
|     Placeholder inputPlaceholder  = Placeholder(cachedGraph->inputTensor, input); |     Placeholder inputPlaceholder  = Placeholder(cachedGraph->inputTensor, input); | ||||||
|     Placeholder outputPlaceholder = Placeholder(cachedGraph->outputTensor, output); |     Placeholder outputPlaceholder = Placeholder(cachedGraph->outputTensor, out.has_storage() ? out : output, nil, false); | ||||||
|  |  | ||||||
|     NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* feeds = @{ |     NSDictionary<MPSGraphTensor*, MPSGraphTensorData*>* feeds = @{ | ||||||
|         inputPlaceholder.getMPSGraphTensor() : inputPlaceholder.getMPSGraphTensorData(), |         inputPlaceholder.getMPSGraphTensor() : inputPlaceholder.getMPSGraphTensorData(), | ||||||
| @ -209,6 +214,10 @@ void upsample_out_template(const Tensor& input, | |||||||
|         outputPlaceholder.getMPSGraphTensor() : outputPlaceholder.getMPSGraphTensorData() |         outputPlaceholder.getMPSGraphTensor() : outputPlaceholder.getMPSGraphTensorData() | ||||||
|     }; |     }; | ||||||
|     runMPSGraph(stream, cachedGraph->graph(), feeds, results); |     runMPSGraph(stream, cachedGraph->graph(), feeds, results); | ||||||
|  |  | ||||||
|  |     if (out.has_storage()) { | ||||||
|  |       output.copy_(out); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -424,22 +424,54 @@ MPSGraphTensor* asStridedLayer_pattern(MPSGraph *graph, MPSGraphTensor *inputTen | |||||||
| } | } | ||||||
|  |  | ||||||
| static | static | ||||||
| std::vector<int64_t> getViewShape(const Tensor& src, MPSShape *mpsShape) { | std::vector<int64_t> getViewShape(const Tensor& src, MPSShape *mpsShape, const bool squeeze) { | ||||||
|   bool hasMPSShape = (mpsShape != nil); |   bool hasMPSShape = (mpsShape != nil); | ||||||
|   std::vector<int64_t> src_view_shape; |   std::vector<int64_t> src_view_shape; | ||||||
|   if (hasMPSShape) { |   if (hasMPSShape) { | ||||||
|     int src_ndim_view = [mpsShape count]; |     int src_ndim_view = [mpsShape count]; | ||||||
|     src_view_shape.resize(src_ndim_view); |     if (squeeze) { | ||||||
|     for (const auto i : c10::irange(src_ndim_view)) { |       for (const auto i : c10::irange(src_ndim_view)) { | ||||||
|       src_view_shape[i] = [mpsShape[i] intValue]; |         if ([mpsShape[i] intValue] == 1) | ||||||
|  |           continue; | ||||||
|  |         src_view_shape.emplace_back([mpsShape[i] intValue]); | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       src_view_shape.resize(src_ndim_view); | ||||||
|  |       for (const auto i : c10::irange(src_ndim_view)) { | ||||||
|  |         src_view_shape[i] = [mpsShape[i] intValue]; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   } else { |   } else { | ||||||
|     src_view_shape = src.sizes().vec(); |     if (squeeze) { | ||||||
|  |       IntArrayRef src_shape = src.sizes(); | ||||||
|  |       size_t src_ndim_view = src_shape.size(); | ||||||
|  |       for (const auto i : c10::irange(src_ndim_view)) { | ||||||
|  |         if (src_shape[i] == 1) | ||||||
|  |           continue; | ||||||
|  |         src_view_shape.emplace_back(src_shape[i]); | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       src_view_shape = src.sizes().vec(); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return src_view_shape; |   return src_view_shape; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | std::vector<int64_t> getSqueezedBaseShape(const Tensor& src, IntArrayRef shape) { | ||||||
|  |   std::vector<int64_t> src_base_shape; | ||||||
|  |   for (const auto i : c10::irange(shape.size())) { | ||||||
|  |     if (shape[i] == 1) | ||||||
|  |       continue; | ||||||
|  |     src_base_shape.emplace_back(shape[i]); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return src_base_shape; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool canSliceViewTensor(const Tensor& src, MPSShape *mpsShape) { | bool canSliceViewTensor(const Tensor& src, MPSShape *mpsShape) { | ||||||
|   if (!src.is_contiguous()) { |   if (!src.is_contiguous()) { | ||||||
|     return false; |     return false; | ||||||
| @ -447,57 +479,79 @@ bool canSliceViewTensor(const Tensor& src, MPSShape *mpsShape) { | |||||||
|  |  | ||||||
|   IntArrayRef src_base_shape = getIMPSAllocator()->getBufferShape(src.storage().data()); |   IntArrayRef src_base_shape = getIMPSAllocator()->getBufferShape(src.storage().data()); | ||||||
|   size_t src_ndim_base = src_base_shape.size(); |   size_t src_ndim_base = src_base_shape.size(); | ||||||
|   std::vector<int64_t> src_view_shape = getViewShape(src, mpsShape); |   std::vector<int64_t> src_view_shape = getViewShape(src, mpsShape, false); | ||||||
|   size_t src_ndim_view = src_view_shape.size(); |   size_t src_ndim_view = src_view_shape.size(); | ||||||
|  |  | ||||||
|   if (src_ndim_base != src_ndim_view) { |   if (src_ndim_base != src_ndim_view) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   for (const auto i: c10::irange(src_ndim_base)) { |   for (const auto i: c10::irange(src_ndim_base)) { | ||||||
|     if (src_view_shape[i] > src_base_shape[i]) { |      if (src_view_shape[i] > src_base_shape[i]) { | ||||||
|       return false; |        return false; | ||||||
|     } |      } | ||||||
|   } |    } | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| MPSGraphTensorData* getMPSGraphTensorDataForView(const Tensor& src, MPSShape *mpsShape, const MPSDataType mpsDataType) { | MPSGraphTensorData* getMPSGraphTensorDataForView(const Tensor& src, MPSShape *mpsShape, const MPSDataType mpsDataType) { | ||||||
|   IntArrayRef src_base_shape = getIMPSAllocator()->getBufferShape(src.storage().data()); |   IntArrayRef src_base_shape = getIMPSAllocator()->getBufferShape(src.storage().data()); | ||||||
|   int src_ndim_base = src_base_shape.size(); |   size_t src_ndim_base = src_base_shape.size(); | ||||||
|   std::vector<int64_t> src_view_shape = getViewShape(src, mpsShape); |   std::vector<int64_t> src_view_shape = getViewShape(src, mpsShape, false); | ||||||
|   int src_ndim_view = src_view_shape.size(); |   size_t src_ndim_view = src_view_shape.size(); | ||||||
|  |  | ||||||
|   TORCH_CHECK(src_ndim_base == src_ndim_view); |  | ||||||
|  |  | ||||||
|   MPSNDArray *srcTensorNDArrayView = nil; |   MPSNDArray *srcTensorNDArrayView = nil; | ||||||
|   MPSNDArrayDescriptor *srcTensorNDArrayDesc = nil; |   MPSNDArrayDescriptor *srcTensorNDArrayDesc = nil; | ||||||
|   MPSNDArray *srcTensorNDArray = nil; |   MPSNDArray *srcTensorNDArray = nil; | ||||||
|   id<MTLCommandBuffer> commandBuffer = getCurrentMPSStream()->commandBuffer(); |   id<MTLCommandBuffer> commandBuffer = getCurrentMPSStream()->commandBuffer(); | ||||||
|  |   int64_t base_idx = 0; | ||||||
|  |  | ||||||
|  |   std::vector<int64_t> src_base_shape_vec; | ||||||
|  |  | ||||||
|  |   if (src_ndim_view != src_ndim_base) { | ||||||
|  |     src_base_shape_vec.reserve(src_ndim_view); | ||||||
|  |     for (const auto i : c10::irange(src_ndim_view)) { | ||||||
|  |       if (src_view_shape[i] == 1 && src_base_shape[base_idx] != 1) { | ||||||
|  |         src_base_shape_vec.emplace_back(1); | ||||||
|  |       } else { | ||||||
|  |         src_base_shape_vec.emplace_back(src_base_shape[base_idx]); | ||||||
|  |         if (base_idx < src_ndim_base - 1) | ||||||
|  |           base_idx += 1; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     src_base_shape = IntArrayRef(src_base_shape_vec); | ||||||
|  |     src_ndim_base = src_base_shape.size(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   srcTensorNDArray = ndArrayFromTensor(src, getMPSShape(src_base_shape), mpsDataType); |   srcTensorNDArray = ndArrayFromTensor(src, getMPSShape(src_base_shape), mpsDataType); | ||||||
|   srcTensorNDArrayDesc = srcTensorNDArray.descriptor; |   srcTensorNDArrayDesc = srcTensorNDArray.descriptor; | ||||||
|  |  | ||||||
|   int firstDimToSlice = 0; |   size_t firstDimToSlice = 0; | ||||||
|   while (src_base_shape[firstDimToSlice] == src_view_shape[firstDimToSlice]) { |   while (src_base_shape[firstDimToSlice] == src_view_shape[firstDimToSlice]) { | ||||||
|     firstDimToSlice++; |     firstDimToSlice++; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   int view_numel = 1; |   int64_t view_numel = 1; | ||||||
|   for (const auto i : c10::irange(firstDimToSlice + 1, src_base_shape.size())) { |   for (const auto i : c10::irange(firstDimToSlice + 1, src_base_shape.size())) { | ||||||
|     view_numel *= src_base_shape[i]; |     view_numel *= src_base_shape[i]; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   int sliceOffset = src.storage_offset() / view_numel; |   int64_t sliceOffset = src.storage_offset() / view_numel; | ||||||
|   // There are cases where both dimensions of a view can shrink |   [srcTensorNDArrayDesc sliceDimension:src_ndim_base - 1 - firstDimToSlice | ||||||
|   // E.g: x = torch.randn((3,6))[1, 1:3] |                           withSubrange:{static_cast<NSUInteger>(sliceOffset), static_cast<NSUInteger>(src.sizes()[firstDimToSlice])}]; | ||||||
|   int nextSliceOffset = src.storage_offset() % view_numel; |  | ||||||
|  |  | ||||||
|   [srcTensorNDArrayDesc sliceDimension:src_ndim_base - 1 - firstDimToSlice withSubrange:{static_cast<NSUInteger>(sliceOffset), static_cast<NSUInteger>(src.sizes()[firstDimToSlice])}]; |   // Slice any remaining dimensions | ||||||
|   if (nextSliceOffset) { |   for (const auto crtSliceOffset: c10::irange(firstDimToSlice + 1, src_base_shape.size())) { | ||||||
|     [srcTensorNDArrayDesc sliceDimension:src_ndim_base - 2 - firstDimToSlice withSubrange:{static_cast<NSUInteger>(nextSliceOffset), static_cast<NSUInteger>(src.sizes()[firstDimToSlice+1])}]; |     if (src_view_shape[crtSliceOffset] != src_base_shape[crtSliceOffset]) { | ||||||
|  |       if (crtSliceOffset == src_base_shape.size() - 1) { | ||||||
|  |         sliceOffset = src.storage_offset() % src_base_shape[src_base_shape.size() - 1]; | ||||||
|  |       } else { | ||||||
|  |         sliceOffset = (src.storage_offset() % view_numel) / (view_numel / src_base_shape[crtSliceOffset]); | ||||||
|  |       } | ||||||
|  |       [srcTensorNDArrayDesc sliceDimension:src_ndim_base - 1 - crtSliceOffset | ||||||
|  |                               withSubrange:{static_cast<NSUInteger>(sliceOffset), static_cast<NSUInteger>(src.sizes()[crtSliceOffset])}]; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   srcTensorNDArrayView = [srcTensorNDArray arrayViewWithCommandBuffer:commandBuffer |   srcTensorNDArrayView = [srcTensorNDArray arrayViewWithCommandBuffer:commandBuffer | ||||||
|                                                            descriptor:srcTensorNDArrayDesc |                                                            descriptor:srcTensorNDArrayDesc | ||||||
|                                                              aliasing:MPSAliasingStrategyShallAlias]; |                                                              aliasing:MPSAliasingStrategyShallAlias]; | ||||||
| @ -696,7 +750,7 @@ const std::string& getGatherScatterScalarType(const Tensor& t) { | |||||||
|     {c10::ScalarType::Int,   "int"}, |     {c10::ScalarType::Int,   "int"}, | ||||||
|     {c10::ScalarType::Short, "short"}, |     {c10::ScalarType::Short, "short"}, | ||||||
|     {c10::ScalarType::Char,  "char"}, |     {c10::ScalarType::Char,  "char"}, | ||||||
|     {c10::ScalarType::Byte,  "char"}, |     {c10::ScalarType::Byte,  "uchar"}, | ||||||
|     {c10::ScalarType::Bool,  "bool"}, |     {c10::ScalarType::Bool,  "bool"}, | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  | |||||||
| @ -3567,19 +3567,14 @@ | |||||||
| - func: max_pool1d(Tensor self, int[1] kernel_size, int[1] stride=[], int[1] padding=0, int[1] dilation=1, bool ceil_mode=False) -> Tensor | - func: max_pool1d(Tensor self, int[1] kernel_size, int[1] stride=[], int[1] padding=0, int[1] dilation=1, bool ceil_mode=False) -> Tensor | ||||||
|  |  | ||||||
| - func: max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor | - func: max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor | ||||||
|  |  | ||||||
| # TODO: Add this function to MPS dispatch key so that we avoid declaring it in |  | ||||||
| # native_functions.yaml |  | ||||||
| # https://github.com/pytorch/pytorch/issues/77394 |  | ||||||
| - func: _mps_max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor |  | ||||||
|   dispatch: |   dispatch: | ||||||
|     MPS: _mps_max_pool2d |     CompositeImplicitAutograd: max_pool2d | ||||||
|   autogen: _mps_max_pool2d.out |     MPS: mps_max_pool2d | ||||||
|  |  | ||||||
| - func: mps_max_pool2d_backward(Tensor grad_output, Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor | - func: max_pool2d_backward(Tensor grad_output, Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor | ||||||
|   dispatch: |   dispatch: | ||||||
|     MPS: mps_max_pool2d_backward |     MPS: mps_max_pool2d_backward | ||||||
|   autogen: mps_max_pool2d_backward.out |   autogen: max_pool2d_backward.out | ||||||
|  |  | ||||||
| - func: mkldnn_max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor | - func: mkldnn_max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensor | ||||||
|   dispatch: |   dispatch: | ||||||
| @ -7188,12 +7183,12 @@ | |||||||
|  |  | ||||||
| # MPS LSTM implementation | # MPS LSTM implementation | ||||||
|  |  | ||||||
| - func: _lstm_mps(Tensor input, Tensor[] hx, Tensor[] params, bool has_biases, int num_layers, float dropout, bool train, bool bidirectional, bool batch_first) -> (Tensor, Tensor, Tensor, Tensor, Tensor) | - func: _lstm_mps(Tensor input, Tensor[] hx, Tensor[] params, bool has_biases, int num_layers, float dropout, bool train, bool bidirectional, bool batch_first) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor) | ||||||
|   dispatch: |   dispatch: | ||||||
|     MPS: _lstm_mps |     MPS: _lstm_mps | ||||||
|   autogen: _lstm_mps.out |   autogen: _lstm_mps.out | ||||||
|  |  | ||||||
| - func: lstm_mps_backward(Tensor grad_y, Tensor? grad_hy, Tensor? grad_cy, Tensor z_state, Tensor cell_state_fwd, Tensor input, Tensor[] hx, Tensor[] params, bool has_biases, int num_layers, float dropout, bool train, bool bidirectional, bool batch_first) -> (Tensor, Tensor[], Tensor[]) | - func: lstm_mps_backward(Tensor grad_y, Tensor? grad_hy, Tensor? grad_cy, Tensor z_state, Tensor cell_state_fwd, Tensor input, Tensor layersOutputs, Tensor[] hx, Tensor[] params, bool has_biases, int num_layers, float dropout, bool train, bool bidirectional, bool batch_first) -> (Tensor, Tensor[], Tensor[]) | ||||||
|   dispatch: |   dispatch: | ||||||
|     MPS: lstm_mps_backward |     MPS: lstm_mps_backward | ||||||
|   autogen: lstm_mps_backward.out |   autogen: lstm_mps_backward.out | ||||||
|  | |||||||
| @ -379,16 +379,33 @@ inline bool check_gpu_sm50_or_greater(sdp_params params, bool debug) { | |||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| inline bool check_gpu_sm86_head_dim_128(sdp_params params, bool debug) { | inline bool check_head_dim_gt64_and_sm_ge86(sdp_params params, bool debug) { | ||||||
|   // Memory Efficient Attention is throwing a cuda illegal memory error |   // Memory Efficient Attention is throwing a cuda illegal memory error | ||||||
|   // on sm86 when head_dim is 128. |   // on sm86 or newer when head_dim is greater than 64. | ||||||
|   auto dprops = at::cuda::getCurrentDeviceProperties(); |   auto dprops = at::cuda::getCurrentDeviceProperties(); | ||||||
|   bool is_sm86 = (dprops->major == 8) && (dprops->minor == 6); |   bool is_sm86_or_newer = (dprops->major == 8) && (dprops->minor >= 6); | ||||||
|   if (is_sm86 && (params.query.size(-1) == 128)) { |   // Categorically disable sm90 as well. Will want to fix this once we have H100s available for testing. | ||||||
|  |   is_sm86_or_newer = is_sm86_or_newer || (dprops->major > 8); | ||||||
|  |   if (is_sm86_or_newer && (params.query.sym_size(-1) > 64)) { | ||||||
|     if (debug) { |     if (debug) { | ||||||
|       TORCH_WARN( |       TORCH_WARN( | ||||||
|         "Memory Efficient Attention does not currently support head_dim == 128 on sm86", |           "Memory Efficient Attention does not currently support head_dim greater than 64 on sm86 or newer"); | ||||||
|         "because it is throwing a cuda illegal memory error on sm86 when head_dim is 128."); |     } | ||||||
|  |     return false; | ||||||
|  |   } | ||||||
|  |   return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | inline bool check_requires_grad_and_head_dim_gt64_and_sm_ge86( | ||||||
|  |     sdp_params params, | ||||||
|  |     bool debug) { | ||||||
|  |   // Flash Attention will raise an error in the backward pass if the head_dim | ||||||
|  |   // size is greater than 64 And the device is sm86 or newer. | ||||||
|  |   if (!check_requires_grad(params, false) && | ||||||
|  |       !check_head_dim_gt64_and_sm_ge86(params, false)) { | ||||||
|  |     if (debug) { | ||||||
|  |       TORCH_WARN( | ||||||
|  |           "Flash attention currently doesn't support training with head_dim greater than 64 on sm86 or newer."); | ||||||
|     } |     } | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
| @ -422,13 +439,14 @@ inline bool use_flash_attention(sdp_params params, bool debug) { | |||||||
|   return false; |   return false; | ||||||
| #endif | #endif | ||||||
|   //  Define gate functions that determine if a flash kernel can be ran |   //  Define gate functions that determine if a flash kernel can be ran | ||||||
|   constexpr std::array<bool(*)(sdp_params, bool), 8> constraints {{ |   constexpr std::array<bool(*)(sdp_params, bool), 9> constraints {{ | ||||||
|       check_runtime_disabled_flash, |       check_runtime_disabled_flash, | ||||||
|       check_tensor_shapes, |       check_tensor_shapes, | ||||||
|       check_equal_batch_size_and_num_heads, |       check_equal_batch_size_and_num_heads, | ||||||
|       check_for_attn_mask, |       check_for_attn_mask, | ||||||
|       check_head_dim_size, |       check_head_dim_size, | ||||||
|       check_gpu_sm75_or_greater, |       check_gpu_sm75_or_greater, | ||||||
|  |       check_requires_grad_and_head_dim_gt64_and_sm_ge86, | ||||||
|       check_for_nested_inputs, |       check_for_nested_inputs, | ||||||
|       check_for_seq_len_1_nested_tensor}}; |       check_for_seq_len_1_nested_tensor}}; | ||||||
|   for (auto& constraint : constraints) { |   for (auto& constraint : constraints) { | ||||||
| @ -465,7 +483,7 @@ inline bool use_mem_efficient_attention(sdp_params params, bool debug) { | |||||||
|       check_equal_batch_size_and_num_heads, |       check_equal_batch_size_and_num_heads, | ||||||
|       check_for_attn_mask, |       check_for_attn_mask, | ||||||
|       check_head_dim_size_mem_efficient, |       check_head_dim_size_mem_efficient, | ||||||
|       check_gpu_sm86_head_dim_128, |       check_head_dim_gt64_and_sm_ge86, | ||||||
|       check_for_seq_len_1_nested_tensor, |       check_for_seq_len_1_nested_tensor, | ||||||
|       check_for_non_zero_dropout, |       check_for_non_zero_dropout, | ||||||
|       check_use_deterministic_algorithms}}; |       check_use_deterministic_algorithms}}; | ||||||
|  | |||||||
| @ -630,6 +630,7 @@ macro(cuda_unset_include_and_libraries) | |||||||
|   unset(CUDA_cublas_LIBRARY CACHE) |   unset(CUDA_cublas_LIBRARY CACHE) | ||||||
|   unset(CUDA_cublas_device_LIBRARY CACHE) |   unset(CUDA_cublas_device_LIBRARY CACHE) | ||||||
|   unset(CUDA_cublasemu_LIBRARY CACHE) |   unset(CUDA_cublasemu_LIBRARY CACHE) | ||||||
|  |   unset(CUDA_cublasLt_LIBRARY CACHE) | ||||||
|   unset(CUDA_cufft_LIBRARY CACHE) |   unset(CUDA_cufft_LIBRARY CACHE) | ||||||
|   unset(CUDA_cufftemu_LIBRARY CACHE) |   unset(CUDA_cufftemu_LIBRARY CACHE) | ||||||
|   unset(CUDA_cupti_LIBRARY CACHE) |   unset(CUDA_cupti_LIBRARY CACHE) | ||||||
| @ -963,6 +964,7 @@ endif() | |||||||
|  |  | ||||||
| find_cuda_helper_libs(cufft) | find_cuda_helper_libs(cufft) | ||||||
| find_cuda_helper_libs(cublas) | find_cuda_helper_libs(cublas) | ||||||
|  | find_cuda_helper_libs(cublasLt) | ||||||
| # cusparse showed up in version 3.2 | # cusparse showed up in version 3.2 | ||||||
| find_cuda_helper_libs(cusparse) | find_cuda_helper_libs(cusparse) | ||||||
| find_cuda_helper_libs(curand) | find_cuda_helper_libs(curand) | ||||||
| @ -993,7 +995,7 @@ if (CUDA_BUILD_EMULATION) | |||||||
|   set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublasemu_LIBRARY}) |   set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublasemu_LIBRARY}) | ||||||
| else() | else() | ||||||
|   set(CUDA_CUFFT_LIBRARIES ${CUDA_cufft_LIBRARY}) |   set(CUDA_CUFFT_LIBRARIES ${CUDA_cufft_LIBRARY}) | ||||||
|   set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY}) |   set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY} ${CUDA_cublasLt_LIBRARY}) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| ######################## | ######################## | ||||||
| @ -1962,7 +1964,7 @@ macro(CUDA_ADD_CUBLAS_TO_TARGET target) | |||||||
|   if (CUDA_BUILD_EMULATION) |   if (CUDA_BUILD_EMULATION) | ||||||
|     target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublasemu_LIBRARY}) |     target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublasemu_LIBRARY}) | ||||||
|   else() |   else() | ||||||
|     target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY}) |     target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY} ${CUDA_cublasLt_LIBRARY}) | ||||||
|   endif() |   endif() | ||||||
| endmacro() | endmacro() | ||||||
|  |  | ||||||
|  | |||||||
| @ -10,8 +10,8 @@ endif | |||||||
|  |  | ||||||
| CUDA_VERSION              = 11.7.0 | CUDA_VERSION              = 11.7.0 | ||||||
| CUDNN_VERSION             = 8 | CUDNN_VERSION             = 8 | ||||||
| BASE_RUNTIME              = ubuntu:18.04 | BASE_RUNTIME              = ubuntu:20.04 | ||||||
| BASE_DEVEL                = nvidia/cuda:$(CUDA_VERSION)-cudnn$(CUDNN_VERSION)-devel-ubuntu18.04 | BASE_DEVEL                = nvidia/cuda:$(CUDA_VERSION)-cudnn$(CUDNN_VERSION)-devel-ubuntu20.04 | ||||||
|  |  | ||||||
| # The conda channel to use to install cudatoolkit | # The conda channel to use to install cudatoolkit | ||||||
| CUDA_CHANNEL              = nvidia | CUDA_CHANNEL              = nvidia | ||||||
|  | |||||||
| @ -351,7 +351,7 @@ master_doc = 'index' | |||||||
|  |  | ||||||
| # General information about the project. | # General information about the project. | ||||||
| project = 'PyTorch' | project = 'PyTorch' | ||||||
| copyright = '2022, PyTorch Contributors' | copyright = '2023, PyTorch Contributors' | ||||||
| author = 'PyTorch Contributors' | author = 'PyTorch Contributors' | ||||||
| torch_version = str(torch.__version__) | torch_version = str(torch.__version__) | ||||||
|  |  | ||||||
|  | |||||||
| @ -6,13 +6,12 @@ significant speedups the newer your GPU is. | |||||||
|  |  | ||||||
| .. code:: python | .. code:: python | ||||||
|  |  | ||||||
|    from torch._dynamo import optimize |  | ||||||
|    import torch |    import torch | ||||||
|    def fn(x, y): |    def fn(x, y): | ||||||
|        a = torch.cos(x).cuda() |        a = torch.cos(x).cuda() | ||||||
|        b = torch.sin(y).cuda() |        b = torch.sin(y).cuda() | ||||||
|        return a + b |        return a + b | ||||||
|    new_fn = optimize("inductor")(fn) |    new_fn = torch.compile(fn, backend="inductor") | ||||||
|    input_tensor = torch.randn(10000).to(device="cuda:0") |    input_tensor = torch.randn(10000).to(device="cuda:0") | ||||||
|    a = new_fn(input_tensor, input_tensor) |    a = new_fn(input_tensor, input_tensor) | ||||||
|  |  | ||||||
| @ -54,7 +53,7 @@ with the actual generated kernel being | |||||||
|        tmp2 = tl.sin(tmp1) |        tmp2 = tl.sin(tmp1) | ||||||
|        tl.store(out_ptr0 + (x0 + tl.zeros([XBLOCK], tl.int32)), tmp2, xmask) |        tl.store(out_ptr0 + (x0 + tl.zeros([XBLOCK], tl.int32)), tmp2, xmask) | ||||||
|  |  | ||||||
| And you can verify that fusing the two ``sins`` did actually occur | And you can verify that fusing the two ``sin`` did actually occur | ||||||
| because the two ``sin`` operations occur within a single Triton kernel | because the two ``sin`` operations occur within a single Triton kernel | ||||||
| and the temporary variables are held in registers with very fast access. | and the temporary variables are held in registers with very fast access. | ||||||
|  |  | ||||||
| @ -69,13 +68,12 @@ hub. | |||||||
| .. code-block:: python | .. code-block:: python | ||||||
|  |  | ||||||
|    import torch |    import torch | ||||||
|    import torch._dynamo as dynamo |  | ||||||
|    model = torch.hub.load('pytorch/vision:v0.10.0', 'resnet18', pretrained=True) |    model = torch.hub.load('pytorch/vision:v0.10.0', 'resnet18', pretrained=True) | ||||||
|    opt_model = dynamo.optimize("inductor")(model) |    opt_model = torch.compile(model, backend="inductor") | ||||||
|    model(torch.randn(1,3,64,64)) |    model(torch.randn(1,3,64,64)) | ||||||
|  |  | ||||||
| And that is not the only available backend, you can run in a REPL | And that is not the only available backend, you can run in a REPL | ||||||
| ``dynamo.list_backends()`` to see all the available backends. Try out the | ``torch._dynamo.list_backends()`` to see all the available backends. Try out the | ||||||
| ``cudagraphs`` or ``nvfuser`` next as inspiration. | ``cudagraphs`` or ``nvfuser`` next as inspiration. | ||||||
|  |  | ||||||
| Let’s do something a bit more interesting now, our community frequently | Let’s do something a bit more interesting now, our community frequently | ||||||
| @ -92,11 +90,10 @@ HuggingFace hub and optimize it: | |||||||
|  |  | ||||||
|    import torch |    import torch | ||||||
|    from transformers import BertTokenizer, BertModel |    from transformers import BertTokenizer, BertModel | ||||||
|    import torch._dynamo as dynamo |  | ||||||
|    # Copy pasted from here https://huggingface.co/bert-base-uncased |    # Copy pasted from here https://huggingface.co/bert-base-uncased | ||||||
|    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') |    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') | ||||||
|    model = BertModel.from_pretrained("bert-base-uncased").to(device="cuda:0") |    model = BertModel.from_pretrained("bert-base-uncased").to(device="cuda:0") | ||||||
|    model = dynamo.optimize("inductor")(model) # This is the only line of code that we changed |    model = torch.compile(model, backend="inductor") # This is the only line of code that we changed | ||||||
|    text = "Replace me by any text you'd like." |    text = "Replace me by any text you'd like." | ||||||
|    encoded_input = tokenizer(text, return_tensors='pt').to(device="cuda:0") |    encoded_input = tokenizer(text, return_tensors='pt').to(device="cuda:0") | ||||||
|    output = model(**encoded_input) |    output = model(**encoded_input) | ||||||
| @ -116,7 +113,7 @@ Similarly let’s try out a TIMM example | |||||||
|    import torch._dynamo as dynamo |    import torch._dynamo as dynamo | ||||||
|    import torch |    import torch | ||||||
|    model = timm.create_model('resnext101_32x8d', pretrained=True, num_classes=2) |    model = timm.create_model('resnext101_32x8d', pretrained=True, num_classes=2) | ||||||
|    opt_model = dynamo.optimize("inductor")(model) |    opt_model = torch.compile(model, backend="inductor") | ||||||
|    opt_model(torch.randn(64,3,7,7)) |    opt_model(torch.randn(64,3,7,7)) | ||||||
|  |  | ||||||
| Our goal with Dynamo and inductor is to build the highest coverage ML compiler | Our goal with Dynamo and inductor is to build the highest coverage ML compiler | ||||||
| @ -132,16 +129,16 @@ or ``torch._dynamo.list_backends()`` each of which with its optional dependencie | |||||||
| Some of the most commonly used backends include: | Some of the most commonly used backends include: | ||||||
|  |  | ||||||
| **Training & inference backends**: | **Training & inference backends**: | ||||||
|   * ``dynamo.optimize("inductor")`` - Uses ``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="inductor")`` - Uses ``TorchInductor`` backend. `Read more <https://dev-discuss.pytorch.org/t/torchinductor-a-pytorch-native-compiler-with-define-by-run-ir-and-symbolic-shapes/747>`__ | ||||||
|   * ``dynamo.optimize("aot_ts_nvfuser")`` - nvFuser with AotAutograd/TorchScript. `Read more <https://dev-discuss.pytorch.org/t/tracing-with-primitives-update-1-nvfuser-and-its-primitives/593>`__ |   * ``torch.compile(m, backend="aot_ts_nvfuser")`` - nvFuser with AotAutograd/TorchScript. `Read more <https://dev-discuss.pytorch.org/t/tracing-with-primitives-update-1-nvfuser-and-its-primitives/593>`__ | ||||||
|   * ``dynamo.optimize("nvprims_nvfuser")`` - nvFuser with PrimTorch. `Read more <https://dev-discuss.pytorch.org/t/tracing-with-primitives-update-1-nvfuser-and-its-primitives/593>`__ |   * ``torch.compile(m, backend=""nvprims_nvfuser")`` - nvFuser with PrimTorch. `Read more <https://dev-discuss.pytorch.org/t/tracing-with-primitives-update-1-nvfuser-and-its-primitives/593>`__ | ||||||
|   * ``dynamo.optimize("cudagraphs")`` - cudagraphs with AotAutograd. `Read more <https://github.com/pytorch/torchdynamo/pull/757>`__ |   * ``torch.compile(m, backend="cudagraphs")`` - cudagraphs with AotAutograd. `Read more <https://github.com/pytorch/torchdynamo/pull/757>`__ | ||||||
|  |  | ||||||
| **Inference-only backends**: | **Inference-only backends**: | ||||||
|   * ``dynamo.optimize("onnxrt")`` - Uses ONNXRT for inference on CPU/GPU. `Read more <https://onnxruntime.ai/>`__ |   * ``torch.compile(m, backend="onnxrt")`` - Uses ONNXRT for inference on CPU/GPU. `Read more <https://onnxruntime.ai/>`__ | ||||||
|   * ``dynamo.optimize("tensorrt")`` - Uses ONNXRT to run TensorRT for inference optimizations. `Read more <https://github.com/onnx/onnx-tensorrt>`__ |   * ``torch.compile(m, backend="tensorrt")`` - Uses ONNXRT to run TensorRT for inference optimizations. `Read more <https://github.com/onnx/onnx-tensorrt>`__ | ||||||
|   * ``dynamo.optimize("ipex")`` - Uses IPEX for inference on CPU. `Read more <https://github.com/intel/intel-extension-for-pytorch>`__ |   * ``torch.compile(m, backend="ipex")`` - Uses IPEX for inference on CPU. `Read more <https://github.com/intel/intel-extension-for-pytorch>`__ | ||||||
|   * ``dynamo.optimize("tvm")`` - Uses Apach TVM for inference optimizations. `Read more <https://tvm.apache.org/>`__ |   * ``torch.compile(m, backend="tvm")`` - Uses Apach TVM for inference optimizations. `Read more <https://tvm.apache.org/>`__ | ||||||
|  |  | ||||||
| Why do you need another way of optimizing PyTorch code? | Why do you need another way of optimizing PyTorch code? | ||||||
| ------------------------------------------------------- | ------------------------------------------------------- | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ Where a complete example looks like this: | |||||||
|  |  | ||||||
|    from typing import List |    from typing import List | ||||||
|    import torch |    import torch | ||||||
|    import torchdynamo |    from torch import _dynamo as torchdynamo | ||||||
|    def my_compiler(gm: torch.fx.GraphModule, example_inputs: List[torch.Tensor]): |    def my_compiler(gm: torch.fx.GraphModule, example_inputs: List[torch.Tensor]): | ||||||
|        print("my_compiler() called with FX graph:") |        print("my_compiler() called with FX graph:") | ||||||
|        gm.graph.print_tabular() |        gm.graph.print_tabular() | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ worlds — usability and performance. | |||||||
|  |  | ||||||
| TorchDynamo makes it easy to experiment with different compiler | TorchDynamo makes it easy to experiment with different compiler | ||||||
| backends to make PyTorch code faster with a single line decorator | backends to make PyTorch code faster with a single line decorator | ||||||
| ``torch._dynamo.optimize()`` | ``torch._dynamo.optimize()`` which is wrapped for convenience by ``torch.compile()`` | ||||||
|  |  | ||||||
| .. image:: ../_static/img/dynamo/TorchDynamo.png | .. image:: ../_static/img/dynamo/TorchDynamo.png | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ TorchDynamo dependencies (for CUDA 11.7): | |||||||
|  |  | ||||||
| .. code-block:: shell | .. code-block:: shell | ||||||
|  |  | ||||||
|    pip3 install numpy --pre torch[dynamo] --force-reinstall --extra-index-url https://download.pytorch.org/whl/nightly/cu117 |    pip3 install numpy --pre torch --force-reinstall --extra-index-url https://download.pytorch.org/whl/nightly/cu117 | ||||||
|  |  | ||||||
| CPU requirements | CPU requirements | ||||||
| ~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~ | ||||||
| @ -41,16 +41,6 @@ To install, run the following command: | |||||||
|    pip3 install --pre torch --extra-index-url https://download.pytorch.org/whl/nightly/cpu |    pip3 install --pre torch --extra-index-url https://download.pytorch.org/whl/nightly/cpu | ||||||
|  |  | ||||||
|  |  | ||||||
| Install from Local Source |  | ||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |  | ||||||
|  |  | ||||||
| Alternatively, you can build PyTorch from `source |  | ||||||
| <https://github.com/pytorch/pytorch#from-source>`__, which has TorchDynamo |  | ||||||
| included. |  | ||||||
|  |  | ||||||
| To install GPU TorchDynamo dependencies, run ``make triton`` in the |  | ||||||
| PyTorch repo root directory. |  | ||||||
|  |  | ||||||
| Verify Installation | Verify Installation | ||||||
| ~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~ | ||||||
|  |  | ||||||
|  | |||||||
| @ -37,8 +37,13 @@ Only the latter is supported with function transforms: | |||||||
|   (by calling ``ctx.save_for_backward(*tensors)``), or save non-Tensors |   (by calling ``ctx.save_for_backward(*tensors)``), or save non-Tensors | ||||||
|   (by assigning them to the ``ctx`` object). |   (by assigning them to the ``ctx`` object). | ||||||
|  |  | ||||||
| Any intermediates that need to be saved must be returned as an output from | Because :meth:`~Function.setup_context` accepts only ``inputs`` and ``output``, | ||||||
| :meth:`~Function.forward`. | the only quantities that can be saved are either objects (such as Tensors) in | ||||||
|  | the inputs or outputs or quantities (like ``Tensor.shape``) derived from them. | ||||||
|  | If you wish to save a non-input intermediate activation from | ||||||
|  | :meth:`Function.forward` for backward, then you'll need to return it as an | ||||||
|  | output from :meth:`~Function.forward` so that it gets passed to | ||||||
|  | :meth:`~Function.setup_context`. | ||||||
|  |  | ||||||
| Depending on the transform, | Depending on the transform, | ||||||
|  |  | ||||||
|  | |||||||
| @ -129,6 +129,49 @@ Algorithms | |||||||
|     Rprop |     Rprop | ||||||
|     SGD |     SGD | ||||||
|  |  | ||||||
|  | Many of our algorithms have various implementations optimized for performance, | ||||||
|  | readability and/or generality, so we attempt to default to the generally fastest | ||||||
|  | implementation for the current device if no particular implementation has been | ||||||
|  | specified by the user. | ||||||
|  |  | ||||||
|  | We have 3 major categories of implementations: for-loop, foreach (multi-tensor), and | ||||||
|  | fused. The most straightforward implementations are for-loops over the parameters with | ||||||
|  | big chunks of computation. For-looping is usually slower than our foreach | ||||||
|  | implementations, which combine parameters into a multi-tensor and run the big chunks | ||||||
|  | of computation all at once, thereby saving many sequential kernel calls. A few of our | ||||||
|  | optimizers have even faster fused implementations, which fuse the big chunks of | ||||||
|  | computation into one kernel. We can think of foreach implementations as fusing | ||||||
|  | horizontally and fused implementations as fusing vertically on top of that. | ||||||
|  |  | ||||||
|  | In general, the performance ordering of the 3 implementations is fused > foreach > for-loop. | ||||||
|  | So when applicable, we default to foreach over for-loop. Applicable means the foreach | ||||||
|  | implementation is available, the user has not specified any implementation-specific kwargs | ||||||
|  | (e.g., fused, foreach, differentiable), and all tensors are native and on CUDA. Note that | ||||||
|  | while fused should be even faster than foreach, the implementations are newer and we would | ||||||
|  | like to give them more bake-in time before flipping the switch everywhere. You are welcome | ||||||
|  | to try them out though! | ||||||
|  |  | ||||||
|  | Below is a table showing the available and default implementations of each algorithm: | ||||||
|  |  | ||||||
|  | .. csv-table:: | ||||||
|  |     :header: "Algorithm", "Default", "Has foreach?", "Has fused?" | ||||||
|  |     :widths: 25, 25, 25, 25 | ||||||
|  |     :delim: ; | ||||||
|  |  | ||||||
|  |     :class:`Adadelta`;foreach;yes;no | ||||||
|  |     :class:`Adagrad`;foreach;yes;no | ||||||
|  |     :class:`Adam`;foreach;yes;yes | ||||||
|  |     :class:`AdamW`;foreach;yes;yes | ||||||
|  |     :class:`SparseAdam`;for-loop;no;no | ||||||
|  |     :class:`Adamax`;foreach;yes;no | ||||||
|  |     :class:`ASGD`;foreach;yes;no | ||||||
|  |     :class:`LBFGS`;for-loop;no;no | ||||||
|  |     :class:`NAdam`;foreach;yes;no | ||||||
|  |     :class:`RAdam`;foreach;yes;no | ||||||
|  |     :class:`RMSprop`;foreach;yes;no | ||||||
|  |     :class:`Rprop`;foreach;yes;no | ||||||
|  |     :class:`SGD`;foreach;yes;no | ||||||
|  |  | ||||||
| How to adjust learning rate | How to adjust learning rate | ||||||
| --------------------------- | --------------------------- | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								setup.py
									
									
									
									
									
								
							| @ -1024,17 +1024,12 @@ def main(): | |||||||
|         'typing-extensions', |         'typing-extensions', | ||||||
|         'sympy', |         'sympy', | ||||||
|         'networkx', |         'networkx', | ||||||
|  |         'jinja2', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     extras_require = { |     extras_require = { | ||||||
|         'opt-einsum': ['opt-einsum>=3.3'] |         'opt-einsum': ['opt-einsum>=3.3'] | ||||||
|     } |     } | ||||||
|     if platform.system() == 'Linux': |  | ||||||
|         triton_pin_file = os.path.join(cwd, ".github", "ci_commit_pins", "triton.txt") |  | ||||||
|         if os.path.exists(triton_pin_file): |  | ||||||
|             with open(triton_pin_file) as f: |  | ||||||
|                 triton_pin = f.read().strip() |  | ||||||
|                 extras_require['dynamo'] = ['pytorch-triton==2.0.0+' + triton_pin[:10], 'jinja2'] |  | ||||||
|  |  | ||||||
|     # Parse the command line and check the arguments before we proceed with |     # Parse the command line and check the arguments before we proceed with | ||||||
|     # building deps and setup. We need to set values so `--help` works. |     # building deps and setup. We need to set values so `--help` works. | ||||||
|  | |||||||
| @ -504,7 +504,7 @@ class TestFSDPUseOrigParamsUnshardReshard(FSDPTest): | |||||||
|             fsdp_kwargs=fsdp_kwargs, |             fsdp_kwargs=fsdp_kwargs, | ||||||
|             deterministic=True, |             deterministic=True, | ||||||
|         ) |         ) | ||||||
|         optim = torch.optim.Adam(fsdp_model.parameters(), lr=LR) |         optim = torch.optim.Adam(fsdp_model.parameters(), foreach=False, lr=LR) | ||||||
|         fsdp_kwargs["use_orig_params"] = True |         fsdp_kwargs["use_orig_params"] = True | ||||||
|         fsdp_model_orig_params = TransformerWithSharedParams.init( |         fsdp_model_orig_params = TransformerWithSharedParams.init( | ||||||
|             self.process_group, |             self.process_group, | ||||||
| @ -513,7 +513,9 @@ class TestFSDPUseOrigParamsUnshardReshard(FSDPTest): | |||||||
|             fsdp_kwargs=fsdp_kwargs, |             fsdp_kwargs=fsdp_kwargs, | ||||||
|             deterministic=True, |             deterministic=True, | ||||||
|         ) |         ) | ||||||
|         optim_orig_params = torch.optim.Adam(fsdp_model_orig_params.parameters(), lr=LR) |         optim_orig_params = torch.optim.Adam( | ||||||
|  |             fsdp_model_orig_params.parameters(), foreach=False, lr=LR | ||||||
|  |         ) | ||||||
|         return fsdp_model, optim, fsdp_model_orig_params, optim_orig_params |         return fsdp_model, optim, fsdp_model_orig_params, optim_orig_params | ||||||
|  |  | ||||||
|     def _check_fsdp_parameter_parity(self, fsdp1: FSDP, fsdp2: FSDP) -> None: |     def _check_fsdp_parameter_parity(self, fsdp1: FSDP, fsdp2: FSDP) -> None: | ||||||
|  | |||||||
| @ -1444,6 +1444,59 @@ class PythonProcessGroupExtensionTest(MultiProcessTestCase): | |||||||
|             PythonProcessGroupExtensionTest.create_dummy |             PythonProcessGroupExtensionTest.create_dummy | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  |     def test_backend_config(self): | ||||||
|  |         dist.Backend.register_backend( | ||||||
|  |             "dummy", | ||||||
|  |             PythonProcessGroupExtensionTest.create_dummy | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         # Ensure backend config can be created with the following arguments | ||||||
|  |         backend_config_strings_and_expected_values = [ | ||||||
|  |             (dist.Backend.GLOO, "cpu:gloo,cuda:gloo"), | ||||||
|  |             (dist.Backend.NCCL, "cpu:nccl,cuda:nccl"), | ||||||
|  |             (dist.Backend.MPI, "cpu:mpi,cuda:mpi"), | ||||||
|  |             (dist.Backend.UCC, "cpu:ucc,cuda:ucc"), | ||||||
|  |             (dist.Backend.DUMMY, "cpu:dummy,cuda:dummy"), | ||||||
|  |             ("DUMMY", "cpu:dummy,cuda:dummy"), | ||||||
|  |             ("dummy", "cpu:dummy,cuda:dummy"), | ||||||
|  |             ("cpu:dummy,cuda:dummy", "cpu:dummy,cuda:dummy"), | ||||||
|  |             ("cpu:dummy,cuda:nccl", "cpu:dummy,cuda:nccl"), | ||||||
|  |             ("cpu:gloo,cuda:dummy", "cpu:gloo,cuda:dummy"), | ||||||
|  |             ("cpu:gloo,cuda:nccl", "cpu:gloo,cuda:nccl"), | ||||||
|  |             ("cPu:gLoO,cuDa:NcCl", "cpu:gloo,cuda:nccl") | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |         for config_str, expected_value in backend_config_strings_and_expected_values: | ||||||
|  |             with self.subTest(config_str): | ||||||
|  |                 # ensures these configs strings are valid and no ValueError is raised | ||||||
|  |                 config = dist.BackendConfig(config_str) | ||||||
|  |                 self.assertEqual(str(config), expected_value) | ||||||
|  |  | ||||||
|  |         # Ensure backend config will raise ValueError with the following arguments | ||||||
|  |         invalid_backend_config_strings = [ | ||||||
|  |             "cpu:gloo,cuda:nccl,",  # trailing comma | ||||||
|  |             "cpu:gloo,cuda:nccl,cpu:dummy",  # duplicate device | ||||||
|  |         ] | ||||||
|  |         for config_str in invalid_backend_config_strings: | ||||||
|  |             with self.subTest(config_str): | ||||||
|  |                 with self.assertRaises(ValueError): | ||||||
|  |                     dist.BackendConfig(config_str) | ||||||
|  |  | ||||||
|  |     def test_init_process_group_with_multiple_backends(self): | ||||||
|  |         dist.Backend.register_backend("dummy", PythonProcessGroupExtensionTest.create_dummy) | ||||||
|  |  | ||||||
|  |         os.environ['MASTER_ADDR'] = 'localhost' | ||||||
|  |         os.environ['MASTER_PORT'] = '6789' | ||||||
|  |         dist.init_process_group("cpu:dummy,cuda:dummy", rank=self.rank, world_size=self.world_size) | ||||||
|  |  | ||||||
|  |         # test all_gather | ||||||
|  |         input_tensor = torch.ones(2, 2) * 7 | ||||||
|  |         output_tensor_list = [torch.zeros(2, 2) for _ in range(self.world_size)] | ||||||
|  |         dist.all_gather(output_tensor_list, input_tensor) | ||||||
|  |  | ||||||
|  |         dist.barrier() | ||||||
|  |         dist.destroy_process_group() | ||||||
|  |  | ||||||
|     class Options: |     class Options: | ||||||
|         def __init__(self): |         def __init__(self): | ||||||
|             pass |             pass | ||||||
| @ -1570,6 +1623,11 @@ class ProcessGroupWithDispatchedCollectivesTests(MultiProcessTestCase): | |||||||
|                     world_size=self.world_size, |                     world_size=self.world_size, | ||||||
|                     store=store |                     store=store | ||||||
|                 ) |                 ) | ||||||
|  |                 pg = c10d._get_default_group() | ||||||
|  |                 self.assertEqual(pg.rank(), self.rank) | ||||||
|  |                 self.assertEqual(pg.size(), self.world_size) | ||||||
|  |                 self.assertEqual(pg.name(), str(backend)) | ||||||
|  |  | ||||||
|                 dist.destroy_process_group() |                 dist.destroy_process_group() | ||||||
|  |  | ||||||
|     def _call_collective_with_varying_tensors(self, backend, collective, *args): |     def _call_collective_with_varying_tensors(self, backend, collective, *args): | ||||||
|  | |||||||
| @ -335,7 +335,7 @@ class MyPythonStore(dist.Store): | |||||||
|         self.store = {} |         self.store = {} | ||||||
|  |  | ||||||
|     def set(self, key, value): |     def set(self, key, value): | ||||||
|         if not isinstance(key, str): |         if not isinstance(key, (str, bytes)): | ||||||
|             raise AssertionError("Expected set to be called with string key") |             raise AssertionError("Expected set to be called with string key") | ||||||
|         if type(value) is not bytes: |         if type(value) is not bytes: | ||||||
|             raise AssertionError("Expected set to be called with bytes value") |             raise AssertionError("Expected set to be called with bytes value") | ||||||
|  | |||||||
| @ -51,11 +51,8 @@ class AotAutogradFallbackTests(torch._dynamo.test_case.TestCase): | |||||||
|         y = torch.randn(4) |         y = torch.randn(4) | ||||||
|         x = torch.nn.Parameter(torch.randn(4)) |         x = torch.nn.Parameter(torch.randn(4)) | ||||||
|         aot_fn = torch._dynamo.optimize("aot_eager")(fn) |         aot_fn = torch._dynamo.optimize("aot_eager")(fn) | ||||||
|         with self.assertRaisesRegex( |         # This should not error: we mutated an autograd leaf under no_grad mode. | ||||||
|             RuntimeError, |         aot_fn(x, y) | ||||||
|             "a leaf Variable that requires grad is being used in an in-place operation.", |  | ||||||
|         ): |  | ||||||
|             aot_fn(x, y) |  | ||||||
|  |  | ||||||
|     def test_mutation1(self): |     def test_mutation1(self): | ||||||
|         def fn(_stack0: torch.Tensor, diagonal_chunked_attention_scores: torch.Tensor): |         def fn(_stack0: torch.Tensor, diagonal_chunked_attention_scores: torch.Tensor): | ||||||
| @ -179,11 +176,8 @@ class AotAutogradFallbackTests(torch._dynamo.test_case.TestCase): | |||||||
|  |  | ||||||
|         # Run exported graph with AOT |         # Run exported graph with AOT | ||||||
|         aot_fn = torch._dynamo.optimize("aot_eager")(graph) |         aot_fn = torch._dynamo.optimize("aot_eager")(graph) | ||||||
|         with self.assertRaisesRegex( |         # This should not error: we mutated an autograd leaf under no_grad mode. | ||||||
|             RuntimeError, |         aot_fn(x, y) | ||||||
|             "a leaf Variable that requires grad is being used in an in-place operation.", |  | ||||||
|         ): |  | ||||||
|             aot_fn(x, y) |  | ||||||
|  |  | ||||||
|     def test_call_fn_with_non_const_inputs_aot_unsafe_control_flow(self): |     def test_call_fn_with_non_const_inputs_aot_unsafe_control_flow(self): | ||||||
|         class ModuleSpecialFwd(torch.nn.Module): |         class ModuleSpecialFwd(torch.nn.Module): | ||||||
|  | |||||||
| @ -60,6 +60,11 @@ unittest.expectedFailure( | |||||||
|     # Cannot call sizes() on tensor with symbolic sizes/strides |     # Cannot call sizes() on tensor with symbolic sizes/strides | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | unittest.expectedFailure( | ||||||
|  |     DynamicShapesMiscTests.test_parsing_sdpa_dynamic_shapes | ||||||
|  |     # Cannot call sizes() on tensor with symbolic sizes/strides | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| # DynamicShapesSubGraphTests | # DynamicShapesSubGraphTests | ||||||
| unittest.expectedFailure( | unittest.expectedFailure( | ||||||
|  | |||||||
| @ -2294,7 +2294,6 @@ class MiscTests(torch._dynamo.test_case.TestCase): | |||||||
|         self.assertIs(x_ref(), None) |         self.assertIs(x_ref(), None) | ||||||
|  |  | ||||||
|     def test_release_module_memory(self): |     def test_release_module_memory(self): | ||||||
|  |  | ||||||
|         mod = torch.nn.Linear(10, 10) |         mod = torch.nn.Linear(10, 10) | ||||||
|         x = torch.rand([10, 10]) |         x = torch.rand([10, 10]) | ||||||
|         mod_weight_ref = weakref.ref(mod.weight) |         mod_weight_ref = weakref.ref(mod.weight) | ||||||
| @ -2640,7 +2639,6 @@ class MiscTests(torch._dynamo.test_case.TestCase): | |||||||
|                 self.names = [] |                 self.names = [] | ||||||
|  |  | ||||||
|             def forward(self, idx, targets=None): |             def forward(self, idx, targets=None): | ||||||
|  |  | ||||||
|                 b, t = idx.size() |                 b, t = idx.size() | ||||||
|                 assert ( |                 assert ( | ||||||
|                     t <= self.block_size |                     t <= self.block_size | ||||||
| @ -3145,6 +3143,53 @@ class MiscTests(torch._dynamo.test_case.TestCase): | |||||||
|         self.assertEqual(compiled.device.index, 0) |         self.assertEqual(compiled.device.index, 0) | ||||||
|         self.assertEqual(compiled.dtype, torch.float16) |         self.assertEqual(compiled.dtype, torch.float16) | ||||||
|  |  | ||||||
|  |     @unittest.skipIf( | ||||||
|  |         not PLATFORM_SUPPORTS_FUSED_SDPA or not SM80OrLater, | ||||||
|  |         "Can't run fused SDPA on this platform", | ||||||
|  |     ) | ||||||
|  |     def test_parsing_sdpa(self): | ||||||
|  |         class MyModule(torch.nn.Module): | ||||||
|  |             def forward(self, query, key, value): | ||||||
|  |                 out = F.scaled_dot_product_attention(query, key, value, None, 0, True) | ||||||
|  |                 out = F.scaled_dot_product_attention( | ||||||
|  |                     query=query, | ||||||
|  |                     key=key, | ||||||
|  |                     value=value, | ||||||
|  |                     attn_mask=None, | ||||||
|  |                     dropout_p=0, | ||||||
|  |                     is_causal=True, | ||||||
|  |                 ) | ||||||
|  |                 out = F.scaled_dot_product_attention( | ||||||
|  |                     query, | ||||||
|  |                     key=key, | ||||||
|  |                     value=value, | ||||||
|  |                     attn_mask=None, | ||||||
|  |                     dropout_p=0, | ||||||
|  |                     is_causal=True, | ||||||
|  |                 ) | ||||||
|  |                 out = F.scaled_dot_product_attention( | ||||||
|  |                     query, key, value, None, dropout_p=0, is_causal=True | ||||||
|  |                 ) | ||||||
|  |                 return out | ||||||
|  |  | ||||||
|  |         device = "cuda" | ||||||
|  |         dtype = torch.float16 | ||||||
|  |         seq_len_q = 1 | ||||||
|  |         seq_len_k = 1 | ||||||
|  |         head_dim = 8 | ||||||
|  |         query = torch.ones( | ||||||
|  |             1, 8, seq_len_q, head_dim, device=device, dtype=dtype, requires_grad=True | ||||||
|  |         ) | ||||||
|  |         key = torch.ones( | ||||||
|  |             1, 8, seq_len_k, head_dim, device=device, dtype=dtype, requires_grad=True | ||||||
|  |         ) | ||||||
|  |         value = torch.ones( | ||||||
|  |             1, 8, seq_len_k, head_dim, device=device, dtype=dtype, requires_grad=True | ||||||
|  |         ) | ||||||
|  |         module = MyModule() | ||||||
|  |         opt_mod = torch._dynamo.optimize("inductor")(module) | ||||||
|  |         opt_mod(query, key, value) | ||||||
|  |  | ||||||
|     def test_autocast_cpu(self): |     def test_autocast_cpu(self): | ||||||
|         class MyModule(torch.nn.Module): |         class MyModule(torch.nn.Module): | ||||||
|             def forward(self, x): |             def forward(self, x): | ||||||
| @ -3716,7 +3761,6 @@ class MiscTests(torch._dynamo.test_case.TestCase): | |||||||
|         self.assertTrue(same(ref, res)) |         self.assertTrue(same(ref, res)) | ||||||
|  |  | ||||||
|     def test_disable_flag(self): |     def test_disable_flag(self): | ||||||
|  |  | ||||||
|         cnt = torch._dynamo.testing.CompileCounter() |         cnt = torch._dynamo.testing.CompileCounter() | ||||||
|  |  | ||||||
|         with patch.dict(os.environ, {"TORCH_COMPILE_DISABLE": "1"}): |         with patch.dict(os.environ, {"TORCH_COMPILE_DISABLE": "1"}): | ||||||
| @ -3999,6 +4043,23 @@ class MiscTests(torch._dynamo.test_case.TestCase): | |||||||
|         res = opt_fn(x, y) |         res = opt_fn(x, y) | ||||||
|         self.assertTrue(same(ref, res)) |         self.assertTrue(same(ref, res)) | ||||||
|  |  | ||||||
|  |     def test_tuple_from_tuple_iter(self): | ||||||
|  |         def inner_fn(*args): | ||||||
|  |             acc = torch.ones(10, 10) | ||||||
|  |             for arg in args: | ||||||
|  |                 acc.add_(arg) | ||||||
|  |  | ||||||
|  |             return acc | ||||||
|  |  | ||||||
|  |         @torch._dynamo.optimize("eager") | ||||||
|  |         def fn(inputs, params): | ||||||
|  |             y = tuple(inputs) + tuple(params) | ||||||
|  |             return inner_fn(*y) | ||||||
|  |  | ||||||
|  |         inputs = [torch.randn(10, 10) for _ in range(3)] | ||||||
|  |  | ||||||
|  |         fn(inputs, iter(tuple(inputs))) | ||||||
|  |  | ||||||
|     def test_torch_package_working_with_trace(self): |     def test_torch_package_working_with_trace(self): | ||||||
|         # from torch._dynamo.test_case import run_tests |         # from torch._dynamo.test_case import run_tests | ||||||
|  |  | ||||||
|  | |||||||
| @ -295,6 +295,31 @@ class ModuleList(torch.nn.Module): | |||||||
|         return x |         return x | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class CustomGetItemModuleList(torch.nn.Module): | ||||||
|  |     def __init__(self): | ||||||
|  |         super().__init__() | ||||||
|  |         self.layers = torch.nn.ModuleList( | ||||||
|  |             [ | ||||||
|  |                 torch.nn.Linear(10, 10), | ||||||
|  |                 torch.nn.ReLU(), | ||||||
|  |                 torch.nn.Linear(10, 10), | ||||||
|  |                 torch.nn.ReLU(), | ||||||
|  |             ] | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def __getitem__(self, idx: int): | ||||||
|  |         return self.layers[idx] | ||||||
|  |  | ||||||
|  |     def __len__(self) -> int: | ||||||
|  |         return len(self.layers) | ||||||
|  |  | ||||||
|  |     def forward(self, x): | ||||||
|  |         for i in range(len(self)): | ||||||
|  |             x = self[i](x) | ||||||
|  |  | ||||||
|  |         return x | ||||||
|  |  | ||||||
|  |  | ||||||
| class ModuleDict(torch.nn.Module): | class ModuleDict(torch.nn.Module): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super().__init__() |         super().__init__() | ||||||
| @ -310,6 +335,23 @@ class ModuleDict(torch.nn.Module): | |||||||
|         return x |         return x | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class CustomGetItemModuleDict(torch.nn.Module): | ||||||
|  |     def __init__(self): | ||||||
|  |         super().__init__() | ||||||
|  |         self.layers = torch.nn.ModuleDict( | ||||||
|  |             { | ||||||
|  |                 "0": torch.nn.Linear(10, 10), | ||||||
|  |             } | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def __getitem__(self, key: str) -> torch.nn.Module: | ||||||
|  |         return self.layers[key] | ||||||
|  |  | ||||||
|  |     def forward(self, x): | ||||||
|  |         x = self["0"](x) | ||||||
|  |         return x | ||||||
|  |  | ||||||
|  |  | ||||||
| class TensorList(torch.nn.Module): | class TensorList(torch.nn.Module): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super().__init__() |         super().__init__() | ||||||
| @ -728,7 +770,9 @@ class NNModuleTests(torch._dynamo.test_case.TestCase): | |||||||
|     test_cfgmod = make_test(CfgModule()) |     test_cfgmod = make_test(CfgModule()) | ||||||
|     test_stringmember = make_test(StringMember()) |     test_stringmember = make_test(StringMember()) | ||||||
|     test_modulelist = make_test(ModuleList()) |     test_modulelist = make_test(ModuleList()) | ||||||
|  |     test_modulelist = make_test(CustomGetItemModuleList()) | ||||||
|     test_moduledict = make_test(ModuleDict()) |     test_moduledict = make_test(ModuleDict()) | ||||||
|  |     test_moduledict = make_test(CustomGetItemModuleDict()) | ||||||
|     test_super1 = make_test(SuperModule()) |     test_super1 = make_test(SuperModule()) | ||||||
|     test_super2 = make_test(SuperModule2()) |     test_super2 = make_test(SuperModule2()) | ||||||
|     test_super_class_method = make_test(SuperChildCallsClassMethod()) |     test_super_class_method = make_test(SuperChildCallsClassMethod()) | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| # Owner(s): ["module: dynamo"] | # Owner(s): ["module: dynamo"] | ||||||
| import collections | import collections | ||||||
|  | import contextlib | ||||||
| import copy | import copy | ||||||
| import inspect | import inspect | ||||||
| import itertools | import itertools | ||||||
| @ -2173,6 +2174,81 @@ class ReproTests(torch._dynamo.test_case.TestCase): | |||||||
|         self.assertEqual(cnt.frame_count, 2) |         self.assertEqual(cnt.frame_count, 2) | ||||||
|         self.assertEqual(cnt.op_count, 2) |         self.assertEqual(cnt.op_count, 2) | ||||||
|  |  | ||||||
|  |     def test_exception_in_dynamo_handling(self): | ||||||
|  |         hit_handler = False | ||||||
|  |  | ||||||
|  |         # See https://github.com/pytorch/pytorch/pull/96488 | ||||||
|  |         @contextlib.contextmanager | ||||||
|  |         def ctx(): | ||||||
|  |             try: | ||||||
|  |                 yield | ||||||
|  |             except RuntimeError: | ||||||
|  |                 nonlocal hit_handler | ||||||
|  |                 hit_handler = True | ||||||
|  |  | ||||||
|  |         @torch._dynamo.optimize("eager") | ||||||
|  |         def f(): | ||||||
|  |             with ctx(): | ||||||
|  |                 h() | ||||||
|  |  | ||||||
|  |         def h(): | ||||||
|  |             raise RuntimeError("boof") | ||||||
|  |  | ||||||
|  |         # Should not error | ||||||
|  |         f() | ||||||
|  |         self.assertTrue(hit_handler) | ||||||
|  |  | ||||||
|  |     def test_generator_dealloc(self): | ||||||
|  |         # See https://github.com/pytorch/pytorch/pull/96488 | ||||||
|  |         # | ||||||
|  |         # NB: yes, [(...)] is intentional, this is a list containing a | ||||||
|  |         # generator | ||||||
|  |         generator_box = [(x for x in [1, 2, 3])] | ||||||
|  |  | ||||||
|  |         counter = torch._dynamo.testing.CompileCounter() | ||||||
|  |  | ||||||
|  |         def g(x): | ||||||
|  |             return x + 2 | ||||||
|  |  | ||||||
|  |         # TODO: This test is pretty delicate.  To test if it's actually doing | ||||||
|  |         # anything, rebuild eval_frame.c with '#define TORCHDYNAMO_DEBUG 1' | ||||||
|  |         # and then look at the logs for: | ||||||
|  |         # | ||||||
|  |         # TRACE[_custom_eval_frame:650] begin <genexpr> test_repros.py 2276 -1 0 0 | ||||||
|  |         # TRACE[_custom_eval_frame:664] throw <genexpr> | ||||||
|  |         # | ||||||
|  |         # This means we're actually hitting the relevant codepath | ||||||
|  |  | ||||||
|  |         # NB: Make sure we don't actually Dynamo this frame; if we do Dynamo | ||||||
|  |         # this frame, Dynamo actually DOES understand list.clear and will | ||||||
|  |         # arrange for the generator deallocation to happen when the eval frame | ||||||
|  |         # handler is disabled, which will prevent the bug from happening (we | ||||||
|  |         # specifically want to trigger the generator deallocation WHILE the | ||||||
|  |         # dynamo eval frame handler is active), as that will cause the | ||||||
|  |         # generator to become exhausted and trigger the throw_flag == TRUE | ||||||
|  |         # case. | ||||||
|  |         @torch._dynamo.skip | ||||||
|  |         def f(x): | ||||||
|  |             generator_box.clear() | ||||||
|  |             return g(x) | ||||||
|  |  | ||||||
|  |         self.assertNoUnraisable( | ||||||
|  |             lambda: torch._dynamo.optimize(counter)(f)(torch.randn(3)) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         # Make sure the x + 2 is captured (a previous incorrect implementation | ||||||
|  |         # of this fix would have disabled the eval frame callback, which means | ||||||
|  |         # g wouldn't get traced | ||||||
|  |         self.assertEqual(counter.op_count, 1) | ||||||
|  |  | ||||||
|  |     def test_error_return_without_exception_set(self): | ||||||
|  |         # https://github.com/pytorch/pytorch/issues/93781 | ||||||
|  |         @torch.compile | ||||||
|  |         def f(): | ||||||
|  |             _generator_type = type((_ for _ in ())) | ||||||
|  |  | ||||||
|  |         self.assertNoUnraisable(f) | ||||||
|  |  | ||||||
|     @skip_if_pytest |     @skip_if_pytest | ||||||
|     @torch._dynamo.config.patch("rewrite_assert_with_torch_assert", True) |     @torch._dynamo.config.patch("rewrite_assert_with_torch_assert", True) | ||||||
|     def test_rewrite_assert_with_msg(self): |     def test_rewrite_assert_with_msg(self): | ||||||
|  | |||||||
| @ -377,8 +377,6 @@ aten::_mps_convolution | |||||||
| aten::_mps_convolution.out | aten::_mps_convolution.out | ||||||
| aten::_mps_convolution_transpose | aten::_mps_convolution_transpose | ||||||
| aten::_mps_convolution_transpose.out | aten::_mps_convolution_transpose.out | ||||||
| aten::_mps_max_pool2d |  | ||||||
| aten::_mps_max_pool2d.out |  | ||||||
| aten::_native_batch_norm_legit.no_stats_out | aten::_native_batch_norm_legit.no_stats_out | ||||||
| aten::_native_batch_norm_legit.out | aten::_native_batch_norm_legit.out | ||||||
| aten::_native_decoder_only_multi_head_attention | aten::_native_decoder_only_multi_head_attention | ||||||
| @ -857,6 +855,8 @@ aten::max | |||||||
| aten::max.dim | aten::max.dim | ||||||
| aten::max.dim_max | aten::max.dim_max | ||||||
| aten::max.unary_out | aten::max.unary_out | ||||||
|  | aten::max_pool2d_backward | ||||||
|  | aten::max_pool2d_backward.out | ||||||
| aten::max_pool2d_with_indices | aten::max_pool2d_with_indices | ||||||
| aten::max_pool2d_with_indices.out | aten::max_pool2d_with_indices.out | ||||||
| aten::max_pool2d_with_indices_backward | aten::max_pool2d_with_indices_backward | ||||||
| @ -930,8 +930,6 @@ aten::mps_convolution_backward | |||||||
| aten::mps_convolution_backward.out | aten::mps_convolution_backward.out | ||||||
| aten::mps_convolution_transpose_backward | aten::mps_convolution_transpose_backward | ||||||
| aten::mps_convolution_transpose_backward.out | aten::mps_convolution_transpose_backward.out | ||||||
| aten::mps_max_pool2d_backward |  | ||||||
| aten::mps_max_pool2d_backward.out |  | ||||||
| aten::multi_margin_loss | aten::multi_margin_loss | ||||||
| aten::multi_margin_loss.out | aten::multi_margin_loss.out | ||||||
| aten::multi_margin_loss_backward | aten::multi_margin_loss_backward | ||||||
|  | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	