Safetensors هي صيغة نموذج رائعة مصممة لتخزين الموترات (tensors) بأمان، وتتميز بسرعة وأداء مثيرين للإعجاب مقارنة بالعديد من البدائل الموجودة في هذا المجال. Safetensors ليست سريعة بشكل لا يصدق فحسب، بل تم تصميمها أيضًا مع وضع البساطة والأمان في الاعتبار، مما يميزها عن العديد من الصيغ التقليدية المستخدمة في مجال تعلم الآلة.
لماذا تختار Safetensors؟
مع وجود عدد كبير من الصيغ المتاحة لتعلم الآلة وتخزين البيانات، قد تتساءل عما يميز Safetensors. حسنًا، لنأخذ لحظة لمقارنة بعض هذه الصيغ لفهم كيف تقدم Safetensors أداءً جيدًا في المعايير الرئيسية:
- آمن: هل يمكن لملف تم تنزيله عشوائيًا تشغيل تعليمات برمجية اعتباطية؟
- نسخ صفري (Zero-copy): هل تتطلب قراءة الملف ذاكرة أكبر من الملف الأصلي؟
- تحميل كسول (Lazy loading): هل يمكن فحص الملف دون تحميل كل شيء؟ وهل يمكن تحميل بعض الموترات الموجودة فيه فقط دون مسح الملف بأكمله (مهم في بيئة موزعة)؟
- التحكم في التخطيط: هل يمكن التحكم في موقع الموترات داخل الملف لضمان الوصول السريع إلى الموترات الفردية؟
- لا يوجد حد لحجم الملف: هل هناك حد لحجم الملف؟
- المرونة: هل يمكن حفظ تعليمات برمجية مخصصة في الصيغة واستخدامها لاحقًا بدون أي تعليمات برمجية إضافية؟
- Bfloat16: هل تدعم الصيغة bfloat16 الأصلي دون الحاجة إلى حلول غريبة؟
يمثل كل رمز ✔ وجود ميزة، و ❌ غيابها، و ~ وجودًا جزئيًا، و ? وجودًا غير معروف.
الصيغة | آمن | نسخ صفري | تحميل كسول | لا يوجد حد لحجم الملف | التحكم في التخطيط | المرونة | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
من خلال هذه المقارنة، يمكنك أن ترى أن Safetensors تفي أو تتجاوز الميزات التي توفرها صيغ النماذج الأخرى. وتجدر الإشارة بشكل خاص إلى قدرتها على معالجة البيانات “بنسخ صفري” والتحميل الكسول، مما يمكن أن يعزز بشكل كبير كفاءة معالجة البيانات في مهام تعلم الآلة.
بعض المقارنات الجديرة بالملاحظة
في حين أن جميع الصيغ لها نقاط قوتها الفريدة، دعنا نفحص كيف تقارن Safetensors ببعض الصيغ الأكثر استخدامًا:
- Pickle (PyTorch): صيغة مستخدمة على نطاق واسع، ولكن Pickle تأتي مع عيب كبير – فهي غير آمنة لأنها تسمح بتنفيذ تعليمات برمجية اعتباطية.
- H5 (Tensorflow): على الرغم من أنها آمنة، إلا أنها لا تدعم النسخ الصفري، وهي ميزة أساسية لمعالجة البيانات بكفاءة.
- SavedModel (Tensorflow): هذه الصيغة خاصة بـ Tensorflow وتفتقر إلى المرونة للتطبيقات الأخرى.
- Numpy (npz): على الرغم من شعبيتها، إلا أن هذه الصيغة لا تدعم bfloat16، وهي ميزة بالغة الأهمية بشكل متزايد في عالم تعلم الآلة.
نظرة متعمقة على Safetensors
بالغوص قليلًا في Safetensors، نجد أنها ليست مجرد صيغة بيانات، ولكنها مزيج من خيارات التصميم المدروسة التي تعزز السلامة والكفاءة والفائدة:
- نسخ صفري: يسمح تصميم Safetensors بنسخ صفري حقيقي على وحدة المعالجة المركزية (CPU) إذا كان الملف موجودًا بالفعل في ذاكرة التخزين المؤقت. على وحدة معالجة الرسومات (GPU)، على الرغم من أن النسخ ضروري دائمًا بسبب عدم وجود ذاكرة تخزين مؤقت على القرص، إلا أن التصميم يتجاوز الحاجة إلى تخصيص جميع الموترات على وحدة المعالجة المركزية في أي وقت.
- Endianness: تستخدم Safetensors ترتيب little-endian، وهو خيار شائع في تخزين البيانات.
- الترتيب: تعتمد Safetensors ترتيب ‘C’ أو الترتيب الرئيسي للصف. يتوافق هذا الاختيار مع المعيار السائد في تخزين البيانات.
- الخطوة (Stride): الخطو غير مدعوم. يجب تعبئة جميع الموترات قبل تسلسلها. تم اتخاذ قرار التصميم هذا بناءً على أنماط الاستخدام الحالية في الصيغ المتسلسلة.
خطوة إضافية
بالإضافة إلى كونها صيغة تخزين بيانات فعالة وآمنة، تقدم Safetensors أيضًا بعض المزايا الإضافية:
- منع هجمات DOS: يقلل تصميم Safetensors من إمكانية تسبب الملفات الضارة في هجمات DOS. هناك حد لحجم الرأس لمنع تحليل JSON كبير جدًا، وهناك ضمان بأن العناوين في الملف لا تتداخل، مما يعني أن تحميل ملف يجب ألا يتجاوز حجم الملف في الذاكرة.
- تحميل أسرع: تتجاوز Safetensors النسخ الإضافي لوحدة المعالجة المركزية في PyTorch، مما يتيح أوقات تحميل وحدة المعالجة المركزية سريعة للغاية مقارنة بـ Pickle. أوقات تحميل وحدة معالجة الرسومات سريعة أو أسرع من مكافئاتها في PyTorch.
- تحميل كسول: في الإعدادات الموزعة (عقد متعددة أو وحدات معالجة رسومات متعددة)، تتيح Safetensors تحميل جزء فقط من الموترات، مما يسرع بشكل كبير أوقات تحميل النموذج ويحسن حلقات ملاحظات التطوير.
في البرية
تشهد Safetensors بالفعل اعتمادًا واسع النطاق في شركات الذكاء الاصطناعي الرائدة مثل Hugging Face و EleutherAI و StabilityAI. تتضمن العديد من المشاريع البارزة التي تستخدم Safetensors ما يلي:
- huggingface/transformers
- AUTOMATIC1111/stable-diffusion-webui
- Llama-cpp
- microsoft/TaskMatrix
- hpcaitech/ColossalAI
- huggingface/pytorch-image-models
- CivitAI
- huggingface/diffusers
- coreylowman/dfdx
- invoke-ai/InvokeAI
- oobabooga/text-generation-webui
- Sanster/lama-cleaner
- PaddlePaddle/PaddleNLP
- AIGC-Audio/AudioGPT
- brycedrennan/imaginAIry
- comfyanonymous/ComfyUI
- LianjiaTech/BELLE
في الختام، فإن Safetensors، بمجموعتها الفريدة من الميزات والفوائد، مهيأة لتغيير قواعد اللعبة في عالم تعلم الآلة وتخزين البيانات. لذا، تفضل وجرّبها – فمستقبل صيغ النماذج في انتظارك!