Accelerate documentation

Классы с состоянием

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

Классы с состоянием

Ниже приведены варианты singleton class в том смысле, что все экземпляры разделяют одно и то же состояние, которое инициализируется при первом создании экземпляра.

Эти классы неизменяемы и хранят информацию о конкретных конфигурациях или состояниях.

PartialState

класс accelerate.PartialState

< >

( cpu: bool = False**kwargs )

Параметры

  • cpu (bool, необязательный) — Указывает, следует ли принудительно выполнять скрипт на CPU. Если установлено значение True, все доступные ускорители будут проигнорированы, а выполнение будет принудительно перенаправлено на CPU.
  • kwargs (дополнительные именованные аргументы, необязательный) — Дополнительные именованные аргументы для передачи в соответствующую функцию init_process_group. Допустимые kwargs можно найти в utils.InitProcessGroupKwargs. См. раздел с примерами для подробного описания использования.

Одноэлементный класс, содержащий информацию о текущей среде обучения и функции для управления процессами. Предназначен для случаев, когда требуется только управление процессами и состояния выполнения на устройствах. Не требует инициализации из Accelerator.

Доступные атрибуты:

  • device (torch.device) — Устройство, которое будет использоваться.
  • distributed_type (DistributedType) — тип используемой распределённой среды.
  • local_process_index (int) — Индекс текущего процесса на текущем сервере.
  • mixed_precision (str) — Использует ли текущий скрипт смешанную точность и, если да, какой тип смешанной точности применяется. (Выберите из ‘no’,‘fp16’,‘bf16 or ‘fp8’).
  • num_processes (int) — Количество процессов, запущенных параллельно в данный момент.
  • process_index (int) — Индекс текущего процесса.
  • is_last_process (bool) — Является ли текущий процесс последним.
  • is_main_process (bool) — Является ли текущий процесс основным.
  • is_local_main_process (bool) — Является ли текущий процесс основным на локальном узле.
  • debug (bool) — Указывает, выполняется ли текущий скрипт в режиме отладки.

Пример:

from accelerate.utils import InitProcessGroupKwargs

# To include `InitProcessGroupKwargs`, init then call `.to_kwargs()`
kwargs = InitProcessGroupKwargs(...).to_kwargs()
state = PartialState(**kwargs)

destroy_process_group

< >

( group = None )

Уничтожает группу процессов. Если группа не указана, уничтожается группа процессов по умолчанию.

local_main_process_first

< >

( )

Позволяет локальному основному процессу войти в блок with.

Остальные процессы войдут в блок with после завершения основного процесса.

Пример:

>>> from accelerate.state import PartialState

>>> state = PartialState()
>>> with state.local_main_process_first():
...     # This will be printed first by local process 0 then in a seemingly
...     # random order by the other processes.
...     print(f"This will be printed by process {state.local_process_index}")

main_process_first

< >

( )

Позволяет основному процессу выполняться первым внутри блока with.

Остальные процессы войдут в блок with после завершения основного процесса.

Пример:

>>> from accelerate import Accelerator

>>> accelerator = Accelerator()
>>> with accelerator.main_process_first():
...     # This will be printed first by process 0 then in a seemingly
...     # random order by the other processes.
...     print(f"This will be printed by process {accelerator.process_index}")

on_last_process

< >

( function: Callable[..., Any] )

Параметры

  • function (Callable) — Функция для декорирования.

Декоратор, который выполняет декорируемую функцию только на последнем процессе.

Пример:

# Assume we have 4 processes.
from accelerate.state import PartialState

state = PartialState()


@state.on_last_process
def print_something():
    print(f"Printed on process {state.process_index}")


print_something()
"Printed on process 3"

on_local_main_process

< >

( function: Callable[..., Any] | None = None )

Параметры

  • function (Callable) — Функция для декорирования.

Декоратор, который выполняет декорируемую функцию только на локальном главном процессе.

Пример:

# Assume we have 2 servers with 4 processes each.
from accelerate.state import PartialState

state = PartialState()


@state.on_local_main_process
def print_something():
    print("This will be printed by process 0 only on each server.")


print_something()
# On server 1:
"This will be printed by process 0 only"
# On server 2:
"This will be printed by process 0 only"

on_local_process

< >

( function: Callable[..., Any] | None = Nonelocal_process_index: int | None = None )

Параметры

  • function (Callable, необязательный) — Функция для декорирования.
  • local_process_index (int, необязательный) — Индекс локального процесса, на котором следует выполнить функцию.

Декоратор, который выполняет декорированную функцию только на процессе с указанным индексом на текущем узле.

Пример:

# Assume we have 2 servers with 4 processes each.
from accelerate import Accelerator

accelerator = Accelerator()


@accelerator.on_local_process(local_process_index=2)
def print_something():
    print(f"Printed on process {accelerator.local_process_index}")


print_something()
# On server 1:
"Printed on process 2"
# On server 2:
"Printed on process 2"

on_main_process

< >

( function: Callable[..., Any] | None = None )

Параметры

  • function (Callable) — Функция для декорирования.

Декоратор, который выполняет декорируемую функцию только в основном процессе.

Пример:

>>> from accelerate.state import PartialState

>>> state = PartialState()


>>> @state.on_main_process
... def print_something():
...     print("This will be printed by process 0 only.")


>>> print_something()
"This will be printed by process 0 only"

on_process

< >

( function: Callable[..., Any] | None = Noneprocess_index: int | None = None )

Параметры

  • function (Callable, optional) — Функция, которую нужно декорировать.
  • process_index (int, optional) — Индекс процесса, на котором следует выполнить функцию.

Декоратор, который выполняет декорируемую функцию только на процессе с указанным индексом.

Пример:

# Assume we have 4 processes.
from accelerate.state import PartialState

state = PartialState()


@state.on_process(process_index=2)
def print_something():
    print(f"Printed on process {state.process_index}")


print_something()
"Printed on process 2"

set_device

< >

( )

Устанавливает устройство в self.device в соответствии с текущей распределённой средой.

split_between_processes

< >

( inputs: list | tuple | dict | torch.Tensorapply_padding: bool = False )

Параметры

  • inputs (list, tuple, torch.Tensor, dict из list/tuple/torch.Tensor или datasets.Dataset) — Входные данные для распределения между процессами.
  • apply_padding (bool, optional, по умолчанию False) — Следует ли применять выравнивание путём повторения последнего элемента входных данных, чтобы все процессы имели одинаковое количество элементов. Полезно при выполнении таких операций, как gather() над результатами или при передаче меньшего количества входных данных, чем количество процессов. Если это необходимо, не забудьте удалить дополненные элементы после завершения операции.

Разбивает input между self.num_processes быстро, после чего может использоваться на соответствующем процессе. Полезно при распределённом выводе, например, с разными промптами.

Обратите внимание, что при использовании dict все ключи должны содержать одинаковое количество элементов.

Пример:

# Assume there are two processes
from accelerate import PartialState

state = PartialState()
with state.split_between_processes(["A", "B", "C"]) as inputs:
    print(inputs)
# Process 0
["A", "B"]
# Process 1
["C"]

with state.split_between_processes(["A", "B", "C"], apply_padding=True) as inputs:
    print(inputs)
# Process 0
["A", "B"]
# Process 1
["C", "C"]

wait_for_everyone

< >

( )

Останавливает выполнение текущего процесса, пока все остальные процессы не достигнут этой точки (поэтому при запуске скрипта в одном процессе этот метод ничего не делает). Полезно вызывать перед сохранением модели.

Пример:

>>> # Assuming two GPU processes
>>> import time
>>> from accelerate.state import PartialState

>>> state = PartialState()
>>> if state.is_main_process:
...     time.sleep(2)
>>> else:
...     print("I'm waiting for the main process to finish its sleep...")
>>> state.wait_for_everyone()
>>> # Should print on every process at the same time
>>> print("Everyone is here")

AcceleratorState

класс accelerate.state.AcceleratorState

< >

( mixed_precision: str | None = Nonecpu: bool = Falsedynamo_plugin = Nonedeepspeed_plugin = Nonefsdp_plugin = Nonetorch_tp_plugin = Nonemegatron_lm_plugin = Noneparallelism_config = None_from_accelerator: bool = False**kwargs )

Одиночный класс, содержащий информацию о текущей среде обучения.

Доступные атрибуты:

  • device (torch.device) — Устройство, которое будет использоваться.
  • distributed_type (DistributedType) — тип используемой распределённой среды.
  • parallelism_config (ParallelismConfig) — конфигурация параллелизма для текущей среды обучения. Используется для настройки распределённой среды обучения.
  • initialized (bool) — Указывает, была ли инициализирована AcceleratorState из Accelerator.
  • local_process_index (int) — Индекс текущего процесса на текущем сервере.
  • mixed_precision (str) — Использует ли текущий скрипт смешанную точность и, если да, какой тип смешанной точности применяется. (Выберите из ‘no’,‘fp16’,‘bf16 or ‘fp8’).
  • num_processes (int) — Количество процессов, запущенных параллельно в данный момент.
  • process_index (int) — Индекс текущего процесса.
  • is_last_process (bool) — Является ли текущий процесс последним.
  • is_main_process (bool) — Является ли текущий процесс основным.
  • is_local_main_process (bool) — Является ли текущий процесс основным на локальном узле.
  • debug (bool) — Указывает, выполняется ли текущий скрипт в режиме отладки.

destroy_process_group

< >

( group = None )

Уничтожает группу процессов. Если группа не указана, уничтожается группа процессов по умолчанию.

Если self.fork_launched равно True, а group равно None, ничего не происходит.

get_deepspeed_plugin

< >

( name: str )

Возвращает DeepSpeedPlugin с указанным plugin_key.

local_main_process_first

< >

( )

Позволяет локальному основному процессу войти в блок with.

Остальные процессы войдут в блок with после завершения основного процесса.

main_process_first

< >

( )

Позволяет основному процессу выполняться первым внутри блока with.

Остальные процессы войдут в блок with после завершения основного процесса.

select_deepspeed_plugin

< >

( name: str | None = None )

Activates the DeepSpeedPlugin with the given name, and will disable all other plugins.

split_between_processes

< >

( inputs: list | tuple | dict | torch.Tensorapply_padding: bool = False )

Параметры

  • inputs (list, tuple, torch.Tensor или dict из list/tuple/torch.Tensor) — Входные данные для распределения между процессами.
  • apply_padding (bool, optional, по умолчанию False) — Следует ли применять выравнивание путём повторения последнего элемента входных данных, чтобы все процессы имели одинаковое количество элементов. Полезно при выполнении таких операций, как gather() над результатами или при передаче меньшего количества входных данных, чем количество процессов. Если это необходимо, не забудьте удалить дополненные элементы после завершения операции.

Разбивает input между self.num_processes быстро, после чего может использоваться на соответствующем процессе. Полезно при распределённом выводе, например, с разными промптами.

Обратите внимание, что при использовании dict все ключи должны содержать одинаковое количество элементов.

Пример:

# Assume there are two processes
from accelerate.state import AcceleratorState

state = AcceleratorState()
with state.split_between_processes(["A", "B", "C"]) as inputs:
    print(inputs)
# Process 0
["A", "B"]
# Process 1
["C"]

with state.split_between_processes(["A", "B", "C"], apply_padding=True) as inputs:
    print(inputs)
# Process 0
["A", "B"]
# Process 1
["C", "C"]

GradientState

класс accelerate.state.GradientState

< >

( gradient_accumulation_plugin: GradientAccumulationPlugin | None = None )

Одноэлементный класс, содержащий информацию, связанную с синхронизацией градиентов для накопления градиентов

Доступные атрибуты:

  • end_of_dataloader (bool) — Указывает, достигнут ли конец текущего загрузчика данных
  • remainder (int) — количество дополнительных образцов, добавленных при дополнении (padding) загрузчика данных
  • sync_gradients (bool) — Нужно ли синхронизировать градиенты между всеми устройствами
  • active_dataloader (Optional[DataLoader]) — загрузчик данных, по которому в данный момент выполняется итерация
  • dataloader_references (List[Optional[DataLoader]]) — список ссылок на dataloaders, по которым выполняется итерация
  • num_steps (int) — Количество шагов для накопления
  • adjust_scheduler (bool) — Нужно ли корректировать планировщик с учётом накопления градиентов
  • sync_with_dataloader (bool) — Следует ли синхронизировать градиенты в конце итерации загрузчика данных и сбрасывать общее количество шагов
  • is_xla_gradients_synced (bool) — Указывает, были ли синхронизированы градиенты XLA. Инициализируется значением false. После редукции градиентов перед шагом оптимизатора этот флаг устанавливается в true. Впоследствии, после каждого шага, флаг сбрасывается в false. FSDP всегда синхронизирует градиенты, поэтому is_xla_gradients_synced всегда равно true.
Update on GitHub