- 최종결과 화면
- 꼭 reference 사이트에 들어가서 순서대로 따라할 것.
- 사이트 내부의 내용을 모두 정리하지 않을 계획이다.
Windows10에서 원격서버의 docker container에 접속하기
1. Reference
- https://www.44bits.io/ko/post/wsl2-install-and-basic-usage
- https://hwan-shell.tistory.com/182
- https://seokhyun2.tistory.com/42
- https://seokhyun2.tistory.com/48
2. WLS 및 docker desktop 설치
- 참고 : https://www.44bits.io/ko/post/wsl2-install-and-basic-usage
- WLS2와 docker desktop을 설치한다. 이 과정이 꼭 필요한 과정인지는 모르겠다. vscode에서
attach container
를 하면make sure docker deamon is running
이라는 에러가 났다. 이 문제를 해결하기 위해서 docker desktop을 설치해야하는 듯 했다. - windows home을 사용하기 때문에 WLS2를 설치해야만 docker desktop을 설치할 수 있었다.
- 사이트 순서를 정리하면 다음과 같다
- Windows Terminal 설치하기
- WSL 활성화를 위해서 PowerShell에서 두개의 명령어를 복붙 처주기
- WSL 설치하기 = MS store에서 Ubuntu 설치하기
- WSL1을 2로 업데이트 시켜주기 (커널을 설치해주고
PowerShell에서 $ wsl --set-version/default
처리 해주기 ) - Docker Desktop 설치하기 (windows home이지만, WSL2를 설치해놨기에 docker가 잘 설치가 되었다.)
- Docker 세팅 바꿔서 Ubuntu Terminal in window10에서도 docker 사용할 수 있게 만들기
3. VScode에서 SSH-remote 연결하기
-
Remote - Docker Containers
extension만 설치하면 안된다. 우선 SSH 연결이 필요하다 -
따라서 아래의 사이트를 참고 해서 다음의 과정을 진행해준다.
-
순서 정리
-
window vscode에서
Remote Development
extention 설치 (Remote 관련 extention 다 설치된다) -
Ubuntu Server 아래의 명령어 실행
-
$ sudo apt-get update $ sudo apt-get install ssh $ sudo apt-get install openssh-server $ sudo nano /etc/ssh/sshd_config # port 22 만 주석 풀어주기 $ sudo service ssh status $ sudo service ssh start 방화벽 $ sudo ufw enable $ sudo ufw allow 22 $ sudo ufw reload
-
-
윈도우 agent 세팅해주기
- 관리자모드 CMD
$ sc config ssh-agent start=auto
$ net start ssh-agent
-
윈도우에서 ssh-keygen해서 ubuntu에 넣어주기 (사이트)
- Powershell :
$ ssh-keygen -t rsa -b 4096
- Powershell :
$ Get-Content .\.ssh\id_rsa.pub
- Powershell :
- 그러면 출력되는 긴~~ 결과물이 있을텐데, 그것을 복사해서 메일로든 뭐든 저장해두기
- Ubuntu :
$ code /home/junha[=userName]/.ssh/authorized_keys
- Ubuntu :
- Ubuntu :
$ chmod 644 /home/junha/.ssh/authorized_keys
: 이렇게 설정해주면 윈도우에서 ssh연결할때 우분투 비밀번호 안물어본다.- 여기에 그~대로 key 복붙해서 저장해두기 (아래 이미지 참조)
- (에러 발생 및 문제 해결) 같은 아이피를 사용하는 우분투 케이스를 바꿔서 다시 연결하려니 안됐다. 이때 해결책 : 윈도우에서 known_hosts파일 삭제하기.
$ cd C:\Users\sb020\.ssh && rm ./known_hosts
-
윈도우 VScode ssh config
-
VScode -> ctrl+shift+p == F1 ->
Remote-SSH: Connect to Host
-
Host server1 HostName 143.283.153.11 # 꼭! ifconfig해서 ip확인
User junha
-
IdentityFile ~/.ssh/id_rsa
```-
위와 같이 config 파일저장해두기
-
그리고 SSH VScode로 연결해보면 아주 잘된다.
-
4. Ubuntu Docker 설치 및 Container 실행
-
Docker 설치 : 기본 Docker 를 설치해줘야 NVIDA docker로 업그레이드 가능
$ sudo ubuntu-drivers devices
$ sudo ubuntu-drivers autoinstall
$ reboot
- 꼭 드라이버 설치하고, $ nvida-smi 하기 전에, reboot 꼭 해보기.
$ nvidia-smi
-
-
# 정리 1$ curl https://get.docker.com | sh \ && sudo systemctl --now enable docker 2$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list 3$ sudo apt-get update 4$ sudo apt-get install -y nvidia-docker2 5$ sudo systemctl restart docker 6test-$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
-
-
ML workspace Docker Image 다운로드(pull) 및 container Run
-
$ sudo docker run -d \ -p 8080:8080 \ --name "8080ML" \ --runtime nvidia \ --env NVIDIA_VISIBLE_DEVICES="all" \ -v "${PWD}/docker_ws:/workspace" \ --env AUTHENTICATE_VIA_JUPYTER="junha" \ --shm-size 512m \ --restart always \ mltooling/ml-workspace:0.12.1
-
### 설명 추가 $ sudo docker run -d \ # background 실행 -p 8080:8080 \ # 앞 포트는 내 우분투 포트, 뒤 포트는 컨테이너 내부 우분투 포트, 실험에 의하면 host-port/container-port이며, host-port만 바꿔주고 container-port는 8080으로 고정해서 사용하자 --name "8080ML" \ # 맘대로 해라 --runtime nvidia \ # 이거 꼭! --env NVIDIA_VISIBLE_DEVICES="all" \ # 이것도 꼭 -v "${PWD}/docker_ws:/workspace" \ # 터미널실행PWD=="${PWD}"/docker_ws 폴더 만들어 놓기 --env AUTHENTICATE_VIA_JUPYTER="junha" \ # 비밀번호 --shm-size 512m \ # 일단 해놈. 안해도 될듯 --restart always \ # 알지? mltooling/ml-workspace:0.12.1 # docker-hub에 버전 참고
-
5. Docker Container 연결하기
-
참고
-
VScode -> ctrl+shift+p == F1 ->
Preferences: Open Settings (JSON)
-
{ "docker.host": "ssh://junha@143.283.153.11" }
-
이렇게 수정해두기. 위에서 junha로 하는 대신 우분투에서 아래의 작업 진행
-
$ sudo usermod -aG docker junha
-
VScode -> ctrl+shift+p == F1 ->
Remote-Containers: Attach to Running Container
-
존버타고 있으면, 서버에 실행되고 있는 container 목록이 뜬다. 원하는거 선택하고 Open 및 설정이 완료되기까지 시간이 좀 걸린다.
-
그러면 최종 성공!
6. 완성!
- Windows10
- Ubuntu
7. VS code 환경설정
- 아래와 같이 Python Interpreter 설정을 해야한다.
- ML-workspace자체에 conda가 설치되어 있고, base env는
opt/conda/bin/python
에 존재한다. interpreter에 마우스 길게 갖다 대고 있으면 path가 나온다. 나의 window conda path와 겹칠일은 없겠지만 그래도 조심하자.
8. docker container에서 code 명령어 사용하기
-
reference site : The “code” command does not work when connecting to a Docker container remotely with VSCode
-
종합적으로, 아래의 명령어를 docker container Terminal에 입력했다.
$ ls ~/.vscode-server/bin # hash name 파악하기 $ export PATH="$PATH:$HOME/.vscode-server/bin/<hash name>/bin/" (예시) $ export PATH="$PATH:$HOME/.vscode-server/bin/08a217c4d27a02a5bcde8555d7981bda5b49391b/bin/"` $ code ~/.bashrc (Addding in the file) export PATH="$PATH:$HOME/.vscode-server/bin/08a217c4d27a02a5bcde898555981bda5b49391b/bin/"`
9. --shm-size 의 중요성
mmclassification 을 돌리면서 만난 에러가 다음과 같았다.
RuntimeError: DataLoader worker (pid 167565) is killed by signal: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit
찾아보니 원인은 다음과 같았다.
-
도커로 컨테이너를 생성하게 되면 호스트와 컨테이너는 공유하는 메모리 공간이 생기게 되는데 이 공간에 여유가 없어서 발생되는 에러이다.(참조사이트)
-
container
$ df -h
명령어로, shm가 얼마인지 확인할 수 있다. -
container run 할 때 충분한 -shm-size 를 설정해주는 방법이 답이다.
-
ML-workspace github 참조
-
찾아보니, 대강 이 문제가 발생한 사람들은
docker run --shm-size=2G
설정한다. 어떤 글을 보니docker run --ipc=host
이런식으로 설정해주는 사람도 있었다. 어떤 사람은8G
로 설정하는 경우도 있었다. (문제 안생기나?)# 최종 실행 터미널 코드 $ sudo docker run -d -it \ --gpus all \ --restart always \ -p 8000:8080 \ --name "mmcf" \ --shm-size 2G \ -v ~/docker/mmclf/mmclassification:/workspace \ -v ~/hdd1T:/dataset \ pytorch/pytorch:1.5.1-cuda10.1-cudnn7-devel
-
또한
$ watch -d- n 1 df -h
명령어를 사용해서 현재 container가 어느정도의 --shm-size를 사용하고 있는지 알 수 있다. -
참조 사이트 : pytorch-issue, share-memory-8G
10. 새로운 windows로 원격 vscode 코드 열기
- vscode에서 단축키 변경으로
ctrl + k + s
duplicateWorkspaceInNewWindow
를ctrl+shift+n
으로 단축키 지정해주기- 참조 사이트
11. permission denied
- 핵심 :
$ sudo chown -R junha:junha ./detectron2/