はじめに
日本語の文書分類タスクをDockerのTensorFlowイメージを用いて学習、評価、予測を行いたかったのですが、pullしたてのそのままじゃ日本語使えなかったよ〜って話です。
TensorFlow with Docker
TensorFlowやKerasを手軽に試したいときの選択肢として、
Dockerイメージを利用する方法が挙げられます。
Docker HubにはTensorFlow公式のイメージがあるので、使わない手はありません。
$ docker pull tensorflow/tensorflow:latest-py3
Python3系が使いたかったので、タグにlatest-py3
を指定しています。
$ docker run --rm tensorflow/tensorflow:latest-py3 python -V
Python 3.5.2
バッチリですね。
ところが、
$ docker run --rm tensorflow/tensorflow:latest-py3 python -c "print('ほげ')"
Unable to decode the command from the command line:
UnicodeEncodeError: 'utf-8' codec can't encode character '\udce3' in position 7: surrogates not allowed
pullしたてのイメージでは、日本語を取り扱うことが出来ないようです。
ここでイメージのlocaleを確認しましょう。
$ docker run --rm tensorflow/tensorflow:latest-py3 locale -a
C
C.UTF-8
POSIX
なるほど確かに日本語環境を導入する必要がありそうです。
日本語ナイズなDockerイメージを作る。
冒頭でpullしたイメージをもとに、日本語使用可能なイメージをビルドしましょう。
Dockerfile
FROM tensorflow/tensorflow:latest-py3
ENV LANG ja_JP.UTF-8
RUN apt-get update \
&& apt-get install language-pack-ja-base language-pack-ja -y
CMD ["/run_jupyter.sh", "--allow-root"]
こちらのDockerfileをビルドしましょう!
$ docker build -t tf-jp .
pull直後のイメージでは失敗したpython -c "print('ほげ')"
を日本語ナイズされたイメージで再び実行してみます。
$ docker run --rm tf-jp python -c "print('ほげ')"
ほげ
お疲れ様でした!!
無事tensorflowコンテナで日本語が扱えるようになりました。
終わりに
そもそもの動機は日本語の文書をCNNで分類させたかったということでした。
最近はDockerにどっぷりなのですが、今回のように公式イメージに日本語環境が入っていないことが結構あったのでまとめてみました。
閲覧ありがとうございました!