From 4f9fafe5c3e43cfae213b4ca37e4817b482e6c75 Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Wed, 7 Oct 2026 14:07:10 -0500 Subject: [PATCH 1/7] Add mooncake-transfer-engine-rocm build script and build_info.json --- .../build_info.json | 47 +++ .../mooncake_v0.3.13.post1_rocm_ubi_10.sh | 316 ++++++++++++++++++ 2 files changed, 363 insertions(+) create mode 100644 m/mooncake-transfer-engine-rocm/build_info.json create mode 100755 m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh diff --git a/m/mooncake-transfer-engine-rocm/build_info.json b/m/mooncake-transfer-engine-rocm/build_info.json new file mode 100644 index 0000000000..921a638acc --- /dev/null +++ b/m/mooncake-transfer-engine-rocm/build_info.json @@ -0,0 +1,47 @@ +{ + "maintainer": "Daniel Schenker ", + "package_name": "mooncake-transfer-engine-rocm", + "github_url": "https://github.com/kvcache-ai/Mooncake", + "version": "v0.3.13.post1", + "wheel_build": true, + "default_branch": "main", + "package_dir": "m/mooncake-transfer-engine-rocm", + "build_script": "mooncake_v0.3.13.post1_rocm_ubi_10.sh", + "docker_build": false, + "validate_build_script": true, + "use_non_root_user": false, + "wheel_name": "mooncake-transfer-engine-rocm", + "skip_python_versions": ["3.12", "3.14"], + "auditwheel_exclude": [ + "libc10.so", + "libc10_hip.so", + "libtorch.so", + "libtorch_cpu.so", + "libtorch_hip.so", + "libtorch_python.so", + "libtorchaudio.so", + "libtorchvision.so", + "libhip*", + "libroc*", + "libamd*", + "libMIOpen*", + "libhsa*", + "librccl*", + "libLLVM*", + "libcamd*", + "libccolamd*", + "libcholmod*", + "libcolamd*", + "libsuitesparseconfig*", + "libgoamd*", + "liboam*", + "libclang*", + "libMLIR*", + "libfftw3*", + "libgotcha*", + "libOpenCL*" + ], + "*": { + "build_script": "mooncake_v0.3.13.post1_rocm_ubi_10.sh" + } +} diff --git a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh new file mode 100755 index 0000000000..a6c7567536 --- /dev/null +++ b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh @@ -0,0 +1,316 @@ +#!/bin/bash -e +# ----------------------------------------------------------------------------- +# +# Package : mooncake-transfer-engine-rocm +# Version : v0.3.13.post1 +# Source repo : https://github.com/kvcache-ai/Mooncake +# Tested on : UBI:10 (ppc64le) +# Language : Python, C++, HIP +# Ci-Check : True +# Script License: Apache License, Version 2 or later +# Maintainer : Daniel Schenker +# +# Disclaimer: This script has been tested in root mode on given +# ========== platform using the mentioned version of the package. +# It may not work as expected with newer versions of the +# package and/or distribution. In such case, please +# contact "Maintainer" of this script. +# +# ----------------------------------------------------------------------------- +# +# ROCm installation mode (ROCM_INSTALL_MODE env var): +# rpms (default) - Install ROCm RPMs from a provided repo URL +# path - Assume ROCm is already present; use ROCM_PATH as-is +# +# The Mooncake transfer engine is built with AMD HIP/ROCm support enabled +# (-DUSE_HIP=ON) via scikit-build-core, which drives the CMake + pybind11 +# build. Go, SPDK, etcd, and all other optional components are disabled so +# the wheel is a lean transfer-engine-only package. +# +# Usage: +# ./mooncake_v0.3.13.post1_rocm_ubi_10.sh [v0.3.13.post1] +# +# Environment variables honoured (can be set before running): +# PACKAGE_VERSION - Mooncake tag to build (default: v0.3.13.post1) +# ROCM_INSTALL_MODE - rpms (default) or path +# ROCM_PATH - Path to ROCm installation (default: /opt/rocm) +# ROCM_REPO_URL - RPM repo baseurl for ROCm +# DEVPI_INDEX - IBM ppc64le devpi wheel index URL +# (default: https://wheels.developerfirst.ibm.com/ppc64le/linux/+simple) +# +# ----------------------------------------------------------------------------- + +set -e + +PACKAGE_NAME=mooncake-transfer-engine-rocm +PACKAGE_VERSION=${1:-v0.3.13.post1} +PACKAGE_URL=https://github.com/kvcache-ai/Mooncake.git +CURRENT_DIR=$(pwd) +OS_NAME=$(grep ^PRETTY_NAME /etc/os-release | cut -d= -f2) + +ROCM_INSTALL_MODE=${ROCM_INSTALL_MODE:-"rpms"} # rpms | path +ROCM_REPO_URL=${ROCM_REPO_URL:-"https://public.dhe.ibm.com/software/server/POWER/Linux/AMD/ROCm/RHEL/10/ppc64le"} +ROCM_PATH=${ROCM_PATH:-/opt/rocm} + +DEVPI_INDEX=${DEVPI_INDEX:-"https://wheels.developerfirst.ibm.com/ppc64le/linux/+simple"} + +if [[ "$ROCM_INSTALL_MODE" != "rpms" && "$ROCM_INSTALL_MODE" != "path" ]]; then + echo "ERROR: ROCM_INSTALL_MODE must be one of: rpms, path" + exit 1 +fi + +echo "=== Mooncake Transfer Engine ROCm Build ===" +echo " PACKAGE_VERSION : $PACKAGE_VERSION" +echo " ROCM_INSTALL_MODE: $ROCM_INSTALL_MODE" +echo " ROCM_PATH : $ROCM_PATH" +echo " DEVPI_INDEX : $DEVPI_INDEX" +echo "===========================================" + +# --------------------------------------------------------------------------- +# Install system build dependencies +# --------------------------------------------------------------------------- + +# Python packages must appear first (wrapper script requirement). +# Note: libdrm is not available in the UBI 10 repo — it is built from source below. +yum install -y python3.12 python3.12-devel python3.12-pip \ + gcc-toolset-15 gcc-toolset-15-gcc gcc-toolset-15-gcc-c++ \ + git make wget cmake ninja-build \ + rdma-core-devel \ + glog-devel \ + jsoncpp-devel \ + libunwind-devel \ + numactl-devel \ + boost1.78-devel \ + openssl-devel \ + protobuf-devel \ + yaml-cpp-devel \ + libcurl-devel \ + hiredis-devel \ + liburing-devel \ + jemalloc-devel \ + msgpack-devel \ + libzstd-devel \ + pkgconf-pkg-config \ + elfutils-libelf-devel \ + patchelf \ + xxhash-devel \ + libbsd-devel \ + meson + +# Configure GCC Toolset 15 +if [[ -f /opt/rh/gcc-toolset-15/enable ]]; then + source /opt/rh/gcc-toolset-15/enable +elif [[ -d /opt/rh/gcc-toolset-15/root/usr/bin ]]; then + export PATH="/opt/rh/gcc-toolset-15/root/usr/bin:$PATH" + export LD_LIBRARY_PATH="/opt/rh/gcc-toolset-15/root/usr/lib64:${LD_LIBRARY_PATH:-}" +else + echo "ERROR: gcc-toolset-15 not found" + exit 1 +fi + +echo "Using gcc: $(gcc --version | head -1)" + +# Use Python 3.12 for the build so all produced wheels are cp312 +PYTHON=python3.12 + +# --------------------------------------------------------------------------- +# Build libdrm from source +# libdrm is not available in the UBI 10 package repository. We clone the +# upstream freedesktop.org release, build it with meson, and install it into +# /usr/local so every subsequent build step can find it via pkg-config. +# --------------------------------------------------------------------------- +LIBDRM_VERSION=${LIBDRM_VERSION:-"libdrm-2.4.124"} +LIBDRM_URL="https://gitlab.freedesktop.org/mesa/drm.git" + +echo "Building libdrm ${LIBDRM_VERSION} from source" +if [ -d "${CURRENT_DIR}/drm" ]; then + echo "drm directory already exists, reusing." + cd "${CURRENT_DIR}/drm" + git checkout "$LIBDRM_VERSION" +else + if ! git clone --branch "$LIBDRM_VERSION" --depth 1 "$LIBDRM_URL" "${CURRENT_DIR}/drm"; then + echo "ERROR: Failed to clone libdrm ${LIBDRM_VERSION}" + exit 1 + fi + cd "${CURRENT_DIR}/drm" +fi + +meson setup build \ + --prefix=/usr/local \ + --buildtype=release \ + -Damdgpu=enabled \ + -Dradeon=enabled \ + -Dintel=disabled \ + -Dnouveau=disabled \ + -Dvmwgfx=disabled \ + -Dtests=false + +ninja -C build +ninja -C build install + +# Make the freshly installed libdrm visible to pkg-config and the linker +export PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH:-}" +export LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:${LD_LIBRARY_PATH:-}" +echo "libdrm installed: $(pkg-config --modversion libdrm)" + +cd "${CURRENT_DIR}" + +# --------------------------------------------------------------------------- +# MODE: rpms — install ROCm from a provided RPM repository +# --------------------------------------------------------------------------- +if [[ "$ROCM_INSTALL_MODE" == "rpms" ]]; then + if [[ ! "$ROCM_REPO_URL" =~ ^(https?|file):// ]]; then + echo "ERROR: ROCM_REPO_URL does not look like a valid URL (got: ${ROCM_REPO_URL})" + exit 1 + fi + echo "Installing ROCm from ${ROCM_REPO_URL}" + + ROCM_GPG_URL="https://public.dhe.ibm.com/software/server/POWER/Linux/AMD/RPM-GPG-KEY-PAMD" + ROCM_GPG_PATH="/etc/pki/rpm-gpg/RPM-GPG-KEY-PAMD" + echo "Importing ROCm GPG key from ${ROCM_GPG_URL}" + wget -q -O "${ROCM_GPG_PATH}" "${ROCM_GPG_URL}" + rpm --import "${ROCM_GPG_PATH}" + + cat > /etc/yum.repos.d/rocm.repo </dev/null; then + echo "ERROR: hipcc not found under ROCM_PATH=${ROCM_PATH}. Check your ROCm installation." + exit 1 +fi +echo "ROCm hipcc: $(hipcc --version | head -1)" + +# --------------------------------------------------------------------------- +# Clone Mooncake +# --------------------------------------------------------------------------- +echo "Cloning Mooncake ${PACKAGE_VERSION}" +if [ -d "${CURRENT_DIR}/Mooncake/.git" ]; then + echo "Mooncake directory already exists, reusing." + cd "${CURRENT_DIR}/Mooncake" + git fetch --tags origin + git checkout "$PACKAGE_VERSION" +else + if ! git clone --branch "$PACKAGE_VERSION" --depth 1 "$PACKAGE_URL" "${CURRENT_DIR}/Mooncake"; then + echo "------------------$PACKAGE_NAME:clone_fails---------------------------------------" + echo "$PACKAGE_URL $PACKAGE_NAME" + echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | GitHub | Fail | Clone_Fails" + exit 1 + fi + cd "${CURRENT_DIR}/Mooncake" +fi + +git submodule sync +git submodule update --init --recursive + +echo "Current Mooncake commit:" +git --no-pager log -1 --oneline + +# --------------------------------------------------------------------------- +# Install Python build dependencies +# --------------------------------------------------------------------------- +$PYTHON -m pip install --upgrade pip +$PYTHON -m pip install --upgrade \ + "scikit-build-core>=1.0" \ + "pybind11>=2.13" \ + "numpy>=1.24" \ + "setuptools>=61" \ + "pip>=23" \ + wheel + +# --------------------------------------------------------------------------- +# Build mooncake-transfer-engine wheel with ROCm/HIP support +# +# scikit-build-core is the build backend (pyproject.toml). CMake options are +# passed via SKBUILD_CMAKE_ARGS. We enable USE_HIP and point CMake at the +# ROCm HIP CMake config, then disable every Go/SPDK/optional component that +# is not needed for the wheel and not available on ppc64le UBI 10. +# +# USE_CUDA is explicitly disabled (default OFF in pyproject.toml but set here +# for clarity) so cmake does not auto-enable it when USE_HIP is found. +# WITH_STORE_GO / WITH_P2P_STORE / WITH_STORE_RUST are disabled because they +# require Go and are not needed by the transfer-engine Python bindings. +# --------------------------------------------------------------------------- + +export CMAKE_PREFIX_PATH="${ROCM_PATH}/lib/cmake:${ROCM_PATH}:${CMAKE_PREFIX_PATH:-}" + +SKBUILD_CMAKE_ARGS="-DUSE_HIP=ON" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DUSE_CUDA=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_EP=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_P2P_STORE=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_STORE_GO=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_STORE_RUST=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DBUILD_BENCHMARK=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DBUILD_UNIT_TESTS=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DBUILD_EXAMPLES=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DUSE_ETCD=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DSTORE_USE_ETCD=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DSTORE_USE_K8S_LEASE=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DCMAKE_BUILD_TYPE=Release" +export SKBUILD_CMAKE_ARGS + +echo "Building mooncake-transfer-engine-rocm wheel (this will take a while)" +if ! MAX_JOBS=$(nproc) $PYTHON -m pip wheel . \ + --no-build-isolation \ + --no-deps \ + -w "${CURRENT_DIR}/dist"; then + echo "------------------$PACKAGE_NAME:Install_fails-------------------------------------" + echo "$PACKAGE_URL $PACKAGE_NAME" + echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | $OS_NAME | GitHub | Fail | Install_Fails" + exit 1 +fi + +echo "Built mooncake wheel(s):" +ls -lh "${CURRENT_DIR}/dist"/mooncake*.whl + +# --------------------------------------------------------------------------- +# Install the wheel and its runtime dependencies +# --------------------------------------------------------------------------- +$PYTHON -m pip install \ + --prefer-binary \ + --extra-index-url "${DEVPI_INDEX}" \ + aiohttp msgpack requests + +$PYTHON -m pip install "${CURRENT_DIR}/dist"/mooncake*.whl + +# --------------------------------------------------------------------------- +# Import test +# --------------------------------------------------------------------------- +echo "Running import test" +cd "${CURRENT_DIR}" + +if ! $PYTHON -c "import mooncake; print('mooncake version:', mooncake.__version__)"; then + echo "------------------$PACKAGE_NAME:Install_success_but_test_fails---------------------" + echo "$PACKAGE_URL $PACKAGE_NAME" + echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | $OS_NAME | GitHub | Fail | Install_success_but_test_Fails" + exit 2 +else + echo "------------------$PACKAGE_NAME:Install_&_test_both_success-------------------------" + echo "$PACKAGE_URL $PACKAGE_NAME" + echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | $OS_NAME | GitHub | Pass | Both_Install_and_Test_Success" + exit 0 +fi From 4165d47e98a3e0c7aaec9cf2b9c626f276ceac5f Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Wed, 7 Oct 2026 14:43:17 -0500 Subject: [PATCH 2/7] Update mooncake build script --- .../mooncake_v0.3.13.post1_rocm_ubi_10.sh | 49 +++++++++++++++++-- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh index a6c7567536..895449c66c 100755 --- a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh +++ b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh @@ -71,22 +71,25 @@ echo "===========================================" # --------------------------------------------------------------------------- # Python packages must appear first (wrapper script requirement). -# Note: libdrm is not available in the UBI 10 repo — it is built from source below. +# Notes on unavailable packages: +# libdrm - not in UBI 10 repo; built from source below +# jsoncpp-devel - not in any RHEL 10 / EPEL 10 repo; built from source below +# boost-devel - not needed: boost is not linked by the transfer engine when +# store/etcd/redis components are disabled +# protobuf-devel - not in RHEL 10; only needed for USE_ETCD_LEGACY (disabled) +# liburing-devel - only needed for USE_TENT (disabled) yum install -y python3.12 python3.12-devel python3.12-pip \ gcc-toolset-15 gcc-toolset-15-gcc gcc-toolset-15-gcc-c++ \ git make wget cmake ninja-build \ rdma-core-devel \ glog-devel \ - jsoncpp-devel \ + gflags-devel \ libunwind-devel \ numactl-devel \ - boost1.78-devel \ openssl-devel \ - protobuf-devel \ yaml-cpp-devel \ libcurl-devel \ hiredis-devel \ - liburing-devel \ jemalloc-devel \ msgpack-devel \ libzstd-devel \ @@ -155,6 +158,42 @@ echo "libdrm installed: $(pkg-config --modversion libdrm)" cd "${CURRENT_DIR}" +# --------------------------------------------------------------------------- +# Build jsoncpp from source +# jsoncpp-devel is not available in any RHEL 10 / EPEL 10 repository. +# The Mooncake CMake build requires JsonCpp headers and library at configure +# time (FindJsonCpp.cmake). We build the upstream release and install it into +# /usr/local so CMake can find it via find_package / pkg-config. +# --------------------------------------------------------------------------- +JSONCPP_VERSION=${JSONCPP_VERSION:-"1.9.6"} +JSONCPP_URL="https://github.com/open-source-parsers/jsoncpp.git" + +echo "Building jsoncpp ${JSONCPP_VERSION} from source" +if [ -d "${CURRENT_DIR}/jsoncpp" ]; then + echo "jsoncpp directory already exists, reusing." + cd "${CURRENT_DIR}/jsoncpp" + git checkout "$JSONCPP_VERSION" +else + if ! git clone --branch "$JSONCPP_VERSION" --depth 1 "$JSONCPP_URL" "${CURRENT_DIR}/jsoncpp"; then + echo "ERROR: Failed to clone jsoncpp ${JSONCPP_VERSION}" + exit 1 + fi + cd "${CURRENT_DIR}/jsoncpp" +fi + +cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBUILD_SHARED_LIBS=ON \ + -DJSONCPP_WITH_TESTS=OFF \ + -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF +cmake --build build --parallel "$(nproc)" +cmake --install build + +echo "jsoncpp installed: $(pkg-config --modversion jsoncpp)" + +cd "${CURRENT_DIR}" + # --------------------------------------------------------------------------- # MODE: rpms — install ROCm from a provided RPM repository # --------------------------------------------------------------------------- From 8497063d587296a7f70a0f8b285ba7a419d01d39 Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Wed, 7 Oct 2026 15:00:38 -0500 Subject: [PATCH 3/7] Add --ignore-installed to bypass rpm managed python packages --- .../mooncake_v0.3.13.post1_rocm_ubi_10.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh index 895449c66c..6d87b9f957 100755 --- a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh +++ b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh @@ -273,12 +273,14 @@ git --no-pager log -1 --oneline # Install Python build dependencies # --------------------------------------------------------------------------- $PYTHON -m pip install --upgrade pip -$PYTHON -m pip install --upgrade \ +# Use --ignore-installed to avoid conflicts with RPM-managed packages +# (e.g. setuptools installed by the system python3.12 RPM has no RECORD file +# and pip cannot uninstall it — ignore-installed overlays our versions on top). +$PYTHON -m pip install --upgrade --ignore-installed \ "scikit-build-core>=1.0" \ "pybind11>=2.13" \ "numpy>=1.24" \ "setuptools>=61" \ - "pip>=23" \ wheel # --------------------------------------------------------------------------- From c0b58783edd881877be13e3efaf000b26cfd7d7b Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Wed, 7 Oct 2026 16:46:34 -0500 Subject: [PATCH 4/7] Disable store --- .../mooncake_v0.3.13.post1_rocm_ubi_10.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh index 6d87b9f957..7efa4c7c39 100755 --- a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh +++ b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh @@ -293,18 +293,22 @@ $PYTHON -m pip install --upgrade --ignore-installed \ # # USE_CUDA is explicitly disabled (default OFF in pyproject.toml but set here # for clarity) so cmake does not auto-enable it when USE_HIP is found. -# WITH_STORE_GO / WITH_P2P_STORE / WITH_STORE_RUST are disabled because they -# require Go and are not needed by the transfer-engine Python bindings. +# WITH_STORE=OFF disables the mooncake-store C++ library, which requires Boost +# headers (boost/functional/hash.hpp, boost/uuid/uuid.hpp) that are not +# available in RHEL 10. The transfer engine itself does not need the store. +# WITH_STORE_RUST=OFF must accompany WITH_STORE=OFF (CMake enforces this). +# WITH_STORE_GO / WITH_P2P_STORE are also disabled for completeness. # --------------------------------------------------------------------------- export CMAKE_PREFIX_PATH="${ROCM_PATH}/lib/cmake:${ROCM_PATH}:${CMAKE_PREFIX_PATH:-}" SKBUILD_CMAKE_ARGS="-DUSE_HIP=ON" SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DUSE_CUDA=OFF" -SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_EP=OFF" -SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_P2P_STORE=OFF" -SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_STORE_GO=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_STORE=OFF" SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_STORE_RUST=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_STORE_GO=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_P2P_STORE=OFF" +SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DWITH_EP=OFF" SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DBUILD_BENCHMARK=OFF" SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DBUILD_UNIT_TESTS=OFF" SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DBUILD_EXAMPLES=OFF" From 1a322a664d41d9ea27653536ebbd7bd907d0030a Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Wed, 7 Oct 2026 16:55:41 -0500 Subject: [PATCH 5/7] Add pyproject.toml patch to give final wheel correct name and version --- .../mooncake_v0.3.13.post1_rocm_ubi_10.sh | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh index 7efa4c7c39..65c4c3c33b 100755 --- a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh +++ b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh @@ -269,6 +269,44 @@ git submodule update --init --recursive echo "Current Mooncake commit:" git --no-pager log -1 --oneline +# --------------------------------------------------------------------------- +# Patch pyproject.toml: fix package name and version +# +# Mooncake's upstream pyproject.toml has two problems for our use case: +# 1. name = "mooncake-transfer-engine" — but vLLM v0.31.0 requires +# "mooncake-transfer-engine-rocm >= 0.3.13" in requirements/rocm.txt. +# The -rocm suffix distinguishes this ROCm wheel from a hypothetical +# CPU-only or CUDA build on PyPI. +# 2. version = "0.3.12.post1" — the upstream forgot to bump pyproject.toml +# when tagging v0.3.13.post1. We set it to match the tag we are building. +# --------------------------------------------------------------------------- +cd "${CURRENT_DIR}/Mooncake" +$PYTHON - <<'PY' +from pathlib import Path +import re + +p = Path("pyproject.toml") +text = p.read_text() + +# Fix name +old_name = 'name = "mooncake-transfer-engine"' +new_name = 'name = "mooncake-transfer-engine-rocm"' +if old_name in text: + text = text.replace(old_name, new_name, 1) + print(f"Patched pyproject.toml: name -> mooncake-transfer-engine-rocm") +elif new_name in text: + print("pyproject.toml name already correct") +else: + raise SystemExit("ERROR: could not find expected name field in pyproject.toml") + +# Fix version — replace whatever version is there with the tag version +text = re.sub(r'^version = "[^"]+"', 'version = "0.3.13.post1"', text, count=1, flags=re.MULTILINE) +print("Patched pyproject.toml: version -> 0.3.13.post1") + +p.write_text(text) +PY +cd "${CURRENT_DIR}" + # --------------------------------------------------------------------------- # Install Python build dependencies # --------------------------------------------------------------------------- @@ -348,7 +386,17 @@ $PYTHON -m pip install "${CURRENT_DIR}/dist"/mooncake*.whl echo "Running import test" cd "${CURRENT_DIR}" -if ! $PYTHON -c "import mooncake; print('mooncake version:', mooncake.__version__)"; then +# mooncake does not expose __version__ on the package. +# Import mooncake.engine (the pybind11 C extension) to confirm the native .so +# loaded cleanly, then report the installed wheel version via importlib. +if ! $PYTHON -c " +import mooncake +import mooncake.engine +import importlib.metadata +ver = importlib.metadata.version('mooncake-transfer-engine-rocm') +print('mooncake-transfer-engine version:', ver) +print('mooncake.engine loaded:', mooncake.engine) +"; then echo "------------------$PACKAGE_NAME:Install_success_but_test_fails---------------------" echo "$PACKAGE_URL $PACKAGE_NAME" echo "$PACKAGE_NAME | $PACKAGE_URL | $PACKAGE_VERSION | $OS_NAME | GitHub | Fail | Install_success_but_test_Fails" From 2bb9a34f5ddae32ac5085576acc3426508372675 Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Wed, 7 Oct 2026 16:59:23 -0500 Subject: [PATCH 6/7] sytax fix --- .../mooncake_v0.3.13.post1_rocm_ubi_10.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh index 65c4c3c33b..7e25623c9c 100755 --- a/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh +++ b/m/mooncake-transfer-engine-rocm/mooncake_v0.3.13.post1_rocm_ubi_10.sh @@ -305,7 +305,6 @@ print("Patched pyproject.toml: version -> 0.3.13.post1") p.write_text(text) PY -cd "${CURRENT_DIR}" # --------------------------------------------------------------------------- # Install Python build dependencies @@ -356,6 +355,7 @@ SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DSTORE_USE_K8S_LEASE=OFF" SKBUILD_CMAKE_ARGS="${SKBUILD_CMAKE_ARGS};-DCMAKE_BUILD_TYPE=Release" export SKBUILD_CMAKE_ARGS +cd "${CURRENT_DIR}/Mooncake" echo "Building mooncake-transfer-engine-rocm wheel (this will take a while)" if ! MAX_JOBS=$(nproc) $PYTHON -m pip wheel . \ --no-build-isolation \ From 8fdf98344f6aebb4ae42e242dae000e35b5ec17c Mon Sep 17 00:00:00 2001 From: Daniel Schenker Date: Tue, 20 Oct 2026 11:57:54 -0500 Subject: [PATCH 7/7] Add License file --- m/mooncake-transfer-engine-rocm/LICENSE | 201 ++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 m/mooncake-transfer-engine-rocm/LICENSE diff --git a/m/mooncake-transfer-engine-rocm/LICENSE b/m/mooncake-transfer-engine-rocm/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/m/mooncake-transfer-engine-rocm/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.