|
18 | 18 |
|
19 | 19 | import pytest |
20 | 20 | import torch |
21 | | -from transformers import PretrainedConfig |
| 21 | +from transformers import PretrainedConfig, Qwen2Config |
22 | 22 |
|
23 | 23 | from megatron.bridge.models.conversion import model_bridge as model_bridge_module |
24 | 24 | from megatron.bridge.models.conversion import modelopt_utils |
@@ -1691,3 +1691,56 @@ def __init__(self, megatron_param, hf_param): |
1691 | 1691 | assert len(tasks) == 1 |
1692 | 1692 | assert tasks[0].global_param_name == "decoder.weight" |
1693 | 1693 | assert tasks[0].megatron_module is None |
| 1694 | + |
| 1695 | + |
| 1696 | +def _yarn_qwen2_config(rope_scaling): |
| 1697 | + return Qwen2Config( |
| 1698 | + hidden_size=64, |
| 1699 | + intermediate_size=128, |
| 1700 | + num_hidden_layers=2, |
| 1701 | + num_attention_heads=4, |
| 1702 | + num_key_value_heads=2, |
| 1703 | + max_position_embeddings=16384, |
| 1704 | + vocab_size=128, |
| 1705 | + rope_scaling=rope_scaling, |
| 1706 | + ) |
| 1707 | + |
| 1708 | + |
| 1709 | +def test_yarn_mapping_fills_hugging_face_defaults_for_omitted_keys(): |
| 1710 | + """Omitted YaRN keys must not reach Megatron Core as None.""" |
| 1711 | + config = _yarn_qwen2_config({"rope_type": "yarn", "factor": 4.0, "original_max_position_embeddings": 4096}) |
| 1712 | + |
| 1713 | + kwargs = DummyBridge().hf_config_to_provider_kwargs(config) |
| 1714 | + |
| 1715 | + assert kwargs["position_embedding_type"] == "yarn" |
| 1716 | + assert kwargs["yarn_rotary_scaling_factor"] == 4.0 |
| 1717 | + assert kwargs["yarn_original_max_position_embeddings"] == 4096 |
| 1718 | + assert kwargs["yarn_beta_fast"] == 32.0 |
| 1719 | + assert kwargs["yarn_beta_slow"] == 1.0 |
| 1720 | + assert kwargs["yarn_correction_range_round_to_int"] is True |
| 1721 | + |
| 1722 | + |
| 1723 | +def test_yarn_mapping_preserves_explicit_keys(): |
| 1724 | + config = _yarn_qwen2_config( |
| 1725 | + { |
| 1726 | + "rope_type": "yarn", |
| 1727 | + "factor": 4.0, |
| 1728 | + "original_max_position_embeddings": 4096, |
| 1729 | + "beta_fast": 16.0, |
| 1730 | + "beta_slow": 2.0, |
| 1731 | + "truncate": False, |
| 1732 | + } |
| 1733 | + ) |
| 1734 | + |
| 1735 | + kwargs = DummyBridge().hf_config_to_provider_kwargs(config) |
| 1736 | + |
| 1737 | + assert kwargs["yarn_beta_fast"] == 16.0 |
| 1738 | + assert kwargs["yarn_beta_slow"] == 2.0 |
| 1739 | + assert kwargs["yarn_correction_range_round_to_int"] is False |
| 1740 | + |
| 1741 | + |
| 1742 | +def test_non_yarn_mapping_adds_no_yarn_defaults(): |
| 1743 | + kwargs = DummyBridge().hf_config_to_provider_kwargs(_yarn_qwen2_config(None)) |
| 1744 | + |
| 1745 | + assert "position_embedding_type" not in kwargs |
| 1746 | + assert not any(key.startswith("yarn_") for key in kwargs) |
0 commit comments