تدريب موزع مع 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، يتعين عليك فقط إجراء تغييرات طفيفة لإعداد التعليمات البرمجية للتدريب الموزع.
إعداد التعليمات البرمجية للعقدة الواحدة: إعداد واختبار التعليمات البرمجية للعقدة الواحدة باستخدام PyTorch أو PyTorch Lightning أو أطر عمل أخرى تستند إلى PyTorch/PyTorch Lightning مثل واجهة برمجة تطبيقات HuggingFace Trainer.
إعداد التعليمات البرمجية للتدريب الموزع القياسي: تحتاج إلى تحويل تدريب العملية الفردية إلى تدريب موزع. قم بتضمين هذه التعليمة البرمجية الموزعة كلها ضمن دالة تدريب واحدة يمكنك استخدامها مع
TorchDistributor
.نقل الواردات داخل دالة التدريب: أضف عمليات الاستيراد الضرورية، مثل
import torch
، ضمن وظيفة التدريب. يتيح لك القيام بذلك تجنب أخطاء الانتقاء الشائعة. علاوة على ذلك،device_id
يتم تحديد النماذج والبيانات التي ترتبط بها من خلال:device_id = int(os.environ["LOCAL_RANK"])
إطلاق التدريب الموزع: إنشاء
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 عن طريق القيام بما يلي:
- استيراد المستودع: استيراد المستودع الخارجي كمجلد Databricks Git.
- إنشاء دفتر ملاحظات جديد تهيئة دفتر ملاحظات Azure Databricks جديد داخل المستودع.
- ابدأ التدريب الموزع في خلية دفتر ملاحظات، اتصل
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
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ