Accelerate documentation
DataLoaders، والمُحسِّنات، والمُجدوِلات
DataLoaders، والمُحسِّنات، والمُجدوِلات
الفئات الداخلية التي يستخدمها Accelerate لتحضير الكائنات للتدريب الموزع عند استدعاء prepare().
أدوات DataLoader
accelerate.data_loader.prepare_data_loader
< source >( dataloader: DataLoaderdevice: torch.device | None = Nonenum_processes: int | None = Noneprocess_index: int | None = Nonesplit_batches: bool = Falseput_on_device: bool = Falserng_types: list[str | accelerate.utils.dataclasses.RNGType] | None = Nonedispatch_batches: bool | None = Noneeven_batches: bool = Trueslice_fn_for_dispatch: typing.Callable | None = Noneuse_seedable_sampler: bool = Falsedata_seed: int | None = Nonenon_blocking: bool = Falseuse_stateful_dataloader: bool = Falsetorch_device_mesh = None ) → torch.utils.data.dataloader.DataLoader
المعاملات
- dataloader (
torch.utils.data.dataloader.DataLoader) — محمّل البيانات الذي يتم تقسيمه على عدة أجهزة. - device (
torch.device) — الجهاز المستهدف لـDataLoaderالمُعاد. - num_processes (
int، اختياري) — عدد العمليات التي تعمل بالتوازي. سيُستخدم افتراضيًا القيمة المُعطاة بواسطة PartialState. - process_index (
int، اختياري) — مؤشر العملية الحالية. سيُستخدم افتراضيًا القيمة المُعطاة بواسطة PartialState. - split_batches (
bool, اختياري, الافتراضي هوFalse) — ما إذا كانDataLoaderالناشئ يجب أن يقسم دفعات مُحمِّل البيانات الأصلي عبر الأجهزة أم يُنتج دفعات كاملة (في هذه الحالة، سيُنتج دفعات تبدأ منprocess_index-العملية رقمnum_processesوتتقدم بمقدارطريقة أخرى لفهم ذلك هي أن حجم الدفعة المرصود سيكون مطابقًا لحجم الدفعة الأولي لـ
dataloaderإذا تم ضبط هذا الخيار علىTrue، وإلا فسيكون حجم الدفعة الأولي لـdataloaderمضروبًا فيnum_processes.يتطلب تعيين هذا الخيار إلى
Trueأن يكون حجم الدفعة الخاصة بـdataloaderمضاعفاً صحيحاً لـbatch_size. - put_on_device (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم وضع الدفعات علىdevice(يعمل فقط إذا كانت الدفعات قوائم متداخلة، أو tuples، أو قواميس من tensors). - rng_types (قائمة من
strأو RNGType) — قائمة مولّدات الأرقام العشوائية التي يجب مزامنتها في بداية كل تكرار. يجب أن تكون واحدة أو عدة من:"torch": مولّد الأرقام العشوائية الأساسي في torch"cuda": مولّد الأرقام العشوائية CUDA (لوحدة المعالجة الرسومية فقط)"xla": مولّد الأرقام العشوائية XLA (لوحدة TPU فقط)"generator": هوtorch.Generatorالخاص بـ sampler (أو batch sampler إذا لم يكن هناك sampler في dataloader الخاص بك) أو الخاص بـ iterable dataset (إذا كان موجودًا) إذا كان نوع dataset الأساسي من هذا النوع.
- dispatch_batches (
bool، اختياري) — إذا تم تعيينه إلىTrue، فإن مُحمِّل البيانات المُعدّ يُمرَّر عبره فقط في العملية الرئيسية، ثم تُقسَّم الدفعات وتُبَثّ إلى كل عملية. سيكون الافتراضيTrueعندما يكون مجموعة البيانات الأساسية من نوعIterableDataset، وإلا فسيكونFalse. - even_batches (
bool، اختياري، القيمة الافتراضيةTrue) — إذا تم ضبطه علىTrue، ففي الحالات التي لا يقسم فيها حجم الدفعة الإجمالي عبر جميع العمليات مجموعة البيانات بشكل صحيح، سيتم تكرار العينات الموجودة في بداية مجموعة البيانات بحيث يمكن تقسيم الدفعة بالتساوي بين جميع العمال. - slice_fn_for_dispatch (
Callable, optional) -- If passed, this function will be used to slice tensors acrossnum_processes. Will default to [slice_tensors()](/docs/accelerate/main/en/package_reference/utilities#accelerate.utils.slice_tensors). This argument is used only whendispatch_batchesis set toTrue` and will be ignored otherwise. - use_seedable_sampler (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب استخدامSeedableRandomSamplerبدلاً منRandomSamplerلتحسين إمكانية إعادة إنتاج النتائج. يأتي ذلك على حساب أداء قد يختلف قليلاً بسبب خوارزميات الخلط المختلفة، لكنه يضمن أن تكون النتائج متطابقة تماماً. يجب استخدامه معset_seed()في كلself.set_epoch - data_seed (
int, اختياري، القيمة الافتراضيةNone) — البذرة المستخدمة للمولّد الأساسي عند استخدامuse_seedable_sampler. إذا كانتNone، فسيستخدم المولّد البذرة الافتراضية الحالية من torch. - non_blocking (
bool، اختياري، القيمة الافتراضيةFalse) — إذا تم ضبطه علىTrue، فسيستخدم مُحمِّل البيانات عمليات نقل غير حاصرة من المضيف إلى الجهاز. إذا كان مُحمِّل البيانات مضبوطًا علىpin_memoryبقيمةTrue، فسيُسهم ذلك في زيادة التداخل بين نقل البيانات والحسابات. - use_stateful_dataloader (
bool، اختياري، القيمة الافتراضيةFalse) — “إذا تم ضبطه على true، فسيكون مُحمِّل البيانات المُعد بواسطة Accelerator مدعومًا بواسطة torchdata.StatefulDataLoader. يتطلب ذلك تثبيت إصدار 0.8.0 أو أحدث منtorchdataالذي يدعم StatefulDataLoader.” - torch_device_mesh (
torch.distributed.DeviceMesh، اختياري، القيمة الافتراضيةNone) — شبكة أجهزة PyTorch.
يعيد
torch.utils.data.dataloader.DataLoader
محمّل بيانات جديد سيقدم الجزء من الدفعات
يغلّف DataLoader الخاص بـ PyTorch لتوليد الدفعات لأحد العمليات فقط.
يعتمد على قيمة الخاصية drop_last الخاصة بـ dataloader المُمرَّر، إما أن يتوقف التكرار عند الدفعة الأولى التي ستكون صغيرة جدًا / غير موجودة في جميع العمليات، أو أن يستمر في التكرار باستخدام الفهارس من البداية.
لا يتم تفعيل
BatchSamplers ذات أحجام دفعات متغيرة بشكل افتراضي. لتفعيل هذا السلوك، اضبطeven_batchesعلىFalse
ينشئ torch.utils.data.DataLoader يتخطى بكفاءة أول num_batches. لا ينبغي استخدامه إذا كان
محمّل البيانات الأصلي هو StatefulDataLoader.
BatchSamplerShard
class accelerate.data_loader.BatchSamplerShard
< source >( batch_sampler: BatchSamplernum_processes: int = 1process_index: int = 0split_batches: bool = Falseeven_batches: bool = True )
المعاملات
- batch_sampler (
torch.utils.data.sampler.BatchSampler) — عينة الدفعة (batch sampler) لتقسيم البيانات إلى عدة أجزاء. - num_processes (
int، اختياري، القيمة الافتراضية 1) — عدد العمليات التي تعمل بالتوازي. - process_index (
int، اختياري، القيمة الافتراضية 0) — مؤشر العملية الحالية. - split_batches (
bool, اختياري, الافتراضي هوFalse) — ما إذا كان يجب إنشاء الشرائح (shards) عن طريق تقسيم الدفعة (batch) وإعطاء جزء منها لكل عملية، أم عن طريق تقديم دفعات كاملة مختلفة على كل عملية.على عمليتين مع عيّنة
[[0, 1, 2, 3], [4, 5, 6, 7]]، سيؤدي ذلك إلى:- المُعيّن على العملية 0 ليعيد
[0, 1, 2, 3]والمُعيّن على العملية 1 ليعيد[4, 5, 6, 7]إذا تم تعيين هذا الحجة إلىFalse. - المُعيّن على العملية 0 ليعطي
[0, 1]ثم[4, 5]والمُعيّن على العملية 1 ليعطي[2, 3]ثم[6, 7]إذا تم تعيين هذا الحجة إلىTrue.
- المُعيّن على العملية 0 ليعيد
- even_batches (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب العودة إلى بداية المُعيّن (sampler) أم لا عندما لا يكون عدد العينات مضاعفًا صحيحًا لـ (حجم الدفعة الأصلي / عدد العمليات).
يغلّف BatchSampler الخاص بـ PyTorch لتوليد الدفعات (batches) لعملية واحدة فقط. ستُنتج دائمًا كائنات هذه الفئة عددًا من الدفعات يكون مضاعفًا صحيحًا لـ num_processes وتكون جميعها بنفس الحجم. اعتمادًا على قيمة خاصية drop_last في مُعيّن الدفعات المُمرَّر، سيتوقف التكرار عند الدفعة الأولى التي ستكون صغيرة جدًا / غير موجودة في جميع العمليات، أو سيستمر في التكرار باستخدام الفهارس من البداية.
لا يتم تفعيل
BatchSamplers ذات أحجام دفعات متغيرة بشكل افتراضي. لتفعيل هذا السلوك، اضبطeven_batchesعلىFalse
IterableDatasetShard
class accelerate.data_loader.IterableDatasetShard
< source >( dataset: IterableDatasetbatch_size: int = 1drop_last: bool = Falsenum_processes: int = 1process_index: int = 0split_batches: bool = False )
المعاملات
- dataset (
torch.utils.data.dataset.IterableDataset) — مُعيّن الدُفعات (batch sampler) الذي يُقسَّم إلى عدة شُعب (shards). - batch_size (
int, اختياري، القيمة الافتراضية 1) — حجم الدُفعات لكل شريحة (إذا كانsplit_batches=False) أو حجم الدُفعات (إذا كانsplit_batches=True). - drop_last (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم إسقاط الدفعة الأخيرة غير المكتملة أو إكمال الدفعات الأخيرة باستخدام العينات من البداية. - num_processes (
int، اختياري، القيمة الافتراضية 1) — عدد العمليات التي تعمل بالتوازي. - process_index (
int، اختياري، القيمة الافتراضية 0) — مؤشر العملية الحالية. - split_batches (
bool, اختياري, الافتراضي هوFalse) — ما إذا كان يجب إنشاء الشرائح (shards) عن طريق تقسيم الدفعة (batch) وإعطاء جزء منها لكل عملية، أم عن طريق تقديم دفعات كاملة مختلفة لكل عملية.على عمليتين مع مجموعة بيانات قابلة للتكرار تُنتج
[0, 1, 2, 3, 4, 5, 6, 7]، سيؤدي ذلك إلى:- الشريحة على العملية 0 لتعطي
[0, 1, 2, 3]والشريحة على العملية 1 لتعطي[4, 5, 6, 7]إذا تم تعيين هذا الحجة إلىFalse. - الشريحة على العملية 0 لتُنتج
[0, 1, 4, 5]والمُعيّن على العملية 1 لتُنتج[2, 3, 6, 7]إذا تم تعيين هذا الحجة إلىTrue.
- الشريحة على العملية 0 لتعطي
يغلّف مجموعة بيانات IterableDataset من PyTorch لتوليد عينات لأحد العمليات فقط. ستُنتج دائمًا كائنات هذه الفئة عددًا من العينات يكون مضاعفًا صحيحًا لحجم الدفعة الفعلي (اعتمادًا على قيمة split_batches، يكون هذا إما batch_size أو batch_size x num_processes). اعتمادًا على قيمة خاصية drop_last في عيّنة الدفعات المُمرّرة، سيتوقف التكرار عند أول دفعة ستكون صغيرة جدًا، أو سيستمر في التكرار باستخدام الفهارس من البداية.
DataLoaderShard
class accelerate.data_loader.DataLoaderShard
< source >( datasetdevice = Nonerng_types = Nonesynchronized_generator = Noneskip_batches = 0use_stateful_dataloader = False_drop_last: bool = False_non_blocking: bool = Falsetorch_device_mesh = Noneiteration = 0**kwargs )
المعاملات
- dataset (
torch.utils.data.dataset.Dataset) — مجموعة البيانات المستخدمة لبناء هذا محمّل البيانات. - device (
torch.device، اختياري) — إذا تم تمريره، فهو الجهاز الذي سيتم وضع جميع الدفعات عليه. - rng_types (قائمة من
strأو RNGType) — قائمة مولّدات الأرقام العشوائية التي يجب مزامنتها في بداية كل تكرار. يجب أن تكون واحدة أو عدة من بين ما يلي:"torch": مولّد الأرقام العشوائية الأساسي في torch"cuda": مولّد الأرقام العشوائية CUDA (لوحدة المعالجة الرسومية فقط)"xla": مولّد الأرقام العشوائية XLA (لوحدة TPU فقط)"generator":torch.Generatorاختياري
- synchronized_generator (
torch.Generator، اختياري) — مولّد أرقام عشوائية يُحافظ على مزامنته عبر العمليات. - skip_batches (
int، اختياري، القيمة الافتراضية 0) — عدد الدفعات التي سيتم تجاوزها في البداية. - use_stateful_dataloader (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب على هذه الفئة تكييفStatefulDataLoaderمنtorchdataبدلاً منDataLoaderالعادي. - **kwargs (معلمات إضافية بالكلمات المفتاحية، اختيارية) —
جميع المعلمات الأخرى بالكلمات المفتاحية التي يجب تمريرها إلى تهيئة
DataLoaderالعادية.
فئة فرعية من DataLoaderAdapter تتعامل مع توزيع الأجهزة والإعداد الموزع الحالي.
الخصائص المتاحة:
total_batch_size (
int) — حجم الدفعة الإجمالي لـ dataloader عبر جميع العمليات. يساوي حجم الدفعة الأصلي عندما يكونsplit_batches=True؛ وإلا فهو حجم الدفعة الأصلي مضروباً في العدد الإجمالي للعملياتtotal_dataset_length (
int) — إجمالي طول مجموعة البيانات الداخلية عبر جميع العمليات.
DataLoaderDispatcher
فئة accelerate.data_loader.DataLoaderDispatcher
< source >( datasetsplit_batches: bool = Falseskip_batches = 0use_stateful_dataloader = False_drop_last: bool = False_non_blocking: bool = Falseslice_fn = Nonetorch_device_mesh = Noneiteration = 0**kwargs )
المعاملات
- split_batches (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب علىDataLoaderالناتج تقسيم دفعات مُحمِّل البيانات الأصلي عبر الأجهزة، أم إخراج دفعات كاملة (في هذه الحالة سيُخرج دفعات تبدأ من الدفعة رقمprocess_indexوتتقدم بمقدارnum_processesدفعات في كل تكرار). طريقة أخرى لفهم هذا هي أن حجم الدفعة المرصود سيكون نفس حجمdataloaderالأولي إذا تم ضبط هذا الخيار علىTrue، وإلا فسيكون حجم الدفعة فيdataloaderالأولي مضروباً فيnum_processes. يتطلب ضبط هذا الخيار علىTrueأن يكون حجم الدفعة فيdataloaderمضاعفاً صحيحاً لـbatch_size. - skip_batches (
int، اختياري، القيمة الافتراضية 0) — عدد الدفعات التي يجب تجاوزها في بداية التكرار. - use_stateful_dataloader (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب على هذه الفئة تكييفStatefulDataLoaderمنtorchdataبدلاً منDataLoaderالعادي.
فئة فرعية من DataLoaderAdapter تتكرر وتعالج مسبقًا على العملية 0 فقط، ثم توزّع على كل عملية جزءها من الدفعة.
الخصائص المتاحة:
total_batch_size (
int) — حجم الدفعة الإجمالي لـ dataloader عبر جميع العمليات. يساوي حجم الدفعة الأصلي عندما يكونsplit_batches=True؛ وإلا فهو حجم الدفعة الأصلي مضروباً في العدد الإجمالي للعملياتtotal_dataset_length (
int) — إجمالي طول مجموعة البيانات الداخلية عبر جميع العمليات.
AcceleratedOptimizer
فئة accelerate.optimizer.AcceleratedOptimizer
< source >( optimizerdevice_placement = Truescaler = None )
المعاملات
- optimizer (
torch.optim.optimizer.Optimizer) — المُحسِّن الذي سيتم تغليفه. - device_placement (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان المُحسِّن (optimizer) يجب أن يتولى إدارة توزيع الأجهزة أم لا. في حال كان ذلك مطلوبًا، سيقوم بوضع قاموس الحالة (state dictionary) الخاص بـoptimizerعلى الجهاز المناسب. - scaler (
torch.amp.GradScalerأوtorch.cuda.amp.GradScaler، اختياري) — المقياس الذي يُستخدم في دالة الخطوة عند التدريب بدقة مختلطة.
غلاف داخلي حول مُحسِّن torch.
سيُنفَّذ step وzero_grad بشكل مشروط إذا كان يجب مزامنة التدرجات عند تنفيذ تراكم التدرجات.
يُعيّن المُحسِّن في وضع “eval”. مفيد للمُحسِّنات مثل schedule_free
يُعيّن المُحسِّن في وضع “التدريب”. مفيد للمُحسِّنات مثل schedule_free
AcceleratedScheduler
فئة accelerate.scheduler.AcceleratedScheduler
< source >( scheduleroptimizersstep_with_optimizer: bool = Truesplit_batches: bool = False )
المعاملات
- scheduler (
torch.optim.lr_scheduler._LRScheduler) — المجدول الذي سيتم تغليفه. - optimizers (واحد أو قائمة من
torch.optim.Optimizer) — المُحسِّنات المستخدمة. - step_with_optimizer (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب على المجدول (scheduler) أن يُخطو (step) في كل خطوة للمحسّن (optimizer). - split_batches (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان مُحمِّلات البيانات تقسّم دفعة واحدة على العمليات المختلفة (بحيث تكون حجم الدفعة متساوياً بغض النظر عن عدد العمليات) أم تنشئ دفعات على كل عملية (بحيث يكون حجم الدفعة هو حجم الدفعة الأصلي مضروباً في عدد العمليات).
غلاف حول مجدول معدل التعلم (learning rate scheduler) لن يتقدّم إلا عندما يكون للمُحسِّن (optimizer) خطوة تدريب. مفيد لتجنّب تقدّم المجدول بسرعة زائدة عندما تتجاوز التدرّجات حدّ الفَاض (overflow) ولم تكن هناك خطوة تدريب (في التدريب بدقة مختلطة)
عند تنفيذ تراكم التدرّجات، لا ينبغي تغيير أطوال مجدول التدرّجات تبعًا لذلك، إذ سيقوم Accelerate دائمًا بخطوة في المجدول لمراعاة ذلك.