Files
bdi_podman_serverconf/containers/vllm/build-librccl.sh
T

70 строки
2.8 KiB
Bash
Исполняемый файл

#!/usr/bin/env bash
# Risolve/scarica (con cache locale) la tarball ROCm/TheRock, builda rocm-librccl.Containerfile
# ed estrae automaticamente librccl.so.1.0 nella stessa directory dello script.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
GPU_TARGETS="${GPU_TARGETS:-gfx1150;gfx1151}"
ROCM_AMDGPU_FAMILY="${ROCM_AMDGPU_FAMILY:-gfx110X-all}"
ROCM_RELEASE_TYPE="${ROCM_RELEASE_TYPE:-nightlies}"
ROCM_VERSION="${ROCM_VERSION:-}"
RCCL_REPO="${RCCL_REPO:-https://github.com/ROCm/rocm-systems.git}"
RCCL_BRANCH="${RCCL_BRANCH:-develop}"
IMAGE_TAG="${IMAGE_TAG:-vllm:amd-rccl}"
case "$ROCM_RELEASE_TYPE" in
stable) LISTING_URL="https://repo.amd.com/rocm/tarball/" ;;
prereleases) LISTING_URL="https://rocm.prereleases.amd.com/tarball/" ;;
nightlies) LISTING_URL="https://rocm.nightlies.amd.com/tarball/" ;;
*) echo "ERRORE: ROCM_RELEASE_TYPE sconosciuto: $ROCM_RELEASE_TYPE" >&2; exit 1 ;;
esac
PREFIX="therock-dist-linux-${ROCM_AMDGPU_FAMILY}-"
if [ -z "$ROCM_VERSION" ]; then
echo "Risolvo l'ultima versione ROCm disponibile (${ROCM_RELEASE_TYPE}, ${ROCM_AMDGPU_FAMILY})..."
ROCM_VERSION=$(curl -fsSL "$LISTING_URL" \
| grep -oE "\"name\": \"${PREFIX}[^\"]+\.tar\.gz\"" \
| sed -E "s/^\"name\": \"${PREFIX}//; s/\.tar\.gz\"\$//" \
| sort -V | tail -1)
if [ -z "$ROCM_VERSION" ]; then
echo "ERRORE: nessuna tarball trovata per ${ROCM_AMDGPU_FAMILY} (${ROCM_RELEASE_TYPE}) su ${LISTING_URL}" >&2
exit 1
fi
echo "Versione risolta: $ROCM_VERSION"
fi
TARBALL_NAME="therock-dist-linux-${ROCM_AMDGPU_FAMILY}-${ROCM_VERSION}.tar.gz"
TARBALL_URL="${LISTING_URL}${TARBALL_NAME}"
# Rimuove eventuali tarball ROCm precedenti (altra versione) per non confondere il COPY per-glob del Containerfile.
find . -maxdepth 1 -name 'therock-dist-linux-*.tar.gz' ! -name "$TARBALL_NAME" -exec rm -f {} \;
if [ -f "$TARBALL_NAME" ]; then
echo "Tarball gia' presente localmente: $TARBALL_NAME, non la riscarico"
else
echo "Scarico $TARBALL_NAME da $TARBALL_URL"
curl -fsSL -o "${TARBALL_NAME}.part" "$TARBALL_URL"
mv "${TARBALL_NAME}.part" "$TARBALL_NAME"
fi
echo "Build immagine podman ($IMAGE_TAG)..."
podman build --pull=never \
--build-arg ROCM_VERSION="$ROCM_VERSION" \
--build-arg ROCM_AMDGPU_FAMILY="$ROCM_AMDGPU_FAMILY" \
--build-arg ROCM_RELEASE_TYPE="$ROCM_RELEASE_TYPE" \
--build-arg GPU_TARGETS="$GPU_TARGETS" \
--build-arg RCCL_REPO="$RCCL_REPO" \
--build-arg RCCL_BRANCH="$RCCL_BRANCH" \
-t "$IMAGE_TAG" \
-f rocm-librccl.Containerfile .
echo "Estrazione librccl.so.1.0..."
id=$(podman create "$IMAGE_TAG")
podman cp "$id:/output/lib/librccl.so.1" ./librccl.so.1.0
podman rm "$id" >/dev/null
echo "Fatto: librccl.so.1.0 salvato in ${SCRIPT_DIR}/librccl.so.1.0"