数据科学中的版本控制:使用Git和DVC

数据科学项目中,版本控制正变得越来越重要。研究导向的工作使得跟踪数据、特征、机器学习模型、调参参数等所有变更变得至关重要。随着团队遍布全球和开源合作成为常态,数据科学生命周期的每个阶段都被版本化、跟踪、共享和监控。即使单独工作,版本控制也极大地帮助跟踪变更、更新或回滚变更。GitHub就是这样一个流行的工具,它使数据科学家/分析师能够利用版本控制。

GitHub使用一个名为Git的应用程序对代码进行版本控制。项目的所有文件都存储在一个称为仓库的中央远程位置。其简洁的用户界面和易于使用的命令使其成为版本文件的最佳选择。但是,数据科学项目也涉及数据文件和代码文件,显然不建议在GitHub上维护一个50GB的数据文件和多个版本。那么,是否有办法或变通方法来版本化数据文件并跟踪它呢?是的,可以通过DVC(数据版本控制)来实现这一点。

DVC使Git能够以与小型代码文件相同的性能处理大型文件和目录。仍然可以使用如git clone这样的命令,它不仅拉取代码文件,还拉取工作区中的相关数据文件。本文将探讨以下功能:查看DVC以及它如何与Git协同工作;创建分支并在不同分支之间切换;创建实验并跟踪代码和数据文件。

设置工作环境

将使用Kaggle的南非心脏病数据集。目标是预测chd,即冠状动脉心脏病(是=1或否=0)。一个简单的二元分类模型。首先,项目文件夹结构如下。随着后续部分文件的处理,这些文件夹/文件将被更新。

请参考博客——MLOps | 使用数据版本控制跟踪ML实验来设置项目。

DVC设置

如果还没有安装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

需要注意的关键点:

  • 所有的代码和配置文件都在Github上。
  • 两个数据集文件,615KB和20MB文件都在DVC远程仓库中(不在Github上)。
  • 执行DVC管道时,整个数据加载、数据分割、模型构建周期在dvc.yaml中定义,并使用DVC跟踪的相应数据集进行。
  • DVC足够智能,能够识别正在使用的Git代码版本,然后映射适当的数据集进行执行。

是否可以用一个分支的代码和另一个分支的数据集运行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管道使用了来自不同分支的数据集和代码库。
  • 数据集是一个20MB的文件,约有40万条记录,代码库构建了一个逻辑回归模型,如管道中定义的。
  • 成功执行了DVC管道,组合了分支。

已经学会了如何使用DVC控制数据的不同版本,以及如何设置和跟踪实验。对于每个实验,都会生成一个版本并记录指标。

希望本文对有所帮助。祝在数据版本控制和实验中一切顺利!

  • LinkedIn
  • GitHub
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485