스테이블 디퓨젼(Stable diffusion)을 사용하기 위해 그래픽 카드를 구매했습니다. IT 업계 종사자 답게 리눅스 기반으로 구축하려고 합니다. 리눅스 그래픽 카드를 설치해야 한다는 것이 조금 낯설지만 검색하면 생각보다 쉽게 방법을 찾을 수 있었습니다.
왜 리눅스에 설치하려고 하는가?
스테이블 디퓨전은 Webui 라는 툴을 사용할 수 있습니다. 즉, 웹 브라우저를 이용하여 이 프로그램을 사용할 수 있다는 것인데, 웹 브라우저를 사용한다는 것은 언제 어디서나 데스크탑, 태블릿, 모바일을 통해서도 쉽게 접속하여 사용할 수 있다는 장점이 있습니다. 윈도우에서도 서버처럼 만들어 스테이블 디퓨전을 사용할 수 있지만, 리눅스 서버를 구축할 수 있는데 굳이 윈도우르 돈 주고 사서 할 필요가 없습니다. 리눅스는 공짜니까요.
리눅스란 무엇인가?
리눅스는 오픈소스 운영 체제(OS)입니다. 오픈 소스라 하면 무료로 사용할 수 있다는 것입니다. 운영 체제(Operating System, OS)는 CPU, 메모리, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어입니다. 즉, OS는 애플리케이션과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결합니다. 우리가 알고 있는 대표적인 OS는 마이크로 소프트의 윈도우(MS Windows)입니다.
어떤 리눅스를 사용할 것인가? (우분투[Ubuntu]? 레드햇[Redhat]?)
개인적으로는 우분투(Ubuntu)보다 레드햇(Redhat) 리눅스가 더 친숙합니다. 10년 전부터 엔지니어 생활을 시작하고 현재 대기업 금융권 인프라 관리를 직군으로 현재까지 우분투를 사용하는 게 손에 꼽습니다. 하지만 집에서는 서브스크립션(Subscription)을 구매할 수도 없을뿐더러 기술지원도 필요 없습니다. 그래서 엔터프라이즈 환경의 레드햇 리눅스 보다는 개인적으로 사용하거나 소규모 비지니스에는 우분투가 적합한 거 같아 이것을 설치하기로 마음먹었습니다.
서브스크립션 서비스(영어: Subscription Service)는 소비자가 상품이나 서비스를 받기 위해서 정기구독을 하는 서비스다. 원래는 잡지나 신문의 구독에서 시작됐지만, 현재는 다양한 분야에서 활발히 이루어지고 있다.
위키백과 – 서브스크립션 커머스
참고로… 우분투(Ubuntu)??
최근에 무자본 창업을 하면서 당근마켓에서 2000년대 PC를 몇개 사서 NAS를 구축하며 시작했습니다. 그 NAS가 OMS(Open Media Vault) 이며 그 기반은 우분투를 사용합니다. 그래서 인지 그 후 개발 서버도 다 우분투로 구축하고 인프라를 조금씩 구축하고 있습니다.
OMV NAS가 무엇인지, 또는 설치 방법에 대해서는 곧 포스팅으로 만들어 보겠습니다.
현재는 OMS NAS 두 개를 사용하고(개인용 1개, 서버용 1개), 어플리케이션 개발 우분투 1개, 스테이블 디퓨전 전용 우분투 1개를 사용하고 있습니다. 우분투 설치는 간단하나 모를 수 있는 사람들을 위해서 아래의 링크에 포스팅을 참고하기 바랍니다.
Ubuntu 리눅스가 무엇인지, 또는 설치 방법에 대해서는 곧 포스팅으로 만들어 보겠습니다.
이 포스팅은 우분투 22.0.4 LTS 버전 기반으로 지포스 RTX 3060 12G 그래픽 카드를 설치하는 방법을 설명합니다. 간단할 수 있지만 몇 가지 오류를 발생하여 그 내용까지 해결한 것 포함하여 설명하도록 하겠습니다.
리눅스 그래픽 카드 드라이버 확인
굳이 확인하지 않아도 되는 과정입니다. 하지만 한번 확인해보도록 합니다. 메인보드에 장착되어 있는 그래픽카드의 모델명이 잘 인식이 되는지 또는 잘못 구매되었는지 확인하기 좋습니다. 아래의 정보 등을 기준으로 드라이버를 설치를 하게 됩니다.
gyeominater@p-sdsvr-01:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:02.0/0000:03:00.0 ==
modalias : pci:v000010DEd00002503sv000019DAsd00004630bc03sc00i00
vendor : NVIDIA Corporation
model : GA106 [GeForce RTX 3060]
driver : nvidia-driver-525-open - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-525 - distro non-free
driver : nvidia-driver-535 - distro non-free
driver : nvidia-driver-535-server-open - distro non-free recommended
driver : nvidia-driver-525-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
gyeominater@p-sdsvr-01:~$
- Vendor : NVDIA Corporation – 엔비디아 업체에서 만들었다는 뜻입니다.
- model : GA106 [GeForce RTX 3060] – RTX 3060 모델이 잘 인식이 됐네요.
위와 같이 장착된 드라이버 카드의 모델명과 어떤 드라이브를 설치해야 할지 출력해줍니다.
리눅스 그래픽 카드 – 엔비디아 지포스 RTX 3060 설치하기
리눅스에서 실제 지포스 RTX 3060 그래픽 카드 드라이버 설치는 아래와 같이 간단한 명령어로 실행되고 설치가 완료됩니다. 개발자들이나 시스템 엔지니어들에게는 정말 꿀이죠.
gyeominater@p-sdsvr-01:~$ sudo ubuntu-drivers autoinstall
[sudo] password for gyeominater: # 패스워드를 입력하여 엔터를 치세요.
Traceback (most recent call last):
File "/usr/bin/ubuntu-drivers", line 513, in
greet()
File "/usr/lib/python3/dist-packages/click/core.py", line 1128, in call
return self.main(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/core.py", line 1053, in main
rv = self.invoke(ctx)
File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3/dist-packages/click/core.py", line 1395, in invoke
return ctx.invoke(self.callback, *ctx.params) File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke return __callback(args, **kwargs)
File "/usr/lib/python3/dist-packages/click/decorators.py", line 84, in new_func
return ctx.invoke(f, obj, *args, *kwargs) File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke return __callback(args, **kwargs)
File "/usr/bin/ubuntu-drivers", line 432, in autoinstall
command_install(config)
File "/usr/bin/ubuntu-drivers", line 187, in command_install
UbuntuDrivers.detect.nvidia_desktop_pre_installation_hook(to_install)
File "/usr/lib/python3/dist-packages/UbuntuDrivers/detect.py", line 839, in nvidia_desktop_pre_installation_hook
with_nvidia_kms = version >= 470
UnboundLocalError: local variable 'version' referenced before assignment
gyeominater@p-sdsvr-01:~$
UnboundLocalError: 에러가 발생하였습니다. UnboundLocalError 라는 대분류 에러 메시지와 version에 문제가 있는 것처럼 보여 구글링을 찾아보았습니다. 아래의 명령어로 에러를 해결했다는 여러 포스팅을 발견했습니다. ububtu-drivers-common 버전으로만 업그레이드를 하라는 명령어 같습니다. 그냥 한번 도전해봅니다. *** 만약 위와 같은 에러가 나지 않는다면 아래의 명령어는 꼭 무시하고 지나가세요.
gyeominater@p-sdsvr-01:~$ sudo apt install --only-upgrade ubuntu-drivers-common
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
Suggested packages:
python3-aptdaemon.pkcompat
The following packages will be upgraded:
ubuntu-drivers-common
1 upgraded, 0 newly installed, 0 to remove and 89 not upgraded.
Need to get 58.3 kB of archives.
After this operation, 3,072 B of additional disk space will be used.
Get:1 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 ubuntu-drivers-common amd64 1:0.9.6.2~0.22.04.4 [58.3 kB]
Fetched 58.3 kB in 1s (43.4 kB/s)
Preconfiguring packages …
(Reading database … 78295 files and directories currently installed.)
Preparing to unpack …/ubuntu-drivers-common_1%3a0.9.6.2~0.22.04.4_amd64.deb …
Unpacking ubuntu-drivers-common (1:0.9.6.2~0.22.04.4) over (1:0.9.6.1) …
Setting up ubuntu-drivers-common (1:0.9.6.2~0.22.04.4) …
Scanning processes…
Scanning processor microcode…
Scanning linux images…
Running kernel seems to be up-to-date.
The processor microcode seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
위의 명령어로 뭘 어떻게 설치했는지, 수정을 했는지 모르겠지만 정상적으로 결과값을 출력했습니다. 그러니 다시 그래픽 카드 드라이버 설치를 진행해봅니다.
gyeominater@p-sdsvr-01:~$ sudo ubuntu-drivers autoinstall
ERROR:root:aplay command not found
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
The following additional packages will be installed:
adwaita-icon-theme at-spi2-core bzip2 dconf-gsettings-backend dconf-service fontconfig gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3
libavahi-common-data libavahi-common3 libcairo-gobject2 libcairo2 libcolord2 libcups2 libdatrie1 libdconf1 libdpkg-perl libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libegl-mesa0 libegl1 libepoxy0 libfile-fcntllock-perl libfontenc1 libgbm1
libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgraphite2-3 libgtk-3-0 libgtk-3-bin libgtk-3-common libharfbuzz0b libice6 liblcms2-2 libllvm15
libnvidia-cfg1-535 libnvidia-common-535 libnvidia-compute-535 libnvidia-decode-535 libnvidia-encode-535 libnvidia-extra-535 libnvidia-fbc1-535 libnvidia-gl-535 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpciaccess0 libpixman-1-0 librsvg2-2
librsvg2-common libsensors-config libsensors5 libsm6 libthai-data libthai0 libvdpau1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0
libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcomposite1 libxcursor1 libxcvt0 libxdamage1 libxfixes3 libxfont2 libxi6 libxinerama1 libxkbcommon0 libxkbfile1 libxmu6 libxnvctrl0 libxrandr2 libxrender1 libxshmfence1 libxt6 libxtst6 libxxf86vm1
linux-modules-nvidia-535-5.15.0-83-generic linux-objects-nvidia-535-5.15.0-83-generic linux-signatures-nvidia-5.15.0-83-generic mesa-vdpau-drivers nvidia-compute-utils-535 nvidia-firmware-535-535.86.05 nvidia-kernel-common-535 nvidia-kernel-source-535
nvidia-prime nvidia-settings nvidia-utils-535 pkg-config screen-resolution-extra session-migration ubuntu-mono vdpau-driver-all x11-common x11-xkb-utils xcvt xfonts-base xfonts-encodings xfonts-utils xserver-common xserver-xorg-core xserver-xorg-video-nvidia-535
Suggested packages:
bzip2-doc colord cups-common debian-keyring bzr gvfs liblcms2-utils librsvg2-bin lm-sensors dpkg-dev libvdpau-va-gl1 xfs | xserver xfonts-100dpi | xfonts-75dpi xfonts-scalable
Recommended packages:
libnvidia-compute-535:i386 libnvidia-decode-535:i386 libnvidia-encode-535:i386 libnvidia-fbc1-535:i386 libnvidia-gl-535:i386
The following NEW packages will be installed:
adwaita-icon-theme at-spi2-core bzip2 dconf-gsettings-backend dconf-service fontconfig gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3
libavahi-common-data libavahi-common3 libcairo-gobject2 libcairo2 libcolord2 libcups2 libdatrie1 libdconf1 libdpkg-perl libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libegl-mesa0 libegl1 libepoxy0 libfile-fcntllock-perl libfontenc1 libgbm1
libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgraphite2-3 libgtk-3-0 libgtk-3-bin libgtk-3-common libharfbuzz0b libice6 liblcms2-2 libllvm15
libnvidia-cfg1-535 libnvidia-common-535 libnvidia-compute-535 libnvidia-decode-535 libnvidia-encode-535 libnvidia-extra-535 libnvidia-fbc1-535 libnvidia-gl-535 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpciaccess0 libpixman-1-0 librsvg2-2
librsvg2-common libsensors-config libsensors5 libsm6 libthai-data libthai0 libvdpau1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0
libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcomposite1 libxcursor1 libxcvt0 libxdamage1 libxfixes3 libxfont2 libxi6 libxinerama1 libxkbcommon0 libxkbfile1 libxmu6 libxnvctrl0 libxrandr2 libxrender1 libxshmfence1 libxt6 libxtst6 libxxf86vm1
linux-modules-nvidia-535-5.15.0-83-generic linux-modules-nvidia-535-generic linux-objects-nvidia-535-5.15.0-83-generic linux-signatures-nvidia-5.15.0-83-generic mesa-vdpau-drivers nvidia-compute-utils-535 nvidia-driver-535 nvidia-firmware-535-535.86.05
nvidia-kernel-common-535 nvidia-kernel-source-535 nvidia-prime nvidia-settings nvidia-utils-535 pkg-config screen-resolution-extra session-migration ubuntu-mono vdpau-driver-all x11-common x11-xkb-utils xcvt xfonts-base xfonts-encodings xfonts-utils
xserver-common xserver-xorg-core xserver-xorg-video-nvidia-535
0 upgraded, 133 newly installed, 0 to remove and 89 not upgraded.
Need to get 450 MB of archives.
After this operation, 1,210 MB of additional disk space will be used.
Get:1 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 hicolor-icon-theme all 0.17-2 [9,976 B]
Get:2 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf2.0-common all 2.42.8+dfsg-1ubuntu0.2 [5,530 B]
Get:3 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf-2.0-0 amd64 2.42.8+dfsg-1ubuntu0.2 [148 kB]
Get:4 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 gtk-update-icon-cache amd64 3.24.33-1ubuntu2 [31.4 kB]
Get:5 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 humanity-icon-theme all 0.6.16 [1,282 kB]
Get:6 http://kr.archive.ubuntu.com/ubuntu jammy/main amd64 ubuntu-mono all 20.10-0ubuntu2 [153 kB]
.
.
.
Setting up libgtk-3-bin (3.24.33-1ubuntu2) …
Setting up at-spi2-core (2.44.0-3) …
Setting up nvidia-settings (510.47.03-0ubuntu1) …
Processing triggers for linux-image-5.15.0-83-generic (5.15.0-83.92) …
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-5.15.0-83-generic
I: The initramfs will attempt to resume from /dev/nvme0n1p2
I: (UUID=f56c51ab-fe95-4dd4-a973-d125a9d4e3aa)
I: Set the RESUME variable to override this.
/etc/kernel/postinst.d/zz-update-grub:
Sourcing file /etc/default/grub' Sourcing file
/etc/default/grub.d/init-select.cfg'
Generating grub configuration file …
Found linux image: /boot/vmlinuz-5.15.0-83-generic
Found initrd image: /boot/initrd.img-5.15.0-83-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.8+dfsg-1ubuntu0.2) …
Processing triggers for libc-bin (2.35-0ubuntu3.1) …
Scanning processes…
Scanning processor microcode…
Scanning linux images…
Running kernel seems to be up-to-date.
The processor microcode seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
gyeominater@p-sdsvr-01:~$ sudo reboot
정상적으로 설치가 된 것으로 보이네요. 그래픽카드 설치 후에는 리부팅을 진행한다. (제 생각에는 안해도 될 거 같긴 하지만, 다른 곳에서 재부팅을 꼭 해야 된다고 하니 그냥 합니다. 재부팅한다고 손해보는 건 없을 테니 말이죠.
재부팅이 정상적으로 진행되고, 정상 설치가 됐는지 아래의 명령어로 확인합니다.
gyeominater@p-sdsvr-01:~$ nvidia-smi
Sat Sep 9 05:19:25 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.05 Driver Version: 535.86.05 CUDA Version: 12.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 3060 Off | 00000000:03:00.0 Off | N/A |
| 0% 48C P8 14W / 170W | 2MiB / 12288MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
gyeominater@p-sdsvr-01:~$
nvidia-smi 명령어로 위와 같이 드라이버 버전을 확인할 수 있습니다. 만약 이 블로그 포스팅을 보고 위와 같이 설치가 되지 않는 다면 꼭 댓글로 남겨주세요. 확인하고 최대한 빨리 방법을 함께 찾아보도록 하시죠. 저는 집단 지성의 힘을 믿습니다.
이렇게 스테이블 디퓨전 설치 준비가 다 끝났으니, 스테이블 디퓨젼을 설치해보는 일이 남았군요. 기대가 됩니다.
다음포스팅도 꼭 기대해주세요.