Docker 활용기2) - 원격 GPU 개발 환경 구축
1. Why
- 제게는 노트북이 2개가 있는데, RTX 3050 TI가 달린 것과 1kg 이하 매우 가벼운 것을 가지고 있습니다. 집에서 집중이 안될 때마다 가벼운 노트북을 카페로 들고가 작업을 하곤 했습니다. 그러나 GPU가 더러 필요한 순간이 있을 때마다 무거운 노트북을 들고 가기도 했습니다. 이제 이를 해결하고자, RTX 3050 TI가 달린 노트북에 GPU를 사용할 수 있는 환경을 열어, SSH를 통해 카페에서 가벼운 노트북으로도 AI 개발을 할 수 있도록 하기 위함입니다.(원격은 왜 안하냐고 물으신다면, 간지가 안나기 때문입니다.)
2. NVIDIA CUDA 세팅(GPU 컴퓨터 🖥️⚡)
1) NVIDIA GPU DRIVER 설치
-
그래픽 카드에 맞는 드라이버 설치(정식 NVIDIA 드라이버 다운로드 | NVIDIA)
-
게이밍과 스튜디오 버전 중 어떤 것을 설치해도 상관은 없음.
2) CUDA Toolkit
- 설치 가능한 버전 확인 : CMD창에 해당 명령어 입력, CUDA Version확인 후 알맞게 설치
nvidia-smi
- CUDA Toolkit 설치(CUDA Toolkit 12.8 Update 1 Downloads, NVIDIA Developer)
3) cuDNN(CUDA Deep Neural Network Library)
- cuDNN이 필요한 이유 : TensorFlow, PyTorch, cuML 등에서 GPU 가속을 사용할 때 필요.
-
CUDA 버전에 맞는 cuDNN을 다운로드(https://developer.nvidia.com/cudnn):
- 압축푼 뒤, CUDA 경로에 붙여넣기
- 기본 경로 : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v버전
- 기본 경로 : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v버전
4) NVIDIA Container Toolkit
- 단, Windows Docker Desktop의 경우 최근 버전은 GPU 가속 지원을 포함시켜 반드시 설치할 필요 없음.
- 도커 이미지 내부가 아닌 GPU를 가진 호스트 컴퓨터에 설치할 것(윈도우는 WSL2에 설치)
# 1. 패키지 추가 sudo apt update sudo apt install -y nvidia-container-toolkit # 2. Docker 데몬 재시작 (WSL 안에서는 일반적으로 자동 연동됨) sudo service docker restart
3. 이미지 세팅(GPU 컴퓨터 🖥️⚡)
1) 우분투 + 미니콘다 환경 이미지 빌드
- GPU가 달린 컴퓨터에 Dockerfile을 통해 빌드
# 우분투 이미지 가져오기 FROM ubuntu:latest # 미니콘다 설치를 위해 wget 설치 RUN apt-get update && apt-get install -y wget bzip2 # 미니콘다 설치 RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh RUN bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda # 환경 변수 설정(conda 명령어 사용을 위해) ENV PATH=/opt/miniconda/bin:$PATH # conda 초기화 RUN /opt/miniconda/bin/conda init bash
docker build -t conda_env:private .
2) 컨테이너 세팅
- 컨테이너 올리기 : GPU 세팅
-it
: 컨테이너 실행되자마자bash
진입--gpu all
: gpu 자원 활용-p 2222:22
: 컨테이너 22 포트(ssh 할당 포드)를 호스트 2222포트에 포트 포워딩- 이 방법 외에도,
Docker Compose
로 호스트 포트를 동시에 점유하고,SSH Config
수정을 통해 22번 포트가 아닌, 다른 포트를 배정하는 방법도 있음.
- 이 방법 외에도,
--name cuda_container
: 컨테이너 이름 지정conda_env:private
: 이미지 명청- 주의 : nvidia/cuda:12.3.1-base-ubuntu20.04 등의 cuda에서 제공한 이미지를 쓰는게 안정적일지도..?
docker run -it --gpu all -p 2222:22 --name cuda_container conda_env:private
- 주의 : nvidia/cuda:12.3.1-base-ubuntu20.04 등의 cuda에서 제공한 이미지를 쓰는게 안정적일지도..?
- 컨테이너 내부에서 GPU설정 확인, 하단 화면 출력 시 잘 세팅된 것
nvidia-smi
4. 비대칭 암호키 발급(NON-GPU 컴퓨터 🖥️)
- 윈도우 컴퓨터면 WSL(Windows Subsystem Linux)에서 실행하면 됨.
-t rsa
: 암호키 타입을 RSA방식으로 지정-b 4096
: Key size를 4096bit로 지정ssh-keygen -t rsa -b 4096 -C "설명 또는 이메일"
- 발급받은 대칭키 확인
C:\Users\사용자\.ssh
경로에id_rsa
,id_rsa.pub
등이 생성- 이 중 공개키인
id_rsa.pub
이용
5. ssh 세팅(GPU 컴퓨터 🖥️⚡)
- ssh 다운로드
apt update && apt install -y openssh-server wget bzip2
- SSH 런타임 파일 저장용 폴더 생성
mkdir -p /var/run/sshd
- 원격에 사용할 계정 생성(sudo는 root계정의 권한 필요할 시, 사용)
# 새로운 사용자 추가 (예: user) adduser user # sudo 권한 부여 (옵션) apt install -y sudo && adduser user sudo
- 대칭키 관련 디렉토리 생성 후 파일 생성
cd /home/user/ # 생성된 사용자 관련 폴더 mkdir -p ~/.ssh # .ssh 디렉토리가 없으면 생성 touch ~/.ssh/authorized_keys # authorized_keys 파일 생성 chmod 700 ~/.ssh # .ssh 디렉토리 권한 설정 chmod 600 ~/.ssh/authorized_keys # authorized_keys 파일 권한 설정
- 대칭키 정보 붙여넣기
- 일전에 생성한
id_rsa.pub
을 txt로 오픈하여 텍스트 복사(NON-GPU 컴퓨터 🖥️)ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD... user@host
- 컨테이너 내부에 해당 내용
authorized_keys
에 추가echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD... user@host" >> ~/.ssh/authorized_keys
- 일전에 생성한
- 대칭키 관련 디렉토리 생성 후 파일 생성
- SSH 서버 시작
service ssh restart
6. 공유기 세팅(GPU 컴퓨터 🖥️⚡)
- 외부 네트워크에서 해당 포트를 진입하기 위한 세팅이 필요한 단계
- GPU 컴퓨터🖥️⚡가 배당 받는 내부 IP가 고정(MAC을 통해 고정)
- 고정된 내부 IP내의
2222
번 포트를 공유기의2222
번 포트로 포트 포워딩
- 브라우저를 통해
192.168.0.1
접속 -
DHCP 서버 설정을 통해 내부 IP 고정(출처 : IP 공유기에서 Mac Address 등록 후 고정IP로 설정(복사기 FTP 스캔 할 때 유용))
- 포트 포워딩 : 내부 IP(예시
192.168.0.1
) 및 포트(2222
) 기입 후 프로토콜TCP
로 하여 적용(출처 : [네트워크] 공유기 포트포워드 설정 : 네이버 블로그)
7. 원격 컴퓨터로 접속(NON-GPU 컴퓨터 🖥️)
- CMD창을 통해 접속
ssh user@나으 공유기 아이피 -p 2222
- 접속 후 GPU 확인
nvidia-smi
- ✨✨결과
8. Visual Studio 실행하기
-
SSH Extension 설치
-
SSH Extension 세팅
- SSH Config 세팅
HostName
: GPU 컴퓨터 🖥️⚡IP
User
:유저명
-
Port
:포트번호
-
실행 : Connect in New Window… 클릭
댓글남기기