70 строки
2.8 KiB
Bash
Исполняемый файл
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"
|