Jupyter (Docker)#

https://github.com/comafire/docker-jupyter

Native 개발 환경을 사용하다 보면, 컴퓨터 교체나 운영체제 업그레이드시에 개발 환경이 꼬여서 재설치하는 경우가 심심치 않게 생깁니다. 이런 불편함 때문에 생겨난 기술이 Docker(도커) 입니다.

도커를 이용하면 개발 환경을 완벽하게 분리된 상태로 사용하면서 이미지처럼 저장하거나 원하면 빌드해서 사용할 수 있기 때문에 개발 환경을 재구축 해야 할때 시간을 많이 절약할 수 있습니다.

다만, 윈도우 / 맥에서는 Docker를 사용해도 Virtual Machine 위에 Docker가 돌아가기 때문에 성능 및 GPU 사용에 제약이 발생합니다. 이런 제약을 피하려면, 리눅스 개발 환경을 추천합니다.

도커가 뭐고 왜 쓰는건가요? (Youtube 5분 소개)

youtube

여기서는 Data Science 에 자주 사용되는 Jupyter 와 Spark, CPU/GPU DeepLearning 및 주요 Library 를 Docker Image 로 제공합니다.

현재 지원 기능

  • Jupyter

    • Jupyter Kernel: Python3, Scala, R, Julia

    • Machine Learning

      • Python3 Lib: tensorflow CPU/GPU, pytorch CPU/GPU, keras, pandas, scikit-learn, .. etc

  • Apache Spark

시스템 요구사항

  • Ubuntu 18.04 LTS

  • Docker

  • Nvidia-Docker (for GPU)

Git Clone#

> git clone https://github.com/comafire/docker-jupyter.git

Install Docker#

Docker 공식 설치 문서를 참조하여 설치하시면 됩니다.

https://docs.docker.com/engine/installation/linux/ubuntu/

https://docs.docker.com/engine/installation/linux/linux-postinstall/

for Nvidia GPU#

Nvidia GPU 가 장착된 머신이라면 아래 Nvidia GPU Driver 와 Nvidia-Docker 설치를 통해서 GPU DeepLarning 라이브러리를 사용하실 수 있습니다.

Install Nvidia GPU Driver#

Cuda 및 툴킷 라이브러니는 Nvidia-Docker 를 사용할 것이기에 Driver 만 설치하면 됩니다.

설치 방법은 아래 링크를 참조하세요.

https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux

Install Nvidia-Docker#

Docker 상에서 Nvidia GPU 를 이용하기 위해 Nvidia-Docker 를 사용합니다.

설치 방법은 아래 공식 설치 문서를 참조하세요.

https://github.com/NVIDIA/nvidia-docker

Setup#

env.sh.template 파일을 env.sh 로 복사하여 설정 변경이 가능합니다.

#!/bin/bash

export HOSTNAME="docker-jupyter" 
export USERNAME=$(id -un) 
export USERID=$(id -u $USERNAME)
export LOCALE="ko_KR.UTF-8"

# Jupyter
export JUPYTER_NAME="jupyter"
export JUPYTER_PORT="8010" # Your Jupyter Port
export JUPYTER_HOME="$(pwd)"
export JUPYTER_MNT="/data" # Your External Mount
export JUPYTER_PASSWORD="notebooks" # Your Jupyter Password
export JUPYTER_BASEURL="jupyter" # Your Jupyter BaseURL, ex) http://localhost:8010/jupyter
export JUPYTER_RESTAPIPORT="8020" # Your Jupyter Kernel Gateway Port
export JUPYTER_IMAGE="comafire/docker-jupyter"
export JUPYTER_TAG="latest"
export JUPYTER_GPU_IMAGE="comafire/docker-jupyter-gpu"
export JUPYTER_GPU_TAG="latest"
export JUPYTER_GPU="FALSE"

Build Docker Image#

./docker_build.sh 명령을 통해 env.sh 에서 설정한 이미지를 빌드합니다.

Dockerfile 을 제공하므로 커스텀 이미지 빌드도 가능합니다.

Run#

./docker_run_jupyter.sh 명령으로 Jupyter Docker 이미지를 실행할 수 있습니다.

> ./docker_run_jupyter.sh
> docker ps
CONTAINER ID        IMAGE                                COMMAND              CREATED             STATUS              PORTS                                            NAMES
c63e1132d207        comafire/docker-jupyter:latest       "./run_jupyter.sh"   2 seconds ago       Up 1 second         0.0.0.0:8020->8088/tcp, 0.0.0.0:8010->8888/tcp   jupyter

이제, 설정한 Jupyter URL 인 http://localhost:8010/jupyter 로 접속하여 Jupyter를 사용할 수 있습니다.

Install Extra Library#

Python#

Jupyter 사용중 추가 외부 라이브러리가 필요하시면 Jupyter 상에서 Terminal 창을 띄우신 후에 pip3 명령을 사용하시면 됩니다.

Docker 실행시 자동 설치를 원하시면 requirements.txt 파일에 패키지를 추가하시면 됩니다.

Option - Vagrant#

Linux 에서 Virtual Box Virtual Machine 을 편리하게 관리하기 위한 툴로 Vagrant를 이용합니다.

docker-jupyter 를 로컬 머신상이 아닌 Virtual Machine 상에서 설치 테스트를 하기 위해 사용합니다.

Install Vagrant#

Vagrant를 아래 명령으로 설치 합니다. vagrant 의 virtual box disk 사이즈 설정 플러그인 기능을 사용하기 위해 특정 버전의 vagrant 를 설치합니다.

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib"
sudo apt update
sudo apt install virtualbox virtualbox-ext-pack
wget -c https://releases.hashicorp.com/vagrant/2.0.3/vagrant_2.0.3_x86_64.deb -P /tmp
sudo dpkg -i /tmp/vagrant_2.0.3_x86_64.deb
vagrant plugin install vagrant-disksize

Vagrantfile#

Virtual Machine 에서 사용할 네트워크/메모리/디스크 설정은 Vagrantfile 파일에서 자신에 맞게 수정하면 됩니다.

docker-jupyter 디렉토리는 Virtual box 내에 /home/vagrant/docker-jupyter 와 마운트되게 됩니다.

ENV["LC_ALL"] = "en_US.UTF-8"

Vagrant.configure("2") do |config|

  config.vm.define "v01" do |host|
    host.vm.box = "ubuntu/xenial64"
    host.vm.hostname = "v01"
    host.vm.network "public_network", ip: "192.168.0.70"
    #host.vm.network "private_network", ip: "10.0.1.1"
    host.vm.provider "virtualbox" do |vb|
      vb.gui = false
      vb.cpus = 2
      vb.memory = "4096"
    end
    host.disksize.size = '16GB'
    host.vm.synced_folder "./", "/home/vagrant/docker-jupyter", owner: "vagrant", group: "vagrant"
  end

end

Virtual Machine 생성 및 접속#

docker-jupyter 디렉토리 내에서 아래 명령어를 통해 Virtual Box 의 Virtual Machine 을 생성하고 접속하여 사용할수 있습니다.

vagrant up
vagrant ssh v01