يحتوي هذا المستودع على مرافق صيانة NVIDIA لتبسيط الدقة المختلطة والتدريب الموزعة في Pytorch. سيتم تضمين بعض الكود هنا في Pytorch في المنبع في نهاية المطاف. تتمثل القصد من Apex في توفير الأدوات المساعدة المحدثة للمستخدمين في أسرع وقت ممكن.
تم إهماله. استخدم Pytorch amp
apex.amp
هي أداة لتمكين التدريب الدقيق المختلط عن طريق تغيير 3 أسطر فقط من البرنامج النصي الخاص بك. يمكن للمستخدمين بسهولة تجربة أوضاع التدريب الدقيقة الخالصة والمختلطة من خلال توفير أعلام مختلفة إلى amp.initialize
.
ويب تقديم AMP (تم إعادة تسمية العلامة cast_batchnorm
إلى keep_batchnorm_fp32
).
وثائق API
مثال ImageNet شامل
مثال DCGAN قريبا ...
الانتقال إلى واجهة برمجة تطبيقات AMP الجديدة (لمستخدمي واجهات برمجة تطبيقات "AMP" و "FP16_OPTIMIZER" المهملة)
apex.parallel.DistributedDataParallel
هو انخفاض. استخدم torch.nn.parallel.DistributedDataParallel
apex.parallel.DistributedDataParallel
هو غلاف الوحدة النمطية ، على غرار torch.nn.parallel.DistributedDataParallel
. إنها تتيح التدريب الموزع المتعدد المعالجة المريح ، وتم تحسينه لمكتبة الاتصالات NCCL في NVIDIA.
وثائق API
مصدر بيثون
مثال/تجول
يوضح مثال ImageNet استخدام apex.parallel.DistributedDataParallel
مع apex.amp
.
تم إهماله. استخدم torch.nn.SyncBatchNorm
apex.parallel.SyncBatchNorm
يمتد torch.nn.modules.batchnorm._BatchNorm
لدعم Bn المتزامن. إنه يقلل من الإحصائيات عبر العمليات خلال التدريب متعدد المعالجة (DistributedDataparalald). تم استخدام BN المتزامن في الحالات التي لا يمكن فيها سوى الحصول على حافلة صغيرة محلية صغيرة على كل وحدة معالجة الرسومات. تزيد إحصائيات Allreduced من حجم الدُفعة الفعال لطبقة BN إلى حجم الدُفعة العالمية عبر جميع العمليات (والتي من الناحية الفنية ، هي الصيغة الصحيحة). وقد لوحظ BN المتزامن لتحسين الدقة المتقاربة في بعض نماذج البحث لدينا.
لحفظ تدريب amp
وتحميله بشكل صحيح ، نقدم amp.state_dict()
، والذي يحتوي على جميع loss_scalers
وخطواتها المقابلة غير المهووسة ، بالإضافة إلى amp.load_state_dict()
لاستعادة هذه السمات.
من أجل الحصول على دقة bitwise ، نوصي سير العمل التالي:
# Initialization
opt_level = 'O1'
model , optimizer = amp . initialize ( model , optimizer , opt_level = opt_level )
# Train your model
...
with amp . scale_loss ( loss , optimizer ) as scaled_loss :
scaled_loss . backward ()
...
# Save checkpoint
checkpoint = {
'model' : model . state_dict (),
'optimizer' : optimizer . state_dict (),
'amp' : amp . state_dict ()
}
torch . save ( checkpoint , 'amp_checkpoint.pt' )
...
# Restore
model = ...
optimizer = ...
checkpoint = torch . load ( 'amp_checkpoint.pt' )
model , optimizer = amp . initialize ( model , optimizer , opt_level = opt_level )
model . load_state_dict ( checkpoint [ 'model' ])
optimizer . load_state_dict ( checkpoint [ 'optimizer' ])
amp . load_state_dict ( checkpoint [ 'amp' ])
# Continue training
...
لاحظ أننا نوصي باستعادة النموذج باستخدام نفس opt_level
. لاحظ أيضًا أننا نوصي باستدعاء أساليب load_state_dict
بعد amp.initialize
.
تتطلب كل وحدة apex.contrib
خيارًا أو أكثر من خيارات التثبيت بخلاف --cpp_ext
و --cuda_ext
. لاحظ أن وحدات Contrib لا تدعم بالضرورة إصدارات Pytorch مستقرة.
حاويات Nvidia Pytorch متوفرة على NGC: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch. تأتي الحاويات مع جميع الامتدادات المخصصة المتاحة في الوقت الحالي.
راجع وثائق NGC للحصول على تفاصيل مثل:
لتثبيت Apex من Source ، نوصي باستخدام Pytorch ليلا يمكن الحصول عليه من https://github.com/pytorch/pytorch.
يجب أن يعمل أحدث إصدار مستقر من https://pytorch.org أيضًا.
نوصي بتثبيت Ninja
لجعل التجميع أسرع.
للأداء والوظائف الكاملة ، نوصي بتثبيت Apex مع امتدادات CUDA و C ++ عبر
git clone https://github.com/NVIDIA/apex
cd apex
# if pip >= 23.1 (ref: https://pip.pypa.io/en/stable/news/#v23-1) which supports multiple `--config-settings` with the same key...
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings " --build-option=--cpp_ext " --config-settings " --build-option=--cuda_ext " ./
# otherwise
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --global-option= " --cpp_ext " --global-option= " --cuda_ext " ./
تدعم Apex أيضًا بناء Python فقط عبر
pip install -v --disable-pip-version-check --no-build-isolation --no-cache-dir ./
بنية بايثون فقط تغذي:
apex.optimizers.FusedAdam
.apex.normalization.FusedLayerNorm
و apex.normalization.FusedRMSNorm
.apex.parallel.SyncBatchNorm
.apex.parallel.DistributedDataParallel
و apex.amp
. سيظل DistributedDataParallel
و amp
و SyncBatchNorm
قابلاً للاستخدام ، لكنها قد تكون أبطأ. pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings "--build-option=--cpp_ext" --config-settings "--build-option=--cuda_ext" .
قد تعمل إذا تمكنت من بناء Pytorch من المصدر على نظامك. بناء Python فقط عبر pip install -v --no-cache-dir .
من المرجح أن تعمل.
إذا قمت بتثبيت Pytorch في بيئة كوندا ، فتأكد من تثبيت Apex في نفس البيئة.
إذا لم يتم تلبية متطلبات الوحدة النمطية ، فلن يتم بناؤها.
اسم الوحدة | تثبيت خيار | متفرقات |
---|---|---|
apex_C | --cpp_ext | |
amp_C | --cuda_ext | |
syncbn | --cuda_ext | |
fused_layer_norm_cuda | --cuda_ext | apex.normalization |
mlp_cuda | --cuda_ext | |
scaled_upper_triang_masked_softmax_cuda | --cuda_ext | |
generic_scaled_masked_softmax_cuda | --cuda_ext | |
scaled_masked_softmax_cuda | --cuda_ext | |
fused_weight_gradient_mlp_cuda | --cuda_ext | يتطلب cuda> = 11 |
permutation_search_cuda | --permutation_search | apex.contrib.sparsity |
bnp | --bnp | apex.contrib.groupbn |
xentropy | --xentropy | apex.contrib.xentropy |
focal_loss_cuda | --focal_loss | apex.contrib.focal_loss |
fused_index_mul_2d | --index_mul_2d | apex.contrib.index_mul_2d |
fused_adam_cuda | --deprecated_fused_adam | apex.contrib.optimizers |
fused_lamb_cuda | --deprecated_fused_lamb | apex.contrib.optimizers |
fast_layer_norm | --fast_layer_norm | apex.contrib.layer_norm . يختلف عن fused_layer_norm |
fmhalib | --fmha | apex.contrib.fmha |
fast_multihead_attn | --fast_multihead_attn | apex.contrib.multihead_attn |
transducer_joint_cuda | --transducer | apex.contrib.transducer |
transducer_loss_cuda | --transducer | apex.contrib.transducer |
cudnn_gbn_lib | --cudnn_gbn | يتطلب cudnn> = 8.5 ، apex.contrib.cudnn_gbn |
peer_memory_cuda | --peer_memory | apex.contrib.peer_memory |
nccl_p2p_cuda | --nccl_p2p | يتطلب nccl> = 2.10 ، apex.contrib.nccl_p2p |
fast_bottleneck | --fast_bottleneck | يتطلب peer_memory_cuda و nccl_p2p_cuda ، apex.contrib.bottleneck |
fused_conv_bias_relu | --fused_conv_bias_relu | يتطلب cudnn> = 8.4 ، apex.contrib.conv_bias_relu |