Ubuntu 에서 Nvidia 를 활용하기 위해서는 nvidia-drivercuda-toolkit 2개를 필요로 합니다. 시스템 업데이트를 진행하다 보면 2개의 내용을 확인 및 업데이트에 대하여 알아보겠습니다.

Checking Ubuntu System

MariaDB 에서 작업을 진행하다가 다음과 같은 오류가 발생 했습니다.

$ nvidia-smi    
zsh: command not found: nvidia-smi

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.3.r12.3/compiler.33567101_0

설치된 시스템의 드라이브 내용을 살펴보면 다음과 같았습니다.

$ sudo dpkg -l | grep nvidia                        
ii  libnvidia-cfg1-560:amd64        amd64   NVIDIA binary OpenGL/GLX configuration library
ii  libnvidia-common-560            all     Shared files used by the NVIDIA libraries
rc  libnvidia-compute-545:amd64     amd64   Transitional package for libnvidia-compute-550
rc  libnvidia-compute-550:amd64     amd64   Transitional package for libnvidia-compute-560
ii  libnvidia-compute-560:amd64     amd64   NVIDIA libcompute package
ii  libnvidia-compute-560:i386      i386    NVIDIA libcompute package
ii  libnvidia-decode-560:amd64      amd64   NVIDIA Video Decoding runtime libraries
iU  libnvidia-decode-560:i386       i386    NVIDIA Video Decoding runtime libraries
ii  libnvidia-egl-wayland1:amd64    amd64   Wayland EGL External Platform library -- shared library
ii  libnvidia-encode-560:amd64      amd64   NVENC Video Encoding runtime library
iU  libnvidia-encode-560:i386       i386    NVENC Video Encoding runtime library
ii  libnvidia-extra-560:amd64       amd64   Extra libraries for the NVIDIA driver
ii  libnvidia-fbc1-560:amd64        amd64   NVIDIA OpenGL-based Framebuffer Capture runtime library
iU  libnvidia-fbc1-560:i386         i386    NVIDIA OpenGL-based Framebuffer Capture runtime library
ii  libnvidia-gl-560:amd64          amd64   NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
rc  nvidia-compute-utils-545        amd64   NVIDIA compute utilities
ii  nvidia-compute-utils-560        amd64   NVIDIA compute utilities
rc  nvidia-dkms-545                 amd64   NVIDIA DKMS package
iF  nvidia-dkms-560                 amd64   NVIDIA DKMS package
iU  nvidia-driver-560               amd64   NVIDIA driver metapackage
ii  nvidia-firmware-560-560.35.03   amd64   Firmware files used by the kernel module
rc  nvidia-kernel-common-545:amd64  amd64   Transitional package for nvidia-kernel-common-550
rc  nvidia-kernel-common-550        amd64   Shared files used with the kernel module
ii  nvidia-kernel-common-560        amd64   Shared files used with the kernel module
ii  nvidia-kernel-source-560        amd64   NVIDIA kernel source package
ii  nvidia-settings                 amd64   Tool for configuring the NVIDIA graphics driver
ii  nvidia-utils-560                amd64   NVIDIA driver support binaries
ii  screen-resolution-extra         all     Extension for the nvidia-settings control panel
ii  xserver-xorg-video-nvidia-560   amd64   NVIDIA binary Xorg driver

Remove Drivers

Ubuntu Pop-OS 에서 지원하는 Nvidia 설치 방법도 있지만, 일반적인 우분투 설치과정을 확인 합니다. Ubuntu Linux Install Nvidia Driver (Latest Proprietary Driver)

$ sudo apt install nvidia-driver-560 nvidia-dkms-560

Unix Driver Version

Perplexity AI Comments

## Preparation
# Update and upgrade your system:
sudo apt update && sudo apt upgrade -y
# Remove any previous NVIDIA installations:
sudo apt autoremove "nvidia*" --purge
# Check for recommended drivers:
ubuntu-drivers devices

## Install NVIDIA Drivers
# Check for recommended drivers:
sudo ubuntu-drivers autoinstall
# Reboot your system:
sudo reboot
# Verify the installation:
nvidia-smi

## Install CUDA Toolkit
# Download the CUDA repository package:

Install Latest Driver


CUDA Installl

Download Installer for Linux Ubuntu 22.04 x86_64

# CUDA Toolkit Installer Installation Instructions:
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda-repo-ubuntu2204-12-6-local_12.6.3-560.35.05-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2204-12-6-local_12.6.3-560.35.05-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2204-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-6
# Driver Installer NVIDIA Driver Instructions (choose one option)
# To install the open kernel module flavor:
sudo apt-get install -y nvidia-open
# To install the legacy kernel module flavor:
sudo apt-get install -y cuda-drivers

오류의 내용

오류 메세지 내용은 다음과 같습니다.

  File "/django/mysite/_instance.py", line 35, in <lambda>
    filter(lambda x : model.objects.filter(code=x).count() == 0,
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/erdos/Source/.venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/erdos/Source/.venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/home/erdos/Source/.venv/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)

django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query')

해당 오류는 서버와 연결이 끊어진 것 으로 다음과 같은 원인에 의해 발생합니다.

  1. 누군가 세션을 kill하여 발생할 수 있습니다.
  2. 네트워크 문제로 인해 연결이 끊어져서 발생 할 수 있습니다.
  3. 서버 내 충돌이 일어나 끊길 수 있습니다.
  4. 연결이 유휴 상태 wait_timeout이며 종료될 수 있습니다.
  5. 클라이언트가 데이터를 충분히 빨리 가져 오지 못하고 종료되어 net_wait_timeout될 수 있습니다.

해결방법

문제가 발생한 쿼리함수를 보다 원할하게 작동할 수 있도록 구조와 함수를 변경하는 방법이 하나 있습니다.

  File "/home/erdos/Source/django/app_stock/tasks/_data/_instance.py", line 35, in <lambda>
    filter(lambda x : model.objects.filter(code=x).count() == 0,
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

MariaDB Setting

또는 SQLnet_read_timeoutnet_write_timeout 시간값을 기본값 보다 큰 값으로 재설정 하는 방법이 있습니다. MySQL - Error 2013/Error 2006 을 참고하여 DB Setting 값을 변경하는 방법은 다음과 같습니다.

MariaDB> show variables like 'net_read_timeout%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| net_read_timeout | 30    |
+------------------+-------+ 

MariaDB> show variables like 'net_write_timeout%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| net_write_timeout | 60    |
+-------------------+-------+

MariaDB> set global net_read_timeout = 10800;
MariaDB> set global net_write_timeout = 10800;

참고사이트