Transformers documentation

Trainer 유틸리티

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Trainer 유틸리티

이 페이지에는 Trainer에서 사용하는 모든 유틸리티 함수를 나열합니다.

이 중 대부분은 라이브러리의 Trainer 코드를 연구하는 경우에만 유용합니다.

유틸리티

클래스 transformers.EvalPrediction

< >

( predictions: numpy.ndarray | tuple[numpy.ndarray]label_ids: numpy.ndarray | tuple[numpy.ndarray]inputs: numpy.ndarray | tuple[numpy.ndarray] | None = Nonelosses: numpy.ndarray | tuple[numpy.ndarray] | None = None )

매개변수

  • predictions (np.ndarray) — 모델의 예측 값.
  • label_ids (np.ndarray) — 일치시킬 대상.
  • inputs (np.ndarray, 선택 사항) — 모델에 전달되는 입력 데이터.
  • losses (np.ndarray, 선택 사항) — 평가 중에 계산된 손실 값.

평가 출력(항상 라벨을 포함), 메트릭을 계산하는 데 사용됩니다.

class transformers.IntervalStrategy

< >

( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )

transformers.enable_full_determinism

< >

( seed: intwarn_only: bool = False )

분산 학습 시 재현 가능한 동작을 위한 헬퍼 함수입니다. pytorch에 대한 자세한 내용은 https://pytorch.org/docs/stable/notes/randomness.html을 참조하세요.

transformers.set_seed

< >

( seed: intdeterministic: bool = False )

매개변수

  • seed (int) — 설정할 시드입니다.
  • deterministic (bool, 선택 사항, 기본값 False) — 사용 가능한 경우 결정론적 알고리즘을 사용할지 여부입니다. 학습 속도가 느려질 수 있습니다.

random, numpy, torch (설치된 경우)에서 시드를 설정하여 재현 가능한 동작을 보장하는 헬퍼 함수입니다.

transformers.torch_distributed_zero_first

< >

( local_rank: int )

매개변수

  • local_rank (int) — 로컬 프로세스의 랭크입니다.

분산 학습의 모든 프로세스가 각 local_master가 무언가를 수행할 때까지 대기하도록 만드는 Decorator입니다.

Callbacks 내부 구조

class transformers.trainer_callback.CallbackHandler

< >

( callbacksmodelprocessing_classoptimizerlr_scheduler )

콜백 목록을 순서대로 호출하는 내부 클래스입니다.

Trainer 인자 파서

클래스 transformers.HfArgumentParser

< >

( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )

매개변수

  • dataclass_types (DataClassType 또는 Iterable[DataClassType], 선택 사항) — 파싱된 인수로 인스턴스를 “채울” dataclass 유형 또는 dataclass 유형 목록.
  • kwargs (dict[str, Any], 선택) — argparse.ArgumentParser()에 일반적인 방식으로 전달됩니다.

argparse.ArgumentParser의 이 하위 클래스는 dataclass의 type hints를 사용하여 인수를 생성합니다.

이 클래스는 네이티브 argparse와 잘 동작하도록 설계되었습니다. 특히, 초기화 이후 파서에 더 많은 (dataclass 기반이 아닌) 인수를 추가할 수 있으며, 파싱 후 추가 namespace로 출력을 받을 수 있습니다. 선택 사항: dataclass에서 _argument_group_name 속성을 사용하여 하위 인수 그룹을 생성할 수 있습니다.

parse_args_into_dataclasses

< >

( args = Nonereturn_remaining_strings = Falselook_for_args_file = Trueargs_filename = Noneargs_file_flag = None ) → Tuple consisting of

매개변수

  • args — 파싱할 문자열 목록입니다. 기본값은 sys.argv에서 가져옵니다. (argparse.ArgumentParser와 동일)
  • return_remaining_strings — true인 경우, 나머지 인자 문자열 목록도 반환합니다.
  • look_for_args_file — true인 경우, 이 프로세스의 엔트리 포인트 스크립트와 동일한 기본 이름을 가진 “.args” 파일을 찾아 해당 파일의 내용을 커맨드 라인 인자에 추가합니다.
  • args_filename — None이 아닌 경우, 이전 인수로 지정된 “.args” 파일 대신 이 파일을 사용합니다.
  • args_file_flag — None이 아닌 경우, 이 플래그로 지정된 커맨드 라인 인수를 사용하여 파일을 찾습니다. 플래그는 여러 번 지정할 수 있으며, 우선순위는 순서(마지막 것이 우선)에 따라 결정됩니다.

반환값

다음으로 구성된 튜플

  • dataclass 인스턴스를 초기화자에 전달된 순서대로 반환합니다.
  • 적용되는 경우, 초기화 후 파서에 추가된 (dataclass 기반이 아닌) 추가 인수를 위한 추가 네임스페이스
  • 남은 인자 문자열의 잠재적 목록. (argparse.ArgumentParser.parse_known_args와 동일)

지정된 dataclass 유형 인스턴스로 커맨드라인 인수를 파싱합니다.

이것은 argparse의 ArgumentParser.parse_known_args에 의존합니다. 문서는 다음을 참조하세요: docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args

parse_dict

< >

( args: dictallow_extra_keys: bool = False ) → Tuple consisting of

매개변수

  • args (dict) — 설정 값을 포함하는 dict
  • allow_extra_keys (bool, 선택 사항, 기본값 False) — 기본값은 False입니다. False인 경우, dict에 파싱되지 않는 키가 포함되어 있으면 예외를 발생시킵니다.

반환값

다음으로 구성된 튜플

  • dataclass 인스턴스를 초기화자에 전달된 순서대로 반환합니다.

argparse를 전혀 사용하지 않고, 대신 dict를 사용하여 dataclass 타입을 채우는 대안적인 헬퍼 메서드입니다.

parse_json_file

< >

( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of

매개변수

  • json_file (str 또는 os.PathLike) — 파싱할 json 파일의 파일 이름
  • allow_extra_keys (bool, 선택 사항, 기본값 False) — 기본값은 False입니다. False인 경우, json 파일에 파싱되지 않는 키가 포함되어 있으면 예외를 발생시킵니다.

반환값

다음으로 구성된 튜플

  • dataclass 인스턴스를 초기화자에 전달된 순서대로 반환합니다.

argparse를 전혀 사용하지 않고, 대신 json 파일을 로드하여 dataclass 유형을 채우는 대안적인 헬퍼 메서드입니다.

parse_yaml_file

< >

( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of

매개변수

  • yaml_file (str 또는 os.PathLike) — 파싱할 yaml 파일의 파일 이름
  • allow_extra_keys (bool, 선택 사항, 기본값 False) — 기본값은 False입니다. False인 경우, json 파일에 파싱되지 않는 키가 포함되어 있으면 예외를 발생시킵니다.

반환값

다음으로 구성된 튜플

  • dataclass 인스턴스를 초기화자에 전달된 순서대로 반환합니다.

argparse를 전혀 사용하지 않고, 대신 yaml 파일을 로드하여 dataclass 유형을 채우는 대안적인 헬퍼 메서드입니다.

디버그 유틸리티

클래스 transformers.debug_utils.DebugUnderflowOverflow

< >

( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )

매개변수

  • model (nn.Module) — 디버깅할 모델.
  • max_frames_to_save (int, 선택 사항, 기본값 21) — 기록할 과거 프레임 수
  • trace_batch_nums(list[int], 선택 사항, 기본값 []) — 추적할 배치 번호(감지 기능 비활성화)
  • abort_after_batch_num (`int“, 선택 사항) — 특정 배치 번호가 완료된 후 중단할지 여부

이 디버그 클래스는 모델이 매우 크거나 매우 작은 값으로 변하기 시작하는 위치를 감지하고 이해하는 데 도움이 되며, 더 중요한 것은 nan 또는 inf인 가중치 및 활성화 요소입니다.

작동 모드는 2가지입니다:

  1. Underflow/overflow 감지 (기본값)
  2. 감지 없이 특정 배치의 절대 최소/최대 추적

Mode 1: Underflow/overflow detection

underflow/overflow 감지를 활성화하려면, 모델로 객체를 초기화합니다:

debug_overflow = DebugUnderflowOverflow(model)

그 후 정상적으로 학습을 실행하면, 가중치, 입력 또는 출력 요소 중 적어도 하나에서 nan 또는 inf가 감지되면 이 모듈은 예외를 발생시키고 이 이벤트로 이어진 max_frames_to_save개의 프레임을 출력하며, 각 프레임은

  1. forward가 실행된 클래스의 전체 자격 지정 모듈 이름과 클래스 이름
  2. 각 모듈의 가중치, 입력 및 출력의 모든 요소에 대한 절대 최소값과 최대값

예를 들어, fp16로 실행한 google/mt5-small의 감지 보고서 헤더와 마지막 몇 프레임은 다음과 같습니다.

혼합 정밀도:

Detected inf/nan during batch_number=0
Last 21 forward frames:
abs min  abs max  metadata
[...]
                  encoder.block.2.layer.1.DenseReluDense.wi_0 Linear
2.17e-07 4.50e+00 weight
1.79e-06 4.65e+00 input[0]
2.68e-06 3.70e+01 output
                  encoder.block.2.layer.1.DenseReluDense.wi_1 Linear
8.08e-07 2.66e+01 weight
1.79e-06 4.65e+00 input[0]
1.27e-04 2.37e+02 output
                  encoder.block.2.layer.1.DenseReluDense.wo Linear
1.01e-06 6.44e+00 weight
0.00e+00 9.74e+03 input[0]
3.18e-04 6.27e+04 output
                  encoder.block.2.layer.1.DenseReluDense T5DenseGatedGeluDense
1.79e-06 4.65e+00 input[0]
3.18e-04 6.27e+04 output
                  encoder.block.2.layer.1.dropout Dropout
3.18e-04 6.27e+04 input[0]
0.00e+00      inf output

여기서 T5DenseGatedGeluDense.forward의 출력 활성화 값의 절대 최대치가 약 62.7K로, fp16의 상한인 64K에 매우 가깝다는 것을 확인할 수 있습니다. 다음 프레임에서는 일부 요소를 0으로 만든 후 가중치를 재정규화하는 Dropout이 적용되어 절대 최대치가 64K를 초과하게 되고, 오버플로가 발생합니다.

숫자가 fp16 숫자에 대해 매우 큰 값으로 커지기 시작할 때 살펴봐야 할 것은 이전 프레임임을 알 수 있습니다.

추적은 forward가 완료된 직후 호출되는 forward hook에서 수행됩니다.

기본적으로 마지막 21프레임이 출력됩니다. 필요에 따라 기본값을 변경할 수 있습니다. 예를 들어:

debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)

이 디버깅 기능을 올바르게 설정했는지, 그리고 수 시간 이상 걸릴 수 있는 학습에 사용할 의도가 있는지 확인하려면, 다음 섹션에서 설명한 대로 먼저 몇 개의 배치에 대해 일반 트레이싱을 활성화하여 실행해 보세요.

Mode 2. 감지 없이 특정 배치의 절대 최소/최대값 추적

두 번째 작업 모드는 underflow/overflow 감지 기능이 꺼진 상태의 배치별 트레이싱입니다.

각 forward 호출의 모든 구성 요소에 대한 절대 최소값과 최대값을 확인하고 싶다고 가정해 보겠습니다.

주어진 배치에 대해, 그리고 1번과 3번 배치에 대해서만 해당 작업을 수행합니다. 그런 다음 이 클래스를 다음과 같이 인스턴스화합니다:

debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3])

이제 전체 배치 1과 3은 위에서 설명한 것과 동일한 형식으로 추적됩니다. 배치는 0부터 인덱싱됩니다.

특정 배치 번호 이후로 프로그램이 이상 동작을 시작한다는 것을 알고 있다면, 해당 영역으로 바로 빠르게 이동할 수 있으므로 유용합니다.

조기 종료:

: 를 사용하여 학습을 중단할 배치 번호를 지정할 수도 있습니다.

debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3], abort_after_batch_num=3)

이 기능은 주로 tracing 모드에서 유용하지만, 모든 모드에서 사용할 수 있습니다.

성능:

이 모듈은 모델의 각 가중에 대해 모든 forward마다 절대 min/`max를 측정하므로 학습 속도가 느려집니다. 따라서 디버깅이 완료되면 반드시 비활성화하세요.

Update on GitHub