Paskutinį kartą atnaujinta: 2025 m. gegužės 21 d.

TL;DR – Pasirinktas failo formatas gali sutrumpinti mokymo laiką 30‑50 %, sumažinti saugojimo išlaidas 1 %–5 % ir apsaugoti daugi-modalinius modelius nuo nesuderintų duomenų. Idealu yra srautinio skaitymo, stulpelių orientuotas binarinis konteineris (TFRecord, WebDataset, Arrow/Parquet), kuris saugo iš anksto sužetkintą tekstą ir iš anksto užkoduotą mediją vienoje, versijomis valdomoje dalyje.
Kodėl failo formatas svarbus AI mokymui
| Faktas | Ką tai reiškia jums |
|---|---|
| Binariniai, stulpeliniai formatai yra 30‑50 % greitesni nei CSV ar paprastas tekstas | Pasirinkite formatą, kuris tiesiogiai bendrauja su jūsų aparatine įranga (GPU/TPU) ir duomenų srautu (TensorFlow, PyTorch, Spark). |
| Nesuderinama žodžių skaidymas arba vaizdo dekodavimas pablogina modelio kokybę | Užšaldykite išankstinį apdorojimo procesą vieną kartą, tada saugokite jau sužetkintą arba iš anksto užkoduotą reprezentaciją. |
| Petabaitų masto LLM su 1 % dydžio sumažinimu taupo milijonus dolerių | Naudokite suspaustus, suskaldytus konteinerius (ZSTD‑TFRecord, Arrow/Parquet su žodynų kodavimu). |
| Daugi-modalūs modeliai reikalauja sinchronizuotų lygiavimo metaduomenų | Laiką, ribų dėžutes, antraščių ID laikykite toje pačioje įraše vietoj atskirų failų. |
| Reguliacinė atitiktis dabar reikalauja nekeičiamos, hash patikrintos duomenų | Išduokite manifestą (JSON/YAML), kuriame įrašyta schema, kontrolinė suma, kilmė ir versija. |
Pagrindinė išvada: formatas yra pirmoji gynybos linija prieš lėtą I/O, triukšmingus duomenis ir atitikties problemas.
Pagrindinės sąvokos ir terminologija (greita nuoroda)
| Sąvoka | Vienos sakinio apibrėžimas | Tipinis naudojimo atvejis |
|---|---|---|
| Skaidymas | Didžiulės duomenų rinkinio suskaldymas į daugelį mažų, savarankiškai skaitomų failų (pvz., 1 GB skaidiniai). | Lygiagretus įkėlimas paskirstytoje mokymo klasterio aplinkoje. |
| Srautinio skaitymo formatas | Failai, kuriuos galima skaityti nuosekliai be atsitiktinių paieškų (TFRecord, WebDataset .tar). | Mokymas tiesiai iš S3/GCS be vietinės kopijos. |
| Stulpelinė saugykla | Duomenys saugomi pagal stulpelius, o ne eilutes (Parquet, Arrow). | Efektyvus vienos modaliteto filtravimas (pvz., įkelti tik antraštes). |
| Savaime aprašanti schema | Failas įterpia savo laukų pavadinimus ir tipus. | Užtikrina suderinamumą tarp kodo versijų. |
| Lėtas dekodavimas / iš anksto žodžių skaidymas | Iš anksto sužetkinto teksto (int‑ID) arba iš anksto apskaičiuotų įterpimų saugojimas. | Sumažina išankstinio apdorojimo laiką 2‑5× per epochą. |
| Daugi-modalinis įrašas | Vienas loginis įrašas, kuriame sujungiami vaizdas, tekstas, garsas ir metaduomenys. | Leidžia sinchronizuotą mėginių paėmimą vizijos‑kalbos arba garso‑teksto modeliams. |
| Manifestas / Indeksų failas | Mažas JSON/YAML, kuriame išvardyti visi skaidiniai, kontrolinės sumos ir statistika per skaidinį. | Greita validacija, tęsiamas mokymas, audito takeliai. |
| Duomenų versijavimas | Duomenų traktavimas kaip kodo (DVC, LakeFS, Pachyderm). | Pakartojami eksperimentai ir reguliacinė atitiktis. |
Kaip pasirinkti tinkamą formatą
| Format | Modalumo palaikymas | Suspaudimas | Srautinimas | Schema | Ekosistema |
|---|---|---|---|---|---|
| TFRecord | Bet koks binarinis duomenų blokas → tekstas, vaizdas, garsas | Įmontuotas GZIP/ZSTD | ✅ | Implicit (per tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | Daugi-modalus (vaizdas + tekstas + garsas) | Išorinis (gzip, zstd) | ✅ | Implicit key‑value | PyTorch DataLoader, webdataset lib |
| Apache Arrow / Parquet | Stulpelinė, įdėtinės struktūros, binariniai blokai | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (savaime aprašanti) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | Žmogui skaitoma, lanksti | Nėra (arba gzip) | ❌ | Implicit | Greitas prototipavimas, mažos duomenų rinkmenos |
| LMDB | Greiti atsitiktiniai skaitymai (key‑value) | Nėra (saugomi suspausti blokai) | ❌ | Implicit | Retrieval‑augmented generation |
| HDF5 | Hierarchinės grupės, didelės matricos | Įmontuotas gzip/lzf | ❌ (reikia skaidymo) | Implicit | Moksliniai duomenys, garso spektrogramos |
- Mokymas mastu → TFRecord, WebDataset arba Arrow/Parquet (jie srautiniai, suspausti ir palaiko skaidymą).
- Eksploracinis darbas → JSONL (žmogui skaitoma, lengvai redaguojama).
- Didelis atsitiktinis priėjimas (pvz., retrieval‑augmented generation) → LMDB.
Žingsnis po žingsnio planas (nuo neapdorotų failų iki gamybos pasiruošusių skaidinių)
Apibrėžkite vieną šaltinio‑tiesos schemą
message MultiModalExample { bytes image = 1; // JPEG‑XL or AVIF repeated int32 caption = 2; // token IDs bytes audio = 3; // Opus or FLAC map<string, string> meta = 4; // source_id, timestamp, etc. }Store this
.proto(or Arrow schema) alongside the dataset.Surinkite ir išvalykite neapdorotas priemones
- Tekstas: Unicode‑NFKC, pašalinkite valdymo simbolius, pašalinkite dublikatus.
- Vaizdai: Pirma konvertuokite į bepralaidį PNG, tada, jei reikia, į prarandamą JPEG‑XL (kokybė 85‑90 %).
- Garsas: Perkoduokite iki 16 kHz, 16‑bit PCM; koduokite su Opus (prarandamas) arba FLAC (bepralaidis).
Išankstinis apdorojimas / Žodžių skaidymas
Naudokite tą patį žodžių skaidiklį, kurį tieksite modeliui (pvz.,tiktokenGPT‑NeoX). Išsaugokite gautusint32[]žodžių ID tiesiogiai įraše.Serializuokite kiekvieną įrašą
Pasirinkite greitą binarinį serializatorių: Protocol Buffers, FlatBuffers arba Arrow IPC. Tikslas – vienas baitų eilutė per pavyzdį, kurią galima įrašyti į TFRecord arba tarball.Skaidymas ir suspaudimas
- Tikslinė skaidinio dydis: 256 MiB – 1 GiB (optimalu S3 GET intervalų užklausoms).
- Suspauskite su Zstandard (lygis 3‑5) – greitas išskleidimas, geras santykis.
- Pavadinimo konvencija:
train-00000-of-01000.tfrecord.zst.
Sukurkite manifestą
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]Manifestas yra vienintelis šaltinis validacijai, tęsiamam mokymui ir auditui.
Patikrinkite
Atsitiktinai išrinkite 0,1 % įrašų, iškoduokite kiekvieną lauką ir atlikite patikrinimus (vaizdo dekodavimas, žodžių ilgis, garso trukmė). Apskaičiuokite bendrą statistiką (žodyno aprėptis, rezoliucijos pasiskirstymas) ir įrašykite ją į manifestą.Versijuokite ir saugokite nekeičiama forma
Įkelkite skaidinius + manifestą į nekeičiama saugyklą (gs://my‑project/datasets/v1/). Pažymėkite semantine versija (v1.0.0) ir užregistruokite momentinę kopiją duomenų versijavimo sistemoje (DVC, LakeFS).Įkelkite į mokymo ciklą
# 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
Kylančios tendencijos ir ateities pasiruošimas
| Tendencija | Kodėl tai svarbu dabar | Greitas veiksmas |
|---|---|---|
| Vieningas daugi-modalinis konteineris (Meta MDS, DeepLake) | Vienas failo tipas tekstui, vaizdui, video, garsui ir įterpimams, su įmontuota versijavimu. | Išbandykite pilotinį projektą su DeepLake; jis integruojamas su LangChain ir LlamaIndex. |
| Zero‑copy GPU tiesioginis saugojimas | NVMe‑over‑Fabric + GPUDirect leidžia srauti suspaustus skaidinius tiesiai į GPU atmintį. | Kai turite NVMe‑SSD baseiną, įjunkite torch.utils.data.DataLoader(persistent_workers=True). |
| Schema evoliucijai draugiški formatai | Arrow 13+ leidžia pridėti/pašalinti laukus be viso duomenų rinkinio perrašymo. | Teikite pirmenybę Arrow/Parquet bet kuriam duomenų srautui, kuris vėliau gali įtraukti gylio žemėlapius, video ar papildomus metaduomenis. |
| Savarankiškai mokomas išankstinis kodavimas | CLIP vaizdo įterpimų arba wav2vec garso įterpimų saugojimas sumažina skaičiavimus 2‑3× smulkinimui. | Pridėkite papildomą stulpelį image_emb (float16) į Arrow lentelę; laikykite neapdorotą vaizdą ateities eksperimentams. |
| Privatumo išsaugojimo saugojimas | Šifruotas TFRecord + saugūs enklausai atsiranda GDPR‑reikalaujančiose srityse. | Įvertinkite tf.io.TFRecordWriter su pasirinktu šifravimo įpaketu, jei dirbate su asmens duomenimis (PII). |
| Duomenų‑centrinės AI metrikos | Duomenų kokybės įvertinimai (OCR pasitikėjimas, suliejimo metrika, SNR) dabar yra pirmosios klasės hiperparametrai. | Laikykite kokybės įvertinimus per skaidinį manifeste ir filtruokite žemos kokybės skaidinius mokymo metu. |
Gamybos pasiruošimo kontrolinis sąrašas
- Schemos failas (
.protoarba Arrow schema) saugomas šalia duomenų. - Visi skaidiniai suspausti greitu kodeku (rekomenduojama ZSTD‑L3).
- Skaidinio dydis tarp 256 MiB ir 1 GiB.
- Manifestas apima kontrolinę sumą, įrašų skaičių, statistikas per skaidinį ir git hash išankstinio apdorojimo kodo.
- Nekeičiama versijavimo kontrolė (DVC, LakeFS ar panaši).
- Duomenų kokybės metrikos registruojamos per skaidinį.
- Baigtas privatumo auditas (PII redagavimas, pasirinktinė šifravimas).
- Pilnas testinis įkroviklis, galintis perskaityti atsitiktinį skaidinį be klaidų.
- README, kuriame paaiškinta schema, išankstinio apdorojimo žingsniai ir kaip regeneruoti skaidinius.
Laikydamiesi šio plano, jūsų mokymo duomenų srautas išliks greitas, pigus ir pakartojamas – trys stulpai, kurių reikia kiekvienai šiuolaikinei LLM komandai.
Tags: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training