Skip to content

Instantly share code, notes, and snippets.

@haje01
Last active April 19, 2019 17:26
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haje01/0fb6d63bf065c9831256 to your computer and use it in GitHub Desktop.
Save haje01/0fb6d63bf065c9831256 to your computer and use it in GitHub Desktop.

Docker로 Caffe 실습하기

글쓴이: 김정주(haje01@gmail.com)

Caffe는 강력한 딥러닝 툴이지만, 설치가 까다로워 접근하기가 쉽지 않습니다. 이에 Docker를 활용하여 실습하는 방법을 소개합니다.

Docker 설치

설치과정은 많은 파일을 받아야 하기에 인터넷이 빠른 곳에서, 충분한 시간(2시간 이상)을 가지고 진행해야 합니다.

네이티브 방식(Linux)

Docker.com의 리눅스 설치를 참고해서 진행.

가상머신 방식(Mac, Windows)

Mac

Docker.com의 맥 설치를 참고해서 진행.

  1. OSX 10.8(마운틴 라이온) 이상인 것을 확인 후
  2. Docker Toolbox를 설치합니다.

Windows

Docker.com의 윈도우 설치를 참고해서 진행.

  1. H/W 지원 가상화를 확인 후,
  2. Docker Toolbox를 설치합니다. (설치 옵션은 기본 그대로, 중간에 나오는 팝업 창은 '설치' 로)

도커 터미널의 실행

가상머신 방식의 경우 어플리케이션을 실행하여 도커를 기동하게 됩니다.

  • Mac - 'Docker Quickstart Terminal' 앱
  • Windows - 바탕화면의 'Docker Quickstart'를 실행

가상머신 초기화에 시간이 좀 걸립니다. 끝나면 다음과 같은 터미널 화면이 나옵니다.

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

bash-4.3$ 

Caffe 이미지

Caffe 도커 이미지는 내려받을 수도 있고, 직접 빌드하실 수도 있습니다.

빌드된 이미지 내려받기

제가 빌드해서 올린 이미지 파일을 내려받는 방식입니다.

$ docker pull haje01/caffe 

만약 과정에서 An error occurred trying to connect:~ 등의 에러가 발생하면 Docker Toolbox와 함께 설치된 VirtualBox에서 default이미지를 찾아 지우고 다시 도커 터미널을 실행합니다.

이미지 직접 빌드하기

gist에 있는 Dockerfile을 통해 직접 도커 이미지를 빌드하는 방법입니다. 시간이 많이 걸려 실습 용으로는 추천하지 않습니다.

$ docker build https://gist.githubusercontent.com/haje01/7edb8b25f4c9a3b9c9d7/raw/5ad419b9472c93492cc48e551dc726fe4ec4dfe2/Dockerfile

Caffe 컨테이너

이미지에서 새 컨테이너를 띄우고, 그 안으로 들어가 보겠습니다.

컨테이너 시작

이미지가 설치되었다면, 다음의 명령으로 컨테이너를 시작합니다.

$ docker run -dit --name caffe haje01/caffe

시작된 컨테이너의 정보를 살펴봅니다.

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                                                                                           NAMES
4209a9436996        haje01/caffe        "/bin/bash"         2 seconds ago       Up 2 seconds                                                                                                                                        caffe

컨테이너 안으로 들어가기

이제 컨테이너 안으로 들어가겠습니다.(Linux/Mac)

$ docker exec -ti caffe bash

Windows에서는 다음과 같이 합니다.

$ winpty docker exec -ti caffe bash

간단히 테스트 해보겠습니다.

$ipython
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
Type "copyright", "credits" or "license" for more information.

IPython 4.0.0 -- An enhanced Interactive Python.

In [1]: import caffe
libdc1394 error: Failed to initialize libdc1394

가상머신 방식에서는 libdc1394 에러가 발생할 수 있으나, 무시해도 됩니다.

이제 Caffe를 사용할 수 있는 환경이 되었습니다.

학습 테스트

이 과정은 컨테이너 안에서 진행합니다. 먼저 Caffe가 설치된 폴더로 이동합니다.

cd /opt/caffe

학습 준비

모델과 레이블 데이터 받기위해 다음과 같은 명령을 실행합니다. 이 부분도 시간이 많이 걸립니다.

$ python scripts/download_model_binary.py models/bvlc_reference_caffenet

$ sh data/ilsvrc12/get_ilsvrc_aux.sh

학습!

드디어 학습을 시켜 보겠습니다.

$ python python/classify.py --print_results examples/images/cat.jpg foo

cat

*이 부분 유주원님의 블로그를 참고하였습니다. *

도커 팁

여기에서는 도커 관련 몇 가지 팁을 소개하겠습니다.

컨테이너 저장

컨테이너 안에서 작업한 내용은 컨테이너가 종료될 때 사라집니다. 컨테이너에서 나온 후, 다음과 같이 컨테이너의 내용을 이미지로 저장할 수 있습니다:

$ docker commit -m "Install caffe model & label data" -a "JeongJu Kim" 4209a9436996 YOUR-USER/caffe:v2

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
haje01/caffe        v2                  55545fcfcdd2        5 seconds ago       2.035 GB
haje01/caffe        latest              e085dde3f9e8        3 days ago          1.726 GB

이 이미지로 부터 다시 컨테이너를 띄우면 설치해둔 내용이 남아있어 편리합니다.

$ docker run -dit haje01/caffe:v2

도커 컨테이너와 호스트 OS간의 파일 공유

컨테이너를 실행할 때 다음과 같이 -v 옵션을 주면 컨테이너와 호스트 OS간 폴더를 공유할 수 있습니다.

$ mkdir docker-share
$ docker run -dit --name caffe -v `pwd`/docker-share:/shared haje01/caffe:v3

호스트 OS의 파일을 데이터로 주거나, 도커 안에서 산출한 결과물을 받을 때 좋겠습니다.

도커에 관련한 더 자세한 내용은 이재홍님의 책 을 추천드립니다.

심화 학습

MNIST

MNIST 데이터를 설치합니다.

$ ./data/mnist/get_mnist.sh
$ ./examples/mnist/create_mnist.sh

examples/mnist/lenet_solver.prototxt 파일 제일 아래의 solver_mode: GPUsolver_mode: CPU로 바꾸어 줍니다.

이제 다음처럼 학습을 시작합니다.

$ examples/mnist/train_lenet.sh

CPU여서 시간이 많이 걸립니다. GPU의 필요성이 느껴지네요.. 참고로 시각화된 MNIST 학습과정을 한 번 보시기 바랍니다.


감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment