Home
🐬

정보 : Docker Container Vscode로 접근하기

예상독자
conda, virutalenv를 사용 해 보았다.
딥러닝 프로젝트를 위해 CUDA 환경 설정을 해 보았다.
Docker의 기본적인 개념 (Image, Container)에 대해 알고있다.
Vscode를 이용해 SSH 접속을 해보았다.
Vscode에서 Docker Container 환경을 사용하고 싶다.

Introduction

Python은 일반적으로 프로젝트별로 런타임을 분리한다. 그렇지 않으면 모든 프로젝트가 한 런타임 아래에서 실행되는데, 이러면 Package간 의존성 문제가 발생한다. 예를 들어 A 프로젝트 에선 tensorflow 2.7 버전을 사용해야하는데, B 프로젝트에선 2.3 버전을 사용해야 할 수도 있고, C 프로젝트에서 numpy 를 업그레이드했더니 A 프로젝트에서 사용하는 패키지가 충돌을 일으켜 작동을 하지 않을 수도 있다.
따라서 가상환경이라는 개념을 통해 Python 런타임을 분리한다. 가상환경은 여러 개의 Python 런타임을 만들어 프로젝트별로 다른 Python 경로를 바라보게 함으로써 의존성 문제를 해결한다. 이를 위한 툴로는 virtualenv, conda 등이 존재한다.
딥러닝 프로젝트를 하다보면 virtualenv나 conda만으로는 의존성을 해결할 수 없는 때가 온다. Tensorflow나 Pytorch같은 딥러닝 프레임워크가 Version별로 지원하는 CUDA Toolkit Version이 다르기 때문이다. Conda의 의존성 관리를 이용해 Framework와 CUDA를 묶어서 설치해주는 방법도 있긴 한데, Global하게 설치된 CUDA가 있을 경우 충돌을 일으키는 경우가 잦고, 커뮤니티 버전이라 최신 버전이 없을 때도 있다.
이를 해결하기 위해 Docker를 주로 사용한다. 머신에 Nvidia Driver와 Docker만 설치되어 있으면 Framework별로 GPU를 사용할 수 있는 환경을 구축하기 쉽고, 세팅 과정도 단순하다. 한 번 Image로 말아서 저장해두면 다른 머신에서 사용하기 쉽다.
Conda 같은 가상환경 툴은 환경을 로컬에 저장해두기 때문에, VScoder로 직접 그 경로를 지정해 주면 IDE에서 런타임을 바로 인식한다. 그러나 Docker로 가상환경을 관리한다면, 평소엔 Image의 형태로 기록되어 있다가 실행되어 Container가 떠올라야 물리적인 환경이 생성된다. Vscode에서 이 환경을 사용하려면 어떻게 해야할까? (딥러닝 프로젝트를 기준으로 설명한다)

1. Install VScode Extension

Docker

Docker Extension을 이용하면 Docker 관련 조작을 GUI에서 쉽게 수행할 수 있다.Extension MarketPlace에서 위의 이름을 검색하거나, 아래의 링크를 통해 설치할 수 있다.

Dev Containers

Dev Containers Extension을 이용하면 Docker Container에 쉽게 접근할 수 있다. Extension MarketPlace에서 위의 이름을 검색하거나, 아래의 링크를 통해 설치할 수 있다.

2. Run Container

A. (Optional) Pull Image from docker hub

Docker hub에서 pytorch, tensorflow의 Image를 가져올 수 있다. GPU사용여부, Cuda version에 맞게 선택하면 된다.

B. docker run

docker run 명령어를 이용해 Image를 Container로 띄울 수 있다. 이때 [-v, —volume] flag를 이용해 Local과 Container 경로를 연결할 수 있으며, —gpus flag를 이용해 사용할 Device의 번호를 지정해 줄 수 있다. -it flag를 이용해, Container가 꺼지지 않도록 실행시켜 준다.
docker run -it -v {local_path:container_path} --gpus {device_num} {image}:{version}
Bash
복사
# Example docker run -it -v /home/local_path:/home/container_path --gpus all tensorflow:tensorflow:2.10.0-gpu
Bash
복사

3. Attach Container

컨테이너가 실행됐으면 Vscode의 GUI를 이용하거나 CLI를 이용해 Attach할 수 있다.

A. GUI

왼쪽의 Docker 아이콘을 클릭하면 Container와 Image상태에 대해 모니터링 할 수 있다. 현재 실행중인 컨테이너를 우클릭 하여 Attach Visual Studio Code를 클릭하면 아래와 같은 창이 상단바로 뜬다.
알맞은 컨테이너 이름(지정하지 않았다면 자동생성)을 클릭하면 SSH 접속하듯이 컨테이너에 접속할 수 있다.

B. CLI

Command(control) + Shift + p 커맨드를 VScode 창에서 동시에 누르면, 명령 팔레트가 나온다.
Dev Containers : Attach to Running Container 를 클릭하면 A에서 진행한 것과 똑같은 상단바가 나온다. 알맞은 컨테이너 이름(지정하지 않았다면 자동생성)을 클릭하면 SSH 접속하듯이 컨테이너에 접속할 수 있다.

4. Conclusion

Docker, Dev Containers Extension을 통해 VScode에서 Container에 SSH처럼 접속할 수 있다.
딥러닝 프로젝트의 경우 Data와 Code를 Volumn으로 연결해 주면, 가상환경처럼 사용할 수 있다.