在现代 AI 项目中,数据和模型的规模正迅速膨胀至 TB 甚至 PB 级别。传统的版本控制系统(如 Git)专为源代码设计,无法有效处理如此庞大的二进制文件。将大型文件直接提交到 Git 仓库会导致仓库膨胀、克隆缓慢,并很快触及存储限制。
Data Version Control (DVC) 是专门为解决这一痛点而设计的工具。它允许我们将 Git 用于元数据和代码,同时将大型文件(数据集、模型权重)存储在外部远程存储(如 S3、GCS、Azure Blob)中。DVC 不仅提供版本控制,还提供了强大的管道(Pipeline)追踪能力,是 MLOps 基础设施中不可或缺的一环。
DVC vs. Git LFS 简述: Git LFS 侧重于文件存储,将大文件替换为指针。而 DVC 更侧重于数据科学和机器学习的端到端可复现性,它能更好地处理目录、追踪数据来源、并集成到 ML 管道中。
1. 环境准备与初始化
我们将使用 AWS S3 作为远程存储的示例,这是处理 TB 级数据最常见的选择。
步骤 1.1: 安装 DVC
根据您的远程存储类型,安装相应的 DVC 扩展包:
pip install dvc[s3] # 如果使用 AWS S3
# 或 pip install dvc[gdrive], dvc[azure], dvc[gcs] 等
步骤 1.2: 初始化 Git 和 DVC 仓库
mkdir ai-project-tb-scale
cd ai-project-tb-scale
git init
dvc init
2. 配置远程存储
DVC 初始化后,我们需要告诉它将 TB 级数据存储在哪里。假设我们在 S3 上有一个名为 my-tb-scale-bucket 的存储桶。
# 假设您已配置好 AWS CLI 凭证
# 配置 DVC 远程存储,并设置为默认 (-d)
dvc remote add -d my_s3_storage s3://my-tb-scale-bucket/dvc-store
# 检查配置
cat .dvc/config
输出应类似于:
[core]
remote = my_s3_storage
[remote "my_s3_storage"]
driver = s3
url = s3://my-tb-scale-bucket/dvc-store
将 DVC 配置和 gitignore 文件添加到 Git:
git add .dvc/config .dvc/.gitignore
git commit -m "Initialize DVC and configure S3 remote"
3. 追踪和版本化 TB 级数据集
假设我们有一个位于 data/raw 下的 5TB 原始数据集。
步骤 3.1: 追踪大型数据集
DVC 追踪文件或目录非常简单,使用 dvc add 命令。DVC 会计算文件哈希,并在 .dvc 文件中存储指向该数据的指针,同时将实际数据内容移入 DVC 缓存(dvc-store)。
# 假设 data/raw 目录已存在,并且包含大量文件
dvc add data/raw
# 此时,DVC 生成了元数据文件 data/raw.dvc
ls data/raw.dvc
data/raw.dvc 文件内容示例如下:
outs:
- md5: 5747a98818f08f2378f8709e133e8a5a.dir
path: raw
步骤 3.2: 提交元数据并同步数据
至关重要的一点是:我们只将 **.dvc 元数据文件提交到 Git。** 实际数据通过 dvc push 推送到 S3。
# 1. 将元数据文件提交到 Git
git add data/raw.dvc
git commit -m "Add TB raw dataset V1 metadata"
# 2. 将实际数据推送到 S3 远程存储
dvc push
4. 模型版本管理与切换
模型的权重文件通常也非常大(例如,LLaMA 70B 模型可能超过 140GB)。模型管理和数据管理流程一致。
步骤 4.1: 追踪模型文件
假设我们有一个训练好的模型 models/best_model.pt。
dvc add models/best_model.pt
git add models/best_model.pt.dvc
git commit -m "Trained and tracked model V1"
dvc push
步骤 4.2: 切换版本实现可复现性
假设团队成员 A 训练了一个新模型 V2,并更新了数据。
# ... 重新训练模型,生成 models/best_model.pt V2
# ... 更新数据 data/raw
dvc add data/raw models/best_model.pt
git commit -m "Dataset and Model update V2: improved accuracy"
dvc push
如果团队成员 B 需要回溯到 V1 版本进行验证或调试:
- 确定 V1 的 Git 提交哈希 (例如 a1b2c3d4)
- 切换 Git 状态
# 切换 Git 到 V1 的提交
git checkout a1b2c3d4
# DVC 自动同步数据:根据当前 Git 状态下的 .dvc 文件,从 S3 拉取对应的 TB 级数据和模型文件
dvc checkout
执行 dvc checkout 后,本地 data/raw 目录和 models/best_model.pt 文件将准确地恢复到 V1 提交时对应的状态,确保了实验的完全可复现性。
汤不热吧