[개요] 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
⭐ 다음번에는 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 |