Accelerate documentation

DataLoaders، والمُحسِّنات، والمُجدوِلات

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DataLoaders، والمُحسِّنات، والمُجدوِلات

الفئات الداخلية التي يستخدمها Accelerate لتحضير الكائنات للتدريب الموزع عند استدعاء prepare().

أدوات DataLoader

accelerate.data_loader.prepare_data_loader

< >

( 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 across num_processes. Will default to [slice_tensors()](/docs/accelerate/main/en/package_reference/utilities#accelerate.utils.slice_tensors). This argument is used only when dispatch_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

accelerate.skip_first_batches

< >

( dataloadernum_batches = 0 )

ينشئ torch.utils.data.DataLoader يتخطى بكفاءة أول num_batches. لا ينبغي استخدامه إذا كان محمّل البيانات الأصلي هو StatefulDataLoader.

BatchSamplerShard

class accelerate.data_loader.BatchSamplerShard

< >

( 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.
  • even_batches (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب العودة إلى بداية المُعيّن (sampler) أم لا عندما لا يكون عدد العينات مضاعفًا صحيحًا لـ (حجم الدفعة الأصلي / عدد العمليات).

يغلّف BatchSampler الخاص بـ PyTorch لتوليد الدفعات (batches) لعملية واحدة فقط. ستُنتج دائمًا كائنات هذه الفئة عددًا من الدفعات يكون مضاعفًا صحيحًا لـ num_processes وتكون جميعها بنفس الحجم. اعتمادًا على قيمة خاصية drop_last في مُعيّن الدفعات المُمرَّر، سيتوقف التكرار عند الدفعة الأولى التي ستكون صغيرة جدًا / غير موجودة في جميع العمليات، أو سيستمر في التكرار باستخدام الفهارس من البداية.

لا يتم تفعيل BatchSamplers ذات أحجام دفعات متغيرة بشكل افتراضي. لتفعيل هذا السلوك، اضبط even_batches على False

IterableDatasetShard

class accelerate.data_loader.IterableDatasetShard

< >

( 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.

يغلّف مجموعة بيانات IterableDataset من PyTorch لتوليد عينات لأحد العمليات فقط. ستُنتج دائمًا كائنات هذه الفئة عددًا من العينات يكون مضاعفًا صحيحًا لحجم الدفعة الفعلي (اعتمادًا على قيمة split_batches، يكون هذا إما batch_size أو batch_size x num_processes). اعتمادًا على قيمة خاصية drop_last في عيّنة الدفعات المُمرّرة، سيتوقف التكرار عند أول دفعة ستكون صغيرة جدًا، أو سيستمر في التكرار باستخدام الفهارس من البداية.

DataLoaderShard

class accelerate.data_loader.DataLoaderShard

< >

( 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

< >

( 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

< >

( 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

< >

( )

يُعيّن المُحسِّن في وضع “eval”. مفيد للمُحسِّنات مثل schedule_free

تدريب

< >

( )

يُعيّن المُحسِّن في وضع “التدريب”. مفيد للمُحسِّنات مثل schedule_free

AcceleratedScheduler

فئة accelerate.scheduler.AcceleratedScheduler

< >

( 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 دائمًا بخطوة في المجدول لمراعاة ذلك.

Update on GitHub