はじめに
アイの歌声を聴かせて、冒頭17分だけでもみんな観て! nikkieです。
#アイの歌声を聴かせて
— 映画『アイの歌声を聴かせて』Blu-ray & DVD 7.27 on sale!! (@ainouta_movie) 2022年6月26日
🎵本編冒頭17分 大公開🎵
YouTubeへ‼️
▶️https://t.co/YfLKhJmMyy
Blu-ray&DVD発売までの1ヶ月限定公開です!
ぜひご覧ください!#アイうた pic.twitter.com/NFVS5Yv281
さて、最近、Data Science Version Control(以下、DVC)というツールがあることを知りました。
DVCでできることはたくさんあるようですが、まずは一歩目としてDVCによる、データサイエンスで扱うファイルのバージョン管理の素振りをまとめます。
目次
この記事のまとめ
以下のドキュメントやYouTube動画に沿って手を動かしています。
素振り内容
- DVCを使ってローカルマシンとリモートストレージでデータを同期
- DVCでデータのバージョン管理
DVCとは
iterative.ai社による「Open-source Version Control System for Machine Learning Projects」(機械学習プロジェクト向けのオープンソースなバージョン管理システム)を謳うツールです。
機械学習プロジェクトでは、データやモデルといった大容量のファイルを扱います。
大きなファイルはGitでは管理しづらいのですが、Gitと合わせてDVCを使うことでバージョン管理できます!
大きなファイルの管理はDVCが担当し、言わば Gitを拡張 してくれます(どうやるかはこの後をお楽しみに)
DVCを使うことで私たちは、大きなデータセットのようなGitの外側に置いておきたいファイルにまでGitによるバージョン管理を拡張できる(動画 10:251 意訳)
DVCのインストール
DVCはPythonで実装されており、pip
でインストールできます2:
pip install dvc[gdrive]
リモートストレージごとに必要な依存関係を含めてインストールしました。
今回はGoogleドライブを使っていきます。
you might need to install optional dependencies:
[s3]
,[gdrive]
,[gs]
,[azure]
,[ssh]
,[hdfs]
,[webdav]
,[oss]
. (引用元)
動作環境
DVCでデータバージョニング♪
初期設定の後
- ローカルマシンとリモートストレージでデータを同期
- DVCでデータのバージョン管理
の素振りをしていきます。
初期設定
git init
dvc init
隠しディレクトリ.dvc(とその中のファイル)と隠しファイル.dvcignoreができます3。
できたファイルをgit commit
して進みます。
mkdir data
以下では、機械学習プロジェクトで使う大容量ファイルをdata
ディレクトリに置きます。
ローカルマシンとリモートストレージでデータを同期
まずローカルマシンにデータを取得します。
dvc get https://github.com/iterative/dataset-registry get-started/data.xml -o data/data.xml
data/data.xml (14MB) のファイルが取得されます。
サイズは小さいと思うかもしれませんが、これを「機械学習プロジェクトで使う大容量ファイル」とみなして進めます。
大容量ファイルをGitではなくDVCで管理しましょう。
dvc add data/data.xml
2つのファイルができます。
この2つのファイルをgit commit
します。
続いてGoogleドライブ(リモートストレージ)と同期しましょう。
Googleドライブ(マイドライブ以下)にフォルダを作り、URLを控えます。
https://drive.google.com/drive/folders/{ID}
URLのID部分を使って、DVCを設定します。
dvc remote add -d storage gdrive://{ID}
-d
はデフォルトのリモートにする設定とのことです。
この設定により.dvc/config
が変更されます。
これをgit commit
しましょう。
リモートストレージの指定をしたら、データをリモートに同期しましょう。
dvc push
初回は、Googleドライブの認証・認可が必要になります。
ターミナルの出力に従い、表示されたAuthorization codeを入力すれば済みます4。
ローカルのデータを消しても、リモートからpullできます!5
rm data/data.xml dvc pull
どうやら.dvc/cacheの中身とGoogleドライブが同期しているようです。
DVCでデータのバージョン管理
data/data.xmlの容量を倍にします(14MB -> 28MB)。
cp data/data.xml /tmp/ cat /tmp/data.xml >> data/data.xml
データの変更をDVCで追跡します。
dvc add data/data.xml
メタデータdata/data.xml.dvc
に記録されたファイルサイズとハッシュが書き変わりました。
このファイルはGit管理しているので、Gitにコミットを作ります。
変更したデータをリモートストレージと同期しましょう。
dvc push
リモートストレージやローカルのキャッシュディレクトリには14MBのデータと28MBのデータ、両方が格納されます。
続く操作でdata/data.xml.dvc
を変更し、データを取り出します。
最後にdata/data.xml
を14MBに戻しましょう。
まずdata/data.xml.dvc
を1つ前のコミットに戻します
(最新のコミットはdata/data.xml
を28MBに変えた後にdvc add
した内容になっているため)。
git checkout HEAD^1 data/data.xml.dvc
メタデータdata/data.xml.dvc
は14MBに戻りました。
データを戻しましょう。
dvc checkout
data/data.xml
のサイズを見ると、14MBに戻っています!
このデータを14MBで扱っていきたければ、戻したdata/data.xml.dvc
をgit commit
します。
今回はデータをバージョン管理しましたが、データだけに限らず、モデルのファイル(pickleなど)も同様にDVCで管理できそうです!
終わりに
DVC、なかなか好感触です!
機械学習の実験を回しているとき「データ上書きしたら」って注意を払っているんですが、DVCに管理を任せると「上書きしても戻せばいいや」って前のめりにいけそうですね。
また、dvc add
などでデータのバージョン管理だけを導入できる(小さく始められる)のもよさそうです。
慣れたらパイプライン導入(おまけ参照)と進めていけそうです(バージョン管理だけ試していまいちなら引き返せる)。
DVC (Data science Version Control)のチュートリアル動画視聴。めっちゃよさそうhttps://t.co/TPFCkx9yu6
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月25日
dvc addなどでファイルを管理するだけで相当楽になりそう。簡単に戻せるから上書きとか心配しなくてよくなる
慣れたらdvc.yamlを書いてパイプライン定義。
小さく導入していけそうなのが好感触
おまけ:DVCで他にもできること
ここで示したデータのバージョン管理の他にも、機械学習プロジェクトを捗らせそうな機能があるようです!
パイプラインの定義・実行(dvc repro
)
DVCでDAGが定義でき(yamlで表現)、例えば「データ分割」「特徴量抽出」「モデル訓練」とスクリプトを順に実行させられるようです。
実行結果とパラメタはキャッシュされるので、「モデル訓練」だけパラメタを変えてパイプラインを実行できそう、捗りそう!
(AirflowやPrefectなどのワークフローエンジンのポジションをDVCも担えるってことですかね。モデル訓練でhydraなどは組合せられるのかな?)
実験管理(dvc exp
)
パイプラインを使って実験を回す例がYouTubeに見つかりました。
その後にdvc exp
がコマンドに加わったようで、こちらは積ん読です(さらに便利になっているといいな)。
-
文字起こしによると「and dvc is helping us extend git version control to files that we want to keep outside of git things like a big data set」↩
-
https://dvc.org/doc/install#install-as-a-python-library なお、macOSのbrewやLinuxのパッケージリポジトリからのインストールもできます↩
-
匿名化された使用情報のオプトアウトも案内されます。オプトアウトするやり方は https://dvc.org/doc/user-guide/analytics#opting-out を参照↩
-
依存関係にPyDrive2がありました。認証・認可に関してGoogleドライブの操作は https://qiita.com/ftnext/items/60ced8bc432bec6101f0#2-%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D が参考になるかもしれません(差分:Googleドライブで許可した後に表示されるAuthorization codeをターミナルに入力する必要があります)↩
-
動画にならって
rm -r .dvc/cache
とキャッシュの中まで消したところ、「failed to pull data from the cloud」とエラーになりました。これはIssueなどを確認してみたいですね。再度dvc get
して事なきを得ました(ファイル自体は変わらないため)↩