آخر تحديث: 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/ZSTDImplicit (via tf.io.parse_example)TensorFlow, PyTorch (torchdata), HuggingFace datasets
WebDataset (.tar, .tar.gz)متعدد الوسائط (صورة + نص + صوت)External (gzip, zstd)Implicit key‑valuePyTorch DataLoader, webdataset lib
Apache Arrow / Parquetعمودي، هياكل متداخلة، كائنات ثنائيةSnappy/ZSTD/LZ4✅ (Arrow Flight)✅ (self‑describing)Spark, Pandas, PyArrow, HuggingFace datasets
JSONL / NDJSONقابل للقراءة من قبل الإنسان، مرنNone (or gzip)ImplicitQuick prototyping, small datasets
LMDBقراءات عشوائية سريعة (مفتاح‑قيمة)None (store compressed blobs)ImplicitRetrieval‑augmented generation
HDF5مجموعات هرمية، مصفوفات كبيرةBuilt‑in gzip/lzf❌ (needs chunking)ImplicitScientific data, audio spectrograms

قاعدة إرشادية:التدريب على نطاق واسع → TFRecord، WebDataset، أو Arrow/Parquet (تدفق، ضغط، ودعم التقسيم). – العمل الاستكشافي → JSONL (قابل للقراءة من قبل الإنسان، سهل التحرير). – الوصول العشوائي المكثف (مثل التوليد المعزز بالاسترجاع) → LMDB.


مخطط خطوة بخطوة (من الملفات الخام إلى الشظايا الجاهزة للإنتاج)

  1. حدد مخطط مصدر الحقيقة الوحيد

    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) بجانب مجموعة البيانات.

  2. اجمع ونظّف الأصول الخام

    • النص: Unicode‑NFKC، إزالة الأحرف التحكمية، إزالة التكرارات.
    • الصور: تحويل إلى PNG غير مضغوط أولاً، ثم اختياريًا JPEG‑XL مضغوط (جودة 85‑90 %).
    • الصوت: إعادة العينة إلى 16 kHz، 16‑bit PCM؛ تشفير بـ Opus (مضغوط) أو FLAC (غير مضغوط).
  3. ما قبل المعالجة / التجزئة
    استخدم أداة التجزئة نفسها التي ستمد النموذج (مثلاً tiktoken لـ GPT‑NeoX). احفظ معرفات الرموز int32[] الناتجة مباشرةً في السجل.

  4. سلسلة كل سجل
    اختر مُسلسلًا ثنائيًا سريعًا: Protocol Buffers، FlatBuffers، أو Arrow IPC. الهدف هو سلسلة بايت واحدة لكل مثال يمكن كتابتها إلى TFRecord أو ملف tar.

  5. قسم واضغط

    • حجم الشظية المستهدف: 256 MiB – 1 GiB (مثالي لطلبات نطاق S3 GET).
    • ضغط باستخدام Zstandard (المستوى 3‑5) – فك ضغط سريع، نسبة جيدة.
    • نمط التسمية: train-00000-of-01000.tfrecord.zst.
  6. أنشئ ملف بيان

    [
      {
        "shard": "train-00000-of-01000.tfrecord.zst",
        "checksum": "sha256:ab12…",
        "num_examples": 12456,
        "avg_seq_len": 256,
        "git_hash": "d3f9c1e"
      },
      
    ]
    

    ملف البيان هو مصدر الحقيقة الوحيد للتحقق، التدريب القابل للاستئناف، وسجلات التدقيق.

  7. تحقق
    عينة عشوائية بنسبة 0.1 % من السجلات، فك ترميز كل حقل، وإجراء فحوصات صحة (فك ترميز الصورة، طول الرموز، مدة الصوت). احسب إحصاءات عامة (تغطية المفردات، توزيع الدقة) وخزنها في ملف البيان.

  8. إصدار وتخزين بشكل غير قابل للتغيير
    ادفع الشظايا + ملف البيان إلى دلو غير قابل للتغيير (gs://my‑project/datasets/v1/). ضع علامة بإصدار دلالي (v1.0.0) وسجل اللقطة في نظام إصدار البيانات (DVC، LakeFS).

  9. حمّل في حلقة التدريب الخاصة بك

    # 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