소소한 컴퓨터 이야기

Ubuntu 딥러닝 서버 세팅 일지

by Cori

1. 학교로부터 전달 받은 노트북(Dell)에는 Windows가 기본으로 깔려 있었다.

- Outlook 계정을 새로 만들고, 기본 세팅 완료 후 Window 환경으로 접속 

* Outlook 계정: lamdaco@outlook.kr 

 

2. 부팅용 USB에 Ubuntu 22.02 버전 iso 파일을 설치, Rufus를 이용하여 설치용 디스크로 만들었다.

- dell ubuntu 설치 

 

3. USB를 끼워둔 상태로, Dell 노트북을 재부팅하고, 빠르게 F12 키를 연타하여 BIOS 창으로 진입한다. 

- BIOS 설정 창에서, 노트북 부팅 순서를 USB가 최우선이 되도록 순서 변경 (기존: Windows manager) 

 

4. 이후 다시 노트북을 실행시키고, Ubuntu를 설치해주었다. 

- 혹시 몰라 Window, Ubuntu 둘 다 접속 가능하도록 듀얼 부팅 모드로 설치 

 

5. 이런 저런 기본 세팅 후, Ubuntu 접속 성공적으로 완료 ! 

- nvidia-smi 명령어로 노트북에 설치된 GPU 드라이버를 조회해보려 했지만, 안깔려있음 .. 이후에 깔 예정이다.

- lspci | grep -i VGA 명령어를 통해 노트북에 설치된 GPU 드라이버를 조회할 수 있다. 

  - 설치된 GPU 이름이 조회가 안 될 수 있는데, sudo update-pciids 명령어 입력 후 다시 조회하면 나타난다.

 

6. SSH 접속 허용해주기 

1) Openssh-server를 설치해줘야 한다고 한다. 

$ sudo apt update 

$ sudo apt install openssh-server -y

* 설치가 완료되면 SSH 서비스가 자동으로 시작되는데, 정상적으로 동작하는지 확인하려면 다음 명령어를 입력한다.

$ sudo systemctl status ssh 

 

2) UFW(Ubuntu Fire Wall)을 통해, SSH 포트를 열어줘야 한다. 

$ sudo ufw allow ssh 

 

3) 내부 ip 주소를 얻는다. 

$ ip a    # 192.168.123.111로 조회된다. 

이제 외부에서 해당 Ubuntu Server로 접속할 수 있다. 

 

7. Ubuntu 용량을 늘려주었다

- 기존: Window 1TB, Ubuntu 1TB, 변경 후: Window 300GB, Ubuntu 1.7TB 

- Ubuntu 부팅 디스크 꼽은 후 부팅 다시 시작 -> Try Ubuntu -> Gparted 라이브러리 실행하여 해당 작업 수행함 

* 용량 업데이트 이후 기존 Ubuntu 서버 정상적으로 접속되는거 확인 완료, 1.6TB 여유 공간 확보

 

8. Ubuntu upgrade & Library 설치 

$ sudo apt upgrade - y 

$ sudo apt install tree -y

$ sudo apt-get install build-essential -y 

$ sudo apt-get install python3-pip 

$ sudo apt install net-tools 

 

9. NVIDIA-Driver를 설치한다. 현재 노트북에 설치된 GPU 사양은 RTX A5500 1장이다. 

1) 권장 Driver를 확인한다.

$ ubuntu-drivers devices    # Dell 노트북에 대해서는 nvidia-driver-525-open을 추천해준다

$ sudo apt install nvidia-driver-525    # open 버전은 가급적 설치 x

$ sudo reboot 

 

2) 재부팅 후 nvidia-driver 실행 시 nvidia-driver와 소통할 수 없다는 오류가 나오면서 제대로 설치가 되지 않았다.

- 다음 명령어로 기존에 설치한 nvidia-driver를 지운다. 

  $ sudo apt remove nvidia-driver-525

  $ sudo apt autoremove 

- 구글링해보니, 부팅 시 BIOS 모드로 진입해 Secure boot 체크를 해제해야 한다는 글이 있어 그대로 해주었다. 

 

3) Secure boot 체크 해제 후 다시 Ubuntu 접속, nvidia-drvier-525를 다시 설치 후 재부팅  

- 제대로 설치된 것을 확인할 수 있다.

 

10. Cuda 설치 

- nvidia-driver 설치 시 Cuda가 자동으로 설치된다고 한다. nvidia-driver 명령어 입력시 보이는 CUDA 버전은 12.0이다. 

- 하지만 whereis cuda 명령어 입력 시 cuda는 보이지 않는다.

1) CUDA Archieve 에서 CUDA 12.0 설치

- Cuda Toolkit 12.0, Linux, x86_64, Ubuntu, 22.04, runfile(local) 선택

$ wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run

- 설치까지 시간이 좀 걸린다.

$ sudo sh cuda_12.0.0_525.60.13_linux.run

- existing package manager installation of the driver found 메시지가 뜨면서, 설치된 nvidia-driver를 제거하란다.

- 나는 무시하고 continue 누름.. EULA에 대해서 accept 해주고

- Cuda Installer 창에서, 체크되어 있는 Driver(525.60.13) 선택 해제하고 CUDA Toolkit 12.0만 설치한다.

CUDA 설치 성공 !

2) Cuda 삭제

- Cuda 12.0과 호환되는 Cudnn이 없어 설치한 Cuda 12.0을 다시 삭제하기로 했다.

$ sudo apt-get --purge remove 'cuda*'

$ sudo apt-get autoremove --purge 'cuda*'

$ sudo rm -rf /usr/local/cuda*

- Cuda 12.0 삭제 후, Ubuntu 22.04를 지원하는 Cuda 11.7 설치하기로 결정  => 1) 다시 수행

$ wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run

$ sudo sh cuda_11.7.0_515.43.04_linux.run

 

3) 경로 설정

- cuda 경로를 잡아줘야 한다.

$ sudo vi /etc/profile

$ export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}

$ export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

$ export LD_LIBRARY_PATH=/usr/local/cuda-11.7/extras/CUPTI/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

$ source /etc/profile

 

- 이후 nvcc -V 명령어를 통해 설치한 Cuda 버전을 조회할 수 있다.

 

# $ export PATH=$PATH:/usr/local/cuda-11.7/bin

# $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64

# $ export CUDADIR=/usr/local/cuda-11.7

 

11. Cudnn 설치

- Cudnn 설치를 위해서는 NVIDIA 계정이 필요하다.

1) cuDNN Archive에서 앞서 설치한 Cuda 11.7과 호환되는 Cudnn 설치

- cuDNN v8.5.0 설치함 (tar 파일)

- cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz 파일 설치 완료, 다음 명령어로 압축을 해제한다

$ tar -xvf cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz

2) cudnn 파일 cuda 폴더로 복사

- 압축해제한 cudnn 폴더로 이동한 후, 다음 명령어 수행

$ sudo cp ./include/cudnn*.h /usr/local/cuda-11.7/include

$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.7/lib64

$ sudo chmod a+r /usr/local/cuda-11.7/include/cudnn.h /usr/local/cuda-11.7/lib64/libcudnn*     # 모든 사용자가 변경할 수 있도록 수정

3) libcudnn 파일 링크 연결

$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.5.0 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.5.0  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.5.0  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.5.0  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.5.0  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.5.0 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8.5.0  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8

$ ldconfig

4) 링크 파일 조회 & Cudnn 조회

- 다음 명령어를 입력했을 때, 링크 파일들이 출력되면 성공

$ ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn

- cudnn 파일은 다음 명령어로 조회할 수 있다. 나는 8.5.0을 설치했으므로 아래 명령어로 조회할 수 있다.

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2    # cudnn 8.x 이전

$ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2   # cudnn 8.x 이후

12. Anaconda

1) Anaconda 설치

- 가상환경으로 작업하기 위해, Anaconda를 설치해준다.

- ubuntu 설치 파일은 .sh 파일로, bash 명령어를 통해 설치할 수 있다.

$ bash Anaconda3-2022.10-Linux-x86_64.sh

- 터미널 실행할 때 마다 앞에 (base)가 붙은 conda prompt가 실행되는데, 다음 명령어로 방지할 수 있다. 

$ conda config --set auto_activate_base False

2) 가상환경 생성

- 랩실에서 사용할 가상환경을 생성한다. 가상환경 이름: lamda_base

$ conda create --name lamda_base python==3.8

3) 가상환경에 라이브러리 설치

- lamda_base 가상환경 이용해서 작업할 예정

$ conda activate lamda_base

- jupyter, pandas, pymysql, ... 등 코드 수행 시 필요한 라이브러리 설치

 

13. 사용자 생성

- 공용으로 사용할 서버이기 때문에, 계정을 각각 생성한다.

- 그룹 lamda를 생성해서, lamdaco (관리자), lamda_00 ~ lamda_99(사용자)를 해당 그룹에 추가한다.

- lamdaco에 Anaconda가 설치되어 있기 때문에, 다른 사용자에서 conda를 사용하려면 lamdaco 폴더에 접근 가능해야 한다.

- lamda group에서 각 사용자 폴더에 대해 읽기, 실행, 쓰기할 수 있도록 권한 설정해 줌 (rwx, 770)

$ sudo chown -R 770 lamdaco

 

14. MySQL

- 관리자 계정: lamda_admin 

- 사용자 계정: lamda_user 

- 데이터베이스: classification, multi-turn, single-turn, meta-db

 

1) Database 생성 

$ CREATE DATABASE classification default CHARACTER SET UTF8;

$ CREATE DATABASE multi_turn default CHARACTER SET UTF8;

$ CREATE DATABASE single_turn default CHARACTER SET UTF8;

$ CREATE DATABASE meta_db default CHARACTER SET UTF8;

 

2) 권한 부여 

- 관리자 계정에는 각 DB에 모든 권한 부여, 사용자 계정에는 각 DB에 SELECT 권한 부여 

$ GRANT ALL PRIVILEGES ON classification.* to 'lamda_admin'@'%';

$ GRANT SELECT ON classification.* to 'lamda_user'@'%';

$ FLUSH PRIVILEGES;

 

15. snap 폴더 지우기 

- 자꾸 snap 폴더가 디렉토리에 나타난다.

1) 패키지 삭제 

$ snap list   # snap으로 설치된 패키지 확인 

$ snap remove --purge snap-store 

$ snap remove --purge gtk-common-themes

$ snap remove 

- 삭제가 잘 안되더라도 2)으로 넘어가자. 이후에 다 삭제된다

2) 마운트 해제 

$ umount /snap/

$ umount /snap/{core-id}/{id}   # umount /snap/core20/1405 

3) snapd 삭제 

$ apt autoremove --purge snapd 

4) 남아 있는 snap 폴더 삭제 

$ rm -rf ~/snap/

$ rm -rf /snap
$ rm -rf /var/snap
$ rm -rf /var/lib/snapd

5) snapd를 설치 안되게 마크

- 크롬 브라우저 설치 시 snapd가 설치되는 것을 방지함 

$ apt-mark hold snapd


♣ 참고문헌 

(1) https://ckdals29672.tistory.com/4     #  개인용 서버 만들기 (2)

(2) https://heisanbug.tistory.com/18    # Ubuntu 용량 증가 

(3) https://dohyeon.tistory.com/14

(4) https://nirsa.tistory.com/332

(5) https://ieworld.tistory.com/12

(6) https://cori.tistory.com/211  

(7) https://dragontory.tistory.com/445 

블로그의 정보

코딩하는 오리

Cori

활동하기