Transformers documentation

Model testleri yazma

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Model testleri yazma

Transformers test paketi, minimal koddan 100'den fazla testi otomatik olarak oluşturmak için mixin tabanlı bir mimari kullanır. Modelle ilgili küçük miktarda kod yazar, save/load, generation, pipelines, training ve tensor parallelism işlemlerini ise mixin'ler üstlenir.

Modelinizin testlerini aşağıdaki komutlarla çalıştırın.

# run your model's tests
pytest tests/models/mymodel/test_modeling_mymodel.py -v

# run a specific test
pytest tests/models/mymodel/test_modeling_mymodel.py::MyModelTest::test_model

# run tests matching a keyword pattern (useful to run all integration tests)
pytest tests/models/mymodel/ -k integration -v

# include slow integration tests
RUN_SLOW=1 pytest tests/models/mymodel/ -v

Hugging Face CI, her pull request'te @slow olmadan model testlerini çalıştırır ve yavaş testler günlük bir zamanlamayla çalıştırılır (CI'ın neyi doğruladığı hakkında bkz. Pull request kontrolleri).

Bir temel test sınıfı seçin

Üç temel sınıf, en yaygın model ailelerini kapsar. Modelinizin modalitesine uygun olanı seçin.

Temel sınıfKullanım alanıMixin'ler
CausalLMModelTestNedensel dil modelleriModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, TrainingTesterMixin, TensorParallelTesterMixin
VLMModelTestGörüntü-dil modelleriModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
ALMModelTestSes-dil modelleriModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin

VLMModelTest ve ALMModelTest, alt yapılandırmaları bileşik üst düzey bir yapılandırmada iç içe geçiren ve modallık yer tutucu jetonlarını input_ids içinde ham modallık özelliklerinin (ses veya görüntü) yanına yerleştiren ortak bir MultiModalModelTest üst sınıfını paylaşır. CausalLMModelTest çok modallı üst sınıfı kullanmaz. Üç ortak karışım sınıfının üzerine inşa edilir ve eğitim ile tensör paralel kapsamı için TrainingTesterMixin ve TensorParallelTesterMixin ekler.

Üçünden (yalnızca kodlayıcı, kodlayıcı-çözücü vb.) hiçbirine uymayan mimariler için, aşağıda açıklanan iki sınıflı kalıbı ve test karışımlarını kullanarak test altyapısını doğrudan oluşturun.

CausalLMModelTest

CausalLMModelTest, nedensel dil modellerini test etmek için önerilen temel sınıftır. Beş test karışımından (mixin) devralır ve kaydet/yükleme, üretim, boru hatları, eğitim ve gergilik paralelliği (tensor parallelism) için testleri otomatik olarak oluşturur.

import unittest

from transformers.testing_utils import require_torch
from transformers import is_torch_available

from ...causal_lm_tester import CausalLMModelTest, CausalLMModelTester

if is_torch_available():
    from transformers import MyModel


class MyModelTester(CausalLMModelTester):
    if is_torch_available():
        base_model_class = MyModel


@require_torch
class MyModelTest(CausalLMModelTest, unittest.TestCase):
    model_tester_class = MyModelTester

Bu iki sınıf, MyModel ve tüm başlık sınıfları (MyModelForCausalLM, MyModelForSequenceClassification vb.) için tam test kapsamı sağlar. Gerçek bir örnek için tests/models/llama/test_modeling_llama.py dosyasına bakın.

CausalLMModelTester yalnızca base_model_class parametresini gerektirir. Tester, Model son ekini kaldırarak temel bir ad alır (LlamaModel Llama olur), ardından ilgili sınıfları bulmak için Config veya ForCausalLM gibi son ekleri ekler. Bir sınıf modülde mevcut değilse, ilgili öznitelik None olarak kalır ve tester ilgili testleri atlar.

CausalLMTester'de varsayılanların geçersiz kılınması

Modeliniz standart adlandırma kurallarına uymuyorsa veya davranışı özelleştirmeniz gerekiyorsa, tester veya test sınıfındaki öznitelikleri geçersiz kılın.

class MyModelTester(CausalLMModelTester):
    if is_torch_available():
        base_model_class = MyModel
        # override if the class name doesn't follow the convention
        causal_lm_class = MyCustomCausalLM


@require_torch
class MyModelTest(CausalLMModelTest, unittest.TestCase):
    model_tester_class = MyModelTester
    # disable embedding resize tests
    test_resize_embeddings = False

Tester'de özel constructor parametreleri gerektiren modeller için __init__ metodunu geçersiz kılın ve ek öznitelikleri ayarlamadan önce super().__init__(parent=parent) çağrısını yapın. Gerçek bir örnek için tests/models/youtu/test_modeling_youtu.py dosyasına bakın.

class YoutuModelTester(CausalLMModelTester):
    if is_torch_available():
        base_model_class = YoutuModel

    def __init__(self, parent, kv_lora_rank=16, q_lora_rank=32):
        super().__init__(parent=parent)
        self.kv_lora_rank = kv_lora_rank
        self.q_lora_rank = q_lora_rank

VLMModelTest

VLMModelTest, görme-dil modelleri için temel sınıftır. Üç karışım sınıfından (ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin) devralır ve birden fazla alt modeli işlemek için _is_composite = True değerini ayarlar.

import unittest

from transformers.testing_utils import require_torch
from transformers import is_torch_available

from ...vlm_tester import VLMModelTest, VLMModelTester

if is_torch_available():
    from transformers import (
        MyVLMConfig,
        MyVLMModel,
        MyVLMTextConfig,
        MyVLMVisionConfig,
        MyVLMForConditionalGeneration,
    )


class MyVLMTester(VLMModelTester):
    if is_torch_available():
        base_model_class = MyVLMModel
        config_class = MyVLMConfig
        text_config_class = MyVLMTextConfig
        vision_config_class = MyVLMVisionConfig
        conditional_generation_class = MyVLMForConditionalGeneration


@require_torch
class MyVLMTest(VLMModelTest, unittest.TestCase):
    model_tester_class = MyVLMTester

VLMModelTester'de varsayılanların geçersiz kılınması

VLM özel görme parametreleri veya varsayılan olmayan yapılandırma değerleri gerektirdiğinde __init__ metodunu geçersiz kılın. super().__init__(parent, **kwargs) çağrısından önce setdefault ile varsayılanları ayarlayın. Aşağıdaki örnek, tests/models/qianfan_ocr/test_modeling_qianfan_ocr.py dosyasındaki ilk birkaç varsayılan değeri göstermektedir.

class QianfanOCRVisionText2TextModelTester(VLMModelTester):
    base_model_class = QianfanOCRModel
    config_class = QianfanOCRConfig
    text_config_class = Qwen3Config
    vision_config_class = QianfanOCRVisionConfig
    conditional_generation_class = QianfanOCRForConditionalGeneration

    def __init__(self, parent, **kwargs):
        kwargs.setdefault("image_token_id", 1)
        kwargs.setdefault("image_size", 32)
        kwargs.setdefault("patch_size", 4)
        kwargs.setdefault("num_channels", 3)
        # ... more defaults
        super().__init__(parent, **kwargs)

VLM testleri, CausalLMModelTest'ten birkaç açıdan farklıdır.

  • Test edicide config_class, text_config_class, vision_config_class ve conditional_generation_class değerlerini belirlemelisiniz.
  • VLMModelTest, TrainingTesterMixin veya TensorParallelTesterMixin içermez.
  • Testçinin __init__ metodu, **kwargs ve setdefault() üzerinden görüntü parametrelerini (image_size, patch_size, num_channels, num_image_tokens) kabul eder.
  • ConfigTester, üst düzey yapılandırmanın bir metin modeli yapılandırması değil, bileşik bir yapılandırma olması nedeniyle has_text_modality=False kullanır.

ALMModelTest

ALMModelTest, Qwen2Audio, AudioFlamingo3 ve GraniteSpeech gibi ses-dil modellerinin (ALM) temel sınıfıdır. MultiModalModelTest ebeveyn sınıfını ve head sınıflarının otomatik keşfini içeren VLM desenini yansıtır. Görüntü tarafındaki mekanizma, ses özellikleri, bir ses alt yapılandırması ve bir ses-jetonu yerleştirme stratejisi ile değiştirilmiştir.

class MyALMTester(ALMModelTester):
    config_class = MyALMConfig
    text_config_class = MyALMTextConfig
    audio_config_class = MyALMAudioConfig
    conditional_generation_class = MyALMForConditionalGeneration
    audio_mask_key = "feature_attention_mask"


class MyALMTest(ALMModelTest, unittest.TestCase):
    model_tester_class = MyALMTester

ALMModelTester'de varsayılan değerlerin geçersiz kılınması

Testçinin __init__ metodu, ALM'ye özgü varsayılanları (feat_seq_length=128, num_mel_bins=80, audio_token_id=0) ayarlar. super().__init__(parent, **kwargs) çağrısından önce bunları setdefault ile geçersiz kılın.

İki sınıf özelliği, testçinin modelinizin nesneleri nasıl adlandırdığını bilmesini sağlar.

  • audio_mask_key: modelinizin ses maskesi için beklediği kwarg adı ("feature_attention_mask", "input_features_mask" vb.). Modeliniz ayrı bir ses maskesi kullanmıyorsa None olarak bırakın.
  • audio_config_key: üst düzey yapılandırmanızın ses alt yapılandırmasını iç içe geçirmek için kullandığı öznitelik adı. Varsayılan olarak "audio_config" kullanılır ancak GraniteSpeech gibi modeller "encoder_config" kullanır.
class Qwen2AudioModelTester(ALMModelTester):
    def __init__(self, parent, **kwargs):
        kwargs.setdefault("feat_seq_length", 60)
        kwargs.setdefault("max_source_positions", kwargs["feat_seq_length"] // 2)
        super().__init__(parent, **kwargs)

ALMModelTester, get_audio_embeds_mask(audio_mask) adlı tek bir hook'un yeniden tanımlanmasını gerektirir ve özelleştirme için birkaç ek isteğe bağlı hook sunar.

  • get_audio_embeds_mask(audio_mask): kodlayıcının indirgeme işleminden sonra ses gömme konumlarının parti başına maskesini döndürür. Testçi, input_ids içine kaç adet audio_token_id yer tutucusu ekleyeceğine karar vermek için satır bazlı toplamını kullanır; bu nedenle sayı, kodlayıcınızın ürettiği değerle eşleşmelidir.
  • create_audio_features(): ses özellik tensörünü döndürür. Varsayılan şekil [batch_size, num_mel_bins, feat_seq_length]'dir. Modeliniz, GraniteSpeech gibi, zaman-öncelikli özellikler ([batch_size, feat_seq_length, num_mel_bins]) bekliyorsa bu yöntemi geçersiz kılın.
  • create_audio_mask(): ses düzeyi dikkat maskesini döndürür. Varsayılan davranış, batch içindeki her satır için rastgele, ardışık geçerli bir bölge oluşturur. Testleriniz iki prepare_config_and_inputs_for_common() çağrısını birbirine karşılaştırıyorsa veya ses kodlayıcınız null olmayan maskeleri reddeden bir arka uca yönlendiriliyorsa, deterministik bir tam uzunluklu maske ile geçersiz kılın.
  • place_audio_tokens(input_ids, config, num_audio_tokens): ses yer tutucu jetonlarını BOS sonrasında ardışık olarak yerleştirir. Modeliniz farklı bir yerleşim gerektiriyorsa yalnızca bu durumu geçersiz kılın.
  • get_audio_feature_key(): ses özellikleri için girdi sözlüğü anahtarını döndürür (varsayılan olarak "input_features").

Miras alınan çok modlu testlerin yanı sıra, ALMModelTest test_mismatching_num_audio_tokens testini ekler. Bu test, input_ids içindeki ses yer tutucu token sayısıyla ses özelliklerinin sayısı eşleşmediğinde modelin açık bir ValueError fırlattığını doğrular ve birden fazla ses segmenti içeren bir istemin (prompt) yine de başarıyla ileri yönlendirildiğini (forward) kontrol eder.

Diğer mimariler için testler yazın

Sadece kodlayıcı, kodlayıcı-çözücü, ses veya diğer standart dışı mimariler için, aşağıda açıklanan iki sınıflı desen ve test karışımlarından (test mixins) doğrudan test altyapısını oluşturun.

ModelTester ve ModelTest

Her model test dosyası aynı yapıyı izler.

  1. ModelTester (sadece bir sınıf), testler için küçük yapılandırmalar ve sahte girdiler oluşturur ve modele özgü küçük regresyon testlerini de barındırabilir.
  2. ModelTest (unittest.TestCase + karışımlar), otomatik olarak oluşturulan testleri devralır ve bunları her model varyantına karşı çalıştırır.

ModelTest, test edici üzerinde prepare_config_and_inputs_for_common() çağırarak (config, inputs_dict) demeti alır. Tüm karışımlar, test verileri için prepare_config_and_inputs_for_common() işlevine dayanır.

Test karışımları

Modelinizin ihtiyaç duyduğu karışım sınıflarını seçin.

KarışımKaynak dosyaNe test eder
ModelTesterMixintests/test_modeling_common.pyKaydet/yükle, gradyan denetleme noktası, ileri imzası, ortak öznitelikler
GenerationTesterMixintests/generation/test_utils.pyAçgözlü, örneklemeli, demet aramalı, destekli çözümleme
PipelineTesterMixintests/test_pipeline_mixin.pyHer pipeline görevi için bir test
TrainingTesterMixintests/test_training_mixin.pyKüçük bir partide aşırı uyum
TensorParallelTesterMixintests/test_tensor_parallel_mixin.pyDağıtık tensör paralelliği

Bir model testi yazma

Tamamen çalışan bir örnek için tests/models/modernbert/test_modeling_modernbert.py dosyasına bakın. Ana adımlar aşağıda özetlenmiştir.

  1. ModelTester sınıfı küçük yapılandırmalar ve sahte girdiler oluşturur. Testlerin CPU üzerinde saniyeler içinde tamamlanması için boyutları küçük tutun. Girdileri oluşturmak için aşağıdaki üç tensör yardımcısını kullanın.

    • ids_tensor(shape, vocab_size): [0, vocab_size) aralığında rastgele tamsayı tensörü. input_ids, token_type_ids ve etiket tensörleri için kullanılır.
    • random_attention_mask(shape): İlk token her zaman 1 olan ikili tensör (0 ve 1). attention_mask için kullanılır.
    • floats_tensor(shape, scale=1.0): Rastgele float tensörü. pixel_values veya inputs_embeds gibi sürekli girdiler için kullanılır.

    Test edici, get_config(), prepare_config_and_inputs() ve prepare_config_and_inputs_for_common() yöntemlerini uygulamalıdır. Her görev başı (temel model, dizi sınıflandırma, token sınıflandırma vb.) için create_and_check_* yöntemleri ekleyin.

  2. Modelinizin ihtiyaç duyduğu mixin'lerden devralın, all_model_classes ve pipeline_model_mapping değerlerini belirleyin ve setUp() metodunu tanımlayın. Testçinin create_and_check_* metodlarına devreden test_* metotları yazın.

  3. Her görev başı için, modelin örneklenmesini, ileri geçişin çalıştırılmasını ve çıktı şekillerinin doğrulanmasını sağlayan bir create_and_check_* metodu test ediciye ekleyin. Ardından test sınıfına karşılık gelen bir test_* metodu ekleyin.

Dosya düzeni

Test dosyaları, aşağıda gösterilen yapıya uygun olarak tests/models/mymodel/ içinde yer alır.

tests/models/mymodel/
├── __init__.py
├── test_modeling_mymodel.py            # model tests (required)
├── test_tokenization_mymodel.py        # tokenizer tests (if custom tokenizer)
├── test_image_processing_mymodel.py    # image processor tests (if vision model)
├── test_feature_extraction_mymodel.py  # feature extractor tests (if audio/speech model)
└── test_processing_mymodel.py          # processor tests (if multimodal)

Tokenizer testleri aynı deseni izler. tests/test_tokenization_common.py dosyasından TokenizerTesterMixin sınıfını devralın, birkaç özniteliği ayarlayın ve otomatik oluşturulan testleri alın. Örnek için tests/models/llama/test_tokenization_llama.py dosyasına bakın.

Yapılandırma testleri

ConfigTester, bir config sınıfının seri hale getirme, kaydetme/yükleme ve standart özellikleri doğru şekilde işlediğini doğrular. CausalLMModelTest ve VLMModelTest, config testlerini otomatik olarak içerir. ModelTester ve ModelTest ile genel yol için config tester'ı setUp() içinde manuel olarak tanımlayın.

from tests.test_configuration_common import ConfigTester

def setUp(self):
    self.config_tester = ConfigTester(self, config_class=MyModelConfig, hidden_size=32)

def test_config(self):
    self.config_tester.run_common_tests()

run_common_tests() birkaç kontrol çalıştırır.

  • hidden_size, num_attention_heads ve num_hidden_layers gibi ortak özelliklerin (has_text_modality=True ise vocab_size dahil) mevcut olduğunu kontrol eder.
  • JSON seri­leştirmesini to_json_string() ve to_json_file() ile test eder.
  • save_pretrained() ve from_pretrained() işlemlerini gidip-geliş (round-trip) olarak test eder.
  • id2label ve label2id tutarlılığını doğrular.
  • Varsayılan başlatmayı doğrulamak için hiçbir argüman olmadan bir config oluşturur.
  • output_hidden_states gibi ortak kwargs'ları ayarlar ve bunların doğru şekilde saklandığını doğrular.

vocab_size içermeyen yalnızca görme modelleri için has_text_modality=False parametresini iletin ve yapılandırma varsayılanlarını geçersiz kılmak için ek **kwargs gönderin.

self.config_tester = ConfigTester(
    self, config_class=MyVisionConfig, has_text_modality=False, hidden_size=64
)

Entegrasyon testleri ve küçük modeller

Mixin testleri, model davranışını hızlı bir şekilde doğrulamak için rastgele ağırlıklara sahip küçük yapılandırmalar kullanır. Entegrasyon testleri, çıktı doğruluğunu doğrulamak için gerçek önceden eğitilmiş ağırlıklarla çıkarım (inference) çalıştırır. Hub'daki küçük modeller, hızlı CI için yeterince küçüktür ancak gerçek kontrol noktaları gibi yapılandırılmıştır.

Entegrasyon testleri yazma

Entegrasyon testlerini ayrı bir test sınıfında konumlandırın, @slow ile işaretleyin ve MemoryCleanupMixin karışımını ekleyin. Her test gerçek ağırlıkları indirir, çıkarım çalıştırır ve çıktıları beklenen değerlerle karşılaştırır. Karışım, her testin kullandığı belleği serbest bırakır ve test yöntemlerini torch.no_grad() altında çalıştırır — ne yaptığını ve nasıl devre dışı bırakılacağını görmek için Testler arası bellek serbest bırakma bölümüne bakın.

import torch
from transformers import AutoTokenizer
from transformers.testing_utils import MemoryCleanupMixin, require_torch, slow, torch_device

class MyModelIntegrationTest(MemoryCleanupMixin, unittest.TestCase):
    @slow
    @require_torch
    def test_inference(self):
        model = MyModelForCausalLM.from_pretrained("myorg/mymodel-base").to(torch_device)
        tokenizer = AutoTokenizer.from_pretrained("myorg/mymodel-base")
        inputs = tokenizer("Hello, world", return_tensors="pt").to(torch_device)

        outputs = model(**inputs)

        # check against expected values
        expected_slice = torch.tensor([[-0.1234, 0.5678, -0.9012]])
        torch.testing.assert_close(outputs.logits[0, :1, :3], expected_slice, atol=1e-4, rtol=1e-4)

Ağırlık indiren, büyük bir veri seti yükleyen veya birkaç saniyeden fazla süren herhangi bir testi @slow ile işaretleyin. pull request CI yavaş testleri atlar, ancak günlük planlama bunları çalıştırır.

Testler arasında bellek serbest bırakma

Entegrasyon testleri gerçek checkpoint’leri yüklediğinden, modeline bir referans tutan bir test, ondan sonra çalışan her şeyi OOM’a sokabilir. tests/test_memory_cleanup_mixin.py içindeki MemoryCleanupMixin, bunu tüm sınıf için ele alır:

  • Her testten önce ve sonra artıkların taşınmaması için cleanup(torch_device, gc_collect=True) çalıştırır.
  • Testin self üzerinde (dahil @cached_property önbellekleri) ve sınıf üzerinde (örneğin setUpClass içindeki cls.model = ...) eklediği öznitelikleri siler. Pytest, test örneklerini oturum boyunca canlı tuttuğu için, bu referansların hâlâ tuttuğu nesneleri gc.collect() serbest bırakamaz.
  • İleri geçişin aktivasyonları tutmaması için test yöntemlerini torch.no_grad() altında çalıştırır.

backward() fonksiyonunu eğiten veya çağıran sınıflar run_under_no_grad = False değerini ayarlar. Her ikisini de kullanan bir sınıf, bunun yerine @with_grad veya @with_no_grad etiketlerini bireysel test yöntemlerine yerleştirir.

Sınıf gövdesinde atanan öznitelikler korunur, sonradan eklenen her şey ise düşürülür. setUp metodunu geçersiz kılıyorsanız, super().setUp() çağrısını yapın: mixin, özniteliklerin anlık görüntüsünü orada alır ve bu çağrı yapılmadığında hata verir.

MemoryCleanupTestCase, otomatik olarak kaldırılan geçici dizinlere de sahip olmak isteyen testler için mixin'i TestCasePlus ile birleştirir.

Sızan bir testi bulmak için TRANSFORMERS_TEST_MEMORY_LEAK_MIB değerini MiB cinsinden bir bütçeye ayarlayın; cihazda bu miktardan fazlasını tahsis etmiş olarak bırakan her test, tepe kullanım değeriyle birlikte raporlanır. Uyarı vermek yerine hatayla sonuçlanmasını istiyorsanız TRANSFORMERS_TEST_MEMORY_LEAK_MODE=error ekleyin. Bu kontrol varsayılan olarak kapalıdır ve artıkları ararken açmanız gerekir. Mixin'in standart söküm işlemi zaten gc.collect çalıştırır; bu da bir sızıntıyı yeniden üretirken incelemek istediğiniz tahsisi temizleyebilir.

Üretim entegrasyon testleri

Üretim testlerinde çıktıların çalıştırmalar ve donanımlar arasında deterministik olmasını sağlamak için do_sample=False kullanın. Mixture-of-Experts modelleri için, kararlı bir uzman yönlendirme yolunu zorlamak üzere üretimden önce model.set_experts_implementation("eager") çağrısını da yapın. Bu yapılmazsa, yönlendiricideki küçük sayısal farklar, bir token'ı hangi uzmanın işleyeceğini değiştirebilir ve çıktıyı etkileyebilir.

@slow
@require_torch
def test_generate(self):
    model = MyModelForCausalLM.from_pretrained("myorg/mymodel-base").to(torch_device)
    tokenizer = AutoTokenizer.from_pretrained("myorg/mymodel-base")
    inputs = tokenizer("Hello, world", return_tensors="pt").to(torch_device)

    # model.set_experts_implementation("eager")  # uncomment for MoE models
    generated_ids = model.generate(**inputs, max_new_tokens=20, do_sample=False)
    output = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
    self.assertEqual(output, ["Hello, world! This is the expected continuation..."])

Donanım özelinde beklentiler

Transformers CI, yavaş testleri bir NVIDIA A10 üzerinde çalıştırır. Sayısal sonuçlar GPU nesilleri arasında hafif farklılıklar gösterebilir; bu nedenle entegrasyon testleri, cihaz başına beklenen değerleri kaydetmek için Expectations sınıfını kullanır. Expectations, (device_type, (major, minor)) SM anahtarlarına göre mevcut donanım için en iyi eşleşmeyi seçer ve hiçbir eşleşme bulunamazsa varsayılana geri döner.

Yerel SM sürümünüzü (ör. A10 için (8, 6), H100 için (9, 0)) yazdırmak için torch.cuda.get_device_capability() çalıştırın.

from transformers.testing_utils import Expectations

expected_texts = Expectations(
    {
        ("cuda", (8, 6)): ["Hello, world! This is the A10 continuation..."],
        ("cuda", (9, 0)): ["Hello, world! This is the H100 continuation..."],
    }
).get_expectation()

self.assertEqual(output, expected_texts)

Küçük modeller oluşturma

Rastgele ağırlıklara sahip küçük modeller, Hub üzerinde hf-internal-testing kuruluşu altında barındırılır. Pipeline testleri, Hub'da barındırılan bir checkpoint'e ihtiyaç duydukları ancak çıktı kalitesine önem vermedikleri durumlarda küçük modellere başvurur. Hızlı duman testleri de büyük checkpoint'leri indirmeden ileri geçiş şekillerini doğrulamak için küçük modelleri yükler.

Tiny modeller, entegrasyon testleri için son çaredir. Sadece en küçük mevcut checkpoint ~24 GB VRAM'i aşıyorsa bunları kullanın. Gerçek sayısal regresyonları yakalayabilmek için mümkün olduğunda orijinal önceden eğitilmiş ağırlıkları kullanın.

utils/create_dummy_models.py betiği, ModelTester.get_config() üzerinden küçük modeller oluşturur. Betik, testçinizden küçük hiperparametreleri çıkarır, rastgele ağırlıklarla bir model oluşturur ve sonucu Hub'a yükler.

Yerel olarak küçük modeller oluşturun.

python utils/create_dummy_models.py output_dir -m your_model_type

Bunları Hub'a yükleyin.

python utils/create_dummy_models.py output_dir -m your_model_type --upload --organization hf-internal-testing

Her model hf-internal-testing/tiny-random-{ModelClassName} adını kullanır ve tests/utils/tiny_model_summary.json dosyasında kaydedilir. Bir CI iş akışı (.github/workflows/check_tiny_models.yml) küçük modelleri her gün yeniden oluşturur.

Test edilecek içeriği kontrol edin

ModelTesterMixin üzerindeki Boolean bayrakları, otomatik oluşturulan testleri açar veya kapatır. Belirli denetimleri etkinleştirmek veya devre dışı bırakmak için test sınıfınızda herhangi bir bayrağı geçersiz kılın.

class MyModelTest(CausalLMModelTest, unittest.TestCase):
    model_tester_class = MyModelTester
    test_resize_embeddings = False
    test_all_params_have_gradient = False  # when not all parameters are activated in every forward pass
BayrakVarsayılanNe kontrol eder
test_resize_embeddingsTrueGömme katmanı yeniden boyutlandırma
test_resize_position_embeddingsFalseKonum gömme yeniden boyutlandırma
test_mismatched_shapesTrueEşleşmeyen giriş/çıkış şekli işleme
test_missing_keysTrueYükleme sırasında eksik anahtar uyarıları
test_torch_exportableTruetorch.export uyumluluğu
test_all_params_have_gradientTrueTüm parametreler gradyan alır (MoE uzmanları gibi her ileri geçişte tüm parametrelerin etkinleştirilmediği durumlarda False olarak ayarlayın)
is_encoder_decoderFalseEncoder-decoder'a özgü testler
has_attentionsTrueDikkat çıktısı testleri
_is_compositeFalseBileşik/çok modlu model işleme
model_split_percents[0.5, 0.7, 0.9]Model paralelliği testleri için bölme yüzdeleri

Sonraki adımlar

  • Test seçimi, fixture'lar, günlük tutma ve daha fazlası hakkında daha fazla bilgi için pytest belgelerine göz atın.
Update on GitHub