# 세줄 요약 #
1. Server Setting: 고정 IP 설정, ssh 포트 변경 및 포트 포워딩 설정, ssh 연결 자동화
2. GPU 설정: Nvidia Driver 설치 (* CUDA & Anaconda는 "Docker" 사용할 것이므로 제외!)
3. 추가 설정: Docker 설치(+Nvidia container toolkit 설치), NFS 설치 및 세팅
# 상세 리뷰 #
* GPU 서버 환경: Linux(Ubuntu) base, Nvidia GPU
* 로컬 컴퓨터 환경: Linux or MAC
3. 추가 설정
3-1. 도커(Docker) 설치
- 기본적인 도커 설치는 공식 홈페이지 참고
https://docs.docker.com/engine/install/ubuntu/
- 레포지토리 셋업
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 도커 엔진 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 도커 작동 확인 (도커의 hello world!)
- 문제가 없을 시에는 hello world 도커가 실행되고, 도커 설치 정보가 출력된다.
sudo docker run hello-world
- 유저들에게 도커 권한 부여
sudo usermod -aG docker [username] # 해당 유저에게 도커 권한 부여
sudo service docker restart # 도커 재실행
- 도커 재실행 후에도 해당 유저로 재로그인을 해야만 도커 권한이 부여된다! (재로그인 필수!)
3-2. Nvidia-container-toolkit 설치
- 도커에서 Nvidia GPU를 사용하기 위해서는 필수 설치해야할 항목이다.
- 설치는 공식 홈페이지 참고
- 여러가지 Installation 방법을 설명하는데, 스크롤을 내려서 docker 항목으로 바로 가면 된다.
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
- 설치 전 셋업
curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
- Toolkit 설치
sudo apt-get update # 리눅스 업데이트
sudo apt-get install -y nvidia-container-toolkit # 툴킷 설치
sudo nvidia-ctk runtime configure --runtime=docker # 설치 확인
sudo systemctl restart docker # 도커 재실행 필수!
- 도커가 GPU를 잘 인식하는지 확인!
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
######################
# CUDA Container 확인 #
######################
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
3-3. NFS 세팅
- 개념은 클라우드 컴퓨팅이랑 똑같다.
- 멀티 서버 혹은 SSD, HDD 전용 서버를 운영하는 경우 NFS를 이용하면 마치 icloud, onedrive 등을 로컬컴퓨터에 동기화 하듯이, 특정 서버의 하드디스크를 다른 서버로 공유 및 동기화할 수 있다!
- NFS 프로그램 설치
sudo apt-get -y install nfs-kernel-server portmap
# 공유하려는 서버와 공유받으려는 서버 양쪽에 모두 설치해야한다.
- 공유하고 싶은 하드디스크 혹은 폴더 등록
- 파일 경로: /etc/exports
# 공유하려는 서버에서 진행!
sudo vi /etc/exports
###################
# exports 파일 편집 #
###################
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
[Data PATH] [Server IP]/[Port] (rw,sync,no_root_squash)
# [Data PATH] : 공유하고 싶은 폴더 경로 (예. /data1)
# [Server IP] : 마운트 시키려는 서버 IP (예. 111.222.333.123)
# [Port] : 마운트 시키려는 서버 IP의 접속 포트 (예. 1234)
# () 안에는 공유 옵션 : rw - 읽기 및 쓰기 권한, sync - 동기화, no_root_squash - 관리자 권한 부여
- Export 스크립트 수정 후에는 NFS-Server 재실행 필수!
sudo systemctl restart nfs-server.service
- 공유된 폴더를 해당 서버에서 마운트
sudo mount -t nfs [공유 서버 IP]:[공유 서버 폴더] [마운트 위치]
# [공유 서버 IP] : 공유하려는 서버의 IP 주소 (예. 111.222.333.123)
# [공유 서버 폴더] : 공유하려는 서버의 폴더 경로 (예. /data1)
# [마운트 위치] : 내가 마운트 받으려는 폴더의 위치 (예. /nfs_data)
- (bonus) 서버 내부의 설치된 하드디스크를 마운트할 때
- 먼저 설치된 하드디스크 조회 [>>> fdisk -l]
- 조회 후 원하는 경로로 마운트
fdisk -l # 설치된 디스크 조회
sudo mount /dev/sdb1 /data1
# /dev/sdb1 : fdisk -l에서 검색된 디스크 경로
# /data1 : 마운트할 폴더 경로
sudo umount /data1 # 마운트 해제하고 싶을 떄
# Reference
https://server-talk.tistory.com/377
https://m.blog.naver.com/diceworld/220212713378
# 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기
2023.04.01 - [지식 리뷰/프로그래밍] - 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 1. Server setting
2023.04.02 - [지식 리뷰/프로그래밍] - 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 2. GPU Setting
'AI프로그래밍 리뷰 > 프로그래밍' 카테고리의 다른 글
딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 2. GPU Setting (0) | 2023.04.02 |
---|---|
딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 1. Server setting (0) | 2023.04.01 |
리눅스 터미널에서 텐서플로가 GPU를 잡고 있는지 확인하는 방법 (0) | 2021.08.19 |
리눅스 터미널 백그라운드에서 프로세스 돌리기 (tmux or nohup) (0) | 2020.04.29 |
리눅스 터미널에서 딥러닝 학습 강제 중단했을때 GPU에 남은 메모리 정리하는 방법 (4) | 2020.04.02 |
댓글