Accelerate documentation
상태ful 클래스
상태ful 클래스
아래는 모든 인스턴스가 동일한 상태를 공유하며, 해당 상태가 첫 번째 인스턴스화 시점에 초기화된다는 의미에서 singleton class의 변형입니다.
이 클래스들은 불변이며 특정 구성 또는 상태에 대한 정보를 저장합니다.
PartialState
class accelerate.PartialState
< source >( 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’ 또는 ‘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)프로세스 그룹을 파괴합니다. 지정되지 않은 경우 기본 프로세스 그룹이 파괴됩니다.
로컬 메인 프로세스가 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}")with 블록 내에서 메인 프로세스가 먼저 실행되도록 합니다.
with 블록은 메인 프로세스가 종료된 후에 다른 프로세스들이 진입합니다.
마지막 프로세스에서만 장식된 함수를 실행하는 데코레이터입니다.
on_local_main_process
< source >( function: Callable[..., Any] | None = None )
로컬 메인 프로세스에서만 장식된 함수를 실행하는 데코레이터입니다.
예:
# 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
< source >( function: Callable[..., Any] | None = Nonelocal_process_index: int | None = None )
현재 노드에서 주어진 인덱스를 가진 프로세스에서만 장식된 함수를 실행하는 데코레이터입니다.
예:
# 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
< source >( function: Callable[..., Any] | None = None )
메인 프로세스에서만 장식된 함수를 실행하는 데코레이터입니다.
on_process
< source >( function: Callable[..., Any] | None = Noneprocess_index: int | None = None )
index가 주어진 프로세스에서만 장식된 함수를 실행하는 데코레이터입니다.
self.device의 장치를 현재 분산 환경으로 설정합니다.
split_between_processes
< source >( inputs: list | tuple | dict | torch.Tensorapply_padding: bool = False )
매개변수
- inputs (
list,tuple,torch.Tensor,dictoflist/tuple/torch.Tensor, ordatasets.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"]…
예:
>>> # 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
< source >( 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’ 또는 ‘fp8’ 중 선택) - num_processes (
int) — 현재 병렬로 실행 중인 프로세스의 수입니다. - process_index (
int) — 현재 프로세스의 인덱스. - is_last_process (
bool) — 현재 프로세스가 마지막 프로세스인지 여부. - is_main_process (
bool) — 현재 프로세스가 메인 프로세스인지 여부. - is_local_main_process (
bool) — 현재 프로세스가 로컬 노드의 메인 프로세스인지 여부. - debug (
bool) — 현재 스크립트가 디버그 모드로 실행 중인지 여부.
프로세스 그룹을 파괴합니다. 지정되지 않은 경우 기본 프로세스 그룹이 파괴됩니다.
self.fork_launched가 True이고 group가 None인 경우, 아무 동작도 수행되지 않습니다.
주어진 plugin_key를 가진 DeepSpeedPlugin을 반환합니다.
로컬 메인 프로세스가 with 블록 안으로 들어가도록 합니다.
with 블록은 메인 프로세스가 종료된 후에 다른 프로세스들이 진입합니다.
with 블록 내에서 메인 프로세스가 먼저 실행되도록 합니다.
with 블록은 메인 프로세스가 종료된 후에 다른 프로세스들이 진입합니다.
주어진 name으로 DeepSpeedPlugin을 활성화하고, 모든 다른 플러그인을 비활성화합니다.
split_between_processes
< source >( inputs: list | tuple | dict | torch.Tensorapply_padding: bool = False )
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
class accelerate.state.GradientState
< source >( gradient_accumulation_plugin: GradientAccumulationPlugin | None = None )
Singleton 클래스로, gradient accumulation에 대한 gradient synchronization 관련 정보를 포함합니다
사용 가능한 속성:
- end_of_dataloader (
bool) — 현재 dataloader의 끝까지 도달했는지 여부 - remainder (
int) — dataloader 패딩으로 추가된 추가 샘플의 수 - sync_gradients (
bool) — 모든 디바이스 간에 그래디언트를 동기화할지 여부 - active_dataloader (
Optional[DataLoader]) — 현재 반복 중인 dataloader - dataloader_references (
List[Optional[DataLoader]]) — 반복되는 dataloader에 대한 참조 목록 - num_steps (
int) — 누적할 스텝 수 - adjust_scheduler (
bool) — 그래디언트 축적을 고려하여 스케줄러를 조정할지 여부 - sync_with_dataloader (
bool) — dataloader 반복이 끝날 때 기울기를 동기화하고 총 스텝 수를 초기화할지 여부 - is_xla_gradients_synced (
bool) — XLA 그래디언트가 동기화되었는지 여부입니다. 초기값은 false입니다. 옵티마이저 스텝 전에 그래디언트가 리듀스되면 이 플래그는 true로 설정됩니다. 이후 각 스텝 후 플래그는 false로 리셋됩니다. FSDP는 항상 그래디언트를 동기화하므로 is_xla_gradients_synced는 항상 true입니다.