[MUSA][11/N] ci: add MUSA 4.3 kernel build and release pipeline (#18537)

Co-authored-by: ximin.chen <ximin.chen@mthreads.com>
This commit is contained in:
johnnycxm
2026-02-26 23:45:12 +08:00
committed by GitHub
parent e55e65535e
commit 5939b8912a
4 changed files with 169 additions and 11 deletions

View File

@@ -0,0 +1,5 @@
#!/bin/bash
set -euo pipefail
PIP_INSTALL="python3 -m pip install --no-cache-dir"
${PIP_INSTALL} --upgrade pip setuptools torchada

View File

@@ -0,0 +1,46 @@
#!/usr/bin/env bash
set -euo pipefail
# Rename MUSA wheels to include a +musa<suffix> build tag.
# Usage:
# rename_wheels_musa.sh <musa_suffix> [wheel_dir]
# Example:
# rename_wheels_musa.sh 43 sgl-kernel/dist
if [[ $# -lt 1 || $# -gt 2 ]]; then
echo "Usage: $0 <musa_suffix> [wheel_dir]" >&2
exit 1
fi
MUSA_SUFFIX="$1"
WHEEL_DIR="${2:-dist}"
wheel_files=("$WHEEL_DIR"/*.whl)
if [[ ! -e "${wheel_files[0]}" ]]; then
echo "No wheel files found in ${WHEEL_DIR}/, nothing to rename."
exit 0
fi
for wheel in "${wheel_files[@]}"; do
# Normalize platform tag to manylinux2014
intermediate_wheel="${wheel/linux/manylinux2014}"
# Extract Python ABI version (e.g. cp310)
if [[ $intermediate_wheel =~ -cp([0-9]+)- ]]; then
cp_version="${BASH_REMATCH[1]}"
else
echo "Could not extract Python version from wheel name: $intermediate_wheel" >&2
continue
fi
# Insert +musa<suffix> before the Python ABI tag
new_wheel="${intermediate_wheel/-cp${cp_version}/+musa${MUSA_SUFFIX}-cp${cp_version}}"
if [[ "$wheel" != "$new_wheel" ]]; then
echo "Renaming $wheel -> $new_wheel"
mv -- "$wheel" "$new_wheel"
fi
done
echo "MUSA wheel renaming completed."

View File

@@ -46,34 +46,45 @@ def update_wheel_index(cuda_version=DEFAULT_CUDA_VERSION, rocm_version=None):
f.write(f'<a href="{full_url}">{path.name}</a><br>\n')
def update_wheel_index_rocm(rocm_version):
index_dir = pathlib.Path(f"sgl-whl/rocm{rocm_version}/sgl-kernel")
def _update_non_cuda_wheel_index(backend, version):
index_dir = pathlib.Path(f"sgl-whl/{backend}{version}/sgl-kernel")
index_dir.mkdir(exist_ok=True, parents=True)
base_url = "https://github.com/sgl-project/whl/releases/download"
for path in sorted(pathlib.Path("sgl-kernel/dist").glob("*.whl")):
# Skip the wheel if not rocm
if re.search(f"rocm", path.name) is None:
# Skip the wheel if not for this backend
if re.search(f"{backend}", path.name) is None:
continue
with open(path, "rb") as f:
sha256 = hashlib.sha256(f.read()).hexdigest()
ver = re.findall(
r"sgl_kernel-([0-9.]+(?:\.post[0-9]+)?)(?:\+rocm[0-9]+)?-", path.name
rf"sgl_kernel-([0-9.]+(?:\.post[0-9]+)?)(?:\+{backend}[0-9]+)?-", path.name
)[0]
full_url = f"{base_url}/v{ver}/{path.name}#sha256={sha256}"
with (index_dir / "index.html").open("a") as f:
f.write(f'<a href="{full_url}">{path.name}</a><br>\n')
def update_wheel_index_rocm(rocm_version):
_update_non_cuda_wheel_index("rocm", rocm_version)
def update_wheel_index_musa(musa_version):
_update_non_cuda_wheel_index("musa", musa_version)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--cuda", type=str, default=DEFAULT_CUDA_VERSION)
parser.add_argument("--rocm", type=str, default=None)
parser.add_argument("--musa", type=str, default=None)
args = parser.parse_args()
if args.rocm is None:
update_wheel_index(args.cuda)
else:
if args.musa is not None:
update_wheel_index_musa(args.musa)
elif args.rocm is not None:
update_wheel_index_rocm(args.rocm)
else:
update_wheel_index(args.cuda)
if __name__ == "__main__":