feat(dtype): map dtypes from reference
This commit is contained in:
@@ -65,6 +65,7 @@ def test_schema_is_diffusion_model_scoped(conversion):
|
||||
assert [item.id for item in schema.inputs] == [
|
||||
"model_name",
|
||||
"target_dtype",
|
||||
"reference_model",
|
||||
"exclude_patterns",
|
||||
"output_filename",
|
||||
]
|
||||
@@ -75,6 +76,47 @@ def test_schema_is_diffusion_model_scoped(conversion):
|
||||
]
|
||||
|
||||
|
||||
def test_reference_model_dtypes_override_target_without_tensor_loading(
|
||||
monkeypatch, tmp_path, conversion
|
||||
):
|
||||
source = tmp_path / "source.safetensors"
|
||||
reference = tmp_path / "reference.safetensors"
|
||||
_write_uel(source, {
|
||||
"mapped_bf16": torch.ones(2, dtype=torch.float32),
|
||||
"mapped_fp32": torch.ones(2, dtype=torch.float16),
|
||||
"fallback": torch.ones(2, dtype=torch.float32),
|
||||
"nonfloating": torch.tensor([1], dtype=torch.int64),
|
||||
})
|
||||
_write_uel(reference, {
|
||||
"mapped_bf16": torch.ones(2, dtype=torch.bfloat16),
|
||||
"mapped_fp32": torch.ones(2, dtype=torch.float32),
|
||||
"nonfloating": torch.tensor([1], dtype=torch.int64),
|
||||
})
|
||||
monkeypatch.setattr(conversion.folder_paths, "models_dir", str(tmp_path))
|
||||
monkeypatch.setattr(
|
||||
conversion.folder_paths,
|
||||
"get_full_path_or_raise",
|
||||
lambda _, name: {"source": str(source), "reference": str(reference)}[name],
|
||||
)
|
||||
monkeypatch.setattr(conversion, "cleanup_after_operation", lambda: None)
|
||||
monkeypatch.setattr(
|
||||
conversion.MemoryEfficientSafeOpen,
|
||||
"get_tensor",
|
||||
lambda *args, **kwargs: pytest.fail("synchronous reference loading was used"),
|
||||
)
|
||||
|
||||
output_path, report = conversion.convert_diffusion_model_dtype(
|
||||
"source", "fp16", "", "reference_mapped", "reference"
|
||||
)
|
||||
result, _ = _read_uel(tmp_path / "diffusion_models" / output_path)
|
||||
assert result["mapped_bf16"].dtype == torch.bfloat16
|
||||
assert result["mapped_fp32"].dtype == torch.float32
|
||||
assert result["fallback"].dtype == torch.float16
|
||||
assert result["nonfloating"].dtype == torch.int64
|
||||
assert "Reference-mapped floating tensors: 2" in report
|
||||
assert "Reference-missing fallback tensors: 1" in report
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("target_name", "expected_dtype"),
|
||||
[("fp32", torch.float32), ("fp16", torch.float16), ("bf16", torch.bfloat16)],
|
||||
|
||||
Reference in New Issue
Block a user