๊ธฐ์กด์ ์ฐ๋ ์๋ฒ์ Ubuntu๊ฐ 23.10์ผ๋ก ์ค์ ๋์ด ์์ด์ 24.04 LTS๋ก ๋ฒ์ ์ ํ๋ ๊น์ ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ๋ ์๋ก ์ค์นํ๊ณ , CUDA์ cudnn๋ ์น ์๋ก ์ค์นํด์ ๊ฐ๋ฐํ๊ฒฝ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
๊ณผ์ ์ ๋ค์ ์ง๋ํ์ผ๋ ๊ฒฐ๋ก ์ ๊ฐ๋จํ๋ฏ๋ก ๋น ๋ฅด๊ฒ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
1. Ubuntu 24.04 LTS ์ค์น
Ubuntu 23.10์ ์ง์์ด 24๋ 7์ ๊ฒฝ๋ถํฐ ์ค๋จ๋์์ผ๋ฏ๋ก LTS ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋๊ฐ ํ์ํ๋ค. ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
๋จผ์ ์์คํ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๋ค.
$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade
๋ค์์ผ๋ก๋ ์ ๋ฐ์ดํธ ๋งค๋์ ๋ฅผ ์ค์นํ๋ค. ์ด๋ฅผ ํตํด์ ์ฐ๋ถํฌ ๋ฒ์ ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ๋ค. ์ฐธ๊ณ ๋ก ๋ค์ด๊ทธ๋ ์ด๋๋ ์ง์ํ์ง ์์ผ๋ ์ ๊ทธ๋ ์ด๋ ์ ์ ์ถฉ๋ถํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์.
$ sudo apt install update-manager-core
์คํ ํ์ /etc/update-manager/release-upgrades
๋ฅผ ์ด์ด Prompt=lts
๊ฐ ์๋์ง ํ์ธํด์ผํ๋ค. ์๋ฑํ ๋ฒ์ ์ด ์ค์น๋์ง ์๋๋ก ์ฃผ์ํด์ผํ๋ค.
# Default behavior for the release upgrader.
[DEFAULT]
# Default prompting and upgrade behavior, valid options:
#
# never - Never check for, or allow upgrading to, a new release.
# normal - Check to see if a new release is available. If more than one new
# release is found, the release upgrader will attempt to upgrade to
# the supported release that immediately succeeds the
# currently-running release.
# lts - Check to see if a new LTS release is available. The upgrader
# will attempt to upgrade to the first LTS release available after
# the currently-running one. Note that if this option is used and
# the currently-running release is not itself an LTS release the
# upgrader will assume prompt was meant to be normal.
Prompt=lts
์ด์ ์ ๊ทธ๋ ์ด๋๋ฅผ ์คํํ๋ค.
$ sudo do-release-upgrade
๋ง์ผ ์์คํ ์ด ๊ฑฐ์ ๋น์ด์๊ฑฐ๋ ๊นจ๋ํ ์ํ๋ก ์์ํ๋ค๋ฉด ๋์ฒด๋ก y๋ฅผ ๋๋ฅด๋ฉด์ ์ฌ๋ฌ ์ ํ์ง๋ค์ ๋๊ธฐ๋ฉด ๋๋ค. ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์ค๊ฐ์ ๋จ๋ ํ์ธ ํน์ ์ ํ ๋ฌธ๊ตฌ๋ฅผ ๊ผผ๊ผผํ ์ฝ์ด๋ณผ ๊ฒ์ ๊ถ์ฅํ๋ค. ๊ธฐ์กด ์ค์ ์ ์ ์งํ๊ฑฐ๋ ์๋ก ์ฐ๋ ๋ฑ์ ์ ํ์ด ํ์ํ๋ค.
๋ง์ง๋ง์ผ๋ก ์์คํ ์ ํ ๋ฒ ์ฌ๋ถํ ํ ๋ค์ ๋ฆด๋ฆฌ์ฆ๋ฅผ ํ์ธํด๋ณด๋ฉด,
$ sudo reboot
...
$ lsb_release -a
lsb release๋ฅผ ์ ๋ณด์ ubuntu 24.04๊ฐ ๋จ๋ฉด ์ ๋ฐ์ดํธ๋ ์๋ฃ๋๋ค. ์ ๋ฒ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
2. Nvidia Graphic Driver ์ค์น
๋จผ์ ๊ธฐ์กด์ ์ค์น๋ ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ๊ฐ ์๋์ง ํ์ธํ๋ค.
$ nvidia-smi
์ ๋ช ๋ น์ด๋ฅผ ์ณค์๋ nvidia ์์ด์! ํ๊ณ ๋งํ๋ฉด ๋ฐ๋ก ์งํํ๋ฉด ๋๋ค. ์๋๋ผ๋ฉด ์ค์น ์ญ์ ํด์ฃผ๊ณ ๋ค์ ์ค์นํ ๊ฒ์ด๋ค.
$ sudo apt remove nvidia*
$ sudo apt autoremove
$ sudo apt clean
์ ๋ช ๋ น์ด๋ค์ ํ๋์ฉ ์น๋ฉด ์ค์น ์ญ์ ๋๋ค. ๋ค๋ง... ์ด์ ์ ์ด๋ฏธ nvidia ๋๋ผ์ด๋ฒ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ค๋ฉด ์ง์ฐ๊ธฐ ์ ์ ์ ์คํ์.
$ ubuntu-drivers devices
์์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ์ค์น๊ฐ๋ฅํ ๊ธฐ๊ธฐ์ ๋ฐ๋ผ ๋๋ผ์ด๋ฒ ๋ชฉ๋ก์ด ๋์จ๋ค. ์ง๊ธ ์๋ฒ์ ๊ทธ๋ํฝ์นด๋๊ฐ RTX 3090์ด๋ผ ๊ทธ์ ๋ง๋ ๋๋ผ์ด๋ฒ ๋ชฉ๋ก์ด ์๋์ ๊ฐ์ด ๋ฌ๋ค.
์ด ์ค์ nvidia-driver-550 ์ด recommended๋ผ๊ณ ๋์ด์๋ค. ์ด๊ฑธ apt๋ฅผ ์ด์ฉํด์ ์ค์นํ๋ค.
$ sudo apt install nvidia-driver-550
๊ทธ๋ฆฌ๊ณ ์์คํ ์ ์ฌ๋ถํ ํด์ฃผ๋ฉด ๋๋ค. ๋ค์ nvidia-smi๋ฅผ ์ ๋ ฅํด๋ณด๋ฉด,
$ nvidia-smi
์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ด ๋ณด์ธ๋ค. ์๋จ์ driver ๋ฒ์ ์ด, ์ฐ์ธก ์๋จ์๋ ๊ถ์ฅ CUDA ๋ฒ์ ์ด ๋์์๋ค.
3. CUDA ๋ฐ cudnn ์ค์น
Ubuntu 24.04 LTS ๋ฒ์ ์ ์ง์ํ๋ CUDA ๋ฒ์ ์ ๊ณต์์ ์ผ๋ก 12.6 ์ด์์ด๋ค. ๊ทธ๋ฌ๋ Tensorflow gpu ์ง์์ ๋ณด์.
https://www.tensorflow.org/install/source?hl=ko
๊ฐ์ฅ ์ต์ ๋ฒ์ ๋ CUDA 12.3์ ์ง์ํ๋ค. (์๋์ฐ์ ๊ฒฝ์ฐ 11.8 ์ดํ๋ก ์ง์์ด ์ค๋จ๋์๋ค) ๋๋ฌธ์ ์ํํ ํ ์ํ๋ก์ฐ ๊ฒฝํ์ ์ํด์ CUDA 12.3์ ์ค์นํด์ผํ๋ค.
๊ทธ๋ฐ๋ฐ nvidia cuda ์์นด์ด๋ธ์์ ๋ค์ด๋ก๋ ํ๋ ค๊ณ ๋ณด๋ฉด, https://developer.nvidia.com/cuda-12-3-0-download-archive
๋น์ฐํ 24.04 ๋ฒ์ ์ ์๋ค! ์ด๊ฒ ๋๋ฌธ์ ๋ฐ๋์ ์ ๋ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ฉํ๋ค... ๊ทธ๋ฐ๋ฐ ๋ค์ด๋ณด๋ 22.04 ๋ฒ์ ๋ ์๋ง ์ค์นํ๋ฉด ํธํ์ด ๋๋ค๋ ์๊ธฐ๋ฅผ ์ฃผ์๋ค์๋ค. ๋ฐ๋ผ์ 22.04 ๋ฒ์ ์ผ๋ก ์ค์น๋ฅผ ํด์ ํ ์คํธ๊น์ง ํด๋ดค๊ณ , ์ ๋๋ค.
$ wget https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_545.23.06_linux.run
$ sudo sh cuda_12.3.0_545.23.06_linux.run
run file๋ก ๋ค์ด๋ก๋๋ฅผ ๋ฐ๊ณ ์คํํ๋ค. ์ด๊ฒ ํ๋ฉด์ด ๋ฐ๋๋๋ก ๋์ด ์๋๋ฐ... ์ข ์ค๋ ๊ฑธ๋ฆฌ๋๊น ์ธ๋ด์ฌ์ ๊ฐ๊ณ ๊ธฐ๋ค๋ฆฌ์. ๋ง ๋๋ฅด๋ฉด ์ข ๋ฃ๋๋ค.
๋จผ์ ์ฌ๊ธฐ์ accept๋ฅผ ์น๊ณ ์ํฐ๋ฅผ ๋๋ฅธ๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ ํ๋ฉด์ด ๋์ค๋๋ฐ, ์ฐ๋ฆฌ๋ ๋๋ผ์ด๋ฒ๋ฅผ ์ด๋ฏธ ์๋ ์ค์นํ์ผ๋ฏ๋ก ์ Driver์์ ์ํฐ๋ฅผ ์ณ์ ์ ํ ํด์ ๋ฅผ ํด์ฃผ๊ณ install์ ํ๋ฉด ๋๋ค.
CUDA๋ /usr/local/cuda-12.3 ๊ฒฝ๋ก์ ์ค์น๋์ด ์๋ค. ls ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
$ ls -l /usr/local
์ค์น๊ฐ ์๋ฃ๋๋ฉด path ์ค์ ์ ํด์ฃผ์ด์ผํ๋ค. .bashrc ํ์ผ ๋ง์ง๋ง์ path๋ฅผ ์ถ๊ฐํด์ค ๊ฒ์ด๋ค.
$ sudo nano ~/.bashrc
...
export PATH=/usr/local/cuda-12.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
์ ๋ ์ค์ ๊ฐ์ฅ ํ๋จ์ ์ถ๊ฐํด์ฃผ๊ณ , Ctrl+O, Ctrl+X ๋ฅผ ๋๋ฌ ๋น ์ ธ๋์จ๋ค. ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ์ ์๋์ ๊ฐ๋ค.
$ sourch ~/.barhrc
๋ค์์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ค๋ค.
$ sudo nano /etc/ld.so.conf
์ ํ์ผ์ ์ด์ด cuda์ lib ํด๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
include /etc/ld.so.conf.d/*conf
/usr/local/cuda-12.3/lib64
๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํด์ฃผ๊ณ , PATH๊ฐ ์ ๋ฐ์๋์๋์ง ํ์ธํด๋ณด์.
$ sudo ldconfig
$ echo $PATH
> /usr/local/cuda-12.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ echo $LD_LIBRARY_PATH
> /usr/local/cuda-12.3/lib64
์์ ๊ฐ์ด ๋์ค๋ฉด CUDA ์ค์น๋ ์๋ฃ๋๋ค. ํ์ธ์ ํด๋ณด์!
$ nvcc -V
์ด๋ ๊ฒ cuda ๋ฒ์ ์ด ์ ๋์ค๋ฉด ์ ์์ ์ผ๋ก ์ค์น๊ฐ ์๋ฃ๋ ๊ฒ์ด๋ค.
4. cudnn ์ค์น
๋ค์ ์ด ํ๋ฅผ ๋ณด๋ฉด, CUDA 12.3์ ๋ํด์๋ cuDNN 8.9๊ฐ ํ์ํ๋ค๊ณ ๋์ด์๋ค.
https://developer.nvidia.com/rdp/cudnn-archive
๊ฐ์ฅ ์ต์ ๋ฒ์ ์ธ 8.9.7๋ก ๋ค์ด๋ก๋ ๋ฐ์๋ค. Local Installer for Linux x86_64 (Tar) ๋ก ๋ค์ด๋ก๋ ํ๋ฉด ๋๋ค. nvidia ๋ก๊ทธ์ธ์ด ํ์ํด์, ubuntu server๋ฅผ ์ฐ๊ณ ์๋ ๋๋ ์๋์ฐ์์ ํ์ผ์ ๋ฐ๊ณ ssh๋ก ์ ์ํ ์๋ฒ์ scp ๋ช ๋ น์ด๋ก ์ ์กํด์ ์ฌ์ฉํ๋ค.
# local์์ ์คํ, ssh ํตํด์ ํ์ผ ์ ์ก
scp ~/downloads/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz username@ip_address:~/nvidia/cuda-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
์ด ๊ฒฝ์ฐ ์ ์กํ ์๋ฒ์ ip ์ฃผ์, ๊ณ์ ์ด๋ฆ์ ์์์ผํ๋ค. ๊ฐ์คํ๊ณ ... ๋ค์ด๋ก๋ํ ์์ถํ์ผ์ ์์ถ ํด์ ํ๋ค.
$ tar -xvf cuda-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
์ด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋์ ํ๋ฅ ๋ก ๋ค์ด๋ก๋๊ฐ ๋ ๋์ด์ ๊ทธ๋ ๋ค. ํ์ผ์ ํฌ๊ธฐ๊ฐ 800MB๋ฅผ ๋๋์ง ํ์ธํด๋ณด๊ณ , ์๋๋ผ๋ฉด ๋ค์ ๋ค์ด๋ก๋ํ๋ค.
์ด์ cuda์ cudnn ํ์ผ๋ค์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
$ cd cuda-linux-x86_64-8.9.7.29_cuda12-archive
$ sudo cp ./include/cudnn*.h /usr/local/cuda-12.3/include
$ sudo cp ./lib/libcudnn* /usr/local/cuda-12.3/lib64
$ sudo chmod a+r /usr/local/cuda-12.3/include/cudnn*.h /usr/local/cuda-12.3/lib64/libcudnn*
์ฌ๊ธฐ๊น์ง ํ๊ณ , cudnn์ด ์ ์๋ํ๋์ง ํ์ธํด๋ณด์.
#include <cudnn.h>
#include <stdio.h>
int main() {
cudnnHandle_t handle;
cudnnStatus_t status = cudnnCreate(&handle);
if (status == CUDNN_STATUS_SUCCESS) {
printf("cuDNN successfully initialized.\n");
} else {
printf("cuDNN initialization failed.\n");
}
cudnnDestroy(handle);
return 0;
}
์ c ํ์ผ์ ๋ง๋ค๊ณ ์ปดํ์ผํ ๋ค์ ์คํํด๋ณธ๋ค.
$ gcc -o cudnn_test cudnn_test.c -I/usr/local/cuda-12.3/include -L/usr/local/cuda-12.3/lib64 -lcudnn
$ ./cudnn_test
> cuDNN successfully initialized.
์์ ๊ฐ์ด ์ถ๋ ฅ๋๋ฉด ์ ๋๋ ๊ฒ์ด๋ค!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5. Tensorflow ์ค์น
๋์ฅ์ ์ ๋ง์ง๋ง. ์ด๊ฑด ์ฝ๋ค. ํ์ด์ฌ ์ ์ฑ ?๋ณ?๊ฒฝ์ผ๋ก ์ธํด์ ์ ์ญ ํ๊ฒฝ ํจํค์ง ์ค์น๊ฐ ๋์จํ๊ฒ ๋งํ์๋ ์ํ๋ผ, ๊ฐ์ํ๊ฒฝ์ ์ด์ฉํด์ค ๊ฒ์ด๋ค. ํ์ฌ ๋์ ํ์ด์ฌ ๋ฒ์ ์ 3.12์ด๋ค.
๋ง์ผ ํ์ด์ฌ ๊ฐ์ํ๊ฒฝ ํจํค์ง๊ฐ ๊น๋ ค์์ง ์๋ค๋ฉด ์ค์นํ๋ฉด ๋๋ค.
$ sudo apt install python3.12-venv
๊ทธ๋ฆฌ๊ณ ํด๋ ํ๋๋ฅผ ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ๊ฐ์ํ๊ฒฝ์ ์ค์ ํ๋ค.
$ mkdir tensorflow
$ cd tensorflow
$ python3 -m venv .tf
์๋ ๊ฒ ํ๋ฉด tensorflow ํด๋ ํ์์ .tf๋ผ๋ ๊ฐ์ํ๊ฒฝ์ด ์๊ธด๋ค. ํ์ฑํ์ ๋นํ์ฑํ๋ ์ด๋ ๊ฒ ํ ์ ์๋ค.
# ํ์ฑํ
$ . ./tf/bin/activate
# ๋นํ์ฑํ
$ deactivate
๊ฐ์ํ๊ฒฝ์ ํ์ฑํํ ๋ค์ tensorflow๋ฅผ ์ค์นํ๋ค.
$ python3 -m pip install tensorflow[and-cuda]
์ค์น๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด tensorflow๊ฐ gpu๋ฅผ ์ ์ธ์ํ๋์ง ํ์ธํ๋ค.
$ python3
>> import tensorflow as tf
>> print(tf.config.list_physical_devices("GPU"))
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
์ด๋ฐ ์ถ๋ ฅ์ด ๋์ค๋ฉด Ubuntu 24.04 LTS์์ tensorflow gpu ์ค์น๊ฐ ๋๋ฌ๋ค!!!!!!!!!
์ฐธ๊ณ ๋ฌธํ
https://infotechys.com/upgrade-ubuntu-23-10-to-24-04/
'๐ etc.' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Obsidian] ํ๋ฌ๊ทธ์ธ_์ถ์ฒ_๋ฐ_10๊ฐ์_์ฌ์ฉํ๊ธฐ.md (3) | 2024.08.05 |
---|---|
[Protocol] XKNX๋ฅผ ํ์ฉํ KNXnet/IP ๋ฐ์ดํฐ ํต์ ํ๊ธฐ (1) | 2023.12.15 |
[Protocol] KNX Overview (1) | 2023.12.15 |
[Obsidian] ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ ์ถ์ฒ ๋ฐ Git์ ํ์ฉํ ์ฐ๋๋ฒ (0) | 2023.10.20 |
[Obsidian] Notion vs Obsidian, ๋ด๊ฐ Obsidian์ผ๋ก ์ด์ฌํ ์ด์ (3) | 2023.10.19 |