Transformers documentation
Tầng và tiện ích tùy chỉnh
Tầng và tiện ích tùy chỉnh
Trang này liệt kê tất cả các lớp tùy chỉnh được thư viện sử dụng, cũng như các hàm tiện ích và lớp mà nó cung cấp cho việc mô hình hóa.
Phần lớn những điều đó chỉ hữu ích nếu bạn đang nghiên cứu mã nguồn của các mô hình trong thư viện.
WeightRenaming
lớp transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
Áp dụng một danh sách các biến đổi WeightRenaming được ghép cặp, được kích hoạt một cách lười biếng bởi mẫu nguồn đầu tiên (“guard”). Sử dụng điều này khi hai lần đổi tên chia sẻ một tên trung gian (ví dụ: norm0→norm1 và norm1→norm2) để đảm bảo việc tải một checkpoint đã được chuyển đổi (có norm1 và norm2 nhưng không có norm0) không áp dụng lại các lần đổi tên một cách sai lệch.
NOTE: sắp xếp source_patterns sao cho pattern vắng mặt trong checkpoint đã được chuyển đổi đứng đầu. State dict được lặp lại theo thứ tự key đã sắp xếp, do đó guard pattern phải nhỏ hơn các pattern phụ thuộc theo thứ tự từ điển. Nếu không, các phần phụ thuộc sẽ bị bỏ qua ở lượt đầu tiên và không bao giờ được thử lại.
WeightConverter
lớp transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
Các thao tác chuyển đổi
Lớp cơ sở cho các thao tác chuyển đổi trọng số.
Tách một tensor dọc theo dim thành các khối có kích thước bằng nhau. Ngoài ra, num_shards_attribute là một trường cấu hình để đọc nhằm biết cần tách thành bao nhiêu tensor. Hữu ích khi nối một số lượng tensor tùy ý.
Nối các tensor dọc theo dim. Ngoài ra, nếu nối một số lượng tensor tùy ý, num_shards_attribute là
một trường cấu hình để đọc nhằm biết số lượng tensor cần tạo lại khi sử dụng các Ops ngược lại.
Gộp một danh sách tensor thành một tensor duy nhất dọc theo chiều đầu tiên. Chúng ta định nghĩa rõ ràng điều này vì với EP hoặc TP, bạn cần chắc chắn rằng mình biết mình đang làm gì!
Ngược của MergeModulelist sử dụng kích thước tách rõ ràng cho từng nhóm.
lớp transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
Áp dụng hoán vị cần thiết để chuyển đổi trọng số RoPE phức tạp sang định dạng sin/cos tách riêng.
lớp transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
Áp dụng hoán vị cần thiết để chuyển trọng số RoPE phức sang định dạng sin/cos tách riêng trên QKV đã hợp nhất.
Tương tự như việc gọi PermuteForRope() + Concatenate() nhưng cho phép gọi Permute chỉ trên một tập con của các tensor đã chia nhỏ.
LƯU Ý: quá trình chuyển đổi này chỉ áp dụng cho bộ xương thị giác trong các mô hình đa phương thức, vì nó kiểm tra config.vision_config
lớp transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
Áp dụng hoán vị cần thiết để chuyển trọng số RoPE phức sang định dạng sin/cos tách riêng trên QKV đã hợp nhất.
Tương tự như việc gọi Chunk() + PermuteForRope() nhưng cho phép gọi Permute chỉ trên một tập con các tensor đã chia.
LƯU Ý: quá trình chuyển đổi này chỉ áp dụng cho bộ xương thị giác trong các mô hình đa phương thức, vì nó kiểm tra config.vision_config
Các lớp
Lớp cơ sở cho các lớp có kiểm tra điểm gradient.
Lớp này cho phép tính năng kiểm tra điểm (gradient checkpointing) cho một lớp. Mặc định, gradient checkpointing bị tắt
(gradient_checkpointing = False). Khi model.set_gradient_checkpointing() được gọi, gradient checkpointing sẽ
được bật bằng cách đặt gradient_checkpointing = True và gán một hàm checkpointing cho _gradient_checkpointing_func.
Quan trọng:
Khi sử dụng gradient checkpointing với use_reentrant=True, các đầu vào cần tính gradient (ví dụ: hidden states)
phải được truyền dưới dạng đối số vị trí (*args) thay vì đối số từ khóa để truyền gradient một cách chính xác.
Các hàm chú ý
Đối tượng dạng Dict theo dõi các hàm attention được cho phép. Bạn có thể dễ dàng thêm một hàm attention mới bằng cách gọi register(). Nếu một model cần ghi đè cục bộ một hàm attention hiện có, chẳng hạn như sdpa, nó cần khai báo một instance mới của lớp này bên trong modeling_<model>.py, và khai báo nó trên instance đó.
Các hàm mặt nạ chú ý
Các hàm nhúng vị trí Xoay
transformers.dynamic_rope_update
< source >( rope_forward )
Hàm decorator để cập nhật các tham số RoPE trong bước truyền thẳng, nếu mô hình đang sử dụng RoPE động (tức là một triển khai RoPE có thể tính toán lại tần số của nó trong bước truyền thẳng).
Các module tùy chỉnh của Pytorch
lớp transformers.Conv1D
< source >( nfnx )
Lớp tích chập 1 chiều được định nghĩa bởi Radford et al. cho OpenAI GPT (và cũng được sử dụng trong GPT-2).
Về cơ bản hoạt động giống như một lớp tuyến tính nhưng các trọng số được chuyển vị.
Hàm trợ giúp PyTorch
transformers.apply_chunking_to_forward
< source >( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor
Tham số
- forward_fn (
Callable[..., torch.Tensor]) — Hàm forward của mô hình. - chunk_size (
int) — Kích thước chunk của một tensor dạng chunk:num_chunks = len(input_tensors[0]) / chunk_size. - chunk_dim (
int) — Chiều màinput_tensorsnên được chia nhỏ. - input_tensors (
tuple[torch.Tensor]) — Các tensor đầu vào củaforward_fnsẽ được chia nhỏ
Trả về
torch.Tensor
Một tensor có cùng hình dạng với kết quả mà forward_fn sẽ trả về nếu được áp dụng`.
Hàm này chia input_tensors thành các phần tensor đầu vào nhỏ hơn có kích thước chunk_size trên chiều chunk_dim. Sau đó, nó áp dụng lớp forward_fn cho từng phần một cách độc lập để tiết kiệm bộ nhớ.
Nếu forward_fn độc lập theo chunk_dim, hàm này sẽ cho kết quả giống như việc áp dụng trực tiếp forward_fn lên input_tensors.
Ví dụ:
# 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
Cắt tỉa một lớp tuyến tính để chỉ giữ lại các mục trong index.
Được sử dụng để loại bỏ các đầu.