|
41 | 41 | # Import HuggingFace Qwen2Audio model classes with fallback |
42 | 42 | try: |
43 | 43 | from transformers import Qwen2AudioForConditionalGeneration |
| 44 | + from transformers.models.qwen2_audio import modeling_qwen2_audio as hf_modeling_qwen2_audio |
44 | 45 | from transformers.models.qwen2_audio.modeling_qwen2_audio import ( |
45 | 46 | Qwen2AudioEncoder, |
46 | 47 | Qwen2AudioMultiModalProjector, |
47 | 48 | ) |
48 | 49 |
|
| 50 | + HFQwen2AudioModel = getattr(hf_modeling_qwen2_audio, "Qwen2AudioModel", None) |
49 | 51 | HAS_QWEN2_AUDIO = True |
50 | 52 | except ImportError: |
51 | 53 | Qwen2AudioForConditionalGeneration = None |
52 | 54 | Qwen2AudioEncoder = None |
53 | 55 | Qwen2AudioMultiModalProjector = None |
| 56 | + HFQwen2AudioModel = None |
54 | 57 | HAS_QWEN2_AUDIO = False |
55 | 58 |
|
56 | 59 |
|
| 60 | +_QWEN2_AUDIO_MERGE_METHOD = None |
| 61 | +if HAS_QWEN2_AUDIO: |
| 62 | + _QWEN2_AUDIO_MERGE_METHOD = getattr( |
| 63 | + Qwen2AudioForConditionalGeneration, "_merge_input_ids_with_audio_features", None |
| 64 | + ) |
| 65 | + if _QWEN2_AUDIO_MERGE_METHOD is None and HFQwen2AudioModel is not None: |
| 66 | + _QWEN2_AUDIO_MERGE_METHOD = getattr(HFQwen2AudioModel, "_merge_input_ids_with_audio_features", None) |
| 67 | + |
| 68 | + |
57 | 69 | class Qwen2AudioModel(MegatronModule): |
58 | 70 | """ |
59 | 71 | Qwen2-Audio Model wrapper for Megatron. |
@@ -141,11 +153,9 @@ def __init__( |
141 | 153 | self.share_embeddings_and_output_weights = config.share_embeddings_and_output_weights |
142 | 154 | self.shared_embedding_or_output_weight = self.language_model.shared_embedding_or_output_weight |
143 | 155 |
|
144 | | - # Monkey-patch methods from HuggingFace Qwen2AudioForConditionalGeneration |
145 | | - if HAS_QWEN2_AUDIO and Qwen2AudioForConditionalGeneration is not None: |
146 | | - self._merge_input_ids_with_audio_features = types.MethodType( |
147 | | - Qwen2AudioForConditionalGeneration._merge_input_ids_with_audio_features, self |
148 | | - ) |
| 156 | + # Bind the merge method from the Hugging Face Qwen2-Audio implementation. |
| 157 | + if _QWEN2_AUDIO_MERGE_METHOD is not None: |
| 158 | + self._merge_input_ids_with_audio_features = types.MethodType(_QWEN2_AUDIO_MERGE_METHOD, self) |
149 | 159 |
|
150 | 160 | # Store audio token id from config |
151 | 161 | self.audio_token_id = getattr(config, "audio_token_id", 151646) |
|
0 commit comments