| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| import os |
|
|
| import pytest |
| from omegaconf import OmegaConf |
|
|
| from verl.workers.config.model import HFModelConfig |
|
|
|
|
| class TestHFModelConfigCPU: |
| model_path = os.path.expanduser("~/models/Qwen/Qwen2.5-0.5B") |
|
|
| def test_target_modules_accepts_list_via_omegaconf(self): |
| """ |
| Test that target_modules field accepts both string and list values |
| when merging OmegaConf configs (simulates CLI override behavior). |
| |
| The purpose is to ensure we can pass |
| actor_rollout_ref.model.target_modules='["k_proj","o_proj","down_proj","q_proj"]' |
| """ |
|
|
| |
| |
| cfg_from_dataclass = OmegaConf.structured(HFModelConfig) |
|
|
| |
| cli_config = OmegaConf.create( |
| { |
| "path": self.model_path, |
| "target_modules": ["k_proj", "o_proj", "q_proj", "v_proj"], |
| } |
| ) |
|
|
| |
| |
| |
| merged = OmegaConf.merge(cfg_from_dataclass, cli_config) |
|
|
| |
| assert list(merged.target_modules) == ["k_proj", "o_proj", "q_proj", "v_proj"] |
|
|
| def test_target_modules_accepts_none_via_omegaconf(self): |
| """Test that target_modules still accepts None values.""" |
|
|
| cfg_from_dataclass = OmegaConf.structured(HFModelConfig) |
|
|
| cli_config = OmegaConf.create( |
| { |
| "path": self.model_path, |
| "target_modules": None, |
| } |
| ) |
|
|
| merged = OmegaConf.merge(cfg_from_dataclass, cli_config) |
| assert merged.target_modules is None |
|
|
| def test_target_modules_accepts_string_via_omegaconf(self): |
| """Test that target_modules still accepts string values.""" |
|
|
| cfg_from_dataclass = OmegaConf.structured(HFModelConfig) |
|
|
| cli_config = OmegaConf.create( |
| { |
| "path": self.model_path, |
| "target_modules": "all-linear", |
| } |
| ) |
|
|
| merged = OmegaConf.merge(cfg_from_dataclass, cli_config) |
| assert merged.target_modules == "all-linear" |
|
|
| def test_target_modules_raises_on_invalid_type(self): |
| """Test that __post_init__ raises TypeError for invalid target_modules types.""" |
| base_config = OmegaConf.structured(HFModelConfig) |
| invalid_cli_config = OmegaConf.create( |
| { |
| "path": self.model_path, |
| "target_modules": [1, 2, 3], |
| } |
| ) |
| merged_config = OmegaConf.merge(base_config, invalid_cli_config) |
| with pytest.raises(TypeError): |
| OmegaConf.to_object(merged_config) |
|
|