Transformers documentation
Lapisan dan utilitas kustom
Lapisan dan utilitas kustom
Halaman ini mencantumkan semua lapisan kustom yang digunakan oleh pustaka, serta fungsi utilitas dan kelas yang disediakan untuk pemodelan.
Sebagian besar dari hal tersebut hanya berguna jika Anda sedang mempelajari kode model-model di dalam pustaka.
WeightRenaming
kelas transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
Menerapkan daftar transformasi WeightRenaming berpasangan, yang diaktifkan secara malas oleh pola sumber pertama (“guard”). Gunakan ini ketika dua penamaan ulang berbagi nama perantara (misalnya norm0→norm1 dan norm1→norm2) sehingga memuat checkpoint yang sudah dikonversi (yang memiliki norm1 dan norm2 tetapi tidak ada norm0) tidak salah menerapkan ulang penamaan tersebut.
NOTE: urutkan source_patterns sehingga pola yang tidak ada di checkpoint yang sudah dikonversi
berada di awal. State dict diiterasi dalam urutan kunci yang terurut, sehingga pola penjaga harus
lebih kecil secara leksikografis daripada pola-pola yang bergantung. Jika tidak, pola-pola yang bergantung akan
dilewati pada iterasi pertama dan tidak akan pernah dicoba lagi.
WeightConverter
kelas transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
Operasi konversi
Kelas dasar untuk operasi konversi bobot.
Pisahkan tensor di sepanjang dim menjadi potongan-potongan berukuran sama. Selain itu, num_shards_attribute adalah field konfigurasi yang dibaca untuk mengetahui berapa banyak tensor yang akan dipotong. Berguna saat menggabungkan sejumlah tensor yang tidak ditentukan.
Concatenate tensor sepanjang dim. Selain itu, jika menggabungkan sejumlah tensor yang arbitrer, num_shards_attribute adalah
field konfigurasi yang dibaca untuk mengetahui berapa banyak tensor yang harus dibuat ulang saat menggunakan Ops yang berlawanan.
Menggabungkan daftar tensor menjadi satu tensor tunggal di sepanjang dimensi pertama. Kami mendefinisikan ini secara eksplisit karena untuk EP atau TP Anda perlu memastikan bahwa Anda tahu apa yang sedang Anda lakukan!
Kebalikan dari MergeModulelist menggunakan ukuran split eksplisit per grup.
kelas transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
Menerapkan permutasi yang diperlukan untuk mengubah bobot RoPE kompleks ke format sin/cos terpisah.
kelas transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
Menerapkan permutasi yang diperlukan untuk mengubah bobot RoPE kompleks ke format sin/cos terpisah pada QKV yang digabungkan.
Sama seperti memanggil PermuteForRope() + Concatenate() tetapi memungkinkan kami memanggil Permute hanya pada subset tensor yang dipecah.
CATATAN: konversi ini hanya berlaku untuk tulang punggung visual dalam model multimodal, karena memeriksa config.vision_config
kelas transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
Menerapkan permutasi yang diperlukan untuk mengubah bobot RoPE kompleks ke format sin/cos terpisah pada QKV yang digabungkan.
Sama seperti memanggil Chunk() + PermuteForRope() tetapi memungkinkan kami memanggil Permute hanya pada subset tensor yang di-chunk.
CATATAN: konversi ini hanya berlaku untuk tulang punggung visual dalam model multimodal, karena memeriksa config.vision_config
Lapisan
Kelas dasar untuk lapisan dengan checkpointing gradien.
Kelas ini memungkinkan fungsionalitas gradient checkpointing untuk sebuah layer. Secara default, gradient checkpointing dinonaktifkan
(gradient_checkpointing = False). Ketika model.set_gradient_checkpointing() dipanggil, gradient checkpointing
diaktifkan dengan mengatur gradient_checkpointing = True dan menetapkan fungsi checkpointing ke _gradient_checkpointing_func.
Penting:
Saat menggunakan gradient checkpointing dengan use_reentrant=True, input yang memerlukan gradien (misalnya hidden states)
harus diteruskan sebagai argumen posisional (*args) alih-alih argumen kata kunci agar gradien dapat dipropagasikan dengan benar.
Fungsi Atensi
Objek seperti dict yang melacak fungsi-fungsi attention yang diizinkan. Anda dapat dengan mudah menambahkan fungsi attention baru dengan memanggil register(). Jika sebuah model perlu menimpa fungsi attention yang sudah ada secara lokal, misalnya sdpa, model tersebut perlu mendeklarasikan instance baru dari kelas ini di dalam modeling_<model>.py, dan mendeklarasikannya pada instance tersebut.
Fungsi Mask Perhatian
Fungsi Penyematan Posisi Rotary
transformers.dynamic_rope_update
< source >( rope_forward )
Fungsi dekorator untuk memperbarui parameter RoPE pada jalur maju, jika model menggunakan RoPE dinamis (yaitu implementasi RoPE yang dapat menghitung ulang frekuensinya pada jalur maju).
Modul kustom Pytorch
kelas transformers.Conv1D
< source >( nfnx )
Lapisan konvolusi 1D yang didefinisikan oleh Radford et al. untuk OpenAI GPT (dan juga digunakan dalam GPT-2).
Pada dasarnya bekerja seperti lapisan linear tetapi bobotnya ditranspos.
Fungsi Helper PyTorch
transformers.apply_chunking_to_forward
< source >( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor
Parameter
- forward_fn (
Callable[..., torch.Tensor]) — Fungsi forward dari model. - chunk_size (
int) — Ukuran chunk dari tensor yang di-chunk:num_chunks = len(input_tensors[0]) / chunk_size. - chunk_dim (
int) — Dimensi di manainput_tensorsharus dipecah. - input_tensors (
tuple[torch.Tensor]) — Tensor input dariforward_fnyang akan dipecah
Mengembalikan
torch.Tensor
Tensor dengan bentuk yang sama seperti yang akan diberikan oleh forward_fn jika diterapkan`.
Fungsi ini memecah input_tensors menjadi bagian tensor input yang lebih kecil dengan ukuran chunk_size pada dimensi chunk_dim. Kemudian, fungsi ini menerapkan lapisan forward_fn pada setiap chunk secara independen untuk menghemat memori.
Jika forward_fn independen di sepanjang chunk_dim, fungsi ini akan menghasilkan hasil yang sama dengan menerapkan forward_fn secara langsung pada input_tensors.
Contoh:
# 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
Parameter
- layer (
torch.nn.Linear) — Lapisan yang akan dipangkas. - index (
torch.LongTensor) — Indeks yang akan dipertahankan di lapisan. - dim (
int, opsional, default 0) — Dimensi yang digunakan untuk mempertahankan indeks.
Mengembalikan
torch.nn.Linear
Lapisan yang dipangkas sebagai lapisan baru dengan requires_grad=True.
Prune lapisan linear untuk hanya mempertahankan entri di index.
Digunakan untuk menghapus kepala.