3 분 소요

1. Why

  • 제게는 노트북이 2개가 있는데, RTX 3050 TI가 달린 것과 1kg 이하 매우 가벼운 것을 가지고 있습니다. 집에서 집중이 안될 때마다 가벼운 노트북을 카페로 들고가 작업을 하곤 했습니다. 그러나 GPU가 더러 필요한 순간이 있을 때마다 무거운 노트북을 들고 가기도 했습니다. 이제 이를 해결하고자, RTX 3050 TI가 달린 노트북에 GPU를 사용할 수 있는 환경을 열어, SSH를 통해 카페에서 가벼운 노트북으로도 AI 개발을 할 수 있도록 하기 위함입니다.(원격은 왜 안하냐고 물으신다면, 간지가 안나기 때문입니다.)

2. NVIDIA CUDA 세팅(GPU 컴퓨터 🖥️⚡)

1) NVIDIA GPU DRIVER 설치

2) CUDA Toolkit

3) cuDNN(CUDA Deep Neural Network Library)

  • cuDNN이 필요한 이유 : TensorFlow, PyTorch, cuML 등에서 GPU 가속을 사용할 때 필요.
  • CUDA 버전에 맞는 cuDNN을 다운로드(https://developer.nvidia.com/cudnn): image.png

  • 압축푼 뒤, CUDA 경로에 붙여넣기
    • 기본 경로 : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v버전 image.png

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
        
  • 컨테이너 내부에서 GPU설정 확인, 하단 화면 출력 시 잘 세팅된 것
      nvidia-smi
    

    image.png

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이용 image.png

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 컴퓨터 🖥️⚡)

7. 원격 컴퓨터로 접속(NON-GPU 컴퓨터 🖥️)

  • CMD창을 통해 접속
      ssh user@나으 공유기 아이피 -p 2222
    
  • 접속 후 GPU 확인
      nvidia-smi
    
  • ✨✨결과 image.png

8. Visual Studio 실행하기

  • SSH Extension 설치

    image.png

  • SSH Extension 세팅

    image.png

  • SSH Config 세팅
    • HostName : GPU 컴퓨터 🖥️⚡IP
    • User : 유저명
    • Port : 포트번호

      image.png image.png

  • 실행 : Connect in New Window… 클릭

    image.png

댓글남기기