HANDAI JK Engineering Blog

HANDAI JKの技術ブログです

TRAINSを使ってみる

皆さんこんにちは。HANDAI JKの赤沢と申します。

本日は機械学習管理ツール、TRAINSを使ってみるお話をさせていただこうと思います。技術系の話に寄っています。 TRAINS自体も開発途上であり多分すぐに仕様などが変わると思うので、その時々で良い感じにやってください。このページの更新もしてくれるとなおgood…

TRANSとは

ディープラーニングなどの機械学習の研究や実験をやっている人なら分かるかと思いますが、学習を回すときのデータやログ、ハイパーパラメータの値、結果などのかんりっていうのが、実験が進むにつれてどんどん複雑になってぐちゃぐちゃになってくちゃくちゃになってしまうものです。 TRAINはそれら機械学習で煩雑になりがちな部分を簡単に管理、共有できるOSS(オープンソースソフトウェア)です。 allegro.aiという会社が開発中で、現在(2020/02/07)β版となっています。

allegro.ai : 2016年設立で、多数の企業から投資を受けており現在の資金は$11M(11億)くらいらしいです。 本社はイスラエルのRamat Genにあって、主にディープラーニングやコンピュータビジョンに関するライフサイクル管理プラットフォームの開発を行っています 。

できること、魅力

  • 実験結果、ログの保存共有、バージョンコントロール
    • lossやaccuracy
    • ハイパーパラメータ、画像、グラフ、使用パッケージ
    • AWSGCP、Azureなどのクラウドサービスへのアップロード
    • gitのリポジトリ、コミットID、差分も記録
  • 手軽に使える
    • pipでインストールしてプログラムに二行追加するだけです。

(注)対応しているライブラリでしか使えないみたいです(TensorFlow、Pytorch、Keras、Scikit-learn)。 - 自前のserverを使う時もdockerを使用するのでとても楽チン。

実験結果の管理から解放!

使い方

TRAINSはpythonのパッケージとして提供されておりpipからインストール可能です。

pip install trains

コードを書き足すのは二行だけで、これだけでほぼ全ての記録を取ってくれます。 また、残しておきたい変数などは別途追記すれば記録できます。

from trains import Task
task = Task.init(project_name=`examples`, task_name='absl example')

実行するとコンソールにURLが出力されるのでそこに飛んでください。

すると結果が表示されます。 ハイパーパラメータやモデルの情報なども見れます。 図は対応しているライブラリで出力すればOKです(Matplotlib & Seaborn)。

データ保存期間

上記のようにプログラムに二行足しただけだと、trainsのデモサーバーに保存されるようになっています。 そしてこのでもサーバーは毎日24時にリセットされてしまうみたいです。 なので本格的に運用するにはtrains-serverをインストールして自前でサーバーを立ち上げ、そこにデータを保存していってください。

trains-serverの使い方

基本的にtrains-serverのREADME、installation通りに行えばいけます。

  • dockerを使用します。
  • ログイン処理も簡単。(ですが、パスワードをymlファイルにベタ書きしなければならないので、ここに関しては怪しすぎますね。笑) サーバーのセットアップが完了したら、trains に飛んで、README、Configration Your Own Trains Serverの通りに行ってください。

  • trains initコマンドで、セットアップ時にserverのIPとポートを入力 or マニュアルで作業(~/.trains.conf)することになります。これをしなかったらデモサーバーで運用されます。

これで完了です。TRAINSのコードを追記したプログラムで実行してください。

LinuxMacOS Xで使用可能なdockerイメージは予め準備されています。 Windowsの場合は、VMで動かすLinuxの上でdockerを動かすことが推奨されています。

実際にやったコマンド(作業記録)

私が実際に動かしたときのコマンドを記録しておきます。

192.168.*.*(dockerインストール済みのLinuxリモートサーバー) にサーバーを立てました。

コマンドの意味はわかると思うので細かい説明は省略します。

docker pull allegroai/trains
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo rm -R /opt/trains/  (<-コンフリクトが起きてなければ不要)
sudo mkdir -p /opt/trains/data/elastic
sudo mkdir -p /opt/trains/data/mongo/db
sudo mkdir -p /opt/trains/data/mongo/configdb
sudo mkdir -p /opt/trains/logs
sudo mkdir -p /opt/trains/config
sudo mkdir -p /opt/trains/data/fileserver
sudo chown -R 1000:1000 /opt/trains
git clone https://github.com/allegroai/trains-server.git
cd trains-server
/usr/local/bin/docker-compose -f docker-compose.yml up

そしてサーバーが立ち上がり、ローカルから192.168..:8080を見に行くと正常動作が確認できました。