Transformers documentation
Model testleri yazma
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/ -vHugging 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ıf | Kullanım alanı | Mixin'ler |
|---|---|---|
CausalLMModelTest | Nedensel dil modelleri | ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, TrainingTesterMixin, TensorParallelTesterMixin |
VLMModelTest | Görüntü-dil modelleri | ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin |
ALMModelTest | Ses-dil modelleri | ModelTesterMixin, 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 = MyModelTesterBu 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 = FalseTester'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_rankVLMModelTest
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 = MyVLMTesterVLMModelTester'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_classveconditional_generation_classdeğerlerini belirlemelisiniz. VLMModelTest,TrainingTesterMixinveyaTensorParallelTesterMixiniçermez.- Testçinin
__init__metodu,**kwargsvesetdefault()ü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ı nedeniylehas_text_modality=Falsekullanı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 = MyALMTesterALMModelTester'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ıyorsaNoneolarak 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_idsiçine kaç adetaudio_token_idyer 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 ikiprepare_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ıBOSsonrası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.
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.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ışım | Kaynak dosya | Ne test eder |
|---|---|---|
ModelTesterMixin | tests/test_modeling_common.py | Kaydet/yükle, gradyan denetleme noktası, ileri imzası, ortak öznitelikler |
GenerationTesterMixin | tests/generation/test_utils.py | Açgözlü, örneklemeli, demet aramalı, destekli çözümleme |
PipelineTesterMixin | tests/test_pipeline_mixin.py | Her pipeline görevi için bir test |
TrainingTesterMixin | tests/test_training_mixin.py | Küçük bir partide aşırı uyum |
TensorParallelTesterMixin | tests/test_tensor_parallel_mixin.py | Dağı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.
ModelTestersı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_idsve 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_maskiçin kullanılır.floats_tensor(shape, scale=1.0): Rastgele float tensörü.pixel_valuesveyainputs_embedsgibi sürekli girdiler için kullanılır.
Test edici,
get_config(),prepare_config_and_inputs()veprepare_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çincreate_and_check_*yöntemleri ekleyin.Modelinizin ihtiyaç duyduğu mixin'lerden devralın,
all_model_classesvepipeline_model_mappingdeğerlerini belirleyin vesetUp()metodunu tanımlayın. Testçinincreate_and_check_*metodlarına devredentest_*metotları yazın.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 birtest_*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_headsvenum_hidden_layersgibi ortak özelliklerin (has_text_modality=Trueisevocab_sizedahil) mevcut olduğunu kontrol eder.- JSON serileştirmesini
to_json_string()veto_json_file()ile test eder. save_pretrained()vefrom_pretrained()işlemlerini gidip-geliş (round-trip) olarak test eder.id2labelvelabel2idtutarlılığını doğrular.- Varsayılan başlatmayı doğrulamak için hiçbir argüman olmadan bir config oluşturur.
output_hidden_statesgibi 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ğinsetUpClassiçindekicls.model = ...) eklediği öznitelikleri siler. Pytest, test örneklerini oturum boyunca canlı tuttuğu için, bu referansların hâlâ tuttuğu nesnelerigc.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'iTestCasePlusile 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| Bayrak | Varsayılan | Ne kontrol eder |
|---|---|---|
test_resize_embeddings | True | Gömme katmanı yeniden boyutlandırma |
test_resize_position_embeddings | False | Konum gömme yeniden boyutlandırma |
test_mismatched_shapes | True | Eşleşmeyen giriş/çıkış şekli işleme |
test_missing_keys | True | Yükleme sırasında eksik anahtar uyarıları |
test_torch_exportable | True | torch.export uyumluluğu |
test_all_params_have_gradient | True | Tü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_decoder | False | Encoder-decoder'a özgü testler |
has_attentions | True | Dikkat çıktısı testleri |
_is_composite | False | Bileş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.