MacではCognitive Toolkit (Microsoft Cognitive Toolkit) (以下 cntk) をインストールすることが面倒だった。。。。
Intel MKL をMacにインストールするが大変なので、 以前からDockerを使ってcntkを動かすことにしていた
blog.tottokug.com
Dockerでcntkのコンテナを立ち上げておけば、そのコンテナ内で実行したりBrainScriptを編集する事は出来るけど、なんかいまいち効率が悪い気がする。
手元の環境でBrainScriptを編集して、
Containerで実行みたいな手軽にテストしていける環境が欲しかった。
普段はVisual Studio CodeでBrainScriptを書くことがおおいので、できればその中で完結させたかった。
そこで、Makefileでいい感じにBrainScript用とデータ用のVolume Containerを作り、データやBrainScriptのファイルをいれておき、
cntk実行用のContainerに2つのVolume Containerをマウントした状態で起動するというMakefileを作ってみた。
DOCKER_IMAGE := microsoft/cntk:1.7.2-runtime-cpu
SCRIPT_MOUNT_POINT := /var/cntk/scripts
DATA_MOUNT_POINT := /var/cntk/data
SCRIPT_VOLUME_CONTAINER := CNTKbrainscript000000
DATA_VOLUME_CONTAINER := CNTKdata000000
BS_DIR := $(CURDIR)/scripts
DATA_DIR := $(CURDIR)/data
all: scriptvc
docker run --rm --volumes-from ${SCRIPT_VOLUME_CONTAINER} --volumes-from ${DATA_VOLUME_CONTAINER} ${DOCKER_IMAGE} cntk configFile=${SCRIPT_MOUNT_POINT}/branddetect.cntk
shell: scriptvc
docker run --rm -it --volumes-from ${SCRIPT_VOLUME_CONTAINER} --volumes-from ${DATA_VOLUME_CONTAINER} ${DOCKER_IMAGE} /bin/bash
scriptvc: datavc
$(eval SCRIPT_VOLUME_EXISTS := $(shell docker ps -a --format={{.Names}} --filter=name=${SCRIPT_VOLUME_CONTAINER} | wc -l |awk '{print $1}'))
ifeq ($(SCRIPT_VOLUME_EXISTS),0)
@echo "#========# create scripts volume #========#"
docker create -v ${SCRIPT_MOUNT_POINT} --name ${SCRIPT_VOLUME_CONTAINER} busybox
else
@echo "#========# already exists script volume #========#"
endif
docker cp ${BS_DIR}/ ${SCRIPT_VOLUME_CONTAINER}:${SCRIPT_MOUNT_POINT}/
datavc:
$(eval DATA_VOLUME_EXISTS := $(shell docker ps -a --format={{.Names}} --filter=name=$(DATA_VOLUME_CONTAINER) |wc -l |awk '{print $1}' ))
$(info $(DATA_VOLUME_CONTAINER))
$(info $(DATA_VOLUME_EXISTS))
ifeq ($(DATA_VOLUME_EXISTS),0)
$(info #========# create data volume #========#)
docker create -v ${DATA_MOUNT_POINT} --name ${DATA_VOLUME_CONTAINER} busybox
docker cp -L ${DATA_DIR}/ ${DATA_VOLUME_CONTAINER}:${DATA_MOUNT_POINT}/
else
$(info #========# already exists data volume #========#)
endif
こんなMakefileを作っておけばVisual Studio CodeでIntegrated Terminalを開いておいて、 makeと打てばBrainScriptを手軽に動作させることが出来る。
こんな感じでVisual Stuio Code内だけで全て完結できて便利。