在数据科学项目中,版本控制正变得越来越重要。研究导向的工作使得跟踪数据、特征、机器学习模型、调参参数等所有变更变得至关重要。随着团队遍布全球和开源合作成为常态,数据科学生命周期的每个阶段都被版本化、跟踪、共享和监控。即使单独工作,版本控制也极大地帮助跟踪变更、更新或回滚变更。GitHub就是这样一个流行的工具,它使数据科学家/分析师能够利用版本控制。
GitHub使用一个名为Git的应用程序对代码进行版本控制。项目的所有文件都存储在一个称为仓库的中央远程位置。其简洁的用户界面和易于使用的命令使其成为版本文件的最佳选择。但是,数据科学项目也涉及数据文件和代码文件,显然不建议在GitHub上维护一个50GB的数据文件和多个版本。那么,是否有办法或变通方法来版本化数据文件并跟踪它呢?是的,可以通过DVC(数据版本控制)来实现这一点。
DVC使Git能够以与小型代码文件相同的性能处理大型文件和目录。仍然可以使用如git clone这样的命令,它不仅拉取代码文件,还拉取工作区中的相关数据文件。本文将探讨以下功能:查看DVC以及它如何与Git协同工作;创建分支并在不同分支之间切换;创建实验并跟踪代码和数据文件。
将使用Kaggle的南非心脏病数据集。目标是预测chd,即冠状动脉心脏病(是=1或否=0)。一个简单的二元分类模型。首先,项目文件夹结构如下。随着后续部分文件的处理,这些文件夹/文件将被更新。
请参考博客——MLOps | 使用数据版本控制跟踪ML实验来设置项目。
如果还没有安装DVC,请按照以下方式安装。更多信息请参考安装DVC。
pip install dvc
项目文件夹结构如下:
| .dvcignore
| .gitignore
| cm.csv
| dvc.lock
| dvc.yaml
| exp.txt
| params.yaml
| plots.html
| README.md
| requirements.txt
+---data
| +---processed
| | test_SAHeart.csv
| | train_SAHeart.csv
| ---raw
| SAHeart.csv
+---data_given
| SAHeart.csv
+---report
+---saved_models
| model.joblib
---src
| get_data.py
| load_data.py
| split_data.py
| train_and_evaluate.py
DVC允许在Git提交中捕获数据和模型的版本,同时将它们存储在本地或云存储中。它还提供了在不同数据内容之间切换的机制。
让从以下步骤开始:
Step 1: 初始化git和DVC。这将在工作目录中创建两个名为.git和.dvc的文件夹。
git init
git dvc
Step 2: 添加git远程并映射本地目录到Github仓库。
git remote add origin
Step 3: 将添加数据集data_given/SAHeart.csv以供dvc跟踪变更。这将生成一个文件SAHeart.csv.dvc。
dvc add data_given/SAHeart.csv
Step 4: 已经让GitHub知道正在使用DVC跟踪数据文件,这里是dvc文件。通过将dvc文件添加到git并提交来实现这一点。请注意,添加的是.dvc文件,而不是.csv。
git add data_given/SAHeart.csv.dvc
git commit -m "Dataset file size 615 KB"
Step 5: 将为存储数据集创建一个远程仓库,并让dvc知道数据源。这可以是Azure、AWS或Google Drive等。在例子中,将把它保存在本地机器上,并将其映射到dvc。
dvc remote add -d myremote data_given
Step 6: 一旦远程映射完成,可以将数据集推送到远程文件夹。
dvc push
Step 7: 在进一步操作之前,让检查一下git分支。
git log --oneline
Step 8: 让运行DVC管道,看看一切是否按预期工作。如果执行DVC管道,那么相应的615KB数据文件将用于模型构建。
dvc repro
按照上述步骤,创建了另一个分支,但这次使用的是文件大小为20MB的data_given/SAHeart.csv。生成了合成数据,为之前的文件添加了更多记录。如果执行DVC管道,那么相应的20MB数据文件将用于模型构建。
以下是拥有的两个分支,每个分支都映射到不同的数据文件。
274c7fc (HEAD) 600 KB dataset File
278fcfb 20 MB dataset File
需要注意的关键点:
是否可以用一个分支的代码和另一个分支的数据集运行DVC管道?是的,完全可以。由于模型构建是一个迭代过程,可能存在这样的情况:给定分支中有一些新特性,想检查这些新特性是否对另一个分支中的当前模型性能有影响。因此,不需要复制数据集并重现新特性,可以切换分支并利用现有的数据版本。
Step 1: 现在,让从278fcfb进行DVC检出,它指向一个20MB的数据文件。
git checkout 278fcfb data_given/SAHeart.csv.dvc
Step 2: 是时候进行DVC检出了,这将使用数据更新工作区。
dvc checkout
Step 3: 执行DVC管道。
dvc repro
需要注意的关键点:
已经学会了如何使用DVC控制数据的不同版本,以及如何设置和跟踪实验。对于每个实验,都会生成一个版本并记录指标。
希望本文对有所帮助。祝在数据版本控制和实验中一切顺利!