서론
연구실에 배정된 머신러닝 학습용 컴퓨터를 서버실에 상주시키게 되면서, 원격으로 접속 가능하도록 만들어야 했다.
목적이 학습용이니 docker는 필수라고 생각했고, 쾌적한 사용을 위해 docker에 ssh 연결을 해야 했다.
컴퓨터가 windows10이었지만, 원격 데스크톱으로 제어를 하기 위해 그대로 사용했다. (사용이 편한 Chrome Remote Desktop은 Ubuntu를 '공식적으로' 지원하지는 않는다.)
구조
굳이 저렇게 해야할까 싶지만, Ubuntu에 Nvidia driver와 Cuda를 설치해본 사람은 이해해 줄거라 믿는다.
특히, 서로 다른 cuda 버전과 opencv, pytorch 등을 사용하는 사람들이 나온다고 생각하면... docker는 필수다.
포트포워딩
학습을 진행할 최상단의 Ubuntu에 ssh로 접근하려면 Windows10-WSL2-Docker간에 Forwarding을 해야한다.
다행히 학교 측에서 컴퓨터 당 1개의 ip를 할당해줘서 모든 포트가 열려 있었다. 그래서 검색을 통해 Reserved 되어있지 않은 포트를 찾아 WSL2와 1:1로 포트를 포워딩 해주었다.
- 비어있는 포트 검색
참고 사이트 : https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
- Windows10 ip와 WSL2를 포워딩하는 방법
참고 사이트 : https://codeac.tistory.com/118
- 스크립트를 자동 실행하는 방법 (우리는 트리거를 시작할 때로 만들어야 한다)
- WSL2와 Docker container를 포워딩하는 방법 (Docker쪽 포트는 22로 통일한다.)
참고 사이트 : https://tttsss77.tistory.com/155
Docker container
Docker를 처음 실행하면 필요한 옵션들을 적용해야 하는데, 포트 포워딩에 -p 옵션을 쓰듯이 터미널을 여는 옵션이나 gpu를 할당하는 옵션 등 여러 옵션이 있다. docker의 목적이 머신러닝 학습인 만큼 리소스와 관련한 옵션은 항상 숙지하고 있어야 한다.
- Docker를 사용하면서 알아야 할 docker run 옵션들
참고 사이트 : https://www.daleseo.com/docker-run/
- GPU를 할당하는 옵션 (필수)
$ docker run --gpus all
- 리소스 제한을 완전히 풀어주는 옵션 (필수) (docker는 default로 리소스에 제한을 건다.)
$ docker run --ipc host
apt 서버 변경
본격적으로 container에서 작업을 하기에 앞서, 기존 상태에서 apt update를 하면 엄청 느리다. 기존 다운로드 서버를 쓰면 apt update 하는 데만 1시간 넘게 걸리니, kakao 서버로 바꿔준다.
- 패키지 다운로드를 kakao 서버로 바꾸는 방법
참고 사이트 : https://mungiyo.tistory.com/15
SSH 설정
보통 docker image는 ssh 기능을 포함하고 있지 않다. 따라서 별도로 설치와 설정을 해줘야 한다.
그리고 외부 네트워크의 접근을 허용해 주기 위해, 방화벽 설정을 해줘야 한다.
설정 주의
1. docker의 포트를 22로 포워딩 시켰기 때문에, container의 ssh port를 22로 맞춰준다.
2. 방화벽은 windows10과 wsl2 포워딩에 사용한 포트들을 열어줘야 한다.
- ssh 설정과 방화벽 설정
참고 사이트 : https://parksb.github.io/article/21.html
vscode
클라이언트 컴퓨터에서 vscode로 ssh 접속을 하려면 기존의 방법에서 port 설정을 추가로 해야 한다.
- vscode ssh 접속 방법
- port 설정 방법
별도의 포트 설정이 없으면 포트가 22로 자동 적용되지만, 포워딩으로 다른 포트를 설정했기 때문에 Port를 설정해 줘야 한다.
config 파일에서 Port 항목 추가하고 Host에 포트를 명시해준다. (Host에 포트를 명시하지 않으면, 22로 접속된다.)
GUI 설정
wsl이나 jetson과 같은 방식으로 xlaunch가 되지 않는다.
Putty를 쓰는 방법이 있지만, 다음으로 기약하겠다.