Poslední aktualizace: 21 May, 2025

TL;DR – Formát souboru, který zvolíte, může zkrátit dobu tréninku o 30‑50 %, snížit náklady na úložiště o 1 %–5 % a zabránit vašim multimodálním modelům, aby se zakopávaly o nesynchronizovaná data. Ideální volbou je streamovací, sloupcově orientovaný binární kontejner (TFRecord, WebDataset, Arrow/Parquet), který ukládá předtokenizovaný text a předkódovaná média v jednom, verze‑kontrolovaném shardu.
Proč formát souboru záleží na tréninku AI
| Fakt | Co to pro vás znamená |
|---|---|
| Binární, sloupcově orientované formáty jsou o 30‑50 % rychlejší než CSV nebo prostý text | Zvolte formát, který komunikuje přímo s vaším hardwarem (GPU/TPU) a pipeline (TensorFlow, PyTorch, Spark). |
| Nekonzistentní tokenizace nebo dekódování obrazu poškozuje kvalitu modelu | Zmrazte pipeline předzpracování jednou a poté uložte již tokenizovanou nebo předkódovanou reprezentaci. |
| LLM v petabajtovém měřítku ušetří miliony dolarů při snížení velikosti o 1 % | Používejte komprimované, shardované kontejnery (ZSTD‑TFRecord, Arrow/Parquet s kódováním slovníku). |
| Multimodální modely potřebují synchronizovaná metadata zarovnání | Uchovávejte časové razítka, ohraničující rámečky, ID popisků uvnitř stejného záznamu místo v samostatných souborech. |
| Regulační soulad nyní vyžaduje neměnná, hash‑ově ověřená data | Vytvořte manifest (JSON/YAML), který zaznamená schéma, kontrolní součet, původ a verzi. |
Závěr: formát je první linií obrany proti pomalému I/O, špatným datům a problémům s dodržováním předpisů.
Základní pojmy a terminologie (rychlý přehled)
| Pojem | Jednosvětová definice | Typické použití |
|---|---|---|
| Sharding | Rozdělení masivního datasetu na mnoho malých, nezávisle čitelných souborů (např. 1 GB shardy). | Paralelní načítání v distribuovaném tréninkovém clusteru. |
| Streaming‑Ready Formát | Soubory, které lze číst sekvenčně bez náhodných přístupů (TFRecord, WebDataset .tar). | Trénink přímo ze S3/GCS bez lokální kopie. |
| Sloupcové úložiště | Data uložená po sloupcích místo po řádcích (Parquet, Arrow). | Efektivní filtrování jedné modality (např. načíst jen popisky). |
| Samo‑popisné schéma | Soubor obsahuje vlastní názvy polí a typy. | Zaručuje kompatibilitu napříč verzemi kódu. |
| Líné dekódování / před‑tokenizace | Ukládání již tokenizovaného textu (int‑IDs) nebo před‑vypočtených embeddingů. | Zkrátí čas předzpracování 2‑5× během každé epochy. |
| Multimodální záznam | Jeden logický záznam, který spojuje obraz, text, audio a metadata. | Umožňuje synchronizované vzorkování pro modely vidění‑jazyk nebo audio‑text. |
| Manifest / indexový soubor | Malý JSON/YAML, který uvádí všechny shardy, kontrolní součty a statistiky per‑shard. | Rychlá validace, obnovitelný trénink, auditní stopy. |
| Verzování dat | Zacházení s daty jako s kódem (DVC, LakeFS, Pachyderm). | Reprodukovatelné experimenty a soulad s regulacemi. |
Výběr správného formátu
| Formát | Podpora modality | Komprese | Streamování | Schéma | Ekosystém |
|---|---|---|---|---|---|
| TFRecord | Jakýkoli binární blob → text, obrázek, audio | Vestavěné GZIP/ZSTD | ✅ | Implicitní (pomocí tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | Multimodální (obrázek + text + audio) | Externí (gzip, zstd) | ✅ | Implicitní klíč‑hodnota | PyTorch DataLoader, webdataset lib |
| Apache Arrow / Parquet | Sloupcové, vnořené struktury, binární bloby | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (self‑describing) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | Čitelné pro člověka, flexibilní | Žádná (nebo gzip) | ❌ | Implicitní | Rychlé prototypování, malé datasety |
| LMDB | Rychlé náhodné čtení (klíč‑hodnota) | Žádná (ukládat komprimované bloby) | ❌ | Implicitní | Generování s rozšířením o vyhledávání |
| HDF5 | Hierarchické skupiny, velké pole | Vestavěné gzip/lzf | ❌ (vyžaduje chunkování) | Implicitní | Vědecká data, audio spektrogramy |
Pravidlo:
- Trénink ve velkém → TFRecord, WebDataset nebo Arrow/Parquet (streamují, komprimují a podporují sharding).
- Explorace → JSONL (čitelné, snadno editovatelné).
- Intenzivní náhodný přístup (např. retrieval‑augmented generation) → LMDB.
Plán krok za krokem (od surových souborů k produkčně připraveným shardům)
Definujte jediné schéma pravdy
message MultiModalExample { bytes image = 1; // JPEG‑XL nebo AVIF repeated int32 caption = 2; // token IDs bytes audio = 3; // Opus nebo FLAC map<string, string> meta = 4; // source_id, timestamp, atd. }Uložte tento
.proto(nebo Arrow schema) vedle datasetu.Shromažďujte a čistěte surová data
- Text: Unicode‑NFKC, odstraňte řídící znaky, deduplikujte.
- Obrázky: Nejprve převést na bezztrátový PNG, poté volitelně ztrátový JPEG‑XL (kvalita 85‑90 %).
- Audio: Převzorkovat na 16 kHz, 16‑bit PCM; kódovat pomocí Opus (ztrátový) nebo FLAC (bezztrátový).
Předzpracování / tokenizace
Použijte přesně ten tokenizer, který budete modelu předávat (např.tiktokenpro GPT‑NeoX). Uložte výslednéint32[]token ID přímo do záznamu.Serializujte každý záznam
Vyberte rychlý binární serializer: Protocol Buffers, FlatBuffers nebo Arrow IPC. Cílem je jediný bajtový řetězec na příklad, který lze zapsat do TFRecord nebo tarballu.Rozdělte do shardů a komprimujte
- Cílová velikost shardu: 256 MiB – 1 GiB (optimální pro požadavky S3 GET range).
- Komprimujte pomocí Zstandard (úroveň 3‑5) – rychlá dekomprese, dobrý poměr.
- Název souboru:
train-00000-of-01000.tfrecord.zst.
Vytvořte manifest
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]Manifest je jediný zdroj pravdy pro validaci, obnovitelný trénink a audit.
Validujte
Náhodně vyberte 0,1 % záznamů, dekódujte každé pole a proveďte sanity‑checks (dekódování obrazu, délka tokenů, délka audia). Vypočítejte globální statistiky (pokrytí slovníku, rozlišení) a uložte je do manifestu.Verzujte a ukládejte neměnně
Nahrajte shardy + manifest do neměnného bucketu (gs://my‑project/datasets/v1/). Označte semantickou verzí (v1.0.0) a zaregistrujte snímek v systému pro verzování dat (DVC, LakeFS).Načtěte ve vašem tréninkovém smyčce
# 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
Vznikající trendy a budoucí zabezpečení
| Trend | Proč to teď má význam | Rychlá akce |
|---|---|---|
| Jednotné multimodální kontejnery (Meta’s MDS, DeepLake) | Jeden typ souboru pro text, obrázek, video, audio a embeddingy, s vestavěným verzováním. | Vyzkoušejte pilot s DeepLake; integruje se s LangChain a LlamaIndex. |
| Zero‑copy úložiště přímo na GPU | NVMe‑over‑Fabric + GPUDirect umožňuje streamovat komprimované shardy přímo do paměti GPU. | Když máte NVMe‑SSD pool, povolte torch.utils.data.DataLoader(persistent_workers=True). |
| Formáty přátelské k evoluci schématu | Arrow 13+ umožňuje přidávat/odstraňovat pole bez přepisování celého datasetu. | Preferujte Arrow/Parquet pro jakýkoli pipeline, který může později ingestovat depth mapy, video nebo extra metadata. |
| Samoučící před‑kódování | Ukládání CLIP image embeddingů nebo wav2vec audio embeddingů snižuje výpočetní náročnost 2‑3× při doladění. | Přidejte extra sloupec image_emb (float16) do vaší Arrow tabulky; zachovejte surový obrázek pro budoucí experimenty. |
| Úložiště zachovávající soukromí | Šifrovaný TFRecord + bezpečné enclaves se objevují pro domény s vysokými požadavky GDPR. | Zvažte tf.io.TFRecordWriter s vlastním šifrovacím wrapperem, pokud pracujete s PII. |
| Data‑centrické AI metriky | Skóre kvality dat (OCR důvěra, rozmazání, SNR) jsou nyní první třídy hyperparametry. | Ukládejte skóre kvality per shard do manifestu a během tréninku filtrujte shardy nízké kvality. |
Kontrolní seznam připravený pro produkci
- Soubor se schématem (
.protonebo Arrow schema) uložený vedle dat. - Všechny shardy komprimované rychlým kodekem (doporučeno ZSTD‑L3).
- Velikost shardu mezi 256 MiB a 1 GiB.
- Manifest obsahuje kontrolní součet, počet záznamů, statistiky per shard a git hash předzpracovacího kódu.
- Neměnná verzování (DVC, LakeFS nebo podobné).
- Metriky kvality dat zaznamenané per shard.
- Audit soukromí dokončen (redakce PII, volitelná šifrování).
- End‑to‑end testovací loader, který dokáže načíst náhodný shard bez chyb.
- README, který vysvětluje schéma, kroky předzpracování a jak regenerovat shardy.
Dodržení tohoto plánu udrží vaše tréninkové pipeline rychlé, levné a reprodukovatelné—tři pilíře, které potřebuje každý moderní tým LLM.
Tagy: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training