From 6069e93c90a2c3337e9032c6df092c170ef648c6 Mon Sep 17 00:00:00 2001 From: Ping-Lin Chang Date: Sat, 21 Jun 2025 19:21:58 +0100 Subject: [PATCH] Add multi-platform build for linux aarch64 --- .../wheel_manylinux_aarch64_nightly.yaml | 87 +++++++++++++++++ .../workflows/wheel_manylinux_nightly.yaml | 89 ------------------ .../wheel_manylinux_x86_64_nightly.yaml | 93 +++++++++++++++++++ docker/Dockerfile.package-cpu | 8 +- docker/Dockerfile.package-cu117 | 10 +- docker/Dockerfile.package-cu118 | 8 +- docker/Dockerfile.package-cu121 | 10 +- docker/Dockerfile.package-cu122 | 10 +- docker/Dockerfile.package-cu123 | 10 +- docker/Dockerfile.package-cu124 | 10 +- docker/Dockerfile.package-cu128 | 10 +- docker/Dockerfile.package-rocm56 | 5 +- docker/Dockerfile.package-rocm57 | 5 +- docker/Dockerfile.package-rocm61 | 5 +- docker/Dockerfile.package-rocm62 | 5 +- docker/bash.sh | 3 + docker/install/almalinux_install_conda.sh | 8 +- docker/install/almalinux_install_cuda_117.sh | 6 +- docker/install/almalinux_install_cuda_118.sh | 6 +- docker/install/almalinux_install_cuda_121.sh | 6 +- docker/install/almalinux_install_cuda_122.sh | 6 +- docker/install/almalinux_install_cuda_123.sh | 6 +- docker/install/almalinux_install_cuda_124.sh | 6 +- docker/install/almalinux_install_cuda_128.sh | 12 +-- scripts/build_mlc_ai_wheel_manylinux.sh | 9 +- scripts/build_mlc_llm_wheel_manylinux.sh | 13 ++- 26 files changed, 300 insertions(+), 146 deletions(-) create mode 100644 .github/workflows/wheel_manylinux_aarch64_nightly.yaml delete mode 100644 .github/workflows/wheel_manylinux_nightly.yaml create mode 100644 .github/workflows/wheel_manylinux_x86_64_nightly.yaml diff --git a/.github/workflows/wheel_manylinux_aarch64_nightly.yaml b/.github/workflows/wheel_manylinux_aarch64_nightly.yaml new file mode 100644 index 0000000..e9e47ea --- /dev/null +++ b/.github/workflows/wheel_manylinux_aarch64_nightly.yaml @@ -0,0 +1,87 @@ +# GH actions. +name: Wheel-Manylinux-Aarch64-Nightly + +on: + workflow_dispatch: + +jobs: + Build: + continue-on-error: true + strategy: + matrix: + pkg_kind: ["nightly", "stable"] + # matrix of build configs + config: + - gpu: "none" + image: "package-cpu:aarch64" + platform: "cpu" + platform: + - linux/arm64 + exclude: + - pkg_kind: ${{ github.event_name == 'schedule' && 'stable' || '' }} + + runs-on: ubuntu-24.04-arm + + steps: + - name: Reclaim disk space + run: | + df -h + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo rm -rf /usr/local/.ghcup + df -h + - uses: actions/checkout@v3 + with: + submodules: "recursive" + - name: Build Docker image + run: | + set -eux + cd docker + docker build --build-arg ARCH=aarch64 -t package-${{ matrix.config.platform }}:aarch64 -f Dockerfile.package-${{ matrix.config.platform }} . + - name: Setup script env + run: | + rm -rf conda + ln -s 3rdparty/tlcpack/conda conda + - name: Checkout source + run: | + git clone https://github.com/mlc-ai/relax tvm --recursive + git clone https://github.com/mlc-ai/mlc-llm mlc-llm --recursive + - name: Sync MLC AI Package + run: | + python3 scripts/sync_package.py --gpu ${{ matrix.config.gpu }} --package tvm --package-name ${{ matrix.pkg_kind == 'nightly' && 'mlc-ai-nightly' || 'mlc-ai' }} --revision origin/mlc ${{ matrix.pkg_kind == 'nightly' && '--skip-checkout' || '' }} --skip-conda + - name: Sync MLC LLM Package + run: | + python3 scripts/sync_package.py --gpu ${{ matrix.config.gpu }} --package mlc-llm --package-name ${{ matrix.pkg_kind == 'nightly' && 'mlc-llm-nightly' || 'mlc-llm' }} --revision origin/main ${{ matrix.pkg_kind == 'nightly' && '--skip-checkout' || '' }} --skip-conda + - name: Build TVM Unity + uses: gacts/run-and-post-run@v1 + env: + IMAGE: ${{ matrix.config.image }} + GPU: ${{ matrix.config.gpu }} + PLATFORM: ${{ matrix.platform }} + with: + run: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/build_mlc_ai_wheel_manylinux.sh --gpu $GPU + post: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/cleanup_workspace.sh + - name: Build MLC-LLM + uses: gacts/run-and-post-run@v1 + env: + IMAGE: ${{ matrix.config.image }} + GPU: ${{ matrix.config.gpu }} + PLATFORM: ${{ matrix.platform }} + with: + run: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/build_mlc_llm_wheel_manylinux.sh --gpu $GPU + post: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/cleanup_workspace.sh + - name: Wheel-Deploy + if: github.ref == 'refs/heads/main' + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.MLC_GITHUB_TOKEN }} + with: + files: | + tvm/python/repaired_wheels/*.whl + mlc-llm/python/repaired_wheels/*.whl + tag_name: v0.9.dev0 + prerelease: true diff --git a/.github/workflows/wheel_manylinux_nightly.yaml b/.github/workflows/wheel_manylinux_nightly.yaml deleted file mode 100644 index fb43981..0000000 --- a/.github/workflows/wheel_manylinux_nightly.yaml +++ /dev/null @@ -1,89 +0,0 @@ -# GH actions. -name: Wheel-Manylinux-Nightly - - -on: - push: - branches: - - main - pull_request: - branches: - - main - schedule: - - cron: '0 6 * * *' # 6 AM UTC - -jobs: - Build: - strategy: - matrix: - pkg_kind: ['nightly', 'stable'] - # matrix of build configs - config: - - gpu: 'none' - image: 'mlcaidev/package-cpu:519d0b3' - - gpu: 'cuda-12.2' - image: 'mlcaidev/package-cu122:519d0b3' - - gpu: 'cuda-12.3' - image: 'mlcaidev/package-cu123:519d0b3' - - gpu: 'cuda-12.4' - image: 'mlcaidev/package-cu124:519d0b3' - - gpu: 'cuda-12.8' - image: 'mlcaidev/package-cu128:519d0b3' - - gpu: 'rocm-6.1' - image: 'mlcaidev/package-rocm61:519d0b3' - - gpu: 'rocm-6.2' - image: 'mlcaidev/package-rocm62:519d0b3' - exclude: - - pkg_kind: ${{ github.event_name == 'schedule' && 'stable' || '' }} - - runs-on: [self-hosted, Linux, X64] - - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - name: Setup script env - run: | - rm -rf conda - ln -s 3rdparty/tlcpack/conda conda - - name: Checkout source - run: | - git clone https://github.com/mlc-ai/relax tvm --recursive - git clone https://github.com/mlc-ai/mlc-llm mlc-llm --recursive - - name: Sync MLC AI Package - run: | - python3 scripts/sync_package.py --gpu ${{ matrix.config.gpu }} --package tvm --package-name ${{ matrix.pkg_kind == 'nightly' && 'mlc-ai-nightly' || 'mlc-ai' }} --revision origin/mlc ${{ matrix.pkg_kind == 'nightly' && '--skip-checkout' || '' }} --skip-conda - - name: Sync MLC LLM Package - run: | - python3 scripts/sync_package.py --gpu ${{ matrix.config.gpu }} --package mlc-llm --package-name ${{ matrix.pkg_kind == 'nightly' && 'mlc-llm-nightly' || 'mlc-llm' }} --revision origin/main ${{ matrix.pkg_kind == 'nightly' && '--skip-checkout' || '' }} --skip-conda - - name: Build TVM Unity - uses: gacts/run-and-post-run@v1 - env: - IMAGE: ${{ matrix.config.image }} - GPU: ${{ matrix.config.gpu }} - with: - run: | - docker/bash.sh --no-gpu $IMAGE ./scripts/build_mlc_ai_wheel_manylinux.sh --gpu $GPU - post: | - docker/bash.sh --no-gpu $IMAGE ./scripts/cleanup_workspace.sh - - name: Build MLC-LLM - uses: gacts/run-and-post-run@v1 - env: - IMAGE: ${{ matrix.config.image }} - GPU: ${{ matrix.config.gpu }} - with: - run: | - docker/bash.sh --no-gpu $IMAGE ./scripts/build_mlc_llm_wheel_manylinux.sh --gpu $GPU - post: | - docker/bash.sh --no-gpu $IMAGE ./scripts/cleanup_workspace.sh - - name: Wheel-Deploy - if: github.ref == 'refs/heads/main' - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.MLC_GITHUB_TOKEN }} - with: - files: | - tvm/python/repaired_wheels/*.whl - mlc-llm/python/repaired_wheels/*.whl - tag_name: v0.9.dev0 - prerelease: true diff --git a/.github/workflows/wheel_manylinux_x86_64_nightly.yaml b/.github/workflows/wheel_manylinux_x86_64_nightly.yaml new file mode 100644 index 0000000..6e931e3 --- /dev/null +++ b/.github/workflows/wheel_manylinux_x86_64_nightly.yaml @@ -0,0 +1,93 @@ +# GH actions. +name: Wheel-Manylinux-X86-64-Nightly + +on: + workflow_dispatch: +# push: +# branches: +# - main +# pull_request: +# branches: +# - main +# schedule: +# - cron: "0 6 * * *" # 6 AM UTC + +jobs: + Build: + strategy: + matrix: + pkg_kind: ["nightly", "stable"] + # matrix of build configs + config: + - gpu: "none" + image: "mlcaidev/package-cpu:519d0b3" + - gpu: "cuda-12.2" + image: "mlcaidev/package-cu122:519d0b3" + - gpu: "cuda-12.3" + image: "mlcaidev/package-cu123:519d0b3" + - gpu: "cuda-12.4" + image: "mlcaidev/package-cu124:519d0b3" + - gpu: "cuda-12.8" + image: "mlcaidev/package-cu128:519d0b3" + - gpu: "rocm-6.1" + image: "mlcaidev/package-rocm61:519d0b3" + - gpu: "rocm-6.2" + image: "mlcaidev/package-rocm62:519d0b3" + platform: + - linux/amd64 + exclude: + - pkg_kind: ${{ github.event_name == 'schedule' && 'stable' || '' }} + + runs-on: [self-hosted, Linux, X64] + + steps: + - uses: actions/checkout@v3 + with: + submodules: "recursive" + - name: Setup script env + run: | + rm -rf conda + ln -s 3rdparty/tlcpack/conda conda + - name: Checkout source + run: | + git clone https://github.com/mlc-ai/relax tvm --recursive + git clone https://github.com/mlc-ai/mlc-llm mlc-llm --recursive + - name: Sync MLC AI Package + run: | + python3 scripts/sync_package.py --gpu ${{ matrix.config.gpu }} --package tvm --package-name ${{ matrix.pkg_kind == 'nightly' && 'mlc-ai-nightly' || 'mlc-ai' }} --revision origin/mlc ${{ matrix.pkg_kind == 'nightly' && '--skip-checkout' || '' }} --skip-conda + - name: Sync MLC LLM Package + run: | + python3 scripts/sync_package.py --gpu ${{ matrix.config.gpu }} --package mlc-llm --package-name ${{ matrix.pkg_kind == 'nightly' && 'mlc-llm-nightly' || 'mlc-llm' }} --revision origin/main ${{ matrix.pkg_kind == 'nightly' && '--skip-checkout' || '' }} --skip-conda + - name: Build TVM Unity + uses: gacts/run-and-post-run@v1 + env: + IMAGE: ${{ matrix.config.image }} + GPU: ${{ matrix.config.gpu }} + PLATFORM: ${{ matrix.platform }} + with: + run: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/build_mlc_ai_wheel_manylinux.sh --gpu $GPU + post: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/cleanup_workspace.sh + - name: Build MLC-LLM + uses: gacts/run-and-post-run@v1 + env: + IMAGE: ${{ matrix.config.image }} + GPU: ${{ matrix.config.gpu }} + PLATFORM: ${{ matrix.platform }} + with: + run: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/build_mlc_llm_wheel_manylinux.sh --gpu $GPU + post: | + docker/bash.sh --no-gpu $IMAGE $PLATFORM ./scripts/cleanup_workspace.sh + - name: Wheel-Deploy + if: github.ref == 'refs/heads/main' + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.MLC_GITHUB_TOKEN }} + with: + files: | + tvm/python/repaired_wheels/*.whl + mlc-llm/python/repaired_wheels/*.whl + tag_name: v0.9.dev0 + prerelease: true diff --git a/docker/Dockerfile.package-cpu b/docker/Dockerfile.package-cpu index cb32207..0d39ac2 100644 --- a/docker/Dockerfile.package-cpu +++ b/docker/Dockerfile.package-cpu @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -24,8 +25,9 @@ COPY install/almalinux_install_patchelf.sh /install/almalinux_install_patchelf.s RUN bash /install/almalinux_install_patchelf.sh # Install Conda +ARG ARCH COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -41,7 +43,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu117 b/docker/Dockerfile.package-cu117 index 9613e50..a3e14f2 100644 --- a/docker/Dockerfile.package-cu117 +++ b/docker/Dockerfile.package-cu117 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_117.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -32,7 +34,7 @@ RUN bash /install/almalinux_install_patchelf.sh # Install Conda COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu118 b/docker/Dockerfile.package-cu118 index f23fb64..2f8b4a9 100644 --- a/docker/Dockerfile.package-cu118 +++ b/docker/Dockerfile.package-cu118 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_118.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu121 b/docker/Dockerfile.package-cu121 index 58c198f..d11b28a 100644 --- a/docker/Dockerfile.package-cu121 +++ b/docker/Dockerfile.package-cu121 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_121.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -32,7 +34,7 @@ RUN bash /install/almalinux_install_patchelf.sh # Install Conda COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu122 b/docker/Dockerfile.package-cu122 index 9316e8f..64f2002 100644 --- a/docker/Dockerfile.package-cu122 +++ b/docker/Dockerfile.package-cu122 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_122.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -32,7 +34,7 @@ RUN bash /install/almalinux_install_patchelf.sh # Install Conda COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu123 b/docker/Dockerfile.package-cu123 index 6323384..788d82c 100644 --- a/docker/Dockerfile.package-cu123 +++ b/docker/Dockerfile.package-cu123 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_123.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -32,7 +34,7 @@ RUN bash /install/almalinux_install_patchelf.sh # Install Conda COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu124 b/docker/Dockerfile.package-cu124 index fdb9c8f..9e02af3 100644 --- a/docker/Dockerfile.package-cu124 +++ b/docker/Dockerfile.package-cu124 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_124.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -32,7 +34,7 @@ RUN bash /install/almalinux_install_patchelf.sh # Install Conda COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-cu128 b/docker/Dockerfile.package-cu128 index 7015165..abb2d21 100644 --- a/docker/Dockerfile.package-cu128 +++ b/docker/Dockerfile.package-cu128 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-vulkan -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -15,8 +16,9 @@ COPY install/almalinux_install_llvm.sh /install/almalinux_install_llvm.sh RUN bash /install/almalinux_install_llvm.sh # install cuda +ARG ARCH COPY install/almalinux_install_cuda_128.sh /install/almalinux_install_cuda.sh -RUN bash /install/almalinux_install_cuda.sh +RUN bash /install/almalinux_install_cuda.sh ${ARCH} ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${PATH} @@ -32,7 +34,7 @@ RUN bash /install/almalinux_install_patchelf.sh # Install Conda COPY install/almalinux_install_conda.sh /install/almalinux_install_conda.sh -RUN bash /install/almalinux_install_conda.sh +RUN bash /install/almalinux_install_conda.sh ${ARCH} ENV PATH=/opt/conda/bin:${PATH} # Install Python @@ -48,7 +50,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-rocm56 b/docker/Dockerfile.package-rocm56 index e25942c..94ce5bd 100644 --- a/docker/Dockerfile.package-rocm56 +++ b/docker/Dockerfile.package-rocm56 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-rocm -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -45,7 +46,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-rocm57 b/docker/Dockerfile.package-rocm57 index f976674..5ff95d5 100644 --- a/docker/Dockerfile.package-rocm57 +++ b/docker/Dockerfile.package-rocm57 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-rocm -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -45,7 +46,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-rocm61 b/docker/Dockerfile.package-rocm61 index d56d843..6dca385 100644 --- a/docker/Dockerfile.package-rocm61 +++ b/docker/Dockerfile.package-rocm61 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-rocm -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -45,7 +46,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/Dockerfile.package-rocm62 b/docker/Dockerfile.package-rocm62 index 8df6fe0..3bb07b6 100644 --- a/docker/Dockerfile.package-rocm62 +++ b/docker/Dockerfile.package-rocm62 @@ -1,6 +1,7 @@ # Docker image: mlc-ai/package-rocm -FROM quay.io/pypa/manylinux_2_28_x86_64 +ARG ARCH +FROM quay.io/pypa/manylinux_2_28_${ARCH} # install core COPY install/almalinux_install_core.sh /install/almalinux_install_core.sh @@ -45,7 +46,7 @@ RUN bash /install/almalinux_install_python_package.sh # Install auditwheel COPY install/almalinux_install_auditwheel.sh /install/almalinux_install_auditwheel.sh RUN bash /install/almalinux_install_auditwheel.sh -ENV AUDITWHEEL_PLAT=manylinux_2_28_x86_64 +ENV AUDITWHEEL_PLAT=manylinux_2_28_${ARCH} # Install Rust COPY install/almalinux_install_rust.sh /install/almalinux_install_rust.sh diff --git a/docker/bash.sh b/docker/bash.sh index d54eae4..8152c0a 100755 --- a/docker/bash.sh +++ b/docker/bash.sh @@ -22,7 +22,9 @@ else fi DOCKER_IMAGE_NAME=("$1") +shift +DOCKER_PLATFORM=("$1") if [ "$#" -eq 1 ]; then COMMAND="bash" @@ -84,6 +86,7 @@ ${DOCKER_BINARY} run --rm --pid=host\ -v ${WORKSPACE}:/workspace \ -v ${SCRIPT_DIR}:/docker \ -w /workspace \ + --platform ${DOCKER_PLATFORM} \ ${CUDA_ENV} \ ${WHEEL_TEST} \ ${DOCKER_EXTRA_PARAMS[@]} \ diff --git a/docker/install/almalinux_install_conda.sh b/docker/install/almalinux_install_conda.sh index ea21bce..7881cf2 100644 --- a/docker/install/almalinux_install_conda.sh +++ b/docker/install/almalinux_install_conda.sh @@ -4,10 +4,10 @@ set -e set -u set -o pipefail -cd /tmp && wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -chmod +x Miniconda3-latest-Linux-x86_64.sh -/tmp/Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda -rm /tmp/Miniconda3-latest-Linux-x86_64.sh +cd /tmp && wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-${1}.sh +chmod +x Miniconda3-latest-Linux-${1}.sh +/tmp/Miniconda3-latest-Linux-${1}.sh -b -p /opt/conda +rm /tmp/Miniconda3-latest-Linux-${1}.sh /opt/conda/bin/conda update --yes -n base -c defaults conda /opt/conda/bin/conda install -n base conda-libmamba-solver /opt/conda/bin/conda config --set solver libmamba diff --git a/docker/install/almalinux_install_cuda_117.sh b/docker/install/almalinux_install_cuda_117.sh index 3b6eef8..564e736 100644 --- a/docker/install/almalinux_install_cuda_117.sh +++ b/docker/install/almalinux_install_cuda_117.sh @@ -6,7 +6,11 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi dnf install kernel-devel -y dnf install cuda-11-7 -y diff --git a/docker/install/almalinux_install_cuda_118.sh b/docker/install/almalinux_install_cuda_118.sh index efcc49c..d29d67f 100644 --- a/docker/install/almalinux_install_cuda_118.sh +++ b/docker/install/almalinux_install_cuda_118.sh @@ -6,7 +6,11 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi dnf install kernel-devel -y dnf install cuda-11-8 -y diff --git a/docker/install/almalinux_install_cuda_121.sh b/docker/install/almalinux_install_cuda_121.sh index 0fefd7c..2357b41 100644 --- a/docker/install/almalinux_install_cuda_121.sh +++ b/docker/install/almalinux_install_cuda_121.sh @@ -6,7 +6,11 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi sed -i '2imodule_hotfixes=1' /etc/yum.repos.d/cuda-rhel8.repo dnf install kernel-devel -y dnf install cuda-12-1 -y diff --git a/docker/install/almalinux_install_cuda_122.sh b/docker/install/almalinux_install_cuda_122.sh index cf7d166..d5fd89d 100644 --- a/docker/install/almalinux_install_cuda_122.sh +++ b/docker/install/almalinux_install_cuda_122.sh @@ -6,7 +6,11 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi sed -i '2imodule_hotfixes=1' /etc/yum.repos.d/cuda-rhel8.repo dnf install kernel-devel -y dnf install cuda-12-2 -y diff --git a/docker/install/almalinux_install_cuda_123.sh b/docker/install/almalinux_install_cuda_123.sh index ef78a9c..2c59fa8 100644 --- a/docker/install/almalinux_install_cuda_123.sh +++ b/docker/install/almalinux_install_cuda_123.sh @@ -6,7 +6,11 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi sed -i '2imodule_hotfixes=1' /etc/yum.repos.d/cuda-rhel8.repo dnf install kernel-devel -y dnf install cuda-12-3 -y diff --git a/docker/install/almalinux_install_cuda_124.sh b/docker/install/almalinux_install_cuda_124.sh index e1ae975..b8394a9 100644 --- a/docker/install/almalinux_install_cuda_124.sh +++ b/docker/install/almalinux_install_cuda_124.sh @@ -6,7 +6,11 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi sed -i '2imodule_hotfixes=1' /etc/yum.repos.d/cuda-rhel8.repo dnf install kernel-devel -y dnf install cuda-12-4 -y diff --git a/docker/install/almalinux_install_cuda_128.sh b/docker/install/almalinux_install_cuda_128.sh index efd313e..eed8bfd 100644 --- a/docker/install/almalinux_install_cuda_128.sh +++ b/docker/install/almalinux_install_cuda_128.sh @@ -6,14 +6,14 @@ set -o pipefail dnf install epel-release -y dnf update -y rpm -q epel-release -yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +if [ "$1" == "aarch64" ]; then + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo +else + yum config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +fi sed -i '2imodule_hotfixes=1' /etc/yum.repos.d/cuda-rhel8.repo dnf install kernel-devel -y -# dnf install cuda-12-8 -y -wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda-repo-rhel8-12-8-local-12.8.0_570.86.10-1.x86_64.rpm -rpm -i cuda-repo-rhel8-12-8-local-12.8.0_570.86.10-1.x86_64.rpm -dnf clean all -dnf -y install cuda-toolkit-12-8 +dnf install cuda-12-8 -y NCCL_VERSION=$(dnf --showduplicates list libnccl | grep "cuda12.8" | tail -1 | awk '{print $2}') dnf install libnccl-$NCCL_VERSION libnccl-devel-$NCCL_VERSION libnccl-static-$NCCL_VERSION -y diff --git a/scripts/build_mlc_ai_wheel_manylinux.sh b/scripts/build_mlc_ai_wheel_manylinux.sh index 7bc58e6..4d7685a 100755 --- a/scripts/build_mlc_ai_wheel_manylinux.sh +++ b/scripts/build_mlc_ai_wheel_manylinux.sh @@ -137,8 +137,13 @@ fi git config --global --add safe.directory /workspace/tvm mkdir -p build cd build -cmake .. -make -j12 +cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. + +# Detect number of CPU cores for parallel compilation +NUM_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4) +echo "Detected ${NUM_CORES} CPU cores, using -j${NUM_CORES} for compilation" +make -j${NUM_CORES} + find . -type d -name 'CMakeFiles' -exec rm -rf {} + UNICODE_WIDTH=32 # Dummy value, irrelevant for Python 3 diff --git a/scripts/build_mlc_llm_wheel_manylinux.sh b/scripts/build_mlc_llm_wheel_manylinux.sh index 7293e12..690ba40 100755 --- a/scripts/build_mlc_llm_wheel_manylinux.sh +++ b/scripts/build_mlc_llm_wheel_manylinux.sh @@ -121,8 +121,19 @@ fi # compile the mlc-llm mkdir -p build cd build + +# fix the -lamotic not found error for aarch64 build +if [[ "$(uname -m)" == "aarch64" ]]; then + ln -sf /usr/lib64/libatomic.so.1.2.0 /usr/lib64/libatomic.so +fi + cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. -make -j12 + +# Detect number of CPU cores for parallel compilation +NUM_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4) +echo "Detected ${NUM_CORES} CPU cores, using -j${NUM_CORES} for compilation" +make -j${NUM_CORES} + find . -type d -name 'CMakeFiles' -exec rm -rf {} + UNICODE_WIDTH=32 # Dummy value, irrelevant for Python 3