#!/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."