Utoljára frissítve: 21 május, 2025

TL;DR – A választott fájlformátum akár 30‑50 %-kal is lerövidítheti a tréning időt, 1 %–5 %-kal csökkentheti a tárolási költségeket, és megakadályozhatja, hogy a többmodalitású modelljei rosszul összehangolt adatok miatt hibázzanak. Az ideális megoldás egy streaming‑kész, oszloporientált bináris konténer (TFRecord, WebDataset, Arrow/Parquet), amely előre tokenizált szöveget és előre kódolt médiát tárol egyetlen, verzió‑kezelett shard‑ban.
Miért fontos a fájlformátum az AI tréninghez
| Tény | Mit jelent ez Önnek |
|---|---|
| A bináris, oszloporientált formátumok 30‑50 %-kal gyorsabbak CSV vagy egyszerű szöveghez képest | Válasszon olyan formátumot, amely közvetlenül a hardverével (GPU/TPU) és a pipeline‑jával (TensorFlow, PyTorch, Spark) kommunikál. |
| Az inkonzisztens tokenizálás vagy képkódolás rontja a modell minőségét | Fagyassza le a pre‑processz pipeline‑t egyszer, majd tárolja a már tokenizált vagy előre kódolt reprezentációt. |
| A petabájt‑méretű LLM-ek 1 %-os méretcsökkenéssel milliókat takarítanak meg | Használjon tömörített, shard‑olt konténereket (ZSTD‑TFRecord, Arrow/Parquet szótárkódolással). |
| A többmodalitású modelleknek szinkronizált igazítási metaadatokra van szükségük | Tartsa a timestamp‑eket, bounding box‑okat, caption ID‑kat azonos rekordban a külön fájlok helyett. |
| A szabályozói megfelelés most már megköveteli a változtathatatlan, hash‑ellenőrzött adatokat | Generáljon egy manifest‑et (JSON/YAML), amely rögzíti a sémát, ellenőrző összeget, származást és verziót. |
Összegzés: a formátum az első védelmi vonal a lassú I/O, zajos adatok és a megfelelőségi problémák ellen.
Alapfogalmak és terminológia (Gyors referencia)
| Fogalom | Egymondatos definíció | Tipikus felhasználási eset |
|---|---|---|
| Sharding | A hatalmas adatállomány sok kis, egymástól függetlenen olvasható fájlra bontása (pl. 1 GB shard‑ok). | Párhuzamos betöltés egy elosztott tréning klaszteren. |
| Streaming‑kész formátum | Fájlok, amelyeket szekvenciálisan lehet olvasni véletlenszerű keresés nélkül (TFRecord, WebDataset .tar). | Tréning közvetlenül S3/GCS‑ről helyi másolat nélkül. |
| Oszlopos tárolás | Adatok oszlop szerint tárolva sor helyett (Parquet, Arrow). | Hatékony szűrés egyetlen modalitásra (pl. csak feliratok betöltése). |
| Önleíró séma | A fájl beágyazza saját mezőneveit és típusait. | Biztosítja a kompatibilitást a kó verziók között. |
| Lusta dekódolás / elő‑tokenizálás | Már tokenizált szöveg (int‑ID‑k) vagy előre kiszámolt beágyazások tárolása. | Csökkenti az előfeldolgozási időt 2‑5‑ször minden epoch során. |
| Többmodalitású rekord | Egy logikai rekord, amely képet, szöveget, hangot és metaadatokat csomagol. | Lehetővé teszi a szinkron mintavételezést látás‑nyelv vagy hang‑szöveg modellekhez. |
| Manifest / index fájl | Kis JSON/YAML, amely felsorolja az összes shard‑ot, ellenőrző összegeket és per‑shard statisztikákat. | Gyors validálás, folytatható tréning, audit nyomvonal. |
| Adat‑verziókezelés | Az adatot úgy kezeli, mint a kódot (DVC, LakeFS, Pachyderm). | Újra reprodukálható kísérletek és szabályozói megfelelés. |
A megfelelő formátum kiválasztása
| Formátum | Modalitás támogatás | Tömörítés | Streaming | Séma | Ökoszisztéma |
|---|---|---|---|---|---|
| TFRecord | Bármilyen bináris blob → szöveg, kép, hang | Beépített GZIP/ZSTD | ✅ | Implicit (via tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | Többmodalitású (kép + szöveg + hang) | Külső (gzip, zstd) | ✅ | Implicit key‑value | PyTorch DataLoader, webdataset lib |
| Apache Arrow / Parquet | Oszlopos, beágyazott struktúrák, bináris blobok | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (self‑describing) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | Ember által olvasható, rugalmas | None (or gzip) | ❌ | Implicit | Gyors prototípus készítés, kis adatállományok |
| LMDB | Gyors véletlen olvasás (kulcs‑érték) | None (store compressed blobs) | ❌ | Implicit | Retrieval‑augmented generation |
| HDF5 | Hierarchikus csoportok, nagy tömbök | Beépített gzip/lzf | ❌ (needs chunking) | Implicit | Tudományos adatok, audio spektrogramok |
Általános irányelv:
- Nagy léptékű tréning → TFRecord, WebDataset vagy Arrow/Parquet (streamelnek, tömörítenek és támogatják a shard‑olást).
- Felfedező munka → JSONL (ember által olvasható, könnyen szerkeszthető).
- Intenzív véletlen hozzáférés (pl. retrieval‑augmented generation) → LMDB.
Lépésről‑lépésre útmutató (nyers fájloktól a termelés‑kész shard‑okig)
Határozzon meg egyetlen igazságforrás sémát
message MultiModalExample { bytes image = 1; // JPEG‑XL vagy AVIF repeated int32 caption = 2; // token IDs bytes audio = 3; // Opus vagy FLAC map<string, string> meta = 4; // source_id, timestamp, etc. }Store this
.proto(or Arrow schema) alongside the dataset.Gyűjtse és tisztítsa meg a nyers eszközöket
- Text: Unicode‑NFKC, távolítsa el a vezérlőkaraktereket, deduplikálja.
- Images: Először konvertálja lossless PNG‑re, majd opcionálisan veszteséges JPEG‑XL‑re (minőség 85‑90 %).
- Audio: Resample 16 kHz‑re, 16‑bit PCM; kódolja Opus‑szal (veszteséges) vagy FLAC‑sal (veszteségmentes).
Előfeldolgozás / Tokenizálás
Használja azt a tokenizert, amelyet a modellhez ad (pl.tiktokena GPT‑NeoX‑hez). Tárolja a keletkezettint32[]token ID‑kat közvetlenül a rekordban.Minden rekord sorosítása
Válasszon egy gyors bináris sorosítót: Protocol Buffers, FlatBuffers vagy Arrow IPC. A cél egy egyetlen bájtsorozat példánként, amely TFRecord‑ba vagy tarball‑ba írható.Shard‑olás és tömörítés
- Cél shard méret: 256 MiB – 1 GiB (optimális S3 GET range kérésekhez).
- Tömörítsen Zstandard‑del (szint 3‑5) – gyors dekompresszió, jó arány.
- Naming convention:
train-00000-of-01000.tfrecord.zst.
Manifest generálása
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]The manifest is the single source of truth for validation, resumable training, and audit.
Érvényesítés
Véletlenszerűen mintavételezzen 0,1 %-ot a rekordokból, dekódolja minden mezőt, és futtasson épségellenőrzéseket (kép dekódolás, token hossza, audio hossz). Számolja ki a globális statisztikákat (szókincs lefedettség, felbontás eloszlás) és tárolja őket a manifestben.Verziózás és immutábilis tárolás
Töltse fel a shard‑okat és a manifestet egy immutábilis bucket‑be (gs://my‑project/datasets/v1/). Címkézze meg szemantikus verzióval (v1.0.0) és regisztrálja a snapshotot egy adat‑verziókezelő rendszerben (DVC, LakeFS).Betöltés a tréning ciklusba
# 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
Feltörekvő trendek és jövőbiztosítás
| Trend | Miért fontos most | Gyors lépés |
|---|---|---|
| Egységes többmodalitású konténerek (Meta MDS, DeepLake) | Egyetlen fájltípus szöveg, kép, videó, audio és beágyazások számára, beépített verziókezeléssel. | Próbáljon ki egy pilotot a DeepLake‑val; integrálódik a LangChain‑nel és a LlamaIndex‑szel. |
| Zero‑copy GPU‑közvetlen tárolás | Az NVMe‑over‑Fabric + GPUDirect lehetővé teszi, hogy a tömörített shard‑okat közvetlenül a GPU memóriába streamelje. | Ha rendelkezik NVMe‑SSD pool‑lal, engedélyezze a torch.utils.data.DataLoader(persistent_workers=True) beállítást. |
| Séma‑evolúcióra barát formátumok | Az Arrow 13+ lehetővé teszi mezők hozzáadását/eltávolítását a teljes adatállomány újraírása nélkül. | Részesítse előnyben az Arrow/Parquet-et minden olyan pipeline‑nál, amely később mélységtérképeket, videót vagy extra metaadatokat is be fog vonni. |
| Önfelügyeletű elő‑kódolás | A CLIP képbebezárások vagy wav2vec audio beágyazások tárolása 2‑3‑szorosra csökkenti a számítási igényt a finomhangolás során. | Adjon egy extra oszlopot image_emb (float16) az Arrow táblához; tartsa meg a nyers képet a jövőbeli kísérletekhez. |
| Adatvédelmet biztosító tárolás | Titkosított TFRecord + biztonságos enclavok jelennek meg GDPR‑intenzív területeken. | Értékelje a tf.io.TFRecordWriter‑t egy egyedi titkosítási wrapperrel, ha személyes adatokat (PII) kezel. |
| Adat‑központú AI metrikák | Az adatminőségi pontszámok (OCR bizalom, elmosódás metrika, SNR) most már elsőrendű hiperparaméterek. | Tárolja a shard‑onkénti minőségi pontszámokat a manifestben, és szűrje ki az alacsony minőségű shard‑okat a tréning során. |
Termelés‑kész ellenőrzőlista
- Sémafájl (
.protovagy Arrow séma) tárolva az adatok mellett. - Minden shard tömörítve van egy gyors kodekkel (ZSTD‑L3 ajánlott).
- Shard méret 256 MiB és 1 GiB között.
- A manifest tartalmazza az ellenőrző összeget, rekord számot, shard‑onkénti statisztikákat és a pre‑processz kód git hash‑ét.
- Változtathatatlan verziókezelés (DVC, LakeFS vagy hasonló).
- Adatminőségi metrikák naplózva shard‑onként.
- Adatvédelmi audit elvégezve (PII redakció, opcionális titkosítás).
- Végponttól‑végpontig teszt loader, amely hibamentesen be tud olvasni egy véletlen shard‑ot.
- README, amely leírja a sémát, a pre‑processz lépéseket és a shard‑ok újragenerálásának módját.
Ennek az útmutatónak a követése biztosítja, hogy a tréning pipeline‑jai gyorsak, olcsók és reprodukálhatóak legyenek – a három pillér, amelyre minden modern LLM csapatnak szüksége van.
Tags: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training