[개요] docker hub 에서 pull 한 image 로 container 실행하기

[정리]

# dockerhub에서 이미지 pull
docker pull pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime 

# 1번 GPU, /bin/bash로 container 실행
NV_GPU=1 nvidia-docker run -it -v <mnt될 폴더 경로>:/<mnt할 폴더이름 지정> <image name> /bin/bash

# 실제 예시
NV_GPU=1 nvidia-docker run --rm --name bernice-FreezeG --user 1002:1002 -it \
-v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro \
-v $(pwd):/workspace -v $(readlink -f disk1):/disk1 bernice-psp-pytorch /bin/bash

 

  • NV_GPU=1 : 1번 GPU 사용
  • --rm : 컨테이너 종료시 자동 삭제 (동일한 컨테이너 다음에 다시 사용할 예정이면 설정하지 말 것)
  • --name bernice-FreezeG : container 이름 설정
  • --user 1002:1002 : <uid:gid> 형식으로 유저 설정 (단 /bin/bash 사용할 경우 설정하지 않고 root 권한으로 실행, 학습 종료 후 생성된 파일들 권한 직접 바꿔주기로)
    • id 명령어로 나의 uid, gid 확인 가능
  • -it : 컨테이너 종료하지 않은 채로 터미널에 입력 넘겨줄 수 있음
  • -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro : 유저 정보를 읽기 전용으로 마운트 (root 권한일 경우 필요 없음)
  • -v $(pwd):/workspace : 필요한 폴더 마운트
  • -v $(readlink -f disk1):/disk1 : 소프트링크로 연결된 디스크를 별도로 mount
  • bernice-psp-pytorch : 실행시킬 이미지
  • /bin/bash : bash 로 실행

 

1. pull image

docker hub에서 원하는 pytorch 버전으로 찾기

다음번에는 Dockerhub가 아닌 NVIDIA에서 image를 받아볼 것: 환경변수 설정 따로 필요 없이 CUDA 버전 맞춰 GPU 사용한다는 것이 docker의 장점.

 

docker pull pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime

 

이미지가 받아진 모습 (밑에서 두번째)

앞에 내 이름 붙이는 걸 깜박해서 이름을 바꿔보려고 한다

docker tag 6a2 bernice-psp-pytorch:latest

 

같은 아이디로 두 개가 생겨버렸지만, 같은 reference라서 3.47GB짜리 이미지가 두 개 생긴 건 아니라고 한다

 

 

2. nvidia-docker run

NV_GPU=1 nividia-docker run -it -v $(pwd):/workspace bernice-psp-pytorch /bin/bash

이미지를 실행한 container 내부에 bash shell로 진입

이때, 현재 경로를 잘 생각하고 container 실행할 것 - 볼륨 마운트 되는 것을 고려

 

실행한 container에서 새로 추가, 수정한 파일이 어떻게 될지 궁금해서 먼저 테스트

# 새로운 파일 생성
touch test.txt 

# vi 편집기 설치 (container 실행할 때마다 설치해야 함)
apt-get update
apt-get upgrade
apt-get install vim

# 편집 후 저장
vi test.txt
cat test.txt

*apt-get: https://dev.plusblog.co.kr/22

container exit(종료) 후 보존되어 있는 것을 확인

 

한편, 소프트링크로 연결된 디스크에 접속이 안 되는 문제 발생

 

해결법 :

NV_GPU=1 nvidia-docker run -it -v /home/bernice/zzalgun:/workspace  -v $(readlink -f disk1):/disk1 bernice-psp-pytorch /bin/bash

readlink로 소프트 링크의 원본 경로를 찾아, disk1 라는 이름으로 별도 마운트

 

 

3. tmux

[tmux 설치 및 세션 시작]

사용 예시 : tmux 세션에 서버를 올려서 학습이 계속 이루어질 수 있게 한다. (tmux에 서버가 올라가 있으므로 터미널을 닫아도 무방) 해당 세션에서 새로운 창(윈도우)을 띄워서 tensorboard를 실행한다. (터미널 탭 하나 더 띄우는 것과 비슷하게 생각할 수 있음)

# tmux 설치
apt-get update
apt-get upgrade
apt-get install tmux

# 세션 시작
tmux new -s train-session
 
# 해당 세션에서 새로운 윈도우 추가
ctrl + b, c
(윈도우 종료시) ctrl + d

# 윈도우 이름 설정
ctrl + b, ,

# 윈도우 간 이동
ctrl + b, n / 혹은 윈도우 넘버
아래와 같이 틀 나눈 상태에서는 ctrl + b, 방향키로 이동 가능

# 틀 나누기
ctrl + b, % : 횡 분할
          " : 종 분할

사진 설명: train-session(잘림) 이라는 이름으로 tmux 세션을 시작. 윈도우를 하나 더 띄워 각 윈도우에 이름을 붙임. 하나는 main, 하나는 tensorboard. 화면을 횡 분할 하여 두 개 윈도우를 함께 보고 있음.

 

container 돌아가는 상태에서 잠깐 빠져나와(detach) 실행 중인 컨테이너 정보를 확인하고 싶다면?

# detach, 즉 container running 상태에서 나오기
ctrl+p, ctrl+q

# 컨테이너 정보 확인
docker ps 

# attach, 즉 container로 다시 진입하기
docker attach <id 3자리>

 

'컴퓨터 > Docker' 카테고리의 다른 글

ROMP inference 를 위한 환경 세팅  (0) 2022.08.12
docker - 각종 트러블슈팅  (0) 2022.08.11
복사했습니다!