4. DVC 入门
好,咱们进入实操环节。前面聊了那么多数据版本控制的理念,现在该动手了。DVC 这东西,说白了就是给数据文件也配上 Git 那样的版本管理能力。我最早接触它的时候,团队正被几百 GB 的模型训练数据搞得焦头烂额——每次迭代都要手动备份整个数据集,硬盘都快塞满了。后来发现 DVC,嗯,算是彻底解放了。
4.1 环境准备:先看看你的工具箱
在装 DVC 之前,有几样东西你得先备好。我个人习惯先把环境理清楚,免得装到一半发现缺这缺那。
| 依赖项 | 最低版本 | 说明 |
|---|---|---|
| Python | 3.8 | DVC 基于 Python,推荐 3.9+ |
| Git | 2.0 | DVC 依赖 Git 做代码和元数据管理 |
| pip | 21.0+ | 用于安装 DVC 包 |
你想想看,如果 Git 都没装好,DVC 根本跑不起来。因为 DVC 的核心理念就是「用 Git 管代码,用 DVC 管数据」,两者是搭档关系。
4.2 安装 DVC:三种方式,任你选
安装 DVC 其实就一行命令的事。但根据你的使用场景,有三种常见方式。我一般推荐第一种,最省心。
方式一:pip 安装(最常用)
pip install dvc
这条命令会安装 DVC 核心功能。如果你需要跟云存储打交道,比如 S3、GCS、Azure,那就得装对应的扩展包:
pip install "dvc[s3]" # 支持 Amazon S3
pip install "dvc[gs]" # 支持 Google Cloud Storage
pip install "dvc[azure]" # 支持 Azure Blob Storage
pip install "dvc[all]" # 一次性装所有扩展
我个人习惯用 dvc[all],因为项目后期可能会换存储后端,提前装好省得再折腾。不过如果你硬盘空间紧张,按需安装就好。
方式二:conda 安装
如果你在用 Anaconda 管理环境,也可以用 conda:
conda install -c conda-forge dvc
这种方式的好处是 conda 会自动处理依赖,不会出现 pip 那种「装完发现缺动态链接库」的情况。我在 Windows 上遇到过几次 pip 安装后命令行找不到 dvc 命令,换成 conda 就没事了。
方式三:源码安装(不推荐新手)
如果你想尝鲜最新特性,或者给 DVC 贡献代码,可以从 GitHub 拉源码:
git clone https://github.com/iterative/dvc.git
cd dvc
pip install -e ".[all]"
不过说实话,除非你在做 DVC 二次开发,否则没必要这么搞。稳定版已经够用了。
dvc --version,如果能看到版本号(比如 3.0.0),说明装成功了。如果提示「命令未找到」,八成是 Python 的 Scripts 目录没加到 PATH 里。Windows 用户尤其要注意这点。
4.3 初始化 DVC:让项目拥有数据版本能力
装好之后,咱们来初始化一个 DVC 项目。这个过程跟 git init 很像,但 DVC 会额外创建一些配置文件。
步骤一:先初始化 Git 仓库
DVC 要求项目必须是一个 Git 仓库。所以第一步:
mkdir my-dvc-project
cd my-dvc-project
git init
这一步不能省。我记得有个同事上来就 dvc init,结果报错说找不到 Git 仓库,他还以为是 DVC 装坏了……
步骤二:运行 dvc init
dvc init
执行后,你会看到类似这样的输出:
Initialized DVC.
You can now commit the changes to Git:
git add .dvc/config .dvc/.gitignore
git commit -m "Initialize DVC"
DVC 会在项目根目录下创建一个 .dvc/ 文件夹,里面放着配置文件、缓存目录等。这个文件夹默认被 .gitignore 忽略,但 .dvc/config 和 .dvc/.gitignore 需要提交到 Git。
dvc init 做了什么?说白了就是三件事:
- 创建
.dvc/目录,存放 DVC 内部配置 - 设置默认的缓存位置(
.dvc/cache) - 生成
.dvc/config文件,记录远程存储等设置
步骤三:提交到 Git
按照提示,把初始化结果提交到 Git:
git add .dvc/config .dvc/.gitignore
git commit -m "Initialize DVC"
为什么要提交?因为团队成员拉取代码时,需要知道这个项目已经启用了 DVC。如果不提交,别人拿到代码还得自己 dvc init,容易搞乱配置。
4.4 理解 DVC 的核心文件结构
初始化完成后,咱们来看看 DVC 到底生成了什么。我画了一张图,帮你快速理解 DVC 的文件组织逻辑。
这张图展示了 DVC 初始化后的核心文件结构。你可能会问:.dvc/cache/ 是干嘛的?简单说,当你用 DVC 跟踪一个数据文件时,DVC 会把文件复制一份到缓存里,然后生成一个 .dvc 文件(比如 data.dvc)来记录这个文件的哈希值。Git 只跟踪这个 .dvc 文件,而不是原始数据文件。这样一来,Git 仓库就保持轻量,而数据文件由 DVC 管理。
4.5 配置远程存储:让数据有个「家」
初始化只是第一步。真正用起来,你还需要配置一个远程存储,用来存放数据文件。DVC 支持很多后端,我列几个常用的:
| 存储后端 | 配置命令示例 | 适用场景 |
|---|---|---|
| 本地目录 | dvc remote add myremote /path/to/storage |
单机测试、局域网共享 |
| Amazon S3 | dvc remote add myremote s3://mybucket/data |
云上团队协作 |
| Google Cloud Storage | dvc remote add myremote gs://mybucket/data |
GCP 生态项目 |
| SSH | dvc remote add myremote ssh://user@host/path |
自建服务器 |
配置远程存储的命令很简单:
dvc remote add myremote s3://my-dvc-bucket/data
这条命令会在 .dvc/config 里写入远程存储的地址。之后你 dvc push 的时候,数据就会上传到这个地址。
dvc push 时,DVC 不知道往哪推,报了一堆错。解决办法是设置默认远程:dvc remote default myremote。这样大家就不用每次手动指定了。
4.6 验证初始化:跑个简单的测试
为了确认一切正常,咱们做个快速测试。创建一个数据文件,然后用 DVC 跟踪它:
echo "hello, dvc" > data.txt
dvc add data.txt
你会看到类似这样的输出:
100% Adding...|████████████████| 1/1 [00:00, 1.29file/s]
To track the changes with git, run:
git add data.txt.dvc data.txt.gitignore
这说明 DVC 已经成功跟踪了 data.txt。它生成了 data.txt.dvc 文件,并把原始文件移到了缓存里。现在你可以提交这个 .dvc 文件到 Git:
git add data.txt.dvc data.txt.gitignore
git commit -m "Add data.txt with DVC"
嗯,到这里,DVC 的安装和初始化就完成了。你可能会觉得步骤有点多,但说白了就是「装软件 → 初始化 → 配置远程 → 开始用」这几步。一旦跑通一次,后面就顺了。
- DVC 依赖 Python 3.8+ 和 Git 2.0+
- 安装推荐用
pip install dvc,按需加扩展 dvc init必须在 Git 仓库内执行- 初始化后生成
.dvc/目录,包含配置、缓存等 - 远程存储配置用
dvc remote add,别忘了设默认 - 用
dvc add跟踪文件,生成.dvc元数据文件