データバージョン管理ツール「DVC」を導入する

データバージョン管理ツール「DVC」を導入する

データバージョン管理ツールのDVCを導入し、データセットをDVCで管理する方法について説明します。

目次

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

DVCをインストールして初期化を行います。

DVCはpipコマンドまたはcondaコマンドでインストールします。

$ pip install dvc
または
$ conda install -c conda-forge dvc

次にDVCの初期化を行いますが、Gitの初期化を行なっていない場合は先にgit initを実行してください。

プロジェクトルートで以下のコマンドを実行します。

$ dvc init
Initialized DVC repository.

You can now commit the changes to git.

+---------------------------------------------------------------------+
|                                                                     |
|        DVC has enabled anonymous aggregate usage analytics.         |
|     Read the analytics documentation (and how to opt-out) here:     |
|             <https://dvc.org/doc/user-guide/analytics>              |
|                                                                     |
+---------------------------------------------------------------------+

What's next?
------------
- Check out the documentation: <https://dvc.org/doc>
- Get help and share ideas: <https://dvc.org/chat>
- Star us on GitHub: <https://github.com/iterative/dvc>

コマンドを実行すると、.dvcと.dvcignoreが作成されます。

一旦変更をコミットしましょう。

データセットの管理先を設定する(リモートストレージ)

機械学習やディープラーニングで使用するデータセットはサイズが非常に大きく、Gitリポジトリで管理するのに適していません。

ここではAmazon S3にデータセットを保存する手順で説明します。S3が使用できなくて、NASやファイルサーバーがある場合はそちらを使っていただいても構いませんし、大容量ディスクがPCに搭載されていればそちらも選択しても構いません。

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

AmazonS3FullAccessポリシーをもったユーザーをAWS CLIに設定します。

またアップロードするS3バケットを用意してください(アクセス範囲には十分ご注意ください)。

$ dvc remote add -d main s3://datascience-dvc-remote-storage
Setting 'main' as a default remote.

リモートストレージを設定すると、.dvc/configに設定が書き込まれます。

[core]
    remote = main
['remote "main"']
    url = s3://datascience-dvc-remote-storage

リモートストレージを追加したら変更をコミットしておきましょう。

データセットを追加する

設定できたのでデータセットを追加してみます。ここではKaggleのTitanicのデータセットを登録します。

$ mkdir -p datasets/titanic
$ cd datasets/titanic
$ kaggle competitions download -c titanic
$ unzip titanic.zip
$ rm titanic.zip
$ ls
gender_submission.csv   test.csv                train.csv

この時点では、追加したファイルは未追跡のファイルとして認識されています。

次に、DVCで管理するように設定します。

$ dvc add datasets/titanic
100% Adding...|█████████████████████████████████████████████████|1/1 [00:00, 43.52file/s]
                                                                                                                                                                                  
To track the changes with git, run:

        git add datasets/titanic.dvc datasets/.gitignore

To enable auto staging, run:

        dvc config core.autostage true

新たにdatasets/titanic.dvcdatasets/.gitignoreが作成されました。

datasets/titanic.dvctitanicディレクトリのMD5ハッシュ等の情報を保持しており、

outs:
- md5: bf1a6a19059092be578a3807608e236c.dir
  size: 93081
  nfiles: 3
  path: titanic

datasets/.gitignoreはDVCで管理するように指定したtitanicディレクトリが設定されています。

/titanic

ここまでの変更をコミットしておきましょう。

リモートストレージに保存する

今の状態は追加したデータセットをGitリポジトリの管理下から除外し、管理情報だけをGitリポジトリで管理するようにしただけです。実際のデータセットはローカルにしか存在しません。

これをさきほど設定したS3バケットに保存しましょう。

dvc pushコマンドで保存できますが、これまでの手順通りに進めた場合、以下のようにエラーが発生します。

$ dvc push
ERROR: unexpected error - s3 is supported, but requires 'dvc-s3' to be installed: No module named 'dvc_s3'

Having any troubles? Hit us up at https://dvc.org/support, we are always happy to help!

DVCではS3をサポートしていますが、追加のモジュールが必要となるようです。では、モジュールを追加します。

$ pip install dvc-s3
または
$ conda install -c conda-forge dvc-s3

DVCをインストールしたときと同じ方法でインストールしてください。インストールができたら、再度dvc pushコマンドを実行します。

$ dvc push
4 files pushed

コンソールに出力された内容をみると、4ファイル保存したようですが、datasets/titanicディレクトリには3ファイルしかないはずです。リモートストレージに保存されている内容を確認してみましょう。

$ aws s3 ls s3://datascience-dvc-remote-storage
                           PRE 02/
                           PRE 61/
                           PRE b5/
                           PRE bf/
$ aws s3 ls s3://datascience-dvc-remote-storage/02/
2023-01-07 22:25:47      28629 9c9cd22461f6dbe8d9ab01def965c6
$ aws s3 ls s3://datascience-dvc-remote-storage/61/
2023-01-07 22:25:47      61194 fdd54abdbf6a85b778e937122e1194
$ aws s3 ls s3://datascience-dvc-remote-storage/b5/
2023-01-07 22:25:47       3258 6943b6ee3d9af0913ee5dd83b3d729
$ aws s3 ls s3://datascience-dvc-remote-storage/bf/
2023-01-07 22:25:47        218 1a6a19059092be578a3807608e236c.dir

最後のファイルだけ.dirとなっており、上3ファイルが各CSVファイルで、一番最後がtitanicディレクトリになります。

リモートストレージからデータセットを取得する

前述のとおり、データセット自体はGitリポジトリで管理されていません。そのため、新たにリポジトリをcloneした場合、データセットが存在状態となります。ですので、リモートストレージからデータセットをベット取得してくる必要があります。

ここでは、titanicディレクトリを削除してからデータセットを取得してみます。

$ rm -rf datasets/titanic
$ dvc pull
A       datasets/titanic/                                                                                                                                                         
1 file added
$ ls datasets/titanic
gender_submission.csv   test.csv                train.csv

データセットがdvc pullコマンドを実行することで取得できました。

また、引数でdvcファイルを指定することで、明示的に特定のファイル/ディレクトリだけを取得することができます。

$ dvc pull datasets/titanic.dvc

必要なデータセットだけ取得できるため、実務ではこちらの方がよく使うことになると思います。ただし、DVCの管理下に追加する単位が取得できる最小単位となるため、データセット単位で管理下に加えるのか、ファイル単位で管理下に加えるのかはプロジェクトによって検討する必要があります。

最後に

DVCでは、単にデータセットを管理するツールではなく、他にも機能があります。本記事では、その中のデータセットの管理について説明しました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次