Transformers documentation
커스텀 레이어 및 유틸리티
커스텀 레이어 및 유틸리티
이 페이지에서는 라이브러리가 사용하는 모든 커스텀 레이어와 모델링을 위해 제공하는 유틸리티 함수 및 클래스를 나열합니다.
대부분은 라이브러리의 모델 코드를 연구하는 경우에만 유용합니다.
WeightRenaming
class transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
첫 번째(“guard”) 소스 패턴에 의해 지연 활성화되는 WeightRenaming 변환의 쌍 목록을 적용합니다. 두 개의 이름 변경이 중간 이름을 공유하는 경우(예: norm0→norm1 및 norm1→norm2)에 이 기능을 사용하십시오. 이렇게 하면 이미 변환된 체크포인트(norm1와 norm2는 있지만 norm0는 없는 경우)를 로드할 때 이름 변경이 잘못 재적용되는 것을 방지할 수 있습니다.
NOTE: 이미 변환된 체크포인트에 없는 source_patterns가 먼저 오도록 순서를 정하세요. state dict는 정렬된 키 순서로 반복되므로, 가드 패턴은 종속 패턴보다 사전 순으로 작아야 합니다. 그렇지 않으면 종속 항목이 첫 번째 패스에서 건너뛰어지고 다시 시도되지 않습니다.
WeightConverter
클래스 transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
변환 작업
가중치 변환 작업의 베이스 클래스입니다.
dim을 따라 텐서를 동일한 크기의 청크로 분할합니다. 또한 num_shards_attribute는 몇 개의 텐서로 청크를 분할할지 알기 위해 읽는 설정 필드입니다. 임의의 개수의 텐서를 연결할 때 유용합니다.
dim을 따라 텐서를 연결합니다. 또한, 임의 개수의 텐서를 연결하는 경우, num_shards_attribute는 반대 방향의 Ops를 사용할 때 재구성할 텐서의 개수를 파악하기 위해 읽는 설정 필드입니다.
첫 번째 차원을 따라 텐서 목록을 단일 텐서로 병합합니다. EP 또는 TP의 경우, 수행하는 작업에 대해 명확히 인지하고 있는지 확인해야 하므로 이 함수를 명시적으로 정의합니다.
각 그룹에 대해 명시적인 분할 크기를 사용하여 MergeModulelist의 역연산을 수행합니다.
클래스 transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
복소수 RoPE 가중치를 분리된 sin/cos 형식으로 변환하는 데 필요한 순열을 적용합니다.
클래스 transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
융합된 QKV에 대해 복소수 RoPE 가중치를 분리된 sin/cos 형식으로 변환하는 데 필요한 순열을 적용합니다.
PermuteForRope() + Concatenate()를 호출하는 것과 동일하지만, 청크된 텐서의 부분 집합에만 Permute를 호출할 수 있게 합니다.
참고: 이 변환은 멀티모달 모델의 비전 백본에만 적용됩니다. config.vision_config를 확인하기 때문입니다.
클래스 transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
융합된 QKV에 대해 복소수 RoPE 가중치를 분리된 sin/cos 형식으로 변환하는 데 필요한 순열을 적용합니다.
Chunk() + PermuteForRope()를 호출하는 것과 동일하지만, 분할된 텐서의 부분 집합에만 Permute를 호출할 수 있게 합니다.
참고: 이 변환은 멀티모달 모델의 비전 백본에만 적용됩니다. config.vision_config를 확인하기 때문입니다.
레이어
그라디언트 체크포인트링을 지원하는 레이어의 베이스 클래스입니다.
이 클래스는 레이어에 대한 gradient checkpointing 기능을 활성화합니다. 기본적으로 gradient checkpointing은 비활성화되어 있습니다(gradient_checkpointing = False). model.set_gradient_checkpointing()이 호출되면 gradient_checkpointing = True로 설정하고 _gradient_checkpointing_func에 checkpointing 함수를 할당하여 gradient checkpointing이 활성화됩니다.
중요:
use_reentrant=True와 함께 gradient checkpointing을 사용할 때, gradient가 필요한 입력(예: hidden states)은 gradient를 올바르게 전파하기 위해 키워드 인수가 아닌 위치 인수로(*args) 전달해야 합니다.
Attention Functions
허용된 attention 함수를 추적하는 dict 유사 객체입니다. register()를 호출하여 새로운 attention 함수를 쉽게 추가할 수 있습니다. 모델이 기존 attention 함수, 예를 들어 sdpa를 로컬에서 덮어쓰려면 modeling_<model>.py 내부에서 이 클래스의 새 인스턴스를 선언하고 해당 인스턴스에 선언해야 합니다.
Attention Mask 함수
Rotary Position Embedding 함수
transformers.dynamic_rope_update
< source >( rope_forward )
모델이 동적 RoPE(즉, forward pass에서 주파수를 다시 계산할 수 있는 RoPE 구현)를 사용하는 경우, forward pass에서 RoPE 매개변수를 업데이트하는 데코레이터 함수
Pytorch 커스텀 모듈
OpenAI GPT를 위해 Radford et al.이 정의한 1D-convolutional layer (GPT-2에서도 사용됨).
기본적으로 선형 레이어와 유사하게 작동하지만 가중치가 전치됩니다.
PyTorch 헬퍼 함수
transformers.apply_chunking_to_forward
< source >( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor
매개변수
- forward_fn (
Callable[..., torch.Tensor]) — 모델의 forward 함수입니다. - chunk_size (
int) — 차unked 텐서의 chunk 크기:num_chunks = len(input_tensors[0]) / chunk_size. - chunk_dim (
int) —input_tensors를 청크할 차원입니다. - input_tensors (
tuple[torch.Tensor]) —forward_fn의 입력 텐서로, 청크 처리됩니다
반환값
torch.Tensor
forward_fn을 적용했을 때 생성되었을 텐서와 동일한 형상을 가진 텐서
이 함수는 input_tensors를 chunk_dim 차원을 따라 chunk_size 크기의 더 작은 입력 텐서 조각으로 나눕니다. 그런 다음 각 조각에 대해 레이어 forward_fn을 독립적으로 적용하여 메모리를 절약합니다.
forward_fn가 chunk_dim에 대해 독립적이라면 이 함수는 input_tensors에 forward_fn을 직접 적용했을 때와 동일한 결과를 반환합니다.
예:
# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
hidden_states = self.decoder(hidden_states)
return hidden_states
# implement a chunked forward function
def forward(self, hidden_states):
return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)transformers.pytorch_utils.prune_linear_layer
< source >( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear
index에 있는 항목만 유지하도록 선형 레이어를 가지치기합니다.
헤드를 제거하는 데 사용됩니다.