From 0a3ac9c0e8a24ca5d76f6f0fa45a331e37eab4d1 Mon Sep 17 00:00:00 2001 From: NW Date: Sun, 20 Apr 2025 11:08:33 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20install=5Fnvidia.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install_nvidia.sh | 115 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 install_nvidia.sh diff --git a/install_nvidia.sh b/install_nvidia.sh new file mode 100644 index 0000000..b2b1189 --- /dev/null +++ b/install_nvidia.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +# === Универсальный установщик драйверов NVIDIA для Ubuntu 24.04+ === +# Автоматически определяет GPU, устанавливает драйверы и настраивает Docker + +# --- Проверка прав --- +if [ "$(id -u)" -ne 0 ]; then + echo "🚫 Запустите скрипт с sudo!" >&2 + exit 1 +fi + +# --- Определение GPU --- +detect_gpu() { + echo "🔍 Поиск NVIDIA GPU..." + if ! lspci | grep -i "nvidia" >/dev/null; then + echo "❌ NVIDIA GPU не обнаружена!" + echo "Проверьте:" + echo "1. Физическое подключение карты" + echo "2. Поддержку PCIe в BIOS" + exit 1 + fi + + GPU_MODEL=$(lspci | grep -i "nvidia" | head -n 1 | cut -d ':' -f 4 | sed 's/^[ \t]*//;s/[ \t]*$//') + GPU_ID=$(lspci -n | grep -i "10de" | cut -d ' ' -f 3 | cut -d ':' -f 2) + + case "$GPU_ID" in + "2230"|"2231") DRIVER="470" ;; # Tesla T4 + "1db6") DRIVER="525" ;; # Tesla A10 + "20b5") DRIVER="535" ;; # RTX A6000 + *) DRIVER="550" ;; # По умолчанию (новые карты) + esac + + echo "✅ Обнаружена видеокарта: $GPU_MODEL (ID: 10de:$GPU_ID)" + echo "🛠️ Рекомендуемый драйвер: $DRIVER" +} + +# --- Установка драйверов --- +install_drivers() { + echo "🧹 Очистка старых драйверов..." + apt-get purge -y *nvidia* *cuda* *cudnn* 2>/dev/null + apt-get autoremove -y + rm -rf /usr/local/cuda* + + echo "📦 Установка зависимостей..." + apt-get update + apt-get install -y --no-install-recommends \ + ubuntu-drivers-common \ + linux-headers-$(uname -r) \ + build-essential + + echo "⚙️ Установка драйвера версии $DRIVER..." + apt-get install -y nvidia-driver-$DRIVER nvidia-dkms-$DRIVER +} + +# --- Проверка драйвера --- +verify_driver() { + if ! nvidia-smi &>/dev/null; then + echo "❌ Ошибка: nvidia-smi не работает!" + echo "Возможные решения:" + echo "1. Отключите Secure Boot в BIOS" + echo "2. Выполните: sudo apt-get install --reinstall nvidia-dkms-$DRIVER" + exit 1 + fi +} + +# --- Настройка Docker --- +setup_docker() { + echo "🐳 Настройка Docker для NVIDIA GPU..." + curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -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 + + apt-get update + apt-get install -y nvidia-container-toolkit + systemctl restart docker + + echo "🔌 Проверка Docker + GPU..." + if ! docker run --rm --gpus all nvidia/cuda:12.3.1-base nvidia-smi &>/dev/null; then + echo "⚠️ Docker не видит GPU! Попробуйте:" + echo "1. sudo systemctl restart docker" + echo "2. Добавьте пользователя в группу docker: sudo usermod -aG docker $USER" + fi +} + +# --- Главный процесс --- +clear +echo "🖥️ Универсальный установщик NVIDIA GPU для Ubuntu" +echo "▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔" + +detect_gpu +install_drivers +verify_driver +setup_docker + +# --- Итоговая информация --- +echo "" +echo "✅ Установка завершена!" +echo "▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔" +echo "Информация о системе:" +nvidia-smi +echo "" +echo "Для использования GPU в контейнерах:" +echo " docker run --gpus all ваш-образ" +echo "" +echo "Рекомендуемые базовые образы:" +echo " • nvidia/cuda:12.3.1-cudnn8-runtime (для PyTorch/TensorFlow)" +echo " • nvcr.io/nvidia/pytorch:23.10-py3 (официальный PyTorch)" +echo "▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔" + +# Перезагрузка (опционально) +read -p "Перезагрузить систему сейчас? [y/N]: " reboot_choice +if [[ $reboot_choice =~ ^[Yy]$ ]]; then + shutdown -r now +fi \ No newline at end of file