Files
TheRock/external-builds/pytorch/pytorch_triton_repo.py
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

165 lines
5.4 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
"""PyTorch depends on a pinned build of Triton.
This script runs after `pytorch_torch_repo.py` and checks out the proper triton
repository based on pins in the torch repo.
On Windows, uses triton-windows (https://github.com/triton-lang/triton-windows).
The commit pin is stored in ci_commit_pins/triton-windows.txt.
This procedure is adapted from `pytorch/.github/scripts/build_triton_wheel.py`
"""
import argparse
import json
import platform
from pathlib import Path
import sys
import repo_management
THIS_MAIN_REPO_NAME = "triton"
THIS_DIR = Path(__file__).resolve().parent
COMMIT_PINS_DIR = THIS_DIR / "ci_commit_pins"
# Platform detection
IS_WINDOWS = platform.system() == "Windows"
# Repository URLs
ROCM_TRITON_ORIGIN = "https://github.com/ROCm/triton.git"
TRITON_WINDOWS_ORIGIN = "https://github.com/triton-lang/triton-windows.git"
def get_triton_pin(torch_dir: Path) -> str:
pin_file = torch_dir / ".ci" / "docker" / "ci_commit_pins" / "triton.txt"
return pin_file.read_text().strip()
def get_triton_version(torch_dir: Path) -> str:
version_file = torch_dir / ".ci" / "docker" / "triton_version.txt"
return version_file.read_text().strip()
def get_triton_windows_pin() -> str | None:
pin_file = COMMIT_PINS_DIR / "triton-windows.txt"
if pin_file.exists():
return pin_file.read_text().strip()
return None
def do_checkout(args: argparse.Namespace):
repo_dir: Path = args.checkout_dir
torch_dir: Path = args.torch_dir
build_env = {}
if IS_WINDOWS:
print("Using triton-windows repository (Windows build)")
if args.gitrepo_origin == ROCM_TRITON_ORIGIN:
args.gitrepo_origin = TRITON_WINDOWS_ORIGIN
if args.repo_hashtag is None:
triton_windows_pin = get_triton_windows_pin()
if triton_windows_pin:
args.repo_hashtag = triton_windows_pin
print(f"Triton-windows commit pin: {args.repo_hashtag}")
else:
args.repo_hashtag = "main-windows"
print("No triton-windows pin found, using main-windows branch")
args.hipify = False
else:
print("Using ROCm/triton repository (Linux build)")
if args.repo_hashtag is None:
if not torch_dir.exists():
raise ValueError(
f"Could not find torch dir: {torch_dir} "
"(did you check out torch first)"
)
if args.release:
# Derive the commit pin based on --release.
pin_version = get_triton_version(torch_dir)
pin_major, pin_minor, *_ = pin_version.split(".")
args.repo_hashtag = f"release/{pin_major}.{pin_minor}.x"
print(
f"Triton version pin: {args.triton_version} -> {args.repo_hashtag}"
)
else:
# Derive the commit pin base on ci commit.
args.repo_hashtag = get_triton_pin(torch_dir)
# Latest triton calculates its own git hash and TRITON_WHEEL_VERSION_SUFFIX
# goes after the "+". Older versions must supply their own "+". We just
# leave it out entirely to avoid version errors.
build_env["TRITON_WHEEL_VERSION_SUFFIX"] = ""
print(f"Triton CI commit pin: {args.repo_hashtag}")
def _do_hipify(args: argparse.Namespace):
print("Applying local modifications...")
with open(repo_dir / "build_env.json", "w") as f:
json.dump(build_env, f, indent=2)
repo_management.do_checkout(args, custom_hipify=_do_hipify)
def main(cl_args: list[str]):
if IS_WINDOWS:
default_origin = TRITON_WINDOWS_ORIGIN
default_hipify = False
else:
default_origin = ROCM_TRITON_ORIGIN
default_hipify = True
def add_common(command_parser: argparse.ArgumentParser):
command_parser.add_argument(
"--checkout-dir",
type=Path,
default=THIS_DIR / THIS_MAIN_REPO_NAME,
help=f"Directory path where the git repo is cloned into. Default is {THIS_DIR / THIS_MAIN_REPO_NAME}",
)
command_parser.add_argument(
"--repo-name",
type=Path,
default=THIS_MAIN_REPO_NAME,
help="Subdirectory name in which to checkout repo",
)
command_parser.add_argument(
"--repo-hashtag",
help="Git repository ref/tag to checkout",
)
p = argparse.ArgumentParser("pytorch_triton_repo.py")
sub_p = p.add_subparsers(required=True)
checkout_p = sub_p.add_parser("checkout", help="Clone Triton locally and checkout")
add_common(checkout_p)
checkout_p.add_argument(
"--torch-dir",
type=Path,
default=THIS_DIR / "pytorch",
help="Directory of the torch checkout",
)
checkout_p.add_argument(
"--gitrepo-origin",
default=default_origin,
help=f"git repository url (default: {default_origin})",
)
checkout_p.add_argument(
"--release",
default=False,
action=argparse.BooleanOptionalAction,
help="Build a release Triton (vs nightly pin)",
)
repo_management.add_checkout_options(checkout_p, default_hipify=default_hipify)
checkout_p.set_defaults(func=do_checkout)
args = p.parse_args(cl_args)
args.func(args)
if __name__ == "__main__":
main(sys.argv[1:])