딥러닝 실험환경을 구축하고 관리하기 가장 쉬운 방법을 정리하고자 합니다.
1. Docker 기반의 딥러닝 환경 구축
1. Docker를 활용한 딥러닝 환경 구축
서버 환경은 다음과 같다(ubuntu 사용할 것을 적극 권장합니다)
- ubuntu 18.04
- docker 19.03.5
ubuntu에서 terminal을 띄워서 아래 과정을 거칩니다.
(1) Docker 설치
curl -s https://get.docker.com | sudo sh # 공식 도커 설치 스크립트
docker -v # Docker 버전 확인
먼저 Docker를 설치해줍니다. Docker 기반으로 돌아가는 Container는 Ubuntu에서 안정적으로 실행되고 윈도우보다 세팅이 훨씬 쉽습니다
(2) Container 실행
PyTorch 이미지를 사용하여 Container를 띄워보겠습니다. 우리는 서비스 배포가 아닌 실험환경 구축이 목적이기 때문에 Container를 사용자 폴더에 mount 시키도록 하겠습니다. 그리고 사용자별로 다른 Container를 사용할 수 있기 때문에 port도 지정해두도록 하겠습니다
PyTorch 이미지
- pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime
mount 방법
- --mount type=bind,source=(우분투 폴더 절대경로),target=(Container에서의 작업 경로)
port 노출 방법
- -p (host의 port):(container의 port)
- container는 하나의 가상환경이며 host machine과 container의 port를 연결해줘야 합니다. 예를 들어 host machine에서는 7001 port를 열고 container의 7001 port를 연결해주기 위해서는 -p 7001:7001 명령어가 필요합니다
GPU 연결 방법
- --gpu "device=0" 또는 --gpus all
- 연결하고자 하는 device id는 nvidia-smi로 확인가능(맨 왼쪽 0 또는 1로 표시됨)
아래 명령어로 Container를 띄워준다!
sudo docker run -d -it --name (Container 이름) --gpus "device=0" -p 7001:7001 --mount type=bind,source=/home/user/deeplearning,target=/root/deeplearning pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime
Container가 잘 생성되었는지 확인한 후 실행시킨 후에 접속합니다.
sudo docker ps -a # Container list
sudo docker start (Container 이름 또는 ID) # Container 실행
sudo docker attach (Container 이름 또는 ID) # Container 접속
접속하면 root 계정으로 접속됩니다.
간혹, docker가 머신의 docker가 머신의 자원 사용에 제한이 걸리는 경우가 있습니다. 때문에 호스트 머신의 port를 사용하지 못하는 경우에도 발생하는데, 이때 container 실행 시 --privileged
옵션을 주게 되면 지정된 port가 알맞게 열립니다.
sudo docker run -d -it --name (Container 이름) --privileged
(3) Container SSH 접속 설정(★)
이 부분은 외부에서의 접속을 위해 꼭 해야합니다. (2)단계에서 생성한 Container에 접속한 후 아래 과정을 거칩니다.
ssh 설정에 필요한 것들 설치
- nano, ssh-server, net-tools
apt-get update # update 해줘야 다른 프로그램 install이 됩니다
apt-get install nano net-tools openssh-server
ssh config 변경
- ssh 접속 port 변경, 권한 부여
nano /etc/ssh/sshd_config
nano 명령어는 우분투에서 파일 내용을 수정할 때 사용합니다. 위 명령어로 sshd_config 파일에 접속하여 중간에 Port, PermitRootLogin 앞의 #을 지우고 아래와 같이 수정합니다.
여기서의 7001 port는 host machine이 아닌 Container의 port를 열어주는 것입니다.
내용을 수정하면 Ctrl+X를 누르고 Y를 눌러 내용을 저장하며 빠져나옵니다
root 계정 비밀번호 변경
- 선택사항이지만 비밀번호를 설정해두는 것을 권장합니다
- passwd root를 입력하고 비밀번호를 차례대로 입력, 재입력합니다
passwd root
ssh 서비스 시작
service ssh start
(4) 접속 테스트
putty, 또는 새로운 terminal을 띄워 접속을 테스트해봅니다.
ssh -p 7001 root@xxx.xxx.xxx.xxx
(설정한 비밀번호 입력)
접속이 잘 되는 것을 확인하실 수 있습니다. 근데 다음과 같은 문제점이 발생할 수 있습니다
- 이미지에는 python이 깔려있는데 bash가 python 명령어를 실행시키지 못함
- python 모듈들이 제대로 깔려있는데 찾지를 못함
이는 root 계정에서의 python 경로 설정 문제로 보이며, 다음 글에서 설명드리도록 하겠습니다.
감사합니다.
'개발' 카테고리의 다른 글
Docker Container 중지 없이 빠져나오기 (0) | 2021.02.09 |
---|---|
딥러닝 개발환경 세팅기(Docker, PyCharm) (2) (4) | 2021.02.09 |
Docker 관련 명령어 정리 (0) | 2020.06.05 |
tensorflow GPU 확인 방법 (0) | 2020.06.05 |
Ubuntu에서 CUDA 완전 삭제 명령어 (2) | 2020.06.04 |