115 lines
4.7 KiB
Bash
115 lines
4.7 KiB
Bash
#!/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 |