Transformers documentation
Membuat docstring secara otomatis
Membuat docstring secara otomatis
Decorator @auto_docstring menghasilkan docstring yang konsisten untuk kelas dan metode model. Deskripsi argumen standar ditarik secara otomatis, sehingga Anda hanya perlu menulis dokumentasi untuk argumen baru atau kustom. Saat menambahkan model baru, lewati bagian boilerplate dan fokus pada hal-hal yang baru.
@auto_docstring
Impor dekorator di file modular_model.py Anda (atau modeling_model.py untuk model yang lebih lama).
from ...utils import auto_docstringJika model Anda mewarisi model dari pustaka lain dalam file modular, @auto_docstring sudah diterapkan di induknya. make fix-repo menyalinnya ke file modeling_model.py yang dihasilkan untuk Anda. Terapkan dekorator secara eksplisit hanya untuk menyesuaikan perilakunya (model mandiri, intro kustom, atau argumen yang ditimpa).
Saat menimpa dekorator apa pun dalam file modular, sertakan semua dekorator dari fungsi atau kelas induk. Jika Anda hanya menimpa sebagian, sisanya tidak akan muncul dalam file modeling yang dihasilkan.
Decorator menerima argumen opsional berikut:
| argument | deskripsi |
|---|---|
custom_intro | Deskripsi kelas atau metode, disisipkan sebelum bagian Args. Wajib untuk kelas yang tidak diakhiri dengan awalan yang dikenali seperti ForCausalLM atau ForTokenClassification. |
custom_args | Teks docstring untuk parameter tertentu. Berguna ketika argumen kustom yang sama muncul di beberapa tempat dalam file pemodelan. |
checkpoint | Identifikasi checkpoint model ("org/my-model") yang digunakan untuk menghasilkan contoh penggunaan. Menimpa checkpoint yang disimpulkan secara otomatis dari kelas konfigurasi. Biasanya diset pada kelas konfigurasi. |
Penggunaan
Cara kerja @auto_docstring bergantung pada apa yang Anda dekorasi. Kelas model mengambil dokumentasi parameter dari __init__, kelas config mengambil dari anotasi tingkat kelas, kelas processor menghasilkan intros secara otomatis dari komponen-komponennya, dan metode seperti forward mendapatkan tipe pengembalian serta contoh penggunaan.
Kelas model
Letakkan @auto_docstring tepat di atas definisi kelas. Dekorator ini menurunkan deskripsi parameter dari tanda tangan dan docstring metode __init__.
from transformers.modeling_utils import PreTrainedModel
from ...utils import auto_docstring
@auto_docstring
class MyAwesomeModel(PreTrainedModel):
def __init__(self, config, custom_parameter: int = 10, another_custom_arg: str = "default"):
r"""
custom_parameter (`int`, *optional*, defaults to 10):
Description of the custom_parameter for MyAwesomeModel.
another_custom_arg (`str`, *optional*, defaults to "default"):
Documentation for another unique argument.
"""
super().__init__(config)
self.custom_parameter = custom_parameter
self.another_custom_arg = another_custom_arg
# ... rest of your init
# ... other methodsLewati custom_intro dan custom_args untuk kontrol lebih lanjut. Argumen kustom dapat diletakkan di custom_args atau di docstring __init__. Gunakan custom_args ketika argumen yang sama berulang di beberapa metode.
@auto_docstring(
custom_intro="""This model performs specific synergistic operations.
It builds upon the standard Transformer architecture with unique modifications.""",
custom_args="""
custom_parameter (`type`, *optional*, defaults to `default_value`):
A concise description for custom_parameter if not defined or overriding the description in `auto_docstring.py`.
internal_helper_arg (`type`, *optional*, defaults to `default_value`):
A concise description for internal_helper_arg if not defined or overriding the description in `auto_docstring.py`.
"""
)
class MySpecialModel(PreTrainedModel):
def __init__(self, config: ConfigType, custom_parameter: "type" = "default_value", internal_helper_arg=None):
# ...Terapkan juga @auto_docstring pada kelas yang mewarisi dari ModelOutput.
@auto_docstring(
custom_intro="""
Custom model outputs with additional fields.
"""
)
@dataclass
class MyModelOutput(ImageClassifierOutput):
r"""
loss (`torch.Tensor`, *optional*):
The loss of the model.
custom_field (`torch.Tensor` of shape `(batch_size, hidden_size)`, *optional*):
A custom output field specific to this model.
"""
# Standard fields (hidden_states, logits, attentions, etc.) are documented automatically when
# the description matches the standard text. Loss typically varies per model, so document it above.
loss: Optional[torch.Tensor] = None
logits: Optional[torch.Tensor] = None
hidden_states: Optional[tuple[torch.Tensor, ...]] = None
attentions: Optional[tuple[torch.Tensor, ...]] = None
# Custom fields need to be documented in the docstring above
custom_field: Optional[torch.Tensor] = NoneKelas konfigurasi
Letakkan @auto_docstring tepat di atas subclass PreTrainedConfig, berdampingan dengan dekorator @strict. @strict menambahkan validasi tipe pada runtime dan mengubah kelas menjadi dataclass yang tervalidasi. Parameter config adalah annotasi tingkat kelas (bukan argumen __init__), dan @auto_docstring membacanya dari badan kelas untuk menghasilkan dokumentasi.
ConfigArgs menyediakan parameter standar seperti vocab_size, hidden_size, dan num_hidden_layers, sehingga tidak memerlukan deskripsi kecuali perilakunya berbeda. Parameter dasar PreTrainedConfig dikecualikan secara otomatis. Argumen checkpoint menghasilkan contoh penggunaan.
from huggingface_hub.dataclasses import strict
from ...configuration_utils import PreTrainedConfig
from ...utils import auto_docstring
@strict
@auto_docstring(checkpoint="org/my-model-checkpoint")
class MyModelConfig(PreTrainedConfig):
r"""
custom_param (`int`, *optional*, defaults to 64):
Description of a parameter specific to this model.
another_param (`str`, *optional*, defaults to `"gelu"`):
Description of another model-specific parameter.
```python
from transformers import MyModelConfig, MyModel
configuration = MyModelConfig()
model = MyModel(configuration)
configuration = model.config
```
"""
model_type = "my_model"
# Standard params (vocab_size, hidden_size, etc.) are auto-documented from ConfigArgs.
vocab_size: int = 32000
hidden_size: int = 768
num_hidden_layers: int = 12
# Model-specific params must be documented in the class docstring above.
custom_param: int = 64
another_param: str = "gelu"Kelas Processor
Pemroses multimodal (subkelas ProcessorMixin, processing_*.py) selalu menggunakan @auto_docstring polos. Pengantar kelas dibuat secara otomatis. Dokumentasikan hanya parameter __init__ yang belum tercakup oleh ProcessorArgs (image_processor, tokenizer, chat_template, dan lainnya).
Jika semua parameter bersifat standar, abaikan docstring. Hiasi __call__ dengan @auto_docstring juga. Docstring di dalam body-nya hanya berisi bagian Returns: ditambah argumen panggilan khusus model lainnya. return_tensors ditambahkan secara otomatis.
from ...processing_utils import ProcessorMixin, ProcessingKwargs, Unpack
from ...utils import auto_docstring
class MyModelProcessorKwargs(ProcessingKwargs, total=False):
"""
custom_call_kwarg (`bool`, *optional*, defaults to `False`):
A parameter with a default that can passed to __call__ which is not
covered by the standard processor arguments (including each modality).
"""
custom_call_kwarg: bool
@auto_docstring
class MyModelProcessor(ProcessorMixin):
valid_processor_kwargs = MyModelProcessorKwargs
custom_call_kwarg = False
def __init__(self, image_processor=None, tokenizer=None, custom_param: int = 4, **kwargs):
r"""
custom_param (`int`, *optional*, defaults to 4):
A parameter specific to this processor not covered by the standard ProcessorArgs.
"""
super().__init__(image_processor, tokenizer)
self.custom_param = custom_param
@auto_docstring
def __call__(self, images=None, text=None, **kwargs: Unpack[MyModelProcessorKwargs]):
r"""
Returns:
[BatchFeature](/docs/transformers/main/en/main_classes/feature_extractor#transformers.BatchFeature): A [BatchFeature](/docs/transformers/main/en/main_classes/feature_extractor#transformers.BatchFeature) with the following fields:
- **input_ids** -- Token ids to be fed to the model.
- **pixel_values** -- Pixel values to be fed to the model.
"""
# ...Pemroses gambar dan video
Pemroses gambar dan video (subkelas BaseImageProcessor, image_processing_*.py) mengikuti salah satu dari dua pola.
Jika prosesor memiliki parameter yang spesifik untuk model, definisikan TypedDict XxxImageProcessorKwargs(ImagesKwargs, total=False) dengan docstring untuk parameter tersebut, atur valid_kwargs pada kelas, dan gunakan @auto_docstring polos. __init__ tidak memiliki docstring.
class MyModelImageProcessorKwargs(ImagesKwargs, total=False):
r"""
custom_threshold (`float`, *optional*, defaults to `self.custom_threshold`):
A parameter specific to this image processor.
"""
custom_threshold: float | None
@auto_docstring
class MyModelImageProcessor(TorchvisionBackend):
valid_kwargs = MyModelImageProcessorKwargs
custom_threshold: float = 0.5
def __init__(self, **kwargs: Unpack[MyModelImageProcessorKwargs]):
super().__init__(**kwargs)Jika kelas hanya mengatur atribut tingkat kelas standar (size, resample, image_mean, dll.) tanpa kwargs kustom, gunakan @auto_docstring(custom_intro="Constructs a MyModel image processor.") sebagai gantinya.
@auto_docstring(custom_intro="Constructs a MyModel image processor.")
class MyModelImageProcessor(TorchvisionBackend):
resample = PILImageResampling.BICUBIC
image_mean = IMAGENET_STANDARD_MEAN
image_std = IMAGENET_STANDARD_STD
size = {"height": 224, "width": 224}Saat menimpa preprocess, hiasi dengan @auto_docstring dan dokumentasikan hanya argumen yang tidak ada di ImageProcessorArgs. Argumen standar dan return_tensors disertakan secara otomatis.
Fungsi
Letakkan @auto_docstring tepat di atas definisi fungsi. Dekorator ini menurunkan deskripsi parameter dari tanda tangan fungsi.
Decorator menghasilkan teks nilai pengembalian dari docstring kelas ModelOutput.
class MyModel(PreTrainedModel):
# ...
@auto_docstring
def forward(
self,
input_ids: Optional[torch.Tensor] = None,
attention_mask: Optional[torch.Tensor] = None,
new_custom_argument: Optional[torch.Tensor] = None,
# ... other arguments
) -> Union[Tuple, ModelOutput]:
r"""
new_custom_argument (`torch.Tensor`, *optional*):
Description of this new custom argument and its expected shape or type.
"""
# ...Lewati custom_intro dan custom_args untuk kontrol lebih lanjut. Gunakan custom_args untuk mendokumentasikan argumen bersama sekali ketika parameter yang sama muncul di beberapa metode.
MODEL_COMMON_CUSTOM_ARGS = r"""
common_arg_1 (`torch.Tensor`, *optional*, defaults to `default_value`):
Description of common_arg_1
common_arg_2 (`torch.Tensor`, *optional*, defaults to `default_value`):
Description of common_arg_2
"""
class MyModel(PreTrainedModel):
# ...
@auto_docstring(
custom_intro="""This is a custom introduction for the function.""",
custom_args=MODEL_COMMON_CUSTOM_ARGS
)
def forward(self, input_ids=None, common_arg_1=None, common_arg_2=None) -> ModelOutput:
r"""method-specific args go here"""
# ...Tulis bagian Returns dan Examples secara manual di docstring untuk menimpa versi yang dibuat otomatis.
def forward(self, input_ids=None) -> torch.Tensor:
r"""
Returns:
`torch.Tensor`: A custom Returns section for non-ModelOutput return types.
Example:
```python
model = MyModel.from_pretrained("org/my-model")
output = model(input_ids)
```
"""
# ...Mendokumentasikan argumen
Ikuti aturan ini saat mendokumentasikan berbagai jenis argumen.
auto_docstring.pymendefinisikan argumen standar (input_ids,attention_mask,pixel_values, dll.) dan menyertakannya secara otomatis. Jangan mendefinisikannya ulang secara lokal kecuali argumen tersebut berperilaku berbeda di model Anda.Jika argumen standar berperilaku berbeda di model Anda, timpa secara lokal di dalam blok
r""" """. Definisi lokal memiliki prioritas. Argumenlabels, misalnya, sering dikustomisasi per model dan biasanya memerlukan penimpaan.Argumen konfigurasi standar (
vocab_size,hidden_size,num_hidden_layers, dll.) mengikuti prinsip yang sama tetapi berasal dariConfigArgs. Argumen prosesor standar (image_processor,tokenizer,do_resize,return_tensors, dll.) berasal dariProcessorArgsdanImageProcessorArgs. Hanya dokumentasikan parameter jika bersifat spesifik model atau berperilaku berbeda dari deskripsi standar.Dokumentasikan argumen baru atau kustom dalam blok
r""" """. Letakkan setelah tanda tangan untuk fungsi, dalam docstring__init__untuk kelas model atau prosesor, dalam docstring badan kelas untuk kelas konfigurasi, atau dalam badan TypedDictXxxImageProcessorKwargsuntuk prosesor gambar.argument_name (`type`, *optional*, defaults to `X`): Description of the argument. Explain its purpose, expected shape/type if complex, and default behavior. This can span multiple lines.- Sertakan
typedalam backticks. - Tambahkan opsional jika argumen tidak wajib atau memiliki nilai default.
- Tambahkan “defaultnya X” jika memiliki nilai default. Anda tidak perlu menambahkan “defaultnya
None” jika nilai defaultnya adalahNone. - Lewatkan blok yang sama ke
custom_argsketika argumen yang sama berulang di beberapa metode (lihat contoh Fungsi di atas).
- Sertakan
Decorator mengekstrak tipe dari tanda tangan fungsi secara otomatis. Jika sebuah parameter memiliki anotasi tipe, Anda tidak perlu mengulang tipe tersebut dalam string format docstring. Ketika keduanya hadir, tipe dari tanda tangan memiliki prioritas. Tipe dari docstring berfungsi sebagai cadangan untuk parameter yang tidak dianotasi.
Mengecek docstring
Skrip utilitas memvalidasi docstring saat Anda membuka pull request. CI menjalankan skrip tersebut dan memeriksa hal-hal berikut.
Jika Anda melihat
[ERROR]dalam output, tambahkan deskripsi parameter ke docstring atau kelas Args yang sesuai diauto_docstring.py.
- Memeriksa bahwa
@auto_docstringditerapkan pada kelas model dan metode publik yang relevan. - Memvalidasi kelengkapan dan konsistensi argumen: argumen yang terdokumentasi harus ada dalam tanda tangan, dan tipe serta nilai default harus cocok. Argumen yang tidak dikenal tanpa deskripsi lokal ditandai.
- Menandai placeholder yang tidak lengkap seperti
<fill_type>dan<fill_docstring>. - Memverifikasi bahwa docstring mengikuti gaya format yang diharapkan.
Jalankan pemeriksaan secara lokal sebelum melakukan commit.
make fix-repo
make fix-repo juga menjalankan beberapa pemeriksaan lain. Untuk hanya menjalankan pemeriksaan docstring dan auto-docstring, gunakan perintah di bawah ini.
# to only check files included in the diff without fixing them
python utils/check_docstrings.py
# to fix and overwrite the files in the diff
# python utils/check_docstrings.py --fix_and_overwrite
# to fix and overwrite all files
# python utils/check_docstrings.py --fix_and_overwrite --check_allDaftar periksa referensi cepat
| Lakukan | Jangan |
|---|---|
Terapkan @auto_docstring pada kelas model, config, dan processor serta metode utama mereka (forward, __call__, preprocess). | Tambahkan @auto_docstring ke model yang diwarisi dalam file modular karena atribut ini diturunkan secara otomatis. |
| Dokumentasikan hanya argumen baru atau argumen yang spesifik untuk model. | Definisikan ulang argumen standar (input_ids, attention_mask, vocab_size, dll.) yang berperilaku sama dengan deskripsi default-nya. |
| Letakkan parameter config dalam docstring badan kelas sebagai anotasi tingkat kelas. | Letakkan parameter config di __init__. |
Letakkan parameter pemroses gambar dalam TypedDict XxxImageProcessorKwargs. | Letakkan parameter image processor di __init__. |
Jalankan python utils/check_docstrings.py --fix_and_overwrite sebelum melakukan commit. | Abaikan output [ERROR] karena itu berarti sebuah parameter tidak terdokumentasi. |
Cara kerjanya
Dekorator @auto_docstring menghasilkan docstring melalui langkah-langkah berikut.
Decorator memeriksa signature untuk membaca argumen, tipe, dan nilai default dari
__init__kelas yang didekorasi atau fungsi yang didekorasi. Untuk kelas config, decorator menelusuri anotasi level kelas di sepanjang rantai warisan dan berhenti sebelum PreTrainedConfig, sehingga mengecualikan field dari kelas dasar.Secara otomatis, parameter seperti
self,kwargs,args,deprecated_arguments, dan nama dengan awalan_akan disaring. Beberapa parameter privat diganti namanya menjadi padanan publiknya (_out_features→out_featuresuntuk model backbone).Deskripsi argumen umum berasal dari
auto_docstring.py:ModelArgs(input model),ModelOutputArgs(field output sepertihidden_states),ImageProcessorArgs(pra-pemrosesan gambar),ProcessorArgs(komponen pemroses multimodal), danConfigArgs(hiperparameter konfigurasi).Deskripsi setiap parameter mengikuti rantai prioritas berikut:
- Docstring manual (
r""" """blok ataucustom_args) memiliki prioritas lebih tinggi. - Dict sumber yang predefined (
ModelArgs,ModelForArgs,ConfigArgs,ImageProcessorArgs,ProcessorArgs,ModelOutputArgs) adalah fallback. - Jika kedua sumber tidak memiliki deskripsi, parameter ditandai dengan
[ERROR]dalam output build.
- Docstring manual (
Untuk kelas model dengan nama standar seperti
ModelForCausalLM, atau kelas yang dipetakan ke sebuah pipeline,@auto_docstringmenghasilkan bagian pengantar. Untuk pemroses multimodal, bagian pengantar mencantumkan komponen mana (tokenizer, image processor, dan sebagainya) yang dibungkus oleh kelas tersebut. Lihat ClassDocstring untuk daftar lengkapnya.Jika nama kelas tidak ada di
ClassDocstring, aturcustom_intro.Docstring yang sudah didefinisikan dapat merujuk ke nilai dinamis dari auto_modules Transformers, seperti
{processor_class},{image_processor_class}, dan{config_class}. Placeholder akan teresolusi secara otomatis.Decorator memilih contoh penggunaan berdasarkan tugas atau kompatibilitas pipeline model. Ia membaca metadata checkpoint dari kelas konfigurasi sehingga contoh menggunakan ID model yang sebenarnya. Argumen
checkpointmenimpa checkpoint yang disimpulkan dari docstring kelas konfigurasi. Tetapkancheckpointpada kelas konfigurasi, atau ketika penarikan kesimpulan checkpoint gagal. Jika Anda melihat error seperti"Config not found for <model_name>", tambahkan entri keHARDCODED_CONFIG_FOR_MODELSdiauto_docstring.py.Untuk metode seperti
forward, dekorator menulis bagianReturnsdari tipe pengembalian metode. Ketika tipe pengembaliannya adalah subkelas ModelOutput,@auto_docstringmengambil deskripsi field dari docstring kelas tersebut. BlokReturnskustom dalam docstring fungsi memiliki prioritas lebih tinggi.Untuk metode dalam
UNROLL_KWARGS_METHODSdan kelas dalamUNROLL_KWARGS_CLASSES, dekorator mengembang**kwargsyang bertipeUnpack[KwargsTypedDict]. Setiap kunci dariTypedDictmenjadi parameter yang terdokumentasi.Ekspansi yang sama berlaku untuk metode
__call__danpreprocesspada subclass BaseImageProcessor dan ProcessorMixin. Tipe basis generik (TextKwargs,ImagesKwargs,VideosKwargs,AudioKwargs) dilewati. Hanya subclass yang spesifik untuk model yang diurai.