تدريب موزع مع TorchDistributor

توضح هذه المقالة كيفية إجراء تدريب موزع على نماذج PyTorch ML باستخدام TorchDistributor.

TorchDistributor هي وحدة مفتوحة المصدر في PySpark تساعد المستخدمين على إجراء تدريب موزع باستخدام PyTorch على مجموعات Spark الخاصة بهم، لذلك يتيح لك تشغيل مهام التدريب PyTorch كوظائف Spark. تحت الغطاء، فإنه يقوم بتهيئة البيئة وقنوات الاتصال بين العمال ويستخدم أمر torch.distributed.run CLI لتشغيل التدريب الموزع عبر العقد العاملة.

تدعم واجهة برمجة تطبيقات TorchDistributor الأساليب الموضحة في الجدول التالي.

الأسلوب والتوقيع ‏‏الوصف
init(self, num_processes, local_mode, use_gpu) إنشاء مثيل من TorchDistributor.
run(self, main, *args) تشغيل التدريب الموزع عن طريق استدعاء main(**kwargs) ما إذا كانت main هي دالة وتشغيل أمر torchrun main *args CLI إذا كان main هو مسار ملف.

المتطلبات

  • Spark 3.4
  • Databricks Runtime 13.0 ML أو أعلى

سير عمل التطوير لدفاتر الملاحظات

إذا حدثت عملية إنشاء النموذج والتدريب بالكامل من دفتر ملاحظات على جهازك المحلي أو دفتر ملاحظات Databricks، يتعين عليك فقط إجراء تغييرات طفيفة لإعداد التعليمات البرمجية للتدريب الموزع.

  1. إعداد التعليمات البرمجية للعقدة الواحدة: إعداد واختبار التعليمات البرمجية للعقدة الواحدة باستخدام PyTorch أو PyTorch Lightning أو أطر عمل أخرى تستند إلى PyTorch/PyTorch Lightning مثل واجهة برمجة تطبيقات HuggingFace Trainer.

  2. إعداد التعليمات البرمجية للتدريب الموزع القياسي: تحتاج إلى تحويل تدريب العملية الفردية إلى تدريب موزع. قم بتضمين هذه التعليمة البرمجية الموزعة كلها ضمن دالة تدريب واحدة يمكنك استخدامها مع TorchDistributor.

  3. نقل الواردات داخل دالة التدريب: أضف عمليات الاستيراد الضرورية، مثل import torch، ضمن وظيفة التدريب. يتيح لك القيام بذلك تجنب أخطاء الانتقاء الشائعة. علاوة على ذلك، device_id يتم تحديد النماذج والبيانات التي ترتبط بها من خلال:

    device_id = int(os.environ["LOCAL_RANK"])
    
  4. إطلاق التدريب الموزع: إنشاء TorchDistributor مثيل للمعلمات المطلوبة واستدعاء .run(*args) لبدء التدريب.

فيما يلي مثال على التعليمات البرمجية للتدريب:

from pyspark.ml.torch.distributor import TorchDistributor

def train(learning_rate, use_gpu):
  import torch
  import torch.distributed as dist
  import torch.nn.parallel.DistributedDataParallel as DDP
  from torch.utils.data import DistributedSampler, DataLoader

  backend = "nccl" if use_gpu else "gloo"
  dist.init_process_group(backend)
  device = int(os.environ["LOCAL_RANK"]) if use_gpu  else "cpu"
  model = DDP(createModel(), **kwargs)
  sampler = DistributedSampler(dataset)
  loader = DataLoader(dataset, sampler=sampler)

  output = train(model, loader, learning_rate)
  dist.cleanup()
  return output

distributor = TorchDistributor(num_processes=2, local_mode=False, use_gpu=True)
distributor.run(train, 1e-3, True)

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

إذا كان لديك إجراء تدريب موزع موجود مخزن في مستودع خارجي، يمكنك بسهولة الترحيل إلى Azure Databricks عن طريق القيام بما يلي:

  1. استيراد المستودع: استيراد المستودع الخارجي كمجلد Databricks Git.
  2. إنشاء دفتر ملاحظات جديد تهيئة دفتر ملاحظات Azure Databricks جديد داخل المستودع.
  3. ابدأ التدريب الموزع في خلية دفتر ملاحظات، اتصل TorchDistributor على النحو التالي:
from pyspark.ml.torch.distributor import TorchDistributor

train_file = "/path/to/train.py"
args = ["--learning_rate=0.001", "--batch_size=16"]
distributor = TorchDistributor(num_processes=2, local_mode=False, use_gpu=True)
distributor.run(train_file, *args)

استكشاف الأخطاء وإصلاحها

خطأ شائع لسير عمل دفتر الملاحظات هو أنه لا يمكن العثور على الكائنات أو انتقاءها عند تشغيل التدريب الموزع. يمكن أن يحدث هذا عندما لا يتم توزيع عبارات استيراد المكتبة على المنفذين الآخرين.

لتجنب هذه المشكلة، قم بتضمين جميع عبارات الاستيراد (على سبيل المثال، import torch) في أعلى دالة التدريب التي يتم استدعاؤها مع TorchDistributor(...).run(<func>) وداخل أي وظائف أخرى معرفة من قبل المستخدم تسمى في أسلوب التدريب.

مثال دفاتر الملاحظات

توضح أمثلة دفتر الملاحظات التالية كيفية إجراء التدريب الموزع باستخدام PyTorch.

تدريب موزع شامل على دفتر ملاحظات Databricks

الحصول على دفتر الملاحظات

توزيع ضبط دفتر ملاحظات طراز Hugging Face

الحصول على دفتر الملاحظات

تدريب موزع على دفتر ملاحظات ملف PyTorch

الحصول على دفتر الملاحظات

تدريب موزع باستخدام دفتر ملاحظات PyTorch Lightning

الحصول على دفتر الملاحظات

تحميل البيانات الموزعة باستخدام دفتر ملاحظات Petastorm

الحصول على دفتر الملاحظات