Установка драйверов для видеокарт от Nvidia с одной стороны сейчас не вызывает столько проблем, как было еще 10-15 лет назад, с другой стороны если с драйверами еще как-то народ управляется, то вот работоспособную CUDA получить могут не все. У себя в HOSTKEY мы создали специальный скрипт, который пользователь может запустить самостоятельно и получить рабочее окружение для запуска всего — от PyTorch до Stable Diffusion и Ollama с поддержкой GPU.

Что делает этот скрипт?

  1. Он обновляет систему, определяя тип видеокарты по ее DeviceID и устанавливая ядро Linux 6-й версии, которое нужно для A100/H100 серии на Ubuntu 22.04;

  2. Устанавливает рекомендованные Ubuntu драйвера на вашу видеокарту;

  3. Подключает репозитории Nvidia и устанавливает CUDA;

  4. Прописывает необходимые переменные окружения для ее работы, попутно восстанавливая пути к /bin и /usr/bin, которые вы гарантированно поломаете, если будете следовать официальной инструкции;

  5. Если у вас установлен Docker, то добавляет поддержку GPU в контейнеры.

Скрипт должен корректно отрабатывать на любых видеокартах старше 10xx версии и до последних моделей. Мы проверяли его у себя на GTX 1080, A4000, A5000, RTX 4090 и H100.

Сам скрипт
#!/bin/bash

# Update and upgrade the system using apt
sudo apt update
sudo apt upgrade -y

#Check Ubuntu 22.04 and update kernel
lsb_release=$(lsb_release -a | grep "22.04")
if [[ -n "$lsb_release" ]]; then

    # Check if there's a video card with Nvidia (10de) H100 model (23xx)
    lspci_output=$(lspci -nnk | awk '/\[10de:23[0-9a-f]{2}\]/ {print $0}')
    if [[ -n "$lspci_output" ]]; then
        echo "A100 detected"
        # If yes install the necessary kernel package
        sudo apt install -y linux-generic-hwe-22.04
    fi

    # Check if there's a video card with Nvidia (10de) A100 model (20xx)
    lspci_output=$(lspci -nnk | awk '/\[10de:20[0-9a-f]{2}\]/ {print $0}')
    if [[ -n "$lspci_output" ]]; then
        echo "A100 detected"
        # If yes install the necessary kernel package
        sudo apt install -y linux-generic-hwe-22.04
    fi
fi

# Install Ubuntu drivers common package
sudo apt install ubuntu-drivers-common -y

recommended_driver=$(ubuntu-drivers devices | grep 'nvidia' | cut -d ',' -f 1 | grep 'recommended')
package_name=$(echo $recommended_driver | awk '{print $3}')
sudo apt install $package_name -y

# Install GCC compiler for CUDA install
sudo apt install gcc -y

# Get the release version of Ubuntu
RELEASE_VERSION=$(lsb_release -rs | sed 's/\([0-9]\+\)\.\([0-9]\+\)/\1\2/')

# Download and install CUDA package for Ubuntu
wget 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

# Update and upgrade the system again to ensure all packages are installed correctly
sudo apt update
sudo apt install cuda -y
sudo apt install nvidia-cuda-toolkit -y

# Add PATH and LD_LIBRARY_PATH environment variables for CUDA in .bashrc file
echo 'export PATH="/usr/bin:/bin:$PATH/usr/local/cuda/bin\${PATH:+:\${PATH}}"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

#Installing Docker binding for Nvidia

if command -v docker &> /dev/null; then
  echo "Docker is installed."
  sudo apt install -y nvidia-docker2
  sudo systemctl restart docker
else
  echo "Docker is not installed."
fi

#Reboot the system for enable kernel modules
reboot

Сохраните его у себя в домашней директории как nvidia_install.sh, не забудьте задать через chmod +x nvidia_install.sh права на запуск и запустите через sudo nvidia_install.sh. Через 5-10 минут (в зависимости от скорости вашего интернета) вы получите работающую систему, на которой можно дальше экспериментировать с теми же нейросетями.


Закажите виртуальный или выделенный сервер с предустановленным корпоративным мессенджером Rocket.Chat! Вы можете выбрать сервер в дата-центре в России или в дата-центрах в Европе, США или Турции. Оплата в рублях по счету от российской компании.

Комментарии (7)


  1. antirek
    09.08.2024 17:02

    залил на гитхаб https://github.com/antirek/nvidia-cuda.sh


  1. vassabi
    09.08.2024 17:02

    echo 'export PATH="/usr/bin:/bin:$PATH/usr/local/cuda/bin\${PATH:+:\${PATH}}"' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}' >> ~/.bashrc

    тогда уж делали чтобы оба на /usr/local/cuda/ указывали
    /usr/local/cuda/bin в путях

    и
    /usr/local/cuda/lib64 в либах


    1. akdengi Автор
      09.08.2024 17:02

      Это из инструкций NVIDIA, тут только если харкод 12.2 версии поправить в либах.


  1. SlavikF
    09.08.2024 17:02

    Мой скрипт на Ubuntu 22 для nVidia Quadro P5000:

    ##### NVIDIA Drivers
    # https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
    sudo apt-get install linux-headers-$(uname -r)
    sudo apt-key del 7fa2af80
    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt-get update
    sudo apt-get install cuda-toolkit cuda-drivers-550 nvtop
    sudo reboot
    

    И Docker c toolkit:

    nvidia-smi
    
    ##### NVIDIA toolkit for Docker
    # https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
    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
    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
    
    ###### Docker
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
    


  1. da-nie
    09.08.2024 17:02

    то вот работоспособную CUDA получить могут не все.

    Что под этим подразумевается? :) Просто я обновил Mint до 21.3, поставил CUDA 11 и... всё, что было откомпилировано в предыдущей системе с CUDA версией младше работает. Всё, что компилирую с новой не работает. Запускается, но GPU плевать на программу, оно её явно не выполняет. Вот и думаю, с чего бы такая печаль?


  1. S-trace
    09.08.2024 17:02
    +1

    Если уж так серьёзно подошли к вопросу - почему тогда сделали всё скриптом на bash а не yml для ansible?


  1. McStar
    09.08.2024 17:02

    Я добавляю этот репозиторий https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa и всё работает.