Skip to content

Commit c71bc25

Browse files
Fix test
Signed-off-by: Onur Yilmaz <oyilmaz@nvidia.com>
1 parent 30ef575 commit c71bc25

1 file changed

Lines changed: 111 additions & 83 deletions

File tree

tests/unit_tests/export/test_vllm_exporter.py

Lines changed: 111 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -599,13 +599,14 @@ def test_export_megatron_bridge_not_available(exporter):
599599
@pytest.mark.run_only_on("GPU")
600600
def test_export_megatron_bridge_no_hf_model_id(exporter, mock_llm):
601601
"""Test export with megatron_bridge when hf_model_id cannot be extracted and not provided"""
602+
# Create mock AutoBridge class
603+
mock_auto_bridge = MagicMock()
604+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = None
605+
602606
with (
603607
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
604-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
608+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
605609
):
606-
# Mock that AutoBridge.get_hf_model_id_from_checkpoint returns None
607-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = None
608-
609610
with pytest.raises(
610611
Exception,
611612
match="Could not find HuggingFace model ID in Megatron-Bridge checkpoint metadata",
@@ -617,22 +618,25 @@ def test_export_megatron_bridge_no_hf_model_id(exporter, mock_llm):
617618
@pytest.mark.run_only_on("GPU")
618619
def test_export_megatron_bridge_with_explicit_hf_model_id(exporter, mock_llm):
619620
"""Test export with megatron_bridge when hf_model_id is provided explicitly"""
621+
# Create mock classes
622+
mock_auto_bridge = MagicMock()
623+
mock_auto_config = MagicMock()
624+
625+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = None
626+
mock_config = MagicMock()
627+
mock_auto_config.from_pretrained.return_value = mock_config
628+
mock_auto_bridge.supports.return_value = True
629+
630+
mock_bridge_instance = MagicMock()
631+
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
632+
620633
with (
621634
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
622-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
623-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
635+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
636+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
624637
patch("nemo_export.vllm_exporter.tempfile.TemporaryDirectory") as mock_temp_dir,
625638
patch("nemo_export.vllm_exporter.Path") as mock_path,
626639
):
627-
# Setup mocks
628-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = None
629-
mock_config = MagicMock()
630-
mock_auto_config.from_pretrained.return_value = mock_config
631-
mock_auto_bridge.supports.return_value = True
632-
633-
mock_bridge_instance = MagicMock()
634-
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
635-
636640
# Mock temp directory
637641
mock_temp_dir.return_value.__enter__.return_value = "/tmp/test_hf_export"
638642
mock_path_instance = MagicMock()
@@ -668,22 +672,26 @@ def test_export_megatron_bridge_with_explicit_hf_model_id(exporter, mock_llm):
668672
@pytest.mark.run_only_on("GPU")
669673
def test_export_megatron_bridge_with_extracted_hf_model_id(exporter, mock_llm):
670674
"""Test export with megatron_bridge when hf_model_id is extracted from checkpoint"""
675+
# Create mock classes
676+
mock_auto_bridge = MagicMock()
677+
mock_auto_config = MagicMock()
678+
679+
# Setup mocks - AutoBridge extracts model ID from checkpoint
680+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
681+
mock_config = MagicMock()
682+
mock_auto_config.from_pretrained.return_value = mock_config
683+
mock_auto_bridge.supports.return_value = True
684+
685+
mock_bridge_instance = MagicMock()
686+
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
687+
671688
with (
672689
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
673-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
674-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
690+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
691+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
675692
patch("nemo_export.vllm_exporter.tempfile.TemporaryDirectory") as mock_temp_dir,
676693
patch("nemo_export.vllm_exporter.Path") as mock_path,
677694
):
678-
# Setup mocks - AutoBridge extracts model ID from checkpoint
679-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
680-
mock_config = MagicMock()
681-
mock_auto_config.from_pretrained.return_value = mock_config
682-
mock_auto_bridge.supports.return_value = True
683-
684-
mock_bridge_instance = MagicMock()
685-
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
686-
687695
# Mock temp directory
688696
mock_temp_dir.return_value.__enter__.return_value = "/tmp/test_hf_export"
689697
mock_path_instance = MagicMock()
@@ -707,22 +715,26 @@ def test_export_megatron_bridge_with_extracted_hf_model_id(exporter, mock_llm):
707715
@pytest.mark.run_only_on("GPU")
708716
def test_export_megatron_bridge_model_not_supported(exporter, mock_llm):
709717
"""Test export with megatron_bridge when model is not supported by AutoBridge"""
718+
# Create mock classes
719+
mock_auto_bridge = MagicMock()
720+
mock_auto_config = MagicMock()
721+
722+
# Setup mocks
723+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "unsupported/model"
724+
mock_config = MagicMock()
725+
mock_auto_config.from_pretrained.return_value = mock_config
726+
mock_auto_bridge.supports.return_value = False
727+
mock_auto_bridge.list_supported_models.return_value = [
728+
"LlamaForCausalLM",
729+
"MistralForCausalLM",
730+
"GPT2ForCausalLM",
731+
]
732+
710733
with (
711734
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
712-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
713-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
735+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
736+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
714737
):
715-
# Setup mocks
716-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "unsupported/model"
717-
mock_config = MagicMock()
718-
mock_auto_config.from_pretrained.return_value = mock_config
719-
mock_auto_bridge.supports.return_value = False
720-
mock_auto_bridge.list_supported_models.return_value = [
721-
"LlamaForCausalLM",
722-
"MistralForCausalLM",
723-
"GPT2ForCausalLM",
724-
]
725-
726738
with pytest.raises(Exception, match="Model 'unsupported/model' is not supported by AutoBridge"):
727739
exporter.export(model_path_id="/path/to/megatron/checkpoint", model_format="megatron_bridge")
728740

@@ -731,22 +743,26 @@ def test_export_megatron_bridge_model_not_supported(exporter, mock_llm):
731743
@pytest.mark.run_only_on("GPU")
732744
def test_export_megatron_bridge_conversion_failed_empty_dir(exporter, mock_llm):
733745
"""Test export with megatron_bridge when checkpoint conversion results in empty directory"""
746+
# Create mock classes
747+
mock_auto_bridge = MagicMock()
748+
mock_auto_config = MagicMock()
749+
750+
# Setup mocks
751+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
752+
mock_config = MagicMock()
753+
mock_auto_config.from_pretrained.return_value = mock_config
754+
mock_auto_bridge.supports.return_value = True
755+
756+
mock_bridge_instance = MagicMock()
757+
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
758+
734759
with (
735760
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
736-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
737-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
761+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
762+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
738763
patch("nemo_export.vllm_exporter.tempfile.TemporaryDirectory") as mock_temp_dir,
739764
patch("nemo_export.vllm_exporter.Path") as mock_path,
740765
):
741-
# Setup mocks
742-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
743-
mock_config = MagicMock()
744-
mock_auto_config.from_pretrained.return_value = mock_config
745-
mock_auto_bridge.supports.return_value = True
746-
747-
mock_bridge_instance = MagicMock()
748-
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
749-
750766
# Mock temp directory - but empty after conversion
751767
mock_temp_dir.return_value.__enter__.return_value = "/tmp/test_hf_export"
752768
mock_path_instance = MagicMock()
@@ -764,22 +780,26 @@ def test_export_megatron_bridge_conversion_failed_empty_dir(exporter, mock_llm):
764780
@pytest.mark.run_only_on("GPU")
765781
def test_export_megatron_bridge_with_trust_remote_code(exporter, mock_llm):
766782
"""Test export with megatron_bridge using trust_remote_code option"""
783+
# Create mock classes
784+
mock_auto_bridge = MagicMock()
785+
mock_auto_config = MagicMock()
786+
787+
# Setup mocks
788+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
789+
mock_config = MagicMock()
790+
mock_auto_config.from_pretrained.return_value = mock_config
791+
mock_auto_bridge.supports.return_value = True
792+
793+
mock_bridge_instance = MagicMock()
794+
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
795+
767796
with (
768797
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
769-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
770-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
798+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
799+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
771800
patch("nemo_export.vllm_exporter.tempfile.TemporaryDirectory") as mock_temp_dir,
772801
patch("nemo_export.vllm_exporter.Path") as mock_path,
773802
):
774-
# Setup mocks
775-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
776-
mock_config = MagicMock()
777-
mock_auto_config.from_pretrained.return_value = mock_config
778-
mock_auto_bridge.supports.return_value = True
779-
780-
mock_bridge_instance = MagicMock()
781-
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
782-
783803
# Mock temp directory
784804
mock_temp_dir.return_value.__enter__.return_value = "/tmp/test_hf_export"
785805
mock_path_instance = MagicMock()
@@ -804,22 +824,26 @@ def test_export_megatron_bridge_with_trust_remote_code(exporter, mock_llm):
804824
@pytest.mark.run_only_on("GPU")
805825
def test_export_megatron_bridge_full_success_path(exporter, mock_llm):
806826
"""Test complete successful export path for megatron_bridge checkpoint"""
827+
# Create mock classes
828+
mock_auto_bridge = MagicMock()
829+
mock_auto_config = MagicMock()
830+
831+
# Setup mocks
832+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
833+
mock_config = MagicMock()
834+
mock_auto_config.from_pretrained.return_value = mock_config
835+
mock_auto_bridge.supports.return_value = True
836+
837+
mock_bridge_instance = MagicMock()
838+
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
839+
807840
with (
808841
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
809-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
810-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
842+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
843+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
811844
patch("nemo_export.vllm_exporter.tempfile.TemporaryDirectory") as mock_temp_dir,
812845
patch("nemo_export.vllm_exporter.Path") as mock_path,
813846
):
814-
# Setup mocks
815-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
816-
mock_config = MagicMock()
817-
mock_auto_config.from_pretrained.return_value = mock_config
818-
mock_auto_bridge.supports.return_value = True
819-
820-
mock_bridge_instance = MagicMock()
821-
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
822-
823847
# Mock temp directory with successful conversion
824848
mock_temp_dir.return_value.__enter__.return_value = "/tmp/test_hf_export"
825849
mock_path_instance = MagicMock()
@@ -863,22 +887,26 @@ def test_export_megatron_bridge_full_success_path(exporter, mock_llm):
863887
@pytest.mark.run_only_on("GPU")
864888
def test_export_megatron_bridge_with_all_vllm_params(exporter, mock_llm):
865889
"""Test export with megatron_bridge passing all vLLM parameters"""
890+
# Create mock classes
891+
mock_auto_bridge = MagicMock()
892+
mock_auto_config = MagicMock()
893+
894+
# Setup mocks
895+
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
896+
mock_config = MagicMock()
897+
mock_auto_config.from_pretrained.return_value = mock_config
898+
mock_auto_bridge.supports.return_value = True
899+
900+
mock_bridge_instance = MagicMock()
901+
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
902+
866903
with (
867904
patch("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE", True),
868-
patch("nemo_export.vllm_exporter.AutoBridge") as mock_auto_bridge,
869-
patch("nemo_export.vllm_exporter.AutoConfig") as mock_auto_config,
905+
patch("nemo_export.vllm_exporter.AutoBridge", mock_auto_bridge, create=True),
906+
patch("nemo_export.vllm_exporter.AutoConfig", mock_auto_config, create=True),
870907
patch("nemo_export.vllm_exporter.tempfile.TemporaryDirectory") as mock_temp_dir,
871908
patch("nemo_export.vllm_exporter.Path") as mock_path,
872909
):
873-
# Setup mocks
874-
mock_auto_bridge.get_hf_model_id_from_checkpoint.return_value = "meta-llama/Llama-3-8B"
875-
mock_config = MagicMock()
876-
mock_auto_config.from_pretrained.return_value = mock_config
877-
mock_auto_bridge.supports.return_value = True
878-
879-
mock_bridge_instance = MagicMock()
880-
mock_auto_bridge.from_hf_pretrained.return_value = mock_bridge_instance
881-
882910
# Mock temp directory
883911
mock_temp_dir.return_value.__enter__.return_value = "/tmp/test_hf_export"
884912
mock_path_instance = MagicMock()

0 commit comments

Comments
 (0)