71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
"""Unit tests for Gemma3 model architecture."""
|
|
|
|
import pytest
|
|
|
|
from mlc_llm.model import MODEL_PRESETS, MODELS
|
|
|
|
|
|
def test_gemma3_model_registered():
|
|
"""Verify Gemma3 model is in the registry."""
|
|
assert "gemma3" in MODELS, "gemma3 should be registered in MODELS"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"model_name",
|
|
[
|
|
"gemma3_2b",
|
|
"gemma3_9b",
|
|
],
|
|
)
|
|
def test_gemma3_creation(model_name: str):
|
|
"""Test Gemma3 model creation and export to TVM IR.
|
|
|
|
Verifies:
|
|
- Config can be loaded from preset
|
|
- Model instance can be created
|
|
- Model exports to TVM IR successfully
|
|
- Named parameters are extracted
|
|
"""
|
|
model_info = MODELS["gemma3"]
|
|
config = model_info.config.from_dict(MODEL_PRESETS[model_name])
|
|
model = model_info.model(config)
|
|
mod, named_params = model.export_tvm(
|
|
spec=model.get_default_spec(),
|
|
)
|
|
|
|
# Verify export succeeded
|
|
assert mod is not None
|
|
assert len(named_params) > 0
|
|
|
|
# Optional: show module structure
|
|
mod.show(black_format=False)
|
|
|
|
# Print parameters for debugging
|
|
for name, param in named_params:
|
|
print(name, param.shape, param.dtype)
|
|
|
|
|
|
def test_gemma3_config_validation():
|
|
"""Test Gemma3 configuration has required fields."""
|
|
model_info = MODELS["gemma3"]
|
|
config = model_info.config.from_dict(MODEL_PRESETS["gemma3_2b"])
|
|
|
|
# Check required config parameters
|
|
assert hasattr(config, "hidden_size") and config.hidden_size > 0
|
|
assert hasattr(config, "num_hidden_layers") and config.num_hidden_layers > 0
|
|
assert hasattr(config, "num_attention_heads") and config.num_attention_heads > 0
|
|
assert hasattr(config, "vocab_size") and config.vocab_size > 0
|
|
|
|
print(
|
|
f"Gemma3 Config: hidden_size={config.hidden_size}, "
|
|
f"layers={config.num_hidden_layers}, "
|
|
f"heads={config.num_attention_heads}, "
|
|
f"vocab={config.vocab_size}"
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Allow running tests directly
|
|
test_gemma3_creation("gemma3_2b")
|
|
test_gemma3_creation("gemma3_9b")
|