Ana içeriğe geç

Ubuntu Linux Üzerinde GPU NVIDIA Sürücülerini ve CUDA'yı Kurma

Nvidia kartlarını resmi olarak yalnızca Ubuntu 22.04/24.04/26.04 LTS sürümlerinde destekliyoruz. Diğer dağıtımlara sürücü yüklemek için lütfen resmi geliştirici talimatlarına bakın:

Dikkat

Tesla serisi GPU'ların (örneğin, NVIDIA Tesla T4) düzgün çalışması için, sunucu BIOS'unda 'above 4G decoding', 'large/64bit BARs' veya 'Above 4G MMIO BIOS assignment' parametresinin etkinleştirildiğinden emin olun.

Sunucu konsolunu (yerel konsol veya SSH üzerinden) açın, root olarak giriş yapın, aşağıdaki betiği kopyalayın, komut satırına yapıştırın ve sürücüleri ve CUDA'yı otomatik olarak yüklemek için Enter tuşuna basın. Yazılımınızın çalışması için docker veya docker compose gerekiyorsa, betiğin GPU desteğini konteynerlara "aktarabilmesi" için sürücüleri yüklemeden ÖNCE bunları yükleyin.

Not

Bash dışında bir komut satırı kabuğu (örneğin zsh veya başka bir kabuk) kullanıyorsanız, exec bash komutunu çalıştırarak betiği çalıştırmak için bash'e geçiş yapın.

Dikkat

Kurulum sırasında, yeni çekirdek modüllerinin veya servislerin yeniden başlatılmasını onaylamak için Enter tuşuna basmanız gerekebilir.

Kurulum Betiği

#!/bin/bash
#===============================================================================
# Ubuntu 22.04/24.04/26.04 LTS için Evrensel NVIDIA Sürücü + CUDA Yükleyici
# - Legacy GPU'lar (CC < 7.5): sabitlenmiş sürücü + CUDA 12.9 (Pascal/Volta destekleyen son dal)
# - Blackwell GPU'lar: açık çekirdek modülleri + en güncel CUDA
# - Diğer tüm GPU'lar (RTX A5000 dahil, CC 8.6): tescilli sürücü 580 + en güncel CUDA
# - cuda-drivers meta-paketi ASLA yüklenmez (açık modüllerin çekilmesini önler)
#===============================================================================
set -euo pipefail

#-------------------------------------------------------------------------------
# YAPILANDIRMA BAYRAKLARI
#-------------------------------------------------------------------------------
DO_OS_POLICY_CHECK=1
ALLOWED_UBUNTU_VERSIONS=("22.04" "24.04" "26.04")

DO_APT_UPGRADE=1
DO_INSTALL_HWE=1
DO_INSTALL_KERNEL_HEADERS=1
DO_INSTALL_BUILD_TOOLS=1

DO_PURGE_OLD_PACKAGES=1
DO_SETUP_CUDA_REPO=1
DO_INSTALL_CUDA_STACK=1

# Legacy GPU'lar: karta göre sabitlenmiş sürücü (CC < 7.5, yalnızca CUDA 12.x)
LEGACY_GPUS=(
  "10de:1b06|GeForce GTX 1080 Ti|nvidia-driver-535"
  "10de:1db1|Tesla V100|nvidia-driver-535"
  "10de:1b80|GeForce GTX 1070|nvidia-driver-535"
  "10de:1c03|GeForce GTX 1060|nvidia-driver-535"
)

# Blackwell GPU'lar: açık çekirdek modülleri gerektirir
BLACKWELL_GPUS=(
  "10de:2b85|GeForce RTX 5090"
  "10de:2b87|GeForce RTX 5090 D"
  "10de:2b84|GeForce RTX 5080"
  "10de:2b83|GeForce RTX 5070 Ti"
  "10de:2b82|GeForce RTX 5070"
  "10de:2f80|GeForce RTX 5070 Laptop GPU"
  "10de:2bb5|RTX PRO 6000 Blackwell Server Edition"
  "10de:2bb4|RTX PRO 6000 Blackwell Workstation Edition"
  "10de:2bb1|RTX PRO 6000 Blackwell Max-Q"
  "10de:2bb3|RTX PRO 5000 Blackwell"
  "10de:2c31|RTX PRO 4500 Blackwell"
  "10de:2c37|RTX PRO 4000 Blackwell"
  "10de:2c36|RTX PRO 3000 Blackwell"
  "10de:2d30|RTX PRO 2000 Blackwell"
  "10de:2c35|RTX PRO 2000 Blackwell (Alternative)"
  "10de:2c3a|RTX PRO 4500 Blackwell Server Edition"
  "10de:2c77|RTX PRO 5000 Blackwell Embedded GPU"
  "10de:2c38|RTX PRO 5000 Blackwell Generation Laptop GPU"
  "10de:2f38|RTX PRO 3000 Blackwell Generation Laptop GPU"
  "10de:2db8|RTX PRO 1000 Blackwell Generation Laptop GPU"
)

DO_BLACKLIST_NOUVEAU=1
DO_TRY_RMMOD_NOUVEAU=1
DO_USER_GROUPS=0
DO_BASHRC_CUDA_PATHS=1
DO_VERIFY_NVIDIA_SMI=1
DO_VERIFY_NVCC=1
DO_INSTALL_NVIDIA_CONTAINER_TOOLKIT=1
DO_CONFIGURE_DOCKER_RUNTIME=1
DO_RESTART_DOCKER=1

# ---- Başlangıç ----
echo "NVIDIA sürücü + CUDA kurulumu başlatılıyor (Etkileşimsiz)..."

#-------------------------------------------------------------------------------
# BAĞIMLILIK KONTROLÜ
#-------------------------------------------------------------------------------
for cmd in lspci wget gpg curl sed awk uname; do
  command -v "$cmd" >/dev/null 2>&1 || { echo "Eksik bağımlılık: $cmd"; exit 1; }
done

#-------------------------------------------------------------------------------
# İŞLETİM SİSTEMİ TESPİTİ
#-------------------------------------------------------------------------------
osr="/etc/os-release"
[[ -r "$osr" ]] || osr="/usr/lib/os-release"
[[ -r "$osr" ]] || { echo "os-release dosyası okunamıyor. Çıkılıyor."; exit 1; }

set -a
. "$osr"
set +a

[[ "${ID:-}" != "ubuntu" ]] && { echo "Bu betik yalnızca Ubuntu içindir. Çıkılıyor."; exit 1; }

UBUNTU_VERSION="${VERSION_ID:-}"
UBUNTU_CODENAME="${VERSION_CODENAME:-}"

if [[ -z "${UBUNTU_CODENAME}" ]]; then
  case "${UBUNTU_VERSION}" in
    "22.04") UBUNTU_CODENAME="jammy" ;;
    "24.04") UBUNTU_CODENAME="noble" ;;
    "26.04") UBUNTU_CODENAME="resolute" ;;
    *) UBUNTU_CODENAME="unknown" ;;
  esac
fi

[[ -z "${UBUNTU_VERSION}" ]] && { echo "Ubuntu VERSION_ID tespit edilemiyor. Çıkılıyor."; exit 1; }

if [[ "${DO_OS_POLICY_CHECK:-0}" -eq 1 ]]; then
  ok=0
  for v in "${ALLOWED_UBUNTU_VERSIONS[@]}"; do
    [[ "${UBUNTU_VERSION}" == "${v}" ]] && { ok=1; break; }
  done
  [[ "${ok}" -ne 1 ]] && { echo "Desteklenmeyen Ubuntu sürümü: ${UBUNTU_VERSION}"; exit 1; }
fi

RELEASE_VERSION="$(echo "${UBUNTU_VERSION}" | sed 's/\([0-9]\+\)\.\([0-9]\+\)/\1\2/')"
echo "OS: Ubuntu ${UBUNTU_VERSION} (${UBUNTU_CODENAME})"

#-------------------------------------------------------------------------------
# GPU TESPİTİ
#-------------------------------------------------------------------------------
NVIDIA_GPU_LINES="$(lspci -nn | grep -iE 'vga|3d' | grep -i '10de:' || true)"
[[ -z "${NVIDIA_GPU_LINES}" ]] && { echo "NVIDIA GPU tespit edilemedi (vendor 10de). Çıkılıyor."; exit 1; }

echo "Tespit edilen NVIDIA GPU'lar:"
echo "${NVIDIA_GPU_LINES}"

DETECTED_GPUS="$(lspci -nn)"
REBOOT_REQUIRED=0

#-------------------------------------------------------------------------------
# SİSTEM HAZIRLIĞI
#-------------------------------------------------------------------------------
export DEBIAN_FRONTEND=noninteractive
export NEEDRESTART_MODE=a

if [[ "${DO_APT_UPGRADE}" -eq 1 ]]; then
  echo "Sistem paketleri güncelleniyor..."
  sudo -E apt-get update
  sudo -E apt-get upgrade -y \
    -o Dpkg::Options::="--force-confdef" \
    -o Dpkg::Options::="--force-confold"
fi

if [[ "${DO_INSTALL_HWE}" -eq 1 ]]; then
  case "${UBUNTU_VERSION}" in
    "22.04") HWE_PKG="linux-generic-hwe-22.04" ;;
    "24.04") HWE_PKG="linux-generic-hwe-24.04" ;;
    "26.04") HWE_PKG="" ;;
    *) HWE_PKG="" ;;
  esac
  if [[ -n "${HWE_PKG}" ]]; then
    echo "HWE çekirdeği yükleniyor: ${HWE_PKG}"
    sudo -E apt-get install -y \
      -o Dpkg::Options::="--force-confdef" \
      -o Dpkg::Options::="--force-confold" \
      "${HWE_PKG}"
    REBOOT_REQUIRED=1
  fi
fi

if [[ "${DO_INSTALL_KERNEL_HEADERS}" -eq 1 ]]; then
  CURRENT_KERNEL="$(uname -r)"
  echo "Çekirdek başlıkları yükleniyor: ${CURRENT_KERNEL}"
  sudo -E apt-get install -y \
    -o Dpkg::Options::="--force-confdef" \
    -o Dpkg::Options::="--force-confold" \
    "linux-headers-${CURRENT_KERNEL}" || {
    echo "linux-headers yüklenemedi. DKMS hata verebilir."; exit 1; }
fi

if [[ "${DO_INSTALL_BUILD_TOOLS}" -eq 1 ]]; then
  case "${UBUNTU_VERSION}" in
    "22.04") GCC_PACKAGES=("gcc-12" "g++-12") ;;
    "24.04") GCC_PACKAGES=("gcc-13" "g++-13") ;;
    "26.04") GCC_PACKAGES=("gcc-15" "g++-15") ;;
    *) GCC_PACKAGES=("gcc" "g++") ;;
  esac
  echo "Yapılandırma araçları yükleniyor: ${GCC_PACKAGES[*]}"
  sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" "${GCC_PACKAGES[@]}"
fi

#-------------------------------------------------------------------------------
# ESKİ PAKETLERİ TEMİZLE
#-------------------------------------------------------------------------------
if [[ "${DO_PURGE_OLD_PACKAGES}" -eq 1 ]]; then
  echo "Önceki NVIDIA/CUDA kurulumları temizleniyor..."
  sudo dpkg --configure -a || true
  sudo -E apt-get purge -y "nvidia-*" "libnvidia-*" "cuda-*" "nvidia-driver-*" "*cudnn*" "*nsight*" 2>/dev/null || true
  sudo -E apt-get remove --purge -y nvidia-cuda-toolkit nvidia-prime nvidia-settings 2>/dev/null || true
  sudo -E apt-get autoremove -y || true
  sudo -E apt-get --fix-broken install -y || true
  sudo -E apt-get clean -y || true
fi

#-------------------------------------------------------------------------------
# CUDA REPOSİTORY KURULUMU
#-------------------------------------------------------------------------------
if [[ "${DO_SETUP_CUDA_REPO}" -eq 1 ]]; then
  echo "ubuntu${RELEASE_VERSION} için CUDA reposu ayarlanıyor..."
  wget -q "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${RELEASE_VERSION}/x86_64/cuda-keyring_1.1-1_all.deb"
  sudo dpkg -i cuda-keyring_1.1-1_all.deb 2>/dev/null || true
  rm -f cuda-keyring_1.1-1_all.deb
  sudo -E apt-get update
fi

#-------------------------------------------------------------------------------
# NOUVEAU KARA LİSTEYE ALMA
#-------------------------------------------------------------------------------
if [[ "${DO_BLACKLIST_NOUVEAU}" -eq 1 ]]; then
  BL_FILE="/etc/modprobe.d/blacklist-nouveau.conf"
  if [[ ! -f "${BL_FILE}" ]] || ! grep -q "^blacklist nouveau" "${BL_FILE}" 2>/dev/null; then
    echo "nouveau kara listeye alınıyor (yeniden başlatma gerektirir)..."
    sudo tee "${BL_FILE}" >/dev/null <<'EOF'
blacklist nouveau
options nouveau modeset=0
EOF
    sudo update-initramfs -u
    REBOOT_REQUIRED=1
  fi
fi

#-------------------------------------------------------------------------------
# SÜRÜCÜ YÜKLEME
#-------------------------------------------------------------------------------
IS_BLACKWELL=0
IS_LEGACY=0
IS_PROPRIETARY=0

# 1) Blackwell: açık modüller
for gpu_spec in "${BLACKWELL_GPUS[@]}"; do
  IFS='|' read -r pci_id gpu_name <<< "$gpu_spec"
  if echo "$DETECTED_GPUS" | grep -q "$pci_id"; then
    echo "Tespit edilen Blackwell GPU: $gpu_name ($pci_id)"
    echo "Açık çekirdek modülleri yükleniyor..."
    sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" \
      nvidia-open nvidia-driver-open nvidia-dkms-open
    IS_BLACKWELL=1
    break
  fi
done

# 2) Legacy GPU'lar: sabitlenmiş sürücü
if [[ "$IS_BLACKWELL" -eq 0 ]]; then
  for gpu_spec in "${LEGACY_GPUS[@]}"; do
    IFS='|' read -r pci_id gpu_name driver_pkg <<< "$gpu_spec"
    if echo "$DETECTED_GPUS" | grep -q "$pci_id"; then
      echo "Tespit edilen legacy GPU: $gpu_name ($pci_id) -> $driver_pkg"
      sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" \
        "$driver_pkg" "nvidia-dkms-${driver_pkg#nvidia-driver-}"
      IS_LEGACY=1
      break
    fi
  done
fi

# 3) Geri kalan her şey: PROPRIETARY sürücü 580 (RTX A5000 buraya girer)
if [[ "$IS_BLACKWELL" -eq 0 && "$IS_LEGACY" -eq 0 ]]; then
  echo "Blackwell veya legacy olmayan GPU tespit edildi (örneğin, RTX A5000)."
  echo "Proprietary sürücü 580 yükleniyor..."
  sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" \
    nvidia-driver-580 nvidia-dkms-580
  IS_PROPRIETARY=1
fi

#-------------------------------------------------------------------------------
# CUDA TOOLKIT YÜKLEME
# - Legacy (CC < 7.5): CUDA 12.9 (Pascal/Volta destekleyen son dal)
# - Blackwell / Proprietary (CC >= 7.5): en güncel cuda-toolkit meta-paketi
# - cuda-drivers ASLA yüklenmez
#-------------------------------------------------------------------------------
if [[ "${DO_INSTALL_CUDA_STACK}" -eq 1 ]]; then
  if [[ "$IS_LEGACY" -eq 1 ]]; then
    echo "CUDA Toolkit 12.9 yükleniyor (legacy yol, Pascal/Volta destekleyen son dal)..."
    sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" cuda-toolkit-12-9
  else
    echo "En güncel mevcut CUDA Toolkit yükleniyor (Blackwell/proprietary yolu)..."
    sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" cuda-toolkit
  fi
fi

#-------------------------------------------------------------------------------
# YÜKLEME SONRASI ADIMLAR
#-------------------------------------------------------------------------------
if [[ "${DO_TRY_RMMOD_NOUVEAU}" -eq 1 ]]; then
  sudo rmmod -f nouveau 2>/dev/null || true
fi

if [[ "${DO_USER_GROUPS}" -eq 1 ]]; then
  TARGET_USER="${SUDO_USER:-$USER}"
  sudo usermod -aG video,render "${TARGET_USER}" || true
  echo "Kullanıcı ${TARGET_USER} video/render gruplarına eklendi."
  REBOOT_REQUIRED=1
fi

if [[ "${DO_BASHRC_CUDA_PATHS}" -eq 1 ]]; then
  TARGET_USER="${SUDO_USER:-$USER}"
  TARGET_HOME="$(getent passwd "${TARGET_USER}" | cut -d: -f6)"
  TARGET_BASHRC="${TARGET_HOME}/.bashrc"
  MARKER="NVIDIA CUDA Paths"

  [[ -f "${TARGET_BASHRC}" ]] || sudo -u "${TARGET_USER}" touch "${TARGET_BASHRC}" || true

  if ! grep -q "${MARKER}" "${TARGET_BASHRC}" 2>/dev/null; then
    cat >> "${TARGET_BASHRC}" <<'EOF'

# NVIDIA CUDA Paths
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
EOF
    echo "CUDA PATH ${TARGET_BASHRC} dosyasına eklendi"
  fi
fi

#-------------------------------------------------------------------------------
# DOĞRULAMA
#-------------------------------------------------------------------------------
if [[ "${DO_VERIFY_NVIDIA_SMI}" -eq 1 ]]; then
  echo "nvidia-smi doğrulanıyor..."
  nvidia-smi || true
fi

if [[ "${DO_VERIFY_NVCC}" -eq 1 ]]; then
  if command -v nvcc >/dev/null 2>&1; then
    echo "nvcc doğrulanıyor..."
    nvcc -V || true
  else
    echo "nvcc henüz PATH içinde bulunamadı (yeniden giriş/yeniden başlatma gerekebilir)"
  fi
fi

#-------------------------------------------------------------------------------
# NVIDIA CONTAINER TOOLKIT
#-------------------------------------------------------------------------------
if [[ "${DO_INSTALL_NVIDIA_CONTAINER_TOOLKIT}" -eq 1 ]]; then
  if command -v docker >/dev/null 2>&1; then
    echo "Docker tespit edildi: NVIDIA Container Toolkit yükleniyor..."
    sudo -E apt-get update
    sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" curl gnupg2

    sudo install -d -m 0755 /usr/share/keyrings
    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
          | sudo gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

    curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
      | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
      | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list >/dev/null

    sudo -E apt-get update
    sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" nvidia-container-toolkit

    if [[ "${DO_CONFIGURE_DOCKER_RUNTIME}" -eq 1 ]]; then
      command -v nvidia-ctk >/dev/null 2>&1 && sudo nvidia-ctk runtime configure --runtime=docker || true
    fi

    if [[ "${DO_RESTART_DOCKER}" -eq 1 ]]; then
      sudo systemctl restart docker || true
    fi
  else
    echo "Docker bulunamadı. Konteyner toolkit atlanıyor."
  fi
fi

#-------------------------------------------------------------------------------
# FİNAL
#-------------------------------------------------------------------------------
echo ""
echo "========================================"
echo "Kurulum tamamlandı"
echo "========================================"

if [[ "${REBOOT_REQUIRED}" -eq 1 ]]; then
  echo ">> YENİDEN BAŞLATMA GEREKLİ: sudo reboot"
fi

echo "Yeniden başlatma sonrası şunlarla doğrulayın:"
echo "  nvidia-smi"
echo "  nvcc -V"

Dikkat

Betik çalıştırıldıktan sonra, sudo reboot komutu kullanılarak sunucunun yeniden başlatılması zorunludur. Bu, yeni çekirdek modüllerinin etkinleştirilmesi için gereklidir.

Yeniden başlattıktan sonra, nvidia-smi ve nvcc -V komutlarını kullanarak sürücülerin ve CUDA'nın kurulumunu doğrulayın. Aşağıdakine benzer bir çıktı görmelisiniz:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.71.05              Driver Version: 595.71.05      CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4090        On  |   00000000:07:00.0 Off |                  Off |
| 31%   27C    P8              7W /  450W |      33MiB /  24564MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

ve

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2026 NVIDIA Corporation
Built on Thu_Mar_19_11:12:51_PM_PDT_2026
Cuda compilation tools, release 13.2, V13.2.78
Build cuda_13.2.r13.2/compiler.37668154_0