Transformers documentation

Trainer 유틸리티

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: dict[str, typing.Any]allow_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