본문 바로가기
AI프로그래밍 리뷰/프로그래밍

딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 3. 추가 설정(도커, NFS)

by 펄서까투리 2023. 4. 2.

# 세줄 요약 #

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/

 

Install Docker Engine on Ubuntu

 

docs.docker.com

 

 - 레포지토리 셋업

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

 

Installation Guide — NVIDIA Cloud Native Technologies documentation

On RHEL 7, install the nvidia-container-toolkit package (and dependencies) after updating the package listing: Restart the Docker daemon to complete the installation after setting the default runtime: Note Depending on how your RHEL 7 system is configured

docs.nvidia.com

 

 - 설치 전 셋업

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://cokes.tistory.com/122

 

도커 일반사용자에게 권한 부여하기

도커는 항상 Root로 실행되기 때문에 sudo를 사용하여 명령어를 입력해야 합니다. sudo usermod -aG docker [username] 해당 사용자를 docker 그룹에 추가함으로써 sudo 명령어를 사용하지 않고 도커 명령어를

cokes.tistory.com

https://server-talk.tistory.com/377

 

Ubuntu/Storage - NFS Server 설치 및 설정하기

Ubuntu/Storage - NFS Server 설치 및 설정하기 이번 포스팅에서는 Ubuntu에서 NFS 서버 설치 방법에 대해서 알아보겠습니다. 관련 글 [서버구축이야기] [Linux Server/Ubuntu] - Ubuntu 18.04 서버 설치하기 [서버구

server-talk.tistory.com

https://m.blog.naver.com/diceworld/220212713378

 

Linux mount / umount (마운트 / 마운트해제)

     - Linux mount / umount 란?      mount 는 하드웨어...

blog.naver.com

 

# 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 

2023.04.01 - [지식 리뷰/프로그래밍] - 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 1. Server setting

 

딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 1. Server setting

# 세줄 요약 # 1. Server Setting: 고정 IP 설정, ssh 포트 변경 및 포트 포워딩 설정, ssh 연결 자동화 2. GPU 설정: Nvidia Driver 설치 (* CUDA & Anaconda는 "Docker" 사용할 것이므로 제외!) 3. 추가 설정: Docker 설치(+N

pulsar-kkaturi.tistory.com

2023.04.02 - [지식 리뷰/프로그래밍] - 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 2. GPU Setting

 

딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 2. GPU Setting

# 세줄 요약 # 1. Server Setting: 고정 IP 설정, ssh 포트 변경 및 포트 포워딩 설정, ssh 연결 자동화 2. GPU 설정: Nvidia Driver 설치 (* CUDA & Anaconda는 "Docker" 사용할 것이므로 제외!) 3. 추가 설정: Docker 설치(+N

pulsar-kkaturi.tistory.com

 

728x90
728x90

댓글