Son Yenilənmə: 21 May, 2025

TL;DR – Seçdiyiniz fayl formatı təlim vaxtını 30‑50 % azalda, saxlanma xərclərini 1 %–5 % endirə və çox‑modal modellərinizi uyğunsuz məlumatlarla qarşılaşmaqdan qoruyar. Ideal seçim axın‑hazır, sütun‑əsaslı ikili konteyner (TFRecord, WebDataset, Arrow/Parquet) olub, öncədən tokenləşdirilmiş mətn və öncədən kodlaşdırılmış media‑nı tək, versiya‑idarəli shardda saxlayır.
Fayl‑Formatının AI Təlimi Üçün Niyə Önəmli olduğu
| Fakt | Sizin üçün nə deməkdir |
|---|---|
| İkili, sütun‑əsaslı formatlar CSV və ya sadə mətnə nisbətən 30‑50 % daha sürətlidir | Hardware‑inizə (GPU/TPU) və pipeline‑ınıza (TensorFlow, PyTorch, Spark) birbaşa danışan format seçin. |
| Uyğunsuz tokenləşdirmə və ya şəkil dekodlaşdırması model keyfiyyətinə zərər verir | Ön emal pipeline‑ını bir dəfə dondurun, sonra artıq tokenləşdirilmiş və ya öncədən kodlaşdırılmış təmsilatı saxlayın. |
| Petabayt‑səviyyəli LLM‑lər 1 % ölçü azalması ilə milyonlarla dollar qənaət edir | Sıxışdırılmış, shard‑lı konteynerlərdən (ZSTD‑TFRecord, Arrow/Parquet lüğət kodlaması ilə) istifadə edin. |
| Çox‑modal modellər sinxronlaşdırılmış uyğunluq metadata‑sına ehtiyac duyur | Zaman möhürlərini, sərhəd qutularını, başlıq ID‑lərini eyni qeyd daxilində saxlayın, ayrı fayllarda deyil. |
| Tənzimləyici uyğunluq artıq dəyişməz, hash‑təsdiqlənmiş məlumat tələb edir | Sxemi, checksum‑u, mənşəyi və versiyanı qeyd edən manifest (JSON/YAML) yaradın. |
Nəticə: format yavaş I/O, səs‑küylü məlumat və uyğunluq problemlərinə qarşı ilk müdafiə xəttidir.
Əsas Konsepsiyalar və Terminologiya (Sürətli İstinad)
| Konsept | Bir‑cümlə tərifi | Tipik istifadə‑halı |
|---|---|---|
| Sharding | Böyük dataset‑i bir çox kiçik, müstəqil oxuna bilən fayllara (məsələn, 1 GB shard‑lar) bölmək. | Paylanmış təlim klasterində paralel yükləmə. |
| Streaming‑Ready Format | Faylların təsadüfi axtarışa ehtiyac duymadan ardıcıllıqla oxuna bilməsi (TFRecord, WebDataset .tar). | Məlumatı S3/GCS‑dən yerli nüsxə olmadan birbaşa təlim. |
| Columnar Storage | Məlumatın sətir deyil, sütun üzrə saxlanması (Parquet, Arrow). | Tək modalitenin (məsələn, yalnız başlıqları) səmərəli filtrasiya edilməsi. |
| Self‑Describing Schema | Fayl öz sahə adlarını və tiplərini özündə saxlayır. | Kod versiyaları arasında uyğunluğun təmin edilməsi. |
| Lazy Decoding / Pre‑Tokenization | Artıq tokenləşdirilmiş mətn (int‑IDs) və ya əvvəlcədən hesablanmış embedding‑lərin saxlanması. | Hər epoxda ön emal vaxtını 2‑5× azaldır. |
| Multi‑Modal Record | Şəkil, mətn, audio və metadata‑nı birləşdirən məntiqi qeyd. | Vision‑language və ya audio‑text modelləri üçün sinxron nümunələmə. |
| Manifest / Index File | Bütün shard‑ları, checksum‑ları və per‑shard statistikalarını sadalanan kiçik JSON/YAML. | Sürətli doğrulama, davamlı təlim, audit izləri. |
| Data‑Versioning | Məlumatı kod kimi (DVC, LakeFS, Pachyderm) idarə etmək. | Təkrarlana bilən eksperimentlər və tənzimləyici uyğunluq. |
Doğru Formatı Seçmək
| Format | Modalite dəstəyi | Sıxışdırma | Streaming | Sxem | Ekosistem |
|---|---|---|---|---|---|
| TFRecord | Hər hansı ikili blob → mətn, şəkil, audio | Daxili GZIP/ZSTD | ✅ | Implicit (via tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | Çox‑modal (şəkil + mətn + audio) | Xarici (gzip, zstd) | ✅ | Implicit key‑value | PyTorch DataLoader, webdataset lib |
| Apache Arrow / Parquet | Sütun‑əsaslı, nested strukturlar, ikili blob‑lar | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (self‑describing) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | İnsan‑oxunaqlı, elastik | Yox (və ya gzip) | ❌ | Implicit | Tez prototipləşdirmə, kiçik dataset‑lər |
| LMDB | Sürətli random oxuma (key‑value) | Yox (sıxılmış blob‑lar saxlanır) | ❌ | Implicit | Retrieval‑augmented generation |
| HDF5 | Hierarchical qruplar, böyük massivlər | Daxili gzip/lzf | ❌ (chunking tələb edir) | Implicit | Elmi data, audio spektrogramları |
Ümumi qayda:
- Miqqyaslı təlim → TFRecord, WebDataset, ya da Arrow/Parquet (axın, sıxışdırma və shard‑lama dəstəyi var).
- Eksplorativ iş → JSONL (insan‑oxunaqlı, asan redaktə).
- Ağır random oxuma (məsələn, retrieval‑augmented generation) → LMDB.
Addım‑Addım Planı (Xam Fayllardan İstehsal‑Hazır Shard‑lara)
Tək mənbə‑həqiqət sxemi təyin edin
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. }Bu
.proto(və ya Arrow sxemi) dataset‑in yanında saxlayın.Xam aktivləri toplayın və təmizləyin
- Mətn: Unicode‑NFKC, nəzarət simvollarını silin, dublikatları aradan qaldırın.
- Şəkillər: Əvvəl lossless PNG‑yə çevirin, sonra ehtiyac varsa lossy JPEG‑XL (keyfiyyət 85‑90 %) istifadə edin.
- Audio: 16 kHz‑ə resample edin, 16‑bit PCM; Opus (lossy) ya da FLAC (lossless) ilə kodlayın.
Ön‑emal / Tokenləşdirin
Modelinizə verəcəyiniz eyni tokenləşdiricidən (məsələn,tiktokenfor GPT‑NeoX) istifadə edin. Nəticəint32[]token ID‑lərini birbaşa qeydə yazın.Hər qeydini seriyalaşdırın
Sürətli ikili seriyalaşdırıcı seçin: Protocol Buffers, FlatBuffers, ya da Arrow IPC. Məqsəd hər nümunə üçün tək byte string yaratmaqdır ki, TFRecord‑a ya da tarball‑a yazılsın.Shard‑ləşdirin və sıxın
- Hədəf shard ölçüsü: 256 MiB – 1 GiB (S3 GET range sorğuları üçün optimal).
- Zstandard (level 3‑5) ilə sıxın – sürətli dekompressiya, yaxşı nisbət.
- Adlandırma nümunəsi:
train-00000-of-01000.tfrecord.zst.
Manifest yaradın
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]Manifest doğrulama, davamlı təlim və audit üçün tək həqiqi mənbədir.
Doğrulama
Qeydlərin 0.1 %‑ni təsadüfi seçin, hər sahəni deşifrə edin və məntiqi yoxlamalar aparın (şəkil deşifrə, token uzunluğu, audio müddəti). Ümumi statistikaları (vocab əhatəsi, çözünürlük paylanması) hesablayın və manifest‑ə əlavə edin.Versiyalaşdırın və dəyişməz saxlayın
Shard‑ları + manifest‑ı dəyişməz bucket‑a yükləyin (gs://my‑project/datasets/v1/). Semantik versiya (v1.0.0) ilə işarələyin və snapshot‑ı data‑versioning sistemi (DVC, LakeFS) ilə qeyd edin.Təlim döngünüzdə yükləyin
# 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: # modelə ötür … pass
Yaranan Trendlər və Gələcəyə Hazırlıq
| Trend | Niyə indi vacibdir | Tez addım |
|---|---|---|
| Birləşmiş çox‑modal konteynerlər (Meta‑nin MDS, DeepLake) | Tek fayl tipində mətn, şəkil, video, audio və embedding‑lər, daxili versiyalaşdırma. | DeepLake‑da pilot sınaq; LangChain və LlamaIndex ilə inteqrasiya edir. |
| Zero‑copy GPU‑direct storage | NVMe‑over‑Fabric + GPUDirect sayəsində sıxılmış shard‑lar birbaşa GPU yaddaşına axıra bilir. | NVMe‑SSD hovuzunuz varsa torch.utils.data.DataLoader(persistent_workers=True)‑i aktivləşdirin. |
| Sxem‑evolusiyası dəstəkləyən formatlar | Arrow 13+ sahələri əlavə/çıxarmaq üçün bütün dataset‑i yenidən yazmağa ehtiyac qalmır. | Arrow/Parquet‑i gələcəkdə dərinlik xəritələri, video və ya əlavə metadata əlavə edəcək pipeline‑lər üçün seçin. |
| Öz‑özünə öyrədilmiş ön‑kodlaşdırma | CLIP şəkil embedding‑ləri və ya wav2vec audio embedding‑lərini saxlamaq fine‑tuning‑i 2‑3× sürətləndirir. | Arrow cədvəlinizə image_emb (float16) sütunu əlavə edin; gələcək təcrübələr üçün orijinal şəkili də saxlayın. |
| Məxfilik‑qoruyucu saxlamalar | Şifrələnmiş TFRecord + secure enclave‑lər GDPR‑a uyğun sahələr üçün ortaya çıxır. | PII‑niz varsa tf.io.TFRecordWriter‑ı xüsusi şifrələmə wrapper‑i ilə qiymətləndirin. |
| Data‑centric AI ölçüləri | OCR‑etibarlılığı, bulanıqlıq, SNR kimi keyfiyyət skorları artıq hiper‑parametr kimi qəbul edilir. | Manifest‑də per‑shard keyfiyyət skorlarını saxlayın və təlim zamanı aşağı keyfiyyətli shard‑ları filtr edin. |
İstehsal‑Hazır Yoxlama Siyahısı
-
.protoya da Arrow sxemi faylı dataset‑in yanında saxlanılıb. - Bütün shard‑lar sürətli kodkl (ZSTD‑L3 tövsiyə olunur) ilə sıxılıb.
- Shard ölçüsü 256 MiB‑dən 1 GiB‑ə qədərdir.
- Manifest checksum, qeyd sayı, per‑shard statistikalar və preprocessing kodunun git hash‑ini ehtiva edir.
- Dəyişməz versiya idarəetməsi (DVC, LakeFS və ya oxşar) aktivdir.
- Hər shard üçün data keyfiyyəti ölçüləri qeyd olunub.
- Məxfilik auditı tamamlanıb (PII redaktəsi, istəyə bağlı şifrələmə).
- Son‑son test loaderi təsadüfi bir shard‑ı səhvsiz oxuya bilir.
- README‑da sxem, ön‑emal addımları və shard‑ların necə yenidən yaradılacağı izah olunub.
Bu planı izləyərək təlim pipeline‑larınızı sürətli, ucuz və təkrarlana bilən saxlayacaqsınız – müasir LLM komandalarının üç əsas sütunu.
Etiketlər: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training