Accelerate documentation
Утилиты полностью шардированного параллелизма данных
Утилиты полностью шардированного параллелизма данных
enable_fsdp_ram_efficient_loading
Включает загрузку моделей Hugging Face с эффективным использованием оперативной памяти для FSDP в среде.
disable_fsdp_ram_efficient_loading
Отключает загрузку моделей Hugging Face с эффективным использованием ОЗУ для FSDP в среде.
merge_fsdp_weights
accelerate.utils.merge_fsdp_weights
< source >( checkpoint_dir: stroutput_path: strsafe_serialization: bool = Trueremove_checkpoint_dir: bool = False )
Параметры
- checkpoint_dir (
str) — Каталог, содержащий контрольные точки FSDP (может быть как для модели, так и для оптимизатора). - output_path (
str) — Путь для сохранения объединённой контрольной точки. - safe_serialization (
bool, необязательный, по умолчаниюTrue) — Сохранять ли объединённые веса в формате safetensors (рекомендуется). - remove_checkpoint_dir (
bool, необязательный, по умолчаниюFalse) — Удалять ли каталог контрольной точки после слияния.
Объедините веса из разбитых контрольных точек модели FSDP в одну общую контрольную точку. Следует использовать, если для модели применялся SHARDED_STATE_DICT. Веса будут сохранены в {output_path}/model.safetensors, если safe_serialization, иначе в pytorch_model.bin.
Примечание: это процесс, ограниченный производительностью CPU.
FullyShardedDataParallelPlugin
класс accelerate.FullyShardedDataParallelPlugin
< source >( fsdp_version: int = Nonesharding_strategy: str | ForwardRef('torch.distributed.fsdp.ShardingStrategy') = Nonereshard_after_forward: str | ForwardRef('torch.distributed.fsdp.ShardingStrategy') | bool = Nonebackward_prefetch: str | ForwardRef('torch.distributed.fsdp.BackwardPrefetch') | None = Nonemixed_precision_policy: dict | str | ForwardRef('torch.distributed.fsdp.MixedPrecision') | ForwardRef('torch.distributed.fsdp.MixedPrecisionPolicy') | None = Noneauto_wrap_policy: typing.Callable | typing.Literal['transformer_based_wrap', 'size_based_wrap', 'no_wrap'] | None = Nonecpu_offload: bool | ForwardRef('torch.distributed.fsdp.CPUOffload') | ForwardRef('torch.distributed.fsdp.CPUOffloadPolicy') = Noneignored_modules: collections.abc.Iterable[torch.nn.Module] | str | None = Nonestate_dict_type: str | ForwardRef('torch.distributed.fsdp.StateDictType') = Nonestate_dict_config: ForwardRef('torch.distributed.fsdp.FullStateDictConfig') | ForwardRef('torch.distributed.fsdp.ShardedStateDictConfig') | None = Noneoptim_state_dict_config: ForwardRef('torch.distributed.fsdp.FullOptimStateDictConfig') | ForwardRef('torch.distributed.fsdp.ShardedOptimStateDictConfig') | None = Nonelimit_all_gathers: bool = Trueuse_orig_params: bool | None = Noneparam_init_fn: typing.Callable[[torch.nn.Module], NoneType] | None = Nonesync_module_states: bool | None = Noneforward_prefetch: bool = Noneactivation_checkpointing: bool = Noneactivation_checkpointing_offload: bool = Nonecpu_ram_efficient_loading: bool = Nonetransformer_cls_names_to_wrap: list[str] | None = Nonemin_num_params: int | None = None )
Параметры
- fsdp_version (
int, по умолчанию1) — Версия FSDP, которую следует использовать. По умолчанию — 1. Если установлено значение 2, загрузчик ожидает, что конфигурация будет преобразована в формат FSDP2. - sharding_strategy (
Union[str, torch.distributed.fsdp.ShardingStrategy], по умолчанию'FULL_SHARD') — Стратегия шардирования. Должна быть либоstr, либо экземпляромtorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. Устарела, рекомендуется использоватьreshard_after_forward. - reshard_after_forward (
Union[str, torch.distributed.fsdp.ShardingStrategy, bool], по умолчанию'FULL_SHARD'дляfsdp_version=1иTrueдляfsdp_version=2) — Стратегия шардирования. Должна быть bool, еслиfsdp_versionустановлено в 2, иначеstrили экземплярtorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. - backward_prefetch (
Union[str, torch.distributed.fsdp.BackwardPrefetch], по умолчанию'NO_PREFETCH') — Стратегия предварительной загрузки в обратном направлении. Должно быть строкойstrили экземпляромtorch.distributed.fsdp.fully_sharded_data_parallel.BackwardPrefetch. - mixed_precision_policy (
Optional[Union[dict, str, torch.distributed.fsdp.MixedPrecision, torch.distributed.fsdp.MixedPrecisionPolicy]], по умолчаниюNone) — Конфигурация для включения обучения с смешанной точностью с использованием FullyShardedDataParallel. Если передаетсяdict, он должен содержать следующие ключи:param_dtype,reduce_dtypeиbuffer_dtype. Может быть экземпляромtorch.distributed.fsdp.MixedPrecisionPolicy, еслиfsdp_versionустановлено в 2. Если передаетсяstr, он должен быть одним из следующих значений: fp8, fp16, bf16, fp32, и используется для установкиparam_dtype,reduce_dtypeиbuffer_dtype. - auto_wrap_policy (
Optional(Union[Callable, Literal["transformer_based_wrap", "size_based_wrap", "no_wrap"]]), defaults toNO_WRAP) -- A callable or string specifying a policy to recursively wrap layers with FSDP. If a string, it must be one oftransformer_based_wrap,size_based_wrap, orno_wrap. Seetorch.distributed.fsdp.wrap.size_based_wrap_policy` for a direction on what it should look like. - cpu_offload (
Union[bool, torch.distributed.fsdp.CPUOffload, torch.distributed.fsdp.CPUOffloadPolicy], по умолчаниюFalse) — Следует ли выгружать параметры на CPU. Значением может бытьboolили экземплярtorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadилиtorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadPolicy, еслиfsdp_versionустановлено в 2. - ignored_modules (
Optional[Union[Iterable[torch.nn.Module], str]], по умолчаниюNone) — Список модулей, которые следует игнорировать при обёртке в FSDP. Если передана строка, модули будут сопоставляться по имени с использованием полного совпадения регулярного выражения. Еслиfsdp_versionустановлен в 2, модули преобразуются в параметры и используются. - state_dict_type (
Union[str, torch.distributed.fsdp.StateDictType], по умолчанию'FULL_STATE_DICT') — Тип state dict для использования. Если передана строка, она должна быть одной изfull_state_dict,local_state_dictилиsharded_state_dict. - state_dict_config (
Optional[Union[torch.distributed.fsdp.FullStateDictConfig, torch.distributed.fsdp.ShardedStateDictConfig], по умолчаниюNone) — Конфигурация state dict, которую следует использовать. Если не передана, определяется на основеstate_dict_type. - optim_state_dict_config (
Optional[Union[torch.distributed.fsdp.FullOptimStateDictConfig, torch.distributed.fsdp.ShardedOptimStateDictConfig], по умолчаниюNone) — Конфигурация state dict для оптимизатора. Если не передана, определяется на основеstate_dict_type. - limit_all_gathers (
bool, по умолчаниюTrue) — Определяет, следует ли FSDP явно синхронизировать CPU-поток, чтобы предотвратить слишком большое количество незавершённых all-gather операций. Этот параметр bool влияет только на стратегии с шардированием, которые планируют all-gather операции. Включение этого параметра может помочь снизить количество повторных попыток выделения памяти CUDA. - use_orig_params (
bool, по умолчаниюFalse) — Использовать ли исходные параметры для оптимизатора. - param_init_fn (
Optional[Callable[[torch.nn.Module], None], по умолчаниюNone) —Callable[torch.nn.Module] -> None, определяющая, как модули, находящиеся на meta-устройстве, должны быть инициализированы на реальном устройстве. Применимо только тогда, когдаsync_module_statesравноTrue. По умолчанию этоlambda, вызывающаяto_emptyдля модуля. - sync_module_states (
bool, по умолчаниюFalse) — Определяет, следует ли каждому индивидуально обернутому модулю FSDP транслировать параметры модуля с ранга 0, чтобы гарантировать их идентичность на всех рангах после инициализации. По умолчаниюFalse, если толькоcpu_ram_efficient_loadingне равноTrue, в этом случае параметр принудительно включается. - forward_prefetch (
bool, по умолчаниюFalse) — Определяет, следует ли FSDP явно выполнять предварительную загрузку (prefetch) следующего all-gather во время выполнения прямого прохода (forward pass). Используйте только со статическими графами. - activation_checkpointing (
bool, по умолчаниюFalse) — Техника для снижения потребления памяти путём очистки активаций определённых слоёв и их повторного вычисления во время обратного прохода. По сути, это дополнительное время вычислений в обмен на уменьшенное потребление памяти. - cpu_ram_efficient_loading (
bool, по умолчаниюNone) — Если True, предобученную контрольную точку модели загружает только первый процесс, а все остальные процессы имеют пустые веса. Применимо только для Transformers. При использовании этого параметраsync_module_statesдолжно бытьTrue. - transformer_cls_names_to_wrap (
Optional[List[str]], по умолчаниюNone) — Список имён классов слоёв трансформера, которые нужно обернуть. Применимо только тогда, когдаauto_wrap_policyравноtransformer_based_wrap. - min_num_params (
Optional[int], по умолчаниюNone) — Минимальное количество параметров, которое должен иметь модуль для его обёртывания. Применимо только тогда, когдаauto_wrap_policyравноsize_based_wrap.
Это плагин используется для включения полностью шардированного параллелизма данных.
Создаёт auto_wrap_policy на основе переданной политики и возможности использования transformer_cls_to_wrap для model.
Устанавливает политику смешанной точности для FSDP
Установите конфигурацию state dict на основе StateDictType.
Проверяет политику смешанной точности, абстрагированную так, чтобы не импортировать зависимости, если они не нужны.
fsdp2_load_full_state_dict
accelerate.utils.fsdp2_load_full_state_dict
< source >( acceleratormodel: Modulefull_sd: dictcpu_offload: bool = False )
Параметры
- accelerator (
Accelerator) — экземпляр акселератора - model (
torch.nn.Module) — Модель, в которую будет загружен state dict. Ожидается, что она находится на meta device, иначе может произойти скачок потребления VRAM - full_sd (
dict) — Полный state dict для загрузки, может находиться только на rank 0 - cpu_offload (
bool, по умолчаниюFalse) — Если True, перемещает разбитые параметры на CPU после распределения. Обязательно, если включено выделение памяти FSDP на CPU.
Загружает полный state dict (возможно, только на rank 0) в шардированную модель. Это выполняется путём рассылки параметров с rank 0 на все остальные ранги. Данная функция изменяет модель на месте.
fsdp2_switch_optimizer_parameters
accelerate.utils.fsdp2_switch_optimizer_parameters
< source >( optimizer: Optimizermapping: dict )
Параметры
- optimizer (
torch.optim.Optimizer) — экземпляр оптимизатора, содержащий исходные параметры модели - mapping (
dict) — Соответствие между исходным параметром (указанным черезdata_ptr) и шардированным параметром
Исключения
KeyError
KeyError— Если параметр в оптимизаторе не удалось переключить на его шардированную версию. Этого не должно происходить, и это указывает на ошибку. Если бы мы сохранили исходные параметры вместо того, чтобы вызывать исключение, обучение не было бы численно корректным, а веса не обновлялись бы.
Переключает параметры оптимизатора на новые (в обычном случае — на шардированные параметры). Эта функция изменяет оптимизатор на месте.
fsdp2_prepare_model
accelerate.utils.fsdp2_prepare_model
< source >( acceleratormodel: Module ) → torch.nn.Module
Подготавливает модель для FSDP2 на месте. Также возвращает модель, чтобы избежать неправильного использования исходной модели.