Quản lý dữ liệu
Type: Build
Language:Python
Prerequisites: Phase 0, Lesson 01
Time: ~45 minutes
Mục tiêu học tập
- Load, stream, và cache tập dữ liệu bằng cách sử dụng Hugging Face
datasetsthư viện - Chuyển đổi giữa các định dạng CSV, JSON, Parquet và Arrow và giải thích các thỏa thuận của chúng
- Tạo các phân chia có thể tái tạo được bằng tàu/bảo hợp/bảo nghiệm với hạt ngẫu nhiên cố định
- Quản lý các tập tin mô hình lớn và tập tin dữ liệu bằng cách sử dụng
.gitignore, Git LFS, hoặc DVC
Vấn đề
Mỗi dự án AI bắt đầu với dữ liệu. Bạn cần tìm tập dữ liệu, tải xuống chúng, chuyển đổi giữa các định dạng, chia chúng để đào tạo và đánh giá, và phiên bản chúng để các thí nghiệm có thể tái tạo. Làm điều này bằng tay mỗi lần là chậm và dễ mắc lỗi. Bạn cần một dòng công việc lặp lại.
Khái niệm
graph TD
A["Hugging Face Hub"] --> B["datasets library"]
B --> C["Load / Stream"]
C --> D["Local Cache<br/>~/.cache/huggingface/"]
B --> E["Format Conversion<br/>CSV, JSON, Parquet, Arrow"]
E --> F["Data Splits<br/>train / val / test"]
F --> G["Your Training Pipeline"]Mặt ôm datasetsthư viện là cách chuẩn để tải dữ liệu cho công việc AI. Nó xử lý tải xuống, lưu trữ trước, chuyển đổi định dạng và phát trực tuyến ra khỏi hộp.
Hãy xây dựng nó
Bước 1: Lắp đặt thư viện tập dữ liệu
bashpip install datasets huggingface_hubBước 2: Lắp đặt một bộ dữ liệu
pythonfrom datasets import load_dataset
dataset = load_dataset("stanfordnlp/imdb")
print(dataset)
print(dataset["train"][0])Điều này tải xuống bộ dữ liệu xem phim IMDB. Sau khi tải xuống đầu tiên, nó tải từ bộ nhớ cache tại ~/.cache/huggingface/datasets/- Tôi không biết.
Bước 3: Tạo dòng dữ liệu lớn
Một số bộ dữ liệu quá lớn để chứa trên đĩa. Streaming tải chúng hàng xét mà không tải toàn bộ.
pythondataset = load_dataset("wikimedia/wikipedia", "20231101.en", split="train", streaming=True)
for i, example in enumerate(dataset):
print(example["title"])
if i >= 4:
breakStreaming cho bạn một IterableDatasetBạn xử lý các hàng khi chúng đến. Sử dụng bộ nhớ vẫn không đổi bất kể kích thước tập dữ liệu.
Bước 4: Các định dạng tập dữ liệu
datasetsthư viện sử dụng Apache Arrow dưới nắp. Bạn có thể chuyển đổi sang các định dạng khác tùy thuộc vào nhu cầu của đường ống của bạn.
pythondataset = load_dataset("stanfordnlp/imdb", split="train")
dataset.to_csv("imdb_train.csv")
dataset.to_json("imdb_train.json")
dataset.to_parquet("imdb_train.parquet")So sánh định dạng:
| Format | Size | Read Speed | Best For |
|---|---|---|---|
| CSV | Large | Slow | Human readability, spreadsheets |
| JSON | Large | Slow | APIs, nested data |
| Parquet | Small | Fast | Analytics, columnar queries |
| Arrow | Small | Fastest | In-memory processing (what datasets uses internally) |
Đối với công việc AI, Parquet là định dạng lưu trữ tốt nhất. Arrow là những gì bạn làm việc với trong bộ nhớ. CSV và JSON là cho trao đổi.
Bước 5: chia dữ liệu
Mỗi dự án ML cần ba phân chia:
- Train: Mô hình học hỏi từ điều này (thường là 80%)
- ValidationBạn kiểm tra tiến bộ trong quá trình đào tạo (thường là 10%)
- Test: Đánh giá cuối cùng sau khi đào tạo được hoàn thành (thường là 10%)
Một số bộ dữ liệu được chia trước khi được chia, khi không chia, hãy tự chia chúng:
pythondataset = load_dataset("stanfordnlp/imdb", split="train")
split = dataset.train_test_split(test_size=0.2, seed=42)
train_val = split["train"].train_test_split(test_size=0.125, seed=42)
train_ds = train_val["train"]
val_ds = train_val["test"]
test_ds = split["test"]
print(f"Train: {len(train_ds)}, Val: {len(val_ds)}, Test: {len(test_ds)}")Luôn đặt hạt giống để tái sinh.
Bước 6: Tải và cache mô hình
Các mô hình là các tập tin lớn.huggingface_hubthư viện xử lý tải xuống và lưu trữ.
pythonfrom huggingface_hub import hf_hub_download, snapshot_download
model_path = hf_hub_download(
repo_id="sentence-transformers/all-MiniLM-L6-v2",
filename="config.json"
)
print(f"Cached at: {model_path}")
model_dir = snapshot_download("sentence-transformers/all-MiniLM-L6-v2")
print(f"Full model at: {model_dir}")Các mô hình cache đến ~/.cache/huggingface/hub/Một khi tải xuống, chúng sẽ tải ngay vào các lần chạy tiếp theo.
Bước 7: xử lý các tệp lớn
Các trọng lượng mô hình và tập dữ liệu lớn không nên đi vào git. Ba tùy chọn:
Option A: .gitignore (simplest)
*.bin
*.safetensors
*.pt
*.onnx
data/*.parquet
data/*.csv
models/Option B: Git LFS (track large files in git)
bashgit lfs install
git lfs track "*.bin"
git lfs track "*.safetensors"
git add .gitattributesGit LFS lưu trữ các chỉ dẫn trong repo của bạn và các tệp thực tế trên một máy chủ riêng biệt. GitHub cung cấp cho bạn 1 GB miễn phí.
Option C: DVC (data version control)
bashpip 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 tạo ra nhỏ .dvcdữ liệu tự sống trong S3, GCS, hoặc một phần lưu trữ từ xa khác.
| Approach | Complexity | Best For |
|---|---|---|
| .gitignore | Low | Personal projects, downloaded data you can re-fetch |
| Git LFS | Medium | Teams sharing model weights via git |
| DVC | High | Reproducible experiments, large datasets, teams |
Đối với khóa học này,.gitignoreSử dụng DVC khi bạn cần tái tạo các thí nghiệm chính xác trên máy.
Bước 8: Các mẫu lưu trữ
Local storageHF cache xử lý điều này tự động.
Cloud storagelà cho bất cứ thứ gì lớn hơn hoặc được chia sẻ giữa các máy:
pythonimport os
local_path = os.path.expanduser("~/.cache/huggingface/datasets/")
# s3_path = "s3://my-bucket/datasets/"
# gcs_path = "gs://my-bucket/datasets/"DVC tích hợp trực tiếp với S3 và GCS:
bashdvc remote add -d myremote s3://my-bucket/dvc-store
dvc pushĐối với khóa học này, lưu trữ địa phương là đủ. lưu trữ đám mây trở nên có liên quan khi bạn tinh chỉnh trên các phiên bản GPU từ xa.
Các bộ dữ liệu được sử dụng trong khóa học này
| Dataset | Lessons | Size | What It Teaches |
|---|---|---|---|
| IMDB | Tokenization, classification | 84 MB | Text classification basics |
| WikiText | Language modeling | 181 MB | Next-token prediction |
| SQuAD | QA systems | 35 MB | Question answering, spans |
| Common Crawl (subset) | Embeddings | Varies | Large-scale text processing |
| MNIST | Vision basics | 21 MB | Image classification fundamentals |
| COCO (subset) | Multimodal | Varies | Image-text pairs |
Bạn không cần phải tải tất cả các bài học này ra ngay bây giờ.
Sử dụng nó
Dạy kịch bản tiện ích để xác minh mọi thứ hoạt động:
bashpython code/data_utils.pyNó tải xuống một tập dữ liệu nhỏ, chuyển đổi nó, chia nó, và in một bản tóm tắt.
Chuyển nó
Bài học này mang lại:
code/data_utils.py- tiện ích tải dữ liệu và lưu trữ nhớ cache có thể được sử dụng lạioutputs/prompt-data-helper.md- nhanh chóng để tìm ra bộ dữ liệu phù hợp cho một nhiệm vụ
Các bài tập
- Lắp
gluebộ dữ liệu vớimrpccấu hình và kiểm tra 5 ví dụ đầu tiên - Chuyển
c4tập dữ liệu và đếm bao nhiêu ví dụ bạn có thể xử lý trong 10 giây - Chuyển đổi một tập dữ liệu thành Parquet và so sánh kích thước tập tin với CSV
- Tạo một phân chia đường sắt/val/test 70/15/15 với hạt cố định và xác minh kích thước
Các điều khoản chính
| Term | What people say | What it actually means |
|---|---|---|
| Dataset split | "Training data" | A named subset (train/val/test) used at different stages of the ML lifecycle |
| Streaming | "Load it lazily" | Processing data row by row from a remote source without downloading the full dataset |
| Parquet | "Compressed CSV" | A columnar file format optimized for analytical queries and storage efficiency |
| Arrow | "Fast dataframe" | An in-memory columnar format used internally by the datasets library for zero-copy reads |
| Git LFS | "Git for big files" | An extension that stores large files outside the git repo while keeping pointers in version control |
| DVC | "Git for data" | A version control system for datasets and models that integrates with cloud storage |
| Cache | "Already downloaded" | A local copy of previously fetched data, stored at ~/.cache/huggingface/ by default |
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.