Last Updated: 21 May, 2025

TL;DR – فرمت فایلی که انتخاب میکنید میتواند 30‑50 % زمان آموزش را کاهش دهد، هزینههای ذخیرهسازی را 1 %‑5 % کم کند و از بروز مشکلات مدلهای چندمودال بهدلیل دادههای نامرتب جلوگیری کند. نقطهٔ ایدهآل یک کانتینر باینری ستونی و آماده برای استریم (TFRecord، WebDataset، Arrow/Parquet) است که متن پیشتوکنشده و رسانههای پیشرمزگذاریشده را در یک شارد کنترلشدهٔ نسخهدار ذخیره میکند.
چرا فرمت فایل برای آموزش هوش مصنوعی مهم است
| واقعیت | چه معنایی برای شما دارد |
|---|---|
| فرمتهای باینری و ستونی 30‑50 % سریعتر از CSV یا متن ساده هستند | فرمتای را انتخاب کنید که مستقیماً با سختافزار شما (GPU/TPU) و خط لوله (TensorFlow، PyTorch، Spark) ارتباط داشته باشد. |
| توکنسازی یا رمزگشایی تصویر ناسازگار باعث کاهش کیفیت مدل میشود | یکبار مسیر پیشپردازش را ثابت کنید، سپس نمایه از پیش توکنشده یا از پیش رمزگذاریشده را ذخیره کنید. |
| مدلهای LLM در مقیاس پتابایت با کاهش 1 % حجم، میلیونها دلار صرفهجویی میکنند | از کانتینرهای فشرده و شاردشده (ZSTD‑TFRecord، Arrow/Parquet با رمزگذاری دیکشنری) استفاده کنید. |
| مدلهای چندمودال به متادیتای همزمانسازی شده نیاز دارند | زمانسنجها، جعبههای محدودکننده، شناسههای کپشن را در همان رکورد نگه دارید نه در فایلهای جداگانه. |
| رعایت مقررات اکنون به دادههای غیرقابل تغییر و با هشتایید شده نیاز دارد | یک مانیفست (JSON/YAML) تولید کنید که طرحواره، چکسام، منبع و نسخه را ثبت کند. |
نتیجهگیری: فرمت اولین خط دفاعی در برابر I/O کند، دادههای نویزی و مشکلات رعایت مقررات است.
مفاهیم اصلی و اصطلاحات (مرجع سریع)
| مفهوم | تعریف یکجملهای | مورد استفاده معمول |
|---|---|---|
| شاردینگ | تقسیم یک مجموعه داده عظیم به فایلهای کوچک متعدد که بهصورت مستقل قابل خواندن هستند (مثلاً شاردهای 1 GB). | بارگذاری موازی در یک خوشه آموزشی توزیعشده. |
| فرمت آماده برای استریم | فایلی که میتواند بهصورت متوالی بدون جستجوی تصادفی خوانده شود (TFRecord، WebDataset .tar). | آموزش مستقیم از S3/GCS بدون نیاز به کپی محلی. |
| ذخیرهسازی ستونی | دادهها بهصورت ستونی نه ردیفی ذخیره میشوند (Parquet، Arrow). | فیلتر کارآمد یک مودالیت واحد (مثلاً فقط بارگذاری کپشنها). |
| طرحواره خودتوضیحی | فایل نام فیلدها و انواع آنها را در خود دارد. | تضمین سازگاری بین نسخههای مختلف کد. |
| رمزگشایی تنبل / پیشتوکنسازی | ذخیره متن از پیش توکنشده (شناسههای عددی) یا تعبیههای پیشمحاسبهشده. | زمان پیشپردازش را در هر دوره ۲‑۵ برابر کاهش میدهد. |
| رکورد چندمودال | یک رکورد منطقی که تصویر، متن، صدا و متادیتا را در خود میگیرد. | نمونهبرداری همزمان برای مدلهای بینایی‑زبان یا صدا‑متن را ممکن میسازد. |
| فایل مانیفست / ایندکس | JSON/YAML کوچکی که تمام شاردها، چکسامها و آمار هر شارد را فهرست میکند. | اعتبارسنجی سریع، آموزش قابل ادامه، ردپای حسابرسی. |
| نسخهبندی داده | در نظر گرفتن دادهها بهعنوان کد (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 | Human‑readable, flexible | None (or gzip) | ❌ | Implicit | Quick prototyping, small datasets |
| LMDB | Fast random reads (key‑value) | None (store compressed blobs) | ❌ | Implicit | Retrieval‑augmented generation |
| HDF5 | Hierarchical groups, large arrays | 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). شناسههای عددی حاصل را مستقیماً در رکورد ذخیره کنید.سریالسازی هر رکورد
یک سریالایزر باینری سریع انتخاب کنید: Protocol Buffers، FlatBuffers یا Arrow IPC. هدف داشتن یک رشته بایت برای هر مثال است که بتوان آن را در TFRecord یا یک tarball نوشت.شاردینگ و فشردهسازی
- اندازه هدف شارد: 256 MiB – 1 GiB (بهینه برای درخواستهای رنج S3).
- فشردهسازی با 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
روندهای نوظهور و آیندهپذیری
| روند | چرا اکنون مهم است | اقدام سریع |
|---|---|---|
| کانتینرهای چندمودال یکپارچه (Meta’s MDS, DeepLake) | یک نوع فایل برای متن، تصویر، ویدئو، صدا و تعبیهها، با نسخهبندی داخلی. | یک پروژه آزمایشی با DeepLake راهاندازی کنید؛ این سرویس با LangChain و LlamaIndex یکپارچه میشود. |
| ذخیرهسازی صفر‑کپی GPU‑direct | NVMe‑over‑Fabric + GPUDirect امکان استریم شاردهای فشرده مستقیماً به حافظهٔ GPU را میدهد. | وقتی یک استخر NVMe‑SSD دارید، torch.utils.data.DataLoader(persistent_workers=True) را فعال کنید. |
| قابلیت تکامل طرحواره | Arrow نسخه 13+ اجازه افزودن/حذف فیلدها بدون بازنویسی کل مجموعه داده را میدهد. | برای هر خطلولهای که ممکن است بعداً نقشههای عمق، ویدئو یا متادیتای اضافی دریافت کند، Arrow/Parquet را ترجیح دهید. |
| پیشرمزگذاری خود‑نظارتی | ذخیره تعبیههای تصویر CLIP یا صدا wav2vec هزینهٔ محاسبه را برای فاین‑تونیگ ۲‑۳× کاهش میدهد. | یک ستون اضافی image_emb (float16) به جدول Arrow خود اضافه کنید؛ تصویر اصلی را برای آزمایشهای آینده نگه دارید. |
| ذخیرهسازی حریمخصوصی | TFRecord رمزگذاریشده + محفظههای امن برای دامنههای حساس به GDPR در حال ظهور هستند. | اگر با دادههای شخصی سر و کار دارید، tf.io.TFRecordWriter را با یک لایهٔ رمزگذاری سفارشی ارزیابی کنید. |
| متریکهای هوش‑متمرکز بر داده | امتیازهای کیفیت داده (اطمینان OCR، معیار تاری، SNR) اکنون بهعنوان پارامترهای مهم مدل شناخته میشوند. | امتیازهای کیفیت هر شارد را در مانیفست ذخیره کنید و در زمان آموزش شاردهای کمکیفیت را فیلتر کنید. |
چکلیست آماده برای تولید
- فایل طرحواره (
.protoیا طرحواره Arrow) در کنار داده ذخیره شود. - تمام شاردها با یک کدک سریع (پیشنهاد ZSTD‑L3) فشرده شوند.
- اندازه شارد بین 256 MiB و 1 GiB باشد.
- مانیفست شامل چکسام، تعداد رکوردها، آمار هر شارد و هش گیت کد پیشپردازش باشد.
- نسخهبندی غیرقابل تغییر (DVC، LakeFS یا مشابه) اعمال شود.
- متریکهای کیفیت داده برای هر شارد ثبت شوند.
- ممیزی حریمخصوصی تکمیل شود (حذف PII، رمزگذاری اختیاری).
- تست انتها‑به‑انتها برای بارگذار که بتواند یک شارد تصادفی را بدون خطا بخواند، انجام شود.
- README که طرحواره، مراحل پیشپردازش و نحوهٔ بازتولید شاردها را توضیح میدهد، آماده باشد.
پیروی از این طرحنقشه، خطوط لولهٔ آموزشی شما را سریع، ارزان و بازتولیدپذیر نگه میدارد — سه ستون اساسی که هر تیم مدرن LLM به آن نیاز دارد.
برچسبها: data‑engineering multi‑modal‑llm training‑pipelines
آدرس کوتاه: how-to-prepare-data-file-formats-for-ai-training