Terakhir Diperbarui: 21 Mei, 2025

TL;DR – Format file yang Anda pilih dapat mengurangi 30‑50 % waktu pelatihan, memotong biaya penyimpanan sebesar 1 %–5 %, dan mencegah model multi‑modal Anda tersandung data yang tidak selaras. Pilihan terbaik adalah kontainer biner berorientasi kolom yang siap streaming (TFRecord, WebDataset, Arrow/Parquet) yang menyimpan teks yang telah dipra‑tokenisasi dan media yang telah dipra‑enkode dalam satu shard yang dikontrol versi.
Mengapa Format File Penting untuk Pelatihan AI
| Fakta | Apa artinya bagi Anda |
|---|---|
| Format biner berorientasi kolom 30‑50 % lebih cepat dibandingkan CSV atau teks biasa | Pilih format yang berkomunikasi langsung dengan perangkat keras Anda (GPU/TPU) dan pipeline (TensorFlow, PyTorch, Spark). |
| Tokenisasi atau dekoding gambar yang tidak konsisten merusak kualitas model | Bekukan pipeline pra‑pemrosesan sekali, lalu simpan representasi yang sudah dipra‑tokenisasi atau dipra‑enkode. |
| LLM skala petabyte menghemat jutaan dolar dengan pengurangan ukuran 1 % | Gunakan kontainer terkompresi dan ter‑shard (ZSTD‑TFRecord, Arrow/Parquet dengan enkoding kamus). |
| Model multi‑modal membutuhkan metadata penyelarasan yang sinkron | Simpan timestamp, bounding box, ID caption di dalam satu record yang sama alih‑alih di file terpisah. |
| Kepatuhan regulasi kini menuntut data yang tidak dapat diubah dan terverifikasi hash | Hasilkan manifest (JSON/YAML) yang mencatat skema, checksum, asal‑usul, dan versi. |
Intinya: format adalah barisan pertahanan pertama melawan I/O yang lambat, data berisik, dan masalah kepatuhan.
Konsep Inti & Terminologi (Referensi Cepat)
| Konsep | Definisi satu kalimat | Kasus penggunaan umum |
|---|---|---|
| Sharding | Membagi dataset besar menjadi banyak file kecil yang dapat dibaca secara independen (misalnya shard 1 GB). | Memuat secara paralel pada klaster pelatihan terdistribusi. |
| Format Siap Streaming | File yang dapat dibaca secara berurutan tanpa pencarian acak (TFRecord, WebDataset .tar). | Pelatihan langsung dari S3/GCS tanpa salinan lokal. |
| Penyimpanan Kolumnar | Data disimpan per kolom bukan per baris (Parquet, Arrow). | Penyaringan efisien satu modalitas (mis., hanya memuat caption). |
| Skema yang Menjelaskan Diri | File menyertakan nama bidang dan tipe-nya sendiri. | Menjamin kompatibilitas antar versi kode. |
| Dekoding Malas / Pra‑Tokenisasi | Menyimpan teks yang sudah dipra‑tokenisasi (int‑ID) atau embedding yang sudah dihitung sebelumnya. | Mengurangi waktu pra‑pemrosesan 2‑5× tiap epoch. |
| Record Multi‑Modal | Satu record logis yang menggabungkan gambar, teks, audio, dan metadata. | Memungkinkan sampling sinkron untuk model visi‑bahasa atau audio‑teks. |
| Manifest / File Indeks | JSON/YAML kecil yang mencantumkan semua shard, checksum, dan statistik per‑shard. | Validasi cepat, pelatihan dapat dilanjutkan, jejak audit. |
| Versi Data | Memperlakukan data seperti kode (DVC, LakeFS, Pachyderm). | Eksperimen dapat direproduksi dan kepatuhan regulasi. |
Memilih Format yang Tepat
| Format | Dukungan Modalitas | Kompresi | Streaming | Skema | Ekosistem |
|---|---|---|---|---|---|
| TFRecord | Blob biner apa saja → teks, gambar, audio | GZIP/ZSTD bawaan | ✅ | Implisit (via tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | Multi‑modal (gambar + teks + audio) | Eksternal (gzip, zstd) | ✅ | Kunci‑nilai implisit | PyTorch DataLoader, pustaka webdataset |
| Apache Arrow / Parquet | Kolumnar, struktur bersarang, blob biner | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (menjelaskan diri) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | Dapat dibaca manusia, fleksibel | Tidak ada (atau gzip) | ❌ | Implisit | Prototipe cepat, dataset kecil |
| LMDB | Bacaan acak cepat (kunci‑nilai) | Tidak ada (simpan blob terkompresi) | ❌ | Implisit | Generasi berbasis pengambilan |
| HDF5 | Grup hierarkis, array besar | gzip/lzf bawaan | ❌ (butuh chunking) | Implisit | Data ilmiah, spektrogram audio |
Aturan praktis:
- Pelatihan berskala besar → TFRecord, WebDataset, atau Arrow/Parquet (mereka streaming, kompres, dan mendukung sharding).
- Pekerjaan eksplorasi → JSONL (dapat dibaca manusia, mudah diedit).
- Akses acak berat (mis., generasi berbasis pengambilan) → LMDB.
Panduan Langkah‑per‑Langkah (Dari File Mentah ke Shard Siap Produksi)
Definisikan skema sumber‑kebenaran tunggal
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
.protoini (atau skema Arrow) berdampingan dengan dataset.Kumpulkan & bersihkan aset mentah
- Teks: Unicode‑NFKC, hapus karakter kontrol, hapus duplikat.
- Gambar: Konversi ke PNG lossless terlebih dahulu, lalu opsional lossy JPEG‑XL (kualitas 85‑90 %).
- Audio: Resample ke 16 kHz, 16‑bit PCM; enkode dengan Opus (lossy) atau FLAC (lossless).
Pra‑proses / Tokenisasi
Gunakan tokenizer yang sama persis dengan yang akan Anda beri ke model (mis.,tiktokenuntuk GPT‑NeoX). Simpan ID tokenint32[]yang dihasilkan langsung dalam record.Serialisasi setiap record
Pilih serializer biner cepat: Protocol Buffers, FlatBuffers, atau Arrow IPC. Tujuannya adalah satu string byte per contoh yang dapat ditulis ke TFRecord atau tarball.Shard & kompresi
- Ukuran shard target: 256 MiB – 1 GiB (optimal untuk permintaan rentang S3).
- Kompres dengan Zstandard (level 3‑5) – dekompresi cepat, rasio baik.
- Konvensi penamaan:
train-00000-of-01000.tfrecord.zst.
Hasilkan manifest
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]Manifest adalah satu sumber kebenaran untuk validasi, pelatihan dapat dilanjutkan, dan audit.
Validasi
Secara acak sampel 0,1 % record, dekode tiap bidang, dan jalankan pemeriksaan sanity (dekode gambar, panjang token, durasi audio). Hitung statistik global (cakupan vocab, distribusi resolusi) dan simpan di manifest.Versi & simpan secara tidak dapat diubah
Dorong shard + manifest ke bucket yang tidak dapat diubah (gs://my‑project/datasets/v1/). Beri tag dengan versi semantik (v1.0.0) dan daftarkan snapshot dalam sistem versi data (DVC, LakeFS).Muat dalam loop pelatihan 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
Tren yang Muncul & Persiapan Masa Depan
| Tren | Mengapa penting sekarang | Tindakan cepat |
|---|---|---|
| Kontainer multi‑modal terpadu (MDS Meta, DeepLake) | Satu tipe file untuk teks, gambar, video, audio, dan embedding, dengan versi bawaan. | Coba pilot dengan DeepLake; ia terintegrasi dengan LangChain dan LlamaIndex. |
| Penyimpanan GPU‑direct tanpa salinan | NVMe‑over‑Fabric + GPUDirect memungkinkan Anda streaming shard terkompresi langsung ke memori GPU. | Ketika Anda memiliki pool NVMe‑SSD, aktifkan torch.utils.data.DataLoader(persistent_workers=True). |
| Format yang ramah evolusi skema | Arrow 13+ memungkinkan Anda menambah/menghapus bidang tanpa menulis ulang seluruh dataset. | Lebih pilih Arrow/Parquet untuk pipeline yang mungkin nanti menginklus peta kedalaman, video, atau metadata tambahan. |
| Pra‑enkoding self‑supervised | Menyimpan embedding gambar CLIP atau embedding audio wav2vec mengurangi komputasi 2‑3× untuk fine‑tuning. | Tambahkan kolom ekstra image_emb (float16) ke tabel Arrow Anda; simpan gambar mentah untuk eksperimen di masa depan. |
| Penyimpanan yang melindungi privasi | TFRecord terenkripsi + enclave aman sedang muncul untuk domain dengan GDPR. | Evaluasi tf.io.TFRecordWriter dengan pembungkus enkripsi khusus jika Anda menangani PII. |
| Metrik AI berpusat pada data | Skor kualitas data (kepercayaan OCR, metrik blur, SNR) kini menjadi hyper‑parameter kelas pertama. | Simpan skor kualitas per‑shard di manifest dan saring shard kualitas rendah selama pelatihan. |
Daftar Periksa Siap Produksi
- File skema (
.protoatau skema Arrow) disimpan di samping data. - Semua shard terkompresi dengan codec cepat (disarankan ZSTD‑L3).
- Ukuran shard antara 256 MiB dan 1 GiB.
- Manifest mencakup checksum, jumlah record, statistik per‑shard, dan hash git dari kode pra‑pemrosesan.
- Kontrol versi yang tidak dapat diubah (DVC, LakeFS, atau serupa).
- Metrik kualitas data dicatat per shard.
- Audit privasi selesai (penyensoran PII, enkripsi opsional).
- Loader uji end‑to‑end yang dapat membaca shard acak tanpa error.
- README yang menjelaskan skema, langkah pra‑pemrosesan, dan cara menghasilkan kembali shard.
Mengikuti panduan ini akan menjaga pipeline pelatihan Anda cepat, murah, dan dapat direproduksi—tiga pilar yang dibutuhkan setiap tim LLM modern.
Tags: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training