BlaBla

나의 개발 일지 (1) 서버 세팅

Cori 2024. 8. 12. 13:57

인공지능 서버를 세팅하는 방법은 OS에 따라 살짝 다르다. Ubuntu와 Window에서 각각 세팅을 진행했었는데, 

먼저 현재 회사에서 사용중인 윈도우에 서버 설정하는 방법부터 소개하고, 이후 Ubuntu에서 세팅하는 방법을 다룬다. 


Window Server Setting

Step 1. Install Graphic Driver 

Window 환경에 맞는 Graphic Driver를 설치한다.

 

Step 2. Install Cuda 

Cuda homepage에서 Cuda를 설치할 수 있다. 

nvidia-smi를 통해 조회되는 CUDA Version을 설치해준다.

2.1 Base Installer

Base Installer 설치 및 실행. Cuda 위치는 다음과 같다. 

* 설치 후, 해당 디렉토리에 가서 숨긴 파일 조회를 해 봐도 CUDA가 보이지 않는다.. 검색 결과 다음 디렉토리에 있다.

이미지에 표시되어 있는 쿠다 버전은 무시해도 좋다.

Step 3. Install Cudnn

Cudnn은 nvidia homepage에서 받을 수 있고, 로그인이 필요하다.

3.1 Cudnn 설치

Cudnn은 앞서 설치한 Cuda 버전을 지원하는 버전으로 설치해야 한다. 

Cudnn Archive (왼쪽), 다운 후 압축 해제 (오른쪽)

3.2 Cudnn 파일 이동

압축 해제 한 후 얻은 bin, include, lib 폴더는 Cuda 폴더로 이동시켜준다. 

각 폴더에 대해 위 작업 수행 (Cudnn 폴더 -> Cuda 폴더)

Step 4. 환경 변수 편집 

4.1 시스템 환경 변수 편집

시스템 환경 변수 편집 -> 고급 -> 환경 변수로 이동 

사용자 변수 내 Path 선택 후 편집 클릭

사용자 변수 Path 편집 화면에서 새로 만들기 클릭 후, 다음 3가지를 추가해주자 

  $ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v{설치한 Cuda 버전}\bin 

  $ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v{설치한 Cuda 버전}\extras\CUPTI\lib64 

  $ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v{설치한 Cuda 버전}\include

4.2 Cuda, Cudnn 설치 확인 

명령 프롬프트를 실행시키고, nvcc -V 명령어를 입력하면 기존에 조회되지 않던 Cuda를 볼 수 있다.

Step 5. Anaconda Setting 

5.1 아나콘다 설치  

Anaconda homepage에서 Anaconda를 설치해준다. 최신 버전을 다운 받았다. 

설치 경로: C:\ProgramData\Anaconda3

5.2 아나콘다 경로 설정 

Cuda, Cudnn 설정할 때와 마찬가지로, 시스템 환경 변수 편집 창을 열고 Path 경로에 다음을 추가한다. 

  $ C:\ProgramData\Anaconda3 

  $ C:\ProgramData\Anaconda3\Lbrary

  $ C:\ProgramData\Anaconda3\Scripts 

해당 사항을 완료하고, 명령 프롬프트를 실행한 후 conda 입력 시 관련 명령어 정보가 조회된다. 

5.3 가상환경 생성 

우리는 가상환경에서 작업을 할 것이기에, 가상환경을 생성하고 필요 패키지를 설치해준다.

$ conda create --name {가상환경 이름} python=3.9 -y 

 

* OpenSSL이 없다고 뜨는 경우,. {CONDA_PATH}\library\bin 폴더 내의 다음 2가지 형태 파일을 {CONDA_PATH}\DLLs로 복사해주면 된다.

  1) libcrypto-1_1-x64.*

  2) libssl-1_1-x64.* 

Step 6. Docker Install

앞서 Anaconda 환경 설정을 해두었지만, 사실 실질적인 개발 작업은 도커 환경에서 수행하고 있다. LLM 사용을 위한 환경 설정은 다음 포스트에서 다룰 예정이며, 여기서는 도커 프로그램 설치 및 도커 환경 설정만 해주면 된다.

 

Step 7. 방화벽 설정

Jupyter notebook 외부 접속을 허용해주기 위해, Window -> 방화벽 -> 고급 설정 -> 인바운드 규칙 수정 

주피터 노트북은 기본 8888 포트를 사용하는데, 다중 작업을 위해 8888-8890 포트까지 방화벽에 추가해두었다. (선택)

이후 연결 허용 선택

윈도우 환경에서 AI 개발을 하기 위한 기본적인 설정은 끝났다. 남은 포스트에서는 우분투 서버 세팅 과정을 다루며, 우분투 환경이 아닌 경우 스킵하면 된다.


Ubuntu Server Setting 

Step 0. 기본 설정

sudo apt update 
sudo apt upgrade -y
sudo reboot

기본 패키지들을 설치해준다. 

sudo apt-get install vim
sudo apt-get install gcc 
sudo apt install net-tools 
sudo apt-get install build-essential
sudo apt-get install python3-pip
sudo apt install ufw

 

Step 1. SSH 접속 허용

1.1 Openssh-server 설치

sudo apt update
sudo apt install openssh-server -y
# 설치 확인
sudo systemctl status ssh

 

1.2 UFW(Ubuntu Fire Wall)를 이용한 SSH 포트 오픈  

sudo ufw allow ssh

 

Step 2. 서버 GPU 사양에 맞는 NVIDIA-Driver 설치  (회사 서버: GeForce RTX 4090) 

 

Step 3. Cuda 설치

3.1 CUDA Archieve 에서 CUDA 설치 (버전은 각 환경에 맞게 선택)

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

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

* existing package manager installation of the driver found 메시지가 뜨면서, 설치된 nvidia-driver를 제거하란다. 무시하고 continue 누름.. EULA에 대해서 accept 해주고 Cuda Installer 창에서, 체크되어 있는 Driver(525.60.13) 선택 해제하고 CUDA Toolkit만 설치한다.

 

3.2 경로 설정

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

sudo vi ~/.bashrc
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 ~/.bashrc

 

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

 

Step 4. Cudnn 설치

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

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

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

* Ubuntu 버전이 지원되지 않는 경우 

https://developer.nvidia.com/cudnn-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=24.04&target_type=deb_network

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

4.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*     # 모든 사용자가 변경할 수 있도록 수정

4.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.4 링크 파일 조회 & Cudnn 조회

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

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

cudnn 파일은 다음 명령어로 조회할 수 있다.

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 이후

Step 5. Anaconda 

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

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

bash Anaconda3-2022.10-Linux-x86_64.sh

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

conda config --set auto_activate_base False