Accelerate documentation

Các lớp có trạng thái

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

Các lớp có trạng thái

Dưới đây là các biến thể của một singleton class theo nghĩa tất cả các instance chia sẻ cùng một trạng thái, được khởi tạo ở lần khởi tạo đầu tiên.

Các lớp này bất biến và lưu trữ thông tin về một số cấu hình hoặc trạng thái nhất định.

PartialState

lớp accelerate.PartialState

< >

( cpu: bool = False**kwargs )

Tham số

  • cpu (bool, tùy chọn) — Có nên buộc kịch bản chạy trên CPU hay không. Nếu đặt thành True, mọi bộ tăng tốc khả dụng sẽ bị bỏ qua và việc thực thi sẽ được ép buộc chạy trên CPU.
  • kwargs (các đối số từ khóa bổ sung, tùy chọn) — Các đối số từ khóa bổ sung để truyền cho hàm init_process_group tương ứng. Các kwargs hợp lệ có thể tìm thấy trong utils.InitProcessGroupKwargs. Xem phần ví dụ để biết cách sử dụng chi tiết.

Lớp Singleton chứa thông tin về môi trường huấn luyện hiện tại và các hàm hỗ trợ kiểm soát tiến trình. Được thiết kế để sử dụng khi chỉ cần kiểm soát tiến trình và trạng thái thực thi thiết bị. Không cần được khởi tạo từ Accelerator.

Các thuộc tính khả dụng:

  • device (torch.device) — Thiết bị cần sử dụng.
  • distributed_type (DistributedType) — Kiểu môi trường phân tán đang được sử dụng.
  • local_process_index (int) — Chỉ số của tiến trình hiện tại trên máy chủ hiện tại.
  • mixed_precision (str) — Xác định xem script hiện tại có sử dụng độ chính xác hỗn hợp hay không, và nếu có thì loại độ chính xác hỗn hợp được thực hiện là gì. (Chọn từ ‘no’,‘fp16’,‘bf16 or ‘fp8’).
  • num_processes (int) — Số lượng tiến trình hiện đang được khởi chạy song song.
  • process_index (int) — Chỉ số của tiến trình hiện tại.
  • is_last_process (bool) — Xác định xem tiến trình hiện tại có phải là tiến trình cuối cùng hay không.
  • is_main_process (bool) — Xác định xem tiến trình hiện tại có phải là tiến trình chính hay không.
  • is_local_main_process (bool) — Xác định xem tiến trình hiện tại có phải là tiến trình chính trên nút cục bộ hay không.
  • debug (bool) — Xác định xem script hiện tại có đang được chạy ở chế độ debug hay không.

Ví dụ:

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 )

Phá hủy nhóm tiến trình. Nếu không chỉ định nhóm nào, nhóm tiến trình mặc định sẽ bị phá hủy.

local_main_process_first

< >

( )

Cho phép tiến trình chính cục bộ đi vào khối with.

Các tiến trình khác sẽ đi vào khối with sau khi tiến trình chính thoát.

Ví dụ:

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

< >

( )

Cho phép tiến trình chính chạy trước bên trong khối with.

Các tiến trình khác sẽ đi vào khối with sau khi tiến trình chính thoát.

Ví dụ:

>>> 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] )

Tham số

  • function (Callable) — Hàm cần trang trí.

Decorator chỉ chạy hàm được trang trí trên tiến trình cuối cùng.

Ví dụ:

# 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 )

Tham số

  • function (Callable) — Hàm cần trang trí.

Decorator chỉ chạy hàm được trang trí trên tiến trình chính cục bộ.

Ví dụ:

# 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 )

Tham số

  • function (Callable, tùy chọn) — Hàm cần trang trí.
  • local_process_index (int, tùy chọn) — Chỉ số của tiến trình cục bộ mà trên đó hàm sẽ được thực thi.

Decorator chỉ chạy hàm được trang trí trên tiến trình có chỉ số đã cho trên nút hiện tại.

Ví dụ:

# 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 )

Tham số

  • function (Callable) — Hàm cần trang trí.

Decorator chỉ chạy hàm được trang trí trên tiến trình chính.

Ví dụ:

>>> 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 )

Tham số

  • function (Callable, optional) — Hàm cần trang trí.
  • process_index (int, optional) — Chỉ số của tiến trình mà hàm sẽ được thực thi trên đó.

Decorator chỉ chạy hàm được trang trí trên tiến trình có chỉ số được chỉ định.

Ví dụ:

# 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

< >

( )

Đặt thiết bị trong self.device thành môi trường phân tán hiện tại.

split_between_processes

< >

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

Tham số

  • inputs (list, tuple, torch.Tensor, dict của list/tuple/torch.Tensor, hoặc datasets.Dataset) — Đầu vào cần chia giữa các tiến trình.
  • apply_padding (bool, optional, mặc định là False) — Có áp dụng padding bằng cách lặp lại phần tử cuối cùng của đầu vào để tất cả các tiến trình có cùng số lượng phần tử hay không. Hữu ích khi thực hiện các thao tác như gather() trên các đầu ra hoặc khi truyền vào ít đầu vào hơn số lượng tiến trình. Nếu áp dụng, hãy nhớ loại bỏ các phần tử đã được padding sau đó.

Tách input giữa self.num_processes một cách nhanh chóng và sau đó có thể được sử dụng trên tiến trình đó. Hữu ích khi thực hiện suy luận phân tán, chẳng hạn như với các prompt khác nhau.

Lưu ý rằng khi sử dụng dict, tất cả các khóa cần có cùng số lượng phần tử.

Ví dụ:

# 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

< >

( )

Sẽ dừng việc thực thi của tiến trình hiện tại cho đến khi mọi tiến trình khác đều đã đạt đến điểm đó (do đó, điều này không làm gì khi script chỉ được chạy trong một tiến trình). Hữu ích để thực hiện trước khi lưu một mô hình.

Ví dụ:

>>> # 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

lớp 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 )

Lớp Singleton chứa thông tin về môi trường huấn luyện hiện tại.

Các thuộc tính khả dụng:

  • device (torch.device) — Thiết bị cần sử dụng.
  • distributed_type (DistributedType) — Kiểu môi trường phân tán đang được sử dụng.
  • parallelism_config (ParallelismConfig) — Cấu hình song song cho môi trường huấn luyện hiện tại. Được sử dụng để cấu hình môi trường huấn luyện phân tán.
  • đã được khởi tạo (bool) — Cho biết AcceleratorState đã được khởi tạo từ Accelerator hay chưa.
  • local_process_index (int) — Chỉ số của tiến trình hiện tại trên máy chủ hiện tại.
  • mixed_precision (str) — Xác định xem script hiện tại có sử dụng độ chính xác hỗn hợp hay không, và nếu có thì loại độ chính xác hỗn hợp được thực hiện là gì. (Chọn từ ‘no’,‘fp16’,‘bf16 or ‘fp8’).
  • num_processes (int) — Số lượng tiến trình hiện đang được khởi chạy song song.
  • process_index (int) — Chỉ số của tiến trình hiện tại.
  • is_last_process (bool) — Xác định xem tiến trình hiện tại có phải là tiến trình cuối cùng hay không.
  • is_main_process (bool) — Xác định xem tiến trình hiện tại có phải là tiến trình chính hay không.
  • is_local_main_process (bool) — Xác định xem tiến trình hiện tại có phải là tiến trình chính trên nút cục bộ hay không.
  • debug (bool) — Xác định xem script hiện tại có đang được chạy ở chế độ debug hay không.

destroy_process_group

< >

( group = None )

Phá hủy nhóm tiến trình. Nếu không chỉ định nhóm nào, nhóm tiến trình mặc định sẽ bị phá hủy.

Nếu self.fork_launched là True và group là None, thì không có gì xảy ra.

get_deepspeed_plugin

< >

( name: str )

Trả về DeepSpeedPlugin với plugin_key đã cho.

local_main_process_first

< >

( )

Cho phép tiến trình chính cục bộ đi vào khối with.

Các tiến trình khác sẽ đi vào khối with sau khi tiến trình chính thoát.

main_process_first

< >

( )

Cho phép tiến trình chính chạy trước bên trong khối with.

Các tiến trình khác sẽ đi vào khối with sau khi tiến trình chính thoát.

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 )

Tham số

  • inputs (list, tuple, torch.Tensor, hoặc dict của list/tuple/torch.Tensor) — Đầu vào cần chia giữa các tiến trình.
  • apply_padding (bool, optional, mặc định là False) — Có áp dụng padding bằng cách lặp lại phần tử cuối cùng của đầu vào để tất cả các tiến trình có cùng số lượng phần tử hay không. Hữu ích khi thực hiện các thao tác như gather() trên các đầu ra hoặc khi truyền vào ít đầu vào hơn số lượng tiến trình. Nếu áp dụng, hãy nhớ loại bỏ các phần tử đã được padding sau đó.

Tách input giữa self.num_processes một cách nhanh chóng và sau đó có thể được sử dụng trên tiến trình đó. Hữu ích khi thực hiện suy luận phân tán, chẳng hạn như với các prompt khác nhau.

Lưu ý rằng khi sử dụng dict, tất cả các khóa cần có cùng số lượng phần tử.

Ví dụ:

# 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

lớp accelerate.state.GradientState

< >

( gradient_accumulation_plugin: GradientAccumulationPlugin | None = None )

Lớp Singleton chứa thông tin liên quan đến đồng bộ hóa gradient cho tích lũy gradient

Các thuộc tính khả dụng:

  • end_of_dataloader (bool) — Cho biết chúng ta đã đạt đến cuối của dataloader hiện tại hay chưa
  • remainder (int) — Số lượng mẫu bổ sung được thêm vào do việc đệm (padding) dataloader
  • sync_gradients (bool) — Xác định xem có nên đồng bộ hóa gradient trên tất cả các thiết bị hay không
  • active_dataloader (Optional[DataLoader]) — Dataloader đang được lặp qua
  • dataloader_references (List[Optional[DataLoader]]) — Một danh sách các tham chiếu đến các dataloader đang được lặp qua
  • num_steps (int) — Số bước cần tích lũy
  • adjust_scheduler (bool) — Xác định xem trình lập lịch có nên được điều chỉnh để tính đến việc tích lũy gradient hay không
  • sync_with_dataloader (bool) — Xác định xem có nên đồng bộ hóa gradient ở cuối mỗi lần lặp của dataloader và đặt lại số bước tổng cộng hay không
  • is_xla_gradients_synced (bool) — Cho biết các gradient XLA đã được đồng bộ hóa hay chưa. Giá trị khởi tạo là false. Sau khi các gradient được giảm (reduce) trước bước tối ưu hóa, cờ này được đặt thành true. Tiếp theo, sau mỗi bước, cờ này được đặt lại về false. FSDP luôn đồng bộ hóa các gradient, do đó is_xla_gradients_synced luôn có giá trị true.
Update on GitHub