Transformers documentation
Trainer 유틸리티
Trainer 유틸리티
이 페이지에는 Trainer에서 사용하는 모든 유틸리티 함수를 나열합니다.
이 중 대부분은 라이브러리의 Trainer 코드를 연구하는 경우에만 유용합니다.
유틸리티
클래스 transformers.EvalPrediction
< source >( 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 )
평가 출력(항상 라벨을 포함), 메트릭을 계산하는 데 사용됩니다.
class transformers.IntervalStrategy
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
분산 학습 시 재현 가능한 동작을 위한 헬퍼 함수입니다. pytorch에 대한 자세한 내용은 https://pytorch.org/docs/stable/notes/randomness.html을 참조하세요.
transformers.set_seed
< source >( seed: intdeterministic: bool = False )
random, numpy, torch (설치된 경우)에서 시드를 설정하여 재현 가능한 동작을 보장하는 헬퍼 함수입니다.
transformers.torch_distributed_zero_first
< source >( local_rank: int )
분산 학습의 모든 프로세스가 각 local_master가 무언가를 수행할 때까지 대기하도록 만드는 Decorator입니다.
Callbacks 내부 구조
class transformers.trainer_callback.CallbackHandler
< source >( callbacksmodelprocessing_classoptimizerlr_scheduler )
콜백 목록을 순서대로 호출하는 내부 클래스입니다.
Trainer 인자 파서
클래스 transformers.HfArgumentParser
< source >( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )
argparse.ArgumentParser의 이 하위 클래스는 dataclass의 type hints를 사용하여 인수를 생성합니다.
이 클래스는 네이티브 argparse와 잘 동작하도록 설계되었습니다. 특히, 초기화 이후 파서에 더 많은 (dataclass 기반이 아닌) 인수를 추가할 수 있으며, 파싱 후 추가 namespace로 출력을 받을 수 있습니다. 선택 사항: dataclass에서 _argument_group_name 속성을 사용하여 하위 인수 그룹을 생성할 수 있습니다.
parse_args_into_dataclasses
< source >( 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
< source >( args: dictallow_extra_keys: bool = False ) → Tuple consisting of
argparse를 전혀 사용하지 않고, 대신 dict를 사용하여 dataclass 타입을 채우는 대안적인 헬퍼 메서드입니다.
parse_json_file
< source >( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
argparse를 전혀 사용하지 않고, 대신 json 파일을 로드하여 dataclass 유형을 채우는 대안적인 헬퍼 메서드입니다.
parse_yaml_file
< source >( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
argparse를 전혀 사용하지 않고, 대신 yaml 파일을 로드하여 dataclass 유형을 채우는 대안적인 헬퍼 메서드입니다.
디버그 유틸리티
클래스 transformers.debug_utils.DebugUnderflowOverflow
< source >( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )
이 디버그 클래스는 모델이 매우 크거나 매우 작은 값으로 변하기 시작하는 위치를 감지하고 이해하는 데 도움이 되며, 더 중요한 것은 nan 또는 inf인 가중치 및 활성화 요소입니다.
작동 모드는 2가지입니다:
- Underflow/overflow 감지 (기본값)
- 감지 없이 특정 배치의 절대 최소/최대 추적
Mode 1: Underflow/overflow detection
그 후 정상적으로 학습을 실행하면, 가중치, 입력 또는 출력 요소 중 적어도 하나에서 nan 또는 inf가 감지되면 이 모듈은 예외를 발생시키고 이 이벤트로 이어진 max_frames_to_save개의 프레임을 출력하며, 각 프레임은
forward가 실행된 클래스의 전체 자격 지정 모듈 이름과 클래스 이름- 각 모듈의 가중치, 입력 및 출력의 모든 요소에 대한 절대 최소값과 최대값
예를 들어, 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를 측정하므로 학습 속도가 느려집니다. 따라서 디버깅이 완료되면 반드시 비활성화하세요.