Kemas Kini Terakhir: 21 Mei, 2025

TL;DR – Format fail yang anda pilih boleh menjimatkan 30‑50 % masa latihan, mengurangkan kos penyimpanan sebanyak 1 %–5 %, dan memastikan model multi‑modal anda tidak tergelincir akibat data yang tidak selaras. Pilihan terbaik ialah bekas binari berkolum yang sedia untuk penstriman (TFRecord, WebDataset, Arrow/Parquet) yang menyimpan teks pra‑tokenisasi dan media pra‑enkod dalam satu shard yang dikawal versi.
Mengapa Format Fail Penting untuk Latihan AI
| Fakta | Apa maksudnya untuk anda |
|---|---|
| Format binari berkolum 30‑50 % lebih cepat berbanding CSV atau teks biasa | Pilih format yang berinteraksi secara langsung dengan perkakasan anda (GPU/TPU) dan aliran kerja (TensorFlow, PyTorch, Spark). |
| Tokenisasi atau penyahkodan imej yang tidak konsisten menjejaskan kualiti model | Bekukan aliran kerja pra‑pemprosesan sekali, kemudian simpan representasi sudah‑ditokenisasi atau pra‑enkod. |
| LLM berskala petabait menjimatkan berjuta‑juta dolar dengan pengurangan saiz 1 % | Gunakan bekas terkompres, bershard (ZSTD‑TFRecord, Arrow/Parquet dengan pengekodan kamus). |
| Model multi‑modal memerlukan metadata penjajaran yang diselaraskan | Simpan cap masa, kotak sempadan, ID kapsyen dalam rekod yang sama dan bukannya dalam fail berasingan. |
| Pematuhan peraturan kini menuntut data yang tidak boleh diubah dan disahkan hash | Hasilkan manifest (JSON/YAML) yang merekod skema, checksum, asal, dan versi. |
Kesimpulannya: format adalah barisan pertahanan pertama terhadap I/O yang perlahan, data bising, dan masalah pematuhan.
Konsep Teras & Istilah (Rujukan Pantas)
| Konsep | Definisi satu ayat | Kes penggunaan tipikal |
|---|---|---|
| Sharding | Membahagikan set data yang sangat besar kepada banyak fail kecil yang boleh dibaca secara bebas (contoh, shard 1 GB). | Pemuatan selari pada kluster latihan teragih. |
| Format Sedia untuk Penstriman | Fail yang boleh dibaca secara berurutan tanpa mencari secara rawak (TFRecord, WebDataset .tar). | Latihan terus dari S3/GCS tanpa salinan tempatan. |
| Storan Kolumnar | Data disimpan mengikut kolum bukannya baris (Parquet, Arrow). | Penapisan cekap bagi satu modality (contoh, muat hanya kapsyen). |
| Skema Self‑Describing | Fail menyematkan nama medan dan jenisnya sendiri. | Menjamin keserasian merentasi versi kod. |
| Penyahkodan Malas / Pra‑Tokenisasi | Menyimpan teks yang sudah ditokenisasi (int‑ID) atau embedding pra‑dikira. | Mengurangkan masa pra‑pemprosesan 2‑5× setiap epoch. |
| Rekod Multi‑Modal | Satu rekod logik yang menggabungkan imej, teks, audio, dan metadata. | Membolehkan pensampelan selaras untuk model visi‑bahasa atau audio‑teks. |
| Fail Manifest / Indeks | JSON/YAML kecil yang menyenaraikan semua shard, checksum, dan statistik per‑shard. | Pengesahan cepat, latihan boleh disambung semula, jejak audit. |
| Versi Data | Menganggap data seperti kod (DVC, LakeFS, Pachyderm). | Eksperimen yang boleh diulang dan pematuhan peraturan. |
Memilih Format yang Betul
| Format | Sokongan modality | Pemampatan | Penstriman | Skema | Ekosistem |
|---|---|---|---|---|---|
| TFRecord | Sebarang blob binari → teks, imej, audio | Terbina dalam GZIP/ZSTD | ✅ | Implisit (melalui tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | Multi‑modal (imej + teks + audio) | Luaran (gzip, zstd) | ✅ | Kunci‑nilai implisit | PyTorch DataLoader, webdataset lib |
| Apache Arrow / Parquet | Kolumnar, struktur bersarang, blob binari | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (self‑describing) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | Boleh dibaca manusia, fleksibel | Tiada (atau gzip) | ❌ | Implisit | Quick prototyping, small datasets |
| LMDB | Bacaan rawak pantas (kunci‑nilai) | Tiada (simpan blob terkompres) | ❌ | Implisit | Retrieval‑augmented generation |
| HDF5 | Kumpulan hierarki, array besar | Terbina dalam gzip/lzf | ❌ (perlukan chunking) | Implisit | Scientific data, audio spectrograms |
Rule of thumb:
- Training at scale → TFRecord, WebDataset, atau Arrow/Parquet (mereka menstrim, mampat, dan menyokong sharding).
- Kerja eksploratori → JSONL (boleh dibaca manusia, mudah diedit).
- Akses rawak berat (contoh, retrieval‑augmented generation) → LMDB.
Pelan Langkah‑ demi‑Langkah (Dari Fail Mentah ke Shard Siap Produksi)
Tentukan satu skema sumber‑kebenaran
message MultiModalExample { bytes image = 1; // JPEG‑XL atau AVIF repeated int32 caption = 2; // token IDs bytes audio = 3; // Opus atau FLAC map<string, string> meta = 4; // source_id, timestamp, etc. }Simpan
.proto(atau skema Arrow) bersebelahan set data.Kumpul & bersihkan aset mentah
- Teks: Unicode‑NFKC, buang aksara kawalan, hapus duplikasi.
- Imej: Tukar kepada PNG tanpa kehilangan terlebih dahulu, kemudian secara pilihan ke JPEG‑XL lossy (kualiti 85‑90 %).
- Audio: Resample kepada 16 kHz, PCM 16‑bit; enkod dengan Opus (lossy) atau FLAC (lossless).
Pra‑pemproses / Tokenisasi
Gunakan penokenizer yang tepat yang akan anda beri kepada model (contoh,tiktokenuntuk GPT‑NeoX). Simpan ID tokenint32[]yang terhasil terus dalam rekod.Serialkan setiap rekod
Pilih penyeri binari pantas: Protocol Buffers, FlatBuffers, atau Arrow IPC. Matlamatnya ialah satu rentetan bait per contoh yang boleh ditulis ke TFRecord atau tarball.Shard & mampat
- Saiz shard sasaran: 256 MiB – 1 GiB (optimum untuk permintaan S3 GET range).
- Mampat dengan Zstandard (tahap 3‑5) – penyahmampatan pantas, nisbah baik.
- Konvensi penamaan:
train-00000-of-01000.tfrecord.zst.
Jana manifest
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]Manifest adalah satu‑satu sumber kebenaran untuk pengesahan, latihan boleh disambung semula, dan audit.
Sahkan
Ambil sampel rawak 0.1 % rekod, dekod setiap medan, dan jalankan pemeriksaan kebijaksanaan (penyahkod imej, panjang token, durasi audio). Kira statistik global (liputan vokab, taburan resolusi) dan simpan dalam manifest.Versi & simpan secara tidak boleh diubah
Tolak shard + manifest ke bucket yang tidak boleh diubah (gs://my‑project/datasets/v1/). Tag dengan versi semantik (v1.0.0) dan daftar snapshot dalam sistem versi data (DVC, LakeFS).Muat dalam gelung latihan anda
# PyTorch + WebDataset example import webdataset as wds, torch, torchvision, torchaudio def decode(sample): img = torchvision.io.decode_image(sample["jpg"], mode=torchvision.io.ImageReadMode.RGB) txt = torch.tensor([int(t) for t in sample["txt"].decode().split()], dtype=torch.long) wav, _ = torchaudio.load(io.BytesIO(sample["wav"])) return {"image": img, "caption": txt, "audio": wav} ds = (wds.WebDataset("s3://my-bucket/train-{00000..00999}.tar.zst") .decode("torchrgb") .map(decode) .batched(64) .prefetch(2)) loader = torch.utils.data.DataLoader(ds, num_workers=8) for batch in loader: # feed to model … pass
Trend Terkini & Persiapan Masa Depan
| Trend | Mengapa penting sekarang | Tindakan cepat |
|---|---|---|
| Kontena multi‑modal bersatu (Meta’s MDS, DeepLake) | Satu jenis fail untuk teks, imej, video, audio, dan embedding, dengan versi terbina dalam. | Cuba pilot dengan DeepLake; ia berintegrasi dengan LangChain dan LlamaIndex. |
| Penyimpanan GPU‑direct tanpa salinan | NVMe‑over‑Fabric + GPUDirect membolehkan anda menstrim shard terkompres terus ke memori GPU. | Apabila anda mempunyai kolam NVMe‑SSD, aktifkan torch.utils.data.DataLoader(persistent_workers=True). |
| Format mesra evolusi skema | Arrow 13+ membolehkan anda menambah/membuang medan tanpa menulis semula keseluruhan set data. | Utamakan Arrow/Parquet untuk sebarang aliran kerja yang mungkin kemudian mengimport peta kedalaman, video, atau metadata tambahan. |
| Pra‑enkod self‑supervised | Menyimpan embedding imej CLIP atau embedding audio wav2vec mengurangkan pengiraan sebanyak 2‑3× untuk penalaan halus. | Tambah satu kolum tambahan image_emb (float16) ke jadual Arrow anda; simpan imej mentah untuk eksperimen masa depan. |
| Penyimpanan privasi‑selamat | TFRecord terenkripsi + enclave selamat sedang muncul untuk domain yang banyak mengandungi GDPR. | Nilai tf.io.TFRecordWriter dengan pembungkus enkripsi khusus jika anda mengendalikan PII. |
| Metrik AI berpusat data | Skor kualiti data (keyakinan OCR, metrik kabur, SNR) kini menjadi hiper‑parameter utama. | Simpan skor kualiti per‑shard dalam manifest dan tapis shard berkualiti rendah semasa latihan. |
Senarai Semak Siap Produksi
- Fail skema (
.protoatau skema Arrow) disimpan bersebelahan data. - Semua shard dimampat dengan codec pantas (ZSTD‑L3 disarankan).
- Saiz shard antara 256 MiB dan 1 GiB.
- Manifest mengandungi checksum, kiraan rekod, statistik per‑shard, dan hash git kod pra‑pemprosesan.
- Kawalan versi yang tidak boleh diubah (DVC, LakeFS, atau serupa).
- Metrik kualiti data dicatat per shard.
- Audit privasi selesai (penyembunyian PII, enkripsi pilihan).
- Pemuat ujian hujung‑ke‑hujung yang boleh membaca shard rawak tanpa ralat.
- README yang menjelaskan skema, langkah pra‑pemprosesan, dan cara menjana semula shard.
Mengikuti pelan ini akan memastikan aliran kerja latihan anda cepat, murah, dan boleh diulang—tiga tiang utama yang diperlukan oleh setiap pasukan LLM moden.
Tag: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training