AiAnonymize_v3 / scripts /setup_llama_cuda.sh
Alessandro Tomassini
deploy(hf): overlay README/Dockerfile da huggingface/, senza docs/binari/model
c42a5a1
Raw
History Blame Contribute Delete
2.47 kB
#!/usr/bin/env bash
# =============================================================================
# Compila e installa llama-cpp-python con CUDA per QUESTA macchina (bare-metal).
#
# Il binario di llama.cpp è specifico dell'hardware: va (ri)compilato sul server
# dedicato con l'architettura della SUA GPU. Questo script rileva la compute
# capability via nvidia-smi e la passa a CMAKE_CUDA_ARCHITECTURES. Senza GPU
# installa la build CPU (funziona ovunque, più lenta).
#
# Uso (dentro il venv del progetto):
# ./scripts/setup_llama_cuda.sh # auto-rileva l'arch GPU
# CUDA_ARCH=89 ./scripts/setup_llama_cuda.sh # forza l'arch (L4/RTX40=89,
# # A100=80, RTX30=86, H100=90,
# # RTX50/Blackwell=120)
# CUDA_ARCH="80;86;89;90" ./scripts/setup_llama_cuda.sh # build "fat" multi-GPU
#
# Prerequisiti sul server: NVIDIA driver, CUDA toolkit (nvcc), build-essential,
# cmake. Il modello GGUF è invece portabile: scaricalo con download_models.py.
# =============================================================================
set -euo pipefail
PIP="${PIP:-pip}"
PKG="llama-cpp-python>=0.3.2"
if ! command -v nvidia-smi >/dev/null 2>&1; then
echo "⚠ nvidia-smi non trovato: nessuna GPU NVIDIA → installo la build CPU."
CMAKE_ARGS="-DGGML_CUDA=off" FORCE_CMAKE=1 \
"$PIP" install --no-cache-dir --force-reinstall "$PKG"
echo "✓ Build CPU installata. Imposta LLM_N_GPU_LAYERS=0."
exit 0
fi
if ! command -v nvcc >/dev/null 2>&1; then
echo "✗ GPU presente ma 'nvcc' (CUDA toolkit) non trovato nel PATH."
echo " Installa il CUDA toolkit (es. apt install cuda-toolkit) e riprova."
exit 1
fi
# compute_cap es. "8.9" → "89". Più GPU: arch uniche unite da ';' (build fat).
DETECTED=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader \
| tr -d '. ' | sort -u | paste -sd';' -)
ARCHS="${CUDA_ARCH:-$DETECTED}"
echo "▶ GPU:"
nvidia-smi --query-gpu=name,compute_cap,memory.total --format=csv,noheader | sed 's/^/ /'
echo "▶ Compilo $PKG con CUDA per arch: ${ARCHS}"
CMAKE_ARGS="-DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=${ARCHS}" \
FORCE_CMAKE=1 \
"$PIP" install --no-cache-dir --force-reinstall "$PKG"
python - <<'PY'
import llama_cpp
print("✓ llama-cpp-python installato:", llama_cpp.__version__)
PY
echo "✓ Fatto. Imposta DEVICE=cuda e LLM_N_GPU_LAYERS=-1 nel .env."