تطبيق GPipe في Pytorch. تم تحسينه لـ CUDA بدلاً من TPU.
from torchgpipe import GPipe
model = nn . Sequential ( a , b , c , d )
model = GPipe ( model , balance = [ 1 , 1 , 1 , 1 ], chunks = 8 )
output = model ( input )GPipe هي مكتبة توازى قابلة للتطوير تنشرها Google Brain ، والتي تتيح تدريبًا فعالًا على نماذج كبيرة تستهلك الذاكرة. وفقًا للورقة ، يمكن لـ GPipe تدريب طراز أكبر بحجم 25x باستخدام أجهزة 8x (TPU) ، وتدريب طراز 3.5x بشكل أسرع باستخدام أجهزة 4x.
GPIPE: تدريب فعال للشبكات العصبية العملاقة باستخدام توازى خط الأنابيب
تدرب Google Amoebanet-B مع معلمة 557M على GPIPE. حقق هذا النموذج 84.3 ٪ من أعلى 1 و 97.0 ٪ من أعلى 5 دقة في معيار تصنيف ImageNet (الأداء الحديث اعتبارًا من مايو 2019).
يستخدم GPIPE (أ) توازى خط الأنابيب و (ب) إعادة التثبيت التلقائي للانتشار الأمامي أثناء التراجع الخلفي ، وبالتالي يستفيد من التدريب على نموذج كبير. نشير إلى (ب) كتحقق ، بعد المصطلحات المعروفة في مجتمع Pytorch.
حاليًا ، يتطلب Torchgpipe البيئات التالية:
لاستخدام Torchgpipe ، قم بتثبيته عبر Pypi:
$ pip install torchgpipe لتدريب وحدة مع gpipe ، ما عليك سوى لفها باستخدام torchgpipe.GPipe . يجب أن تكون الوحدة النمطية nn.Sequential لأن GPipe ستقسم تلقائيًا الوحدة النمطية إلى أقسام ذات طبقات متتالية. تحدد حجة balance عدد الطبقات في كل قسم. تحدد chunks القطع عدد الدفاعات الصغيرة. يجب أن تكون الإدخال والمخرجات والموتورات المتوسطة Tensor أو Tuple[Tensor, ...] .
يوضح رمز المثال أدناه كيفية تقسيم وحدة مع أربع طبقات إلى أربع أقسام لكل طبقة واحدة. يقسم هذا الرمز أيضًا دفعة مصغرة إلى 8 دفعة صغيرة:
from torchgpipe import GPipe
model = nn . Sequential ( a , b , c , d )
model = GPipe ( model , balance = [ 1 , 1 , 1 , 1 ], chunks = 8 )
for input in data_loader :
output = model ( input )تفضل بزيارة torchgpipe.readthedocs.io لمزيد من المعلومات بما في ذلك مراجع API.
تتوفر التفاصيل الكاملة والمزيد من المعايير في torchgpipe.readthedocs.io.
| حجم الدُفعة | Torchgpipe | nn.dataparallel | Goyal et al. |
|---|---|---|---|
| 256 | 21.99 ± 0.13 | 22.02 ± 0.11 | 22.08 ± 0.06 |
| 1K | 22.24 ± 0.19 | 22.04 ± 0.24 | ن/أ |
| 4K | 22.13 ± 0.09 | ن/أ | ن/أ |
يجب أن يكون GPipe شفافًا لعدم إدخال ضبط إضافي من الفائقة. للتحقق من الشفافية ، استنسخنا معدل الخطأ الأعلى 1 من Resnet-101 على ImageNet ، كما ورد في الجدول 2 (ج) من SGD دقيقة ، كبيرة من قِبل Goyal et al.
| تجربة | U-Net (B ، C) | حدود | استخدام الذاكرة |
|---|---|---|---|
| خط الأساس | (6 ، 72) | 362.2m | 20.3 جيب |
| خط أنابيب 1 | (11 ، 128) | 2.21 ب | 20.5 جيب |
| خط أنابيب 2 | (24 ، 128) | 4.99 ب | 43.4 جيب |
| خط أنابيب 4 | (24 ، 160) | 7.80B | 79.1 جيب |
| خط أنابيب 8 | (48 ، 160) | 15.82 ب | 154.1 جيب |
يوضح الجدول كيف يسهل GPipe توسيع نطاق نماذج U-Net. يشير خط الأساس إلى خط الأساس دون توازى خط الأنابيب أو تحفيز ، وخط الأنابيب -1 ، -2 ، -4 ، -8 يدل على أن النموذج مدرب مع gpipe مع العدد المقابل من الأقسام.
هنا استخدمنا بنية U-Net مبسطة. يتم تحديد حجم النموذج عن طريق فرط البارامترات B و C والتي تتناسب مع عدد الطبقات والمرشحات ، على التوالي.
| تجربة | إنتاجية | سرعة |
|---|---|---|
| خط الأساس | 28.500/ثانية | 1 × |
| خط أنابيب 1 | 24.456/s | 0.858 × |
| خط أنابيب 2 | 35.502/s | 1.246 × |
| خط أنابيب 4 | 67.042/s | 2.352 × |
| خط أنابيب 8 | 88.497/s | 3.105 × |
للتحقق من الكفاءة مع اتصالات SKIP ، قمنا بقياس إنتاجية U-Net مع عدد مختلف من الأجهزة. اخترنا استخدام U-Net لأنه يحتوي على العديد من اتصالات تخطي طويلة.
| تجربة | إنتاجية | Torchgpipe | هوانغ وآخرون. |
|---|---|---|---|
| ن = 2 ، م = 1 | 26.733/s | 1 × | 1 × |
| ن = 2 ، م = 4 | 41.133/s | 1.546 × | 1.07 × |
| ن = 2 ، م = 32 | 47.386/s | 1.780 × | 1.21 × |
| ن = 4 ، م = 1 | 26.827/s | 1.006 × | 1.13 × |
| ن = 4 ، م = 4 | 44.543/s | 1.680 × | 1.26 × |
| ن = 4 ، م = 32 | 72.412/s | 2.711 × | 1.84 × |
| ن = 8 ، م = 1 | 24.918/s | 0.932 × | 1.38 × |
| ن = 8 ، م = 4 | 70.065/s | 2.625 × | 1.72 × |
| ن = 8 ، م = 32 | 132.413/s | 4.966 × | 3.48 × |
( N : عدد الأقسام ، M : عدد المكورات الصغيرة)
يوضح الجدول معيار السرعة المستنسخة على Amoebanet-D (18 ، 256) ، كما ورد في الجدول 2 من GPipe بواسطة Huang et al. لاحظ أننا استبدلنا K في الورقة مع n .
هذا المشروع وظيفي ، ولكن لم يتم تأكيد الواجهة بعد. تخضع جميع واجهات برمجة التطبيقات العامة للتغيير دون سابق إنذار حتى v0.1.0.
تم تطوير مشروع Torchgpipe بواسطة Heungsub Lee و Myungryong Jeong و Chiheon Kim في Kakao Brain ، مع Sungbin Lim و Eldoo Kim و Woonhyuk Baek و Boogeon Yoon. يتم توزيعه بموجب ترخيص BSD المكون من 3 أبناء.
إذا قمت بتطبيق هذه المكتبة على أي مشروع وبحث ، فيرجى الاستشهاد بمدونةنا:
@article{kim2020torchgpipe,
title={torchgpipe: On-the-fly Pipeline Parallelism for Training Giant Models},
author={Chiheon Kim and Heungsub Lee and Myungryong Jeong and Woonhyuk Baek and Boogeon Yoon and Ildoo Kim and Sungbin Lim and Sungwoong Kim},
year={2020},
eprint={2004.09910},
archivePrefix={arXiv}
}