딥러닝 개발 환경 구축: Docker PyTorch 이미지 적용, 컨테이너 백업 및 Jupyter Notebook 실행

2024. 8. 26. 17:56Artificial Intelligence/모두를 위한 딥러닝 (PyTorch)

딥러닝 개발 환경 구축 도전

 모두를 위한 딥러닝 시즌2 (PyTorch) 강의에서 Docker의 역할과 설치 방법을 배웠다. 딥러닝 개발 환경 구축을 위한 PyTorch 공식 이미지에 대한 언급은 있었지만, 구체적인 구축 방법에 대한 설명이 없었다. 사실 당황스러웠는데 어쩌면 강의해 주시는 분의 큰 그림 아닐까 싶다. 아무튼 구글링을 통해 딥러닝 환경 구축을 해보았다.

NVIDIA 그래픽 카드 드라이버 다운로드

엔비디아 사이트: https://www.nvidia.com/en-us/drivers

 

 NVIDIA 그래픽 카드 드라이버를 다운받아 설치해야 한다. 하지만 내 노트북에는 인텔 그래픽 카드만 내장되어 있고, 외장 NVIDIA 그래픽 카드도 없기 때문에 cuda를 쓸 수가 없다. 드라이버를 다운받는 의미가 없다는 뜻이다. 일정량 GPU 무료 이용을 제공하는 코랩이 새삼 고마워졌다. 

 

* dxdiag라고 검색하면 DirectX 진단 도구의 디스플레이 탭을 통해 내장 및 외장 GPU를 확인할 수 있다. 

도커 이미지 기반 컨테이너 생성 + NVIDIA GPU 접근 허용 (NVIDIA 그래픽 카드 있는 경우만 해당!)

 Docker hub(https://hub.docker.com/)에서 pytorch를 검색한다. Tag 탭에서 적절한 버전을 고르고 복사 버튼을 누른다. (왠지 완전 최신 버전을 쓰면 불안정한 버그가 있을까봐 3달 전에 나온 버전을 골랐고, 뒤에 runtime이 붙어있는 걸 사용했다.) 기존에 노트북에 다운받았던 anaconda prompt를 관리자 권한으로 열고, 아래 커맨드를 입력한다.

docker pull pytorch/pytorch:2.3.1-cuda11.8-cudnn8-runtime  // 도커에 파이토치 이미지 로드
docker images  // 다운받은 도커 이미지 확인

// A. NVIDIA GPU 접근 허용, 특정 이미지 기반으로 새 컨테이너 생성 및 실행
docker run --gpus all -it -p 8888:8888 --name gpu_server pytorch/pytorch:2.3.1-cuda11.8-cudnn8-runtime

// B. 특정 이미지 기반으로 새 컨테이너 생성 및 실행
docker run -it -p 8888:8888 --name torch_server pytorch/pytorch:2.3.1-cuda11.8-cudnn8-runtime

// cuda 사용 가능 여부 확인
python
import torch
torch.cuda.is_available()

Docker hub에서 pytorch 검색
도커에 파이토치 이미지 로드
다운받은 도커 이미지 확인
파이토치 이미지 기반 컨테이너 생성 및 실행

컨테이너 내부에 Jupyter Notebook 설치

i를 누르면 편집 모드로 전환되고, esc를 누르면 읽기 모드로 전환된다. :wq를 입력하면 저장하고 나가기, :q!를 입력하면 저장 안 하고 나가기가 된다.

// 이미 존재하는 컨테이너 내부로 진입 (torch_server에 서버명 작성)
docker exec -it torch_server /bin/bash

pip install jupyter
jupyter notebook --generate-config  // config 파일 생성
apt-get update
apt install vim  // vim 에디터 설치

vim /root/.jupyter/jupyter_notebook_config.py  // config 파일 편집 (예시)
// config 파일에 추가
c = get_config()
c.NotebookApp.ip = ''
c.NotebookApp.password = ''
c.NotebookApp.notebook_dir = './JupyterNotebooks'

컨테이너 내부에서 torch 버전 확인 및 라이브러리 설치

라이브러리를 설치할 때는 터미널은 종료한 상태, 컨테이너 안에 들어와 있는 상태가 맞는지 체크해야 한다.

// 이미 존재하는 컨테이너 내부로 진입 (torch_server에 서버명 작성)
docker exec -it torch_server /bin/bash

python
import torch
torch.__version__
quit()  // 파이썬 셸 종료
exit  // 컨테이너에서 나가기
pip install pandas
pip install matplotlib
pip install seaborn
pip install scikit-learn
pip install SimpleTK

도커 컨테이너 백업

도커 컨테이너 백업용 .tar 파일을 저장할 수 있다.

// Format: docker export -o ./<file_name>.tar <container_name>

// 저장 경로 지정 가능 (미리 디렉토리 생성한 후 실행)
docker export -o E:/JupyterBackup/torch_server_240826_backup.tar torch_server

도커 기본 커맨드

도커 컨테이너 관리에 쓰이는 커맨드들이다. 특정 토커 컨테이너에 진입하고 쥬피터 노트북을 실행하는 커맨드는 자주 사용하게 될 것이다.

docker ps -a  // 도커 컨테이너가 실행 중인지 확인
docker start <CONTAINER ID>  // 중지 상태 → 실행
docker exec -it <CONTAINER ID> bash  // 특정 도커 컨테이너 진입 (중요)

docker stop $(docker ps -aq)  // 실행 중인 모든 컨테이너 중지
docker rm $(docker ps -aq)  // 모든 컨테이너 제거
docker rmi $(docker images -q)  // 모든 도커 이미지 제거
docker rmi -f $(docker images -q)  // 도커 강제 제거

// 도커 컨테이너에 진입한 상태에서 jupyter notebook 실행 (중요)
jupyter notebook --allow-root

 

* 참고 자료

[Docker] 도커로 딥러닝 환경 구축하기 A to Z

https://bigdaheta.tistory.com/114