SSH 서버 환경 구축(2)

merin·2022년 1월 4일
0

😇 교수님께서 만들어주신 ssh 서버, 😇 교수님께서 하사하신 gpu로
docker, container, images 생성 및 라이브러리 설치

작업리스트
1ssh 서버 접속하기 - SSH 서버 환경 구축(1)
2nvidia gpu driver 설치 - SSH 서버 환경 구축(1)
3nvidai 도커 설치 - SSH 서버 환경 구축(1)
4PyTorch/Cuda 세팅된 도커 이미지 풀링 - SSH 서버 환경 구축(2)
5도커 이미지를 이용해 도커 컨테이너 설정 (생성 시 포트, 데이터볼륨 지정 등 필요) - SSH 서버 환경 구축(2)
6컨테이너에서 ssh 서버 및 필요한 라이브러리 설치 - SSH 서버 환경 구축(2)

4. PyTorch/Cuda 세팅된 도커 이미지 풀링

- Docker Image 생성

#Pytorch 최신 버전의 Docker를 받고 싶으면 아래과 같이 하자.
1) docker pull pytorch/pytorch:latest
2) docker images
# 결과
REPOSITORY        TAG                             IMAGE ID       CREATED        SIZE
pytorch/pytorch   latest                          5ffed6c83695   2 months ago   7.25GB

Tag Created는 방금만들었는데도 2 monthes ago로 나오는걸 보면 별로 상관이 없는 듯 하다. 나중에 왜그런지 알아봐야겠음
생각보다 사이즈가 꽤 크다. pytorch에 기본적으로 깔리는 numpy, torchaudio 등등 자동으로 설치되기 때문에 악명높은 tensorflow 환경구축보다는 빠른 듯 하다.

  • 이미지 삭제
docker rmi <image_id>

여기서 image ID는 5ffed6c83695 이다.
나는 삭제할 이미지가 없어서 건너뛰었다.

5. 도커 이미지를 이용해 도커 컨테이너 설정


  • < Docker constructs >

Docker는 Read-only layer(Image), Read-write(Container)가 있고, Read-only에서 파일을 수정하면 Read-write layer가 쌓인다. 이 때 Container에서 mount하여 파일을 수정시키지만 Read-only에서는 수정된 파일을 숨기고, 삭제하진 않는다. 이후 컨테이너를 삭제하면 변경된 파일 내역은 유실되고 Read-only의 숨겨진 파일 내용을 다시 가져온다. 대용량의 변경된 데이터를 저장하기 위한 다양한 방법 중 Docker Volume을 활용하는 것이 있다.
참조 : https://sightstudio.tistory.com/32

  • < Docker Volume >

위 그림은 볼륨의 세 가지 종류를 나타낸다.

Bind Mount: 호스트 환경의 특정 경로를 컨테이너 내부 볼륨 경로와 연결하여 마운트한다. 이 방법은 보안에 영향을 미칠 수도 있다고, 홈페이지에서 경고하고 있긴 하다... 흠.
Volume (가장 일반적): 도커 볼륨은 도커 컨테이너에서 도커 내부에 도커 엔진이 관리하는 볼륨을 생성하는 것이다. 생성된 볼륨은 호스트 디렉터리의 /var/lib/docker/volumes 경로에 저장되며, 도커를 사용하여 관리가 용이하다.
tmpfs Mount: 이 방법은 리눅스에서 도커를 실행하는 경우에만 사용할 수 있는 기능이라고 한다. 호스트의 파일 시스템이 아닌, 메모리에 저장하는 방식을 사용한다.

참조 : https://anweh.tistory.com/79

그렇다면 나는 가장 일반적인 Volume Mount 방식으로 볼륨을 생성해보겠다!

- Volume Mount

1) docker volume create <volume name> #도커 볼륨 생성
2) docker volume ls #볼륨 목록 리스트 확인 
3) docker volume inspect <volume name> #도커 볼륨 정보 확인 

마운트 포인트는 var/lib/docker/volumes 인 것을 확인할 수 있다.

볼륨 생성 완료!

- Container 포트 바인딩

도커 컨테이너 실행 시 -p 옵션으로 실행하여 포트 포워딩을 설정할 수 있다.

docker run -p <host port number>:<container port number>/<protocol> [IMAGE NAME] [OTHER OPTIONS..]
  
  • host port number : 호스트 시스템에서 사용되는 포트 번호
  • container port number : 컨테이너 내에서 사용되는 포트 번호
  • protocol : 프로토콜 유형 - udp, tcp, stcp 등 (생략시 tcp 디폴트)

예) -p 8080:80/tcp 옵션 적용하면, 호스트 시스템의 8080번 tcp 포트로 유입되는 트래픽은 모두 도커 컨테이너 80번 tcp 포트에 전달된다.

그러니까 나는 첫 ssh 접속 시 부여받은 호스트 포트번호 -p 36022가 host port number이고, container port number를 지정해주면 된다. 이부분은 교수님께 잠시 물어봐야겠다.
[IMAGE NAME]을 위해 docker image를 만들어주고 실행해야 한다.

참조 :

6. 컨테이너에서 ssh 서버 및 필요한 라이브러리 설치


https://velog.io/@vanang7/%EB%8F%84%EC%BB%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

Deepo 도커를 사용해서 딥러닝/머신러닝 개발에 필요한 라이브러리를 설치해볼 예정이다.(잠깐 그럼 굳이 내 도커를 설치안해도 됐잖아..)

  • python 3.6.9
  • Keras 2.3.1
  • tensorflow 2.1.0
  • torch 1.5.0
  • Theano 1.0.4
  • scikit-learn 0.22.2
  • jupyter 1.0.0

등등.. 정말 내가 쓰는 것만 다 모아놨다.
python은 ubuntu20.04 기본 3.8이 있는데 텐서에선 3.6만 돌아가므로 따로 설치해두는 것이 좋다.

설치환경은

이렇다고 한다. Ubuntu 20.04이어도 상관 없을 듯 하다.

위의 포스팅을 따라 jupyter lab 포트를 바인딩하여 사용할 듯 하다. 추가적으로 필요한 라이브러리는 다음 포스팅에 올릴 예정이다. 아마 Google Magenta 모델 구현 포스팅에서 자세하게 설명할 듯 하다.

profile
MALer

0개의 댓글