Accelerate documentation
Công cụ Fully Sharded Data Parallel
Công cụ Fully Sharded Data Parallel
enable_fsdp_ram_efficient_loading
Cho phép tải các mô hình Hugging Face một cách hiệu quả về RAM cho FSDP trong môi trường.
disable_fsdp_ram_efficient_loading
Tắt tính năng nạp hiệu quả RAM cho các mô hình Hugging Face dành cho FSDP trong môi trường.
merge_fsdp_weights
accelerate.utils.merge_fsdp_weights
< source >( checkpoint_dir: stroutput_path: strsafe_serialization: bool = Trueremove_checkpoint_dir: bool = False )
Tham số
- checkpoint_dir (
str) — Thư mục chứa các checkpoint của FSDP (có thể là của model hoặc optimizer). - output_path (
str) — Đường dẫn để lưu checkpoint đã hợp nhất. - safe_serialization (
bool, tùy chọn, mặc định làTrue) — Có nên lưu các trọng số đã hợp nhất bằng safetensors (được khuyến nghị) hay không. - remove_checkpoint_dir (
bool, tùy chọn, mặc định làFalse) — Có nên xóa thư mục checkpoint sau khi gộp hay không.
Gộp các trọng số từ các checkpoint mô hình FSDP dạng phân mảnh (sharded) thành một checkpoint kết hợp duy nhất. Nên sử dụng nếu SHARDED_STATE_DICT đã được dùng cho mô hình. Các trọng số sẽ được lưu vào {output_path}/model.safetensors nếu safe_serialization, ngược lại là pytorch_model.bin.
Lưu ý: đây là một quy trình bị giới hạn bởi CPU.
FullyShardedDataParallelPlugin
lớp 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 )
Tham số
- fsdp_version (
int, mặc định là1) — Phiên bản của FSDP cần sử dụng. Mặc định là 1. Nếu đặt thành 2, launcher sẽ kỳ vọng cấu hình đã được chuyển đổi sang định dạng FSDP2. - sharding_strategy (
Union[str, torch.distributed.fsdp.ShardingStrategy], mặc định là'FULL_SHARD') — Chiến lược sharding cần sử dụng. Phải là mộtstrhoặc một instance củatorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. Đã bị ngừng khuyến khích, thay thế bằngreshard_after_forward. - reshard_after_forward (
Union[str, torch.distributed.fsdp.ShardingStrategy, bool], mặc định là'FULL_SHARD'chofsdp_version=1vàTruechofsdp_version=2) — Chiến lược sharding cần sử dụng. Phải là một bool nếufsdp_versionđược đặt thành 2, ngược lại phải là mộtstrhoặc một instance củatorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. - backward_prefetch (
Union[str, torch.distributed.fsdp.BackwardPrefetch], mặc định là'NO_PREFETCH') — Chiến lược prefetch cho quá trình backward. Phải là mộtstrhoặc một instance củatorch.distributed.fsdp.fully_sharded_data_parallel.BackwardPrefetch. - mixed_precision_policy (
Optional[Union[dict, str, torch.distributed.fsdp.MixedPrecision, torch.distributed.fsdp.MixedPrecisionPolicy]], mặc định làNone) — Cấu hình để bật huấn luyện độ chính xác hỗn hợp với FullyShardedDataParallel. Nếu truyền vào mộtdict, nó phải có các khóa sau:param_dtype,reduce_dtypevàbuffer_dtype, có thể là một instance củatorch.distributed.fsdp.MixedPrecisionPolicynếufsdp_versionđược đặt thành 2. Nếu truyền vào mộtstr, nó phải là một trong các giá trị sau: fp8, fp16, bf16, fp32, và được dùng để đặtparam_dtype,reduce_dtypevà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], mặc định làFalse) — Có nên offload tham số sang CPU hay không. Giá trị phải làboolhoặc một instance củatorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadhoặctorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadPolicynếufsdp_versionđược đặt thành 2. - ignored_modules (
Optional[Union[Iterable[torch.nn.Module], str]], mặc định làNone) — Một danh sách các module cần bỏ qua khi bọc bằng FSDP. Khi truyền một chuỗi, các module sẽ được khớp theo tên bằng cách sử dụng regex fullmatch. Nếufsdp_versionđược đặt thành 2, các module sẽ được chuyển đổi thành các tham số và được sử dụng. - state_dict_type (
Union[str, torch.distributed.fsdp.StateDictType], mặc định là'FULL_STATE_DICT') — Loại state dict cần sử dụng. Nếu là chuỗi, nó phải là một trongfull_state_dict,local_state_dicthoặcsharded_state_dict. - state_dict_config (
Optional[Union[torch.distributed.fsdp.FullStateDictConfig, torch.distributed.fsdp.ShardedStateDictConfig], mặc định làNone) — Cấu hình state dict cần sử dụng. Nếu không được truyền vào, giá trị này sẽ được xác định dựa trênstate_dict_type. - optim_state_dict_config (
Optional[Union[torch.distributed.fsdp.FullOptimStateDictConfig, torch.distributed.fsdp.ShardedOptimStateDictConfig], mặc định làNone) — Cấu hình optim state dict cần sử dụng. Nếu không được truyền vào, giá trị này sẽ được xác định dựa trênstate_dict_type. - limit_all_gathers (
bool, mặc định làTrue) — Xác định việc FSDP có đồng bộ hóa rõ ràng luồng CPU để ngăn quá nhiều all-gathers đang chạy hay không. Giá trị bool này chỉ ảnh hưởng đến các chiến lược phân mảnh (sharded) có lịch trình all-gathers. Bật tùy chọn này có thể giúp giảm số lần thử lại (retries) của CUDA malloc. - use_orig_params (
bool, mặc định làFalse) — Có sử dụng các tham số gốc cho optimizer hay không. - param_init_fn (
Optional[Callable[[torch.nn.Module], None], mặc định làNone) — MộtCallable[torch.nn.Module] -> Nonequy định cách khởi tạo các module hiện đang trên thiết bị meta lên một thiết bị thực. Chỉ áp dụng khisync_module_stateslàTrue. Mặc định là mộtlambdagọito_emptytrên module. - sync_module_states (
bool, mặc định làFalse) — Liệu mỗi đơn vị FSDP được bọc riêng lẻ có nên phát trực tiếp (broadcast) các tham số module từ rank 0 để đảm bảo chúng giống nhau trên tất cả các rank sau khi khởi tạo hay không. Mặc định làFalsetrừ khicpu_ram_efficient_loadinglàTrue, khi đó nó sẽ được bật bắt buộc. - forward_prefetch (
bool, mặc định làFalse) — Xác định việc FSDP có thực hiện prefetch (tải trước) cho phép all-gather tiếp theo trong khi thực hiện bước forward hay không. Chỉ sử dụng với đồ thị tĩnh (Static graphs). - activation_checkpointing (
bool, mặc định làFalse) — Một kỹ thuật để giảm mức sử dụng bộ nhớ bằng cách xóa các activation của một số lớp nhất định và tính toán lại chúng trong quá trình truyền ngược (backward pass). Về cơ bản, kỹ thuật này đánh đổi thêm thời gian tính toán để đổi lấy việc giảm mức sử dụng bộ nhớ. - cpu_ram_efficient_loading (
bool, mặc định làNone) — Nếu là True, chỉ tiến trình đầu tiên tải checkpoint của model được huấn luyện trước, trong khi tất cả các tiến trình khác có trọng số rỗng. Chỉ áp dụng cho Transformers. Khi sử dụng tính năng này,sync_module_statescần được đặt làTrue. - transformer_cls_names_to_wrap (
Optional[List[str]], mặc định làNone) — Một danh sách tên lớp của các lớp transformer cần bọc. Chỉ áp dụng khiauto_wrap_policylàtransformer_based_wrap. - min_num_params (
Optional[int], mặc định làNone) — Số lượng tham số tối thiểu mà một module phải có để được bọc. Chỉ áp dụng khiauto_wrap_policylàsize_based_wrap.
Plugin này được sử dụng để bật song song dữ liệu phân mảnh hoàn toàn.
Với model, tạo một auto_wrap_policy dựa trên chính sách được truyền vào và nếu chúng ta có thể sử dụng transformer_cls_to_wrap
Đặt chính sách độ chính xác hỗn hợp cho FSDP
Đặt cấu hình state dict dựa trên StateDictType.
Kiểm tra chính sách độ chính xác hỗn hợp, được trừu tượng hóa để không đưa các lệnh import vào nếu không cần thiết.
fsdp2_load_full_state_dict
accelerate.utils.fsdp2_load_full_state_dict
< source >( acceleratormodel: Modulefull_sd: dictcpu_offload: bool = False )
Tham số
- accelerator (
Accelerator) — Bản thể accelerator - model (
torch.nn.Module) — Mô hình để nạp state dict vào, được kỳ vọng nằm trên meta device, nếu không có thể xảy ra hiện tượng tăng đột biến VRAM - full_sd (
dict) — Trạng thái dict đầy đủ để tải, chỉ có thể nằm trên rank 0 - cpu_offload (
bool, mặc định làFalse) — Nếu là True, di chuyển các tham số đã chia mảnh sang CPU sau khi phân phối. Bắt buộc khi bật tính năng offload CPU của FSDP.
Tải toàn bộ state dict (chỉ có thể nằm trên rank 0) vào mô hình đã phân mảnh. Việc này được thực hiện bằng cách phát trực tiếp (broadcast) các tham số từ rank 0 đến tất cả các rank khác. Hàm này sửa đổi mô hình tại chỗ (in-place).
fsdp2_switch_optimizer_parameters
accelerate.utils.fsdp2_switch_optimizer_parameters
< source >( optimizer: Optimizermapping: dict )
Tham số
- optimizer (
torch.optim.Optimizer) — Đối tượng Optimizer chứa các tham số của mô hình gốc - mapping (
dict) — Ánh xạ từ tham số gốc (được chỉ định bởidata_ptr) sang tham số đã chia
Gây ra
KeyError
KeyError— Nếu một tham số trong optimizer không thể được chuyển sang phiên bản sharded. Điều này không bao giờ xảy ra và cho thấy có lỗi. Nếu chúng ta giữ nguyên các tham số gốc thay vì ném ngoại lệ, quá trình huấn luyện sẽ không chính xác về mặt số học và trọng số sẽ không được cập nhật.
Chuyển các tham số của bộ tối ưu sang các tham số mới (tham số phân mảnh trong trường hợp thông thường). Hàm này sửa đổi bộ tối ưu tại chỗ.
fsdp2_prepare_model
accelerate.utils.fsdp2_prepare_model
< source >( acceleratormodel: Module ) → torch.nn.Module
Chuẩn bị mô hình cho FSDP2 tại chỗ. Đồng thời trả về mô hình để tránh việc sử dụng sai mô hình gốc.