본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
왜 머신러닝/딥러닝 개발환경에서 VM환경보다 Docker환경을 선호할까?
등록일
2022.08.19
첨부파일
컨테이너와 차이점
왜 머신러닝/딥러닝 개발환경에서 VM환경보다 Docker환경을 선호할까?
컨테이너와 VM 차이점
  • 가상화를 사용하는 이유는?

현업에서 cpu 사용률이 20%도 안 되는 활용도가 낮은 서버들은 리소스 낭비일 수 있습니다. 그렇다고 모든 서비스를 한 서버 안에 올린다면 안정성에 문제도 생길 수가 있습니다. 그래서 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법은 서버 가상화입니다. 모두가 아는 대표적인 가상화 플랫폼으로는 VM과 컨테이너가 있습니다. 그렇다면 컨테이너란 무엇인가?

  • 컨테이너란?

  • 소프트웨어는 OS와 라이브러리에 의존성을 중요시합니다. 그러므로 하나의 컴퓨터에서 성격이 다른(OS,라이브러리 버전이 다른) 소프트웨어를 한 번에 실행할 때 어려움을 가질 수 있고 관련된 구성을 관리하기가 어렵습니다. 그래서 컨테이너는 개별 Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반 환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해 주는 운영 체계 수준의 격리 기술을 말합니다.

    • 가상머신 또한 독릭접인 실행환경을 구성할 수 있도록 도와주는데 차이는 다음과 같습니다.

    가상머신

    대표적으로 HyperVisor라는 것이 있습니다. 이는 컴퓨터가 가지고 있는 인프라 리소스들에 대해 VM별로 배분하는 역할을 합니다.또한 각 VM에서는 독립적인 Guest OS를 가지고 있습니다. 따라서 독립적인 플랫폼을 하나씩 증가할 때마다 불필요한 OS를 만드는 작업에 대해서 계속 진행을 해야 하므로 메모리나 자원에 관해서 유동적으로 관리되는 게 아니라 처음부터 정해 놓고 실행하기 때문에 비효율적입니다.

    컨테이너

    컨테이너의 경우 하나의 Host OS에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행되기 때문에 OS를 따로 만드는 작업 및 인프라를 독립적으로 나눌 필요가 없어서 확장성이 좋고 빠릅니다.
  • 컨테이너 장점 정리

    • 컨테이너(Container)를 사용해야 하는 이유

    가상 머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동합니다. 컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지합니다.

    nvidia-docker 사용법

    Nvidia-docker의 사용법은 기본적으로 Docker 사용법과 동일하고,
    Nvidia에서 제공하는 NVIDIA CLOUD의 리소스와 기본 Docker 리소스가 모두 사용 가능합니다.
    기본 명령어는 다음과 같습니다.

    $ sudo nvidia-docker
    Nvidia GPU Cloud는 Nvidia에서 제공하는 공식 도커 컨테이너 클라우드입니다. 컨테이너를 실행만 하여 바로 사용 가능한 형태로 배포되고 있고, 필요하다면 컨테이너에 추가 프레임워크를 설치하여 사용할 수 있습니다. 로컬에 여러 프레임워크를 설치하여 사용하는 것과 컨테이너로 동작하는 것은 성능 차이가 없습니다. 프레임워크의 버전 관리/환경 테스트에 적합하며, 초기 설치를 최소화할 수 있습니다.
    예를 들어 딥러닝 카테고리의 텐서 플로우를 선택하면 아래 화면으로 이동합니다.
    중간에 있는 Pull Command로 다운로드가 가능합니다.
    $ sudo nvidia-docker pull nvcr.io/nvidia/tensorflow:19.03-py3
    최신 버전인 19.03-py3 외에도 예전 버전도 설치가 가능합니다. 이전 버전의 릴리즈 노트를 확인하고 이전 버전을 설치할 경우 페이지 하단 링크를 통하여 확인 가능합니다. 이미지가 설치되면 아래 명령어를 통하여 다운로드된 이미지 확인이 가능합니다.
    $ sudo nvidia-docker images
    이미지가 필요 없게 되면 삭제하면 됩니다.
    $ sudo nvidia-docker rmi nvcr.io/nvidia/tensorflow:19.03-py3
    이미지가 다운로드되었으면 이미지를 이용하여 컨테이너를 생성하고 실행해야 합니다.
    아래 명령어로 실행할 수 있습니다. (이미지가 다운로드 되어 있지 않았다면 실행 시 자동으로 이미지를 다운로드합니다.)
    $ sudo nvidia-docker run -t -i -p 2222:80 -v /home/gpuadmin:/workspace --name=test123 nvcr.io/nvidia/tensorflow:19.03-py3
    옵션내용
  • run : 컨테이너 실행
  • -t : tty (명령어 출력을 보여줍니다.)
  • -i : interactive (입출력 통신을 하겠다) (하지 않으면 결과를 받을수 없습니다.)
  • -rm : 한번 실행후에 컨테이너가 자동 삭제됩니다.
  • 위의 명령어를 실행하면 'test123'이라는 컨테이너가 tensor flow 이미지대로 실행됩니다.
    컨테이너에서 jupyter를 설치할 경우 기본 포트는 8888입니다. 컨테이너의 8888과 로컬 서버의 80을 포워딩한다면 ( -p 80:8888 ) 옵션으로 포워딩할 수 있습니다.
    $ sudo nvidia-docker ps (실행 중인 컨테이너만 확인)
    컨테이너의 실행 및 중지, 삭제는 아래와 같이 할 수 있습니다.
  • $ sudo nvidia-docker stop test123
  • $ sudo nvidia-docker start test123
  • $ sudo nvidia-docker rm test123
  • 동작 중인 컨테이너에 접속하여 명령어를 입력할 수 있습니다. (pip install 등)
    $ sudo nvidia-docker exec test123 bash
    또는 동작 중인 컨테이너에 직접 명령어를 입력할 수 있습니다.
    $ sudo nvidia-docker exec test123 /workspace/test.py
    GPU 리소스 나눠 쓰기 (GPU 번호 입력)
    $ sudo NV_GPU=0,1 nvidia-docker run -ti --name=test01 nvcr.io.tensorflow:19.03-py3
    PLEASE WAIT WHILE LOADING...