LoginSignup
5
5

More than 3 years have passed since last update.

DVCで学習モデルのバージョンコントロール

Last updated at Posted at 2019-12-22

この記事は、LeapMind Advent Calendar 2019の22日目の記事です。

はじめに

ディープラーニングなどの機械学習で様々な実験を行なっていると、それに応じてたくさんのモデルが作られます。その際にどのモデルがどの学習によるものなのか、わからなくなってしまった経験はないでしょうか。プログラムのソースコードであればGITのようなバージョン管理システムを使うことで管理することができます。しかしながらGITは実験モデルのような巨大なバイナリファイルを扱うには適していません。そのようなソースコード以外のデータを管理するためのツールとして、DVCを紹介します。

前提

DVCを説明する上、こちらのTensorflow Tutorialを題材として使っていきます。見ての通り、学習したモデルを model.h5 というファイルに出力します。この model.h5 ファイルをDVCで管理していきます。

main.py
import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

model.save('model.h5')

DVCのインストールと初期化

まずはDVCのセットアップです。DVCはpipからインストールできます。

$ pip install dvc

まんまですね。次にDVCをプロジェクトに対して初期化します。 と、その前にGITのリポジトリを作成します。DVCはGITと併用して使う前提となっています。

$ git init

次に、今度こそDVCの初期化をします。

$ dvc init

このコマンドにより .dvc/ というディレクトリが作られ、DVCの設定などが置かれるようになります。

次に、以下のコマンドでモデルをDVCの管理下に置きます。

$ dvc add model.h5
100% Add|██████████████████████████████████|1.00/1.00 [00:00<00:00,  2.70file/s]

To track the changes with git, run:

    git add .gitignore model.h5.dvc

これにより model.h5 のコピーがDVCの管理下に置かれます。 そしてmodel.h5.dvc が生成され、代わりに model.h5.gitignore に追加されます。 model.h5.dvc はテキストファイルで、 model.h5 のハッシュ値など、DVCでの管理情報が記録されます。GITには model.h5 の代わりに model.h5.dvc をコミットすることで、GITに直接大きなファイルを置かなくて済むようになります。

次に、DVCの管理下においたデータを異なるディレクトリにプッシュし保管します。

$ dvc remote add -d origin ~/Projects/leapmind-advent-calendar-2019-12-22.dvc
Setting 'origin' as a default remote.
$ dvc remote list
origin  /Users/takumi.nakaso/Projects/leapmind-advent-calendar-2019-12-22.dvc
$ dvc push

これにより、 dvc remote で指定したディレクトリに model.h5 がコピーされて保管されます。これで、 model.h5 それ自体はDVCに、 model.h5.dvc はGITに管理されるという状態になります。逆に、

$ dvc pull

とすることで model.h5 を戻すこともできます。

終わりに

いかがでしたでしょうか。gitのような使い方で、ソースコードだけではなく実験モデルのようなデータも管理することができました。他にもPipelineなど独自の便利な機能がありますので、興味があれば使ってみてください。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5