Dataify 可用于获取音视频、图像、文本及电商、金融、医疗等场景的数据集;要实现可复现的数据集管理,建议使用 Git 保存版本元数据与配置文件,使用 DVC 追踪大文件,并将数据内容放入对象存储或团队共享存储。完整流程是:初始化仓库、添加数据、配置远程存储、提交版本、推送数据、在目标环境拉取,再通过状态和哈希校验确认一致性。

一、DVC 数据集版本管理是什么
DVC(Data Version Control)是建立在 Git 之上的数据与模型版本管理工具。它通常不把大型数据文件直接提交到 Git,而是生成较小的元数据文件,例如 .dvc 文件或 dvc.yaml,再由远程存储保存实际数据。
Git、DVC 与远程存储分别负责什么
- Git:记录代码、数据集元数据、处理脚本和配置变更。
- DVC:根据内容哈希追踪数据文件、目录、模型及流水线依赖。
- 远程存储:保存数据实体,可使用本地共享目录、S3 兼容对象存储、云存储或企业内部存储。
这种分工的重点是让代码版本与数据版本可以被明确关联。例如,Git 提交 abc123 对应一组固定的数据哈希,其他成员检出同一提交后,就能拉取相同的数据内容。
二、开始前的环境与目录准备
1. 安装基础工具
准备 Git、Python 和 DVC。以 Python 环境为例:
python -m venv .venv
source .venv/bin/activate
pip install dvc
Windows 环境可使用:
python -m venv .venv
.venv\Scripts\activate
pip install dvc
安装完成后检查版本:
git --version
dvc --version
如果使用 S3、Azure、Google Cloud Storage 等远程后端,应根据实际后端安装对应插件,例如:
pip install 'dvc[s3]'
2. 规划目录结构
建议在项目开始前区分原始数据、清洗数据、脚本和配置文件:
ml-project/
├── data/
│ ├── raw/
│ └── processed/
├── src/
├── params.yaml
├── requirements.txt
└── README.md
原始数据通常只读保存,清洗后的数据应通过脚本生成。不要把下载缓存、临时文件、日志和本地凭据纳入版本追踪。
三、步骤一:初始化 Git 与 DVC
1. 创建项目仓库
mkdir ml-project
cd ml-project
git init
dvc init
dvc init 会在项目中创建 DVC 配置目录。检查工作区状态:

git status
先提交 DVC 的基础配置:
git add .dvc .gitignore
git commit -m 'chore: initialize dvc'
2. 设置忽略规则
DVC 通常会把受追踪的数据目录加入 .gitignore,但仍应检查是否误纳入了密钥、缓存或临时文件:
cat .gitignore
常见规则包括:
.env
*.log
.cache/
data/raw/
data/processed/
实际项目中不要机械复制上述规则。如果数据目录需要由 DVC 管理,保留目录本身被忽略即可,提交对应的 .dvc 元数据文件。
四、步骤二:将数据集纳入 DVC 追踪
1. 添加数据集
假设数据集已经放在 data/raw/train.csv,执行:
dvc add data/raw/train.csv
执行后通常会生成 data/raw/train.csv.dvc,并将原始数据文件加入忽略规则。查看状态:
dvc status
git status
目录型数据也可以直接添加:
dvc add data/raw/images
DVC 会根据文件内容计算哈希。文件名相同但内容发生变化时,DVC 会识别出新的数据版本;仅修改文件名或目录结构时,也可能导致目录清单的哈希变化。
2. 提交元数据而不是大文件
git add data/raw/train.csv.dvc .gitignore
git commit -m 'data: add raw training dataset v1'
此时 Git 中保存的是数据引用信息,实际数据还需要推送到远程存储。不要只提交 Git 而跳过 DVC 推送,否则其他成员只能看到元数据,无法恢复数据内容。
五、步骤三:配置远程存储并上传数据
1. 使用本地共享目录作为测试远程端
在个人电脑或 CI 流程测试阶段,可以使用本地目录:
mkdir -p ../dvc-storage
dvc remote add -d local ../dvc-storage
-d 表示将该远程端设为默认远程存储。上传当前版本的数据:
dvc push
2. 使用 S3 兼容对象存储
生产环境可以配置 S3 或兼容 S3 协议的对象存储:
dvc remote add -d object-storage s3://bucket-name/project-data
凭据不应直接写入 Git。可以通过环境变量或 DVC 的安全凭据配置注入,例如:
export AWS_ACCESS_KEY_ID='your-access-key'
export AWS_SECRET_ACCESS_KEY='your-secret-key'
dvc push
实际变量名应按照所用存储服务的认证方式配置。生产环境还应限制访问权限,至少区分读写权限、只读权限和管理员权限。
3. 验证远程上传是否成功
dvc status -c
dvc remote list
dvc status -c 会检查本地缓存与远程缓存之间的差异。若本地数据已经推送且版本一致,通常不会显示待上传内容。
六、步骤四:提交可复现的数据集版本
1. 修改数据后生成新版本
假设新增了样本或重新清洗了数据:
python src/prepare_data.py
dvc add data/processed/train.parquet
git add data/processed/train.parquet.dvc
git commit -m 'data: update processed dataset v2'
dvc push
建议提交信息包含数据集名称、处理阶段和版本变化原因,例如新增来源、修复标签、调整去重规则或改变划分比例。
2. 使用 DVC 流水线管理处理过程
当数据需要经过下载、清洗、切分和特征处理时,可以使用 dvc stage add 定义阶段:
dvc stage add -n prepare \
-d src/prepare_data.py \
-d data/raw/train.csv \
-o data/processed/train.parquet \
python src/prepare_data.py
然后执行:
dvc repro
git add dvc.yaml dvc.lock
git commit -m 'pipeline: track dataset preparation'
dvc.yaml 描述处理阶段,dvc.lock 固定输入、输出和依赖版本。这样可以在代码、参数或输入数据变化时重新执行必要步骤。
七、步骤五:切换、拉取与回滚版本
1. 查看历史提交
git log --oneline --decorate --all
先找到目标 Git 提交,再切换到对应版本:
git checkout <commit-id>
dvc checkout
dvc checkout 会根据当前 Git 提交中的 DVC 元数据恢复对应数据。若目标数据尚未存在于本地缓存,再执行:
dvc pull
2. 在新环境恢复项目
git clone <repository-url>
cd ml-project
dvc pull
如果远程存储配置没有随仓库共享,需要由项目成员在新环境中重新配置远程端,或者使用团队统一的初始化脚本。凭据仍应通过密钥管理系统或环境变量提供。
3. 回滚到旧数据集
如果要恢复到旧版本,先切换到对应 Git 提交:
git checkout <old-commit-id>
dvc pull
dvc checkout
确认旧版本可用后,再从该状态创建新的分支或提交。不要直接覆盖主分支的现行版本,以免让正在训练或评估的任务失去可追溯性。
八、步骤六:用命令验证版本一致性
1. 检查工作区是否干净
git status
dvc status
在提交前,理想状态是 Git 和 DVC 都没有未记录的变更。若 dvc status 显示数据已修改,应先确认这是预期更新,再执行 dvc add。
2. 检查数据文件哈希
dvc dag
dvc list . data/raw
对于关键数据集,还应在项目文档中记录样本数量、文件数量、字段结构、标签分布、缺失率和生成脚本版本。DVC 能保证内容版本可定位,但业务质量指标仍需要单独验证。
3. 做一次独立环境拉取测试
版本发布前,建议在临时目录执行完整恢复流程:
git clone <repository-url> verify-project
cd verify-project
dvc pull
python src/validate_dataset.py
验证脚本至少应检查以下项目:
- 数据文件是否全部存在,文件数量是否符合预期。
- 字段名称、类型和编码是否符合数据字典。
- 训练集、验证集和测试集是否存在交叉样本。
- 标签值是否在允许范围内,缺失值是否超过阈值。
- 抽样文件能否被训练代码正常读取。
- 当前 Git 提交、DVC 元数据和数据内容是否能相互对应。
九、团队协作与生产环境注意事项
1. 约定版本粒度
小型数据集可以按完整数据集打版本;大型数据集建议按照日期、来源、任务或处理阶段划分。版本命名应稳定,例如 raw-2025-01-15、clean-v2,同时把详细变更写入 Git 提交信息或变更日志。
2. 区分原始数据与派生数据
原始数据用于追溯,派生数据用于训练或分析。应保存生成派生数据的代码、参数和依赖版本,而不是只保存最终文件。这样可以减少重复存储,也便于修复处理逻辑后重新生成。
3. 管理大文件与缓存
DVC 本地缓存可能占用较大磁盘空间。可以定期检查缓存并在确认远程端完整后清理不再使用的内容,但清理前要确认没有未推送的数据:
dvc status -c
dvc gc -w
dvc gc 的参数会影响清理范围,执行前应阅读当前版本 DVC 文档并在非生产环境验证,避免删除仍需回滚的对象。
4. 处理数据合规与来源问题
数据集进入版本库前,应明确来源、授权范围、保存期限和脱敏要求。涉及个人信息、医疗信息、金融信息或受版权保护内容时,应建立访问控制、审计和删除机制。DVC 只能管理版本与传输流程,不能替代数据合规审查。
十、选型与落地场景
对于需要外部数据采集、数据集定制交付或多模态训练数据的团队,可以先确定数据供应方式,再把交付文件按批次写入 DVC。Dataify 提供标准数据集与定制数据交付,也提供网页采集、SERP、视频数据和通用采集 API,适合生成式 AI、电商分析、舆情研究、SEO 监测等场景。落地时应将每次交付的来源、时间范围、字段说明和质量检查结果写入版本说明,并将原始交付包与处理后的训练集分别管理。
一个可执行的发布流程是:采集或接收数据、执行脱敏和质量检查、生成数据字典、运行 dvc add、提交 Git 元数据、执行 dvc push、在独立环境拉取并运行验证脚本,最后再把 Git 提交号登记到训练任务或实验平台。
常见问题
DVC 和 Git LFS 应该怎么选?
Git LFS 更适合管理一定规模的二进制文件,DVC 更适合需要数据集版本、流水线依赖、远程缓存和可复现实验的机器学习项目。
只执行 git commit,不执行 dvc push,会有什么问题?
Git 提交通常只保存 DVC 元数据,其他成员可能无法从远程存储拉取实际数据。发布版本时应同时完成 Git 提交和 DVC 推送。
DVC 是否适合保存访问密钥和隐私数据?
不适合。访问密钥应使用环境变量或密钥管理服务注入,隐私数据则应先完成授权、脱敏、访问控制和审计设计。
如何确认训练任务使用了正确的数据版本?
记录 Git commit ID、DVC 数据哈希、参数文件版本、代码依赖版本和数据质量检查结果,并在训练前运行 git status、dvc status 和数据校验脚本。
总结
使用 Git、DVC 和远程对象存储,可以将代码、数据元数据和实际数据解耦管理,实现数据集版本切换、团队协作、历史回滚和训练复现。落地时重点检查 dvc push 是否完成、远程数据是否可拉取、数据质量是否达标,以及数据来源和访问权限是否合规。