آخر تحديث: 21 May, 2025

TL;DR – الصيغة التي تختارها يمكن أن تخفض 30‑50 % من زمن التدريب، وتقلل تكاليف التخزين بنسبة 1 %–5 %، وتحافظ على نماذجك متعددة الوسائط من التعثر بسبب البيانات غير المتناسقة. الخيار المثالي هو حاوية ثنائية عمودية جاهزة للبث (TFRecord، WebDataset، Arrow/Parquet) تُخزن النص المسبق تجزيئه إلى رموز والوسائط المشفرة مسبقًا في شظية واحدة مُتحكم فيها بالإصدار.
لماذا يهم تنسيق الملف لتدريب الذكاء الاصطناعي
| الحقيقة | ماذا يعني ذلك لك |
|---|---|
| الصيغ الثنائية العمودية أسرع بنسبة 30‑50 % مقارنةً بملفات CSV أو النص العادي | اختر صيغة تتواصل مباشرةً مع عتادك (GPU/TPU) ومع خط الأنابيب (TensorFlow، PyTorch، Spark). |
| عدم تجانس التجزئة أو فك تشفير الصور يضر بجودة النموذج | قم بتجميد خط ما قبل المعالجة مرة واحدة، ثم خزن التمثيل المجزأ مسبقًا أو المشفر مسبقًا. |
| نماذج اللغة الضخمة على مستوى بيتابايت توفر ملايين الدولارات مع تقليل الحجم بنسبة 1 % | استخدم حاويات مضغوطة ومقسمة إلى شظايا (ZSTD‑TFRecord، Arrow/Parquet مع ترميز القاموس). |
| النماذج متعددة الوسائط تحتاج إلى بيانات ميتا متزامنة للمواءمة | احتفظ بالطوابع الزمنية، ومربعات الإحاطة، ومعرفات الشروحات داخل نفس السجل بدلاً من ملفات منفصلة. |
| الامتثال التنظيمي الآن يتطلب بيانات غير قابلة للتغيير ومُتحققة بالهاش | أنشئ ملف بيان (JSON/YAML) يسجل المخطط، ومجموع التحقق، والأصل، والإصدار. |
الخلاصة: التنسيق هو خط الدفاع الأول ضد بطء الإدخال/الإخراج، والبيانات الضوضائية، ومشكلات الامتثال.
المفاهيم الأساسية والمصطلحات (مرجع سريع)
| المفهوم | تعريف بجملة واحدة | حالة الاستخدام النموذجية |
|---|---|---|
| Sharding | تقسيم مجموعة بيانات ضخمة إلى العديد من الملفات الصغيرة القابلة للقراءة بشكل مستقل (مثلاً شظايا بحجم 1 GB). | التحميل المتوازي على مجموعة تدريب موزعة. |
| Streaming‑Ready Format | ملفات يمكن قراءتها تسلسليًا دون طلبات عشوائية (TFRecord، WebDataset .tar). | التدريب مباشرةً من S3/GCS دون نسخة محلية. |
| Columnar Storage | البيانات مخزنة حسب العمود بدلاً من الصف (Parquet، Arrow). | تصفية فعّالة لوسيلة واحدة (مثلاً تحميل الشروحات فقط). |
| Self‑Describing Schema | الملف يضم أسماء الحقول وأنواعها داخله. | يضمن التوافق عبر إصدارات الشيفرة. |
| Lazy Decoding / Pre‑Tokenization | تخزين النص المجزأ مسبقًا (معرفات صحيحة) أو المتجهات المضمنة مسبقًا. | يقلل وقت ما قبل المعالجة 2‑5 مرات خلال كل حقبة. |
| Multi‑Modal Record | سجل منطقي واحد يجمع الصورة، النص، الصوت، والبيانات الوصفية. | يُمكّن أخذ عينات متزامنة لنماذج الرؤية‑نص أو الصوت‑نص. |
| Manifest / Index File | ملف JSON/YAML صغير يسرد جميع الشظايا، ومجموعات التحقق، وإحصاءات كل شظية. | تحقق سريع، تدريب قابل للاستئناف، سجلات تدقيق. |
| Data‑Versioning | معاملة البيانات كالكود (DVC، LakeFS، Pachyderm). | تجارب قابلة لإعادة الإنتاج والامتثال التنظيمي. |
اختيار الصيغة المناسبة
| الصيغة | دعم الوسائط | الضغط | البث | المخطط | النظام البيئي |
|---|---|---|---|---|---|
| TFRecord | أي كائن ثنائي → نص، صورة، صوت | Built‑in GZIP/ZSTD | ✅ | Implicit (via tf.io.parse_example) | TensorFlow, PyTorch (torchdata), HuggingFace datasets |
WebDataset (.tar, .tar.gz) | متعدد الوسائط (صورة + نص + صوت) | External (gzip, zstd) | ✅ | Implicit key‑value | PyTorch DataLoader, webdataset lib |
| Apache Arrow / Parquet | عمودي، هياكل متداخلة، كائنات ثنائية | Snappy/ZSTD/LZ4 | ✅ (Arrow Flight) | ✅ (self‑describing) | Spark, Pandas, PyArrow, HuggingFace datasets |
| JSONL / NDJSON | قابل للقراءة من قبل الإنسان، مرن | None (or gzip) | ❌ | Implicit | Quick prototyping, small datasets |
| LMDB | قراءات عشوائية سريعة (مفتاح‑قيمة) | None (store compressed blobs) | ❌ | Implicit | Retrieval‑augmented generation |
| HDF5 | مجموعات هرمية، مصفوفات كبيرة | Built‑in gzip/lzf | ❌ (needs chunking) | Implicit | Scientific data, audio spectrograms |
قاعدة إرشادية: – التدريب على نطاق واسع → TFRecord، WebDataset، أو Arrow/Parquet (تدفق، ضغط، ودعم التقسيم). – العمل الاستكشافي → JSONL (قابل للقراءة من قبل الإنسان، سهل التحرير). – الوصول العشوائي المكثف (مثل التوليد المعزز بالاسترجاع) → LMDB.
مخطط خطوة بخطوة (من الملفات الخام إلى الشظايا الجاهزة للإنتاج)
حدد مخطط مصدر الحقيقة الوحيد
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. }احفظ هذا
.proto(أو مخطط Arrow) بجانب مجموعة البيانات.اجمع ونظّف الأصول الخام
- النص: Unicode‑NFKC، إزالة الأحرف التحكمية، إزالة التكرارات.
- الصور: تحويل إلى PNG غير مضغوط أولاً، ثم اختياريًا JPEG‑XL مضغوط (جودة 85‑90 %).
- الصوت: إعادة العينة إلى 16 kHz، 16‑bit PCM؛ تشفير بـ Opus (مضغوط) أو FLAC (غير مضغوط).
ما قبل المعالجة / التجزئة
استخدم أداة التجزئة نفسها التي ستمد النموذج (مثلاًtiktokenلـ GPT‑NeoX). احفظ معرفات الرموزint32[]الناتجة مباشرةً في السجل.سلسلة كل سجل
اختر مُسلسلًا ثنائيًا سريعًا: Protocol Buffers، FlatBuffers، أو Arrow IPC. الهدف هو سلسلة بايت واحدة لكل مثال يمكن كتابتها إلى TFRecord أو ملف tar.قسم واضغط
- حجم الشظية المستهدف: 256 MiB – 1 GiB (مثالي لطلبات نطاق S3 GET).
- ضغط باستخدام Zstandard (المستوى 3‑5) – فك ضغط سريع، نسبة جيدة.
- نمط التسمية:
train-00000-of-01000.tfrecord.zst.
أنشئ ملف بيان
[ { "shard": "train-00000-of-01000.tfrecord.zst", "checksum": "sha256:ab12…", "num_examples": 12456, "avg_seq_len": 256, "git_hash": "d3f9c1e" }, … ]ملف البيان هو مصدر الحقيقة الوحيد للتحقق، التدريب القابل للاستئناف، وسجلات التدقيق.
تحقق
عينة عشوائية بنسبة 0.1 % من السجلات، فك ترميز كل حقل، وإجراء فحوصات صحة (فك ترميز الصورة، طول الرموز، مدة الصوت). احسب إحصاءات عامة (تغطية المفردات، توزيع الدقة) وخزنها في ملف البيان.إصدار وتخزين بشكل غير قابل للتغيير
ادفع الشظايا + ملف البيان إلى دلو غير قابل للتغيير (gs://my‑project/datasets/v1/). ضع علامة بإصدار دلالي (v1.0.0) وسجل اللقطة في نظام إصدار البيانات (DVC، LakeFS).حمّل في حلقة التدريب الخاصة بك
# 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
الاتجاهات الناشئة وتأكيد المستقبل
| الاتجاه | لماذا يهم الآن | إجراء سريع |
|---|---|---|
| حاويات متعددة الوسائط موحدة (MDS من Meta، DeepLake) | نوع ملف واحد للنص، الصورة، الفيديو، الصوت، والتمثيلات المتضمنة، مع إصدار مدمج. | جرّب تجربة تجريبية مع DeepLake؛ يتكامل مع LangChain وLlamaIndex. |
| تخزين مباشر للـ GPU بدون نسخ | NVMe‑over‑Fabric + GPUDirect يتيح لك بث الشظايا المضغوطة مباشرةً إلى ذاكرة الـ GPU. | عند توفر مجموعة NVMe‑SSD، فعّل torch.utils.data.DataLoader(persistent_workers=True). |
| صيغ صديقة لتطور المخطط | Arrow 13+ يتيح إضافة/إزالة الحقول دون إعادة كتابة مجموعة البيانات بالكامل. | فضّل Arrow/Parquet لأي خط أنابيب قد يضيف لاحقًا خرائط العمق، الفيديو، أو بيانات وصفية إضافية. |
| ترميز مسبق ذاتي الإشراف | تخزين تمثيلات CLIP للصور أو تمثيلات wav2vec للصوت يقلل الحوسبة بمقدار 2‑3× للتدريب الدقيق. | أضف عمودًا إضافيًا image_emb (float16) إلى جدول Arrow؛ احتفظ بالصورة الأصلية لتجارب مستقبلية. |
| تخزين يحافظ على الخصوصية | TFRecord المشفر + الحواجز الآمنة تظهر في المجالات ذات المتطلبات الصارمة للـ GDPR. | قيّم tf.io.TFRecordWriter مع غلاف تشفير مخصص إذا كنت تتعامل مع بيانات تعريفية شخصية (PII). |
| مقاييس الذكاء الاصطناعي المرتكزة على البيانات | درجات جودة البيانات (ثقة OCR، مقياس الضبابية، نسبة الإشارة إلى الضوضاء) أصبحت الآن معلمات فرعية من الدرجة الأولى. | خزن درجات جودة كل شظية في ملف البيان وصفي الشظايا منخفضة الجودة أثناء التدريب. |
قائمة التحقق الجاهزة للإنتاج
- ملف المخطط (
.protoأو مخطط Arrow) مخزن بجانب البيانات. - جميع الشظايا مضغطة باستخدام شفرة سريعة (يوصى بـ ZSTD‑L3).
- حجم الشظية بين 256 MiB و 1 GiB.
- ملف البيان يتضمن مجموع التحقق، عدد السجلات، إحصاءات كل شظية، وتجزئة git لكود ما قبل المعالجة.
- تحكم في الإصدارات غير قابل للتغيير (DVC، LakeFS، أو ما شابه).
- مقاييس جودة البيانات مسجلة لكل شظية.
- إكمال تدقيق الخصوصية (إزالة بيانات التعريف الشخصية، تشفير اختياري).
- محمل اختبار شامل يمكنه قراءة شظية عشوائية دون أخطاء.
- ملف README يشرح المخطط، خطوات ما قبل المعالجة، وكيفية إعادة إنشاء الشظايا.
اتباع هذا المخطط سيحافظ على خطوط تدريبك سريعة، رخيصة، وقابلة لإعادة الإنتاج—الأركان الثلاثة التي تحتاجها كل فريق LLM حديث.
Tags: data‑engineering multi‑modal‑llm training‑pipelines
Slug: how-to-prepare-data-file-formats-for-ai-training