HyperAI

تم إصدار PyTorch 1.13 رسميًا: ترقية CUDA، ودمج مكتبات متعددة، ودعم شريحة M1

منذ 2 أعوام
معلومة
Jiaxin Sun
特色图像

مقدمة المحتوى: أعلن فريق PyTorch مؤخرًا عن إصدار Pytorch 1.13 على المدونة الرسمية. ستقدم هذه المقالة أبرز أربع ميزات في الإصدار الجديد بالتفصيل.

تم نشر هذه المقالة لأول مرة على WeChat: مجتمع مطوري PyTorch

وفقًا للمقدمة الرسمية، يتضمن PyTorch 1.13 الإصدار المستقر من BetterTransformer، ولم يعد يدعم CUDA 10.2 و11.3، وأكمل الانتقال إلى CUDA 11.6 و11.7. بالإضافة إلى ذلك، يضيف الإصدار التجريبي أيضًا دعمًا لشريحة Apple M1 وfunctorch.fuctorch هي مكتبة في PyTorch توفر تحويلات vmap (المتجه) وautodiff القابلة للتكوين

ملخص لأهم مميزات PyTorch 1.13:

  1. تدعم مجموعة ميزات BetterTransformer التنفيذ السريع لنماذج Transformer العامة أثناء الاستدلال دون تعديل النموذج. تتضمن التحسينات أيضًا تسريع نواة الجبر الخطي add+matmul للأحجام المستخدمة بشكل شائع في نماذج المحولات، ويتم الآن تمكين Tensors المتداخلة بشكل افتراضي.

  2. لم تعد إصدارات CUDA القديمة مدعومة، وتم تقديم أحدث إصدار CUDA الذي أصدرته Nvidia. يتيح هذا دعم C++17 لـ PyTorch ووحدات kernel GPU المفتوحة الجديدة من NVIDIA.

  3. تم تغيير functorch من حزمة منفصلة إلى حزمة مباشرة import functorch استيراد PyTorch للاستخدام دون الحاجة إلى تثبيته بشكل منفصل.

  4. يوفر الاختبار إصدارات أصلية لأجهزة Mac ذات الشريحة M1 ودعمًا أفضل لواجهة برمجة تطبيقات PyTorch.أدخل وصف الصورة هنا

الميزات المستقرة

1. واجهة برمجة تطبيقات BetterTransformer

تدعم مجموعة ميزات BetterTransformer التنفيذ السريع لنماذج Transformer العامة أثناء الاستدلال دون تعديل النموذج.

كمكمل، يعمل PyTorch 1.13 أيضًا على تسريع نواة الجبر الخطي add+matmul للحجم المستخدم عادةً في نموذج Transformer.

من أجل تحسين أداء نماذج معالجة اللغة الطبيعية،يتيح BetterTransformer في PyTorch 1.13 تمكين Tensors المتداخلة بشكل افتراضي. من حيث التوافق، يتم إجراء فحص القناع للتأكد من إمكانية توفير قناع مستمر.

يمكن تعطيل فحص القناع الخاص بـ src_key_padding_mask في Transformer Encoder عن طريق تعيين mask_check=False. يمكن أن يؤدي هذا الإعداد إلى تسريع عملية المعالجة، بدلاً من مجرد توفير قناع محاذي.

أخيرًا، يتم توفير رسائل خطأ أفضل لتبسيط تشخيص الإدخال غير الصحيح وتوفير طرق تشخيص أفضل لأخطاء تنفيذ المسار السريع.

تم دمج Better Transformer بشكل مباشر في مكتبة PyTorch TorchText. وهذا يجعل من الأسهل بالنسبة لمستخدمي TorchText الاستفادة من سرعة وكفاءة BetterTransformer.

أصبح تنفيذ Fastpath الخاص بـ Betterformfast مستقرًا الآن ويمكّن من إجراء تحسينات متفرقة لتمثيلات الموتر المتداخلة افتراضيًا

2. تقديم CUDA 11.6 و11.7، ولم يعد يدعم CUDA 10.2 و11.3

CUDA 11 هو أول إصدار CUDA يدعم C++17. يعد إسقاط الدعم لـ CUDA 10.2 خطوة مهمة في تعزيز دعم PyTorch لـ C++17 وتحسين كود PyTorch من خلال التخلص من تعليمات CUDA 10.2 القديمة المحددة.

يؤدي سحب CUDA 11.3 وتقديم 11.7 إلى جعل PyTorch أكثر توافقًا مع وحدات kernel GPU المفتوحة من NVIDIA. ومن أهم النقاط البارزة الأخرى هو دعم التحميل الكسول.

يأتي CUDA 11.7 مزودًا بـ cuDNN 8.5.0، والذي يتضمن عددًا من التحسينات لتسريع النماذج المستندة إلى Transformer، وتقليل حجم المكتبة بمقدار 30%، وإجراء تحسينات مختلفة على محرك الاندماج وقت التشغيل.

الميزات التجريبية

1. فانكتور

على غرار Google JAX، functorch هي مكتبة في PyTorch توفر تحويلات vmap (المتجه) وautodiff القابلة للتكوين. إنه يدعم حالات استخدام autodiff المتقدمة التي يصعب التعبير عنها في PyTorch، بما في ذلك:

  • تجميع النماذج

  • الحساب الفعال للجاكوبيين والهسيانيين

  • حساب التدرجات لكل عينة أو كميات أخرى لكل عينة

يحتوي PyTorch 1.13 على مكتبة functorch مدمجة، ولا حاجة لتثبيتها بشكل منفصل. بعد تثبيت PyTorch عبر conda أو pip، يمكنك استخدامه في برنامجك import functorch .

2. Intel VTune™ Profiler وITT المتكاملان

إذا أراد مستخدمو PyTorch استخدام مقاييس الأداء الأساسية لتحليل أداء كل مشغل على منصة Intel،من الممكن تصور الجدول الزمني على مستوى المشغل لتنفيذ البرنامج النصي PyTorch في Intel VTune™ Profiler.

with torch.autograd.profiler.emit_itt():
    for i in range(10):
        torch.itt.range_push('step_{}'.format(i))
        model(input)
        torch.itt.range_pop()

3. NNC: تمت إضافة الدعم لـ BF16 والقنوات الأخيرة

من خلال إضافة الدعم لقنوات last وBF16 في NNC، تم تحسين أداء استنتاج وضع الرسم البياني الخاص بـ TorchScript على وحدات المعالجة المركزية x86 بشكل كبير.

في معالجات Intel Cooper Lake، يمكن لهذين التحسينين مضاعفة أداء النماذج المرئية بأكثر من الضعف.

من خلال TorchScript الحالي، والقنوات الأخيرة وBF16 Autocast API، يمكن تحقيق تحسينات في الأداء. كما هو موضح أدناه، سيتم نقل التحسينات في NNC إلى PyTorch DL Compiler TorchInductor الجديد:

import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
  model = torch.jit.freeze(model)
  # Run the traced model
  model(data)

4. إضافة الدعم لأجهزة Apple المزودة بشريحة M1

منذ الإصدار 1.12، تعمل PyTorch على توفير إصدارات أصلية لشريحة M1 من Apple. يعمل PyTorch 1.13 على تحسين واجهة برمجة التطبيقات ذات الصلة بشكل أكبر.

تم اختبار PyTorch 1.13 على مثيلات macOS 12.6 M1 مع جميع الوحدات الفرعية باستثناء torch.distribution. تعمل هذه الاختبارات المحسنة على إصلاح أشياء مثل توسيع cpp وتصحيح الالتفاف على مدخلات معينة.

ملاحظة: تتطلب هذه الميزة نظام التشغيل macOS 12 أو إصدارًا أحدث لشريحة M1 وتستخدم Python الأصلي (arm64).

ميزات النموذج الأولي

1. دعم الواجهة الخلفية لـ AWS Graviton

يحقق PyTorch 1.13 تحسينات كبيرة في CV وNLP على وحدات المعالجة المركزية aarch64 من خلال مكتبة Arm Compute Library (ACL). يتيح هذا لـ ACL backend دعم وحدات PyTorch و torch-xla. وتشمل أبرز النقاط ما يلي:

  • تمكين mkldnn+acl كواجهة خلفية افتراضية لعجلة aarch64 torch

  • تمكين عامل mkldnn matmul لأجهزة arch64 BF16

  • جلب وظيفة TensorFlow xla+acl إلى torch-xla.

2. معقم كودا

بمجرد تمكينه، سيبدأ Sanitizer في تحليل عمليات CUDA الأساسية التي يتم استدعاؤها بواسطة كود PyTorch الخاص بالمستخدم للكشف عن أخطاء سباق البيانات.

ملاحظة: تحدث هذه الأخطاء بسبب الوصول غير المتزامن للبيانات من تدفقات CUDA المختلفة.

على غرار Thread Sanitizer، سيتم طباعة الخطأ الموجود مع تتبع المكدس للوصول غير الصحيح.

يمكن التغاضي بسهولة عن البيانات التالفة في تطبيقات التعلم الآلي، وفي بعض الأحيان لا تكون الأخطاء واضحة، لذا فإن برنامج CUDA Sanitizer، الذي يستخدم للكشف عن الأخطاء وتحديد موقعها، مهم بشكل خاص.

3. دعم جزئي لـ Python 3.11

يمكن للمستخدمين تنزيل الثنائيات الخاصة بنظام Linux التي تدعم Python 3.11 عبر pip. ومع ذلك، فإن هذه الميزة هي مجرد إصدار معاينة، والميزات مثل Distributed وProfiler وFX وJIT ليست مدعومة بالكامل.

من 0 إلى 1، تعلم البرنامج التعليمي الرسمي لـ PyTorch

أطلق موقع OpenBayes.com العديد من دروس PyTorch الرسمية باللغة الصينية، بما في ذلك على سبيل المثال لا الحصر NLP وCV وDL وغيرها من الأمثلة.قم بزيارة وحدة التحكم وابحث عن الموارد العامة.

قم بتشغيل البرنامج التعليمي PyTorch باللغة الصينية، وانقر فوق نهاية المقالة لقراءة النص الأصلي، أو قم بزيارة الرابط التالي:

https://openbayes.com/console/public/tutorials

أدخل وصف الصورة هنا