数据管理:把数据集与模型权重的存储、格式、版本管起来 本节摘要:数据是燃料,你怎么管它决定了你能跑多快。每个 AI 项目都从数据开始:找数据集、下载、在格式间转换、划分训练/验证/测试集、做版本管理以保证实验可复现。每次都手动做既慢又容易出错,你需要一套可重复的工作流。本节带你用 Hugging Face 库这套业界标准来加载、流式读取、缓存数据集,理解 CSV、JSON、Parquet、Arrow 四种格式的取舍(为什么 AI 工作里 Parquet 是最佳存储格式、Arrow 是内存工作格式),用固定随机种子做可复现的数据划分,并用 、Git LFS、DVC 三种方案管理大模型与大数据集文件。读完本节,你将有一套能贯穿全教程的数据管理流水线。
本节摘要:数据是燃料,你怎么管它决定了你能跑多快。每个 AI 项目都从数据开始:找数据集、下载、在格式间转换、划分训练/验证/测试集、做版本管理以保证实验可复现。每次都手动做既慢又容易出错,你需要一套可重复的工作流。本节带你用 Hugging Face
datasets库这套业界标准来加载、流式读取、缓存数据集,理解 CSV、JSON、Parquet、Arrow 四种格式的取舍(为什么 AI 工作里 Parquet 是最佳存储格式、Arrow 是内存工作格式),用固定随机种子做可复现的数据划分,并用.gitignore、Git LFS、DVC 三种方案管理大模型与大数据集文件。读完本节,你将有一套能贯穿全教程的数据管理流水线。
对应原课程:Phase 00 · Lesson 09 ·
data-management(原英文phases/00-setup-and-tooling/09-data-management/docs/en.md)。前置:第 01 节「开发环境」。
阅读完本节,你应当能够:
datasets 库加载、流式读取、缓存数据集。.gitignore、Git LFS、DVC 三种方案管理大模型与大数据集文件。每个 AI 项目都从数据开始。你需要找数据集、下载、转换格式、为训练与评估做划分、做版本管理以保证实验可复现。每次手动做既慢又易错——你需要一套可重复的工作流。
Hugging Face 的 datasets 库是 AI 工作加载数据的标准方式——开箱即用地处理下载、缓存、格式转换、流式读取。
💡 心智模型:
datasets把「数据从哪来、存哪、什么格式、怎么切」全统一成几行 API。底层用 Apache Arrow 做零拷贝读取,所以无论数据多大,内存占用都可控。
pip install datasets huggingface_hub
from datasets import load_dataset dataset = load_dataset("stanfordnlp/imdb") print(dataset["train"][0])
这会下载 IMDB 影评数据集。首次下载后,后续从 ~/.cache/huggingface/datasets/ 缓存加载。
有些数据集大到装不下磁盘。流式读取(streaming)逐行加载,不必下整个:
dataset = load_dataset("wikimedia/wikipedia", "20220301.en", split="train", streaming=True) for i, example in enumerate(dataset): print(example["title"]) if i >= 4: break
流式返回一个 IterableDataset,行到达就处理。无论数据集多大,内存占用恒定——这是处理 TB 级语料的关键。
datasets 底层用 Apache Arrow。可按流水线需要转成其他格式:
dataset.to_csv("imdb_train.csv") dataset.to_json("imdb_train.json") dataset.to_parquet("imdb_train.parquet")
| 格式 | 体积 | 读取速度 | 最适合 |
|---|---|---|---|
| CSV | 大 | 慢 | 人类可读、电子表格 |
| JSON | 大 | 慢 | API、嵌套数据 |
| Parquet | 小 | 快 | 分析、列式查询 |
| Arrow | 小 | 最快 | 内存处理(datasets 内部用) |
💡 AI 工作的格式心法:Parquet 是最佳存储格式,Arrow 是内存工作格式,CSV 与 JSON 留给数据交换。把日常训练数据存成 Parquet,体积小读取快,是工业界标配。
每个 ML 项目都要三个划分:
有些数据集预先分好了;没分就自己分:
dataset = load_dataset("stanfordnlp/imdb", split="train") split = dataset.train_test_split(test_size=0.2, seed=42) # 先分出 20% 测试 train_val = split["train"].train_test_split(test_size=0.125, seed=42) # 再从 80% 里分 12.5% 做验证 train_ds, val_ds, test_ds = train_val["train"], train_val["test"], split["test"]
⚠️ 设计警示:永远设种子(seed)。同一个种子每次产生同一个划分——这是实验可复现的基石。不设种子,今天的「测试集」和明天的不是同一份,所有指标都失去可比性。
模型文件很大。huggingface_hub 负责下载与缓存:
from huggingface_hub import hf_hub_download, snapshot_download model_path = hf_hub_download(repo_id="sentence-transformers/all-MiniLM-L6-v2", filename="config.json") model_dir = snapshot_download("sentence-transformers/all-MiniLM-L6-v2")
模型缓存到 ~/.cache/huggingface/hub/,下过一次后续秒载。
模型权重和大据集不该进 git。三种方案:
方案 A .gitignore(最简单)
*.bin *.safetensors *.pt *.onnx data/*.parquet data/*.csv models/
方案 B Git LFS(在 git 里追踪大文件)
git lfs install git lfs track "*.safetensors" git add .gitattributes
Git LFS 在仓库里存指针,实际文件存独立服务器。GitHub 免费 1 GB。
方案 C DVC(数据版本控制)
pip install dvc dvc init dvc add data/training_set.parquet git add data/training_set.parquet.dvc data/.gitignore git commit -m "Track training data with DVC"
DVC 生成小的 .dvc 文件指向你的数据,数据本身躺在 S3、GCS 等远程存储。
| 方案 | 复杂度 | 最适合 |
|---|---|---|
.gitignore |
低 | 个人项目、可重新下载的数据 |
| Git LFS | 中 | 团队经 git 共享模型权重 |
| DVC | 高 | 可复现实验、大数据集、团队协作 |
💡 本课程用
.gitignore就够了。等你需要跨机器精确复现实验时,再上 DVC——那是工业界的标准做法。
本地存储适合 10 GB 以内的数据集,HF 缓存自动处理。云存储适合更大或需跨机器共享的:
# DVC 直接集成 S3/GCS # dvc remote add -d myremote s3://my-bucket/dvc-store # dvc push
本课程本地存储够用;在远程 GPU 实例上微调时,云存储才变得必要。
| 数据集 | 用在哪 | 体积 | 教什么 |
|---|---|---|---|
| IMDB | 分词、分类 | 84 MB | 文本分类基础 |
| WikiText | 语言建模 | 181 MB | 下一 token 预测 |
| SQuAD | 问答系统 | 35 MB | 问答、片段抽取 |
| Common Crawl(子集) | 嵌入 | 不定 | 大规模文本处理 |
| MNIST | 视觉基础 | 21 MB | 图像分类入门 |
| COCO(子集) | 多模态 | 不定 | 图文对 |
不必现在全下,用到哪节下哪节。
格式层面,Parquet 是 AI 工作的存储首选——列式存储、压缩好、读取快,远胜 CSV/JSON。Arrow 是它的内存孪生,datasets 内部用它实现零拷贝读取。
大文件管理层面,三方案按复杂度递增:
.gitignore:零开销,但数据无版本,只能重新下。💡 经验法则:个人学习 →
.gitignore,小团队共享权重 → Git LFS,严肃可复现实验 → DVC。第 06 节的 Python 环境管理与本节的数据管理是一对孪生兄弟——前者管代码依赖的版本,后者管数据与模型的版本,合起来才是完整的「可复现实验」。
本节产出(原课程 code/ 与 outputs/):
data_utils.py:可复用的数据加载与缓存工具脚本,封装了加载、格式转换、划分、缓存路径检查等常用操作。新项目直接 import 使用。prompt-data-helper.md:一个提示词,告诉它你的任务类型与约束,让它推荐合适的数据集并给出加载代码。load_dataset 加载 glue 数据集的 mrpc 配置,检查前 5 个样本,打印其字段结构。c4 数据集,统计 10 秒内能处理多少条样本;再把这个数据集(取一个小子集)分别存成 CSV 与 Parquet,对比文件体积差异。.gitignore,把 Parquet 与模型权重挡在仓库外。datasets 是标准:Hugging Face 的库开箱处理下载、缓存、格式转换、流式读取。streaming=True 逐行处理,无论数据多大内存恒定——TB 级语料的关键。seed=42,可复现是实验科学的基石。.gitignore(简单)、Git LFS(团队共享)、DVC(可复现实验 + 云存储)。下一节,我们将进入「终端与 Shell」——把命令行调顺,让数据下载、模型训练、GPU 监控这些日常操作高效运转。