Ubuntu Linux Üzerine 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:
Bilgi
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 açın (yerel konsol veya SSH üzerinden), 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 ile 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" (pass through) için sürücüleri kurmadan ÖNCE bunları kurun.
Not
Bash dışında bir komut satırı kabuğu (örneğin zsh veya başka biri) kullanıyorsanız, exec bash komutunu çalıştırarak betiği çalıştırmak üzere bash'e geçin.
Dikkat
Kurulum sırasında, yeni çekirdek modüllerinin kurulumunu 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ükleyicisi
# - Legacy GPU'lar: nvidia-driver-535 sürümüne sabitlendi
# - Blackwell GPU'lar: açık çekirdek modülleri (nvidia-open)
# - Modern GPU'lar: cuda-drivers meta-paketi aracılığıyla en son tescilli sürücü
#===============================================================================
set -euo pipefail
#-------------------------------------------------------------------------------
# YAPILANDIRMA BAYRAKLARI
#-------------------------------------------------------------------------------
DO_OS_POLICY_CHECK=1 # Politikayı uygula: yalnızca Ubuntu 22.04/24.04/26.04 LTS
ALLOWED_UBUNTU_VERSIONS=("22.04" "24.04" "26.04")
DO_APT_UPGRADE=1 # apt update/upgrade
DO_INSTALL_HWE=1 # 22.04 üzerinde linux-generic-hwe-22.04 yükle
DO_INSTALL_KERNEL_HEADERS=1 # Mevcut çekirdek için linux-headers yükle
DO_INSTALL_BUILD_TOOLS=1 # GCC/G++ yükle
DO_PURGE_OLD_PACKAGES=1 # Eski NVIDIA/CUDA paketlerini temizlemeye çalış
DO_SETUP_CUDA_REPO=1 # cuda-keyring aracılığıyla CUDA apt deposunu kur
DO_INSTALL_CUDA_STACK=1 # CUDA toolkit (geliştirme ortamı) yükle
# Legacy GPU'lar: nvidia-driver-535 sürümüne sabitle (Pascal/Volta destekleyen son dal)
# Format: "10de:PCI_ID|İnsan Tarafından Okunabilir İsim|Sürücü Paketi"
LEGACY_GPUS=(
"10de:1b06|GeForce GTX 1080 Ti|nvidia-driver-535"
"10de:1db1|Tesla V100|nvidia-driver-580"
"10de:1b80|GeForce GTX 1070|nvidia-driver-535"
"10de:1c03|GeForce GTX 1060|nvidia-driver-535"
)
# Blackwell GPU'lar: açık çekirdek modülleri + sürücü 575+ gerektirir
# Format: "10de:PCI_ID|İnsan Tarafından Okunabilir İsim"
BLACKWELL_GPUS=(
"10de:2b85|GeForce RTX 5090"
"10de:2b84|GeForce RTX 5080"
"10de:2b83|GeForce RTX 5070 Ti"
"10de:2b82|GeForce RTX 5070"
"10de:2bb4|RTX PRO 6000 Blackwell Workstation"
"10de:2bb1|RTX PRO 6000 Blackwell Max-Q"
"10de:2c38|RTX PRO 5000 Blackwell"
"10de:2c37|RTX PRO 4000 Blackwell"
"10de:2c36|RTX PRO 3000 Blackwell"
"10de:2c35|RTX PRO 2000 Blackwell"
)
DO_BLACKLIST_NOUVEAU=1 # Blacklist oluştur + update-initramfs (yeniden başlatma gerekir)
DO_TRY_RMMOD_NOUVEAU=1 # Nouveau modülünü kaldırmaya çalış (kullanımdaysa başarısız olabilir)
DO_USER_GROUPS=0 # Kullanıcıyı video,render gruplarına ekle (isteğe bağlı)
DO_BASHRC_CUDA_PATHS=1 # ~/.bashrc aracılığıyla CUDA PATH/LD_LIBRARY_PATH ekle (idempotent)
DO_VERIFY_NVIDIA_SMI=1 # nvidia-smi çalıştır
DO_VERIFY_NVCC=1 # nvcc -V çalıştır (yalnızca nvcc mevcutsa)
DO_INSTALL_NVIDIA_CONTAINER_TOOLKIT=1 # Docker varsa NVIDIA Container Toolkit yükle
DO_CONFIGURE_DOCKER_RUNTIME=1 # nvidia-ctk runtime configure --runtime=docker çalıştır
DO_RESTART_DOCKER=1 # docker servisini yeniden başlat
# ---- 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; }
# Politika kontrolü
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 edilmedi (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 başarısız olabilir."; 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 "Derleme 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 BLACKLIST (Kara Liste)
#-------------------------------------------------------------------------------
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 ekleniyor (yeniden başlatma gerekir)..."
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Ü + CUDA KURULUMU
#-------------------------------------------------------------------------------
IS_BLACKWELL=0
IS_LEGACY=0
# 1) Önce Blackwell kontrolü (açık modüller gerektirir)
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 + sürücü 575+ 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ı kontrol et (535 sürümüne sabitle)
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 sürümüne sabitleniyor"
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) CUDA toolkit + sürücüleri yükle
if [[ "${DO_INSTALL_CUDA_STACK}" -eq 1 ]]; then
if [[ "$IS_BLACKWELL" -eq 1 ]]; then
echo "CUDA toolkit yükleniyor (Blackwell yolu)..."
sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" cuda-toolkit
elif [[ "$IS_LEGACY" -eq 1 ]]; then
# 🔒 LEGACY DÜZELTME: V100/Pascal/Volta en fazla CUDA <= 12.2 destekler
# Otomatik CUDA 13.x yükseltmesini önlemek için versiyonlanmış paket kullanılıyor
echo "CUDA toolkit 12.2 yükleniyor (legacy yolu)..."
sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" cuda-toolkit-12-2
else
# Modern GPU'lar: en son tescilli sürücü için cuda-drivers meta-paketi kullanılır
echo "CUDA toolkit + en son tescilli sürücü cuda-drivers aracılığıyla yükleniyor..."
sudo -E apt-get install -y -o Dpkg::Options::="--force-confdef" cuda-toolkit cuda-drivers
fi
fi
#-------------------------------------------------------------------------------
# KURULUM 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 oturum açma/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 |
+-----------------------------------------------------------------------------------------+
veya