مكتبة NVIDIA Data Loading Library (DALI) هي مكتبة مسرعة بواسطة GPU لتحميل البيانات ومعالجتها مسبقًا لتسريع تطبيقات التعلم العميق. فهو يوفر مجموعة من العناصر الأساسية المحسنة للغاية لتحميل ومعالجة بيانات الصور والفيديو والصوت. يمكن استخدامه كبديل محمول لأجهزة تحميل البيانات ومكررات البيانات المضمنة في أطر التعلم العميق الشائعة.
تتطلب تطبيقات التعلم العميق خطوط أنابيب معقدة ومتعددة المراحل لمعالجة البيانات تتضمن التحميل وفك التشفير والاقتصاص وتغيير الحجم والعديد من التحسينات الأخرى. أصبحت خطوط أنابيب معالجة البيانات هذه، والتي يتم تنفيذها حاليًا على وحدة المعالجة المركزية، بمثابة عنق الزجاجة، مما يحد من أداء التدريب والاستدلال وقابلية التوسع.
يعالج DALI مشكلة عنق الزجاجة في وحدة المعالجة المركزية عن طريق تفريغ المعالجة المسبقة للبيانات إلى وحدة معالجة الرسومات. بالإضافة إلى ذلك، تعتمد DALI على محرك التنفيذ الخاص بها، والذي تم تصميمه لزيادة إنتاجية خط أنابيب الإدخال إلى الحد الأقصى. يتم التعامل مع ميزات مثل الجلب المسبق والتنفيذ المتوازي والمعالجة المجمعة بشفافية للمستخدم.
بالإضافة إلى ذلك، تحتوي أطر التعلم العميق على تطبيقات متعددة للمعالجة المسبقة للبيانات، مما يؤدي إلى تحديات مثل إمكانية نقل التدريب وسير عمل الاستدلال، وقابلية صيانة التعليمات البرمجية. تعتبر خطوط أنابيب معالجة البيانات التي يتم تنفيذها باستخدام DALI محمولة لأنه يمكن إعادة توجيهها بسهولة إلى TensorFlow وPyTorch وPaddlePaddle.
دالي في العمل:
من nvidia.dali.pipeline استيراد Pipeline_defimport nvidia.dali.types كأنواع استيراد nvidia.dali.fn كـ fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# للتشغيل باستخدام بيانات مختلفة، راجع وثائق nvidia.dali.fn.readers. يشير الملف # إلى https://github.com/NVIDIA/DALI_extradata_root_dir = os.environ['DALI_EXTRA_PATH']images_dir = os.path.join(data_root_dir, 'db', 'single', 'jpeg')def Loss_func(pred) ، y): نموذج passdef (x): passdef للخلف (الخسارة، النموذج): pass@pipeline_def(num_threads=4, devices_id=0)def get_dali_pipeline():images, labels = fn.readers.file(file_root=images_dir, Random_shuffle =True, name="Reader")# فك تشفير البيانات على وحدة معالجة الرسومات = fn.decoders.image_random_crop(images, Device="mixed",put_type=types.RGB)# تتم بقية المعالجة على وحدة معالجة الرسومات أيضًا wellimages = fn. تغيير الحجم (الصور، resize_x=256، resize_y=256)images = fn.crop_mirror_normalize(images,crop_h=224,crop_w=224,mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],std=[0.229 * 255) ، 0.224 * 255، 0.225 * 255]،mirror=fn.random.coin_flip())إرجاع الصور، labelstrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)]، ['data', 'label'],reader_name='Reader')for i، البيانات الموجودة في enumerate(train_data):x, y = data[0]['data'], data[0]['label']pred = فقدان النموذج (س) = فقدان_الوظيفة (بريد، ص) إلى الوراء (الخسارة، النموذج)
واجهة برمجة تطبيقات Python ذات النمط الوظيفي سهلة الاستخدام.
دعم تنسيقات البيانات المتعددة - LMDB، RecordIO، TFRecord، COCO، JPEG، JPEG 2000، WAV، FLAC، OGG، H.264، VP9 وHEVC.
يمكن حمله عبر أطر التعلم العميق الشائعة: TensorFlow، وPyTorch، وPaddlePaddle، وJAX.
يدعم تنفيذ وحدة المعالجة المركزية ووحدة معالجة الرسومات.
قابلة للتطوير عبر وحدات معالجة الرسومات المتعددة.
تسمح الرسوم البيانية المرنة للمطورين بإنشاء خطوط أنابيب مخصصة.
قابلة للتوسعة لتلبية الاحتياجات الخاصة بالمستخدم من خلال عوامل تشغيل مخصصة.
يعمل على تسريع تصنيف الصور (ResNet-50)، وأحمال عمل الكشف عن الكائنات (SSD)، بالإضافة إلى نماذج ASR (Jasper، RNN-T).
يسمح بمسار مباشر للبيانات بين وحدة التخزين وذاكرة وحدة معالجة الرسومات باستخدام وحدة تخزين GPUDirect.
سهولة التكامل مع NVIDIA Triton Inference Server مع DALI TRITON Backend.
مفتوح المصدر.
خلال مسابقات Kaggle للرؤية الحاسوبية: "DALI هي واحدة من أفضل الأشياء التي تعلمتها في هذه المسابقة"
وضعية البرق - أحدث نموذج بحثي لتقدير الوضعية
لتحسين استخدام الموارد في البنية التحتية للحوسبة المتقدمة
MLPerf - معيار الصناعة لقياس أجهزة وبرامج الحوسبة والتعلم العميق
"لقد قمنا بتحسين النماذج الرئيسية داخل موقع eBay باستخدام إطار عمل DALI"
يمثل العدد التالي نظرة عامة رفيعة المستوى على خطتنا لعام 2024. يجب أن تدرك أن خارطة الطريق هذه قد تتغير في أي وقت وأن ترتيب بنودها لا يعكس أي نوع من الأولوية.
نحن نشجعك بشدة على التعليق على خريطة الطريق الخاصة بنا وتزويدنا بتعليقاتك حول مشكلة GitHub المذكورة.
لتثبيت أحدث إصدار من DALI لأحدث إصدار من CUDA (12.x):
نقطة تثبيت nvidia-dali-cuda120 # أو تثبيت النقطة --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
يتطلب DALI برنامج تشغيل NVIDIA يدعم إصدار CUDA المناسب. في حالة اعتماد DALI على CUDA 12، فإنه يتطلب تثبيت مجموعة أدوات CUDA.
يتم تثبيت DALI مسبقًا في حاويات TensorFlow وPyTorch وPaddlePaddle على NVIDIA GPU Cloud.
بالنسبة لمسارات التثبيت الأخرى (المكون الإضافي TensorFlow، إصدار CUDA الأقدم، الإصدارات الليلية والأسبوعية، إلخ)، والمتطلبات المحددة، يرجى الرجوع إلى دليل التثبيت.
لبناء دالي من المصدر، يرجى الرجوع إلى دليل التجميع.
يمكن العثور على مقدمة لـ DALI في صفحة البدء.
يمكن العثور على المزيد من الأمثلة المتقدمة في صفحة الأمثلة والبرامج التعليمية.
للحصول على نسخة تفاعلية (دفتر Jupyter) من الأمثلة، انتقل إلى دليل المستندات/الأمثلة.
ملاحظة: حدد أحدث وثائق الإصدار أو وثائق الإصدار الليلي، والتي تظل متزامنة مع الفرع الرئيسي، اعتمادًا على الإصدار الخاص بك.
مؤتمر تكنولوجيا GPU 2024؛ تحسين نموذج الاستدلال الذي يقدم أعلى أداء على موقع eBay ؛ ييهينج وانغ: حدث
مؤتمر تكنولوجيا GPU 2023؛ اختراق المطورين: تسريع سير العمل في المؤسسة باستخدام خادم Triton وDALI ؛ براندون تاتل: حدث.
مؤتمر تكنولوجيا GPU 2023؛ GPU-تسريع سير العمل الجغرافي المكاني من البداية إلى النهاية ؛ كيفن جرين: حدث.
مؤتمر تكنولوجيا GPU 2022؛ NVIDIA DALI الفعالة: تسريع تطبيقات التعلم العميق الواقعية ؛ رافائيل باناش: حدث.
مؤتمر تكنولوجيا GPU 2022؛ مقدمة إلى NVIDIA DALI: المعالجة المسبقة للبيانات المسرَّعة بواسطة وحدة معالجة الرسومات ؛ خواكين أنطون جيراو: حدث.
مؤتمر تكنولوجيا GPU 2021؛ NVIDIA DALI: معالجة مسبقة للبيانات مدعومة بوحدة معالجة الرسومات بواسطة Krzysztof Łęcki وMichał Szołucha: حدث.
مؤتمر تكنولوجيا GPU 2020؛ المعالجة المسبقة السريعة للبيانات باستخدام مكتبة تحميل بيانات NVIDIA (DALI) ؛ ألبرت وولانت، جواكين أنطون جيراو: تسجيل.
مؤتمر تكنولوجيا GPU 2019؛ المعالجة المسبقة السريعة لبيانات الذكاء الاصطناعي باستخدام DALI ؛ يانوش ليسيكي، ميشال زينتكيويتز: شرائح، تسجيل.
مؤتمر تكنولوجيا GPU 2019؛ تكامل DALI مع TensorRT على Xavier ؛ جوش بارك وأنوراغ ديكسيت: شرائح، تسجيل.
مؤتمر تكنولوجيا GPU 2018؛ خط بيانات سريع للتدريب على التعلم العميق ، T. Gale، S. Layton، وP. Trędak: شرائح، تسجيل.
صفحة المطور.
منشورات المدونة.
نحن نرحب بالمساهمات في DALI. للمساهمة في DALI وتقديم طلبات السحب، اتبع الإرشادات الموضحة في مستند المساهمة.
إذا كنت تبحث عن مهمة جيدة للبدء، فيرجى التحقق من واحدة من علامة الترحيب الخاصة بالمساهمات الخارجية.
نحن نقدر التعليقات أو الأسئلة أو تقارير الأخطاء. عندما تحتاج إلى مساعدة بشأن التعليمات البرمجية، اتبع العملية الموضحة في مستند Stack Overflow. تأكد من أن الأمثلة المنشورة هي:
الحد الأدنى : استخدم أقل قدر ممكن من التعليمات البرمجية التي لا تزال تنتج نفس المشكلة.
كامل : توفير كافة الأجزاء اللازمة لإعادة إنتاج المشكلة. تحقق مما إذا كان بإمكانك تجريد التبعية الخارجية مع الاستمرار في إظهار المشكلة. كلما قل الوقت الذي نقضيه في إعادة إنتاج المشكلات، زاد الوقت الذي يمكننا تخصيصه للإصلاحات.
يمكن التحقق منه : اختبر الكود الذي أنت على وشك تقديمه للتأكد من أنه يعيد إنتاج المشكلة. قم بإزالة جميع المشاكل الأخرى التي لا تتعلق بطلبك.
تم بناء DALI في الأصل بمساهمات كبيرة من تريفور غيل، وبرزيميك تريداك، وسيمون لايتون، وأندريه إيفانوف، وسيرج بانيف.