From a70337d544de4bec750d77ea61bd97ce416f3c49 Mon Sep 17 00:00:00 2001 From: ModelHub XC Date: Thu, 9 Apr 2026 13:22:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=EF=BC=8C=E7=94=B1ModelHub=20XC=E7=A4=BE=E5=8C=BA=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Model: microsoft/Phi-4-multimodal-instruct Source: Original Platform --- .gitattributes | 54 + CODE_OF_CONDUCT.md | 9 + LICENSE | 21 + README.md | 836 +++++ SECURITY.md | 41 + SUPPORT.md | 25 + added_tokens.json | 12 + config.json | 221 ++ configuration.json | 1 + configuration_phi4mm.py | 235 ++ data_summary_card.md | 149 + examples/what_is_shown_in_this_image.wav | Bin 0 -> 112844 bytes .../what_is_the_traffic_sign_in_the_image.wav | Bin 0 -> 741454 bytes figures/audio_understand.png | Bin 0 -> 42645 bytes figures/multi_image.png | Bin 0 -> 191950 bytes figures/speech_qa.png | Bin 0 -> 46754 bytes figures/speech_recog_by_lang.png | Bin 0 -> 90697 bytes figures/speech_recognition.png | Bin 0 -> 63547 bytes figures/speech_summarization.png | Bin 0 -> 40951 bytes figures/speech_translate.png | Bin 0 -> 47677 bytes figures/speech_translate_2.png | Bin 0 -> 46342 bytes figures/vision_radar.png | Bin 0 -> 173821 bytes generation_config.json | 11 + merges.txt | 3 + model-00001-of-00003.safetensors | 3 + model-00002-of-00003.safetensors | 3 + model-00003-of-00003.safetensors | 3 + model.safetensors.index.json | 2054 ++++++++++++ modeling_phi4mm.py | 2407 ++++++++++++++ phi_4_mm.tech_report.02252025.pdf | 3 + preprocessor_config.json | 14 + processing_phi4mm.py | 733 +++++ processor_config.json | 6 + sample_finetune_speech.py | 478 +++ sample_finetune_vision.py | 556 ++++ sample_inference_phi4mm.py | 243 ++ special_tokens_map.json | 24 + speech-lora/adapter_config.json | 23 + speech-lora/adapter_model.safetensors | 3 + speech-lora/added_tokens.json | 12 + speech-lora/special_tokens_map.json | 24 + speech-lora/tokenizer.json | 3 + speech-lora/tokenizer_config.json | 125 + speech-lora/vocab.json | 3 + speech_conformer_encoder.py | 2905 +++++++++++++++++ tokenizer.json | 3 + tokenizer_config.json | 125 + vision-lora/adapter_config.json | 23 + vision-lora/adapter_model.safetensors | 3 + vision-lora/added_tokens.json | 12 + vision-lora/special_tokens_map.json | 24 + vision-lora/tokenizer.json | 3 + vision-lora/tokenizer_config.json | 125 + vision-lora/vocab.json | 3 + vision_siglip_navit.py | 1717 ++++++++++ vocab.json | 3 + 56 files changed, 13284 insertions(+) create mode 100644 .gitattributes create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 SUPPORT.md create mode 100644 added_tokens.json create mode 100644 config.json create mode 100644 configuration.json create mode 100644 configuration_phi4mm.py create mode 100644 data_summary_card.md create mode 100644 examples/what_is_shown_in_this_image.wav create mode 100644 examples/what_is_the_traffic_sign_in_the_image.wav create mode 100644 figures/audio_understand.png create mode 100644 figures/multi_image.png create mode 100644 figures/speech_qa.png create mode 100644 figures/speech_recog_by_lang.png create mode 100644 figures/speech_recognition.png create mode 100644 figures/speech_summarization.png create mode 100644 figures/speech_translate.png create mode 100644 figures/speech_translate_2.png create mode 100644 figures/vision_radar.png create mode 100644 generation_config.json create mode 100644 merges.txt create mode 100644 model-00001-of-00003.safetensors create mode 100644 model-00002-of-00003.safetensors create mode 100644 model-00003-of-00003.safetensors create mode 100644 model.safetensors.index.json create mode 100644 modeling_phi4mm.py create mode 100644 phi_4_mm.tech_report.02252025.pdf create mode 100644 preprocessor_config.json create mode 100644 processing_phi4mm.py create mode 100644 processor_config.json create mode 100644 sample_finetune_speech.py create mode 100644 sample_finetune_vision.py create mode 100644 sample_inference_phi4mm.py create mode 100644 special_tokens_map.json create mode 100644 speech-lora/adapter_config.json create mode 100644 speech-lora/adapter_model.safetensors create mode 100644 speech-lora/added_tokens.json create mode 100644 speech-lora/special_tokens_map.json create mode 100644 speech-lora/tokenizer.json create mode 100644 speech-lora/tokenizer_config.json create mode 100644 speech-lora/vocab.json create mode 100644 speech_conformer_encoder.py create mode 100644 tokenizer.json create mode 100644 tokenizer_config.json create mode 100644 vision-lora/adapter_config.json create mode 100644 vision-lora/adapter_model.safetensors create mode 100644 vision-lora/added_tokens.json create mode 100644 vision-lora/special_tokens_map.json create mode 100644 vision-lora/tokenizer.json create mode 100644 vision-lora/tokenizer_config.json create mode 100644 vision-lora/vocab.json create mode 100644 vision_siglip_navit.py create mode 100644 vocab.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e41e060 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,54 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bin.* filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zstandard filter=lfs diff=lfs merge=lfs -text +*.tfevents* filter=lfs diff=lfs merge=lfs -text +*.db* filter=lfs diff=lfs merge=lfs -text +*.ark* filter=lfs diff=lfs merge=lfs -text +**/*ckpt*data* filter=lfs diff=lfs merge=lfs -text +**/*ckpt*.meta filter=lfs diff=lfs merge=lfs -text +**/*ckpt*.index filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.gguf* filter=lfs diff=lfs merge=lfs -text +*.ggml filter=lfs diff=lfs merge=lfs -text +*.llamafile* filter=lfs diff=lfs merge=lfs -text +*.pt2 filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text + +merges.txt filter=lfs diff=lfs merge=lfs -text +phi_4_mm.tech_report.02252025.pdf filter=lfs diff=lfs merge=lfs -text +speech-lora/vocab.json filter=lfs diff=lfs merge=lfs -text +tokenizer.json filter=lfs diff=lfs merge=lfs -text +vision-lora/vocab.json filter=lfs diff=lfs merge=lfs -text +vocab.json filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f9ba8cf --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,9 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9e841e7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/README.md b/README.md new file mode 100644 index 0000000..638090d --- /dev/null +++ b/README.md @@ -0,0 +1,836 @@ +--- +license: mit +license_link: https://huggingface.co/microsoft/Phi-4-multimodal-instruct/resolve/main/LICENSE +language: +- multilingual +- ar +- zh +- cs +- da +- nl +- en +- fi +- fr +- de +- he +- hu +- it +- ja +- ko +- no +- pl +- pt +- ru +- es +- sv +- th +- tr +- uk +tags: +- nlp +- code +- audio +- automatic-speech-recognition +- speech-summarization +- speech-translation +- visual-question-answering +- phi-4-multimodal +- phi +- phi-4-mini +widget: +- example_title: Librispeech sample 1 + src: https://cdn-media.huggingface.co/speech_samples/sample1.flac +- example_title: Librispeech sample 2 + src: https://cdn-media.huggingface.co/speech_samples/sample2.flac +- messages: + - role: user + content: Transcribe the audio to text, and then translate the audio to French. Use as a separator between the original transcript and the translation. +library_name: transformers +paper: https://arxiv.org/abs/2503.01743 +--- +🎉**Phi-4**: [[mini-reasoning](https://huggingface.co/microsoft/Phi-4-mini-reasoning) | [reasoning](https://huggingface.co/microsoft/Phi-4-reasoning)] | [[multimodal-instruct](https://huggingface.co/microsoft/Phi-4-multimodal-instruct) | [onnx](https://huggingface.co/microsoft/Phi-4-multimodal-instruct-onnx)]; +[[mini-instruct](https://huggingface.co/microsoft/Phi-4-mini-instruct) | [onnx](https://huggingface.co/microsoft/Phi-4-mini-instruct-onnx)] + + + +## Model Summary + +Phi-4-multimodal-instruct is a lightweight open multimodal foundation +model that leverages the language, vision, and speech research +and datasets used for Phi-3.5 and 4.0 models. The model processes text, +image, and audio inputs, generating text outputs, and comes with +128K token context length. The model underwent an enhancement process, +incorporating both supervised fine-tuning, direct preference +optimization and RLHF (Reinforcement Learning from Human Feedback) +to support precise instruction adherence and safety measures. +The languages that each modal supports are the following: +- Text: Arabic, Chinese, Czech, Danish, Dutch, English, Finnish, +French, German, Hebrew, Hungarian, Italian, Japanese, Korean, Norwegian, +Polish, Portuguese, Russian, Spanish, Swedish, Thai, Turkish, Ukrainian +- Vision: English +- Audio: English, Chinese, German, French, Italian, Japanese, Spanish, Portuguese + +📰 [Phi-4-multimodal Microsoft Blog](https://aka.ms/phi4-feb2025)
+📖 [Phi-4-multimodal Technical Report](https://arxiv.org/abs/2503.01743)
+🏡 [Phi Portal](https://aka.ms/phi-4-multimodal/azure)
+👩‍🍳 [Phi Cookbook](https://github.com/microsoft/PhiCookBook)
+🖥️ Try It on [Azure](https://aka.ms/phi-4-multimodal/azure), +[GitHub](https://github.com/marketplace/models/azureml/Phi-4-multimodal-instruct/playground), +[Nvidia](https://aka.ms/phi-4-multimodal/nvidia), +[Huggingface](https://huggingface.co/spaces/microsoft/phi-4-multimodal) playgrounds
+📱Huggingface Spaces +[Thoughts Organizer](https://huggingface.co/spaces/microsoft/ThoughtsOrganizer), +[Stories Come Alive](https://huggingface.co/spaces/microsoft/StoriesComeAlive), +[Phine Speech Translator](https://huggingface.co/spaces/microsoft/PhineSpeechTranslator)
+ + +Watch as Phi-4 Multimodal analyzes spoken language to help plan a trip to Seattle, demonstrating its advanced audio processing and recommendation capabilities. + +
+ +
+ +See how Phi-4 Multimodal tackles complex mathematical problems through visual inputs, demonstrating its ability to process and solve equations presented in images. +
+ +
+ +Explore how Phi-4 Mini functions as an intelligent agent, showcasing its reasoning and task execution abilities in complex scenarios. +
+ +
+ + +## Intended Uses + +### Primary Use Cases + +The model is intended for broad multilingual and multimodal commercial and research use . The model provides uses for general purpose AI systems and applications which require + +1) Memory/compute constrained environments +2) Latency bound scenarios +3) Strong reasoning (especially math and logic) +4) Function and tool calling +5) General image understanding +6) Optical character recognition +7) Chart and table understanding +8) Multiple image comparison +9) Multi-image or video clip summarization +10) Speech recognition +11) Speech translation +12) Speech QA +13) Speech summarization +14) Audio understanding + +The model is designed to accelerate research on language and multimodal models, for use as a building block for generative AI powered features. + +### Use Case Considerations + +The model is not specifically designed or evaluated for all downstream purposes. Developers should consider common limitations of language models and multimodal models, as well as performance difference across languages, as they select use cases, and evaluate and mitigate for accuracy, safety, and fairness before using within a specific downstream use case, particularly for high-risk scenarios. +Developers should be aware of and adhere to applicable laws or regulations (including but not limited to privacy, trade compliance laws, etc.) that are relevant to their use case. + +***Nothing contained in this Model Card should be interpreted as or deemed a restriction or modification to the license the model is released under.*** + +## Release Notes + +This release of Phi-4-multimodal-instruct is based on valuable user feedback from the Phi-3 series. Previously, users could use a speech recognition model to talk to the Mini and Vision models. To achieve this, users needed to use a pipeline of two models: one model to transcribe the audio to text, and another model for the language or vision tasks. This pipeline means that the core model was not provided the full breadth of input information – e.g. cannot directly observe multiple speakers, background noises, jointly align speech, vision, language information at the same time on the same representation space. +With Phi-4-multimodal-instruct, a single new open model has been trained across text, vision, and audio, meaning that all inputs and outputs are processed by the same neural network. The model employed new architecture, larger vocabulary for efficiency, multilingual, and multimodal support, and better post-training techniques were used for instruction following and function calling, as well as additional data leading to substantial gains on key multimodal capabilities. +It is anticipated that Phi-4-multimodal-instruct will greatly benefit app developers and various use cases. The enthusiastic support for the Phi-4 series is greatly appreciated. Feedback on Phi-4 is welcomed and crucial to the model's evolution and improvement. Thank you for being part of this journey! + +## Model Quality +
+ Click to view details + +To understand the capabilities, Phi-4-multimodal-instruct was compared with a set of models over a variety of benchmarks using an internal benchmark platform (See Appendix A for benchmark methodology). Users can refer to the Phi-4-Mini-Instruct model card for details of language benchmarks. At the high-level overview of the model quality on representative speech and vision benchmarks: + +### Speech + +The Phi-4-multimodal-instruct was observed as +- Having strong automatic speech recognition (ASR) and speech translation (ST) performance, surpassing expert ASR model WhisperV3 and ST models SeamlessM4T-v2-Large. +- Ranking number 1 on the [Huggingface OpenASR](https://huggingface.co/spaces/hf-audio/open_asr_leaderboard) leaderboard with word error rate 6.14% in comparison with the current best model 6.5% as of March 04, 2025. +- Being the first open-sourced model that can perform speech summarization, and the performance is close to GPT4o. +- Having a gap with close models, e.g. Gemini-1.5-Flash and GPT-4o-realtime-preview, on speech QA task. Work is being undertaken to improve this capability in the next iterations. + +#### Speech Recognition (lower is better) + +The performance of Phi-4-multimodal-instruct on the aggregated benchmark datasets: +![alt text](./figures/speech_recognition.png) + +The performance of Phi-4-multimodal-instruct on different languages, averaging the WERs of CommonVoice and FLEURS: + +![alt text](./figures/speech_recog_by_lang.png) + +#### Speech Translation (higher is better) + +Translating from German, Spanish, French, Italian, Japanese, Portugues, Chinese to English: + +![alt text](./figures/speech_translate.png) + +Translating from English to German, Spanish, French, Italian, Japanese, Portugues, Chinese. Noted that WhiperV3 does not support this capability: + +![alt text](./figures/speech_translate_2.png) + + +#### Speech Summarization (higher is better) + +![alt text](./figures/speech_summarization.png) + +#### Speech QA + +MT bench scores are scaled by 10x to match the score range of MMMLU: + +![alt text](./figures/speech_qa.png) + +#### Audio Understanding + +AIR bench scores are scaled by 10x to match the score range of MMAU: + +![alt text](./figures/audio_understand.png) + +### Vision + +#### Vision-Speech tasks + +Phi-4-multimodal-instruct is capable of processing both image and audio together, the following table shows the model quality when the input query for vision content is synthetic speech on chart/table understanding and document reasoning tasks. Compared to other existing state-of-the-art omni models that can enable audio and visual signal as input, Phi-4-multimodal-instruct achieves much stronger performance on multiple benchmarks. + +| Benchmarks | Phi-4-multimodal-instruct | InternOmni-7B | Gemini-2.0-Flash-Lite-prv-02-05 | Gemini-2.0-Flash | Gemini-1.5-Pro | +|-----------------------|--------------------------|---------------|--------------------------------|-----------------|----------------| +| s_AI2D | **68.9** | 53.9 | 62.0 | **69.4** | 67.7 | +| s_ChartQA | **69.0** | 56.1 | 35.5 | 51.3 | 46.9 | +| s_DocVQA | **87.3** | 79.9 | 76.0 | 80.3 | 78.2 | +| s_InfoVQA | **63.7** | 60.3 | 59.4 | 63.6 | **66.1** | +| **Average** | **72.2** | **62.6** | **58.2** | **66.2** | **64.7** | + +### Vision tasks +To understand the vision capabilities, Phi-4-multimodal-instruct was compared with a set of models over a variety of zero-shot benchmarks using an internal benchmark platform. At the high-level overview of the model quality on representative benchmarks: + +| Dataset | Phi-4-multimodal-ins | Phi-3.5-vision-ins | Qwen 2.5-VL-3B-ins | Intern VL 2.5-4B | Qwen 2.5-VL-7B-ins | Intern VL 2.5-8B | Gemini 2.0-Flash Lite-preview-0205 | Gemini2.0-Flash | Claude-3.5-Sonnet-2024-10-22 | Gpt-4o-2024-11-20 | +|----------------------------------|---------------------|-------------------|-------------------|-----------------|-------------------|-----------------|--------------------------------|-----------------|----------------------------|------------------| +| **Popular aggregated benchmark** | | | | | | | | | | | +| MMMU | **55.1** | 43.0 | 47.0 | 48.3 | 51.8 | 50.6 | 54.1 | **64.7** | 55.8 | 61.7 | +| MMBench (dev-en) | **86.7** | 81.9 | 84.3 | 86.8 | 87.8 | 88.2 | 85.0 | **90.0** | 86.7 | 89.0 | +| MMMU-Pro (std/vision) | **38.5** | 21.8 | 29.9 | 32.4 | 36.9 | 34.4 | 45.1 | **54.4** | 54.3 | 53.0 | +| **Visual science reasoning** | | | | | | | | | | | +| ScienceQA Visual (img-test) | **97.5** | 91.3 | 79.4 | 96.2 | 87.7 | **97.3** | 85.0 | 88.3 | 81.2 | 88.2 | +| **Visual math reasoning** | | | | | | | | | | | +| MathVista (testmini) | **62.4** | 43.9 | 60.8 | 51.2 | **67.8** | 56.7 | 57.6 | 47.2 | 56.9 | 56.1 | +| InterGPS | **48.6** | 36.3 | 48.3 | 53.7 | 52.7 | 54.1 | 57.9 | **65.4** | 47.1 | 49.1 | +| **Chart & table reasoning** | | | | | | | | | | | +| AI2D | **82.3** | 78.1 | 78.4 | 80.0 | 82.6 | 83.0 | 77.6 | 82.1 | 70.6 | **83.8** | +| ChartQA | **81.4** | 81.8 | 80.0 | 79.1 | **85.0** | 81.0 | 73.0 | 79.0 | 78.4 | 75.1 | +| DocVQA | **93.2** | 69.3 | 93.9 | 91.6 | **95.7** | 93.0 | 91.2 | 92.1 | 95.2 | 90.9 | +| InfoVQA | **72.7** | 36.6 | 77.1 | 72.1 | **82.6** | 77.6 | 73.0 | 77.8 | 74.3 | 71.9 | +| **Document Intelligence** | | | | | | | | | | | +| TextVQA (val) | **75.6** | 72.0 | 76.8 | 70.9 | **77.7** | 74.8 | 72.9 | 74.4 | 58.6 | 73.1 | +| OCR Bench | **84.4** | 63.8 | 82.2 | 71.6 | **87.7** | 74.8 | 75.7 | 81.0 | 77.0 | 77.7 | +| **Object visual presence verification** | | | | | | | | | | | +| POPE | **85.6** | 86.1 | 87.9 | 89.4 | 87.5 | **89.1** | 87.5 | 88.0 | 82.6 | 86.5 | +| **Multi-image perception** | | | | | | | | | | | +| BLINK | **61.3** | 57.0 | 48.1 | 51.2 | 55.3 | 52.5 | 59.3 | **64.0** | 56.9 | 62.4 | +| Video MME 16 frames | **55.0** | 50.8 | 56.5 | 57.3 | 58.2 | 58.7 | 58.8 | 65.5 | 60.2 | **68.2** | +| **Average** | **72.0** | **60.9** | **68.7** | **68.8** | **73.1** | **71.1** | **70.2** | **74.3** | **69.1** | **72.4** | + +![alt text](./figures/vision_radar.png) + +#### Visual Perception + +Below are the comparison results on existing multi-image tasks. On average, Phi-4-multimodal-instruct outperforms competitor models of the same size and competitive with much bigger models on multi-frame capabilities. +BLINK is an aggregated benchmark with 14 visual tasks that humans can solve very quickly but are still hard for current multimodal LLMs. + +| Dataset | Phi-4-multimodal-instruct | Qwen2.5-VL-3B-Instruct | InternVL 2.5-4B | Qwen2.5-VL-7B-Instruct | InternVL 2.5-8B | Gemini-2.0-Flash-Lite-prv-02-05 | Gemini-2.0-Flash | Claude-3.5-Sonnet-2024-10-22 | Gpt-4o-2024-11-20 | +|----------------------------|--------------------------|----------------------|-----------------|----------------------|-----------------|--------------------------------|-----------------|----------------------------|------------------| +| Art Style | **86.3** | 58.1 | 59.8 | 65.0 | 65.0 | 76.9 | 76.9 | 68.4 | 73.5 | +| Counting | **60.0** | 67.5 | 60.0 | 66.7 | **71.7** | 45.8 | 69.2 | 60.8 | 65.0 | +| Forensic Detection | **90.2** | 34.8 | 22.0 | 43.9 | 37.9 | 31.8 | 74.2 | 63.6 | 71.2 | +| Functional Correspondence | **30.0** | 20.0 | 26.9 | 22.3 | 27.7 | 48.5 | **53.1** | 34.6 | 42.3 | +| IQ Test | **22.7** | 25.3 | 28.7 | 28.7 | 28.7 | 28.0 | **30.7** | 20.7 | 25.3 | +| Jigsaw | **68.7** | 52.0 | **71.3** | 69.3 | 53.3 | 62.7 | 69.3 | 61.3 | 68.7 | +| Multi-View Reasoning | **76.7** | 44.4 | 44.4 | 54.1 | 45.1 | 55.6 | 41.4 | 54.9 | 54.1 | +| Object Localization | **52.5** | 55.7 | 53.3 | 55.7 | 58.2 | 63.9 | **67.2** | 58.2 | 65.6 | +| Relative Depth | **69.4** | 68.5 | 68.5 | 80.6 | 76.6 | **81.5** | 72.6 | 66.1 | 73.4 | +| Relative Reflectance | **26.9** | **38.8** | **38.8** | 32.8 | **38.8** | 33.6 | 34.3 | 38.1 | 38.1 | +| Semantic Correspondence | **52.5** | 32.4 | 33.8 | 28.8 | 24.5 | **56.1** | 55.4 | 43.9 | 47.5 | +| Spatial Relation | **72.7** | 80.4 | 86.0 | **88.8** | 86.7 | 74.1 | 79.0 | 74.8 | 83.2 | +| Visual Correspondence | **67.4** | 28.5 | 39.5 | 50.0 | 44.2 | 84.9 | **91.3** | 72.7 | 82.6 | +| Visual Similarity | **86.7** | 67.4 | 88.1 | 87.4 | 85.2 | **87.4** | 80.7 | 79.3 | 83.0 | +| **Overall** | **61.6** | **48.1** | **51.2** | **55.3** | **52.5** | **59.3** | **64.0** | **56.9** | **62.4** | + +![alt text](./figures/multi_image.png) + +
+ +## Usage + +### Requirements + +Phi-4 family has been integrated in the `4.48.2` version of `transformers`. The current `transformers` version can be verified with: `pip list | grep transformers`. +We suggest to run with Python 3.10. +Examples of required packages: +``` +flash_attn==2.7.4.post1 +torch==2.6.0 +transformers==4.48.2 +accelerate==1.3.0 +soundfile==0.13.1 +pillow==11.1.0 +scipy==1.15.2 +torchvision==0.21.0 +backoff==2.2.1 +peft==0.13.2 +``` + +Phi-4-multimodal-instruct is also available in [Azure AI Studio](https://aka.ms/phi-4-multimodal/azure) + +### Tokenizer + +Phi-4-multimodal-instruct supports a vocabulary size of up to `200064` tokens. The [tokenizer files](https://huggingface.co/microsoft/Phi-4-multimodal-instruct/blob/main/added_tokens.json) already provide placeholder tokens that can be used for downstream fine-tuning, but they can also be extended up to the model's vocabulary size. + +### Input Formats + +Given the nature of the training data, the Phi-4-multimodal-instruct model is best suited for prompts using the chat format as follows: + +#### Text chat format + +This format is used for general conversation and instructions: + +` +<|system|>You are a helpful assistant.<|end|><|user|>How to explain Internet for a medieval knight?<|end|><|assistant|> +` + +#### Tool-enabled function-calling format + +This format is used when the user wants the model to provide function calls based on +the given tools. The user should provide the available tools in the system prompt, +wrapped by <|tool|> and <|/tool|> tokens. The tools should be specified in JSON format, +using a JSON dump structure. Example: + +` +<|system|>You are a helpful assistant with some tools.<|tool|>[{"name": "get_weather_updates", "description": "Fetches weather updates for a given city using the RapidAPI Weather API.", "parameters": {"city": {"description": "The name of the city for which to retrieve weather information.", "type": "str", "default": "London"}}}]<|/tool|><|end|><|user|>What is the weather like in Paris today?<|end|><|assistant|> +` + +#### Vision-Language Format + +This format is used for conversation with image: + +` +<|user|><|image_1|>Describe the image in detail.<|end|><|assistant|> +` + +For multiple images, the user needs to insert multiple image placeholders in the prompt as below: + +` +<|user|><|image_1|><|image_2|><|image_3|>Summarize the content of the images.<|end|><|assistant|> +` + +#### Speech-Language Format + +This format is used for various speech and audio tasks: + +` +<|user|><|audio_1|>{task prompt}<|end|><|assistant|> +` + +The task prompt can vary for different task. +Automatic Speech Recognition: + +` +<|user|><|audio_1|>Transcribe the audio clip into text.<|end|><|assistant|> +` + +Automatic Speech Translation: + +` +<|user|><|audio_1|>Translate the audio to {lang}.<|end|><|assistant|> +` + +Automatic Speech Translation with chain-of-thoughts: + +` +<|user|><|audio_1|>Transcribe the audio to text, and then translate the audio to {lang}. Use as a separator between the original transcript and the translation.<|end|><|assistant|> +` + +Spoken-query Question Answering: + +` +<|user|><|audio_1|><|end|><|assistant|> +` + +#### Vision-Speech Format + +This format is used for conversation with image and audio. +The audio may contain query related to the image: + +` +<|user|><|image_1|><|audio_1|><|end|><|assistant|> +` + +For multiple images, the user needs to insert multiple image placeholders in the prompt as below: + +` +<|user|><|image_1|><|image_2|><|image_3|><|audio_1|><|end|><|assistant|> +` + +**Vision** +- Any common RGB/gray image format (e.g., (".jpg", ".jpeg", ".png", ".ppm", ".bmp", ".pgm", ".tif", ".tiff", ".webp")) can be supported. +- Resolution depends on the GPU memory size. Higher resolution and more images will produce more tokens, thus using more GPU memory. During training, 64 crops can be supported. +If it is a square image, the resolution would be around (8*448 by 8*448). For multiple-images, at most 64 frames can be supported, but with more frames as input, the resolution of each frame needs to be reduced to fit in the memory. + +**Audio** +- Any audio format that can be loaded by soundfile package should be supported. +- To keep the satisfactory performance, maximum audio length is suggested to be 40s. For summarization tasks, the maximum audio length is suggested to 30 mins. + + +### Loading the model locally + +After obtaining the Phi-4-multimodal-instruct model checkpoints, users can use this sample code for inference. + +
+ Click to view details + +```python +import requests +import torch +import os +import io +from PIL import Image +import soundfile as sf +from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig +from urllib.request import urlopen + + +# Define model path +model_path = "microsoft/Phi-4-multimodal-instruct" + +# Load model and processor +processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True) +model = AutoModelForCausalLM.from_pretrained( + model_path, + device_map="cuda", + torch_dtype="auto", + trust_remote_code=True, + # if you do not use Ampere or later GPUs, change attention to "eager" + _attn_implementation='flash_attention_2', +).cuda() + +# Load generation config +generation_config = GenerationConfig.from_pretrained(model_path) + +# Define prompt structure +user_prompt = '<|user|>' +assistant_prompt = '<|assistant|>' +prompt_suffix = '<|end|>' + +# Part 1: Image Processing +print("\n--- IMAGE PROCESSING ---") +image_url = 'https://www.ilankelman.org/stopsigns/australia.jpg' +prompt = f'{user_prompt}<|image_1|>What is shown in this image?{prompt_suffix}{assistant_prompt}' +print(f'>>> Prompt\n{prompt}') + +# Download and open image +image = Image.open(requests.get(image_url, stream=True).raw) +inputs = processor(text=prompt, images=image, return_tensors='pt').to('cuda:0') + +# Generate response +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1]:] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') + +# Part 2: Audio Processing +print("\n--- AUDIO PROCESSING ---") +audio_url = "https://upload.wikimedia.org/wikipedia/commons/b/b0/Barbara_Sahakian_BBC_Radio4_The_Life_Scientific_29_May_2012_b01j5j24.flac" +speech_prompt = "Transcribe the audio to text, and then translate the audio to French. Use as a separator between the original transcript and the translation." +prompt = f'{user_prompt}<|audio_1|>{speech_prompt}{prompt_suffix}{assistant_prompt}' +print(f'>>> Prompt\n{prompt}') + +# Downlowd and open audio file +audio, samplerate = sf.read(io.BytesIO(urlopen(audio_url).read())) + +# Process with the model +inputs = processor(text=prompt, audios=[(audio, samplerate)], return_tensors='pt').to('cuda:0') + +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1]:] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') +``` +
+ +More inference examples can be found [**here**](https://huggingface.co/microsoft/Phi-4-multimodal-instruct/blob/main/sample_inference_phi4mm.py). + +### vLLM inference + +User can start a server with this command + +```bash +python -m vllm.entrypoints.openai.api_server --model 'microsoft/Phi-4-multimodal-instruct' --dtype auto --trust-remote-code --max-model-len 131072 --enable-lora --max-lora-rank 320 --lora-extra-vocab-size 0 --limit-mm-per-prompt audio=3,image=3 --max-loras 2 --lora-modules speech= vision= +``` + +The speech lora and vision lora folders are within the Phi-4-multimodal-instruct folder downloaded by vLLM, you can also use the following script to find thoses: + +```python +from huggingface_hub import snapshot_download +model_path = snapshot_download(repo_id="microsoft/Phi-4-multimodal-instruct") +speech_lora_path = model_path+"/speech-lora" +vision_lora_path = model_path+"/vision-lora" +``` + +## Training + +### Fine-tuning + +A basic example of supervised fine-tuning (SFT) for [**speech**](https://huggingface.co/microsoft/Phi-4-multimodal-instruct/resolve/main/sample_finetune_speech.py) and [**vision**](https://huggingface.co/microsoft/Phi-4-multimodal-instruct/resolve/main/sample_finetune_vision.py) is provided respectively. + +An example on [**how to extend speech recognition to a new language**.](https://huggingface.co/microsoft/Phi-4-multimodal-instruct#appendix-b-fine-tuning-korean-speech) + +### Model + ++ **Architecture:** Phi-4-multimodal-instruct has 5.6B parameters and is a multimodal transformer model. The model has the pretrained Phi-4-Mini-Instruct as the backbone language model, and the advanced encoders and adapters of vision and speech.
++ **Inputs:** Text, image, and audio. It is best suited for prompts using the chat format.
++ **Context length:** 128K tokens
++ **GPUs:** 512 A100-80G
++ **Training time:** 28 days
++ **Training data:** 5T tokens, 2.3M speech hours, and 1.1T image-text tokens
++ **Outputs:** Generated text in response to the input
++ **Dates:** Trained between December 2024 and January 2025
++ **Status:** This is a static model trained on offline datasets with the cutoff date of June 2024 for publicly available data.
++ **Supported languages:** + + Text: Arabic, Chinese, Czech, Danish, Dutch, English, Finnish, French, German, Hebrew, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Thai, Turkish, Ukrainian
+ + Vision: English
+ + Audio: English, Chinese, German, French, Italian, Japanese, Spanish, Portuguese
++ **Release date:** February 2025
+ +### Training Datasets + +Phi-4-multimodal-instruct's training data includes a wide variety of sources, totaling 5 trillion text tokens, and is a combination of +1) publicly available documents filtered for quality, selected high-quality educational data, and code +2) newly created synthetic, “textbook-like” data for the purpose of teaching math, coding, common sense reasoning, general knowledge of the world (e.g., science, daily activities, theory of mind, etc.) +3) high quality human labeled data in chat format +4) selected high-quality image-text interleave data +5) synthetic and publicly available image, multi-image, and video data +6) anonymized in-house speech-text pair data with strong/weak transcriptions +7) selected high-quality publicly available and anonymized in-house speech data with task-specific supervisions +8) selected synthetic speech data +9) synthetic vision-speech data. + +Focus was placed on the quality of data that could potentially improve the reasoning ability for the model, and the publicly available documents were filtered to contain a preferred level of knowledge. As an example, the result of a game in premier league on a particular day might be good training data for large foundation models, but such information was removed for the Phi-4-multimodal-instruct to leave more model capacity for reasoning for the model's small size. The data collection process involved sourcing information from publicly available documents, with a focus on filtering out undesirable documents and images. To safeguard privacy, image and text data sources were filtered to remove or scrub potentially personal data from the training data. +The decontamination process involved normalizing and tokenizing the dataset, then generating and comparing n-grams between the target dataset and benchmark datasets. Samples with matching n-grams above a threshold were flagged as contaminated and removed from the dataset. A detailed contamination report was generated, summarizing the matched text, matching ratio, and filtered results for further analysis. + +### Software +* [PyTorch](https://github.com/pytorch/pytorch) +* [Transformers](https://github.com/huggingface/transformers) +* [Flash-Attention](https://github.com/HazyResearch/flash-attention) +* [Accelerate](https://huggingface.co/docs/transformers/main/en/accelerate) +* [soundfile](https://github.com/bastibe/python-soundfile) +* [pillow](https://github.com/python-pillow/Pillow) + +### Hardware +Note that by default, the Phi-4-multimodal-instruct model uses flash attention, which requires certain types of GPU hardware to run. We have tested on the following GPU types: +* NVIDIA A100 +* NVIDIA A6000 +* NVIDIA H100 + +If you want to run the model on: +* NVIDIA V100 or earlier generation GPUs: call AutoModelForCausalLM.from_pretrained() with _attn_implementation="eager" + + +## Responsible AI Considerations +
+ Click to view detail descriptions + +Like other language models, the Phi family of models can potentially behave in ways that are unfair, unreliable, or offensive. Some of the limiting behaviors to be aware of include: ++ Quality of Service: The Phi models are trained primarily on English language content across text, speech, and visual inputs, with some additional multilingual coverage. Performance may vary significantly across different modalities and languages: + + Text: Languages other than English will experience reduced performance, with varying levels of degradation across different non-English languages. English language varieties with less representation in the training data may perform worse than standard American English. + + Speech: Speech recognition and processing shows similar language-based performance patterns, with optimal performance for standard American English accents and pronunciations. Other English accents, dialects, and non-English languages may experience lower recognition accuracy and response quality. Background noise, audio quality, and speaking speed can further impact performance. + + Vision: Visual processing capabilities may be influenced by cultural and geographical biases in the training data. The model may show reduced performance when analyzing images containing text in non-English languages or visual elements more commonly found in non-Western contexts. Image quality, lighting conditions, and composition can also affect processing accuracy. ++ Multilingual performance and safety gaps: We believe it is important to make language models more widely available across different languages, but the Phi 4 models still exhibit challenges common across multilingual releases. As with any deployment of LLMs, developers will be better positioned to test for performance or safety gaps for their linguistic and cultural context and customize the model with additional fine-tuning and appropriate safeguards. ++ Representation of Harms & Perpetuation of Stereotypes: These models can over- or under-represent groups of people, erase representation of some groups, or reinforce demeaning or negative stereotypes. Despite safety post-training, these limitations may still be present due to differing levels of representation of different groups, cultural contexts, or prevalence of examples of negative stereotypes in training data that reflect real-world patterns and societal biases. ++ Inappropriate or Offensive Content: These models may produce other types of inappropriate or offensive content, which may make it inappropriate to deploy for sensitive contexts without additional mitigations that are specific to the case. ++ Information Reliability: Language models can generate nonsensical content or fabricate content that might sound reasonable but is inaccurate or outdated. ++ Limited Scope for Code: The majority of Phi 4 training data is based in Python and uses common packages such as "typing, math, random, collections, datetime, itertools". If the model generates Python scripts that utilize other packages or scripts in other languages, it is strongly recommended that users manually verify all API uses. ++ Long Conversation: Phi 4 models, like other models, can in some cases generate responses that are repetitive, unhelpful, or inconsistent in very long chat sessions in both English and non-English languages. Developers are encouraged to place appropriate mitigations, like limiting conversation turns to account for the possible conversational drift. ++ Inference of Sensitive Attributes: The Phi 4 models can sometimes attempt to infer sensitive attributes (such as personality characteristics, country of origin, gender, etc...) from the users’ voices when specifically asked to do so. Phi 4-multimodal-instruct is not designed or intended to be used as a biometric categorization system to categorize individuals based on their biometric data to deduce or infer their race, political opinions, trade union membership, religious or philosophical beliefs, sex life, or sexual orientation. This behavior can be easily and efficiently mitigated at the application level by a system message. + +Developers should apply responsible AI best practices, including mapping, measuring, and mitigating risks associated with their specific use case and cultural, linguistic context. Phi 4 family of models are general purpose models. As developers plan to deploy these models for specific use cases, they are encouraged to fine-tune the models for their use case and leverage the models as part of broader AI systems with language-specific safeguards in place. Important areas for consideration include: + ++ Allocation: Models may not be suitable for scenarios that could have consequential impact on legal status or the allocation of resources or life opportunities (ex: housing, employment, credit, etc.) without further assessments and additional debiasing techniques. ++ High-Risk Scenarios: Developers should assess the suitability of using models in high-risk scenarios where unfair, unreliable or offensive outputs might be extremely costly or lead to harm. This includes providing advice in sensitive or expert domains where accuracy and reliability are critical (ex: legal or health advice). Additional safeguards should be implemented at the application level according to the deployment context. ++ Misinformation: Models may produce inaccurate information. Developers should follow transparency best practices and inform end-users they are interacting with an AI system. At the application level, developers can build feedback mechanisms and pipelines to ground responses in use-case specific, contextual information, a technique known as Retrieval Augmented Generation (RAG). ++ Generation of Harmful Content: Developers should assess outputs for their context and use available safety classifiers or custom solutions appropriate for their use case. ++ Misuse: Other forms of misuse such as fraud, spam, or malware production may be possible, and developers should ensure that their applications do not violate applicable laws and regulations. +
+ +## Safety +
+ Click to view detail descriptions + +The Phi-4 family of models has adopted a robust safety post-training approach. This approach leverages a variety of both open-source and in-house generated datasets. The overall technique employed for safety alignment is a combination of SFT (Supervised Fine-Tuning), DPO (Direct Preference Optimization), and RLHF (Reinforcement Learning from Human Feedback) approaches by utilizing human-labeled and synthetic English-language datasets, including publicly available datasets focusing on helpfulness and harmlessness, as well as various questions and answers targeted to multiple safety categories. For non-English languages, existing datasets were extended via machine translation. Speech Safety datasets were generated by running Text Safety datasets through Azure TTS (Text-To-Speech) Service, for both English and non-English languages. Vision (text & images) Safety datasets were created to cover harm categories identified both in public and internal multi-modal RAI datasets. + +### Safety Evaluation and Red-Teaming + +Various evaluation techniques including red teaming, adversarial conversation simulations, and multilingual safety evaluation benchmark datasets were leveraged to evaluate Phi-4 models' propensity to produce undesirable outputs across multiple languages and risk categories. Several approaches were used to compensate for the limitations of one approach alone. Findings across the various evaluation methods indicate that safety post-training that was done as detailed in the [Phi 3 Safety Post-Training paper](https://arxiv.org/abs/2407.13833) had a positive impact across multiple languages and risk categories as observed by refusal rates (refusal to output undesirable outputs) and robustness to jailbreak techniques. Details on prior red team evaluations across Phi models can be found in the [Phi 3 Safety Post-Training paper](https://arxiv.org/abs/2407.13833). For this release, the red teaming effort focused on the newest Audio input modality and on the following safety areas: harmful content, self-injury risks, and exploits. The model was found to be more susceptible to providing undesirable outputs when attacked with context manipulation or persuasive techniques. These findings applied to all languages, with the persuasive techniques mostly affecting French and Italian. This highlights the need for industry-wide investment in the development of high-quality safety evaluation datasets across multiple languages, including low resource languages, and risk areas that account for cultural nuances where those languages are spoken. + +### Vision Safety Evaluation + +To assess model safety in scenarios involving both text and images, Microsoft's Azure AI Evaluation SDK was utilized. This tool facilitates the simulation of single-turn conversations with the target model by providing prompt text and images designed to incite harmful responses. The target model's responses are subsequently evaluated by a capable model across multiple harm categories, including violence, sexual content, self-harm, hateful and unfair content, with each response scored based on the severity of the harm identified. The evaluation results were compared with those of Phi-3.5-Vision and open-source models of comparable size. In addition, we ran both an internal and the public RTVLM and VLGuard multi-modal (text & vision) RAI benchmarks, once again comparing scores with Phi-3.5-Vision and open-source models of comparable size. However, the model may be susceptible to language-specific attack prompts and cultural context. + +### Audio Safety Evaluation + +In addition to extensive red teaming, the Safety of the model was assessed through three distinct evaluations. First, as performed with Text and Vision inputs, Microsoft's Azure AI Evaluation SDK was leveraged to detect the presence of harmful content in the model's responses to Speech prompts. Second, [Microsoft's Speech Fairness evaluation](https://speech.microsoft.com/portal/responsibleai/assess) was run to verify that Speech-To-Text transcription worked well across a variety of demographics. Third, we proposed and evaluated a mitigation approach via a system message to help prevent the model from inferring sensitive attributes (such as gender, sexual orientation, profession, medical condition, etc...) from the voice of a user. +
+ +## License +The model is licensed under the [MIT license](./LICENSE). + +## Trademarks +This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks). Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies. + + +## Appendix A: Benchmark Methodology + +
+ Click to view detail descriptions + +We include a brief word on methodology here - and in particular, how we think about optimizing prompts. +In an ideal world, we would never change any prompts in our benchmarks to ensure it is always an apples-to-apples comparison when comparing different models. Indeed, this is our default approach, and is the case in the vast majority of models we have run to date. +There are, however, some exceptions to this. In some cases, we see a model that performs worse than expected on a given eval due to a failure to respect the output format. For example: + ++ A model may refuse to answer questions (for no apparent reason), or in coding tasks models may prefix their response with “Sure, I can help with that. …” which may break the parser. In such cases, we have opted to try different system messages (e.g. “You must always respond to a question” or “Get to the point!”). ++ Some models, we observed that few shots actually hurt model performance. In this case we did allow running the benchmarks with 0-shots for all cases. ++ We have tools to convert between chat and completions APIs. When converting a chat prompt to a completion prompt, some models have different keywords e.g. Human vs User. In these cases, we do allow for model-specific mappings for chat to completion prompts. + +However, we do not: + ++ Pick different few-shot examples. Few shots will always be the same when comparing different models. ++ Change prompt format: e.g. if it is an A/B/C/D multiple choice, we do not tweak this to 1/2/3/4 multiple choice. + +### Vision Benchmark Settings + +The goal of the benchmark setup is to measure the performance of the LMM when a regular user utilizes these models for a task involving visual input. To this end, we selected 9 popular and publicly available single-frame datasets and 3 multi-frame benchmarks that cover a wide range of challenging topics and tasks (e.g., mathematics, OCR tasks, charts-and-plots understanding, etc.) as well as a set of high-quality models. +Our benchmarking setup utilizes zero-shot prompts and all the prompt content are the same for every model. We only formatted the prompt content to satisfy the model's prompt API. This ensures that our evaluation is fair across the set of models we tested. Many benchmarks necessitate models to choose their responses from a presented list of options. Therefore, we've included a directive in the prompt's conclusion, guiding all models to pick the option letter that corresponds to the answer they deem correct. +In terms of the visual input, we use the images from the benchmarks as they come from the original datasets. We converted these images to base-64 using a JPEG encoding for models that require this format (e.g., GPTV, Claude Sonnet 3.5, Gemini 1.5 Pro/Flash). For other models (e.g., Llava Interleave, and InternVL2 4B and 8B), we used their Huggingface interface and passed in PIL images or a JPEG image stored locally. We did not scale or pre-process images in any other way. +Lastly, we used the same code to extract answers and evaluate them using the same code for every considered model. This ensures that we are fair in assessing the quality of their answers. + +### Speech Benchmark Settings + +The objective of this benchmarking setup is to assess the performance of models in speech and audio understanding tasks as utilized by regular users. To accomplish this, we selected several state-of-the-art open-sourced and closed-sourced models and performed evaluations across a variety of public and in-house benchmarks. These benchmarks encompass diverse and challenging topics, including Automatic Speech Recognition (ASR), Automatic Speech Translation (AST), Spoken Query Question Answering (SQQA), Audio Understanding (AU), and Speech Summarization. +The results are derived from evaluations conducted on identical test data without any further clarifications. All results were obtained without sampling during inference. For an accurate comparison, we employed consistent prompts for models across different tasks, except for certain model APIs (e.g., GPT-4o), which may refuse to respond to specific prompts for some tasks. +In conclusion, we used uniform code to extract answers and evaluate them for all considered models. This approach ensured fairness by assessing the quality of their responses. + +### Benchmark datasets + +The model was evaluated across a breadth of public and internal benchmarks to understand it's capabilities under multiple tasks and conditions. While most evaluations use English, multilingual benchmark was incorporated to cover performance in select languages. More specifically, ++ Vision: + + Popular aggregated benchmark: + + MMMU and MMMU-Pro: massive multi-discipline tasks at college-level subject knowledge and deliberate reasoning. + + MMBench: large-scale benchmark to evaluate perception and reasoning capabilities. + + Visual reasoning: + + ScienceQA: multimodal visual question answering on science. + + MathVista: visual math reasoning. + + InterGPS: Visual 2D geometry reasoning. + + Chart reasoning: + + ChartQA: visual and logical reasoning on charts. + + AI2D: diagram understanding. + + Document Intelligence: + + TextVQA: read and reason about text in images to answer questions about them. + + InfoVQA: read and reason about high-resolution infographics images with arbitrary aspect ratios. + + DocVQA: read and reason about document images with dense texts and handwritten texts. + + OCRBench: test OCR and QA capability on diverse text related images. + + Vision speech multimodal understanding: + + s_AI2D: diagram understanding with speech as the question format. + + s_ChartQA: visual and logical reasoning on charts with speech as the question format. + + s_InfoVQA: read and reason about high-resolution infographics images with speech as the question format. + + s_DocVQA: read and reason about document images with dense texts and handwritten texts with speech as the question format. + + RAI & Security Benchmarks: + + VLGuardExt: VLGuard is a vision-language instruction following public dataset for model safety to address safety on deception + discrimination, privacy and risky behavior (advice, sexual, violence, political). This was extended to a few internal categories such as child safety and election critical information. + + RTVLM: Public benchmark for red-teaming vision-language model on model truthfulness, privacy, safety, and fairness. + + GPTV-RAI: In-house benchmark for GPT-4V released from Azure AI, measuring harmfulness (ex. sexual, violent, hate and self-harm), privacy, jailbreak, misinformation. + ++ Speech: + + CommonVoice v15 is an open-source, multilingual speech dataset developed by Mozilla. It includes over 33,000 hours of speech data in 133 languages, contributed and validated by volunteers worldwide.The evaluations were conducted in the eight supported languages. + + The OpenASR Leaderboard on Hugging Face is designed for benchmarking and evaluating the robustness of ASR models on English. The datasets in the leaderboard cover diverse speech domains including reading speech, conversations, meetings, and so on. + + CoVoST2 is a multilingual speech-to-text translation dataset derived from Mozilla's Common Voice project. It is one of the largest open datasets available for speech translation, providing support for both X-to-English (X→En) and English-to-X (En→X) translation tasks. The directions with supported languages were evaluated on the test sets. + + FLEURS is a multilingual speech dataset designed for evaluating speech recognition and speech-to-text translation models across a wide range of languages. The test sets for speech recognition and translation tasks were evaluated with the eight supported languages. + + MT Bench (Multi-turn Benchmark) is specifically designed to evaluate the conversational and instruction-following abilities of AI models in multi-turn question-answering (QA) scenarios. To support spoken questions, the text is synthesized into speech. + + MMMLU (Multilingual Massive Multitask Language Understanding) is an extensive benchmark designed to evaluate the general knowledge and reasoning capabilities of AI models across a wide array of subjects. To support spoken questions, the text is synthesized into its speech counterpart. The model was evaluated on the eight supported languages for this test set. + + AIR-Bench Chat (Audio Instruction and Response Benchmark) is a comprehensive evaluation framework designed to test the capabilities of large audio language models (LALMs). It includes both foundation and chat benchmarks. The chat benchmark is selected for its open-ended question answering for audio capability. + + MMAU (Massive Multi-Task Audio Understanding) is a comprehensive dataset designed to evaluate the capabilities of multi-modal models in audio-based understanding and reasoning tasks. The test sets are in the form of multiple-choices QA, covering the categories of music, sound, and speech. + + Golden3 is a real-world meeting dataset, containing 108 meeting recordings with corresponding transcripts, averaging 6 minutes each. It is recorded across 30 conference rooms, featuring 4-8 attendees. The dataset is primarily in English, covering a wide range of topics. GPT4 is employed to generate summarization instructions that ask to summarize partial or the entire conversation or control the output style/length/structure. + + AMI (Augmented Multi-Party Interaction) is a comprehensive collection of meeting recordings, encompassing approximately 100 hours of data. The test split contains 20 meeting recordings with an average duration of 32 minutes. The model was tested on the close-talking version of audio. GPT4 is employed to generate summarization instructions that ask to summarize partial or the entire conversation or control the output style/length/structure. + ++ Safety and RAI: + + Single-turn trustworthiness evaluation: + + DecodingTrust: DecodingTrust is a collection of trustworthiness benchmarks in eight different perspectives + + XSTest: XSTest is an exaggerated safety evaluation + + Toxigen: Toxigen is adversarial and hate speech detection + + Red Team: + + Responses to prompts provided by AI Red Team at Microsoft +
+ + +## Appendix B: Fine-tuning Korean speech + +
+ Click to view detail descriptions + +### Overview and Datasets + +Phi-4-multimodal is originally not designed for Korean speech-to-text task, but it can be fine-tuned for Korean speech-to-text task using your own data or public Korean speech datasets. + +We have fine-tuned Phi-4-multimodal model for Korean speech-to-text task using the following datasets: + +- kresnik/zeroth_korean +- mozilla-foundation/common_voice_17_0 (Used Korean speech only) +- PolyAI/minds14 (Used Korean speech only) +- Custom dataset. The speech was a mix of fast and slow speech (Technical blog contents and presentations that the author have posted), with some modulation using [audiomentations](https://github.com/iver56/audiomentations) and [this script](https://github.com/daekeun-ml/azure-genai-utils/blob/main/azure_genai_utils/stt/augment.py) + +Total 35K samples. Each sample is a pair of Korean speech and its transcription. Dataset was sampled 16kHz. + +You can download the fine-tuned model [here](https://huggingface.co/daekeun-ml/Phi-4-multimodal-finetune-ko-speech). Please refer to the Jupyter notebook and video clips in the [demo folder](https://huggingface.co/daekeun-ml/Phi-4-multimodal-finetune-ko-speech/tree/main/demos). They are not production-quality as they were simply fine-tuned for PoC purposes, but you can see that they transcribe and translate with high accuracy even when a native speaker speaks quite quickly. + +### Requirements +Based on Python 3.10, the following packages are required, and A100/H100 GPU is recommended. +``` +torch==2.6.0 +transformers==4.48.2 +accelerate==1.4.0 +soundfile==0.13.1 +pillow==11.1.0 +scipy==1.15.2 +torchvision==0.21.0 +backoff==2.2.1 +peft==0.14.0 +datasets==3.3.2 +pandas==2.2.3 +flash_attn==2.7.4.post1 +evaluate==0.4.3 +sacrebleu==2.5.1 +``` + +### Training +The model was trained on a single A100 80GB GPU for 4 epochs with a batch size of 16 using the `sample_finetune_speech.py` script from [microsoft/Phi-4-multimodal-instruct](https://huggingface.co/microsoft/Phi-4-multimodal-instruct) + +The fine tuning script and command line are basically the same as [here](https://gist.github.com/seastar105/d1d8983b27611370528e3b194dcc5577#file-main-py), but you need to prepare your own dataset. Also, to perform audio encoder unfreeze, please refer to the code snippet below. The code snippet is retrieved from [the fine-tuning Colab notebook](https://colab.research.google.com/drive/1JAQdpX3BtIgDmTLlnHgstKfGw7HjSfej?usp=sharing). + +```python +with accelerator.local_main_process_first(): + processor = AutoProcessor.from_pretrained( + "microsoft/Phi-4-multimodal-instruct", + trust_remote_code=True, + ) + model = create_model( + args.model_name_or_path, + use_flash_attention=args.use_flash_attention, + ) + +def unfreeze_speech_components(model): + """Directly target verified components from your debug logs""" + # 1. Audio Embed Module (confirmed exists) + audio_embed = model.model.embed_tokens_extend.audio_embed + + # 2. Entire Audio Encoder (simplified) + audio_encoder = audio_embed.encoder # Direct access + + # 3. Audio Projection (from debug logs) + audio_projection = audio_embed.audio_projection + + # Unfreeze ONLY these 3 components + for component in [audio_embed, audio_encoder, audio_projection]: + for param in component.parameters(): + param.requires_grad = True + return model + +model = unfreeze_speech_components(model) + +# Verify unfrozen parameters +trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad) +print(f"Trainable parameters: {trainable_params:,}") + +# After unfreezing +encoder_params = list(model.model.embed_tokens_extend.audio_embed.encoder.parameters()) +proj_params = list(model.model.embed_tokens_extend.audio_embed.audio_projection.parameters()) + +assert any(p.requires_grad for p in encoder_params), "Encoder params frozen!" +assert any(p.requires_grad for p in proj_params), "Projection params frozen!" +print("Components properly unfrozen ✅") +``` + +Example commands to run finetuning scripts are as follows: +```bash +python main.py +``` + +The latest version of the model currently uploaded was fine-tuned by **unfreezing the audio encoder**, and the ASR performance was significantly improved compared to the baseline LoRA adapter-based fine-tuning. +Comparing the full fine-tuning and LoRA fine-tuning, the CER on zeroth-test set is **1.61%** and 2.72%, and the WER on zeroth-test set is **3.54%** and 7.19%, respectively. Please refer to the [Experimental Settings and Results](#experimental-settings-and-results) for more details. + +### Experimental Settings and Results +The purpose of this benchmarking setup is to evaluate the basic performance of Korean audio in speech and audio understanding tasks. We did this for automatic speech recognition and automatic speech translation, and the test data used the following datasets and samples: + +Evaluation was done on the following datasets: ++ ASR (Automatic Speech Recognition): Evaluated with CER (Character Error Rate) and WER (Word Error Rate) on [zeroth-test set (457 samples)](https://huggingface.co/datasets/kresnik/zeroth_korean). ++ AST (Automatic Speech Translation): Evaluated with BLEU score on [fleurs ko <-> en speech translation test set (270 samples)](https://huggingface.co/datasets/seastar105/fleurs_ko_en_test). + +Evaluation Script is retrieved from [here](https://gist.github.com/seastar105/d1d8983b27611370528e3b194dcc5577#file-evaluate-py) + +We used the [Phi-4-mm-inst-zeroth-kor](https://huggingface.co/seastar105/Phi-4-mm-inst-zeroth-kor) as a baseline to improve performance, as it showed significant performance improvement with 1 epoch. Note that the baseline was trained with [22K Zeroth Korean Korean speech data](https://huggingface.co/datasets/kresnik/zeroth_korean) for 1 epoch. Based on this baseline with 35K training samples, we conducted additional experiments with the following scenarios: + ++ [Case 1] LoRA finetune (1 epoch): LoRA adapter-based fine-tuning for 1 epochs ++ [Case 2] LoRA finetune (4 epochs): LoRA adapter-based fine-tuning for 4 epochs ++ [Case 3] Unfreeze audio encoder finetune (4 epochs): Full fine-tuning for 4 epochs. + +The results of the experiments are as follows: ++ CER and WER for zeroth-test set (Lower is better) + + Case 1's CER and WER are 3.80% and 11.52%, respectively, which are better than the baseline (7.02% and 17.31%). + + Case 2's CER and WER are 2.72% and 7.19%, respectively, which are better than Case 1. + + Case 3's CER and WER are 1.61% and 3.54%, respectively, which are the best among the cases. + ++ BLEU score for fleurs ko <-> en speech translation test set (Higher is better) + + Case 1's result is not improved compared to the baseline. Especially, the BLEU score for fleurs-ko2en-cot is decreased compared to the baseline. + + Case 2's result is slightly improved compared to Case 1, which is the best among the cases. + + Case 3's result is not improved compared to the baseline and Case 2. + +| Model | zeroth (CER) | zeroth (WER) | fleurs-ko2en | fleurs-ko2en-cot | fleurs-en2ko | fleurs-en2ko-cot | +|--------------------------------|-------------|-------------|--------------|------------------|--------------|------------------| +| original | 99.16 | 99.63 | 5.63 | 2.42 | 6.86 | 4.17 | +| Ours - speech full finetune (4 epochs) | 1.61 | 3.54 | 7.67 | 8.38 | 12.31 | 9.69 | +| LoRA finetune (4 epochs) | 2.72 | 7.19 | 7.11 | 9.95 | 13.22 | 10.45 | +| LoRA finetune (1 epoch) | 3.80 | 11.52 | 7.03 | 7.04 | 12.50 | 9.54 | +| Phi-4-mm-inst-zeroth-kor | 7.02 | 17.31 | 7.07 | 9.19 | 13.08 | 9.35 | + +## Cautions + +Note that this model is just a PoC/experimental purpose, and not intended to be used in production. More high-quality data, tuning, ablation studies, and experiments are needed. + +Phi-4-multimodal model is strong in multimodal tasks, especially in speech-to-text and high potential in Korean language tasks. Thus if you are interested in Korean speech-to-text task, this model can be a good starting point. + +## References + +- https://huggingface.co/microsoft/Phi-4-multimodal-instruct +- https://huggingface.co/seastar105/Phi-4-mm-inst-zeroth-kor + +## Data Summary +https://huggingface.co/microsoft/Phi-4-multimodal-instruct/blob/main/data_summary_card.md + +
\ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..b3c89ef --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd). + + diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..291d4d4 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,25 @@ +# TODO: The maintainer of this repo has not yet edited this file + +**REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project? + +- **No CSS support:** Fill out this template with information about how to file issues and get help. +- **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps. +- **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide. + +*Then remove this first heading from this SUPPORT.MD file before publishing your repo.* + +# Support + +## How to file issues and get help + +This project uses GitHub Issues to track bugs and feature requests. Please search the existing +issues before filing new issues to avoid duplicates. For new issues, file your bug or +feature request as a new Issue. + +For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE +FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER +CHANNEL. WHERE WILL YOU HELP PEOPLE?**. + +## Microsoft Support Policy + +Support for this **PROJECT or PRODUCT** is limited to the resources listed above. diff --git a/added_tokens.json b/added_tokens.json new file mode 100644 index 0000000..af52cde --- /dev/null +++ b/added_tokens.json @@ -0,0 +1,12 @@ +{ + "<|/tool_call|>": 200026, + "<|/tool|>": 200024, + "<|assistant|>": 200019, + "<|end|>": 200020, + "<|system|>": 200022, + "<|tag|>": 200028, + "<|tool_call|>": 200025, + "<|tool_response|>": 200027, + "<|tool|>": 200023, + "<|user|>": 200021 +} diff --git a/config.json b/config.json new file mode 100644 index 0000000..6f294fb --- /dev/null +++ b/config.json @@ -0,0 +1,221 @@ +{ + "_name_or_path": "Phi-4-multimodal-instruct", + "architectures": [ + "Phi4MMForCausalLM" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "audio_processor": { + "config": { + "activation": "swish", + "activation_checkpointing": { + "interval": 1, + "module": "transformer", + "offload": false + }, + "attention_dim": 1024, + "attention_heads": 16, + "batch_norm": false, + "bias_in_glu": true, + "causal": true, + "chunk_size": -1, + "cnn_layer_norm": true, + "conv_activation": "swish", + "conv_glu_type": "swish", + "depthwise_multiplier": 1, + "depthwise_seperable_out_channel": 1024, + "dropout_rate": 0.0, + "encoder_embedding_config": { + "input_size": 80 + }, + "ext_pw_kernel_size": 1, + "ext_pw_out_channel": 1024, + "input_layer": "nemo_conv", + "input_size": 80, + "kernel_size": 3, + "left_chunk": 18, + "linear_units": 1536, + "nemo_conv_settings": { + "conv_channels": 1024 + }, + "num_blocks": 24, + "relative_attention_bias_args": { + "t5_bias_max_distance": 500, + "type": "t5" + }, + "time_reduction": 8 + }, + "name": "cascades" + }, + "auto_map": { + "AutoConfig": "configuration_phi4mm.Phi4MMConfig", + "AutoModelForCausalLM": "modeling_phi4mm.Phi4MMForCausalLM", + "AutoTokenizer": "Xenova/gpt-4o" + }, + "bos_token_id": 199999, + "embd_layer": { + "audio_embd_layer": { + "compression_rate": 8, + "downsample_rate": 1, + "embedding_cls": "audio", + "enable_gradient_checkpointing": true, + "projection_cls": "mlp", + "use_conv_downsample": false, + "use_qformer": false + }, + "embedding_cls": "image_audio", + "image_embd_layer": { + "crop_size": 448, + "embedding_cls": "tune_image", + "enable_gradient_checkpointing": true, + "hd_transform_order": "sub_glb", + "image_token_compression_cls": "avg_pool_2d", + "projection_cls": "mlp", + "use_hd_transform": true, + "with_learnable_separator": true + } + }, + "embd_pdrop": 0.0, + "eos_token_id": 199999, + "full_attn_mod": 1, + "hidden_act": "silu", + "hidden_size": 3072, + "initializer_range": 0.02, + "intermediate_size": 8192, + "interpolate_factor": 1, + "lm_head_bias": false, + "vision_lora": { + "dp": 0.0, + "layer": "layers.*((self_attn\\.(qkv_proj|o_proj))|(mlp\\.(gate_up|down)_proj))", + "lora_alpha": 512, + "r": 256 + }, + "speech_lora": { + "dp": 0.01, + "layer": "((layers.*self_attn\\.(qkv|o)_proj)|(layers.*mlp\\.(gate_up|down)_proj))", + "lora_alpha": 640, + "r": 320 + }, + "max_position_embeddings": 131072, + "mlp_bias": false, + "model_type": "phi4mm", + "num_attention_heads": 24, + "num_hidden_layers": 32, + "num_key_value_heads": 8, + "original_max_position_embeddings": 4096, + "pad_token_id": 199999, + "partial_rotary_factor": 0.75, + "resid_pdrop": 0.0, + "rms_norm_eps": 1e-05, + "rope_scaling": { + "long_factor": [ + 1, + 1.118320672, + 1.250641126, + 1.398617824, + 1.564103225, + 1.74916897, + 1.956131817, + 2.187582649, + 2.446418898, + 2.735880826, + 3.059592084, + 3.421605075, + 3.826451687, + 4.279200023, + 4.785517845, + 5.351743533, + 5.984965424, + 6.693110555, + 7.485043894, + 8.370679318, + 9.36110372, + 10.4687158, + 11.70738129, + 13.09260651, + 14.64173252, + 16.37415215, + 18.31155283, + 20.47818807, + 22.90118105, + 25.61086418, + 28.64115884, + 32.03, + 32.1, + 32.13, + 32.23, + 32.6, + 32.61, + 32.64, + 32.66, + 32.7, + 32.71, + 32.93, + 32.97, + 33.28, + 33.49, + 33.5, + 44.16, + 47.77 + ], + "short_factor": [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "type": "longrope" + }, + "rope_theta": 10000.0, + "sliding_window": 262144, + "tie_word_embeddings": true, + "torch_dtype": "bfloat16", + "transformers_version": "4.46.1", + "use_cache": true, + "vocab_size": 200064, + "_attn_implementation": "flash_attention_2" +} diff --git a/configuration.json b/configuration.json new file mode 100644 index 0000000..6cd8e6e --- /dev/null +++ b/configuration.json @@ -0,0 +1 @@ +{"framework": "pytorch", "task": "automatic-speech-recognition", "allow_remote": true} \ No newline at end of file diff --git a/configuration_phi4mm.py b/configuration_phi4mm.py new file mode 100644 index 0000000..0abf419 --- /dev/null +++ b/configuration_phi4mm.py @@ -0,0 +1,235 @@ +# coding=utf-8 +# Copyright 2024 Microsoft and the HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" Phi-4-MM model configuration""" + +from transformers.configuration_utils import PretrainedConfig +from transformers.utils import logging + + +logger = logging.get_logger(__name__) + + +class Phi4MMConfig(PretrainedConfig): + r""" + This is the configuration class to store the configuration of a [`Phi4MMModel`]. It is used to instantiate a Phi-4-MM + model according to the specified arguments, defining the model architecture. + + Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the + documentation from [`PretrainedConfig`] for more information. + + Args: + vocab_size (`int`, *optional*, defaults to 200064): + Vocabulary size of the Phi-4-MM model. Defines the number of different tokens that can be represented by the + `inputs_ids` passed when calling [`Phi4MMModel`]. + hidden_size (`int`, *optional*, defaults to 3072): + Dimension of the hidden representations. + intermediate_size (`int`, *optional*, defaults to 8192): + Dimension of the MLP representations. + num_hidden_layers (`int`, *optional*, defaults to 32): + Number of hidden layers in the Transformer decoder. + num_attention_heads (`int`, *optional*, defaults to 32): + Number of attention heads for each attention layer in the Transformer decoder. + num_key_value_heads (`int`, *optional*): + This is the number of key_value heads that should be used to implement Grouped Query Attention. If + `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if + `num_key_value_heads=1` the model will use Multi Query Attention (MQA) otherwise GQA is used. When + converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed + by meanpooling all the original heads within that group. For more details checkout [this + paper](https://arxiv.org/pdf/2305.13245.pdf). If it is not specified, will default to + `num_attention_heads`. + resid_pdrop (`float`, *optional*, defaults to 0.0): + Dropout probability for mlp outputs. + embd_pdrop (`int`, *optional*, defaults to 0.0): + The dropout ratio for the embeddings. + attention_dropout (`float`, *optional*, defaults to 0.0): + The dropout ratio after computing the attention scores. + hidden_act (`str` or `function`, *optional*, defaults to `"silu"`): + The non-linear activation function (function or string) in the decoder. + max_position_embeddings (`int`, *optional*, defaults to 4096): + The maximum sequence length that this model might ever be used with. + original_max_position_embeddings (`int`, *optional*, defaults to 4096): + The maximum sequence length that this model was trained with. This is used to determine the size of the + original RoPE embeddings when using long scaling. + initializer_range (`float`, *optional*, defaults to 0.02): + The standard deviation of the truncated_normal_initializer for initializing all weight matrices. + rms_norm_eps (`float`, *optional*, defaults to 1e-05): + The epsilon value used for the RMSNorm. + use_cache (`bool`, *optional*, defaults to `True`): + Whether or not the model should return the last key/values attentions (not used by all models). Only + relevant if `config.is_decoder=True`. Whether to tie weight embeddings or not. + tie_word_embeddings (`bool`, *optional*, defaults to `False`): + Whether to tie weight embeddings + rope_theta (`float`, *optional*, defaults to 10000.0): + The base period of the RoPE embeddings. + rope_scaling (`dict`, *optional*): + The scaling strategy for the RoPE embeddings. If `None`, no scaling is applied. If a dictionary, it must + contain the following keys: `type`, `short_factor` and `long_factor`. The `type` must be `longrope` and + the `short_factor` and `long_factor` must be lists of numbers with the same length as the hidden size + divided by the number of attention heads divided by 2. + partial_rotary_factor (`float`, *optional*, defaults to 0.5): + Percentage of the query and keys which will have rotary embedding. + bos_token_id (`int`, *optional*, defaults to 199999): + The id of the "beginning-of-sequence" token. + eos_token_id (`int`, *optional*, defaults to 199999): + The id of the "end-of-sequence" token. + pad_token_id (`int`, *optional*, defaults to 199999): + The id of the padding token. + sliding_window (`int`, *optional*): + Sliding window attention window size. If `None`, no sliding window is applied. + + Example: + + ```python + >>> from transformers import Phi4MMModel, Phi4MMConfig + + >>> # Initializing a Phi-4-MM style configuration + >>> configuration = Phi4MMConfig.from_pretrained("TBA") + + >>> # Initializing a model from the configuration + >>> model = Phi4MMModel(configuration) + + >>> # Accessing the model configuration + >>> configuration = model.config + ```""" + + model_type = "phi4mm" + keys_to_ignore_at_inference = ["past_key_values"] + + def __init__( + self, + vocab_size=200064, + hidden_size=3072, + intermediate_size=8192, + num_hidden_layers=32, + num_attention_heads=32, + num_key_value_heads=None, + resid_pdrop=0.0, + embd_pdrop=0.0, + attention_dropout=0.0, + hidden_act="silu", + max_position_embeddings=4096, + original_max_position_embeddings=4096, + initializer_range=0.02, + rms_norm_eps=1e-5, + use_cache=True, + tie_word_embeddings=False, + rope_theta=10000.0, + rope_scaling=None, + partial_rotary_factor=1, + bos_token_id=199999, + eos_token_id=199999, + pad_token_id=199999, + sliding_window=None, + embd_layer: str = "default", + img_processor=None, + audio_processor=None, + vision_lora=None, + speech_lora=None, + **kwargs, + ): + self.embd_layer = embd_layer + self.img_processor = img_processor + self.audio_processor = audio_processor + self.vision_lora = vision_lora + self.speech_lora = speech_lora + + self.vocab_size = vocab_size + self.hidden_size = hidden_size + self.intermediate_size = intermediate_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + + if num_key_value_heads is None: + num_key_value_heads = num_attention_heads + + self.num_key_value_heads = num_key_value_heads + self.resid_pdrop = resid_pdrop + self.embd_pdrop = embd_pdrop + self.attention_dropout = attention_dropout + self.hidden_act = hidden_act + self.max_position_embeddings = max_position_embeddings + self.original_max_position_embeddings = original_max_position_embeddings + self.initializer_range = initializer_range + self.rms_norm_eps = rms_norm_eps + self.use_cache = use_cache + self.rope_theta = rope_theta + self.rope_scaling = rope_scaling + self.partial_rotary_factor = partial_rotary_factor + self._rope_scaling_adjustment() + self._rope_scaling_validation() + self.sliding_window = sliding_window + + super().__init__( + bos_token_id=bos_token_id, + eos_token_id=eos_token_id, + pad_token_id=pad_token_id, + tie_word_embeddings=tie_word_embeddings, + **kwargs, + ) + + def _rope_scaling_adjustment(self): + """ + Adjust the `type` of the `rope_scaling` configuration for backward compatibility. + """ + if self.rope_scaling is None: + return + + rope_scaling_type = self.rope_scaling.get("type", None) + + # For backward compatibility if previous version used "su" or "yarn" + if rope_scaling_type is not None and rope_scaling_type in ["su", "yarn"]: + self.rope_scaling["type"] = "longrope" + + def _rope_scaling_validation(self): + """ + Validate the `rope_scaling` configuration. + """ + if self.rope_scaling is None: + return + + if not isinstance(self.rope_scaling, dict) or len(self.rope_scaling) != 3: + raise ValueError( + "`rope_scaling` must be a dictionary with three fields, `type`, `short_factor` and `long_factor`, " + f"got {self.rope_scaling}" + ) + rope_scaling_type = self.rope_scaling.get("type", None) + rope_scaling_short_factor = self.rope_scaling.get("short_factor", None) + rope_scaling_long_factor = self.rope_scaling.get("long_factor", None) + if rope_scaling_type is None or rope_scaling_type not in ["longrope"]: + raise ValueError(f"`rope_scaling`'s type field must be one of ['longrope'], got {rope_scaling_type}") + if not ( + isinstance(rope_scaling_short_factor, list) + and all(isinstance(x, (int, float)) for x in rope_scaling_short_factor) + ): + raise ValueError( + f"`rope_scaling`'s short_factor field must be a list of numbers, got {rope_scaling_short_factor}" + ) + rotary_ndims = int(self.hidden_size // self.num_attention_heads * self.partial_rotary_factor) + if not len(rope_scaling_short_factor) == rotary_ndims // 2: + raise ValueError( + f"`rope_scaling`'s short_factor field must have length {rotary_ndims // 2}, got {len(rope_scaling_short_factor)}" + ) + if not ( + isinstance(rope_scaling_long_factor, list) + and all(isinstance(x, (int, float)) for x in rope_scaling_long_factor) + ): + raise ValueError( + f"`rope_scaling`'s long_factor field must be a list of numbers, got {rope_scaling_long_factor}" + ) + if not len(rope_scaling_long_factor) == rotary_ndims // 2: + raise ValueError( + f"`rope_scaling`'s long_factor field must have length {rotary_ndims // 2}, got {len(rope_scaling_long_factor)}" + ) diff --git a/data_summary_card.md b/data_summary_card.md new file mode 100644 index 0000000..5034aa2 --- /dev/null +++ b/data_summary_card.md @@ -0,0 +1,149 @@ + + + + +# Data Summary for microsoft_Phi-4-multimodal-instruct + + + + + +## 1. General information + +**1.0.1 Version of the Summary:** 1.0 + + + +**1.0.2 Last update:** 10-Dec-2025 + + + +## 1.1 Model Developer Identification + +**1.1.1 Model Developer name and contact details:** Microsoft Corporation at One Microsoft Way, Redmond, WA 98052. Tel: 425-882-8080. + + + +## 1.2 Model Identification + +**1.2.1 Versioned model name(s):** Phi-4-multimodal-instruct + + + +**1.2.2 Model release date:** February 2025 + + + +## 1.3 Overall training data size and characteristics + +### 1.3.1 Size of dataset and characteristics + +**1.3.1.A Text training data size:** 1 billion to 10 trillion tokens + + + +**1.3.1.B Text training data content:** Publicly available documents filtered for quality, selected educational data, and code; newly created synthetic, “textbook-like” data for the purpose of teaching math, coding, common sense reasoning, general knowledge of the world (e.g., science, daily activities, theory of mind, etc.); human labeled data in chat format; selected image-text interleave data; transcriptions + + + +**1.3.1.C Image training data size:** 1 million to 1 billion images + + + +**1.3.1.D Image training data content:** Selected image-text interleaved data, including synthetic and publicly available images, multi-image sets, and video-derived visual data, filtered for quality and relevance to reasoning tasks + + + +**1.3.1.E Audio training data size:** More than 1 million hours + + + +**1.3.1.F Audio training data content:** Anonymized in-house speech-text pairs with strong and weak transcriptions, selected publicly available and anonymized in-house speech data with task-specific supervision, and selected synthetic speech data supporting automatic speech recognition, translation, QA, and understanding + + + +**1.3.1.G Video training data size:** Not applicable + + + +**1.3.1.H Video training data content:** Not applicable. Video must be treated as a sequence of images. + + + +**1.3.1.I Other training data size:** Not applicable + + + +**1.3.1.J Other training data content:** Not applicable + + + +**1.3.2 Latest date of data acquisition/collection for model training:** June 2024 + + + +**1.3.3 Is data collection ongoing to update the model with new data collection after deployment?** No + + + +**1.3.4 Date the training dataset was first used to train the model:** December 2024 + + + +**1.3.5 Rationale or purpose of data selection:** Data was curated to improve reasoning abilities, including math, coding, common sense, and general knowledge, while filtering publicly available documents to focus model capacity on high-quality content. Additional multimodal data supports image understanding, OCR, chart and table parsing, speech recognition and translation, and instruction following + + + +## 2. List of data sources + +### 2.1 Publicly available datasets + +**2.1.1 Have you used publicly available datasets to train the model?** Yes + + + +## 2.2 Private non-publicly available datasets obtained from third parties + +### 2.2.1 Datasets commercially licensed by rights holders or their representatives + +**2.2.1.A Have you concluded transactional commercial licensing agreement(s) with rights holder(s) or with their representatives?** Not applicable + + + +### 2.2.2 Private datasets obtained from other third-parties + +**2.2.2.A Have you obtained private datasets from third parties that are not licensed as described in Section 2.2.1, such as data obtained from providers of private databases, or data intermediaries?** No + + + +## 2.3 Personal Information + +**2.3.1 Was personal data used to train the model?** Microsoft follows all relevant laws and regulations pertaining to personal information. + + + +## 2.4 Synthetic data + +**2.4.1 Was any synthetic AI-generated data used to train the model?** Yes + + + +## 3. Data processing aspects + +### 3.1 Respect of reservation of rights from text and data mining exception or limitation + +**3.1.1 Does this dataset include any data protected by copyright, trademark, or patent?** Microsoft follows all required regulations and laws for processing data protected by copyright, trademark, or patent. + + + +## 3.2 Other information + +**3.2.1 Does the dataset include information about consumer groups without revealing individual consumer identities?** Microsoft follows all required regulations and laws for protecting consumer identities. + + + +**3.2.2 Was the dataset cleaned or modified before model training?** Yes + + + + \ No newline at end of file diff --git a/examples/what_is_shown_in_this_image.wav b/examples/what_is_shown_in_this_image.wav new file mode 100644 index 0000000000000000000000000000000000000000..e66c76e29073e0d89a8cd11944b56b1387f4245c GIT binary patch literal 112844 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%0A` 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 z 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≀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 A6951J literal 0 HcmV?d00001 diff --git a/figures/audio_understand.png b/figures/audio_understand.png new file mode 100644 index 0000000000000000000000000000000000000000..84352fa966516ad48e305d4e8bc30f55663a8bf3 GIT binary patch literal 42645 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

dKFHlZ9SBqsnY$@hiKdvk;b8t9jYX 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 z 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

2iWCPYn1siQX`jn<0HH>| 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

WT$1-qDywy`1}{@o zYi{>_5v)j!5syPT6qU@tut_x>-oF9}di>_!@#^z@{fb?1_TrlLlMD3no~`YC2u_S_ zWf7AUrN+rGsPAF`lcnI37ZSzWeEpb~9j3$;O58wCfr)8k1Bp;rbi5F7guqEy+1p0| z=lECAJawZ*UvPW8_>P%q*6^ZuTZhm7*~cHXzlp*>rL@3WUeCPhton5Fd(i1t)2r%l z2z(}{*JA`(elLK7yi9*kDT(w8UH{Mn4Hl%v4m=^Tfou*KEg`|THNMG(M)_ml zKDb}`UM#kAtnxQ5x8lLb_VmK;wWMz#g#mU^pnD{j(p;85r~DC(*L%vhuWY_NHB<2C zoxW8(C519RNMJaD@zH6io^rYaiKm{(R5aC*d6@ojZea~Q|M#00t*xyQ zz9tJ=2MRhex9ik)^<*N1ziSWeTQ@ffWD3khY>Wo<1w1L@IkGnnr`8UbD5utTa{an4 z=DT`)M;#^pR;SC$%kf!O-P#T^A~jGjZh5yS?A%h-N}kK49g+HVE{P>2pP6d3BQD@ zHBZG%jjeh~W}f%LvzoB#i6R4p%=%e&0Q~LjlT_T277XJu+mtR?B!+9dGf|y1rIS^g zR&LSt;q3Im<(Ro_W;ZEsqu4G0tqV<462*g&l5DjwHNxRv?u6VYb>mIrwjJB1fVKiUi-PF# zWmfr!l=v?A4(|$)B;bLre4Op{q$jrksO_WfW7$cJttnk!a5uld{IZfh;h<~0F}I&W z(rkTUM+QLK6WODVBPaq)7{!&N=_}S377J%Iz=WRx9u0f_$KB2zM(5wgaA!TsMP;fDq4D5y*`{65Bet9{55X}(W)1|-52$jrPKiOr_($-e5 z=*imS6EKCW`8@i~J#Gc;XYTC=m&3F9J<4Ox6%=ylci-p%6ziXT0dzGWWhuyRE_MLX-t|;&k zHo2Ubn3pJaPpd*q3Kq`JDAApOVAfUa)OV`#XMYfq+N5gn^vXm3}`xl1n= zqOfsdV%m9vxr>UH?1UhS95<=#=wT(ES;@R-^?~e+1_07~Xd~yGG7+CM^Zc}$Ad>1J z%&M5djW}VUN4q%9Qt4jzy=&?2tBbvl*YAt7F7bt+~55l8v_yu*7{nneyym767t*AWTNn#eg!O~n!Y5__|| zg6Wzp9D7%+S*O9;HHz?LXnx)jtcpUoB-=_lsF!&3z|$vk=sD%ilEHIoSoe)3Il0Wz zpDi^(EBYkmB{{nEvR+QI$h}t&00oTOJEPtmEqi732`4eaoS?dbQZd=1Vup$G@q^-6 zu!92p0`2+}PO`5)P0v2(>e35L@=#qr5#`QIhAvWZYJr_(EK`>+zC=&Dz%93UMs-qG z={tetM-M(bcCpW-rlFA(vK;kcUx`~ynamkmbTiL1T=aD_%h}do?CRLgm?(r7p2eSm zQb|`wI&(9s?$aZ9pb5t3s@Hf+o6AF0riiS|(JdeWwL6y5i9KGJrJTed$&wPSVtOy@ zO}7HO>umrw2bGp$hWf4WKNx4S^XJ_|TdXVTm8dxZj!zhG{)5RuWi!}{P^WRK>D^YJ zB+I^A{nn^=GUxH)(Vf%>?o8xh_C1CD{6d^bf1**sCB8={nd= z@GLV>^YO#yI6zs3KVjTm`tB~n-k=f#Y7i(?-6Ltej#P6B3(y9iOLDHnp$5oy%x%c^ za)M-q0tRX_OcI_NO3uJG$$&CW%=w#smTjb3>Vw_ySXfy3JbpX2x1-c4HJ+5!*tC7` zp{fXL@Amq#f-x(<>WFwlW9X;PE+`;PEFq-g>xgPYtg0aJ!1q#jjsR=|vVJd@;FiKGJ#oDzq6Y z`9Qg)rlws88<6`cW%2hSbzNgx2XnwY`hZ!F2yzeT(Ami^*S65$PN72#l$*C#*4>Xt{aPtoa z8FQbP=D&=2ja2f}k7b$A$zQ+uIw^e8+qO&W$#=RZ{%~Mkb0Mq?ypY}e@!@*xD!L~% zmsw-2Ohkfy;H{bFVCmWn;`ANbjHq9AKN~a-4h}TSiyW>fMQ7(FIg64--av_vx$^b> zQjiN@295&pxA|(8TPL?!8iRx8mMJ5~KEqUkiVrk-6wuq^j!rSnWc;7k8oWVDd2QQa zWe6_Jt!%`$bH4C>nG%VnVyGy05w!Nlk>7}%=Qvxp*r{R_YHG>=bRoR5Qs}OzknN?s zRUriU_$Y~jTz`~3w`*TR;-@3e_O>RaOhy}KOLbJiN(8p{(_r%XzDTIHuKlC0Tm#`solz28{e#MCy?UZr{PKDD zjn+>4E$=rrHo6A}mO&xG1BF-W@W8F|wM*ss+6ubTw7#;|L)1G6FQasj$FbG&ob{)5h zcB-fdiI0a7(VW+9QM?$_>@~1h;8G`eZtg4aO1TU2Z7gUdeiPeQKgN>Rgv}bPB#6jw zR?`D&l|gj56WIL#{s3F)k{TF3V`*W_o|LzhhtQwR-y3N{r>DPDIN8;t6&w8Zh793$ zs86?Ekv+{+Brc}>!5n#JSiyGb$B4UT3AVi`LLE`E*wNA9h9ayyi<(+mJktnt)JBr$ z)C~;{y@ZM&%_x5+R>YgIJ!?jcOSklHo|S7bMkU-8Ehq?mZejEJ+b-APT90SJ#omn? zyU+bwA87Q)=H)D8pCUOq73uUIZ1(9+xR=}r!tP1lOSEX&VoiIw zj;M?Vf_jvuhUmvT`t7Xxp4x#F8nB{%Z6!}T>ee>aIHWNmhMhqbeM8%8PV))&sqT!W zgAEbZ2V;Gz*UTI@(dR7VRReWiwD5l<_fH-#vv6>5P*77tnOHWELD5_(49v$T1(oEy zxwIpmy3UrCEwAeV8YDw;ktm?JAQ!Eq0cv3Q4A=$%-T??z*k#8LOa$n1Ia(>HMm1Y3 z$i;+#E{5V>o?X(y)}S?AYP#vrCl+MT;0Kgd&(8_UD$Gsox39GRm8bh>FgB38E2{G86{zQwSdnZGL&KwJ6`%IUDe>LZk8b)wuv8#OP?7+^rLBKZ z1mnZBmoGcjcc^isxF*KyJ}6dEqHYul81T=ZC3pMyz@&wZAf~u%Nc5-2vn$0x%|2O5 z{cZVFrVNIL8%V8^;hl}(;6Hfj50Wo=+5d0>U;rQ7Nm#C(Vef26i*2R#J(ba4-E5R< z@gxDyKt%snrlz=jNG+=?R&?`HidRaFf`c&N6F!iy%R`2DoIha0Jk)o9`mweuF=?Ru zo9p9Ytk6o}_)Ky4nUPL4tJg2rraR7J{@wh_rMW38t224?=$}kl7%|9_DGZDCYdDc$ z^??#t``*p8zw|pM3AOLu0lr7wNom>Q$vqxyk&v>OD*U%7paROOC|$rqIe;r&xO}KU z5YUH`%i^T~u&7{fcRsQJm%p`;in#nFB_W{|C1DeHC{dyH0Ez&*0*7mX(lD>JE5aav z=}!#w$JNCp2B=UCfnkpb!R3ZiV!DLCTztsOuYmGcEG8K%)XLu7U3cvf`Q^BIZitAA zwxfI;$a_W1knD+WPmI_pc?%;J1v1E@!Q7nQ3ImX;H(5V6)XuV2$Asq6YMw$HU*g8 zB{k^z-_sl9V0x&o#AF47q2Q~KxHt!>Dqaa>sE7Q$$!Fkf|0DZ}i3tT19pM}U+HxNc zkK<}np#~9pxja!8x|hpnVqy}PnK^(G@y}K3{_mGEAyw0tA5HoPa4uyBaNY=xc$)uX zXFxmORaK#!-b1wiI&$5&SU@%ZA9gzbQ_vb4z`3tpy^2du?*|WxNKU5cK~@1-jMGU= zOB)#(&9Vbkjrymm(1DfZWsO(7s0z?XVd-J8Q?z;=SPo(V{HH}k1fd#PrHI(=i`)Z2?g1Gx?L7fqlh5rGtyu3WXw*T6w+w~bPi%Y<% z!h-*b%h}mEr?z(Nb)w@xX3pMGtjqYUrC%5PL5msK%PI)C@>9m;q8e;55y!!k%9OJ&bKUK$O%hma)> zGf++>zS>b7daRkr_^Bn);`^^opCpId|M$@1FTkY-_txz*Iw?tK@Ea3;fGyee_v0|eYk^!IKiiRJ$zB10Jl{ayKd-Be)m-Gl6H zuQ60W9}fy*em$e>3fQ20B1g$AEJ|Hwm@PkY^fO=AXolZa0y0 zv2tHuK%AQ_T`PDEWBG@kGWVn zJSA7BwWv7YKfQkQx6N-O2+h1j9sckEj^xSpP#ss=kRU%pHd1Q;|VKF9fL zM>~T}s|)NfDd;DP&o59oJXFbDrf(5__!1ph6j6lpbAiZV6NM*g(rUUY$bRW8#>+AihGc)Gb&U$@8FI4A5{FoHa z!qO7cVqw13VqvpY<9H0ccA!nOaOS*qGpaAtT#c=nUV9?~^k=%uIIDmTPyiSF0bGy; zV8cALi4(e=Yfd9rn}^^;HNb_=E6L%k6c=;b)6st3HcsGj z?P=Nd23tw{5A$6U}&X>FCo-mF~pJX3&nS3n*@F&OY!sSSW5G0=ty z&yuY`LOb0R07wJyi>1cHjF85$%ZQNXSKmw;)QX8}p~KsH^`OxAiRLb^hpLN8KaP!b zC}@Cd$el6L>W0t6&D@i|yxxXMf?P1>#7gF9l~JW6*S?4W2Kq2*(umr9D~V_$sX&La zcKEiHxrq1-^((`qZO}eP=~@Q*OgT4WPwBw32bg;Olt8;!V@{K+6Qk}v{Ch>eWNOti zMLh%b5AMf;UA;14v-Q5v(_U}H9$e2|RZ_cqySK@;TX2xc8nlpB_BJ_jg{?M-B$0)H zcC(Xr0Nx$`aaZ`BLa-0tkoAO_-YI*5nKM!Q>B}OEJSn$Ff${`kVW~C6Sl_dV);z=t;@YNF&-C?>;-NIDiLp=!L!4t@*-M zt47_}rtt(X?%P_T=GCTbQRhB)2nu#Acmb-716IwZNdxx@e?Bazg_=^&}U5Y`N&Y$dnXtXQvPJ8}42oS$Ta3!pS_QSLeMa z05S#R9<7}%7VfwEe%IdUW(cln?Cb(K4;{jq z41p@D#1zhi$u`rYs4`SGlB!Q;WQ(I#kn$9?TPJ0HR%$*vJw1)^-O-U=Ovwr6oM4hP z3;kB1%lBT;>|+ujT>{thsU3pN$QFwG>l-h2U1^>Ob|ml%3TFKt?Ll*h+JBzC6@L1K zFm;`CwJI@og5+%1c<~HiQaBa4oK%VO=N0*o8zuY#NVOmRcbm`p`z;A|X2`L;emc5m zC4)9i$)9w9pBgcqw$tYxfXy^Rby5bl7Zk3!S>--3{A=g@Ue?PK&{UkBch24kT7p$J z9o@Btyt%>5HiJc#y9178ix|L|J8A1HhPOCSaJv2`G%*MXb$8K`b~h*X2%7Hz-OcmZ z)fJwuMN@kGTCkp|1eXAcHggfe#`YVLCEyG^{L7hI-< zD<6f>ZivWdJ#X@$rCSyIuH6l~do>Y-+o3ggC*!){$D6AS$qP$I!P&Cv&WYxm3t{jJ zNanuEzMk~%1744yQ}>xd-}*t_td|QNN6+^4)~nuS9dmU6{uF!iB?deqWYusVE)>@8 zU1S31GCNwq>Dxw85vV*6dz1j$KRI@$bF=r&+zpnV!hwxe%o3v{wBPUX(1 z1NeI~x{~W0cS+y|Sbi41GasPXiHa2mjhgh@lJbBS-_pJpSm-M(#0hp8mK9UV3Z0D$ zXxWrC3!b>-jh*vrRbW5|ZpZxGwRUN{i~!^J;vDyXiAjgf3&qlFH>dhKaU2)}wfthZ z2!l*8Z5yqwQrkZvl>SM{ygA6ni<}B1^N*10T5V@L{_4Oju}GhrF7gf44DENGJ*bow zHoxWpTAl%1TcJ2YhBXlhg>`E;r;MY%;ntMnTTe8y#agS4>XAmsXcv9GZe)a1>FAOS zF)@N1`5!FkeZ}VB2+MB*gj@|+3`w@mEH4cuSsRyOpYhSrU~twVZ)=&aTnnX8aW3M^T! zfO{i- zcE^ALZ#QbBFFhsb@Et~-vzU3fF&=4tx*2`6w573zI_=TS$F+vmm2~(E9H^k$PK*fO zUIAwgpaBXllS#hY64n=MGyDGYO3kO!yk}I=wc>JTw~?#$)$D$pHICMS)~jCNtLGX8 z?NQBh2FHSqcg+mDcy^CRo9pZ3Uj81nW!qL&h%}Rqk%_Er5OMUGHc#${FD*Xw`Xg1jhH=F8mLt`v zG_XDxRNK@q1o|L4x-u8~S_|%6mHRs`yE-m0;$_(8Ng`kjVX*N3DROh_RHsO)iKS0p z6$DcW}q|zROy+6U(yx0*? z5Z;MTOY^suG*0#1H;#V45JXjI2Qqqh_ninj0h*H+F6iX0v#`HtFVpaY{dCg*m1XG* z%Ja#3Q&LiByz0=Ye(wWwIjc)r{Ly*K#Gzz+Zd$sLtgL#GU$#cu;tv8(8yq;%eJ@iv zLI7*NCq`Ss*Y+1Y;@;Iaz01en2SG%m0u5B`Yar_H@2@FU|466B+U4i3Uw{aMWF@Gb zG?~`sD#__yazj<@0js>a;ze5#dHrV`jwk23%F3M)wyTi+sE6*ESI|;^ke`H!xaSgs zUVUBRZ(k+|o4|6lJp{4oUs(HB%2y3%{rwssf57y?Y`=ucI7n6`sH`t-1qy#aaH+BY1_Q1f^vM}c; z=02Ox2QiKRaF z`K_pSms9+0^tW8=Ln%p?_g0JzRxP!kaYPqyfasnc$DYP_cU5fSrG(pY_p<0!(nUd3 zRnOz+$sLaZVppwARd1()=h<9u`R325UvL#TWPO?$#T(X6%h6c+_{NJ*kl(`I{@R#@sSPNO;ICMU0b{zUk{U z2Dsqd;ft3mLXW);o)w1CJxre>M(*E${-R~+hJYc})YJ@3PCEK4F@c6;AYUthPfC(( z2}Pk^-8gXUgD=`fxrrlx48phf74Ee<;`0Qr$*N7u?t9njT(IE>Sl%t7z9sj)92X@e zRR4BoXr+IPBGJR?PNT60uQ4!ga&eQTZVzMc;kHK&u&2}S?GA0&zpZMBnx3{yvQcTB z7Q*NVc8v7T(1H;K^?;`7_kUBVpQ{ZG4QdAxISh_>Tte^|4{s|>f4WuhYlnDtGh(*= z<}PorQ0TjUF5lapolptacJeQr15$n3%W{o^;tPv3A9)ShZ-7#gQvaL%r26n zO;>kM#=jeN^#0_zZ+LQVhYP=4;BJxWl&p_&CfIzWYM#kGN&k>2U*``|lPJB}z2Db1 zHgroxG=Wi?h%C z1)9PG&BEBPr}X(4uH1{K!6hp6f9yLOQPjwz;hNEG@E^;DGdb$8h&9s&=cKwNE!iT% zg+54Yn=^b}dN1{{yQjROJlXyGp*o~1L6Zjz+rM*I8S9Q%x0T4my%AZ+7T`GJDoFayCXEH2NBZ@<+B2`WS!sfo^6OdzwMaj1%LNNG^5X?u8!v zZ;yR>cejF+z(eiq-&03q4mX>b#-q`cXJrNg*As4Hj;2&JFI2_%03FhK{u^~N8G{lmbd(XsOPIt+`4{=WH zk8E4xBQ)bX%?%OdBYbO>Y!U&-Byy)ybc0xrvJKizsZg}~OdYhrqmULSa(;e(9R!`u z+H<2-s&zk_UZhF5&VPfNzixE;G=IDn{5<2UPLhq%r;P#4sk&{}fTz@96UC*!5Hq1S zM6T~~!Oux6A|vmaNLc^I?>~J^^rN}A>(`hPmwS* zMHHBtyM}^p`ibTFrjeo(88Wr6P|O<#+&oQZm`g#i<)pHT3YeW;_@&z(Q-y52A(}Hl z;x*o6T!5?d@|YF0u9WjKj>TH&;eXk(D6ho6Mzqx`!NSA@#xwOL8k|FD_52!C+}u2~ zkC6z!-!s{zW=?{hAwzOdP3qu97CCz62HO6kVUb!jRiXRyzPD!FpzD9!s|oNeEbK@f zUu{WdH#-r&y`>vf29cO*hEw@$NzOJIvSr@iwKN~jI@got%&@jhQbklu5~i#&XGzH@gc+apf04#rmQrLN;* zWhpjpeUN(om;@~SchHZ$zwa$wmQdKWtWS_|Jt*ElesALb(C$szfos~?uf9u>)ZdM~t9Tnaib&2h{wkPv=8T?B-}d`MF_TDJvMSzwh`+wjqXTkXyGlGIoR)CE>F^d% zL)IR&u>AbtC6kNSOXhEbG(S?KN0No6^)Yiz(@B!>g_Si|sOpLB-j@nP)d(FYgEGvG!qG{K{fF^Gey3*hT-nz*x#Mq;)HYDU` zN)-eke|n1;sRlTte*Bnj$LcysYEnqiCob!cuB~N{w%Q$1HeN7VW7V+=3ovNoWwCIx zFy6)diZqtIFmi_Gw@#fLAO!_$k)M;3EcD*UR+^%MpcW84CR5aQ@%ZgNdpGxOC48Uo zj;}9sW7~+%SE16n`P{YUwQb5=zp@*R41DGdwWoojiv&Hx=@}zfk5j z(#q+|d_>hS0jGsFk??oEGH00*WMsm6`S|VE$aEw`ap{|avHSy(k!S0~Os@@yU<-@t z_k&%E83Yr9XP1|w-u`|Zg88KNyBJ12(*p>^h}Bd_Enqab_N~rdfaxh71LH-c#c8?CTXJ%$@e*3i<1CT!1#~SUG9i~-FlyUyp_{a0i^9#qRdWCh+ zHdBKjBonKMBTos9ZTmy*AP9B1Cu&whNK^N-q-A3MX2J199K&)@ccb9FA2;lI|60vx zixErbS%M&@Iu@B{yH_~*yU+g9)D8#b$|IrL>WJw*<0SSEpICQr9Kxt7 zhxQ5YHWAHcO@=RdWZng5P~wQ2TCK0Gni-~*C8!u8=NA?>)FB(LITc)_gaXgIpH2o1 z58rR}qmRV$fp1sa;5s^bP}4AW9-eY|Q~LjwX{V6AD>x)76&Z6-kL~^BS(0|*xNNf^ z*LbIqGvz~upzRM)i({g_Bd2q-iNV+Mk0(-inW&6ink%VG}*xk65&gVrqkh$*-? z>!=J6I%|>pq_VHWfTB~p|HY})+CPPUf2}h@y>ZarAsG$5wq*W$8DuXq}5&4%JanY+_?g- z5LCrVzd7B(aKJ?_p^?tx@5qZvmpwg`Dp0Nd?#>uwx9{82GkI8n$Xj-EraAV6@L-M+ z8SVqe8(#|uW*)R)v3z!T3?KgX?>pzu!K6@x0 z`7y7$5!@gArk-GNyb-B;+WQOr^y9oOW#z>r_${!sPiO#?P`OI&dShP%s?ujR`aVxN zG7cxizSG&@!e!`Z=kui~z#x1DQ&N>+?|I+|uP2`q97c2g3)I!Y8JuNW91bg2M|81{ z!Qbmg9x{D_&mF!_KWlr~5i8-gu*~4AxRm2Ed)f|bu{MLX zczUglH8FP#60vYI5v9!9ciy9)Lt7cQ+NEaTcux(ddqGFY;`{y9sU|1r^|LHTIC3EQ z2=EGiJ^zZs;a`^E!@gQ0v@eM#+Z5mJ{~+r4n6^*LwoWT^0T39Wr=uCNK^5x679FP8LaDrP6vQ|^`cH|2i zLBLC4hrl;gWKS%)N%1%)mn=TwX)Ao3Tcdl?_)eJowz|qJ6bnP9{7&o>a{gp?t~VQ9 zo!>B|WZ~^6BL}|bJGk}3nU8;KDJMI0a8y8szboju%-c|R;(|^g?<&I<&v;a3st1GR zG2HKIxGDZfCuJ@o?OLi`ynvZ=?!G;r4E^=rY9AdAnfsiAdPFHx3@hv5+q`y$>`2i+ ze@3!73GQ9HMp-EWf1?2;_42G*>h!t+#9owE zLqh|}_6mSHP#*top4?b!6^Qw9D`9qdK05qR)LIsFP*q?}p^FU5{2#{NIGIu-~L!Xl+5q`Q=mlbgdqe{MTfhCr`~`q5aXSF09kQin@3<@fW~a6{wcaY`76XU?T)Hp<53 zLHLX#r@jB2ube44O|^Y;k{1E-RZV29KA|mp&?GpevVDz9Ju+{M-clba5GU0ZbQG5? z8SKzpLivO)huH1ph}D~@nteLAjf#ANc6B#*cK#rxMBlb8EiRhtKoqbyy3hB_kH@FT z#BaJqop@^+M@I0-yoqvD`V8fYd@t=eNPumsFzI<6bMd@Z=FnGB3wagfEnmsX8NM?T z+knP0;>qaie=1hMP+4Vv2ar^Tr4pH^5z_nQllmL(ktZjdXn7-p&z@(*9r?fTFX34o zIA$S0#vTZWn3a$bHgH3GZ4)wJWS#@jjSMBcc_QAzZGc$=clE4yK7ktWV>t|B;c z5%5(md3l98$`3^;pcV7z`YKh_RIbGa=Rt8;Ty-P$;%6tsmIfbc#Ktli4d3pscJ3ts zEt)cd1Pcobs)#f+H4n}Y3<02jtd7G^wPl2ksNl!P5ul%G?U*qbxGX;U)>(WjC^WFJ zz{}ryAK@LjO`GV8x=8{LMWEY;4F6Nb*u3$`vR z8@j1`?wV5hmyjCmU%aGxI9)rxwHE;+z{)LP?I*XbXh+Bc9r;#4G1W(e$w#&ST{3U$ z6n)#!*p}2R-%L$YvsF-;m#;SMpljR^%^^nN3n`K#fpKMk@j`dw1!i&sLz5DeD{QWS zu1$d6{lneqjakUJfZNr>-o#(D<=sF__P^%iEipm?j{kP5l+K14sn+JB`Jw0sx~OrE zhQ!wi@Gjr4so0MtvR6t*Tv?Bb@=#Qq_K0PO_?EzOit+hZ*7_m62{I<1iLS4|*2h-w>oA`O1v+EJXJ1HJh$GG-ENJ+gNvvogyeeswWC1| zs7*u!^IT?>DQAjf$kv!2`1o)yi{qRlGhwEdSn+AoFl4G=`gr8ydsOSISB+baFhz5m z4OMqEShu=f2TOfmxoX>eHf&PfL9bk9GRN)x>k+G8XH3bbbNnJFL*9ebIoKdW5;>z; zZT2un78M#vo!&mz@AMmiq8Zw*k19lxg*L8}ls)EqKGWo;{ea4+dH)IjgCrqjI?Ibu zMj3XOZ)IyOebh+mE3g5dE#<7eMs^Ka{o0pS)>vffB3fGdnK(j;qit!csG5!~9Z>FO zuBar(>DJtAC+;>@aHiiC2$X2!%fyJptG;5wxGy{fC_@^WNxRRrdATZ1&oiVJ#hmSb zl8C9sJ&Y&UrEao&Y<;Dw3*Wo|ED7C@KBbcRlu^61{4YtO|SuzC)tDjxA=R zGV`+`y9Aq|v5)*R&vB`H+F+euMP*~OJ2-H$ecNre))gR@I>aI)^ol*P9j}_z_^8j+ zZ0X5Hb#whuZ9Hs{MB0Pt8rDDon&}qCz!I8vtU$;&lfIuL zTM+stCMN#)@uT&MYTRkerGlb*P**T!&b#fFYkzNF)ElUnX1=_-vUkJ^=X#viF05m`lW9-_vFV- z#$6rQ(olY;6Hn1kAwvHPzDu23DKd#Kc_KR*^q1S+r${i?H(pI$`3JQkfAIB5&C; zKx$LN^lA9Pm)bHr5xXFIy1YQ(EKQ>u)T^a~<8mLA=Q0-@rvI0fBq|&v6*5#Ovj%Fs zH}dkA2jZuzYa!gc7gQUjc$Zf$16+K*Cy7zI$G4}1!RgcUM7Mc zEzUEGKq~Y|y|G>|47}r-Ode@#ipPCH}+qo8s*C zByK4DkMV;C7Z-gBv(NobE}lp8b#_EuyDb~jQ1*<$>qwGAs`Mpv*g|*M_n*Vp?-n{8 zo32#y&bCAH6t(xW1>jRf?GNFOM`M+^uf&#Kb!=o7X4!gW9(Wv|U@rQt4i*|ZWMFE$ z8>-=vOQy}WjP_7eBeoZpnF@yky>oxMtC2ty78L&#%0NuB^04w1R`ct_11f%E z{nUY<^kyyFx26YW{38Kt?>&%$0|h_I5wc4Wv!(M`2>}Rj>0?wHe3|DDQL{vjU5URj z_ZpbGBf9#)OipREEiOJ%scRjVCH#ZB5K`^O20R?M)4|XoaTJ!^4Q(p(VY|?wDF;05}(wnAR-s<2XY?Aee`4kF2 zID|$4D%cTNRPjCpHc)B!?5~l~45{nRwfpwmVv0O_>xB9pmK1A01Nqt7 zw@%>c7#ZHXVq#$Uynv(w)X+b>0EM6}YS_S7vOHw~W#CdeW@cNTLBc_ni=u4~mD2Pn zA>m_DLuZC*OT>BSEkcL#7&abWzkx4!=AqHlT_fn;L9G3}&;84Tvytp;VUs&X;-=-x zUH*p*WQiz}zis3pI3`+sJ)!=kZM>ht-(L&@Ek#R5ed!njVPp3j$bD)ev)+0M%fAY2 z?eEaA$P*&e2@WwXqvC7=S>bIf*nEpd1N34wW6JyoF$tMnuHryz{Jwt>M+d+2fpSXA zW8P!cH#gD34C+g+7!8zTs%wN37KAI$1J*n}UvVtKW`mAY0SZY%Y4GP}2uH>$yzMWvK zWpcjZhX zZ1uFCAtI{UFVBY>9-Tfx@KG;Q7^PiZ*9hKF18Z6B`8-Nx}(E0+9=KEdvY`(IXv(+KARB%#c|USI-T3E%@& zReQQ;0|fqGqF*fCw0tC>af*WT+h>X8{waI`STPf ztq*UpV!B_y6j9r*BlGK5I`1>MB&g6&D>W4aa!>;^t_CU5`%Y1YE0;bnu5+I>IhD@; zByK-}ih?4qre?zCdb&*n&^of_vG7q}!tUSs*!$0uE&aBB&MCbQxeGJ3X&vYBX60QnGKztiMko{$EW#SJA)l;;k)zA#@PzyqqS3Y*M&@7AYZko z7dBSl9SN*N-^Lo6JHm@t8P3l?@>V@*89Zuvvf4nw(+I0G&=&Wv9cTkGl?9!j26>Q~ zmS|v$(Vsy8am7;6&5s77_cgX_y+J$R&ia?k|B-(7UN!XZ>Fx*pokYEuW+ z=rb$XDsE01ZpYs5&DP;ez5QDV|A^z8uLpfjBpaA_<92V>-cT~$;nnAak`Ax4&0UhD zT83L=$~Jcht!#y60u$r`P~HSSoeX))JF-ek?+sx1d>135zXqOH@(s%|k?MYW-uPBW zAB^m`m?^fZUYhqN8Rr=sks(FG)AfqT?mVbsF6tlRqy{$FG;9PBST!+!_+n7!G;%<2a z830vS3ht>m{@i{&j=BofB#tVy1mFUh^qAtdg(2F0ptPb?k@_3X_mLwUA4;eT~vE zzF;R=AA|~@4n2I+3fDZeBGQuw zVPOEPRzyyu&7Pl^Ck!YA0gfeu@Bnu3vZbz$zq9on!SPG2VY!{G%*@0`+^f$OAOpAL z>lpHEvuH)_(pWOK0S|qkMGki`m)>eAF$nzKs5F=5XJ;E{gNqbPr>Qwra8069{Nr;S z*Q59zSBCT+nLllOlU_r1$Vv3fj8Bd@E2n+0qh-*5iH@AzXfsYI;vbZySEtCErWByViNnY5Sx- z#G}h~kQktUvfIr?w7%={Hnv-1PkUaVPNPaRO|4R*VW6j8*rU|$&Wefc&^egO3~$IQ zDZ!DGlb>H+Huv>m-rn9?gWSjM>jT6e8qCP_KJ~?*V&2ZtF+Dqb?WY{6rGbI);Q$d4 zThg_*w)XnY4nMD=h%VtpM@I)X7M8WteB6`-WTwGWcT(=M3Bl!ZKP{bP_SXhJfy^sZ zhHcZb!HK*=9nMirSnujPbLXbANxu^dW`tqi^^J{o*=9_yH7iXW$gAAq+N!YBTaRH! z`vtC9f(6x(Q`6HnD`KQhG?G5X_Wub23_#7K>lSnGl*J~g+ z?j5ckSPOI=39(%O{3yWO8nl z4njNKV^)zbnU^mNEq1ol`(gS05k^eR_C$4c?-clg(t-{^DQd(-Qr_&~P!OoaEz=Bgd*IggbdJUs~c`f6_@UvBl-zd6koQ>z6gz zm-7q5&(WIc@ZDsZed(!jZ*s}ne+gg$|C!+Ydm3m29Fft48QqSi-EI7Jt*ryJGF+D}wW|vo7u0*qu;qMh#R^b0-1Ze69S|flLO3}> z$>K4MjEdz|9i6_9`1s_`4dM6}=^ElS$VGDIY6}Nz= z8>wcJ0G(r-^9KXEwV$nc#>=rC?_E4dgf65#OvyGkc-ZFp&xIJrOlt8z#IgYfnSwL^ zfR->0hU>L~`gy1O&KFLFrqXHa+u^2$>t53+&) zZ!Y0s$iX5}!SL{~B5ZWktJ>x#dwm@TS<;%H#FJy|2{v932Hw}TyVMoW98blTKZ)qQ zeaA`MV`;uv0gcg`{KOZ(zENr^^GbUYkA{c#@=AsE0A)xYgQ$z=f{OsK#C&nWpHQn^ z2cRPift^@NK*f@J!;a7DNi$FsdJj%wy$Xn-WwDS<0@UEGrF#fBF8t-AF(sAXy?3;K zsCyH#p$SgwRJ%G_yM{cznATcFS~gi(3ky6>OEa*0tmNC0hK+}tXel@ zp^r5ZYa3qR4hGIojJg4IiKx-o?mJEAo57S_xL7CT#|<95vL_CW$)sfGLF8QWveX5| zq(eOV-vI1_@~tdk2*FMJBKigT>D!mrRqnbAvi1+>h7`A@171)~oTT)UM7GRE=ZNmz)*aj1YIX@U+_7M;Us`)LAp26~dny zp*xC~RTYe4vfNkG;Atv-$U7O6I+B#AxyVOJw&xjaf?W}P) zgKUht?(_1%$cD>G6vYc@VZU$1Xs?m}h>sr>SIOPl;os6XgjZO9aL)Ih>3hM$I$2)9 z4A|hhI`_an+04wqNq!9~+WH6FDQ^SH&{P*HXxCG=z5^VzV9daJ+5HHoTQa^ha5S}^ zLDW?s1N<`5$_aFJH(xF> z02%=I1|mEe2c={0{N*nIz^siiRw6a)ZAtcv)o{V)?75HayZw_iU#ygl#YXWbPM`vU z0xf7GSHeRpw3i6S^03bGCAppEx>G_p1*U4HtLu`&2#G_lT3d;Lc1VwefFD7bp5t7& zvLC4sqE777xUR0Q@N(BL_h9j)9TXZ@=1V<>SeCey8DaN&R;}wpHo9cU_^wF#7^xFq zVap;>oBi?{@BuDC;0Z)hrtk9)mEk_7SwE22W-a&kZG=oLncH!J-NzY{$HB^7{W7ii z!UvP2LDomIsLe(bJ59te@=K(59KD zasA5^g~vJ41_h^O0xA*T;*g$X@V7-dVZs@We0?M{)&1({{;8me0W@#&#elqK$Z9>& zcHALaJ*e|J9*;L|jKUIVjYT)8FC~r;(T=<{9a(p?hs=f65@Mdycs3sw9w_64S^zu! z;cx#JKJ^Nt$nwQE2#~lH_Q+>#N zW$0CUjs%97yaQ)@dx!j&b-0FUnw}&qVZ?E*JmF8qFg~z8*z2~K0yCA~S5W$#OCz>$1677HFz#ARF>nj+a0`_<1dZ z-4$Y7{B+atFpE(Zv*GY_3qz~DVS=}|f7~A6ED0@3m5pgY+)?d5(6g~c7D3zte!F*; zAgait^|;9{rA0}RBr=sTi~{KV~3_N1HeM`9vir{)~8{8nxR;u?*AJpSYJhb}$d z0QgcJ5R^A|z%Mgrc^~%pGNlHgAD?RroYV#3o%+jRVQ2S%5PmY1H^OF_Yc-TB*%79iCJ`rVi?$;@amd9!~Em8f!TdD^TZsg z5XOuH#IbY6f6XZIjqx_l;`ClKJq3|+M_(4dLGBIdYmw=L{RI&|J3Bu`J>tAjdPZ*` zy4GGZKj3BLUP)qZe%;P{sS`(C`)M}C;vH%J40&WCaYR|gO#j|Dy%cUTGU$Uq85v=> zH;`H_pZ!|HM=#cX$$`zH@6Ur$JRL_j)g67GBH*>@4B6#Iq_|r8czkK2iucKVk7_X! zMcNpbts3K_URM{PND4e=V9t);IOSiF!yZ!*LH*5X!NBOD-uJgR-bvOkvnV2lG_6h6 z{DJ{hw;ivDoM}l~7OvLaP(CZZRc{98eELjuaZ8LTiJGD?Lhp4kum2&goFBhMQ!U20 zrEAbn7&*ArVWGUNy654+-ylxT&do#oBo~|v-{Oj|7phTc>Kq<#<#(&i4M_G;f!KA+ zVHd-5M~v97J7x~W<+Xt)JMLdSjdw>t%|Y!y!oS}2iN5;)353a%jwzwgq!6gv-{OCa zSBJ29DB}m;PQl3nQ$O(KoINX0-Bid@3FbO21oG0|AQ$Hg6k}hKUTlnK&AYHbZ*Z%) zq9%;=*Mf*N=IM{|nTg0--BB+@*P8L!iKf$27Mc2}m3R~yO&|Cu=RW}rpg(=U%?7v} zXo6_KC;(s#Q1ia{9j&qj;cx@;#|1^$q-4Iv$>RMtR3!BS>N&|Oe#~4{FW6x`*xCSx ztZu?fg=K!Hr}bhTJo$%U6yI@~;))wey+3@BlzAm*=;DG9^4M5zGd}ETkF3Hq+G@=6 zUc7AJ@B>nef2mo&yycVMTuAq#XZ4rpJ-FJ^b|NE(*_$^XcCcSCG=kLnF71EUM`6@# z7OXv1hP2f;q0L~HKKE|!zuJH0?7RE6q;2Rv?4<6k7jNbqKo?7HeN+fbLRL+|R6~rD z?>}a_`wcCfgBsWJ%yMZo5piG6CF00P3M2#p-WvW-SkM5kPyZ6XQfl_>cQ#-ZWKkNW zT2TF}X4-aKF)AI;SV*+%=2tFZ&gz!r3m?6kx2RZ@j23WfPSRIHG%>2DXllcYyig_- zShE2XB+nACn}&as`&73%b1<`N^t{7ggOu9pXxr-<3V-NIbK`S8cy!UZuzzscl)m{v z@l1@=TsD=R>yhQz3>H9Dtg-4W+z{YB$9*pa6bu2lks$X;9VVn1z|s89qDblw1H(VZ z^+C;$drlEU%hh)qHz(a-+V{8nhnQ{YgZQDLvZ)OhI1I#BCFM05e)~Jo?ixEz- zLb*A*4+s(WD39WcxHs{u^qw3?2_-JRI0WldXit)!l`r-PL0X zmm1#w*=JrGc#342t{;3%7l!n2JucnnyYI{&T%9$pd7|bl$y%NT!$oPTGTvGqJiFEy z7*ce$z_=Po%RX-)5a?h8V`hTl`L!$*d9>~XuS>5}*C?IyTv9WQ!(x)| z&7bm%!)3-8SSx}y9{=M||2%_4TJzq=-<4Fp0)sC3-!4^9c=hc8@hw`;4J$}SFr5Yj zEVamYb%NM!nuxV|VUK~^8{G7f3#5~ymr6pgF>*{5y23{_N=|dAjZxLIXc1xQOw2H3 z0Ma~A&47^fKb496U+H>KFf1(mP*?vF;~y*SKIU3;>a!upyXBk_b}5Cmv4)X+{<>!! zBV}yI&?-5}{YS{HoE+Br`Ujt0_}pkGGaanjYijvv_i_m!E;|2q2a{x_rcwe189Pix zBO@9D_w)bzHKyqN$wycV8zElvdT2Y6lg4z8#$ZWpspT=73X?k zaU-BHh2p%@nVM<|{j!e-0gUwD-ljwvaX5M}1V1V&Y(LlTaoium9t%Js1h{UD%FS5g zMh8^S9v*n>2L=WUi`p^SKyxT(5GqPTN1N5o+utlnvnu2BG*;&kS9M||p@VLL8f-2O zr{P7iL?9#Zw<_L<|HC-$-tcF$N`d)UT^*b)mrTXT*li%DI*5vjDyOt}e{#Swb{+y< z$NKmEjg?UFN&F@GIa$`;vp?fIrHMm8K-f2HI5o>YoR~hvyju`x9ekwC&+YeDM&en^ z-&SPgp8mc11$;gK%7gl76toMRBi_v`K@+BKI|VLi)pT^AlPrIIzzF0;|5BQz%7*}s zd%+_!2g11bw$L^Ri;j@Lz5nKhzztCMVDE7M$H5Zr(+6KE1$|Y{Ab-smMA(Ubi_75u zoSH^(_Q<=;ch2{j|J;ItFd)#`e+l&cH{J;N1kr4@$t6P~V*@&`-9iX|@ZVflabR@* z`|tctq#WR7?Q#9Je@uoTW-S5PIEnk&DHM^<=rS{%;Y(oq_{YrNR>%&ZrMS;${QDBu zH4pdqd!3&waAchC8efGEN zR+N?wdGh8QWvJrsoAEynq>#nJ%4*8!Ghcnc#?_w}gKzwAQ}hoAumDtx?(Y1momaAd zDT_|_-{av41I3E}m@5C$F86s^P{wr#w(|FVcz+b{w-N~65Rfynf9^>DzXb{Q+plhtbgbQnjf16*d&}v+Ojr7#Orv1X z0_%^#$HEf+?*`w$WdAG3zJQ~BpBB3Jk8(1c{_ZC6&kdyBe(#L1gH!OG?;jNanDOp$ z!alhrCD@XZlK*``X#*w@Ha36>uD{o0e^-p$3mK>#f&F_S1Al==6=r6j*TY{29IW$y z7{c!(2GGG0!hqP_z2@J~C@?kukC~a!li_)!FuwYIszFyFWMpKmFXWs$h4wb>rVNP{$Elc}St@fymk{JXRCpVt)-mu!?wet~z4 z)r*!3y4B_YfaJnHMYJNq2By(JJxD<1w<`aP(UgyA=E1T9t2AT)=IZlET^-21;k=j< z2UVXeI`IGl_%5RS1$*r;pUzM;3=Hru8tOdI5{?ocM|z))&c-X8WCH2?B(AuR>84sG z=#Mc7H?+IFJYeMLa126{qoXpeqd}Y^XF^&Z^ag)NDPuUdI>^fa!+s^LWyL(BT|#NpgDv5GJx_d z*5*SH*~fg66efKsP}@C%6niOp&XL`c&C{~IIuea=7t>*)!HtjgsO3O##}j7r4psiH zA%1T27RKb3sCd-PrY6D?*0SM&)6MC^gV0VfM1=-dlWZNFo*OQ&pLY*s&PXk6M2b2Z z^4tRMwg7~OfwWPr@wOK{CCHIO3i#^>(>2wbX0>wjGI2mAw@c6Wc$#yPXsG+`U?UpZM&!ygU$P|554{cuKo(F7@K` z*eZKOJ8s5tJ@0{Y$!kQ8TV(mOWZAVJ>Y;w)M{B zIh*)Aw~BXIt7xBZjShwDrbdyyl#^Te!L!}K;u5UO=nILGH@c``L|P4>_#m-JzXMg25oN z2CT<`)-C+U)1`yw52BfS78{&({q92GBS>!}p2SVcC8^DtShVR`LoVy;z>uqCR#yE# z_a)1jpV^+U``jR6nKT_VP1RxMCH=ygs*@?xU{eD*l6r9P@QE(3ZttuPx}g)~I5@t^H`~VNpLH+r zuIn1k&X|lEF7q3LL1E2pSQ-DMrKkzF8$0#y0qg!Ves#`?V3D4x1z`0HtUq?3* z11c&kd~EO5Vo2@TzF=-b!poh+Wb(xvfykGBR2)x8XLsN3+cAC^Q%&~_xx1V3ICDh8 zaPrN`S$}5R-EZda7IWBLM0A+A5~~{$9`2u?&v-i^a48Plfv=~Ice`_K0$0X&Xx`r5 zgXN~?NUy?t*0xM4Ym2AP=U)?IocZjx^gYH7n(vpW?Xr%tiM2TgyV+r~o!eCxQXEK^ zJLfMdn#wd!qf{8(LO}l5M2p+e-1_27zUmq(1#3m=*N$-ci<)Xbc_`|j@7X80m9nbs z206LbyCVe@%ct$sG)!8TwF=nSPD^V6j=Q_}gHl=D2s$o?_(>Xy5K>VsV$C1z4v*_` z^o5;&E((HPZf%{AMPdg92BJNS*UY*MTghQ-IOG(8+FrCYH}7jUoM@i^(7pPh$YUX! ze!4eZW$Uz!MdtnU+~mA2JoZra%aBoNGg2j<7zGo{BW!)_!S^CYud!ToZb%a4n7N+Y z3Ebh7;agIXi+;VmvjE$uXv3G*(u{ef^yUeQh_JlTf?)u=s_OFP6*ULd!^p@t zkx1w){uNiQ>CS~cCsqfp)iIRZbRxVeJd71g3lS-XrNt1?q*bdU4bxTan}lD86}}4| zZ2}E6tGP`8J@2BW6v-}G5Ln~K#Tpa5FJ5F`#jQKbyeSiv^9U=1Mi!-}0*B}`y=wW; z@bHs1h8w`Mr#j7g=^32euvnk80#d@0sXL@Qau%eMAW*@@=T)C7vbDJvpVqcxIno({M%?bA5b=3v%skitiOdi_-fUXe<3hNa zeDZj6@8j)V|J;YB`crCwi}0nXR28Db3epQ&|C)iZq42D%nDjlhnUUawdX~^LN5irT z9N)x(Pv~c5hTn>$zemo7E8bp|2))UELh+1V#U)WDJa$UKv0UO{DNpv;t}HFLYNdEj zUROT1pDjmhZJt8o>S|zo$Tw@2tnBne(u4glO78INjQnB>0qv^oy!_UqEDy1Nav*#) zi)MIaEIqdbSOWZn8(S?Bo&v-C{OeoWqMoV*2(GSd(_^$m7oD_M^eP+VuXANvLw3+k zPNke}#>Y1Mr>9XqzazYH4;UTd_v-D1+S#9oWDYERm{&ZD2eYSD;+2azl;GT38@lc$kY+x79MZf2^<5(q_N-YsQjp}q}^weP+Gre26 z!M$1Z0DCe;LvEouc{j<+QSpN$486|RJ-glOR{zH`ExCH1*Crq*QBGJVhaPuM6%-VR zI2xnUh%bN5Vw<-%CnQ^sc3WzxBUEsdbe8qFtl&fFZ}@y5C2-^FR*C3)lW1aY&O2?X z&3`$m37MF4e~0$bHnAP8%c{$EK;YSMMBX4(E8InD=|Z;x(@iGmv`$P*b4iyxsc`qB zNOH-;igj}3>+aUGxGiS)ymU6-cG$xo`G`;M1_&YjtYNG+d>8S`b)OpCt+AN3wN0)k zV>3(kx5g<}j|Ei;{6A=A-wCX!=0f^sm{%IMW82XVJxN)^uif3(&8=eF8(XwYFL|Gb zl7u~o9y*S_)g^mO*YVk-%b6HwxkQMJVBLO#wIk|B`QWs+V{|&8O|+Hmr9A9z2qFXx zK14jKNZAA;Y;p=g50MK~P*s961(w${c@4A!Ig>O`zAcz$`QjEzX{kyAyL@`zL*BXe zES@7U{&F9x1s;Cs{2Vk=8ga2ibK3+yn?RyoH0KyST3kt+#W|q zH_t0ufiP6so1MXP%7_Qcs^LV(^-()^`UV-QheOx&H{s~$>y~EietEFzc`RrSKS;wK zr04av7{Vyi`d3e3*w*Fm{1h0N^WDwTc;bh+Ao6};U|g_B@hhRg>{wW85(d3$##~JO zT_H=E`!D;hx5TjPMSLtjJ-Y0>oG(3B*kJ2eE?3Ue9sCgnMyEpji`?^4OBA}CyR_ra z=#w+qQfjVDv?vv} z@*YEIGk-FukVy1Y4=q8naZGKHdbUh3CoXn*&D3xnADFwtcyrOGlQQqTK;Mu%1@NsL zGMx${7Y-`5gJ_gjVQqsA=oS^yBLQ*eqTei0x&zS449#oMTH^fadEWID^=QBSMpz^o zS|#z~@l=h3Y`381+JXCYm)eRep?~EY(8=$_J9gh`J;;Yef$&!<(*QbVnt+}LonJG= z_~3X$kv49ZT(81C1V0Y$4ZZyaJZ#glCgQ@1hp-VBmCk$i`%^%i>4lwdBam(u^3-Wg%?V- z+}7uKDqi<`JD`&8p~x$Zbezqxg$9|3Z7F&G<6)Y|zj4!p>kvX=;%cvl) z_8|xl7L$GMtI*UH)03y!6zVQkj~?MXii|(NXsPBmXRb)knP=9>l1-Kv*o#QJT###W8yDu#p1)%9Cv0_foFF^x0pXiSF zY(aF_-*~GVZlorrgwAR>-r&ci_lN)9JJ|V9P}>70j>s3^ z7MQGVV%Z#tJMmkx(b=>Ii&!76h0~F|xI-ImI(?*beoYb{`F6hMDUj*Wt-<-@5Y0fA zTc>lk&}t30TnnMO@nEG_$|nqu1g1m8y8XP-w6{eIw{#a|P4F2qjLn86`*PozY<7J2 zAP*7gn?FZ&e8ZUx-5%T-r9Q2P{bW|3gsrj7J)xpax+xX4uubL@JqTUTd`5E>r~H|+ znf8%-pOk{4E1_!QW3)R02J^@Lc7WgJmr9>zMym^GkI4D%-IlznZa_R{-vM1S-WkrE zV4d~3OmDt{V*yT(z%Bjldd#!$o3YWXA_A|y%Q9d@-*|qq#7wzi{UssT6{SiTgOQBz zapnDEt~y(JAww~D(mWkJisJ>+j9ROf4Mp}Idk~b={vL2p&gWF)N0o0t@;F#ABYp(l zd^^$6qAhqrS6rk^Wcuip_*kxCo@6bOee;eN71M6QJ|O2%(~WDI9?UvsLh{$|HLhbr zojrTF|6V=cP4bb<&C?)jYiY5LXm8sR>6xErwGsP^EMK7+yp4nVj7~GCfjs^_}tp!PD zgkt0jVfvXFBrWH|P7OQm{Szn+btscFM0o*3p%e1!X8UH)4d%?OU8 zPm+NYUs2vvTl*vm$6y>J@LJILd^yiAzn{3Q4z1B58+Z8EVWYkUI9(zfwlhx4OMy8A zGmwqt99iG65xfnA&5Nv6WUiLO7ZPe+~&Qc7bv{O z8O~}A+1^GGMpF8_T2t)S&3?k=m}^^~mA{e8T|VO7Vd1c&Iu;BGE86+Cx1Ffr;#vH{ zUlqGvB9E;7jWmW^-6w?_3Ndu5sjCOI-)nlg6K4_`iY*|rE@SPB8$jxNm|bC~ryEc@LSjmMX&4~lsMxjIuN zTu<@$bTXU!W>77|F#?$t^xg6ZK9n@=A04!c5C}ZMFW1+sxA`#}+_8}Qlj+Vc7V!HV zJG8m0dh%Uz`#IaAC$&1Y%yc7KhLim)AZ;q=%OKr0bWg$PGn`pi+(Gp8)UBMs6xL55 z*3=a*yvfAo3p)}QQ{W_?HIlemUh*I(+aQO0&x_RiyBU8KDj(^9-Bk#b*u%{T%mX~C2uA)$;4m9 z2u$C1d|g3XD@Kbxvmn=o-*v+N&^WBR{*7MLE=9nNkGz?l4tr0DR<36k4WGJ^A5B@h zaaId)aC(or-cFFasw(2tSjfqV6>bFwb)4O4^hh4!ympMzY>D%VwPk_y7?(f0?-Viy z+E<;n-#+5C;a|Yg@p|B!Z5%#Olz+f7i_O)nD~ZTrHzM{-H9|>%mb?A4VPbpkiGD5m z4eIqmgb#t<_k~>hv5vwD zY$dS2cG;_S0v6kKZ%HbAOBD(T@d!ZXrG@-LjuiAKk26kcZ`oQ@7CkBn!s0dpx0J^}Pf7e5_Zn@c+eU1QO`Z@X zV*OFiz};?N>S`q8t~j2)8n+Se_@21FANlTdWsp}bZw@U%iLHS=p|H@$XJ4s9`Ugdp zqKWfHZ8H2j(uy6nhn1OEFF`JBc3fA~wH%Rz3MB=4q?C)H7$%3ko*c*;z`Kl8kOxDC zS*O5VhG>qKO1F$r`z$}g%3#`5sP>9~TJGCTb<9~Y@tk5`4U)_36J*p!GRQjNNN$|g zc1Dh7-|(>;&L1p%DCkhtQZd8c@xUDToZoLYHW0UhSX9Q)U$D?&(*G6D3-JMb+$cW8XJNnwXH2J5wUyHs~ER-a`rU~R^SlF+gH+NE#GF&7*$h#W6e6)M! zeo%h2rO>8AZsS`Qsp43xV_kK{!&_PN{78r&r! zl@ZI1!kW^$SUc~@k(0-Y>o`KuJdIl$RClq9l@gIEu2Roy(brYP0Q;E#aD*bQ!KLoY z#tCY8e!H+_=;9=j4#LdK`6vWah;l=ace)t^FTSMYZW_xk*d%1U?7gTsCUL)f>cM#Y z;);q7j**!22^y%R<^87&NRD+!{qOT~dZ9+uNsT+SqU(^_!Wyh!s&qfG_@qy$sQ&Gx<a`JK+mM`b&=4R%eQBXRguX zMhOMNT7%hzjgo~fkt%sblt zZ)q3mFuOA~5pi7ZA6cTwnL8CFMf^NUNlkadt%Dd_$__AlwG08~mDDxPyr;b-V1e#2 z?~+V_CH615>jmPg%`&|~4sw*N?`=gsosW^Nu0AaJL*HESw6GQt=vtkyQN_9KXV~AG z>=YY)CzZ6skYFI?wv>J(gZXj)EuLn`yNru!ih6SykCVWa%_qPfXv!`q@}VEb>s$%w zvx`)yLklQ1CU$8+p&|K}n$1nxh=R-#9vF7>LMT{c9mP`Q2y{16U z8Wzjcn-n~<^{f=bO}!iTstowjt5rGe7Wi?P7Py!^-)pn`4yui?YRa{~eAI_yQa{$W zFGH)xnEh$W?fzM{K_`IQk#*VrE6XLt+J(&$HTUf~R#jcLrhpObkB!;Ntw>+&w|Ky} z4NXrFdLN4VHEN4u4#hqAGfl?%#e!r@hMgPaoR>tWWDoE2CIvE0?EFJCmW>n-Y%fGi z_sDp6zKYdlsF2RB^l<)KMik?YGuX0QFJ^ty85b)aVG`~AviC8T#m(8ctbF@{qDHd2 z3NNah)dNreKi~$eM*k$a6k_eGEeFtkH|`@4z{$g*s0_{|yWJmW#A7d=7^io=A30*xc&Hw01aL z3P5aRLarf&&8Z7#T4;H|QUi|$Y0vl*cb#n$anDnL;O7v5JjoyNcXB^)`1H~+ESiZL zvP(;y(Wr-!g^{->a-qZ_wOlZt`Z*NUW7Z)8d^SEW3k$`4*o*yaQ z(eM!{uxZhWe6e0+T$${?<@(C7#$%+GR+a+O3|t?w{deq(Vj%?us0MS~f8V=J8xmn0 zY$3Q*t7ji`>yROlz9}4vJHDD>=g@ff@gETu^Y`qRcnCdNZ2viG+#4YWm06)L+sT94 z8S>daiDj8pwBuz-p9D08x`Q|J%&;j}-w?Qe+N67KXtvjG+?St}&DBotZUU&QD*h3`Kub=i>Z8P&M ztv}jwr0drL{-~3R{bujoU19)q`XV&m>`Yfi<%yk3_@a4*+ZlIG*=UNRd`oV9Brz5I zBWTulQpNQ-61}(?z2zhslud{$@rWTVIjVKq#Fh)wVWH zjmS$=(2N$fYYolImD8~-F_f{eLbCG=+R<9Yz+no;VW@tA^y4<;J+!@@B#~1O>Sk|& zaVLk%(}W^*ZD3}h)JS5lK|2UN^@rz2L&Hmsg~Cg?Rf>BUybB!c6Pzlyn_ z4Y0^s@4G!h-tBUBKy_;xx+6pKKbHyyhkR3j@C@U_$Bc5nr_RKB$JK+L9ix^^yacnW zIbGz!e<)tvLZ{t-gef)cR{BRRv7O=>z&jNFv9L}|aLBu!DN=&~PqO&Q-NRab-M~m4 zKcRLMdOkiPdS6`pRPC7Fq-utqI*cg>F=AN8z@8I&={d`Q#w;@2>iq@a>Gd8-lafIH zJR3Hsd53r92tG;5p~muI|Csnh?SUK$`yRA&JA4nVb#K1=Q?AlD@@?Q}zzsUsb_ChOx>UvY zw{BP2z4~ex`$hL(@r&tx+ZmxlaCnPgBiRlEO~`{l)6bcuZ~k=6a6w4HbbRbc@Y(Rc zRi^q6z(qS>)=;0w*rWYJ)x-?;2I=U6_EqfHoN;CC!Z0ZR?Hs!)mH#w**a-GUYb1?? ztClKE5-`3!dFh>K?Q+n-D9+|Vnp>z!SA*GQg4)4*sjJ*B1Ro=!wc{LGa)Lt2zL|Nq z_pQuboYZRK0Xsl=S&t|?Y)~sIe&{o8-;U!ddN0yC4@J%+IFyz_gWstRNbKARlVu$o z3XlRs0B|>3bSMkIN>LR6jULzY3}Kx&!dMlkxy4JN^0kZxBuiE`O+qn6*fV9l$ItBh z+GTc`RLv2Mt>o-~{D@K7Y}qHKOkFMBSoe+WNynUdbx2lcZH*o6P?R!;9QgoMs<_gX zG(kVa{qw>Sv@LLM8+E>?4%B(vhTi`2!LNt)Iaw#stlhtH^NIv6Q1_<{H?k#=#dlHi zqs%Ah5DFGA8JjwyT#f0nAWdxyK7;SdznMB%VvY5U1_oxyMdHl5S0&&2*;t`^$?ovN zKp>B2#N$)ru;MYAXf^h%5Zysq zY%r>5DlPS2e?HaHJeq8AAGu$K+??o#0tWzo@xTFWj>Vq}++w8?|B}5t2u?!Wvy90S zW{l09kd6bYudLtD_61ZYSFdyL0<^)GQ5?OegQsA}a4)#P1W+l#vOa}mcJOB~zj=>Np{V;EB0G9KM(DKmV1E85$bw9>`yzKuYYyR&! zQ<&$_f1ml^17>vdA9C~m@k9j-?L#?N>Xj6oVjD4&5N61i4r9<_|ld25<-fx)$? zd~;Gy)lJG)gMDoj&Gr`Gr!0^)K@Jc+?~U%$GlHND3(StZ#d7 zNR->ON;d|;=ao5^+J3JG_s(@WFI3spDA71IHw8J6{)-omXI0D4?TH~On~8k(6-@4_ z_S$M7gx&4&l5dhcI?YvQS*xqmjI^@V*ul9a=D^3IELg4s_bxO;liABnB?+Cf6zho= zV)%00Ex%t1GV9Z`C5JX=1?`T zVpvUM&GB%Fttx%RGqtffw*L=KBKqt0!leZfw)W1Aj_9M{&1emqvAaqXF2jNczg|>I z0mq?U`#oKEtwiM1j-h&YL!fxQYYL)GbW%_E5z~inxc-RPKT|~1g~bDc>t|m^h2WAU z;TV#7vQ1F$k^{=9jLMPKRe=?aJs$XgIb6PVL=;_Oc!V}BBPf3jAQ!j?omPcUnDS54 zpkP)lNJA}#`djfA_WD7X0A!e0OmN3TJ=?=?-JN&-b~_?hT`ye+>-O&5>lf?UO=0zJ zHbbg0CMM04`K%<0g*qR@5?RAcE{MD@;NS@u;o{-Y z2s)cL-BA$Z={|n``faj!{36qv(F7$hP1OBd?CnYHuC;daeur>c%Jm)916s6g5Ci%& zFIoE%Evd7(%@cPf)sHTNDN+(9K1L~h2BFDISzaG?2>x|U_#HQirX*2GZ>s#WcMDu} zWnkZggBZ?e!q)CLp<8?^Rf9Dyk{t3jp4>)!y;{m(?>*2tyJb1(($t*rZE_P%K~PrC z{8TWRA$r=P-i`HR0@ZTQrLO%QtLvi?>t`JT`Mq`FIrwPl z%*(Snebkj%HrlGwh3Q+hrmfFE&3N3Fod2qnw1IL+1)XQ9+Rv&3C2f0mHRGOkNn5w( zw6C6{ga9HUDp#A&L@Mvs6gvH3!`Jr`h%5WY~4mOk9OH_|B!*NRhjjCvqhGe zo7)v{CkUJ^!eR7Er;9r5r`J&A_aMzG~=|6CbwBL5pa>ruDx1@;vW# znZr*H;hR}P)akj%=hu&@6K&EzT*VWyNo&d~!i!s1-e!8up4RY?edLH#Z)g9U6qz03 zowQdR3RD+!PwW)BcLd#FuYQ*l3Yzfis$vb2)f~A!PvAofgqOzDuY2iO_YIf!KJD_u z2$Jf=JkAL^Dl5vM>YsL^ZeWzUj^H8+igTTALXZ4>=t=t3M?>`QmWK2d1HePfZHyN8 zjqh3DD|M;_<^}XKJA32n&fX6{F|to97dIJH}tQ4aJMFkreA&}T=r96 zYj#96vkMs%vxK!j?)qm6@I;il88V$0x#;M*-Np=Aq`CB=KhLd7x09lMzYG$cQftOa z2=uXO1$Vr!-0#u^ATNo7; zJM9{tp+*Aj8vX6MVh!afx7`^@|7CDY*flq}t|ccn%Rj1Tw8F)n*IW{5|8;(b-`*g7 z{<*EiUt7M!^j1t;?E06rXKr0qc>TYAzqCyEULq`%+SM~5s%YmA0vXudlKa62lm}aL zoBQ2%21AE^p#~Hi?b&ZnX-}*q9oW3o9WW;~S*5Nvq@2L8R}wFx!G*h*XbFMMC%M-t zWYWu#A>O#01yd8IyBT|E%-gj)5X#%EA=J7iyIXRebkee$^BVnjkPxG3BT=ucV@BTl z70Q?5_h47|NK(n)?3r1WOf#r0O60ha#`s`Lp!^Rp2D&n~7%%L5i(|@vC?W{$_j|*j z^fqY*VtGU|uHB(`-J4jQCi4xKVN4hS_`;tI2{9*XsxbFUDzzeWlv2y^R9Lh=YtkJ(D*>iEeP1&U+~KpKo_P8JTc6^)0x|YE88Q7u@Ja3+2PnDsmi2;ofweQ75Fr%j%2Bj^3+YUa;n!fZ#i?Bm& z$^UaU&5qTDrtgiM)#>$YaM{*#VxSLc?P=D-wFv4fp|=YKY&88=ua@_jM}0$lu0={{ z!XU5@b+`8~FfWOq4`@{#?!eu6<|JA~LtIzl7U;XR1{bw&eN`Bj2j6%S2)q!qrFhCG zn|9!BbRwslpc)4PlHqA3kT~Qot@ApO_%yiMyRt69{kb~lz6#*xUT_ILKZn~`4sxD4 zns!gjRc1J@p+njr5tO&sa(_Ski$LTQ58+%63Kg?F^{Y8`!~u3S;X`JeBP@dGQQL*4 z86=R;kqPag3o2DDlAJ@d>_Xc4*BY8Z_#jXtv<3a(<|>x==ney z-_M=bOGGc66|JeSj(*&2SgZe)9gj5U3GTowhEZ0#u8X*`oIUrFv}<%s&O!E>9h<-m zOut7I{h7*-jVT$NoyikfI0%n+2AwZX=gSPJ-E2Uth=s}Wg7t4w$u~S|&(NQ~UT6Hk zvkgX+$q%XQW|CgSIjq-o>|8wf9MWp8 znrms|NW*GUzx%cWy(5~dc`f*o^9}7W>sze^$G20qua?8shRZ{HIdl)%{6NPrBMdOUuQymoV|~L< z7J&R>@C??(*s6;dY8FlLq<_@Y>F>7f-M`$z4Y_Q!9X^rREsp5!4=rKWvB44RvkDFp zAw7Qgd(3X&m-7}j(xqqTy@|YA(B_@j%inM9OUAk_-$GXvrY{DoXw8RYQ)>2$3bqe8 zFTRV42lTdbyIt?rd2bDWP=Z%{L3W`C>E~*&wArV>Z7hxx5$^h<0&)*O?y_-<#xlM{ zMn^*AJ|M%uY$;lzd`E`074ujrH66;bH9&YdG_Hh+kA~cDE7s5_(dR!B-~V(rY!I+ThF;fIG}!5l@aTuV{;;KY?j8i+tUpcC z{k0}D3MyXnLi5QB=*sj;FLa54WcsK+g;%(a{xD%tt(`Zy=GOZ;aIT|R`cinnRtCah z1p&K<-ETegnxe+2UtAg9_z%I;9L%=qDgw~&Wbd)TqGO!|`!MXvMm+qq|Fp1t6Z#p0 zle#VWUvcEJ?vS8nX-c*(@#$7-H*suqH7VbRFTF&m!RbiLFC>4(Fh8wjdpgX z1t{CiJ^wJo`eK^xqg8LnfjEUAe5XLnpfaC6XMA1M4b7Sz-%=5!!@gfg3F=E=Z-&HF z!NNuN-=*!&9}}4G!^xX7au$-V0@De6^>mxc zowNqfd9+4T8G;?!b~|+3G7WL7ePii}u1&8VY93x%OefbRH@i_^bbKUEUwis&F_8AV zNrmd+Fp>M4KvHyDn6wJ_s;6fL*!26hNuJM2a6Kh`Jv*;~({P zq$W^ZgV*M`18j@Di7~cspIGhK_8yPr+tz3@1L&&Eku+J!dcb!ai*hz81Q^@bTn5d8 zYi=KVVIU+Hev(W1;{p8Nwfb)$;R{e%VOdHcnnO*A>Zo+7}?`F^En)7Z2k z%0D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 literal 0 HcmV?d00001 diff --git a/figures/speech_summarization.png b/figures/speech_summarization.png new file mode 100644 index 0000000000000000000000000000000000000000..60d95fcd66d592c5087585462cda4713602ef107 GIT binary patch literal 40951 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 Qyn2y5Kt;M-(j@qQ0J`&(EdT%j literal 0 HcmV?d00001 diff --git a/figures/speech_translate_2.png b/figures/speech_translate_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e620fa9b4e6098de3de758ab1655f4e712554bc3 GIT binary patch literal 46342 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 Oj;y4jM5UNv!2bsfFR^z3 literal 0 HcmV?d00001 diff --git a/figures/vision_radar.png b/figures/vision_radar.png new file mode 100644 index 0000000000000000000000000000000000000000..98c11609a5adbf9abed4cb51858363e32d3f30ae GIT binary patch literal 173821 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

t*|b7Nx@@L<*P~utx;8E6T3I8#CGC;7w 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 literal 0 HcmV?d00001 diff --git a/generation_config.json b/generation_config.json new file mode 100644 index 0000000..9876944 --- /dev/null +++ b/generation_config.json @@ -0,0 +1,11 @@ +{ + "_from_model_config": true, + "bos_token_id": 199999, + "eos_token_id": [ + 200020, + 199999 + ], + "pad_token_id": 199999, + "transformers_version": "4.46.1", + "use_cache": true +} diff --git a/merges.txt b/merges.txt new file mode 100644 index 0000000..439c8df --- /dev/null +++ b/merges.txt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:856ce61180bb689282eed6b3a6838bb1f438399be23aefe9d20eb379791fb4ad +size 2418348 diff --git a/model-00001-of-00003.safetensors b/model-00001-of-00003.safetensors new file mode 100644 index 0000000..8f1534d --- /dev/null +++ b/model-00001-of-00003.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c46bb03332d82f6a3eaf85bd20af388dd4d4d68b198c2203c965c7381a466094 +size 4997504848 diff --git a/model-00002-of-00003.safetensors b/model-00002-of-00003.safetensors new file mode 100644 index 0000000..854d60c --- /dev/null +++ b/model-00002-of-00003.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3e812c0c8acef4e7f5e34d6c9f77a7640ee4a2b93ea351921365ac62f19918d +size 4952333128 diff --git a/model-00003-of-00003.safetensors b/model-00003-of-00003.safetensors new file mode 100644 index 0000000..b33626f --- /dev/null +++ b/model-00003-of-00003.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7be96b7339303752634b202d3f377bcf312a03046586eca6cea23347ace1e65a +size 1199389232 diff --git a/model.safetensors.index.json b/model.safetensors.index.json new file mode 100644 index 0000000..dde52c7 --- /dev/null +++ b/model.safetensors.index.json @@ -0,0 +1,2054 @@ +{ + "metadata": { + "total_size": 11148920768 + }, + "weight_map": { + "model.embed_tokens.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.speech.0.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.speech.0.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.speech.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.speech.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.vision.0.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.vision.0.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.vision.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.audio_projection.vision.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.0.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.0.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.3.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.3.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.5.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.5.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.6.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.conv.6.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.embed.out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoder_embedding.global_invstd": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoder_embedding.global_mean": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.0.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.1.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.10.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.11.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.12.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.13.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.14.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.15.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.16.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.17.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.18.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.19.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.2.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.20.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.21.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.22.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.23.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.3.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.4.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.5.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.6.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.7.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.8.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.dw_sep_conv_1d.dw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.dw_sep_conv_1d.dw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.dw_sep_conv_1d.pw_conv.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.dw_sep_conv_1d.pw_conv.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.glu.b1": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.glu.b2": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.glu.ext_pw_conv_1d.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.glu.ext_pw_conv_1d.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.conv.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_in.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_in.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_in.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_in.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_in.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_in.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_out.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_out.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_out.net.0.linear.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_out.net.0.linear.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_out.net.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.feed_forward_out.net.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.layer_norm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.layer_norm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.layer_norm_att.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.layer_norm_att.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_k.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_k.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_out.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_out.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_q.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_q.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_v.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.encoders.9.self_attn.linear_v.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.audio_embed.encoder.relative_attention_bias_layer.bias_values.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.glb_GN": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.embeddings.patch_embedding.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.embeddings.patch_embedding.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.embeddings.position_embedding.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.0.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.1.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.10.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.11.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.12.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.13.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.14.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.15.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.16.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.17.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.18.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.19.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.2.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.20.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.21.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.22.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.23.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.24.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.25.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.26.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.3.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.4.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.5.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.6.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.7.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.8.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.layer_norm1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.layer_norm1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.layer_norm2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.layer_norm2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.k_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.k_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.q_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.q_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.v_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.encoder.layers.9.self_attn.v_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.attention.in_proj_bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.attention.in_proj_weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.attention.out_proj.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.attention.out_proj.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.layernorm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.layernorm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.mlp.fc1.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.mlp.fc1.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.mlp.fc2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.mlp.fc2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.head.probe": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.post_layernorm.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_processor.post_layernorm.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_projection.0.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_projection.0.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_projection.2.bias": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.img_projection.2.weight": "model-00001-of-00003.safetensors", + "model.embed_tokens_extend.image_embed.sub_GN": "model-00001-of-00003.safetensors", + "model.layers.0.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.0.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.1.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.10.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.10.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.11.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.12.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.13.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.14.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.15.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.16.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.17.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.18.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.19.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.2.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.2.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.20.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.20.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.21.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.22.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.23.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.24.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.25.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.26.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.27.input_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.down_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.down_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.down_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.down_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.down_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.gate_up_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.gate_up_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.gate_up_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.gate_up_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.27.mlp.gate_up_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.27.post_attention_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.27.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.27.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.28.input_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.down_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.down_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.down_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.down_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.down_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.gate_up_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.gate_up_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.gate_up_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.gate_up_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.mlp.gate_up_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.post_attention_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.o_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.o_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.o_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.o_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.o_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.qkv_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.qkv_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.qkv_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.qkv_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.28.self_attn.qkv_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.input_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.down_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.down_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.down_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.down_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.down_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.gate_up_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.gate_up_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.gate_up_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.gate_up_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.mlp.gate_up_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.post_attention_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.o_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.o_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.o_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.o_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.o_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.qkv_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.qkv_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.qkv_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.qkv_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.29.self_attn.qkv_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.3.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.3.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.30.input_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.down_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.down_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.down_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.down_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.down_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.gate_up_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.gate_up_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.gate_up_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.gate_up_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.mlp.gate_up_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.post_attention_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.o_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.o_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.o_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.o_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.o_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.qkv_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.qkv_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.qkv_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.qkv_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.30.self_attn.qkv_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.input_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.down_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.down_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.down_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.down_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.down_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.gate_up_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.gate_up_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.gate_up_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.gate_up_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.mlp.gate_up_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.post_attention_layernorm.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.o_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.o_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.o_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.o_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.o_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.qkv_proj.base_layer.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.qkv_proj.lora_A.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.qkv_proj.lora_A.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.qkv_proj.lora_B.speech.weight": "model-00003-of-00003.safetensors", + "model.layers.31.self_attn.qkv_proj.lora_B.vision.weight": "model-00003-of-00003.safetensors", + "model.layers.4.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.4.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.5.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.input_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.down_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.down_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.down_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.down_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.down_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.gate_up_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.post_attention_layernorm.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.6.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.7.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.gate_up_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.7.mlp.gate_up_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.7.mlp.gate_up_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.7.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.7.mlp.gate_up_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.7.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.7.self_attn.o_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.o_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.o_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.o_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.o_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.qkv_proj.base_layer.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.qkv_proj.lora_A.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.qkv_proj.lora_A.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.qkv_proj.lora_B.speech.weight": "model-00001-of-00003.safetensors", + "model.layers.7.self_attn.qkv_proj.lora_B.vision.weight": "model-00001-of-00003.safetensors", + "model.layers.8.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.8.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.input_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.down_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.down_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.down_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.down_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.down_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.gate_up_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.gate_up_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.gate_up_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.gate_up_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.mlp.gate_up_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.post_attention_layernorm.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.o_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.o_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.o_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.o_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.o_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.qkv_proj.base_layer.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.qkv_proj.lora_A.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.qkv_proj.lora_A.vision.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.qkv_proj.lora_B.speech.weight": "model-00002-of-00003.safetensors", + "model.layers.9.self_attn.qkv_proj.lora_B.vision.weight": "model-00002-of-00003.safetensors", + "model.norm.weight": "model-00003-of-00003.safetensors" + } +} diff --git a/modeling_phi4mm.py b/modeling_phi4mm.py new file mode 100644 index 0000000..31fe013 --- /dev/null +++ b/modeling_phi4mm.py @@ -0,0 +1,2407 @@ +# coding=utf-8 +# Copyright 2024 Microsoft and the HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" PyTorch Phi-4-MM model.""" +import math +import warnings +from typing import List, Optional, Tuple, Union + +import numpy as np + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.cache_utils import Cache, DynamicCache, SlidingWindowCache, StaticCache +from transformers.generation import GenerationMixin +from transformers.modeling_attn_mask_utils import AttentionMaskConverter +from transformers.modeling_flash_attention_utils import _flash_attention_forward +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + add_code_sample_docstrings, + add_start_docstrings, + add_start_docstrings_to_model_forward, + is_flash_attn_greater_or_equal_2_10, + logging, + replace_return_docstrings, +) +from transformers import AutoConfig, AutoModelForCausalLM, PretrainedConfig + +from .configuration_phi4mm import Phi4MMConfig +from .processing_phi4mm import InputMode +from .vision_siglip_navit import get_siglip_vision_model +from .speech_conformer_encoder import ConformerEncoder + + +logger = logging.get_logger(__name__) + +_CHECKPOINT_FOR_DOC = "TBA" +_CONFIG_FOR_DOC = "Phi4MMConfig" + +# Special token ids +_IMAGE_SPECIAL_TOKEN_ID = 200010 # '<|endoftext10|>', or we can better name it (in `tokenizer_config.json`) +_AUDIO_SPECIAL_TOKEN_ID = 200011 # '<|endoftext11|>' +_COMPATIBLE_IMAGE_SPECIAL_TOKEN_ID_RANGE = [-9999, -1] # For backward compatibility +_COMPATIBLE_AUDIO_SPECIAL_TOKEN_ID_RANGE = [float('-inf'), -10000] # For backward compatibility + + +class Phi4MMImageEmbedding(nn.Module): + """Image embedding.""" + + def __init__(self, config: PretrainedConfig, **kwargs) -> None: + super().__init__() + + # n_embed or hidden_size + hidden_size = config.n_embd if hasattr(config, 'n_embd') else config.hidden_size + if hasattr(config, 'embd_pdrop') or hasattr(config, 'embed_pdrop'): + embd_drop = config.embd_pdrop if hasattr(config, 'embd_pdrop') else config.embed_pdrop + self.drop = nn.Dropout(embd_drop) + else: + self.drop = None + + logger.info(f"create image tower {config.img_processor}") + enable_gradient_checkpointing = kwargs.get('enable_gradient_checkpointing', False) + + # Load SigLIP model + self.img_processor = get_siglip_vision_model( + _flash_attn_2_enabled=config._attn_implementation == 'flash_attention_2' + ) + + pe_weight = self.img_processor.embeddings.position_embedding.weight + L, D = pe_weight.size() + H = int(math.sqrt(L)) + assert H**2 == L + if H % 2 != 0: #and kwargs.get('image_token_compression_cls', None) is None: + self.img_processor_padding = nn.ReflectionPad2d((0, 1, 0, 1)) + H += 1 + image_dim_out = D + # ((448/14)//2)**2 + self.num_img_tokens = (H//2)**2 + self.base_feat_height_target = H + + if enable_gradient_checkpointing: + self.img_processor.encoder.gradient_checkpointing = True + + self.image_dim_out = image_dim_out + self.img_sizes = None + self.image_attention_mask = None + + # global_gn and sub_gn for hd transform, serves as line separator + self.use_hd_transform = kwargs.get('use_hd_transform', False) + self.with_learnable_separator = kwargs.get('with_learnable_separator', False) + self.hd_transform_order = kwargs.get('hd_transform_order', 'glb_sub') + self.freeze_img_processor = kwargs.get('freeze_img_processor', False) + self.crop_size = kwargs.get('crop_size', 336) + logger.info(f'freeze_img_processor = {self.freeze_img_processor}') + + # image token compression + self.image_token_compression_cls = kwargs.get('image_token_compression_cls', None) + if self.image_token_compression_cls == 'avg_pool_2d': + self.image_token_compression = nn.AvgPool2d(kernel_size=2, stride=2) + self.base_feat_height_reduction = 1 + self.base_feat_height_target = self.base_feat_height_target // 2 + elif self.image_token_compression_cls is None: + self.image_token_compression = None + self.base_feat_height_reduction = 2 + else: + raise NotImplementedError(f'image_token_compression_cls = {self.image_token_compression_cls}, not implemented') + + # with_hd_transform and with_learnable_separator should have same value + assert self.use_hd_transform == self.with_learnable_separator, 'use_hd_transform and with_learnable_separator should have same value' + if self.with_learnable_separator: + assert self.use_hd_transform, 'learnable separator is only for hd transform' + # 1024 * 4, merge spatial to channel dimension + self.glb_GN = nn.Parameter(torch.zeros([1, 1, self.image_dim_out * self.base_feat_height_reduction**2])) + self.sub_GN = nn.Parameter(torch.zeros([1, 1, 1, self.image_dim_out * self.base_feat_height_reduction**2])) + logger.info(f'learnable separator enabled for hd transform, hd_transform_order = {self.hd_transform_order}') + + projection_cls = kwargs.get('projection_cls', 'linear') + if projection_cls == 'linear': + self.img_projection = nn.Linear(image_dim_out, hidden_size) + elif projection_cls == 'mlp' and self.use_hd_transform: + dim_projection = hidden_size + depth = 2 + layers = [nn.Linear(image_dim_out * self.base_feat_height_reduction**2, dim_projection)] + for _ in range(1, depth): + layers.extend([nn.GELU(), + nn.Linear(dim_projection, dim_projection)]) + self.img_projection = nn.Sequential(*layers) + elif projection_cls == 'mlp': + # follow llava-v1.5's implementation + # (do not use image_projection and image_proj_norm) + dim_projection = hidden_size + depth = 2 + layers = [nn.Linear(image_dim_out, dim_projection)] + for _ in range(1, depth): + layers.extend([nn.GELU(), + nn.Linear(dim_projection, dim_projection)]) + self.img_projection = nn.Sequential(*layers) + else: + raise NotImplementedError(f'projection_cls = {projection_cls}, not implemented') + + self.vocab_size = config.vocab_size + self.img_features = None + + if isinstance(config.img_processor, dict): + self.layer_idx = config.img_processor.get('layer_idx', -2) + self.type_feature = config.img_processor.get('type_feature', 'patch') + else: + self.layer_idx = -2 + self.type_feature = 'patch' + + def set_img_features(self, img_features: torch.FloatTensor) -> None: + self.img_features = img_features + + def set_img_sizes(self, img_sizes: torch.LongTensor) -> None: + self.img_sizes = img_sizes + + def set_img_attn_mask(self, image_attention_mask: torch.FloatTensor) -> None: + self.image_attention_mask = image_attention_mask + + def get_img_features(self, img_embeds: torch.FloatTensor, attention_mask=None) -> torch.FloatTensor: + LAYER_IDX = self.layer_idx + TYPE_FEATURE = self.type_feature + + if self.freeze_img_processor: + with torch.no_grad(): + if attention_mask is not None: + img_processor_output = self.img_processor(img_embeds, output_hidden_states=True, patch_attention_mask=attention_mask) + else: + img_processor_output = self.img_processor(img_embeds, output_hidden_states=True) + img_feature = img_processor_output.hidden_states[LAYER_IDX] + else: + if attention_mask is not None: + img_processor_output = self.img_processor(img_embeds, output_hidden_states=True, patch_attention_mask=attention_mask) + else: + img_processor_output = self.img_processor(img_embeds, output_hidden_states=True) + img_feature = img_processor_output.hidden_states[LAYER_IDX] + + if TYPE_FEATURE == "patch": + patch_feature = img_feature + if self.image_token_compression is not None: + # reshape to 2D tensor + width = int(math.sqrt(patch_feature.size(1))) + patch_feature = patch_feature.view(-1, width, width, patch_feature.size(-1)) + # convert to NCHW + patch_feature = patch_feature.permute(0, 3, 1, 2) + if getattr(self, 'img_processor_padding', None) is not None: + patch_feature = self.img_processor_padding(patch_feature) + patch_feature = self.image_token_compression(patch_feature) + # convert to NHWC + patch_feature = patch_feature.permute(0, 2, 3, 1) + patch_feature = patch_feature.view(-1, patch_feature.size(1) * patch_feature.size(2), patch_feature.size(-1)) + elif getattr(self, 'img_processor_padding', None) is not None: + width = int(math.sqrt(patch_feature.size(1))) + patch_feature = patch_feature.view(-1, width, width, patch_feature.size(-1)) + # convert to NCHW + patch_feature = patch_feature.permute(0, 3, 1, 2) + patch_feature = self.img_processor_padding(patch_feature) + # convert to NHWC + patch_feature = patch_feature.permute(0, 2, 3, 1) + patch_feature = patch_feature.view(-1, patch_feature.size(1) * patch_feature.size(2), patch_feature.size(-1)) + return patch_feature + + if TYPE_FEATURE == "cls_patch": + if self.image_token_compression is not None: + # reshape to 2D tensor + patch_feature = img_feature[:, 1:] + cls_feature = img_feature[:, 0] + width = math.sqrt(patch_feature.size(1)) + patch_feature = patch_feature.view(-1, width, width, patch_feature.size(-1)) + patch_feature = self.image_token_compression(patch_feature) + patch_feature = patch_feature.view(-1, patch_feature.size(-2) * patch_feature.size(-1)) + img_feature = torch.cat([cls_feature, patch_feature], dim=1) + return img_feature + + logger.info(f'processed img feature size = {img_feature.size()}') + raise NotImplementedError + + def spatiotemporal_pool(self, x, num_img_tokens, batch_size=1, T=1): + + if self.image_pos_embed is not None: + x = x.view(batch_size * T, -1, x.shape[-1]) + num_tokens = x.shape[-2] + h, w = int(num_tokens ** 0.5), int(num_tokens ** 0.5) + assert h * w == num_tokens, 'only support square feature maps for now' + x = x.view(batch_size * T, h, w, x.shape[-1]) + pos_embed = self.image_pos_embed(x) + x = x + pos_embed + x = x.view(batch_size, T * h * w, x.shape[-1]) + + if self.visual_temporal_embed is not None: + visual_temporal_embed = self.visual_temporal_embed(x.view(batch_size, T, -1, x.shape[-1])[:, :, 0]) + x = x.view(batch_size, T, -1, x.shape[-1]) + visual_temporal_embed.view(1, T, 1, x.shape[-1]) + + new_x = [] + # [bsz, T * H' * W', C] -> [bsz, T, C] + spatial_avg_pool_x = x.view(batch_size, T, -1, x.shape[-1]).mean(dim=2) + new_x.append(spatial_avg_pool_x) + + # [bsz, T * H' * W', C] -> [bsz, H'*W', C] + temporal_avg_pool_x = x.view(batch_size, T, -1, x.shape[-1]).mean(dim=1) + new_x.append(temporal_avg_pool_x) + + x = torch.cat(new_x, dim=1).view(-1, self.image_dim_out) + num_img_tokens += T + return x, num_img_tokens + + def forward(self, input_ids: torch.LongTensor, input_embeds: torch.FloatTensor, image_sizes=None, **kwargs) -> torch.FloatTensor: + + if isinstance(input_ids, tuple): + # # pipeline parallel + input_ids, input_embeds = input_ids + + img_embeds = input_embeds + if image_sizes is None and 'image_sizes' in kwargs: + image_sizes = kwargs['image_sizes'] + img_sizes = image_sizes + + if self.img_features is not None: + img_embeds = self.img_features.clone() + self.img_features = None + + if self.img_sizes is not None: + img_sizes = self.img_sizes + + dtype = self.img_processor.embeddings.patch_embedding.weight.dtype + if img_embeds is not None: + # convert to bf16 + img_embeds = img_embeds.to(dtype) + + if self.image_attention_mask is not None: + image_attention_mask = self.image_attention_mask.clone() + self.image_attention_mask = None + elif 'image_attention_mask' in kwargs: + image_attention_mask = kwargs['image_attention_mask'] + else: + image_attention_mask = None + input_shape = input_ids.size() + input_ids = input_ids.view(-1, input_shape[-1]) + + with torch.no_grad(): + positions = torch.nonzero(input_ids == _IMAGE_SPECIAL_TOKEN_ID, as_tuple=False) + positions_tuple = torch.nonzero(input_ids == _IMAGE_SPECIAL_TOKEN_ID, as_tuple=True) + + # logger.info(f'position size: {positions.size()} ...') + fake_image_forward = False + select = False + hd_transform = False + + if isinstance(self.img_projection, nn.Sequential): + target_device = self.img_projection[0].bias.device + target_dtype = self.img_projection[0].bias.dtype + else: # It's a single nn.Linear layer + target_device = self.img_projection.bias.device + target_dtype = self.img_projection.bias.dtype + + num_img_tokens = self.num_img_tokens + if len(positions.tolist()) > 0: + if self.use_hd_transform and img_sizes is not None and len(img_sizes): + hd_transform = True + assert img_embeds.ndim == 5, f'(branch 1) img_embeds size: {img_embeds.size()}, expect 5D tensor for hd transform' + # img_embeds: (num_images, max_num_crops, 3, H, W) + # img_sizes: (num_images, 2).view(1, -1) + + bs = img_embeds.shape[0] + # Nx(HW)xC + if image_attention_mask is not None and len(image_attention_mask) > 0: + img_features = self.get_img_features(img_embeds.flatten(0, 1), attention_mask=image_attention_mask.type(torch.BoolTensor).flatten(0,1).to(target_device)) + else: + img_features = self.get_img_features(img_embeds.flatten(0, 1)) + + base_feat_height_target = self.base_feat_height_target + base_resolution = self.crop_size + base_feat_height_reduction = self.base_feat_height_reduction + + base_feat_height = base_feat_width = int(np.sqrt(img_features.shape[1])) + + assert base_feat_height == base_feat_height_target and base_feat_width == base_feat_height_target, f'base_feat_height: {base_feat_height}, base_feat_width: {base_feat_width}, expect {base_feat_height_target} features for hd transform' + + # bs x max_num_crops x (24x24) x C + img_features = img_features.view(bs, -1, base_feat_height * base_feat_width, self.image_dim_out) + C = self.image_dim_out + H = base_feat_height + + output_imgs = [] + output_len = [] + # training is tensor, inference is list + if isinstance(img_sizes, torch.Tensor): + img_sizes = img_sizes.view(-1, 2) + for _bs in range(bs): + h, w = img_sizes[_bs] + h = h // base_resolution + w = w // base_resolution + B_ = h * w + + # 1 x (24x24) x 1024 + global_img_feature = img_features[_bs, :1] + + # 1 x 12 x 12 x 4096 + glb_img = global_img_feature.reshape(1,H,H,C).reshape(1,H//base_feat_height_reduction,base_feat_height_reduction,H//base_feat_height_reduction,base_feat_height_reduction,C).contiguous().permute(0,1,3,2,4,5).reshape(1,H//base_feat_height_reduction,H//base_feat_height_reduction,base_feat_height_reduction*base_feat_height_reduction*C).contiguous() + temp_glb_GN = self.sub_GN.repeat(1, H//base_feat_height_reduction, 1, 1) + + # 1 x 156 x 4096 + glb_img = torch.cat([glb_img, temp_glb_GN], dim=2).reshape(1,-1,base_feat_height_reduction*base_feat_height_reduction*C) + + # (max_num_crops-1) x (12x12) x C + sub_img = img_features[_bs, 1:] + # 16x574x1024 + # get rid of padding sub_img + sub_img = sub_img[:B_] + + # (num_crops, 12, 2, 12, 2, 1024) -> (num_crops, 12, 12, 2, 2, 1024) -> (num_crops, 12*12, 4*1024) + sub_img = sub_img.reshape(B_,H,H,C).reshape(B_,H//base_feat_height_reduction,base_feat_height_reduction,H//base_feat_height_reduction,base_feat_height_reduction,C).contiguous().permute(0,1,3,2,4,5).reshape(B_,-1,base_feat_height_reduction*base_feat_height_reduction*C).contiguous() + sub_img = sub_img.reshape(1, h, w, base_feat_height // base_feat_height_reduction, base_feat_width // base_feat_height_reduction, -1).permute(0,1,3,2,4,5).reshape(1,h*base_feat_height//base_feat_height_reduction,w*base_feat_width//base_feat_height_reduction,base_feat_height_reduction*base_feat_height_reduction*C) + + if image_attention_mask is not None and len(image_attention_mask) > 0: + reshaped_image_attention_mask = image_attention_mask[_bs,1:B_+1,0::2,0::2].reshape(1, h, w, base_feat_height // base_feat_height_reduction, base_feat_width // base_feat_height_reduction).permute(0,1,3,2,4).reshape(1,h*base_feat_height//base_feat_height_reduction,w*base_feat_width//base_feat_height_reduction) + useful_height = int(reshaped_image_attention_mask[0,:,0].sum().item()) + useful_width = int(reshaped_image_attention_mask[0,0,:].sum().item()) + sub_img = sub_img[:,:useful_height, :useful_width] + temp_sub_GN = self.sub_GN.repeat(1, useful_height, 1, 1) + temp_len = int(image_attention_mask[_bs,:B_+1,0::2,0::2].sum().item()) + (useful_height+1) + base_feat_height//base_feat_height_reduction + else: + temp_sub_GN = self.sub_GN.repeat(1, h*base_feat_height//base_feat_height_reduction, 1, 1) + temp_len = int((h*w+1)*self.num_img_tokens+ 1 + (h+1)*base_feat_height//base_feat_height_reduction) + + sub_img = torch.cat([sub_img, temp_sub_GN], dim=2).reshape(1,-1,base_feat_height_reduction*base_feat_height_reduction*C) + # (1, num_img_tokens, 1024*4) + + # glb + sub + if self.hd_transform_order == 'glb_sub': + output_imgs.append(torch.cat([glb_img, self.glb_GN, sub_img], dim=1)) + elif self.hd_transform_order == 'sub_glb': + output_imgs.append(torch.cat([sub_img, self.glb_GN, glb_img], dim=1)) + else: + raise NotImplementedError(f'hd_transform_order = {self.hd_transform_order}, not implemented') + + #temp_len = int((h*w+1)*144 + 1 + (h+1)*12) + assert temp_len == output_imgs[-1].shape[1], f'temp_len: {temp_len}, output_imgs[-1].shape[1]: {output_imgs[-1].shape[1]}' + output_len.append(temp_len) + + num_img_tokens = output_len + img_set_tensor = [] + for _output_img in output_imgs: + img_feature_proj = self.img_projection(_output_img.to(target_device).to(target_dtype)) + img_set_tensor.append(img_feature_proj) + #logger.info(f'img_embeds size: {img_embeds.size()}, image sizes: {img_sizes} loading time {datetime.now() - start_time}') + #assert sum(num_img_tokens) == len(g_values), f'(branch 1) sum(num_img_tokens): {sum(num_img_tokens)}, g_values size: {len(g_values)}, g_values {g_values}' + + else: + raise NotImplementedError + select = True + else: + # # create a fake image tensor + # # TODO: need define image size for different vision model + if self.training: + img_embeds = torch.zeros(1, 3, self.crop_size, self.crop_size, dtype=target_dtype, device=input_ids.device) + + tt = ( + self.get_img_features(img_embeds) + .to(target_device) + .to(target_dtype) + .reshape(-1, 1024) + ) + if self.use_hd_transform: + img_set_tensor = self.img_projection(tt.reshape(-1, self.image_dim_out*self.base_feat_height_reduction**2) * self.glb_GN[0] * self.sub_GN[0, 0]) + else: + img_set_tensor = self.img_projection(tt) # adapted visual features. + fake_image_forward = True + + # we use the token embedding layer from the huggingface model, this is REQUIRED to make sure we are using the loaded weights. + hidden_states = kwargs['wte'](input_ids) + + if select: + if hd_transform: + # new implementation without in-place operation + # Ref: https://huggingface.co/microsoft/Phi-3.5-vision-instruct/blob/4a0d683eba9f1d0cbfb6151705d1ee73c25a80ca/modeling_phi3_v.py#L233 + # Ref: https://pytorch.org/docs/stable/generated/torch.Tensor.index_put.html + # Ref: https://pytorch.org/docs/stable/generated/torch.Tensor.index_put_.html#torch.Tensor.index_put_ + # img_set_tensor: a list of tensors, each tensor has shape (1, N_tokens, C) + assert all([_img_set_tensor.shape[0] == 1 for _img_set_tensor in img_set_tensor]), 'img_set_tensor should have shape (1, N_tokens, C)' + # Shape: (merged_N_tokens, C) + merged_img_set_tensor = torch.cat(img_set_tensor, dim=1).squeeze(0) + merged_img_set_tensor = merged_img_set_tensor.to(hidden_states.dtype).to(hidden_states.device) + # Temporarily disable autocast to avoid issue on bf16 tensors + # Ref: https://github.com/pytorch/pytorch/issues/132715 + with torch.autocast(device_type=hidden_states.device.type, enabled=False): + new_hidden_states = hidden_states.index_put( + indices=positions_tuple, + values=merged_img_set_tensor, + accumulate=False + ) + hidden_states = new_hidden_states + else: + raise NotImplementedError + + if fake_image_forward and self.training: + hidden_states = hidden_states + (0 * img_set_tensor[0].to(hidden_states.dtype).to(hidden_states.device)).sum() + + if self.drop is not None: + hidden_states = self.drop(hidden_states) + + return hidden_states + + +class Phi4MMAudioEmbedding(nn.Module): + """Audio embedding.""" + + def __init__(self, config: PretrainedConfig, **kwargs) -> None: + super().__init__() + self.config = config + # n_embed or hidden_size for text LM + hidden_size = config.n_embd if hasattr(config, 'n_embd') else config.hidden_size + + if hasattr(config, 'embd_pdrop') or hasattr(config, 'embed_pdrop'): + embd_drop = config.embd_pdrop if hasattr(config, 'embd_pdrop') else config.embed_pdrop + self.drop = nn.Dropout(embd_drop) + else: + self.drop = None + + audio_dim_out = None # Set this variable according to the actual audio processor + logger.info(f"create audio processor {config.audio_processor}") + self.layer_idx = -2 + + if isinstance(config.audio_processor, dict) and config.audio_processor.get('name', None) == "cascades": + encoder_config = config.audio_processor.get("config", None) + assert encoder_config is not None + self.encoder = ConformerEncoder(**encoder_config) + + # fake initialization, create encoder_embedding layer only so that + # in decoding, all parameters can be loaded in from_pretrained_function + # in training, we do post init after from_pretrained function to make sure the correct initialization + self.encoder.post_init({}) + + audio_dim_out = encoder_config["attention_dim"] + n_mels = encoder_config["input_size"] + else: + raise NotImplementedError + + assert audio_dim_out is not None, "Remember to set values for audio_dim_out" + self.audio_dim_out = audio_dim_out + self.audio_dim_in = n_mels + + self.freeze_audio_processor = kwargs.get('freeze_audio_processor', False) + logger.info(f'freeze_audio_processor = {self.freeze_audio_processor}') + + self.downsample_rate = kwargs.get('downsample_rate', 1) + + enable_gradient_checkpointing = kwargs.get('enable_gradient_checkpointing', False) + if enable_gradient_checkpointing: + self.encoder.gradient_checkpointing_enable() + logger.info(f'gradient checkpointing enabled for audio processor') + + projection_cls = kwargs.get('projection_cls', 'linear') + if projection_cls == 'linear': + self.audio_projection = nn.Linear(audio_dim_out, hidden_size) + elif projection_cls == 'mlp': + # follow llava-v1.5's implementation + # (do not use image_projection and image_proj_norm) + dim_projection = hidden_size + depth = 2 + self.linear_downsample_rate = self.downsample_rate + + layers_for_speech = [nn.Linear(audio_dim_out * self.linear_downsample_rate, dim_projection)] + for _ in range(1, depth): + layers_for_speech.extend([nn.GELU(), nn.Linear(dim_projection, dim_projection)]) + audio_projection_for_speech = nn.Sequential(*layers_for_speech) + + layers_for_vision = [nn.Linear(audio_dim_out * self.linear_downsample_rate, dim_projection)] + for _ in range(1, depth): + layers_for_vision.extend([nn.GELU(), nn.Linear(dim_projection, dim_projection)]) + audio_projection_for_vision = nn.Sequential(*layers_for_vision) + + self.audio_projection = nn.ModuleDict({ + 'speech': audio_projection_for_speech, + 'vision': audio_projection_for_vision + }) + else: + raise NotImplementedError(f'projection_cls = {projection_cls}, not implemented') + + self.vocab_size = config.vocab_size + self.input_embeds = None + self.audio_embed_sizes = None + + def post_init(self, audio_config): + # execute after the from_pretrained() initialization of the phi4mm model + if audio_config.get('name', None) == "cascades": + init_model_config = audio_config.get("init_model", {}) + self.encoder.post_init(init_model_config) + # remove the init model in config so it is not saved in the config. + # This might affect the model loading in resuming training and decoding. + if "init_model" in audio_config: + audio_config.pop("init_model") + + def set_audio_embeds(self, input_embeds: torch.FloatTensor) -> None: + self.input_embeds = input_embeds + + def set_audio_embed_sizes(self, audio_embed_sizes: torch.LongTensor) -> None: + self.audio_embed_sizes = audio_embed_sizes + + def get_audio_features(self, input_embeds: torch.FloatTensor, audio_attention_mask: torch.Tensor, audio_projection_mode: str='speech'): + + if self.freeze_audio_processor: + with torch.no_grad(): + audio_features, masks = self.encoder(input_embeds, audio_attention_mask) + else: + audio_features, masks = self.encoder(input_embeds, audio_attention_mask) + + if isinstance(self.audio_projection, nn.Sequential): + audio_set_tensor = self.audio_projection(audio_features) + elif isinstance(self.audio_projection, nn.ModuleDict): + audio_set_tensor = self.audio_projection[audio_projection_mode](audio_features) + else: + raise NotImplementedError + + return audio_set_tensor + + def forward(self, input_ids: torch.LongTensor, input_embeds: torch.FloatTensor, audio_embed_sizes=None, audio_attention_mask=None, audio_projection_mode='speech', **kwargs) -> torch.FloatTensor: + ''' + arguments: + input_ids: input text ids (B, U) + input_embeds: audio features (B, T, D) B: num audios in a sequence + ''' + if self.input_embeds is not None: + input_embeds = self.input_embeds.clone() + if self.audio_embed_sizes is not None: + audio_embed_sizes = self.audio_embed_sizes.clone() + + input_shape = input_ids.size() + input_ids = input_ids.view(-1, input_shape[-1]) + MAX_INPUT_ID = int(1e9) + + with torch.no_grad(): + positions = torch.nonzero(input_ids == _AUDIO_SPECIAL_TOKEN_ID, as_tuple=False) + positions_tuple = torch.nonzero(input_ids == _AUDIO_SPECIAL_TOKEN_ID, as_tuple=True) + + if isinstance(self.audio_projection, nn.Sequential): + target_device = self.audio_projection[0].bias.device + target_dtype = self.audio_projection[0].bias.dtype + elif isinstance(self.audio_projection, nn.ModuleDict): + target_device = self.audio_projection[audio_projection_mode][0].bias.device + target_dtype = self.audio_projection[audio_projection_mode][0].bias.dtype + else: # It's a single nn.Linear layer + target_device = self.audio_projection.bias.device + target_dtype = self.audio_projection.bias.dtype + + if input_embeds is not None: + input_embeds = input_embeds.to(target_device).to(target_dtype) + + if len(positions.tolist()) > 0: + audio_set_tensor = self.get_audio_features(input_embeds, audio_attention_mask, audio_projection_mode) + else: + # # create an audio tensor + # To do: not sure if this is required for text only input + if self.training: + audio_embeds = torch.zeros(1, 500, self.audio_dim_in).to(target_device).to(target_dtype) + audio_attention_mask = audio_embeds.new_ones(audio_embeds.size()[:2]).long() + audio_set_tensor = self.get_audio_features(audio_embeds, audio_attention_mask, audio_projection_mode) + + hidden_states = kwargs['wte'](input_ids) + + if len(positions.tolist()) > 0: + + assert audio_embed_sizes.sum().item() == len(positions), \ + f"please ensure the encoder outputs have the same length as defined in input_ids! \n audio_embed_sizes.sum().item(): {audio_embed_sizes.sum().item()} \n len(positions): {len(positions)} \n audio_embed_sizes: {audio_embed_sizes} \n positions: {positions} \n input_ids.shape \n {input_ids.shape}" + + # new implementation without in-place operation + # Ref: https://huggingface.co/microsoft/Phi-3.5-vision-instruct/blob/4a0d683eba9f1d0cbfb6151705d1ee73c25a80ca/modeling_phi3_v.py#L233 + # Ref: https://pytorch.org/docs/stable/generated/torch.Tensor.index_put.html + # Ref: https://pytorch.org/docs/stable/generated/torch.Tensor.index_put_.html#torch.Tensor.index_put_ + # audio_set_tensor: shape (N_audios, N_padded_tokens, C) + # Shape: (merged_N_tokens, C) + merged_audio_set_tensor = torch.cat([ + audio_set_tensor[i, :audio_embed_sizes[i], :] + for i in range(len(audio_embed_sizes)) + ], dim=0) + merged_audio_set_tensor = merged_audio_set_tensor.to(hidden_states.dtype).to(hidden_states.device) + # Temporarily disable autocast to avoid issue on bf16 tensors + # Ref: https://github.com/pytorch/pytorch/issues/132715 + with torch.autocast(device_type=hidden_states.device.type, enabled=False): + new_hidden_states = hidden_states.index_put( + indices=positions_tuple, + values=merged_audio_set_tensor, + accumulate=False + ) + hidden_states = new_hidden_states + else: + if self.training: + hidden_states = hidden_states + (0 * audio_set_tensor[:,0].to(hidden_states.dtype).to(hidden_states.device)).sum() + + if self.drop is not None: + hidden_states = self.drop(hidden_states) + + return hidden_states + + + +class Phi4MMImageAudioEmbedding(nn.Module): + """Image-audio embedding.""" + + def __init__(self, config: PretrainedConfig, **kwargs) -> None: + super().__init__() + + self.vocab_size = config.vocab_size + + self.image_input_id = kwargs.get('image_input_id', -1) + self.audio_input_id = kwargs.get('audio_input_id', -10000) + assert self.image_input_id != self.audio_input_id, 'image_input_id and audio_input_id should be different' + + self.image_embd_layer_kwargs = kwargs['image_embd_layer'] + self.image_embed = Phi4MMImageEmbedding(config, **self.image_embd_layer_kwargs) + self.audio_embd_layer_kwargs = kwargs['audio_embd_layer'] + self.audio_embed = Phi4MMAudioEmbedding(config, **self.audio_embd_layer_kwargs) + + self.input_image_embeds = None + self.image_sizes = None + self.image_attention_mask = None + self.input_audio_embeds = None + self.audio_embed_sizes = None + + def post_init(self, audio_config): + # post init for audio embedding + # ref: model.model.embed_tokens_extend.post_init(audio_config) in phyagi/getters/model.py + self.audio_embed.post_init(audio_config) + + def set_input_image_embeds(self, input_image_embeds: torch.FloatTensor) -> None: + self.input_image_embeds = input_image_embeds + + def set_image_sizes(self, image_sizes: torch.LongTensor) -> None: + self.image_sizes = image_sizes + + def set_img_attn_mask(self, image_attention_mask: torch.FloatTensor) -> None: + self.image_attention_mask = image_attention_mask + + def set_input_audio_embeds(self, input_audio_embeds: torch.FloatTensor) -> None: + self.input_audio_embeds = input_audio_embeds + + def set_audio_embed_sizes(self, audio_embed_sizes: torch.LongTensor) -> None: + self.audio_embed_sizes = audio_embed_sizes + + def forward( + self, + input_ids: torch.LongTensor, + input_embeds, + input_image_embeds: Optional[torch.FloatTensor]=None, + input_audio_embeds: Optional[torch.FloatTensor]=None, + image_sizes=None, + image_attention_mask=None, + audio_embed_sizes=None, + audio_attention_mask=None, + audio_projection_mode='speech', + wte=None, + ) -> torch.FloatTensor: + MAX_INPUT_ID = int(1e9) + assert -MAX_INPUT_ID < self.audio_input_id < self.image_input_id + + # override image and audio embeddings and sizes from object itself + # this is for inference + # ref: phyagi/eval/utils/text_generation_vision_audio_pipeline.py + if self.input_image_embeds is not None: + assert input_image_embeds is None + input_image_embeds = self.input_image_embeds.clone() + # NOTE weijian: set input_image_embeds to None after first call in for eval stage + # during evaluation, it will call model's forward() multiple times + # the first time input_ids contains the prompt (including <|image_{}|>) and input_embeds exists + # from the second time, the input_ids will only contain the generated text + # thus, the input_image_embeds is no longer needed + self.input_image_embeds = None + + if self.image_sizes is not None: + assert image_sizes is None + image_sizes = self.image_sizes + + if self.input_audio_embeds is not None: + assert input_audio_embeds is None + input_audio_embeds = self.input_audio_embeds.clone() + self.input_audio_embeds = None + + if self.audio_embed_sizes is not None: + assert audio_embed_sizes is None + audio_embed_sizes = self.audio_embed_sizes.clone() + + if self.image_attention_mask is not None: + assert image_attention_mask is None + image_attention_mask = self.image_attention_mask.clone() + self.image_attention_mask = None + + input_shape = input_ids.size() + input_ids = input_ids.view(-1, input_shape[-1]) + + # backward compatibility + with torch.no_grad(): + new_input_ids = input_ids.clone() + new_input_ids[(input_ids >= _COMPATIBLE_IMAGE_SPECIAL_TOKEN_ID_RANGE[0]) & + (input_ids <= _COMPATIBLE_IMAGE_SPECIAL_TOKEN_ID_RANGE[1])] = _IMAGE_SPECIAL_TOKEN_ID + new_input_ids[(input_ids >= _COMPATIBLE_AUDIO_SPECIAL_TOKEN_ID_RANGE[0]) & + (input_ids <= _COMPATIBLE_AUDIO_SPECIAL_TOKEN_ID_RANGE[1])] = _AUDIO_SPECIAL_TOKEN_ID + input_ids = new_input_ids + + with torch.no_grad(): + image_position_mask = input_ids == _IMAGE_SPECIAL_TOKEN_ID + non_image_position_mask = ~image_position_mask + + assert input_embeds is None + if self.training: + assert input_image_embeds is not None or input_audio_embeds is not None + + if input_image_embeds is not None: + image_hidden_states = self.image_embed( + input_ids=input_ids, + input_embeds=input_image_embeds, + image_sizes=image_sizes, + wte=wte, + image_attention_mask=image_attention_mask + ) + if input_audio_embeds is not None: + audio_hidden_states = self.audio_embed( + input_ids=input_ids, + input_embeds=input_audio_embeds, + audio_embed_sizes=audio_embed_sizes, + audio_attention_mask=audio_attention_mask, + wte=wte, + audio_projection_mode=audio_projection_mode, + ) + + # merge image and audio hidden states + # NOTE weijian: for non-image-audio tokens, here we use audio hidden states + # actually, in the debug code above, the non-image-audio tokens from image_hidden_states and audio_hidden_states should be the same + if input_image_embeds is not None and input_audio_embeds is not None: + dtype = image_hidden_states.dtype + hidden_states = image_hidden_states * image_position_mask.to(dtype).unsqueeze(-1) + audio_hidden_states * non_image_position_mask.to(dtype).unsqueeze(-1) + elif input_image_embeds is not None: + hidden_states = image_hidden_states + elif input_audio_embeds is not None: + hidden_states = audio_hidden_states + else: + assert wte is not None + hidden_states = wte(input_ids) + + return hidden_states + + +# Copied from transformers.models.llama.modeling_llama.LlamaRMSNorm with Llama->Phi3 +class Phi4MMRMSNorm(nn.Module): + def __init__(self, hidden_size, eps=1e-6): + """ + Phi4MMRMSNorm is equivalent to T5LayerNorm + """ + super().__init__() + self.weight = nn.Parameter(torch.ones(hidden_size)) + self.variance_epsilon = eps + + def forward(self, hidden_states): + input_dtype = hidden_states.dtype + hidden_states = hidden_states.to(torch.float32) + variance = hidden_states.pow(2).mean(-1, keepdim=True) + hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) + return self.weight * hidden_states.to(input_dtype) + + def extra_repr(self): + return f"{tuple(self.weight.shape)}, eps={self.variance_epsilon}" + + +# Copied from transformers.models.gemma.modeling_gemma.GemmaRotaryEmbedding with gemma->phi3, Gemma->Phi3 +class Phi4MMRotaryEmbedding(nn.Module): + def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None): + super().__init__() + + self.dim = dim + self.max_position_embeddings = max_position_embeddings + self.base = base + + inv_freq = 1.0 / (self.base ** (torch.arange(0, self.dim, 2, dtype=torch.int64).float() / self.dim)) + self.register_buffer("inv_freq", tensor=inv_freq, persistent=False) + + @torch.no_grad() + def forward(self, x, position_ids, seq_len=None): + # x: [bs, num_attention_heads, seq_len, head_size] + self.inv_freq.to(x.device) + inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1) + position_ids_expanded = position_ids[:, None, :].float() + # Force float32 since bfloat16 loses precision on long contexts + # See https://github.com/huggingface/transformers/pull/29285 + device_type = x.device.type + device_type = device_type if isinstance(device_type, str) and device_type != "mps" else "cpu" + with torch.autocast(device_type=device_type, enabled=False): + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + cos = emb.cos() + sin = emb.sin() + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +class Phi4MMSuScaledRotaryEmbedding(Phi4MMRotaryEmbedding): + def __init__(self, dim, config, device=None): + warnings.warn( + "The class Phi4MMSuScaledRotaryEmbedding is deprecated and will be removed in version 5 of Transformers. Please" + " use Phi4MMLongRoPEScaledRotaryEmbedding instead.", + FutureWarning, + ) + super().__init__(dim, config.max_position_embeddings, config.rope_theta, device) + + self.short_factor = config.rope_scaling["short_factor"] + self.long_factor = config.rope_scaling["long_factor"] + self.original_max_position_embeddings = config.original_max_position_embeddings + + @torch.no_grad() + def forward(self, x, position_ids, seq_len=None): + seq_len = torch.max(position_ids) + 1 + if seq_len > self.original_max_position_embeddings: + ext_factors = torch.tensor(self.long_factor, dtype=torch.float32, device=x.device) + else: + ext_factors = torch.tensor(self.short_factor, dtype=torch.float32, device=x.device) + inv_freq_shape = torch.arange(0, self.dim, 2, dtype=torch.int64, device=x.device).float() / self.dim + self.inv_freq = 1.0 / (ext_factors * self.base**inv_freq_shape) + inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1) + position_ids_expanded = position_ids[:, None, :].float() + # Force float32 since bfloat16 loses precision on long contexts + # See https://github.com/huggingface/transformers/pull/29285 + device_type = x.device.type + device_type = device_type if isinstance(device_type, str) and device_type != "mps" else "cpu" + with torch.autocast(device_type=device_type, enabled=False): + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + scale = self.max_position_embeddings / self.original_max_position_embeddings + if scale <= 1.0: + scaling_factor = 1.0 + else: + scaling_factor = math.sqrt(1 + math.log(scale) / math.log(self.original_max_position_embeddings)) + cos = emb.cos() * scaling_factor + sin = emb.sin() * scaling_factor + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +class Phi4MMYarnScaledRotaryEmbedding(Phi4MMRotaryEmbedding): + def __init__(self, dim, config, device=None): + warnings.warn( + "The class Phi4MMYarnScaledRotaryEmbedding is deprecated and will be removed in version 5 of Transformers", + FutureWarning, + ) + super().__init__(dim, config.max_position_embeddings, config.rope_theta, device) + + self.short_factor = config.rope_scaling["short_factor"] + self.long_factor = config.rope_scaling["long_factor"] + self.original_max_position_embeddings = config.original_max_position_embeddings + + @torch.no_grad() + def forward(self, x, position_ids, seq_len=None): + seq_len = torch.max(position_ids) + 1 + if seq_len > self.original_max_position_embeddings: + ext_factors = torch.tensor(self.long_factor, dtype=torch.float32, device=x.device) + else: + ext_factors = torch.tensor(self.short_factor, dtype=torch.float32, device=x.device) + + inv_freq_shape = torch.arange(0, self.dim, 2, dtype=torch.int64, device=x.device).float() / self.dim + self.inv_freq = 1.0 / (ext_factors * self.base**inv_freq_shape) + + inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1) + position_ids_expanded = position_ids[:, None, :].float() + + # Force float32 since bfloat16 loses precision on long contexts + # See https://github.com/huggingface/transformers/pull/29285 + device_type = x.device.type + device_type = device_type if isinstance(device_type, str) and device_type != "mps" else "cpu" + with torch.autocast(device_type=device_type, enabled=False): + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + + scale = self.max_position_embeddings / self.original_max_position_embeddings + if scale <= 1.0: + scaling_factor = 1.0 + else: + scaling_factor = 0.1 * math.log(scale) + 1.0 + + cos = emb.cos() * scaling_factor + sin = emb.sin() * scaling_factor + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +class Phi4MMLongRoPEScaledRotaryEmbedding(Phi4MMRotaryEmbedding): + def __init__(self, dim, config, device=None): + super().__init__(dim, config.max_position_embeddings, config.rope_theta, device) + + self.short_factor = config.rope_scaling["short_factor"] + self.long_factor = config.rope_scaling["long_factor"] + self.original_max_position_embeddings = config.original_max_position_embeddings + + @torch.no_grad() + def forward(self, x, position_ids, seq_len=None): + seq_len = seq_len or torch.max(position_ids) + 1 + if seq_len > self.original_max_position_embeddings: + ext_factors = torch.tensor(self.long_factor, dtype=torch.float32, device=x.device) + else: + ext_factors = torch.tensor(self.short_factor, dtype=torch.float32, device=x.device) + + inv_freq_shape = torch.arange(0, self.dim, 2, dtype=torch.int64, device=x.device).float() / self.dim + self.inv_freq = 1.0 / (ext_factors * self.base**inv_freq_shape) + + inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1) + position_ids_expanded = position_ids[:, None, :].float() + + # Force float32 since bfloat16 loses precision on long contexts + # See https://github.com/huggingface/transformers/pull/29285 + device_type = x.device.type + device_type = device_type if isinstance(device_type, str) and device_type != "mps" else "cpu" + with torch.autocast(device_type=device_type, enabled=False): + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + + scale = self.max_position_embeddings / self.original_max_position_embeddings + if scale <= 1.0: + scaling_factor = 1.0 + else: + scaling_factor = math.sqrt(1 + math.log(scale) / math.log(self.original_max_position_embeddings)) + + cos = emb.cos() * scaling_factor + sin = emb.sin() * scaling_factor + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +# Copied from transformers.models.llama.modeling_llama.rotate_half +def rotate_half(x): + """Rotates half the hidden dims of the input.""" + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def apply_rotary_pos_emb(q, k, cos, sin, position_ids=None, unsqueeze_dim=1): + """Applies Rotary Position Embedding to the query and key tensors. + + Args: + q (`torch.Tensor`): The query tensor. + k (`torch.Tensor`): The key tensor. + cos (`torch.Tensor`): The cosine part of the rotary embedding. + sin (`torch.Tensor`): The sine part of the rotary embedding. + position_ids (`torch.Tensor`, *optional*): + Deprecated and unused. + unsqueeze_dim (`int`, *optional*, defaults to 1): + The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and + sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note + that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and + k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes + cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have + the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2. + Returns: + `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding. + """ + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + + rotary_dim = cos.shape[-1] + q_rot, q_pass = q[..., :rotary_dim], q[..., rotary_dim:] + k_rot, k_pass = k[..., :rotary_dim], k[..., rotary_dim:] + + q_embed = torch.cat([(q_rot * cos) + (rotate_half(q_rot) * sin), q_pass], dim=-1) + k_embed = torch.cat([(k_rot * cos) + (rotate_half(k_rot) * sin), k_pass], dim=-1) + return q_embed, k_embed + + +class Phi4MMMLP(nn.Module): + def __init__(self, config): + super().__init__() + + self.config = config + self.gate_up_proj = nn.Linear(config.hidden_size, 2 * config.intermediate_size, bias=False) + self.down_proj = nn.Linear(config.intermediate_size, config.hidden_size, bias=False) + + self.activation_fn = ACT2FN[config.hidden_act] + + def forward(self, hidden_states: torch.FloatTensor) -> torch.FloatTensor: + up_states = self.gate_up_proj(hidden_states) + + gate, up_states = up_states.chunk(2, dim=-1) + up_states = up_states * self.activation_fn(gate) + + return self.down_proj(up_states) + + +# Copied from transformers.models.llama.modeling_llama.repeat_kv with llama->phi +def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor: + """ + This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch, + num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim) + """ + batch, num_key_value_heads, slen, head_dim = hidden_states.shape + if n_rep == 1: + return hidden_states + hidden_states = hidden_states[:, :, None, :, :].expand(batch, num_key_value_heads, n_rep, slen, head_dim) + return hidden_states.reshape(batch, num_key_value_heads * n_rep, slen, head_dim) + + +class Phi4MMAttention(nn.Module): + """Multi-headed attention from 'Attention Is All You Need' paper""" + + def __init__(self, config: Phi4MMConfig, layer_idx: Optional[int] = None): + super().__init__() + self.config = config + self.layer_idx = layer_idx + if layer_idx is None: + logger.warning_once( + f"Instantiating {self.__class__.__name__} without passing a `layer_idx` is not recommended and will " + "lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` " + "when creating this class." + ) + + self.attention_dropout = config.attention_dropout + self.hidden_size = config.hidden_size + self.num_heads = config.num_attention_heads + self.head_dim = self.hidden_size // self.num_heads + self.num_key_value_heads = config.num_key_value_heads + self.num_key_value_groups = self.num_heads // self.num_key_value_heads + self.max_position_embeddings = config.max_position_embeddings + self.original_max_position_embeddings = config.original_max_position_embeddings + self.rope_theta = config.rope_theta + self.rope_scaling = config.rope_scaling + self.rotary_ndims = int(self.head_dim * config.partial_rotary_factor) + self.is_causal = True + + if (self.head_dim * self.num_heads) != self.hidden_size: + raise ValueError( + f"hidden_size must be divisible by num_heads (got `hidden_size`: {self.hidden_size}" + f" and `num_heads`: {self.num_heads})." + ) + + op_size = self.num_heads * self.head_dim + 2 * (self.num_key_value_heads * self.head_dim) + self.o_proj = nn.Linear(self.num_heads * self.head_dim, self.hidden_size, bias=False) + self.qkv_proj = nn.Linear(self.hidden_size, op_size, bias=False) + self._init_rope() + + def _init_rope(self): + if self.rope_scaling is None: + self.rotary_emb = Phi4MMRotaryEmbedding( + self.rotary_ndims, + max_position_embeddings=self.max_position_embeddings, + base=self.rope_theta, + ) + else: + scaling_type = self.config.rope_scaling["type"] + if scaling_type == "longrope": + self.rotary_emb = Phi4MMLongRoPEScaledRotaryEmbedding(self.rotary_ndims, self.config) + else: + raise ValueError(f"Unknown RoPE scaling type {scaling_type}") + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + output_attentions: bool = False, + use_cache: bool = False, + cache_position: Optional[torch.LongTensor] = None, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + logger.warning_once("You are not running the flash-attention implementation, expect numerical differences.") + + bsz, q_len, _ = hidden_states.size() + + qkv = self.qkv_proj(hidden_states) + query_pos = self.num_heads * self.head_dim + query_states = qkv[..., :query_pos] + key_states = qkv[..., query_pos : query_pos + self.num_key_value_heads * self.head_dim] + value_states = qkv[..., query_pos + self.num_key_value_heads * self.head_dim :] + + query_states = query_states.view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = key_states.view(bsz, q_len, self.num_key_value_heads, self.head_dim).transpose(1, 2) + value_states = value_states.view(bsz, q_len, self.num_key_value_heads, self.head_dim).transpose(1, 2) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + if self.layer_idx is None: + raise ValueError( + f"The cache structure has changed since version v4.36. If you are using {self.__class__.__name__} " + "for auto-regressive decoding with k/v caching, please make sure to initialize the attention class " + "with a layer index." + ) + kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx) + cos, sin = self.rotary_emb(value_states, position_ids, seq_len=kv_seq_len) + + query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids) + + if past_key_value is not None: + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} # Specific to RoPE models + key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs) + + # repeat k/v heads if n_kv_heads < n_heads + key_states = repeat_kv(key_states, self.num_key_value_groups) + value_states = repeat_kv(value_states, self.num_key_value_groups) + + attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim) + + if attention_mask is not None: + causal_mask = attention_mask[:, :, :, : key_states.shape[-2]] + attn_weights += causal_mask + + # upcast attention to fp32 + attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(value_states.dtype) + attn_weights = nn.functional.dropout(attn_weights, p=self.attention_dropout, training=self.training) + + attn_output = torch.matmul(attn_weights, value_states) + + if attn_output.size() != (bsz, self.num_heads, q_len, self.head_dim): + raise ValueError( + f"`attn_output` should be of size {(bsz, self.num_heads, q_len, self.head_dim)}, but is" + f" {attn_output.size()}" + ) + + attn_output = attn_output.transpose(1, 2).contiguous() + attn_output = attn_output.reshape(bsz, q_len, self.hidden_size) + + attn_output = self.o_proj(attn_output) + + if not output_attentions: + attn_weights = None + + return attn_output, attn_weights, past_key_value + + +class Phi4MMFlashAttention2(Phi4MMAttention): + """ + Phi-4-MM flash attention module. This module inherits from `Phi4MMAttention` as the weights of the module stays + untouched. The only required change would be on the forward pass where it needs to correctly call the public API of + flash attention and deal with padding tokens in case the input contains any of them. + """ + + # Copied from transformers.models.llama.modeling_llama.LlamaFlashAttention2.__init__ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # TODO: Should be removed once Flash Attention for RoCm is bumped to 2.1. + # flash_attn<2.1 generates top-left aligned causal mask, while what is needed here is bottom-right alignement, that was made default for flash_attn>=2.1. This attribute is used to handle this difference. Reference: https://github.com/Dao-AILab/flash-attention/releases/tag/v2.1.0. + # Beware that with flash_attn<2.1, using q_seqlen != k_seqlen (except for the case q_seqlen == 1) produces a wrong mask (top-left). + self._flash_attn_uses_top_left_mask = not is_flash_attn_greater_or_equal_2_10() + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.LongTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + output_attentions: bool = False, + use_cache: bool = False, + cache_position: Optional[torch.LongTensor] = None, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + # Phi4MMFlashAttention2 attention does not support output_attentions + + output_attentions = False + + bsz, q_len, _ = hidden_states.size() + + qkv = self.qkv_proj(hidden_states) + query_pos = self.num_heads * self.head_dim + query_states = qkv[..., :query_pos] + key_states = qkv[..., query_pos : query_pos + self.num_key_value_heads * self.head_dim] + value_states = qkv[..., query_pos + self.num_key_value_heads * self.head_dim :] + + # Flash attention requires the input to have the shape + # batch_size x seq_length x head_dim x hidden_dim + # therefore we just need to keep the original shape + query_states = query_states.view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = key_states.view(bsz, q_len, self.num_key_value_heads, self.head_dim).transpose(1, 2) + value_states = value_states.view(bsz, q_len, self.num_key_value_heads, self.head_dim).transpose(1, 2) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + if self.layer_idx is None: + raise ValueError( + f"The cache structure has changed since version v4.36. If you are using {self.__class__.__name__} " + "for auto-regressive decoding with k/v caching, please make sure to initialize the attention class " + "with a layer index." + ) + kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx) + + # Because the input can be padded, the absolute sequence length depends on the max position id. + rotary_seq_len = ( + max(kv_seq_len, position_ids[:, -1].max().item() + 1) if position_ids is not None else kv_seq_len + ) + + cos, sin = self.rotary_emb(value_states, seq_len=rotary_seq_len, position_ids=position_ids) + + query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids) + + if past_key_value is not None: + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} # Specific to RoPE models + key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs) + + # repeat k/v heads if n_kv_heads < n_heads + key_states = repeat_kv(key_states, self.num_key_value_groups) + value_states = repeat_kv(value_states, self.num_key_value_groups) + + attn_dropout = self.attention_dropout if self.training else 0.0 + + # In PEFT, usually we cast the layer norms in float32 for training stability reasons + # therefore the input hidden states gets silently casted in float32. Hence, we need + # cast them back in the correct dtype just to be sure everything works as expected. + # This might slowdown training & inference so it is recommended to not cast the LayerNorms + # in fp32. + + if query_states.dtype == torch.float32: + if torch.is_autocast_enabled(): + target_dtype = torch.get_autocast_gpu_dtype() + # Handle the case where the model is quantized + elif hasattr(self.config, "_pre_quantization_dtype"): + target_dtype = self.config._pre_quantization_dtype + else: + target_dtype = self.qkv_proj.weight.dtype + + logger.warning_once( + f"The input hidden states seems to be silently casted in float32, this might be related to" + f" the fact you have upcasted embedding or layer norm layers in float32. We will cast back the input in" + f" {target_dtype}." + ) + + query_states = query_states.to(target_dtype) + key_states = key_states.to(target_dtype) + value_states = value_states.to(target_dtype) + + # Reashape to the expected shape for Flash Attention + query_states = query_states.transpose(1, 2) + key_states = key_states.transpose(1, 2) + value_states = value_states.transpose(1, 2) + + attn_output = _flash_attention_forward( + query_states, + key_states, + value_states, + attention_mask, + q_len, + position_ids=position_ids, + dropout=attn_dropout, + sliding_window=getattr(self.config, "sliding_window", None), + use_top_left_mask=self._flash_attn_uses_top_left_mask, + is_causal=self.is_causal, + ) + + attn_output = attn_output.reshape(bsz, q_len, self.hidden_size).contiguous() + attn_output = self.o_proj(attn_output) + + if not output_attentions: + attn_weights = None + + return attn_output, attn_weights, past_key_value + + +# copied from transformers.models.llama.modeling_llama.LlamaSdpaAttention with Llama->Phi +# TODO @Arthur no longer copied from LLama after static cache +class Phi4MMSdpaAttention(Phi4MMAttention): + """ + Phi4MM attention module using torch.nn.functional.scaled_dot_product_attention. This module inherits from + `Phi4MMAttention` as the weights of the module stays untouched. The only changes are on the forward pass to adapt to + SDPA API. + """ + + # Adapted from Phi4MMAttention.forward + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + output_attentions: bool = False, + use_cache: bool = False, + cache_position: Optional[torch.LongTensor] = None, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + if output_attentions: + # TODO: Improve this warning with e.g. `model.config.attn_implementation = "manual"` once this is implemented. + logger.warning_once( + "Phi4MMModel is using Phi4MMSdpaAttention, but `torch.nn.functional.scaled_dot_product_attention` does not support `output_attentions=True`. Falling back to the manual attention implementation, " + 'but specifying the manual implementation will be required from Transformers version v5.0.0 onwards. This warning can be removed using the argument `attn_implementation="eager"` when loading the model.' + ) + return super().forward( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_value, + output_attentions=output_attentions, + use_cache=use_cache, + ) + + bsz, q_len, _ = hidden_states.size() + + qkv = self.qkv_proj(hidden_states) + query_pos = self.num_heads * self.head_dim + query_states = qkv[..., :query_pos] + key_states = qkv[..., query_pos : query_pos + self.num_key_value_heads * self.head_dim] + value_states = qkv[..., query_pos + self.num_key_value_heads * self.head_dim :] + + query_states = query_states.view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = key_states.view(bsz, q_len, self.num_key_value_heads, self.head_dim).transpose(1, 2) + value_states = value_states.view(bsz, q_len, self.num_key_value_heads, self.head_dim).transpose(1, 2) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx) + cos, sin = self.rotary_emb(value_states, position_ids, seq_len=kv_seq_len) + + query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids) + + if past_key_value is not None: + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} # Specific to RoPE models + key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs) + + key_states = repeat_kv(key_states, self.num_key_value_groups) + value_states = repeat_kv(value_states, self.num_key_value_groups) + + causal_mask = attention_mask + if attention_mask is not None: + causal_mask = attention_mask[:, :, :, : key_states.shape[-2]] + + # SDPA with memory-efficient backend is currently (torch==2.1.2) bugged with non-contiguous inputs with custom attn_mask, + # Reference: https://github.com/pytorch/pytorch/issues/112577. + if query_states.device.type == "cuda" and attention_mask is not None: + query_states = query_states.contiguous() + key_states = key_states.contiguous() + value_states = value_states.contiguous() + + # We dispatch to SDPA's Flash Attention or Efficient kernels via this `is_causal` if statement instead of an inline conditional assignment + # in SDPA to support both torch.compile's dynamic shapes and full graph options. An inline conditional prevents dynamic shapes from compiling. + # The q_len > 1 is necessary to match with AttentionMaskConverter.to_causal_4d that does not create a causal mask in case q_len == 1. + is_causal = True if causal_mask is None and q_len > 1 else False + + attn_output = torch.nn.functional.scaled_dot_product_attention( + query_states, + key_states, + value_states, + attn_mask=causal_mask, + dropout_p=self.attention_dropout if self.training else 0.0, + is_causal=is_causal, + ) + + attn_output = attn_output.transpose(1, 2).contiguous() + attn_output = attn_output.view(bsz, q_len, self.hidden_size) + + attn_output = self.o_proj(attn_output) + + return attn_output, None, past_key_value + + +PHI4MM_ATTENTION_CLASSES = { + "eager": Phi4MMAttention, + "flash_attention_2": Phi4MMFlashAttention2, + "sdpa": Phi4MMSdpaAttention, +} + + +class Phi4MMDecoderLayer(nn.Module): + def __init__(self, config: Phi4MMConfig, layer_idx: int): + super().__init__() + + self.config = config + self.self_attn = PHI4MM_ATTENTION_CLASSES[config._attn_implementation](config, layer_idx=layer_idx) + + self.mlp = Phi4MMMLP(config) + self.input_layernorm = Phi4MMRMSNorm(config.hidden_size, eps=config.rms_norm_eps) + + self.resid_attn_dropout = nn.Dropout(config.resid_pdrop) + self.resid_mlp_dropout = nn.Dropout(config.resid_pdrop) + self.post_attention_layernorm = Phi4MMRMSNorm(config.hidden_size, eps=config.rms_norm_eps) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + use_cache: Optional[bool] = False, + cache_position: Optional[torch.LongTensor] = None, + **kwargs, + ) -> Tuple[torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]]]: + """ + Args: + hidden_states (`torch.FloatTensor`): + input to the layer of shape `(batch, seq_len, embed_dim)` + attention_mask (`torch.FloatTensor`, *optional*): attention mask of size + `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values. + position_ids (`torch.LongTensor` of shape `({0})`, *optional*): + Indices of positions of each input sequence tokens in the position embeddings. Selected in the range + `[0, config.n_positions - 1]`. [What are position IDs?](../glossary#position-ids) + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under + returned tensors for more detail. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding + (see `past_key_values`). + past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states + cache_position (`torch.LongTensor` of shape `(sequence_length)`, *optional*): + Indices depicting the position of the input sequence tokens in the sequence + kwargs (`dict`, *optional*): + Arbitrary kwargs to be ignored, used for FSDP and other methods that injects code + into the model + """ + + residual = hidden_states + + hidden_states = self.input_layernorm(hidden_states) + + # Self Attention + attn_outputs, self_attn_weights, present_key_value = self.self_attn( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_value, + output_attentions=output_attentions, + use_cache=use_cache, + cache_position=cache_position, + ) + + hidden_states = residual + self.resid_attn_dropout(attn_outputs) + + residual = hidden_states + hidden_states = self.post_attention_layernorm(hidden_states) + hidden_states = self.mlp(hidden_states) + hidden_states = residual + self.resid_mlp_dropout(hidden_states) + + outputs = (hidden_states,) + + if output_attentions: + outputs += (self_attn_weights,) + + if use_cache: + outputs += (present_key_value,) + + return outputs + + +PHI4MM_START_DOCSTRING = r""" + This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the + library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads + etc.) + + This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. + Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage + and behavior. + + Parameters: + config ([`Phi4MMConfig`]): + Model configuration class with all the parameters of the model. Initializing with a config file does not + load the weights associated with the model, only the configuration. Check out the + [`~PreTrainedModel.from_pretrained`] method to load the model weights. +""" + + +@add_start_docstrings( + "The bare Phi-4-MM model outputting raw hidden-states without any specific head on top.", + PHI4MM_START_DOCSTRING, +) +class Phi4MMPreTrainedModel(PreTrainedModel): + config_class = Phi4MMConfig + base_model_prefix = "model" + supports_gradient_checkpointing = True + _no_split_modules = ["Phi4MMDecoderLayer"] + _skip_keys_device_placement = "past_key_values" + _supports_flash_attn_2 = True + _supports_sdpa = True + _supports_cache_class = True + + _version = "0.0.5" + + def _init_weights(self, module): + std = self.config.initializer_range + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=std) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=std) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + + +PHI4MM_INPUTS_DOCSTRING = r""" + Args: + input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`): + Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide + it. + + Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and + [`PreTrainedTokenizer.__call__`] for details. + + [What are input IDs?](../glossary#input-ids) + attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*): + Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`: + + - 1 for tokens that are **not masked**, + - 0 for tokens that are **masked**. + + [What are attention masks?](../glossary#attention-mask) + + Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and + [`PreTrainedTokenizer.__call__`] for details. + + If `past_key_values` is used, optionally only the last `input_ids` have to be input (see + `past_key_values`). + + If you want to change padding behavior, you should read [`modeling_opt._prepare_decoder_attention_mask`] + and modify to your needs. See diagram 1 in [the paper](https://arxiv.org/abs/1910.13461) for more + information on the default strategy. + + - 1 indicates the head is **not masked**, + - 0 indicates the head is **masked**. + position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0, + config.n_positions - 1]`. + + [What are position IDs?](../glossary#position-ids) + past_key_values (`Cache` or `tuple(tuple(torch.FloatTensor))`, *optional*): + Pre-computed hidden-states (key and values in the self-attention blocks and in the cross-attention + blocks) that can be used to speed up sequential decoding. This typically consists in the `past_key_values` + returned by the model at a previous stage of decoding, when `use_cache=True` or `config.use_cache=True`. + + Two formats are allowed: + - a [`~cache_utils.Cache`] instance, see our + [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache); + - Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of + shape `(batch_size, num_heads, sequence_length, embed_size_per_head)`). This is also known as the legacy + cache format. + + The model will output the same cache format that is fed as input. If no `past_key_values` are passed, the + legacy cache format will be returned. + + If `past_key_values` are used, the user can optionally input only the last `input_ids` (those that don't + have their past key value states given to this model) of shape `(batch_size, 1)` instead of all `input_ids` + of shape `(batch_size, sequence_length)`. + inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*): + Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This + is useful if you want more control over how to convert `input_ids` indices into associated vectors than the + model's internal embedding lookup matrix. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned + tensors for more detail. + output_hidden_states (`bool`, *optional*): + Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for + more detail. + return_dict (`bool`, *optional*): + Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. + cache_position (`torch.LongTensor` of shape `(sequence_length)`, *optional*): + Indices depicting the position of the input sequence tokens in the sequence. Contrarily to `position_ids`, + this tensor is not affected by padding. It is used to update the cache in the correct position and to infer + the complete sequence length. +""" + + +@add_start_docstrings( + "The bare Phi-4-MM model outputting raw hidden-states without any specific head on top.", + PHI4MM_START_DOCSTRING, +) +class Phi4MMModel(Phi4MMPreTrainedModel): + """ + Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`Phi4MMDecoderLayer`] + + Args: + config: Phi4MMConfig + """ + + def __init__(self, config: Phi4MMConfig): + super().__init__(config) + self.padding_idx = config.pad_token_id + self.vocab_size = config.vocab_size + + self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.padding_idx) + self.embed_dropout = nn.Dropout(config.embd_pdrop) + + self.embed_tokens_extend = None + if isinstance(config.embd_layer, dict): + embedding_config = { + 'embedding_cls': config.embd_layer['embedding_cls'], + **config.embd_layer + } + self.embed_tokens_extend = Phi4MMImageAudioEmbedding(config, **embedding_config) + + self.layers = nn.ModuleList( + [Phi4MMDecoderLayer(config, layer_idx) for layer_idx in range(config.num_hidden_layers)] + ) + self._attn_implementation = config._attn_implementation + self.norm = Phi4MMRMSNorm(config.hidden_size, eps=config.rms_norm_eps) + + self.gradient_checkpointing = False + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_tokens + + def set_input_embeddings(self, value): + self.embed_tokens = value + + @add_start_docstrings_to_model_forward(PHI4MM_INPUTS_DOCSTRING) + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + input_image_embeds: Optional[torch.FloatTensor] = None, + image_sizes: Optional[torch.LongTensor] = None, + image_attention_mask=None, + input_audio_embeds: Optional[torch.FloatTensor] = None, + audio_embed_sizes=None, + audio_attention_mask=None, + audio_projection_mode=None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + **kwargs, + ) -> Union[Tuple, BaseModelOutputWithPast]: + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + use_cache = use_cache if use_cache is not None else self.config.use_cache + + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + if (input_ids is None) ^ (inputs_embeds is not None): + raise ValueError("You must specify exactly one of input_ids or inputs_embeds") + + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning_once( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + # kept for BC (non `Cache` `past_key_values` inputs) + return_legacy_cache = False + if use_cache and not isinstance(past_key_values, Cache): + return_legacy_cache = True + if past_key_values is None: + past_key_values = DynamicCache() + else: + past_key_values = DynamicCache.from_legacy_cache(past_key_values) + logger.warning_once( + "We detected that you are passing `past_key_values` as a tuple of tuples. This is deprecated and " + "will be removed in v4.47. Please convert your cache or use an appropriate `Cache` class " + "(https://huggingface.co/docs/transformers/kv_cache#legacy-cache-format)" + ) + + if inputs_embeds is None: + inputs_embeds = self.embed_tokens_extend( + input_ids=input_ids, + input_embeds=inputs_embeds, + input_image_embeds=input_image_embeds, + input_audio_embeds=input_audio_embeds, + image_sizes=image_sizes, + image_attention_mask=image_attention_mask, + audio_embed_sizes=audio_embed_sizes, + audio_attention_mask=audio_attention_mask, + audio_projection_mode=audio_projection_mode, + wte=self.embed_tokens, + ) + + if cache_position is None: + past_seen_tokens = past_key_values.get_seq_length() if past_key_values is not None else 0 + cache_position = torch.arange( + past_seen_tokens, past_seen_tokens + inputs_embeds.shape[1], device=inputs_embeds.device + ) + if position_ids is None: + position_ids = cache_position.unsqueeze(0) + + causal_mask = self._update_causal_mask( + attention_mask, inputs_embeds, cache_position, past_key_values, output_attentions + ) + + hidden_states = inputs_embeds + + # decoder layers + all_hidden_states = () if output_hidden_states else None + all_self_attns = () if output_attentions else None + next_decoder_cache = None + + for decoder_layer in self.layers: + if output_hidden_states: + all_hidden_states += (hidden_states,) + + if self.gradient_checkpointing and self.training: + layer_outputs = self._gradient_checkpointing_func( + decoder_layer.__call__, + hidden_states, + causal_mask, + position_ids, + past_key_values, + output_attentions, + use_cache, + cache_position, + ) + else: + layer_outputs = decoder_layer( + hidden_states, + attention_mask=causal_mask, + position_ids=position_ids, + past_key_value=past_key_values, + output_attentions=output_attentions, + use_cache=use_cache, + cache_position=cache_position, + ) + + hidden_states = layer_outputs[0] + + if use_cache: + next_decoder_cache = layer_outputs[2 if output_attentions else 1] + + if output_attentions: + all_self_attns += (layer_outputs[1],) + + hidden_states = self.norm(hidden_states) + + # add hidden states from the last decoder layer + if output_hidden_states: + all_hidden_states += (hidden_states,) + + next_cache = next_decoder_cache if use_cache else None + if return_legacy_cache: + next_cache = next_cache.to_legacy_cache() + + if not return_dict: + return tuple(v for v in [hidden_states, next_cache, all_hidden_states, all_self_attns] if v is not None) + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=next_cache, + hidden_states=all_hidden_states, + attentions=all_self_attns, + ) + + def _update_causal_mask( + self, + attention_mask: torch.Tensor, + input_tensor: torch.Tensor, + cache_position: torch.Tensor, + past_key_values: Cache, + output_attentions: bool, + ): + if self.config._attn_implementation == "flash_attention_2": + if attention_mask is not None and 0.0 in attention_mask: + return attention_mask + return None + + # For SDPA, when possible, we will rely on its `is_causal` argument instead of its `attn_mask` argument, in + # order to dispatch on Flash Attention 2. This feature is not compatible with static cache, as SDPA will fail + # to infer the attention mask. + past_seen_tokens = past_key_values.get_seq_length() if past_key_values is not None else 0 + using_static_cache = isinstance(past_key_values, StaticCache) + using_sliding_window_cache = isinstance(past_key_values, SlidingWindowCache) + + # When output attentions is True, sdpa implementation's forward method calls the eager implementation's forward + if ( + self.config._attn_implementation == "sdpa" + and not (using_static_cache or using_sliding_window_cache) + and not output_attentions + ): + if AttentionMaskConverter._ignore_causal_mask_sdpa( + attention_mask, + inputs_embeds=input_tensor, + past_key_values_length=past_seen_tokens, + sliding_window=self.config.sliding_window, + is_training=self.training, + ): + return None + + dtype, device = input_tensor.dtype, input_tensor.device + min_dtype = torch.finfo(dtype).min + sequence_length = input_tensor.shape[1] + # SlidingWindowCache or StaticCache + if using_sliding_window_cache or using_static_cache: + target_length = past_key_values.get_max_cache_shape() + # DynamicCache or no cache + else: + target_length = ( + attention_mask.shape[-1] + if isinstance(attention_mask, torch.Tensor) + else past_seen_tokens + sequence_length + 1 + ) + + # In case the provided `attention` mask is 2D, we generate a causal mask here (4D). + causal_mask = self._prepare_4d_causal_attention_mask_with_cache_position( + attention_mask, + sequence_length=sequence_length, + target_length=target_length, + dtype=dtype, + device=device, + cache_position=cache_position, + batch_size=input_tensor.shape[0], + config=self.config, + past_key_values=past_key_values, + ) + + if ( + self.config._attn_implementation == "sdpa" + and attention_mask is not None + and attention_mask.device.type == "cuda" + and not output_attentions + ): + # Attend to all tokens in fully masked rows in the causal_mask, for example the relevant first rows when + # using left padding. This is required by F.scaled_dot_product_attention memory-efficient attention path. + # Details: https://github.com/pytorch/pytorch/issues/110213 + causal_mask = AttentionMaskConverter._unmask_unattended(causal_mask, min_dtype) + + return causal_mask + + @staticmethod + # Copied from transformers.models.mistral.modeling_mistral.MistralModel._prepare_4d_causal_attention_mask_with_cache_position with Mistral->Phi3 + def _prepare_4d_causal_attention_mask_with_cache_position( + attention_mask: torch.Tensor, + sequence_length: int, + target_length: int, + dtype: torch.dtype, + device: torch.device, + cache_position: torch.Tensor, + batch_size: int, + config: Phi4MMConfig, + past_key_values: Cache, + ): + """ + Creates a causal 4D mask of shape `(batch_size, 1, query_length, key_value_length)` from a 2D mask of shape + `(batch_size, key_value_length)`, or if the input `attention_mask` is already 4D, do nothing. + + Args: + attention_mask (`torch.Tensor`): + A 2D attention mask of shape `(batch_size, key_value_length)` or a 4D attention mask of shape `(batch_size, 1, query_length, key_value_length)`. + sequence_length (`int`): + The sequence length being processed. + target_length (`int`): + The target length: when generating with static cache, the mask should be as long as the static cache, to account for the 0 padding, the part of the cache that is not filled yet. + dtype (`torch.dtype`): + The dtype to use for the 4D attention mask. + device (`torch.device`): + The device to plcae the 4D attention mask on. + cache_position (`torch.Tensor`): + Indices depicting the position of the input sequence tokens in the sequence. + batch_size (`torch.Tensor`): + Batch size. + config (`Phi4MMConfig`): + The model's configuration class + past_key_values (`Cache`): + The cache class that is being used currently to generate + """ + if attention_mask is not None and attention_mask.dim() == 4: + # In this case we assume that the mask comes already in inverted form and requires no inversion or slicing. + causal_mask = attention_mask + else: + min_dtype = torch.finfo(dtype).min + causal_mask = torch.full( + (sequence_length, target_length), fill_value=min_dtype, dtype=dtype, device=device + ) + diagonal_attend_mask = torch.arange(target_length, device=device) > cache_position.reshape(-1, 1) + if config.sliding_window is not None: + # if we have sliding window, we should not attend to tokens beyond sliding window length, so we mask them out also + # the check is needed to verify is current checkpoint was trained with sliding window or not + if not isinstance(past_key_values, SlidingWindowCache) or sequence_length > target_length: + sliding_attend_mask = torch.arange(target_length, device=device) <= ( + cache_position.reshape(-1, 1) - config.sliding_window + ) + diagonal_attend_mask.bitwise_or_(sliding_attend_mask) + causal_mask *= diagonal_attend_mask + causal_mask = causal_mask[None, None, :, :].expand(batch_size, 1, -1, -1) + if attention_mask is not None: + causal_mask = causal_mask.clone() # copy to contiguous memory for in-place edit + if attention_mask.shape[-1] > target_length: + attention_mask = attention_mask[:, :target_length] + mask_length = attention_mask.shape[-1] + padding_mask = causal_mask[:, :, :, :mask_length] + attention_mask[:, None, None, :] + padding_mask = padding_mask == 0 + causal_mask[:, :, :, :mask_length] = causal_mask[:, :, :, :mask_length].masked_fill( + padding_mask, min_dtype + ) + return causal_mask + + +class Phi4MMForCausalLM(Phi4MMPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["lm_head.weight"] + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.__init__ with Llama->Phi + def __init__(self, config): + super().__init__(config) + self.model = Phi4MMModel(config) + self.vocab_size = config.vocab_size + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + # LoRA related settings + assert getattr(config, "vision_lora", None) is not None + from peft import LoraConfig, get_peft_model + vision_lora_config = LoraConfig( + r=config.vision_lora['r'], + lora_alpha=config.vision_lora['lora_alpha'], + target_modules=config.vision_lora['layer'], + lora_dropout=config.vision_lora['dp'], + task_type="CAUSAL_LM", + ) + peft_model = get_peft_model(self.model, vision_lora_config, adapter_name="vision") + self.config.vision_lora['r'] = config.vision_lora['r'] + self.config.vision_lora['lora_alpha'] = config.vision_lora['lora_alpha'] + self.config.vision_lora['layer'] = config.vision_lora['layer'] + self.config.vision_lora['dp'] = config.vision_lora['dp'] + + assert getattr(config, "speech_lora", None) is not None + speech_lora_config = LoraConfig( + r=config.speech_lora['r'], + lora_alpha=config.speech_lora['lora_alpha'], + target_modules=config.speech_lora['layer'], + lora_dropout=config.speech_lora['dp'], + task_type="CAUSAL_LM", + ) + peft_model.base_model.active_adapter.append("speech") + peft_model.add_adapter("speech", speech_lora_config) + self.config.speech_lora['r'] = config.speech_lora['r'] + self.config.speech_lora['lora_alpha'] = config.speech_lora['lora_alpha'] + self.config.speech_lora['layer'] = config.speech_lora['layer'] + self.config.speech_lora['dp'] = config.speech_lora['dp'] + + def set_lora_adapter(self, adapter_name) -> None: + from peft.tuners.lora.layer import LoraLayer + for module in self.modules(): + if isinstance(module, LoraLayer): + if module.merged: + warnings.warn("Adapter cannot be set when the model is merged. Unmerging the model first.") + module.unmerge() + module.set_adapter(adapter_name) + module._disable_adapters = False + + def unset_lora_adapter(self) -> None: + # Ref: peft/tuners/tuners_utils.py - enable_adapters() + # Ref: peft/tuners/lora/layer.py + from peft.tuners.lora.layer import LoraLayer + for module in self.modules(): + if isinstance(module, LoraLayer): + # disable grads on all adapter layers + # TODO weijian: may use enable_adapters() instead + for layer_name in module.adapter_layer_names: + layer = getattr(module, layer_name) + layer.requires_grad_(False) + module._disable_adapters = True + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.get_input_embeddings + def get_input_embeddings(self): + return self.model.embed_tokens + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.set_input_embeddings + def set_input_embeddings(self, value): + self.model.embed_tokens = value + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.get_output_embeddings + def get_output_embeddings(self): + return self.lm_head + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.set_output_embeddings + def set_output_embeddings(self, new_embeddings): + self.lm_head = new_embeddings + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.set_decoder + def set_decoder(self, decoder): + self.model = decoder + + # Copied from transformers.models.llama.modeling_llama.LlamaForCausalLM.get_decoder + def get_decoder(self): + return self.model + + # Ignore copy + @add_start_docstrings_to_model_forward(PHI4MM_INPUTS_DOCSTRING) + @replace_return_docstrings(output_type=CausalLMOutputWithPast, config_class=_CONFIG_FOR_DOC) + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + input_image_embeds: Optional[torch.FloatTensor] = None, + image_sizes: Optional[torch.LongTensor] = None, + image_attention_mask=None, + input_audio_embeds: Optional[torch.FloatTensor] = None, + audio_embed_sizes=None, + audio_attention_mask=None, + input_mode=None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + num_logits_to_keep: int = 0, + ) -> Union[Tuple, CausalLMOutputWithPast]: + r""" + Args: + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the masked language modeling loss. Indices should either be in `[0, ..., + config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored + (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`. + + num_logits_to_keep (`int`, *optional*): + Calculate logits for the last `num_logits_to_keep` tokens. If `0`, calculate logits for all + `input_ids` (special case). Only last token logits are needed for generation, and calculating them only for that + token can save memory, which becomes pretty significant for long sequences or large vocabulary size. + + Returns: + + Example: + + ```python + >>> from transformers import AutoTokenizer, Phi4MMForCausalLM + + >>> model = Phi4MMForCausalLM.from_pretrained("TBA") + >>> tokenizer = AutoTokenizer.from_pretrained("TBA") + + >>> prompt = "This is an example script ." + >>> inputs = tokenizer(prompt, return_tensors="pt") + + >>> # Generate + >>> generate_ids = model.generate(inputs.input_ids, max_length=30) + >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0] + 'This is an example script .\n Certainly! Below is a sample script that demonstrates a simple task, such as calculating the sum' + ```""" + if ( + use_cache + and self.config.rope_scaling + and cache_position is not None + and cache_position[0] == self.config.original_max_position_embeddings + ): + logger.warning( + f"If you are not using the generate method, you may encounter nonsensical outputs after the {self.config.original_max_position_embeddings}th token, as the KV cache needs to be recomputed." + ) + + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + if isinstance(input_mode, torch.Tensor): + # len(input_mode) == num_beams in beam search, and all elements of input_mode should have the same value + input_mode = input_mode[0].item() + input_mode = InputMode(input_mode) + + if input_mode in [InputMode.VISION_SPEECH, InputMode.VISION]: + self.set_lora_adapter('vision') + audio_projection_mode = 'vision' + elif input_mode == InputMode.SPEECH: + self.set_lora_adapter('speech') + audio_projection_mode = 'speech' + elif input_mode == InputMode.LANGUAGE: + self.unset_lora_adapter() + audio_projection_mode = 'speech' + else: + raise ValueError(f"Invalid input_mode: {input_mode}") + + # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn) + outputs = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + input_image_embeds=input_image_embeds, + image_sizes=image_sizes, + image_attention_mask=image_attention_mask, + input_audio_embeds=input_audio_embeds, + audio_embed_sizes=audio_embed_sizes, + audio_attention_mask=audio_attention_mask, + audio_projection_mode=audio_projection_mode, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + # Only compute necessary logits, and do not upcast them to float if we are not computing the loss + logits = self.lm_head(hidden_states[:, -num_logits_to_keep:, :]) + + loss = None + if labels is not None: + loss = self.loss_function(logits, labels, self.vocab_size) + + if not return_dict: + output = (logits,) + outputs[1:] + return (loss,) + output if loss is not None else output + + return CausalLMOutputWithPast( + loss=loss, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, + input_ids, + past_key_values=None, + attention_mask=None, + inputs_embeds=None, + input_image_embeds=None, + image_sizes=None, + image_attention_mask=None, + input_audio_embeds=None, + audio_embed_sizes=None, + audio_attention_mask=None, + input_mode=None, + cache_position=None, + position_ids=None, + use_cache=True, + num_logits_to_keep=None, + **kwargs + ): + # Overwritten -- this model may need to switch between short and long rope, invalidating the cache in the + # process + + # When the first time input length reached long and short factor switching point, enforce re-compute cache + # It will cause downside of slower at this single token position, however, better than current failure. + if ( + past_key_values + and self.config.rope_scaling + and input_ids.shape[1] >= self.config.original_max_position_embeddings + 1 + ): + past_length = cache_position[0] + if past_length <= self.config.original_max_position_embeddings: + past_key_values = None + + model_inputs = super().prepare_inputs_for_generation( + input_ids=input_ids, + past_key_values=past_key_values, + attention_mask=attention_mask, + inputs_embeds=inputs_embeds, + input_image_embeds=input_image_embeds, + image_sizes=image_sizes, + image_attention_mask=image_attention_mask, + input_audio_embeds=input_audio_embeds, + audio_embed_sizes=audio_embed_sizes, + audio_attention_mask=audio_attention_mask, + input_mode=input_mode, + cache_position=cache_position, + position_ids=position_ids, + use_cache=use_cache, + num_logits_to_keep=num_logits_to_keep, + **kwargs, + ) + return model_inputs + + +@add_start_docstrings( + """ + The [`Phi4MMModel`] with a sequence classification head on top (linear layer). + + [`Phi4MMForSequenceClassification`] uses the last token in order to do the classification, as other causal models + (e.g. GPT-2) do. + + Since it does classification on the last token, it requires to know the position of the last token. If a + `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If + no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the + padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in + each row of the batch). + """, + PHI4MM_START_DOCSTRING, +) +# Copied from transformers.models.llama.modeling_llama.LlamaForSequenceClassification with Llama->Phi, LLAMA->PHI, self.transformer->self.model, transformer_outputs->model_outputs +class Phi4MMForSequenceClassification(Phi4MMPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.num_labels = config.num_labels + self.model = Phi4MMModel(config) + self.score = nn.Linear(config.hidden_size, self.num_labels, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.model.embed_tokens + + def set_input_embeddings(self, value): + self.model.embed_tokens = value + + @add_start_docstrings_to_model_forward(PHI4MM_INPUTS_DOCSTRING) + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, SequenceClassifierOutputWithPast]: + r""" + labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*): + Labels for computing the sequence classification/regression loss. Indices should be in `[0, ..., + config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If + `config.num_labels > 1` a classification loss is computed (Cross-Entropy). + """ + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + model_outputs = self.model( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + hidden_states = model_outputs[0] + logits = self.score(hidden_states) + + if input_ids is not None: + batch_size = input_ids.shape[0] + else: + batch_size = inputs_embeds.shape[0] + + if self.config.pad_token_id is None and batch_size != 1: + raise ValueError("Cannot handle batch sizes > 1 if no padding token is defined.") + if self.config.pad_token_id is None: + sequence_lengths = -1 + else: + if input_ids is not None: + # if no pad token found, use modulo instead of reverse indexing for ONNX compatibility + sequence_lengths = torch.eq(input_ids, self.config.pad_token_id).int().argmax(-1) - 1 + sequence_lengths = sequence_lengths % input_ids.shape[-1] + sequence_lengths = sequence_lengths.to(logits.device) + else: + sequence_lengths = -1 + + pooled_logits = logits[torch.arange(batch_size, device=logits.device), sequence_lengths] + + loss = None + if labels is not None: + loss = self.loss_function(logits=logits, labels=labels, pooled_logits=pooled_logits, config=self.config) + + if not return_dict: + output = (pooled_logits,) + model_outputs[1:] + return ((loss,) + output) if loss is not None else output + + return SequenceClassifierOutputWithPast( + loss=loss, + logits=pooled_logits, + past_key_values=model_outputs.past_key_values, + hidden_states=model_outputs.hidden_states, + attentions=model_outputs.attentions, + ) + + +@add_start_docstrings( + """ + [`Phi4MMModel`] with a token classification head on top (a linear layer on top of the hidden-states output) e.g. for + Named-Entity-Recognition (NER) tasks. + """, + PHI4MM_START_DOCSTRING, +) +# Copied from transformers.models.mpt.modeling_mpt.MptForTokenClassification with Mpt->Phi,MPT->PHI,self.transformer->self.model,transformer_outputs->model_outputs +class Phi4MMForTokenClassification(Phi4MMPreTrainedModel): + def __init__(self, config: Phi4MMConfig): + super().__init__(config) + self.num_labels = config.num_labels + + self.model = Phi4MMModel(config) + if hasattr(config, "classifier_dropout") and config.classifier_dropout is not None: + classifier_dropout = config.classifier_dropout + elif hasattr(config, "hidden_dropout") and config.hidden_dropout is not None: + classifier_dropout = config.hidden_dropout + else: + classifier_dropout = 0.1 + self.dropout = nn.Dropout(classifier_dropout) + self.classifier = nn.Linear(config.hidden_size, config.num_labels) + + # Initialize weights and apply final processing + self.post_init() + + @add_start_docstrings_to_model_forward(PHI4MM_INPUTS_DOCSTRING) + @add_code_sample_docstrings( + checkpoint=_CHECKPOINT_FOR_DOC, + output_type=TokenClassifierOutput, + config_class=_CONFIG_FOR_DOC, + ) + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.Tensor, torch.Tensor], ...]] = None, + attention_mask: Optional[torch.Tensor] = None, + inputs_embeds: Optional[torch.Tensor] = None, + labels: Optional[torch.Tensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + **deprecated_arguments, + ) -> Union[Tuple[torch.Tensor], TokenClassifierOutput]: + r""" + labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*): + Labels for computing the sequence classification/regression loss. Indices should be in `[0, ..., + config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If + `config.num_labels > 1` a classification loss is computed (Cross-Entropy). + """ + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + model_outputs = self.model( + input_ids, + past_key_values=past_key_values, + attention_mask=attention_mask, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = model_outputs[0] + hidden_states = self.dropout(hidden_states) + logits = self.classifier(hidden_states) + + loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(logits.device) + batch_size, seq_length = labels.shape + loss_fct = CrossEntropyLoss() + loss = loss_fct( + logits.view(batch_size * seq_length, self.num_labels), labels.view(batch_size * seq_length) + ) + + if not return_dict: + output = (logits,) + model_outputs[2:] + return ((loss,) + output) if loss is not None else output + + return TokenClassifierOutput( + loss=loss, + logits=logits, + hidden_states=model_outputs.hidden_states, + attentions=model_outputs.attentions, + ) + + +AutoConfig.register("phi4mm", Phi4MMConfig) +AutoModelForCausalLM.register(Phi4MMConfig, Phi4MMForCausalLM) +Phi4MMConfig.register_for_auto_class() +Phi4MMForCausalLM.register_for_auto_class("AutoModelForCausalLM") diff --git a/phi_4_mm.tech_report.02252025.pdf b/phi_4_mm.tech_report.02252025.pdf new file mode 100644 index 0000000..1b22e6e --- /dev/null +++ b/phi_4_mm.tech_report.02252025.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5469d9123cbee2b41729db3217cacfeaa96eaf543868caa2eeec7cf2d24547d +size 5295165 diff --git a/preprocessor_config.json b/preprocessor_config.json new file mode 100644 index 0000000..6dd4622 --- /dev/null +++ b/preprocessor_config.json @@ -0,0 +1,14 @@ +{ + "auto_map": { + "AutoProcessor": "processing_phi4mm.Phi4MMProcessor", + "AutoImageProcessor": "processing_phi4mm.Phi4MMImageProcessor", + "AutoFeatureExtractor": "processing_phi4mm.Phi4MMAudioFeatureExtractor" + }, + "image_processor_type": "Phi4MMImageProcessor", + "processor_class": "Phi4MMProcessor", + "feature_extractor_type": "Phi4MMAudioFeatureExtractor", + "audio_compression_rate": 8, + "audio_downsample_rate": 1, + "audio_feat_stride": 1, + "dynamic_hd": 36 +} diff --git a/processing_phi4mm.py b/processing_phi4mm.py new file mode 100644 index 0000000..c453631 --- /dev/null +++ b/processing_phi4mm.py @@ -0,0 +1,733 @@ +# Copyright 2024 Microsoft and the HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Processor class for Phi4MM +""" +import re +from typing import List, Optional, Tuple, Union +import math +from enum import Enum + +import numpy as np +import scipy +import torch +import torchvision + +from transformers import AutoFeatureExtractor, AutoImageProcessor +from transformers.feature_extraction_sequence_utils import SequenceFeatureExtractor +from transformers.image_processing_utils import BaseImageProcessor, BatchFeature +from transformers.image_utils import ( + ImageInput, + make_list_of_images, + valid_images, +) +from transformers.processing_utils import ProcessorMixin +from transformers.tokenization_utils_base import PaddingStrategy, TextInput, TruncationStrategy +from transformers.utils import TensorType, logging +from torch.nn.utils.rnn import pad_sequence + + +logger = logging.get_logger(__name__) + +# Special tokens +_COMPATIBLE_IMAGE_SPECIAL_TOKEN_PATTERN = r'<\|image_\d+\|>' # For backward compatibility +_COMPATIBLE_AUDIO_SPECIAL_TOKEN_PATTERN = r'<\|audio_\d+\|>' # For backward compatibility +_IMAGE_SPECIAL_TOKEN = '<|endoftext10|>' +_AUDIO_SPECIAL_TOKEN = '<|endoftext11|>' +_IMAGE_SPECIAL_TOKEN_ID = 200010 # '<|endoftext10|>', or we can better name it (in `tokenizer_config.json`) +_AUDIO_SPECIAL_TOKEN_ID = 200011 # '<|endoftext11|>' + + +class InputMode(Enum): + LANGUAGE = 0 + VISION = 1 + SPEECH = 2 + VISION_SPEECH = 3 + + +class Phi4MMImageProcessor(BaseImageProcessor): + r""" + Constructs a Phi4MM image processor. + """ + model_input_names = ["input_image_embeds", "image_sizes", "image_attention_mask"] + + def __init__( + self, + dynamic_hd, + **kwargs, + ) -> None: + super().__init__(**kwargs) + self.dynamic_hd = dynamic_hd + + def find_closest_aspect_ratio(self, aspect_ratio, target_ratios, width, height, image_size): + best_ratio_diff = float('inf') + best_ratio = (1, 1) + area = width * height + for ratio in target_ratios: + target_aspect_ratio = ratio[0] / ratio[1] + ratio_diff = abs(aspect_ratio - target_aspect_ratio) + if ratio_diff < best_ratio_diff: + best_ratio_diff = ratio_diff + best_ratio = ratio + elif ratio_diff == best_ratio_diff: + if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]: + best_ratio = ratio + return best_ratio + + def dynamic_preprocess(self, image, min_num=1, max_num=12, image_size=384, mask_size=27, use_thumbnail=True): + orig_width, orig_height = image.size + + w_crop_num = math.ceil(orig_width/float(image_size)) + h_crop_num = math.ceil(orig_height/float(image_size)) + if w_crop_num * h_crop_num > max_num: + + aspect_ratio = orig_width / orig_height + + # calculate the existing image aspect ratio + target_ratios = set( + (i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if + i * j <= max_num and i * j >= min_num) + target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1]) + + # find the closest aspect ratio to the target + target_aspect_ratio = self.find_closest_aspect_ratio( + aspect_ratio, target_ratios, orig_width, orig_height, image_size) + + # calculate the target width and height + target_width = image_size * target_aspect_ratio[0] + target_height = image_size * target_aspect_ratio[1] + else: + target_width = image_size * w_crop_num + target_height = image_size * h_crop_num + target_aspect_ratio = (w_crop_num, h_crop_num) + + # Calculate the ratio + ratio_width = target_width / orig_width + ratio_height = target_height / orig_height + if ratio_width < ratio_height: + new_size = (target_width, int(orig_height * ratio_width)) + padding_width = 0 + padding_height = target_height - int(orig_height * ratio_width) + else: + new_size = (int(orig_width * ratio_height), target_height) + padding_width = target_width - int(orig_width * ratio_height) + padding_height = 0 + + attention_mask = torch.ones((int(mask_size*target_aspect_ratio[1]), int(mask_size*target_aspect_ratio[0]))) + if padding_width >= 14: + attention_mask[:, -math.floor(padding_width/14):] = 0 + if padding_height >= 14: + attention_mask[-math.floor(padding_height/14):,:] = 0 + assert attention_mask.sum() > 0 + + if min(new_size[1], target_height) < 10 or min(new_size[0], target_width) < 10: + raise ValueError(f'the aspect ratio is very extreme {new_size}') + + image = torchvision.transforms.functional.resize(image, [new_size[1], new_size[0]],) + + resized_img = torchvision.transforms.functional.pad(image, [0, 0, padding_width, padding_height], fill=[255,255,255]) + + return resized_img, attention_mask + + def pad_to_max_num_crops(self, images, max_crops=5): + """ + images: B x 3 x H x W, B<=max_crops + """ + B, _, H, W = images.shape + if B < max_crops: + pad = torch.zeros(max_crops - B, 3, H, W, dtype=images.dtype, device=images.device) + images = torch.cat([images, pad], dim=0) + return images + + def pad_mask_to_max_num_crops(self, masks, max_crops=5): + B, H, W = masks.shape + if B < max_crops: + pad = torch.ones(max_crops - B, H, W, dtype=masks.dtype, device=masks.device) + masks = torch.cat([masks, pad], dim=0) + return masks + + def preprocess( + self, + images: ImageInput, + return_tensors: Optional[Union[str, TensorType]] = None, + ): + """ + Args: + images (`ImageInput`): + Image to preprocess. Expects a single or batch of images with pixel values ranging from 0 to 255. If + passing in images with pixel values between 0 and 1, set `do_rescale=False`. + return_tensors (`str` or `TensorType`, *optional*): + The type of tensors to return. Can be one of: + - Unset: Return a list of `np.ndarray`. + - `TensorType.TENSORFLOW` or `'tf'`: Return a batch of type `tf.Tensor`. + - `TensorType.PYTORCH` or `'pt'`: Return a batch of type `torch.Tensor`. + - `TensorType.NUMPY` or `'np'`: Return a batch of type `np.ndarray`. + - `TensorType.JAX` or `'jax'`: Return a batch of type `jax.numpy.ndarray`. + """ + images = make_list_of_images(images) + + if not valid_images(images): + raise ValueError( + "Invalid image type. Must be of type PIL.Image.Image, numpy.ndarray, " + "torch.Tensor, tf.Tensor or jax.ndarray." + ) + + # Basic settings. + img_processor = torchvision.transforms.Compose([ + torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize( + (0.5, 0.5, 0.5), + (0.5, 0.5, 0.5) + ), + ]) + dyhd_base_resolution = 448 + + # Dynamic HD + base_resolution = dyhd_base_resolution + images = [image.convert('RGB') for image in images] + # cover 384 and 448 resolution + mask_resolution = base_resolution // 14 + elems, image_attention_masks = [], [] + for im in images: + elem, attention_mask = self.dynamic_preprocess(im, max_num=self.dynamic_hd, image_size=base_resolution, mask_size=mask_resolution) + elems.append(elem) + image_attention_masks.append(attention_mask) + hd_images = [img_processor(im) for im in elems] + global_image = [torch.nn.functional.interpolate(im.unsqueeze(0).float(), size=(base_resolution, base_resolution), mode='bicubic',).to(im.dtype) for im in hd_images] + shapes = [[im.size(1), im.size(2)] for im in hd_images] + mask_shapes = [[mask.size(0), mask.size(1)] for mask in image_attention_masks] + global_attention_mask = [torch.ones((1, mask_resolution, mask_resolution)) for _ in hd_images] + hd_images_reshape = [im.reshape(1, 3, + h//base_resolution, + base_resolution, + w//base_resolution, + base_resolution + ).permute(0,2,4,1,3,5).reshape(-1, 3, base_resolution, base_resolution).contiguous() for im, (h, w) in zip(hd_images, shapes)] + attention_masks_reshape = [mask.reshape(1, + h//mask_resolution, + mask_resolution, + w//mask_resolution, + mask_resolution + ).permute(0,1,3,2,4).reshape(-1, mask_resolution, mask_resolution).contiguous() for mask, (h, w) in zip(image_attention_masks, mask_shapes)] + downsample_attention_masks = [mask[:,0::2,0::2].reshape(1, + h//mask_resolution, + w//mask_resolution, + mask_resolution//2+mask_resolution%2, + mask_resolution//2+mask_resolution%2 + ).permute(0,1,3,2,4) for mask, (h,w) in zip(attention_masks_reshape, mask_shapes)] + downsample_attention_masks = [mask.reshape(mask.size(1)*mask.size(2), mask.size(3)*mask.size(4))for mask in downsample_attention_masks] + num_img_tokens = [256 + 1 + int(mask.sum().item()) + int(mask[:,0].sum().item()) + 16 for mask in downsample_attention_masks] + + hd_images_reshape = [torch.cat([_global_image] + [_im], dim=0) for _global_image, _im in zip(global_image, hd_images_reshape)] + hd_masks_reshape = [torch.cat([_global_mask] + [_mask], dim=0) for _global_mask, _mask in zip(global_attention_mask, attention_masks_reshape)] + max_crops = max([img.size(0) for img in hd_images_reshape]) + image_transformed = [self.pad_to_max_num_crops(im, max_crops) for im in hd_images_reshape] + image_transformed = torch.stack(image_transformed, dim=0) + mask_transformed = [self.pad_mask_to_max_num_crops(mask, max_crops) for mask in hd_masks_reshape] + mask_transformed = torch.stack(mask_transformed, dim=0) + + returned_input_image_embeds = image_transformed + returned_image_sizes = torch.tensor(shapes, dtype=torch.long) + returned_image_attention_mask = mask_transformed + returned_num_img_tokens = num_img_tokens + + data = { + "input_image_embeds": returned_input_image_embeds, + "image_sizes": returned_image_sizes, + "image_attention_mask": returned_image_attention_mask, + "num_img_tokens": returned_num_img_tokens, + } + + return BatchFeature(data=data, tensor_type=return_tensors) + + +AudioInput = Tuple[Union[np.ndarray, torch.Tensor], int] +AudioInputs = List[AudioInput] + + +def speechlib_mel(sample_rate, n_fft, n_mels, fmin=None, fmax=None): + """Create a Mel filter-bank the same as SpeechLib FbankFC. + + Args: + sample_rate (int): Sample rate in Hz. number > 0 [scalar] + n_fft (int): FFT size. int > 0 [scalar] + n_mel (int): Mel filter size. int > 0 [scalar] + fmin (float): lowest frequency (in Hz). If None use 0.0. + float >= 0 [scalar] + fmax: highest frequency (in Hz). If None use sample_rate / 2. + float >= 0 [scalar] + + Returns + out (numpy.ndarray): Mel transform matrix + [shape=(n_mels, 1 + n_fft/2)] + """ + + bank_width = int(n_fft // 2 + 1) + if fmax is None: + fmax = sample_rate / 2 + if fmin is None: + fmin = 0 + assert fmin >= 0, "fmin cannot be negtive" + assert fmin < fmax <= sample_rate / 2, "fmax must be between (fmin, samplerate / 2]" + + def mel(f): + return 1127.0 * np.log(1.0 + f / 700.0) + + def bin2mel(fft_bin): + return 1127.0 * np.log(1.0 + fft_bin * sample_rate / (n_fft * 700.0)) + + def f2bin(f): + return int((f * n_fft / sample_rate) + 0.5) + + # Spec 1: FFT bin range [f2bin(fmin) + 1, f2bin(fmax) - 1] + klo = f2bin(fmin) + 1 + khi = f2bin(fmax) + + khi = max(khi, klo) + + # Spec 2: SpeechLib uses trianges in Mel space + mlo = mel(fmin) + mhi = mel(fmax) + m_centers = np.linspace(mlo, mhi, n_mels + 2) + ms = (mhi - mlo) / (n_mels + 1) + + matrix = np.zeros((n_mels, bank_width), dtype=np.float32) + for m in range(0, n_mels): + left = m_centers[m] + center = m_centers[m + 1] + right = m_centers[m + 2] + for fft_bin in range(klo, khi): + mbin = bin2mel(fft_bin) + if left < mbin < right: + matrix[m, fft_bin] = 1.0 - abs(center - mbin) / ms + + return matrix + + +class Phi4MMAudioFeatureExtractor(SequenceFeatureExtractor): + model_input_names = ["input_audio_embeds", "audio_embed_sizes", "audio_attention_mask"] + + def __init__(self, audio_compression_rate, audio_downsample_rate, audio_feat_stride, **kwargs): + feature_size = 80 + sampling_rate = 16000 + padding_value = 0.0 + super().__init__(feature_size, sampling_rate, padding_value, **kwargs) + + self.compression_rate = audio_compression_rate + self.qformer_compression_rate = audio_downsample_rate + self.feat_stride = audio_feat_stride + + self._eightk_method = "fillzero" + self._mel = speechlib_mel(16000, 512, 80, fmin=None, fmax=7690).T + + self._hamming400 = np.hamming(400) # for 16k audio + self._hamming200 = np.hamming(200) # for 8k audio + + def duration_to_frames(self, duration): + """duration in s, estimated frames""" + frame_rate = 10 + + num_frames = duration * 1000 // frame_rate + return num_frames + + def __call__( + self, + audios: List[AudioInput], + return_tensors: Optional[Union[str, TensorType]] = None, + ): + # Ref: https://github.com/huggingface/transformers/blob/v4.47.0/src/transformers/models/audio_spectrogram_transformer/feature_extraction_audio_spectrogram_transformer.py#L161 + returned_input_audio_embeds = [] + returned_audio_embed_sizes = [] + audio_frames_list = [] + + for audio_data, sample_rate in audios: + audio_embeds = self._extract_features(audio_data, sample_rate) + audio_frames = len(audio_embeds) * self.feat_stride + audio_embed_size = self._compute_audio_embed_size(audio_frames) + + returned_input_audio_embeds.append(torch.tensor(audio_embeds)) + returned_audio_embed_sizes.append(torch.tensor(audio_embed_size).long()) + audio_frames_list.append(audio_frames) + + returned_input_audio_embeds = pad_sequence( + returned_input_audio_embeds, batch_first=True + ) + returned_audio_embed_sizes = torch.stack(returned_audio_embed_sizes, dim=0) + audio_frames = torch.tensor(audio_frames_list) + returned_audio_attention_mask = torch.arange(0, audio_frames.max()).unsqueeze(0) < audio_frames.unsqueeze(1) if len(audios) > 1 else None + + data = { + "input_audio_embeds": returned_input_audio_embeds, + "audio_embed_sizes": returned_audio_embed_sizes, + } + if returned_audio_attention_mask is not None: + data["audio_attention_mask"] = returned_audio_attention_mask + + return BatchFeature(data=data, tensor_type=return_tensors) + + def _extract_spectrogram(self, wav, fs): + """Extract spectrogram features from waveform. + Args: + wav (1D array): waveform of the input + fs (int): sampling rate of the waveform, 16000 or 8000. + If fs=8000, the waveform will be resampled to 16000Hz. + Output: + log_fbank (2D array): a TxD matrix of log Mel filterbank features. + D=80, and T is the number of frames. + """ + if wav.ndim > 1: + wav = np.squeeze(wav) + + # by default, we extract the mean if stereo + if len(wav.shape) == 2: + wav = wav.mean(1) + + # Resample to 16000 or 8000 if needed + if fs > 16000: + wav = scipy.signal.resample_poly(wav, 1, fs // 16000) + fs = 16000 + elif 8000 < fs < 16000: + wav = scipy.signal.resample_poly(wav, 1, fs // 8000) + fs = 8000 + elif fs < 8000: + raise RuntimeError(f"Unsupported sample rate {fs}") + + if fs == 8000: + if self._eightk_method == "resample": + # Input audio is 8 kHz. Convert to 16 kHz before feature + # extraction + wav = scipy.signal.resample_poly(wav, 2, 1) + fs = 16000 + # Do nothing here for fillzero method + elif fs != 16000: + # Input audio is not a supported sample rate. + raise RuntimeError(f"Input data using an unsupported sample rate: {fs}") + + preemphasis = 0.97 + + if fs == 8000: + n_fft = 256 + win_length = 200 + hop_length = 80 + fft_window = self._hamming200 + elif fs == 16000: + n_fft = 512 + win_length = 400 + hop_length = 160 + fft_window = self._hamming400 + + # Spec 1: SpeechLib cut remaining sample insufficient for a hop + n_batch = (wav.shape[0] - win_length) // hop_length + 1 + # Here we don't use stride_tricks since the input array may not satisfy + # memory layout requirement and we need writeable output + # Here we only use list of views before copy to desination + # so it is more efficient than broadcasting + y_frames = np.array( + [wav[_stride : _stride + win_length] for _stride in range(0, hop_length * n_batch, hop_length)], + dtype=np.float32, + ) + + # Spec 2: SpeechLib applies preemphasis within each batch + y_frames_prev = np.roll(y_frames, 1, axis=1) + y_frames_prev[:, 0] = y_frames_prev[:, 1] + y_frames = (y_frames - preemphasis * y_frames_prev) * 32768 + + S = np.fft.rfft(fft_window * y_frames, n=n_fft, axis=1).astype(np.complex64) + + if fs == 8000: + # Need to pad the output to look like 16 kHz data but with zeros in + # the 4 to 8 kHz bins. + frames, bins = S.shape + padarray = np.zeros((frames, bins)) + S = np.concatenate((S[:, 0:-1], padarray), axis=1) # Nyquist bin gets set to zero + + spec = np.abs(S).astype(np.float32) + return spec + + def _extract_features(self, wav, fs): + """Extract log filterbank features from waveform. + Args: + wav (1D array): waveform of the input + fs (int): sampling rate of the waveform, 16000 or 8000. + If fs=8000, the waveform will be resampled to 16000Hz. + Output: + log_fbank (2D array): a TxD matrix of log Mel filterbank features. + D=80, and T is the number of frames. + """ + spec = self._extract_spectrogram(wav, fs) + spec_power = spec**2 + + fbank_power = np.clip(spec_power.dot(self._mel), 1.0, None) + log_fbank = np.log(fbank_power).astype(np.float32) + + return log_fbank + + def _compute_audio_embed_size(self, audio_frames): + integer = audio_frames // self.compression_rate + remainder = audio_frames % self.compression_rate + + result = integer if remainder == 0 else integer + 1 + + integer = result // self.qformer_compression_rate + remainder = result % self.qformer_compression_rate + result = integer if remainder == 0 else integer + 1 # qformer compression + + return result + + +class Phi4MMProcessor(ProcessorMixin): + r""" + Constructs a Phi4MM processor which raps an image processor, a audio processor, and a GPT tokenizer into a single processor. + + [`Phi4MMProcessor`] offers all the functionalities of [`Phi4MMImageProcessor`] and [`GPT2Tokenizer`]. See the + [`~Phi4MMProcessor.__call__`] and [`~Phi4MMProcessor.decode`] for more information. + + Args: + image_processor ([`Phi4MMImageProcessor`], *optional*): + The image processor is a required input. + tokenizer ([`GPT2Tokenizer`], *optional*): + The tokenizer is a required input. + """ + + attributes = ["image_processor", "audio_processor", "tokenizer"] + tokenizer_class = "GPT2TokenizerFast" + image_processor_class = "AutoImageProcessor" # Phi4MMImageProcessor will be registered later + audio_processor_class = "AutoFeatureExtractor" # Phi4MMAudioFeatureExtractor will be registered later + + def __init__(self, image_processor, audio_processor, tokenizer): + self.image_processor = image_processor + self.audio_processor = audio_processor + self.tokenizer = tokenizer + + def __call__( + self, + text: Union[TextInput, List[TextInput]], + images: Optional[ImageInput] = None, + audios: Optional[AudioInputs] = None, + padding: Union[bool, str, PaddingStrategy] = False, + truncation: Optional[Union[bool, str, TruncationStrategy]] = None, + max_length=None, + return_tensors: Optional[Union[str, TensorType]] = TensorType.PYTORCH, + ) -> BatchFeature: + """ + Main method to prepare for the model one or several sequences(s) and image(s). This method forards the `text` + and `kwargs` arguments to GPT2Tokenizer's [`~GPT2Tokenizer.__call__`] if `text` is not `None` to encode + the text. To prepare the image(s), this method forwards the `images` and `kwrags` arguments to + Phi4MMImageProcessor's [`~Phi4MMImageProcessor.__call__`] if `images` is not `None`. Please refer to the doctsring + of the above two methods for more information. + + Args: + text (`str`, `List[str]`, `List[List[str]]`): + The sequence or batch of sequences to be encoded. Each sequence can be a string or a list of strings + (pretokenized string). If the sequences are provided as list of strings (pretokenized), you must set + `is_split_into_words=True` (to lift the ambiguity with a batch of sequences). + images (`PIL.Image.Image`, `np.ndarray`, `torch.Tensor`, `List[PIL.Image.Image]`, `List[np.ndarray]`, `List[torch.Tensor]`): + The image or batch of images to be prepared. Each image can be a PIL image, NumPy array or PyTorch + tensor. Both channels-first and channels-last formats are supported. + padding (`bool`, `str` or [`~utils.PaddingStrategy`], *optional*, defaults to `False`): + Select a strategy to pad the returned sequences (according to the model's padding side and padding + index) among: + - `True` or `'longest'`: Pad to the longest sequence in the batch (or no padding if only a single + sequence if provided). + - `'max_length'`: Pad to a maximum length specified with the argument `max_length` or to the maximum + acceptable input length for the model if that argument is not provided. + - `False` or `'do_not_pad'` (default): No padding (i.e., can output a batch with sequences of different + lengths). + max_length (`int`, *optional*): + Maximum length of the returned list and optionally padding length (see above). + truncation (`bool`, *optional*): + Activates truncation to cut input sequences longer than `max_length` to `max_length`. + return_tensors (`str` or [`~utils.TensorType`], *optional*): + If set, will return tensors of a particular framework. Acceptable values are: + + - `'tf'`: Return TensorFlow `tf.constant` objects. + - `'pt'`: Return PyTorch `torch.Tensor` objects. + - `'np'`: Return NumPy `np.ndarray` objects. + - `'jax'`: Return JAX `jnp.ndarray` objects. + + Returns: + [`BatchFeature`]: A [`BatchFeature`] with the following fields: + + - **input_ids** -- List of token ids to be fed to a model. + - **input_image_embeds** -- Pixel values to be fed to a model. + - **image_sizes** -- List of tuples specifying the size of each image in `input_image_embeds`. + - **image_attention_mask** -- List of attention masks for each image in `input_image_embeds`. + - **input_audio_embeds** -- Audio embeddings to be fed to a model. + - **audio_embed_sizes** -- List of integers specifying the size of each audio in `input_audio_embeds`. + - **attention_mask** -- List of indices specifying which tokens should be attended to by the model. + """ + image_inputs = self.image_processor(images, return_tensors=return_tensors) if images is not None else {} + audio_inputs = self.audio_processor(audios, return_tensors=return_tensors) if audios is not None else {} + inputs = self._convert_images_audios_text_to_inputs( + image_inputs, + audio_inputs, + text, + padding=padding, + truncation=truncation, + max_length=max_length, + return_tensors=return_tensors, + ) + + # idenfity the input mode + if len(image_inputs) > 0 and len(audio_inputs) > 0: + input_mode = InputMode.VISION_SPEECH + elif len(image_inputs) > 0: + input_mode = InputMode.VISION + elif len(audio_inputs) > 0: + input_mode = InputMode.SPEECH + else: + input_mode = InputMode.LANGUAGE + inputs["input_mode"] = torch.tensor([input_mode.value], dtype=torch.long) + + return inputs + + @property + def special_image_token_id(self): + return self.tokenizer.convert_tokens_to_ids(self.special_image_token) + + def get_special_image_token_id(self): + return self.tokenizer.convert_tokens_to_ids(self.special_image_token) + + @property + def chat_template(self): + return self.tokenizer.chat_template + + def _convert_images_audios_text_to_inputs( + self, images, audios, text, padding=False, truncation=None, max_length=None, return_tensors=None + ): + # prepare image id to image input ids + if len(images) > 0: + input_image_embeds = images["input_image_embeds"] + image_sizes = images["image_sizes"] + image_attention_mask = images["image_attention_mask"] + num_img_tokens = images['num_img_tokens'] + else: + input_image_embeds = torch.tensor([]) + image_sizes = torch.tensor([]) + image_attention_mask = torch.tensor([]) + num_img_tokens = [] + + # prepare audio id to audio input ids + if len(audios) > 0: + input_audio_embeds = audios["input_audio_embeds"] + audio_embed_sizes = audios["audio_embed_sizes"] + audio_attention_mask = audios.get("audio_attention_mask", None) + else: + input_audio_embeds = torch.tensor([]) + audio_embed_sizes = torch.tensor([]) + audio_attention_mask = None + + # Replace certain special tokens for compatibility + # Ref: https://stackoverflow.com/questions/11475885/python-replace-regex + if isinstance(text, str): + text = [text] + assert isinstance(text, list) + processed_text = [re.sub(_COMPATIBLE_IMAGE_SPECIAL_TOKEN_PATTERN, _IMAGE_SPECIAL_TOKEN, t) for t in text] + processed_text = [re.sub(_COMPATIBLE_AUDIO_SPECIAL_TOKEN_PATTERN, _AUDIO_SPECIAL_TOKEN, t) for t in processed_text] + + input_ids_list = [self.tokenizer(t).input_ids for t in processed_text] + + img_cnt, audio_cnt = 0, 0 # only needed for later assertion + image_token_count_iter = iter(num_img_tokens) + audio_embed_size_iter = iter(audio_embed_sizes.tolist()) + new_input_ids_list = [] + for input_ids in input_ids_list: + i = 0 + while i < len(input_ids): + token_id = input_ids[i] + if token_id == _AUDIO_SPECIAL_TOKEN_ID: + token_count = next(audio_embed_size_iter) + audio_cnt += 1 + elif token_id == _IMAGE_SPECIAL_TOKEN_ID: + token_count = next(image_token_count_iter) + img_cnt += 1 + else: + i += 1 + continue + tokens = [token_id] * token_count + input_ids = input_ids[:i] + tokens + input_ids[i + 1:] + i += token_count + input_ids = torch.tensor(input_ids, dtype=torch.long) + new_input_ids_list.append(input_ids) + lengths = torch.tensor([len(input_ids) for input_ids in new_input_ids_list]) + max_len = lengths.max() + input_ids = input_ids.new_full((len(new_input_ids_list), max_len), self.tokenizer.pad_token_id) + # batched inference requires left padding + for i in range(len(new_input_ids_list)): + input_ids[i, max_len - len(new_input_ids_list[i]):] = new_input_ids_list[i] + + # If the below assertion fails, it might be that input pure-text + # messages contain image/audio special tokens literally + # (<|endoftext10|>, <|endoftext11|>). + assert ( + img_cnt == len(num_img_tokens) + ), ( + f"Number of image tokens in prompt_token_ids ({img_cnt}) " + f"does not match number of images ({len(num_img_tokens)})" + ) + assert ( + audio_cnt == len(audio_embed_sizes) + ), ( + f"Number of audio tokens in prompt_token_ids ({audio_cnt}) " + f"does not match number of audios ({len(audio_embed_sizes)})" + ) + + # prepare attention mask + seq_range = torch.arange(max_len - 1, -1, -1) + attention_mask = seq_range.unsqueeze(0) < lengths.unsqueeze(1) + + # prepare batch feature + data = { + "input_ids": input_ids, + "input_image_embeds": input_image_embeds, + "image_sizes": image_sizes, + "image_attention_mask": image_attention_mask, + "input_audio_embeds": input_audio_embeds, + "audio_embed_sizes": audio_embed_sizes, + "audio_attention_mask": audio_attention_mask, + "attention_mask": attention_mask, + } + + return BatchFeature( + data=data + ) + + # Copied from transformers.models.clip.processing_clip.CLIPProcessor.batch_decode with CLIP->Llama + def batch_decode(self, *args, **kwargs): + """ + This method forwards all its arguments to GPT2Tokenizer's [`~PreTrainedTokenizer.batch_decode`]. Please + refer to the docstring of this method for more information. + """ + return self.tokenizer.batch_decode(*args, **kwargs) + + # Copied from transformers.models.clip.processing_clip.CLIPProcessor.decode with CLIP->Llama + def decode(self, *args, **kwargs): + """ + This method forwards all its arguments to GPT2Tokenizer's [`~PreTrainedTokenizer.decode`]. Please refer to + the docstring of this method for more information. + """ + return self.tokenizer.decode(*args, **kwargs) + + @property + # Copied from transformers.models.clip.processing_clip.CLIPProcessor.model_input_names + def model_input_names(self): + tokenizer_input_names = self.tokenizer.model_input_names + image_processor_input_names = self.image_processor.model_input_names + audio_processor_input_names = self.audio_processor.model_input_names + return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names + audio_processor_input_names)) + + +AutoImageProcessor.register("Phi4MMImageProcessor", Phi4MMImageProcessor) +AutoFeatureExtractor.register("Phi4MMAudioFeatureExtractor", Phi4MMAudioFeatureExtractor) diff --git a/processor_config.json b/processor_config.json new file mode 100644 index 0000000..e30d7f7 --- /dev/null +++ b/processor_config.json @@ -0,0 +1,6 @@ +{ + "auto_map": { + "AutoProcessor": "processing_phi4mm.Phi4MMProcessor" + }, + "processor_class": "Phi4MMProcessor" +} diff --git a/sample_finetune_speech.py b/sample_finetune_speech.py new file mode 100644 index 0000000..485e84b --- /dev/null +++ b/sample_finetune_speech.py @@ -0,0 +1,478 @@ +""" +finetune Phi-4-multimodal-instruct on an speech task + +scipy==1.15.1 +peft==0.13.2 +backoff==2.2.1 +transformers==4.46.1 +accelerate==1.3.0 +""" + +import argparse +import json +import os +from pathlib import Path + +import torch +import sacrebleu +from accelerate import Accelerator +from accelerate.utils import gather_object +from datasets import load_dataset +from torch.utils.data import Dataset +from tqdm import tqdm +from transformers import ( + AutoModelForCausalLM, + AutoProcessor, + BatchFeature, + Trainer, + TrainingArguments, + StoppingCriteria, + StoppingCriteriaList, +) + + +INSTSRUCTION = { + "en_zh-CN": "Translate the audio to Mandarin.", + "en_id": "Translate the audio to Indonesian.", + "en_sl": "Translate the audio to Slovenian.", +} +TOKENIZER = { + "en_zh-CN": "zh", + "en_ja": "ja-mecab", +} +ANSWER_SUFFIX = "<|end|><|endoftext|>" +_IGNORE_INDEX = -100 +_TRAIN_SIZE = 50000 +_EVAL_SIZE = 200 + +class MultipleTokenBatchStoppingCriteria(StoppingCriteria): + """Stopping criteria capable of receiving multiple stop-tokens and handling batched inputs.""" + + def __init__(self, stop_tokens: torch.LongTensor, batch_size: int = 1) -> None: + """Initialize the multiple token batch stopping criteria. + + Args: + stop_tokens: Stop-tokens. + batch_size: Batch size. + + """ + + self.stop_tokens = stop_tokens + self.max_stop_tokens = stop_tokens.shape[-1] + self.stop_tokens_idx = torch.zeros(batch_size, dtype=torch.long, device=stop_tokens.device) + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: + # Only gather the maximum number of inputs compatible with stop tokens + # and checks whether generated inputs are equal to `stop_tokens` + generated_inputs = torch.eq(input_ids[:, -self.max_stop_tokens :].unsqueeze(1), self.stop_tokens) + equal_generated_inputs = torch.all(generated_inputs, dim=2) + + # Mark the position where a stop token has been produced for each input in the batch, + # but only if the corresponding entry is not already set + sequence_idx = torch.any(equal_generated_inputs, dim=1) + sequence_set_mask = self.stop_tokens_idx == 0 + self.stop_tokens_idx[sequence_idx & sequence_set_mask] = input_ids.shape[-1] + + return torch.all(self.stop_tokens_idx) + +class CoVoSTDataset(Dataset): + def __init__(self, processor, data_dir, split, + lang="en_zh-CN", rank=0, world_size=1): + + self.data = load_dataset("facebook/covost2", + lang, + data_dir=data_dir, + split=split, + trust_remote_code=True + ) + self.training = "train" in split + self.processor = processor + self.instruction = INSTSRUCTION[lang] + + if world_size > 1: + self.data = self.data.shard(world_size, rank) + + def __len__(self): + return len(self.data) + + def __getitem__(self, idx): + """ + {'client_id': '0013037a1d45cc33460806cc3f8ecee9d536c45639ba4cbbf1564f1c051f53ff3c9f89ef2f1bf04badf55b3a2e7654c086f903681a7b6299616cff6f67598eff', + 'file': '{data_dir}/clips/common_voice_en_699711.mp3', + 'audio': {'path': '{data_dir}/clips/common_voice_en_699711.mp3', + 'array': array([-1.28056854e-09, -1.74622983e-09, -1.16415322e-10, ..., + 3.92560651e-10, 6.62794264e-10, -3.89536581e-09]), + 'sampling_rate': 16000}, + 'sentence': '"She\'ll be all right."', + 'translation': '她会没事的。', + 'id': 'common_voice_en_699711'} + """ + data = self.data[idx] + user_message = { + 'role': 'user', + 'content': '<|audio_1|>\n' + self.instruction, + } + prompt = self.processor.tokenizer.apply_chat_template( + [user_message], tokenize=False, add_generation_prompt=True + ) + inputs = self.processor(text=prompt, audios=[(data["audio"]["array"], data["audio"]["sampling_rate"])], return_tensors='pt') + + answer = f"{data['translation']}{ANSWER_SUFFIX}" + answer_ids = self.processor.tokenizer(answer, return_tensors='pt').input_ids + if self.training: + input_ids = torch.cat([inputs.input_ids, answer_ids], dim=1) + labels = torch.full_like(input_ids, _IGNORE_INDEX) + labels[:, -answer_ids.shape[1] :] = answer_ids + else: + input_ids = inputs.input_ids + labels = answer_ids + + return { + 'input_ids': input_ids, + 'labels': labels, + 'input_audio_embeds': inputs.input_audio_embeds, + 'audio_embed_sizes': inputs.audio_embed_sizes, + } + +def pad_sequence(sequences, padding_side='right', padding_value=0): + """ + Pad a list of sequences to the same length. + sequences: list of tensors in [seq_len, *] shape + """ + assert padding_side in ['right', 'left'] + max_size = sequences[0].size() + trailing_dims = max_size[1:] + max_len = max(len(seq) for seq in sequences) + batch_size = len(sequences) + output = sequences[0].new_full((batch_size, max_len) + trailing_dims, padding_value) + for i, seq in enumerate(sequences): + length = seq.size(0) + if padding_side == 'right': + output.data[i, :length] = seq + else: + output.data[i, -length:] = seq + return output + + +def cat_with_pad(tensors, dim, padding_value=0): + """ + cat along dim, while pad to max for all other dims + """ + ndim = tensors[0].dim() + assert all( + t.dim() == ndim for t in tensors[1:] + ), 'All tensors must have the same number of dimensions' + + out_size = [max(t.shape[i] for t in tensors) for i in range(ndim)] + out_size[dim] = sum(t.shape[dim] for t in tensors) + output = tensors[0].new_full(out_size, padding_value) + + index = 0 + for t in tensors: + # Create a slice list where every dimension except dim is full slice + slices = [slice(0, t.shape[d]) for d in range(ndim)] + # Update only the concat dimension slice + slices[dim] = slice(index, index + t.shape[dim]) + + output[slices] = t + index += t.shape[dim] + + return output + + +def covost_collate_fn(batch): + input_ids_list = [] + labels_list = [] + input_audio_embeds_list = [] + audio_embed_sizes_list = [] + audio_attention_mask_list = [] + for inputs in batch: + input_ids_list.append(inputs['input_ids'][0]) + labels_list.append(inputs['labels'][0]) + input_audio_embeds_list.append(inputs['input_audio_embeds']) + audio_embed_sizes_list.append(inputs['audio_embed_sizes']) + audio_attention_mask_list.append( + inputs['input_audio_embeds'].new_full((inputs['input_audio_embeds'].size(1),), True, dtype=torch.bool) + ) + + try: + input_ids = pad_sequence(input_ids_list, padding_side='left', padding_value=0) + labels = pad_sequence(labels_list, padding_side='left', padding_value=0) + audio_attention_mask = ( + pad_sequence(audio_attention_mask_list, padding_side='right', padding_value=False) + if len(audio_attention_mask_list) > 1 + else None + ) + except Exception as e: + print(e) + print(input_ids_list) + print(labels_list) + raise + attention_mask = (input_ids != 0).long() + input_audio_embeds = cat_with_pad(input_audio_embeds_list, dim=0) + audio_embed_sizes = torch.cat(audio_embed_sizes_list) + + return BatchFeature( + { + 'input_ids': input_ids, + 'labels': labels, + 'attention_mask': attention_mask, + 'input_audio_embeds': input_audio_embeds, + 'audio_embed_sizes': audio_embed_sizes, + 'audio_attention_mask': audio_attention_mask, + 'input_mode': 2, # speech mode + } + ) + + + +def create_model(model_name_or_path, use_flash_attention=False): + model = AutoModelForCausalLM.from_pretrained( + model_name_or_path, + torch_dtype=torch.bfloat16 if use_flash_attention else torch.float32, + _attn_implementation='flash_attention_2' if use_flash_attention else 'sdpa', + trust_remote_code=True, + ).to('cuda') + + return model + + +@torch.no_grad() +def evaluate( + model, processor, eval_dataset, save_path=None, disable_tqdm=False, eval_batch_size=1 +): + rank = int(os.environ.get('RANK', 0)) + local_rank = int(os.environ.get('LOCAL_RANK', 0)) + + model.eval() + all_generated_texts = [] + all_labels = [] + + eval_dataloader = torch.utils.data.DataLoader( + eval_dataset, + batch_size=eval_batch_size, + collate_fn=covost_collate_fn, + shuffle=False, + drop_last=False, + num_workers=8, + prefetch_factor=2, + pin_memory=True, + ) + stop_tokens = ["<|end|>", processor.tokenizer.eos_token] + stop_tokens_ids = processor.tokenizer(stop_tokens, add_special_tokens=False, padding="longest", return_tensors="pt")["input_ids"] + stop_tokens_ids = stop_tokens_ids.to(f'cuda:{local_rank}') + + for inputs in tqdm( + eval_dataloader, disable=(rank != 0) or disable_tqdm, desc='running eval' + ): + stopping_criteria=StoppingCriteriaList([MultipleTokenBatchStoppingCriteria(stop_tokens_ids, batch_size=inputs.input_ids.size(0))]) + inputs = inputs.to(f'cuda:{local_rank}') + generated_ids = model.generate( + **inputs, eos_token_id=processor.tokenizer.eos_token_id, max_new_tokens=64, + stopping_criteria=stopping_criteria, + ) + + stop_tokens_idx = stopping_criteria[0].stop_tokens_idx.reshape(inputs.input_ids.size(0), -1)[:, 0] + + stop_tokens_idx = torch.where( + stop_tokens_idx > 0, + stop_tokens_idx - stop_tokens_ids.shape[-1], + generated_ids.shape[-1], + ) + generated_text = [ + processor.decode(_pred_ids[inputs["input_ids"].shape[1] : _stop_tokens_idx], skip_special_tokens=True, clean_up_tokenization_spaces=False) + for _pred_ids, _stop_tokens_idx in zip(generated_ids, stop_tokens_idx) + ] + all_generated_texts.extend(generated_text) + labels = [processor.decode(_label_ids[_label_ids != 0]).removesuffix(ANSWER_SUFFIX) for _label_ids in inputs["labels"]] + all_labels.extend(labels) + + all_generated_texts = gather_object(all_generated_texts) + all_labels = gather_object(all_labels) + + if rank == 0: + assert len(all_generated_texts) == len(all_labels) + bleu = sacrebleu.corpus_bleu(all_generated_texts, [all_labels]) + print(bleu) + if save_path: + with open(save_path, 'w') as f: + save_dict = { + 'all_generated_texts': all_generated_texts, + 'all_labels': all_labels, + 'score': bleu.score, + } + json.dump(save_dict, f) + + return bleu.score + return None + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--model_name_or_path', + type=str, + default='microsoft/Phi-4-multimodal-instruct', + help='Model name or path to load from', + ) + parser.add_argument( + "--common_voice_dir", + type=str, + default="CommonVoice/EN", + help="Unzipped Common Voice Audio dataset directory, refer to https://commonvoice.mozilla.org/en/datasets, version 4.0", + ) + parser.add_argument( + "--lang", + type=str, + default="en_sl", + help="Language pair for translation.", + ) + parser.add_argument('--use_flash_attention', action='store_true', help='Use Flash Attention') + parser.add_argument('--output_dir', type=str, default='./output/', help='Output directory') + parser.add_argument('--batch_size', type=int, default=128, help='Batch size') + parser.add_argument( + '--batch_size_per_gpu', + type=int, + default=32, + help='Batch size per GPU (adjust this to fit in GPU memory)', + ) + parser.add_argument( + '--num_train_epochs', type=int, default=1, help='Number of training epochs' + ) + parser.add_argument('--learning_rate', type=float, default=4.0e-5, help='Learning rate') + parser.add_argument('--wd', type=float, default=0.01, help='Weight decay') + parser.add_argument('--no-tqdm', dest='tqdm', action='store_false', help='Disable tqdm') + args = parser.parse_args() + + accelerator = Accelerator() + + with accelerator.local_main_process_first(): + processor = AutoProcessor.from_pretrained( + args.model_name_or_path, + trust_remote_code=True, + ) + model = create_model( + args.model_name_or_path, + use_flash_attention=args.use_flash_attention, + ) + + model.set_lora_adapter('speech') + + + rank = int(os.environ.get('RANK', 0)) + world_size = int(os.environ.get('WORLD_SIZE', 1)) + + eval_dataset = CoVoSTDataset(processor, + data_dir=args.common_voice_dir, + split=f'test[:{_EVAL_SIZE}]', + lang=args.lang, + rank=rank, + world_size=world_size) + + train_dataset = CoVoSTDataset(processor, + data_dir=args.common_voice_dir, + split=f'train[:{_TRAIN_SIZE}]', + lang=args.lang) + + num_gpus = accelerator.num_processes + print(f'training on {num_gpus} GPUs') + assert ( + args.batch_size % (num_gpus * args.batch_size_per_gpu) == 0 + ), 'Batch size must be divisible by the number of GPUs' + gradient_accumulation_steps = args.batch_size // (num_gpus * args.batch_size_per_gpu) + + if args.use_flash_attention: + fp16 = False + bf16 = True + else: + fp16 = True + bf16 = False + + # hard coded training args + training_args = TrainingArguments( + num_train_epochs=args.num_train_epochs, + per_device_train_batch_size=args.batch_size_per_gpu, + gradient_checkpointing=True, + gradient_checkpointing_kwargs={'use_reentrant': False}, + gradient_accumulation_steps=gradient_accumulation_steps, + optim='adamw_torch', + adam_beta1=0.9, + adam_beta2=0.95, + adam_epsilon=1e-7, + learning_rate=args.learning_rate, + weight_decay=args.wd, + max_grad_norm=1.0, + lr_scheduler_type='linear', + warmup_steps=50, + logging_steps=10, + output_dir=args.output_dir, + save_strategy='no', + save_total_limit=10, + save_only_model=True, + bf16=bf16, + fp16=fp16, + remove_unused_columns=False, + report_to='none', + deepspeed=None, + disable_tqdm=not args.tqdm, + dataloader_num_workers=4, + ddp_find_unused_parameters=True, # for unused SigLIP layers + ) + + # eval before fine-tuning + out_path = Path(training_args.output_dir) + out_path.mkdir(parents=True, exist_ok=True) + + score = evaluate( + model, + processor, + eval_dataset, + save_path=out_path / 'eval_before.json', + disable_tqdm=not args.tqdm, + eval_batch_size=args.batch_size_per_gpu, + ) + if accelerator.is_main_process: + print(f'BLEU Score before finetuning: {score}') + + trainer = Trainer( + model=model, + args=training_args, + data_collator=covost_collate_fn, + train_dataset=train_dataset, + ) + + trainer.train() + trainer.save_model() + if accelerator.is_main_process: + processor.save_pretrained(training_args.output_dir) + accelerator.wait_for_everyone() + + # eval after fine-tuning (load saved checkpoint) + # first try to clear GPU memory + del model + del trainer + __import__('gc').collect() + torch.cuda.empty_cache() + + # reload the model for inference + model = AutoModelForCausalLM.from_pretrained( + training_args.output_dir, + torch_dtype=torch.bfloat16 if args.use_flash_attention else torch.float32, + trust_remote_code=True, + _attn_implementation='flash_attention_2' if args.use_flash_attention else 'sdpa', + ).to('cuda') + + score = evaluate( + model, + processor, + eval_dataset, + save_path=out_path / 'eval_after.json', + disable_tqdm=not args.tqdm, + eval_batch_size=args.batch_size_per_gpu, + ) + if accelerator.is_main_process: + print(f'BLEU Score after finetuning: {score}') + + +if __name__ == '__main__': + main() diff --git a/sample_finetune_vision.py b/sample_finetune_vision.py new file mode 100644 index 0000000..0b66975 --- /dev/null +++ b/sample_finetune_vision.py @@ -0,0 +1,556 @@ +""" +finetune Phi-4-multimodal-instruct on an image task + +scipy==1.15.1 +peft==0.13.2 +backoff==2.2.1 +transformers==4.47.0 +accelerate==1.3.0 +""" + +import argparse +import json +import os +import tempfile +import zipfile +from pathlib import Path + +import torch +from accelerate import Accelerator +from accelerate.utils import gather_object +from datasets import load_dataset +from huggingface_hub import hf_hub_download +from PIL import Image +from torch.utils.data import Dataset +from tqdm import tqdm +from transformers import ( + AutoModelForCausalLM, + AutoProcessor, + BatchFeature, + Trainer, + TrainingArguments, +) + +DEFAULT_INSTSRUCTION = "Answer with the option's letter from the given choices directly." +_IGNORE_INDEX = -100 +_TRAIN_SIZE = 8000 +_EVAL_SIZE = 500 +_MAX_TRAINING_LENGTH = 8192 + + +class PmcVqaTrainDataset(Dataset): + def __init__(self, processor, data_size, instruction=DEFAULT_INSTSRUCTION): + # Download the file + file_path = hf_hub_download( + repo_id='xmcmic/PMC-VQA', # repository name + filename='images_2.zip', # file to download + repo_type='dataset', # specify it's a dataset repo + ) + + # file_path will be the local path where the file was downloaded + print(f'File downloaded to: {file_path}') + + # unzip to temp folder + self.image_folder = Path(tempfile.mkdtemp()) + with zipfile.ZipFile(file_path, 'r') as zip_ref: + zip_ref.extractall(self.image_folder) + + data_files = { + 'train': 'https://huggingface.co/datasets/xmcmic/PMC-VQA/resolve/main/train_2.csv', + } + split = 'train' if data_size is None else f'train[:{data_size}]' + self.annotations = load_dataset('xmcmic/PMC-VQA', data_files=data_files, split=split) + self.processor = processor + self.instruction = instruction + + def __len__(self): + return len(self.annotations) + + def __getitem__(self, idx): + """ + {'index': 35, + 'Figure_path': 'PMC8253797_Fig4_11.jpg', + 'Caption': 'A slightly altered cell . (c-c‴) A highly altered cell as seen from 4 different angles . Note mitochondria/mitochondrial networks (green), Golgi complexes (red), cell nuclei (light blue) and the cell outline (yellow).', + 'Question': ' What color is used to label the Golgi complexes in the image?', + 'Choice A': ' A: Green ', + 'Choice B': ' B: Red ', + 'Choice C': ' C: Light blue ', + 'Choice D': ' D: Yellow', + 'Answer': 'B', + 'split': 'train'} + """ + annotation = self.annotations[idx] + image = Image.open(self.image_folder / 'figures' / annotation['Figure_path']) + question = annotation['Question'] + choices = [annotation[f'Choice {chr(ord("A") + i)}'] for i in range(4)] + user_message = { + 'role': 'user', + 'content': '<|image_1|>' + '\n'.join([question] + choices + [self.instruction]), + } + prompt = self.processor.tokenizer.apply_chat_template( + [user_message], tokenize=False, add_generation_prompt=True + ) + answer = f'{annotation["Answer"]}<|end|><|endoftext|>' + inputs = self.processor(prompt, images=[image], return_tensors='pt') + + answer_ids = self.processor.tokenizer(answer, return_tensors='pt').input_ids + + input_ids = torch.cat([inputs.input_ids, answer_ids], dim=1) + labels = torch.full_like(input_ids, _IGNORE_INDEX) + labels[:, -answer_ids.shape[1] :] = answer_ids + + if input_ids.size(1) > _MAX_TRAINING_LENGTH: + input_ids = input_ids[:, :_MAX_TRAINING_LENGTH] + labels = labels[:, :_MAX_TRAINING_LENGTH] + if torch.all(labels == _IGNORE_INDEX).item(): + # workaround to make sure loss compute won't fail + labels[:, -1] = self.processor.tokenizer.eos_token_id + + return { + 'input_ids': input_ids, + 'labels': labels, + 'input_image_embeds': inputs.input_image_embeds, + 'image_attention_mask': inputs.image_attention_mask, + 'image_sizes': inputs.image_sizes, + } + + def __del__(self): + __import__('shutil').rmtree(self.image_folder) + + +class PmcVqaEvalDataset(Dataset): + def __init__( + self, processor, data_size, instruction=DEFAULT_INSTSRUCTION, rank=0, world_size=1 + ): + # Download the file + file_path = hf_hub_download( + repo_id='xmcmic/PMC-VQA', # repository name + filename='images_2.zip', # file to download + repo_type='dataset', # specify it's a dataset repo + ) + + # file_path will be the local path where the file was downloaded + print(f'File downloaded to: {file_path}') + + # unzip to temp folder + self.image_folder = Path(tempfile.mkdtemp()) + with zipfile.ZipFile(file_path, 'r') as zip_ref: + zip_ref.extractall(self.image_folder) + + data_files = { + 'test': 'https://huggingface.co/datasets/xmcmic/PMC-VQA/resolve/main/test_2.csv', + } + split = 'test' if data_size is None else f'test[:{data_size}]' + self.annotations = load_dataset( + 'xmcmic/PMC-VQA', data_files=data_files, split=split + ).shard(num_shards=world_size, index=rank) + self.processor = processor + self.instruction = instruction + + def __len__(self): + return len(self.annotations) + + def __getitem__(self, idx): + """ + {'index': 62, + 'Figure_path': 'PMC8253867_Fig2_41.jpg', + 'Caption': 'CT pulmonary angiogram reveals encasement and displacement of the left anterior descending coronary artery ( blue arrows ).', + 'Question': ' What is the name of the artery encased and displaced in the image? ', + 'Choice A': ' A: Right Coronary Artery ', + 'Choice B': ' B: Left Anterior Descending Coronary Artery ', + 'Choice C': ' C: Circumflex Coronary Artery ', + 'Choice D': ' D: Superior Mesenteric Artery ', + 'Answer': 'B', + 'split': 'test'} + """ + annotation = self.annotations[idx] + image = Image.open(self.image_folder / 'figures' / annotation['Figure_path']) + question = annotation['Question'] + choices = [annotation[f'Choice {chr(ord("A") + i)}'] for i in range(4)] + user_message = { + 'role': 'user', + 'content': '<|image_1|>' + '\n'.join([question] + choices + [self.instruction]), + } + prompt = self.processor.tokenizer.apply_chat_template( + [user_message], tokenize=False, add_generation_prompt=True + ) + answer = annotation['Answer'] + inputs = self.processor(prompt, images=[image], return_tensors='pt') + + unique_id = f'{annotation["index"]:010d}' + return { + 'id': unique_id, + 'input_ids': inputs.input_ids, + 'input_image_embeds': inputs.input_image_embeds, + 'image_attention_mask': inputs.image_attention_mask, + 'image_sizes': inputs.image_sizes, + 'answer': answer, + } + + def __del__(self): + __import__('shutil').rmtree(self.image_folder) + + +def pad_sequence(sequences, padding_side='right', padding_value=0): + """ + Pad a list of sequences to the same length. + sequences: list of tensors in [seq_len, *] shape + """ + assert padding_side in ['right', 'left'] + max_size = sequences[0].size() + trailing_dims = max_size[1:] + max_len = max(len(seq) for seq in sequences) + batch_size = len(sequences) + output = sequences[0].new_full((batch_size, max_len) + trailing_dims, padding_value) + for i, seq in enumerate(sequences): + length = seq.size(0) + if padding_side == 'right': + output.data[i, :length] = seq + else: + output.data[i, -length:] = seq + return output + + +def cat_with_pad(tensors, dim, padding_value=0): + """ + cat along dim, while pad to max for all other dims + """ + ndim = tensors[0].dim() + assert all( + t.dim() == ndim for t in tensors[1:] + ), 'All tensors must have the same number of dimensions' + + out_size = [max(t.shape[i] for t in tensors) for i in range(ndim)] + out_size[dim] = sum(t.shape[dim] for t in tensors) + output = tensors[0].new_full(out_size, padding_value) + + index = 0 + for t in tensors: + # Create a slice list where every dimension except dim is full slice + slices = [slice(0, t.shape[d]) for d in range(ndim)] + # Update only the concat dimension slice + slices[dim] = slice(index, index + t.shape[dim]) + + output[slices] = t + index += t.shape[dim] + + return output + + +def pmc_vqa_collate_fn(batch): + input_ids_list = [] + labels_list = [] + input_image_embeds_list = [] + image_attention_mask_list = [] + image_sizes_list = [] + for inputs in batch: + input_ids_list.append(inputs['input_ids'][0]) + labels_list.append(inputs['labels'][0]) + input_image_embeds_list.append(inputs['input_image_embeds']) + image_attention_mask_list.append(inputs['image_attention_mask']) + image_sizes_list.append(inputs['image_sizes']) + + input_ids = pad_sequence(input_ids_list, padding_side='right', padding_value=0) + labels = pad_sequence(labels_list, padding_side='right', padding_value=0) + attention_mask = (input_ids != 0).long() + input_image_embeds = cat_with_pad(input_image_embeds_list, dim=0) + image_attention_mask = cat_with_pad(image_attention_mask_list, dim=0) + image_sizes = torch.cat(image_sizes_list) + + return BatchFeature( + { + 'input_ids': input_ids, + 'labels': labels, + 'attention_mask': attention_mask, + 'input_image_embeds': input_image_embeds, + 'image_attention_mask': image_attention_mask, + 'image_sizes': image_sizes, + 'input_mode': 1, # vision mode + } + ) + + +def pmc_vqa_eval_collate_fn(batch): + input_ids_list = [] + input_image_embeds_list = [] + image_attention_mask_list = [] + image_sizes_list = [] + all_unique_ids = [] + all_answers = [] + for inputs in batch: + input_ids_list.append(inputs['input_ids'][0]) + input_image_embeds_list.append(inputs['input_image_embeds']) + image_attention_mask_list.append(inputs['image_attention_mask']) + image_sizes_list.append(inputs['image_sizes']) + all_unique_ids.append(inputs['id']) + all_answers.append(inputs['answer']) + + input_ids = pad_sequence(input_ids_list, padding_side='left', padding_value=0) + attention_mask = (input_ids != 0).long() + input_image_embeds = cat_with_pad(input_image_embeds_list, dim=0) + image_attention_mask = cat_with_pad(image_attention_mask_list, dim=0) + image_sizes = torch.cat(image_sizes_list) + + return ( + all_unique_ids, + all_answers, + BatchFeature( + { + 'input_ids': input_ids, + 'attention_mask': attention_mask, + 'input_image_embeds': input_image_embeds, + 'image_attention_mask': image_attention_mask, + 'image_sizes': image_sizes, + 'input_mode': 1, # vision mode + } + ), + ) + + +def create_model(model_name_or_path, use_flash_attention=False): + model = AutoModelForCausalLM.from_pretrained( + model_name_or_path, + torch_dtype=torch.bfloat16 if use_flash_attention else torch.float32, + _attn_implementation='flash_attention_2' if use_flash_attention else 'sdpa', + trust_remote_code=True, + ).to('cuda') + # remove parameters irrelevant to vision tasks + del model.model.embed_tokens_extend.audio_embed # remove audio encoder + for layer in model.model.layers: + # remove audio lora + del layer.mlp.down_proj.lora_A.speech + del layer.mlp.down_proj.lora_B.speech + del layer.mlp.gate_up_proj.lora_A.speech + del layer.mlp.gate_up_proj.lora_B.speech + del layer.self_attn.o_proj.lora_A.speech + del layer.self_attn.o_proj.lora_B.speech + del layer.self_attn.qkv_proj.lora_A.speech + del layer.self_attn.qkv_proj.lora_B.speech + + # TODO remove unused vision layers? + + return model + + +@torch.no_grad() +def evaluate( + model, processor, eval_dataset, save_path=None, disable_tqdm=False, eval_batch_size=1 +): + rank = int(os.environ.get('RANK', 0)) + local_rank = int(os.environ.get('LOCAL_RANK', 0)) + + model.eval() + all_answers = [] + all_generated_texts = [] + + eval_dataloader = torch.utils.data.DataLoader( + eval_dataset, + batch_size=eval_batch_size, + collate_fn=pmc_vqa_eval_collate_fn, + shuffle=False, + drop_last=False, + num_workers=4, + prefetch_factor=2, + pin_memory=True, + ) + for ids, answers, inputs in tqdm( + eval_dataloader, disable=(rank != 0) or disable_tqdm, desc='running eval' + ): + all_answers.extend({'id': i, 'answer': a.strip().lower()} for i, a in zip(ids, answers)) + + inputs = inputs.to(f'cuda:{local_rank}') + generated_ids = model.generate( + **inputs, eos_token_id=processor.tokenizer.eos_token_id, max_new_tokens=64 + ) + + input_len = inputs.input_ids.size(1) + generated_texts = processor.batch_decode( + generated_ids[:, input_len:], + skip_special_tokens=True, + clean_up_tokenization_spaces=False, + ) + all_generated_texts.extend( + {'id': i, 'generated_text': g.strip().lower()} for i, g in zip(ids, generated_texts) + ) + + # gather outputs from all ranks + all_answers = gather_object(all_answers) + all_generated_texts = gather_object(all_generated_texts) + + if rank == 0: + assert len(all_answers) == len(all_generated_texts) + acc = sum( + a['answer'] == g['generated_text'] for a, g in zip(all_answers, all_generated_texts) + ) / len(all_answers) + if save_path: + with open(save_path, 'w') as f: + save_dict = { + 'answers_unique': all_answers, + 'generated_texts_unique': all_generated_texts, + 'accuracy': acc, + } + json.dump(save_dict, f) + + return acc + return None + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--model_name_or_path', + type=str, + default='microsoft/Phi-4-multimodal-instruct', + help='Model name or path to load from', + ) + parser.add_argument('--use_flash_attention', action='store_true', help='Use Flash Attention') + parser.add_argument('--output_dir', type=str, default='./output/', help='Output directory') + parser.add_argument('--batch_size', type=int, default=16, help='Batch size') + parser.add_argument( + '--batch_size_per_gpu', + type=int, + default=1, + help='Batch size per GPU (adjust this to fit in GPU memory)', + ) + parser.add_argument( + '--dynamic_hd', + type=int, + default=36, + help='Number of maximum image crops', + ) + parser.add_argument( + '--num_train_epochs', type=int, default=1, help='Number of training epochs' + ) + parser.add_argument('--learning_rate', type=float, default=4.0e-5, help='Learning rate') + parser.add_argument('--wd', type=float, default=0.01, help='Weight decay') + parser.add_argument('--no_tqdm', dest='tqdm', action='store_false', help='Disable tqdm') + parser.add_argument('--full_run', action='store_true', help='Run the full training and eval') + args = parser.parse_args() + + accelerator = Accelerator() + + with accelerator.local_main_process_first(): + processor = AutoProcessor.from_pretrained( + args.model_name_or_path, + trust_remote_code=True, + dynamic_hd=args.dynamic_hd, + ) + model = create_model( + args.model_name_or_path, + use_flash_attention=args.use_flash_attention, + ) + # tune vision encoder and lora + model.set_lora_adapter('vision') + for param in model.model.embed_tokens_extend.image_embed.parameters(): + param.requires_grad = True + + rank = int(os.environ.get('RANK', 0)) + world_size = int(os.environ.get('WORLD_SIZE', 1)) + + train_dataset = PmcVqaTrainDataset(processor, data_size=None if args.full_run else _TRAIN_SIZE) + eval_dataset = PmcVqaEvalDataset( + processor, + data_size=None if args.full_run else _EVAL_SIZE, + rank=rank, + world_size=world_size, + ) + + num_gpus = accelerator.num_processes + print(f'training on {num_gpus} GPUs') + assert ( + args.batch_size % (num_gpus * args.batch_size_per_gpu) == 0 + ), 'Batch size must be divisible by the number of GPUs' + gradient_accumulation_steps = args.batch_size // (num_gpus * args.batch_size_per_gpu) + + if args.use_flash_attention: + fp16 = False + bf16 = True + else: + fp16 = True + bf16 = False + + # hard coded training args + training_args = TrainingArguments( + num_train_epochs=args.num_train_epochs, + per_device_train_batch_size=args.batch_size_per_gpu, + gradient_checkpointing=True, + gradient_checkpointing_kwargs={'use_reentrant': False}, + gradient_accumulation_steps=gradient_accumulation_steps, + optim='adamw_torch', + adam_beta1=0.9, + adam_beta2=0.95, + adam_epsilon=1e-7, + learning_rate=args.learning_rate, + weight_decay=args.wd, + max_grad_norm=1.0, + lr_scheduler_type='linear', + warmup_steps=50, + logging_steps=10, + output_dir=args.output_dir, + save_strategy='no', + save_total_limit=10, + save_only_model=True, + bf16=bf16, + fp16=fp16, + remove_unused_columns=False, + report_to='none', + deepspeed=None, + disable_tqdm=not args.tqdm, + dataloader_num_workers=4, + ddp_find_unused_parameters=True, # for unused SigLIP layers + ) + + # eval before fine-tuning + out_path = Path(training_args.output_dir) + out_path.mkdir(parents=True, exist_ok=True) + + acc = evaluate( + model, + processor, + eval_dataset, + save_path=out_path / 'eval_before.json', + disable_tqdm=not args.tqdm, + eval_batch_size=args.batch_size_per_gpu, + ) + if accelerator.is_main_process: + print(f'Accuracy before finetuning: {acc}') + + trainer = Trainer( + model=model, + args=training_args, + data_collator=pmc_vqa_collate_fn, + train_dataset=train_dataset, + ) + trainer.train() + trainer.save_model() + accelerator.wait_for_everyone() + + # eval after fine-tuning (load saved checkpoint) + # first try to clear GPU memory + del model + del trainer + __import__('gc').collect() + torch.cuda.empty_cache() + + # reload the model for inference + model = AutoModelForCausalLM.from_pretrained( + training_args.output_dir, + torch_dtype=torch.bfloat16 if args.use_flash_attention else torch.float32, + trust_remote_code=True, + _attn_implementation='flash_attention_2' if args.use_flash_attention else 'sdpa', + ).to('cuda') + + acc = evaluate( + model, + processor, + eval_dataset, + save_path=out_path / 'eval_after.json', + disable_tqdm=not args.tqdm, + eval_batch_size=args.batch_size_per_gpu, + ) + if accelerator.is_main_process: + print(f'Accuracy after finetuning: {acc}') + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/sample_inference_phi4mm.py b/sample_inference_phi4mm.py new file mode 100644 index 0000000..9e425b0 --- /dev/null +++ b/sample_inference_phi4mm.py @@ -0,0 +1,243 @@ +import os +import requests +import torch +from PIL import Image +import soundfile +from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig + +model_path = './' + +kwargs = {} +kwargs['torch_dtype'] = torch.bfloat16 + +processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True) +print(processor.tokenizer) + +model = AutoModelForCausalLM.from_pretrained( + model_path, + trust_remote_code=True, + torch_dtype='auto', + _attn_implementation='flash_attention_2', +).cuda() +print("model.config._attn_implementation:", model.config._attn_implementation) + +generation_config = GenerationConfig.from_pretrained(model_path, 'generation_config.json') + +user_prompt = '<|user|>' +assistant_prompt = '<|assistant|>' +prompt_suffix = '<|end|>' + +#################################################### text-only #################################################### +prompt = f'{user_prompt}what is the answer for 1+1? Explain it.{prompt_suffix}{assistant_prompt}' +print(f'>>> Prompt\n{prompt}') +inputs = processor(prompt, images=None, return_tensors='pt').to('cuda:0') + +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] + +print(f'>>> Response\n{response}') + +#################################################### vision (single-turn) #################################################### +# single-image prompt +prompt = f'{user_prompt}<|image_1|>What is shown in this image?{prompt_suffix}{assistant_prompt}' +url = 'https://www.ilankelman.org/stopsigns/australia.jpg' +print(f'>>> Prompt\n{prompt}') +image = Image.open(requests.get(url, stream=True).raw) +inputs = processor(text=prompt, images=image, return_tensors='pt').to('cuda:0') +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') + +#################################################### vision (multi-turn) #################################################### +# chat template +chat = [ + {'role': 'user', 'content': f'<|image_1|>What is shown in this image?'}, + { + 'role': 'assistant', + 'content': "The image depicts a street scene with a prominent red stop sign in the foreground. The background showcases a building with traditional Chinese architecture, characterized by its red roof and ornate decorations. There are also several statues of lions, which are common in Chinese culture, positioned in front of the building. The street is lined with various shops and businesses, and there's a car passing by.", + }, + {'role': 'user', 'content': 'What is so special about this image'}, +] +url = 'https://www.ilankelman.org/stopsigns/australia.jpg' +image = Image.open(requests.get(url, stream=True).raw) +prompt = processor.tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True) +# need to remove last <|endoftext|> if it is there, which is used for training, not inference. For training, make sure to add <|endoftext|> in the end. +if prompt.endswith('<|endoftext|>'): + prompt = prompt.rstrip('<|endoftext|>') + +print(f'>>> Prompt\n{prompt}') + +inputs = processor(prompt, [image], return_tensors='pt').to('cuda:0') +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') + +########################### vision (multi-frame) ################################ +images = [] +placeholder = '' +for i in range(1, 5): + url = f'https://image.slidesharecdn.com/azureintroduction-191206101932/75/Introduction-to-Microsoft-Azure-Cloud-{i}-2048.jpg' + images.append(Image.open(requests.get(url, stream=True).raw)) + placeholder += f'<|image_{i}|>' + +messages = [ + {'role': 'user', 'content': placeholder + 'Summarize the deck of slides.'}, +] + +prompt = processor.tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=True +) + +print(f'>>> Prompt\n{prompt}') + +inputs = processor(prompt, images, return_tensors='pt').to('cuda:0') + +generation_args = { + 'max_new_tokens': 1000, + 'temperature': 0.0, + 'do_sample': False, +} + +generate_ids = model.generate( + **inputs, **generation_args, generation_config=generation_config, +) + +# remove input tokens +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] + +print(response) + +# NOTE: Please prepare the audio file 'examples/what_is_the_traffic_sign_in_the_image.wav' +# and audio file 'examples/what_is_shown_in_this_image.wav' before running the following code +# Basically you can record your own voice for the question "What is the traffic sign in the image?" in "examples/what_is_the_traffic_sign_in_the_image.wav". +# And you can record your own voice for the question "What is shown in this image?" in "examples/what_is_shown_in_this_image.wav". + +AUDIO_FILE_1 = 'examples/what_is_the_traffic_sign_in_the_image.wav' +AUDIO_FILE_2 = 'examples/what_is_shown_in_this_image.wav' + +if not os.path.exists(AUDIO_FILE_1): + raise FileNotFoundError(f'Please prepare the audio file {AUDIO_FILE_1} before running the following code.') +########################## vision-speech ################################ +prompt = f'{user_prompt}<|image_1|><|audio_1|>{prompt_suffix}{assistant_prompt}' +url = 'https://www.ilankelman.org/stopsigns/australia.jpg' +print(f'>>> Prompt\n{prompt}') +image = Image.open(requests.get(url, stream=True).raw) +audio = soundfile.read(AUDIO_FILE_1) +inputs = processor(text=prompt, images=[image], audios=[audio], return_tensors='pt').to('cuda:0') +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') + +########################## speech only ################################ +speech_prompt = "Based on the attached audio, generate a comprehensive text transcription of the spoken content." +prompt = f'{user_prompt}<|audio_1|>{speech_prompt}{prompt_suffix}{assistant_prompt}' + +print(f'>>> Prompt\n{prompt}') +audio = soundfile.read(AUDIO_FILE_1) +inputs = processor(text=prompt, audios=[audio], return_tensors='pt').to('cuda:0') +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') + +if not os.path.exists(AUDIO_FILE_2): + raise FileNotFoundError(f'Please prepare the audio file {AUDIO_FILE_2} before running the following code.') +########################### speech only (multi-turn) ################################ +audio_1 = soundfile.read(AUDIO_FILE_2) +audio_2 = soundfile.read(AUDIO_FILE_1) +chat = [ + {'role': 'user', 'content': f'<|audio_1|>Based on the attached audio, generate a comprehensive text transcription of the spoken content.'}, + { + 'role': 'assistant', + 'content': "What is shown in this image.", + }, + {'role': 'user', 'content': f'<|audio_2|>Based on the attached audio, generate a comprehensive text transcription of the spoken content.'}, +] +prompt = processor.tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True) +# need to remove last <|endoftext|> if it is there, which is used for training, not inference. For training, make sure to add <|endoftext|> in the end. +if prompt.endswith('<|endoftext|>'): + prompt = prompt.rstrip('<|endoftext|>') + +print(f'>>> Prompt\n{prompt}') + +inputs = processor(text=prompt, audios=[audio_1, audio_2], return_tensors='pt').to('cuda:0') +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') + +#################################################### vision-speech (multi-turn) #################################################### +# chat template +audio_1 = soundfile.read(AUDIO_FILE_2) +audio_2 = soundfile.read(AUDIO_FILE_1) +chat = [ + {'role': 'user', 'content': f'<|image_1|><|audio_1|>'}, + { + 'role': 'assistant', + 'content': "The image depicts a street scene with a prominent red stop sign in the foreground. The background showcases a building with traditional Chinese architecture, characterized by its red roof and ornate decorations. There are also several statues of lions, which are common in Chinese culture, positioned in front of the building. The street is lined with various shops and businesses, and there's a car passing by.", + }, + {'role': 'user', 'content': f'<|audio_2|>'}, +] +url = 'https://www.ilankelman.org/stopsigns/australia.jpg' +image = Image.open(requests.get(url, stream=True).raw) +prompt = processor.tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True) +# need to remove last <|endoftext|> if it is there, which is used for training, not inference. For training, make sure to add <|endoftext|> in the end. +if prompt.endswith('<|endoftext|>'): + prompt = prompt.rstrip('<|endoftext|>') + +print(f'>>> Prompt\n{prompt}') + +inputs = processor(text=prompt, images=[image], audios=[audio_1, audio_2], return_tensors='pt').to('cuda:0') +generate_ids = model.generate( + **inputs, + max_new_tokens=1000, + generation_config=generation_config, +) +generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :] +response = processor.batch_decode( + generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False +)[0] +print(f'>>> Response\n{response}') diff --git a/special_tokens_map.json b/special_tokens_map.json new file mode 100644 index 0000000..330140f --- /dev/null +++ b/special_tokens_map.json @@ -0,0 +1,24 @@ +{ + "bos_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "eos_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "pad_token": "<|endoftext|>", + "unk_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + } +} diff --git a/speech-lora/adapter_config.json b/speech-lora/adapter_config.json new file mode 100644 index 0000000..3fb5a8d --- /dev/null +++ b/speech-lora/adapter_config.json @@ -0,0 +1,23 @@ +{ + "auto_mapping": null, + "base_model_name_or_path": "TBA", + "bias": "none", + "fan_in_fan_out": false, + "inference_mode": true, + "init_lora_weights": true, + "layers_pattern": null, + "layers_to_transform": null, + "lora_alpha": 640, + "lora_dropout": 0.01, + "modules_to_save": [], + "peft_type": "LORA", + "r": 320, + "revision": null, + "target_modules": [ + "qkv_proj", + "o_proj", + "gate_up_proj", + "down_proj" + ], + "task_type": "CAUSAL_LM" +} \ No newline at end of file diff --git a/speech-lora/adapter_model.safetensors b/speech-lora/adapter_model.safetensors new file mode 100644 index 0000000..9726355 --- /dev/null +++ b/speech-lora/adapter_model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c2237461a4d1f9292cd128147bd3f0f70326a48d5d79c8e0f7583b26c095b30 +size 922782296 diff --git a/speech-lora/added_tokens.json b/speech-lora/added_tokens.json new file mode 100644 index 0000000..af52cde --- /dev/null +++ b/speech-lora/added_tokens.json @@ -0,0 +1,12 @@ +{ + "<|/tool_call|>": 200026, + "<|/tool|>": 200024, + "<|assistant|>": 200019, + "<|end|>": 200020, + "<|system|>": 200022, + "<|tag|>": 200028, + "<|tool_call|>": 200025, + "<|tool_response|>": 200027, + "<|tool|>": 200023, + "<|user|>": 200021 +} diff --git a/speech-lora/special_tokens_map.json b/speech-lora/special_tokens_map.json new file mode 100644 index 0000000..330140f --- /dev/null +++ b/speech-lora/special_tokens_map.json @@ -0,0 +1,24 @@ +{ + "bos_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "eos_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "pad_token": "<|endoftext|>", + "unk_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + } +} diff --git a/speech-lora/tokenizer.json b/speech-lora/tokenizer.json new file mode 100644 index 0000000..3a12dac --- /dev/null +++ b/speech-lora/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382cc235b56c725945e149cc25f191da667c836655efd0857b004320e90e91ea +size 15524095 diff --git a/speech-lora/tokenizer_config.json b/speech-lora/tokenizer_config.json new file mode 100644 index 0000000..5212793 --- /dev/null +++ b/speech-lora/tokenizer_config.json @@ -0,0 +1,125 @@ +{ + "add_prefix_space": false, + "added_tokens_decoder": { + "200010": { + "content": "<|endoftext10|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200011": { + "content": "<|endoftext11|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "199999": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200018": { + "content": "<|endofprompt|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200019": { + "content": "<|assistant|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200020": { + "content": "<|end|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200021": { + "content": "<|user|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200022": { + "content": "<|system|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200023": { + "content": "<|tool|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200024": { + "content": "<|/tool|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200025": { + "content": "<|tool_call|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200026": { + "content": "<|/tool_call|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200027": { + "content": "<|tool_response|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200028": { + "content": "<|tag|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + } + }, + "bos_token": "<|endoftext|>", + "chat_template": "{% for message in messages %}{% if message['role'] == 'system' and 'tools' in message and message['tools'] is not none %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|tool|>' + message['tools'] + '<|/tool|>' + '<|end|>' }}{% else %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|end|>' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>' }}{% else %}{{ eos_token }}{% endif %}", + "clean_up_tokenization_spaces": false, + "eos_token": "<|endoftext|>", + "model_max_length": 128000, + "pad_token": "<|endoftext|>", + "tokenizer_class": "GPT2TokenizerFast", + "unk_token": "<|endoftext|>" +} diff --git a/speech-lora/vocab.json b/speech-lora/vocab.json new file mode 100644 index 0000000..2460dac --- /dev/null +++ b/speech-lora/vocab.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cb65a857824fa6615bb1782d95d882617a8bbce1da0317118586b36f39e98bd +size 3910310 diff --git a/speech_conformer_encoder.py b/speech_conformer_encoder.py new file mode 100644 index 0000000..d1b0dd2 --- /dev/null +++ b/speech_conformer_encoder.py @@ -0,0 +1,2905 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +#!/usr/bin/env python3 + +# activation_checkpointing.py +"""helper function for activation checkpointing""" + +from typing import Union, Dict, Callable +from functools import partial +from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import ( + checkpoint_wrapper, + offload_wrapper, + CheckpointImpl, +) + + +# utils.py +"""cascade basic blocks""" + +import math +import backoff +import random +import numpy as np +from typing import Optional, Tuple, Union +import torch +from torch import nn +from torch import Tensor +import torch.nn.functional as F + + +# conformer_encoder.py +"""ConformerEncoder Module""" + +from typing import Optional, Tuple, List, Literal +import abc +import math +import numpy as np + +import torch +from torch import nn, Tensor + +from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import CheckpointWrapper +from torch.distributed.fsdp.fully_sharded_data_parallel import FullyShardedDataParallel + + +# activation_checkpointing.py +def validate_checkpointing_config(activation_checkpointing): + """validate activation checkpointing configuration""" + if isinstance(activation_checkpointing, str): + assert activation_checkpointing in ( + "", + "checkpoint", + "offload", + ), "activation_checkpointing has to be a dict or a str in ('', 'checkpoint', 'offload')." + elif isinstance(activation_checkpointing, dict): + assert activation_checkpointing.get("module", "transformer") in ( + "transformer", + "attention", + ), "module in activation_checkpointing has to be in ('transformer', 'attention')." + else: + raise ValueError("activation_checkpointing has to be a str or dict.") + + +def embedding_checkpoint_wrapper( + activation_checkpointing: Union[str, Dict], +) -> Callable: + """return encoder embedding activation checkpoint wrapper""" + validate_checkpointing_config(activation_checkpointing) + + if isinstance(activation_checkpointing, str): + if activation_checkpointing: + if activation_checkpointing == "offload": + return offload_wrapper + return partial(checkpoint_wrapper) + return lambda x: x + + if isinstance(activation_checkpointing, dict): + enabled = activation_checkpointing.get("embed", False) + if enabled: + offloading = activation_checkpointing.get("offload", False) + if offloading: + return offload_wrapper + impl = ( + CheckpointImpl.REENTRANT + if activation_checkpointing.get("reentrant", False) + else CheckpointImpl.NO_REENTRANT + ) + return partial(checkpoint_wrapper, checkpoint_impl=impl) + return lambda x: x + raise ValueError("Invalid activation_checkpointing config") + + +def encoder_checkpoint_wrapper( + activation_checkpointing: Union[str, Dict], + layer_cls: type, + idx: int = 0, +) -> Callable: + """return encoder activation checkpoint wrapper""" + validate_checkpointing_config(activation_checkpointing) + + if isinstance(activation_checkpointing, str): + if activation_checkpointing: + if activation_checkpointing == "offload": + return offload_wrapper + return partial(checkpoint_wrapper) + return lambda x: x + + if isinstance(activation_checkpointing, dict): + target_layer_cls = activation_checkpointing.get("module", "transformer") + if target_layer_cls.lower() == "transformer": + target_layer_cls = ( + "EncoderLayer", + "ConformerEncoderLayer", + ) + elif target_layer_cls.lower() == "attention": + target_layer_cls = ("MultiHeadedAttention", "MultiHeadAttention") + checkpointing_interval = activation_checkpointing.get("interval", 1) + offloading = activation_checkpointing.get("offload", False) + impl = ( + CheckpointImpl.REENTRANT + if activation_checkpointing.get("reentrant", True) + else CheckpointImpl.NO_REENTRANT + ) + + if idx % checkpointing_interval == 0 and layer_cls.__name__ in target_layer_cls: + if offloading: + return offload_wrapper + return partial(checkpoint_wrapper, checkpoint_impl=impl) + return lambda x: x + + raise ValueError("Invalid activation_checkpointing config") + + +def attn_checkpointing(activation_checkpointing: Union[str, Dict], i) -> Union[str, Dict]: + """return activation checkpointing config for attention layer""" + if isinstance(activation_checkpointing, str): + return "" + + if isinstance(activation_checkpointing, dict): + target_layer_cls = activation_checkpointing.get("module", "transformer") + checkpointing_interval = activation_checkpointing.get("interval", 1) + if target_layer_cls == "attention" and i % checkpointing_interval == 0: + return activation_checkpointing + return "" + + raise ValueError("Invalid activation_checkpointing config") + + +# utils.py +class Block(nn.Module): + """Block abstract module""" + + def __init__(self, input_size, output_size): + super().__init__() + self.input_size = input_size + self.output_size = output_size + +def get_activation(name="relu"): + """Select an activation function by name + + Args: + name: str + activation function name, + one of ["relu", "gelu", "swish", "sigmoid"], + default "relu". + """ + name = name.lower() + if name == "relu": + return nn.ReLU(inplace=True) + if name == "gelu": + return nn.GELU() + if name == "swish": + return Swish() + if name == "sigmoid": + return torch.nn.Sigmoid() + return nn.Identity() + +def adaptive_enc_mask(x_len, chunk_start_idx, left_window=0, right_window=0): + """ + The function is very important for Transformer Transducer Streaming mode + Args: + xs_len (int): sequence length + chunk_start_idx (list): first idx of each chunk, such as [0,18,36,48]. It also supports adaptive chunk size [0,10,15,45] + left_window (int): how many left chunks can be seen + right_window (int): how many right chunks can be seen. It is used for chunk overlap model. + Returns: + mask (torch.Tensor): a mask tensor for streaming model + Torch 1.0.1 + tensor([[1., 1., 0., 0.], + [0., 1., 1., 0.], + [0., 0., 1., 1.]]) + Torch 1.4.1 + tensor([[True., True., False., False.], + [False., True., True., False.], + [False., False., True., True.]]) + """ + chunk_start_idx = torch.Tensor( + chunk_start_idx + ).long() # first idx of each chunk, such as [0,18,36,48]. + start_pad = torch.nn.functional.pad( + chunk_start_idx, (1, 0) + ) # append 0 to the beginning, so it becomes [0, 0, 18, 36, 48] + end_pad = torch.nn.functional.pad( + chunk_start_idx, (0, 1), value=x_len + ) # append x_len to the end, so it becomes [0,18,36,48, x_len] + seq_range = torch.arange(0, x_len).unsqueeze(-1) # seq_range size: [x_len, 1] + idx = ((seq_range < end_pad) & (seq_range >= start_pad)).nonzero()[:, 1] # idx size: [x_len] + boundary = end_pad[idx] # boundary size: [x_len] + seq_range_expand = ( + torch.arange(0, x_len).unsqueeze(0).expand(x_len, -1) + ) # seq_range_expand size [x_len, x_len] + idx_left = idx - left_window + idx_left[idx_left < 0] = 0 + boundary_left = start_pad[idx_left] + mask_left = seq_range_expand >= boundary_left.unsqueeze(-1) + idx_right = idx + right_window + idx_right[idx_right > len(chunk_start_idx)] = len(chunk_start_idx) + boundary_right = end_pad[idx_right] + mask_right = seq_range_expand < boundary_right.unsqueeze(-1) + return mask_left & mask_right + +class Swish(nn.Module): + """Implement Swish activation module. + From https://arxiv.org/pdf/2005.03191.pdf + + """ + + def __init__(self) -> None: + super().__init__() + self.act_fn = nn.Sigmoid() + + def forward(self, x: Tensor) -> Tensor: + """Apply Swish function + + Args: + x: torch.Tensor + Input. + """ + return x * self.act_fn(x) + +class GLU(nn.Module): + """Implement Gated Linear Unit (GLU) module""" + + def __init__(self, dim: int = -1, act_name: str = "sigmoid") -> None: + super().__init__() + self.dim = dim + self.act_name = act_name.lower() + + if self.act_name == "relu": + self.act_fn = nn.ReLU(inplace=True) + elif self.act_name == "gelu": + self.act_fn = nn.GELU() + elif self.act_name == "swish": + self.act_fn = Swish() + elif self.act_name == "sigmoid": + self.act_fn = nn.Sigmoid() + else: + self.act_fn = nn.Identity() + + def forward(self, x: Tensor) -> Tensor: + """GLU forward + Apply Swish function on the first half of input matrices + with sigmoid of the second half. + + Args: + x: torch.Tensor + Input. + + """ + half_x, gate = x.chunk(2, dim=self.dim) + return half_x * self.act_fn(gate) + +# TODO: Abdel, this can be improved using GLU module +class GLUPointWiseConv(nn.Module): + """GLUPointWiseConv module + used for conformer architecture, + for more details see: + https://arxiv.org/pdf/2005.08100v1.pdf + + Args: + input_dim: int + input channel size. + output_dim: int + output channel size. + kernel_size: int + kernel size + glu_type: str, optional + activation function one of + ["sigmoid", "relu", "gelu"] + default "sigmoid". + bias_in_glu: bool, optional + use addtive bias in glu + causal: bool, optional + if set to True, padding is set to the half of + kernel size, ie, convolution can't see future frames. + default False. + + """ + + def __init__( + self, input_dim, output_dim, kernel_size, glu_type="sigmoid", bias_in_glu=True, causal=False + ): + super().__init__() + + self.glu_type = glu_type + self.output_dim = output_dim + self.bias_in_glu = bias_in_glu + if causal: + self.ext_pw_conv_1d = nn.Conv1d( + input_dim, output_dim * 2, kernel_size, 1, padding=(kernel_size - 1) + ) + else: + self.ext_pw_conv_1d = nn.Conv1d( + input_dim, output_dim * 2, kernel_size, 1, padding=(kernel_size - 1) // 2 + ) + + if glu_type == "sigmoid": + self.glu_act = nn.Sigmoid() + elif glu_type == "relu": + self.glu_act = nn.ReLU() + elif glu_type == "gelu": + self.glu_act = nn.GELU() + elif glu_type == "swish": + self.glu_act = Swish() + else: + raise ValueError(f"Unsupported activation type {self.glu_act}") + + if bias_in_glu: + self.b1 = nn.Parameter(torch.zeros(1, output_dim, 1)) + self.b2 = nn.Parameter(torch.zeros(1, output_dim, 1)) + + def forward(self, x): + """ + Args: + x: torch.Tensor + input tensor + """ + # to be consistent with GLULinear, we assume the input always has the #channel (#dim) in the last dimension of the tensor, so need to switch the dimension first for 1D-Conv case + x = x.permute([0, 2, 1]) + x = self.ext_pw_conv_1d(x) + if self.glu_type == "bilinear": + if self.bias_in_glu: + x = (x[:, 0 : self.output_dim, :] + self.b1) * ( + x[:, self.output_dim : self.output_dim * 2, :] + self.b2 + ) + else: + x = (x[:, 0 : self.output_dim, :]) * ( + x[:, self.output_dim : self.output_dim * 2, :] + ) + else: + if self.bias_in_glu: + x = (x[:, 0 : self.output_dim, :] + self.b1) * self.glu_act( + x[:, self.output_dim : self.output_dim * 2, :] + self.b2 + ) + else: + x = (x[:, 0 : self.output_dim, :]) * self.glu_act( + x[:, self.output_dim : self.output_dim * 2, :] + ) + + x = x.permute([0, 2, 1]) + return x + + +class DepthWiseSeperableConv1d(nn.Module): + """DepthWiseSeperableConv1d module used in Convnet module + for the conformer, for more details see: + https://arxiv.org/pdf/2005.08100v1.pdf + + Args: + input_dim: int + input channel size. + depthwise_seperable_out_channel: int + if set different to 0, the number of depthwise_seperable_out_channel + will be used as a channel_out of the second conv1d layer. + otherwise, it equal to 0, the second conv1d layer is skipped. + kernel_size: int + kernel_size + depthwise_multiplier: int + number of input_dim channels duplication. this value + will be used to compute the hidden channels of the Conv1D. + padding: int, optional + padding for the conv1d, + default: 0. + + """ + + def __init__( + self, + input_dim, + depthwise_seperable_out_channel, + kernel_size, + depthwise_multiplier, + padding=0, + ): + super().__init__() + + self.dw_conv = nn.Conv1d( + input_dim, + input_dim * depthwise_multiplier, + kernel_size, + 1, + padding=padding, + groups=input_dim, + ) + + if depthwise_seperable_out_channel != 0: + self.pw_conv = nn.Conv1d( + input_dim * depthwise_multiplier, depthwise_seperable_out_channel, 1, 1, 0 + ) + else: + self.pw_conv = nn.Identity() + self.depthwise_seperable_out_channel = depthwise_seperable_out_channel + + def forward(self, x): + """ + + Args: + x: torch.Tensor + input tensor + """ + x = self.dw_conv(x) + if self.depthwise_seperable_out_channel != 0: + x = self.pw_conv(x) + return x + + +class ConvModule(nn.Module): + """ConvModule Module for the conformer block. + for more details see: + https://arxiv.org/pdf/2005.08100v1.pdf + + Args: + input_dim: int + input channel size. + ext_pw_out_channel: int + if > 0, ext_pw_out_channel is a dim channel size + for the last pointwise conv after swish activation. + depthwise_seperable_out_channel: int + if set different to 0, the number of depthwise_seperable_out_channel + will be used as a channel_out of the second conv1d layer. + otherwise, it equal to 0, the second conv1d layer is skipped. + ext_pw_kernel_size: int + kernel size of the conv pointwise of the conformer. + kernel_size: int + kernel size. + depthwise_multiplier: int + number of input_dim channels duplication. this value + will be used to compute the hidden channels of the Conv1D. + dropout_rate: float + dropout rate. + causal: bool, optional + if set to True, convolution have no access + to future frames. default False. + batch_norm: bool, optional + if set to True, apply batchnorm before activation. + default False + chunk_se: int, optional + 0 for offline SE. + 1 for streaming SE, where mean is computed + by accumulated history until current chunk_se. + 2 for streaming SE, where mean is computed + by only the current chunk. + chunk_size: int, optional + chunk size for cnn. default 18 + activation: str, optional + activation function used in ConvModule, + default: "relu". + glu_type: str, optional + activation function used for the glu, + default: "sigmoid". + bias_in_glu: bool, optional + if set to True, use additive bias in the weight module + before GLU. + linear_glu_in_convm: bool, optional + if set to True, use GLULinear module, + otherwise, used GLUPointWiseConv module. + default to False. + export: bool, optional, + if set to True, padding is equal to 0. This is for inference, + or onnx export. Typically this is set by the export program or + the decoder program, and it isn't present in your config file. + default False + """ + + def __init__( + self, + input_dim, + ext_pw_out_channel, + depthwise_seperable_out_channel, + ext_pw_kernel_size, + kernel_size, + depthwise_multiplier, + dropout_rate, + causal=False, + batch_norm=False, + chunk_se=0, + chunk_size=18, + activation="relu", + glu_type="sigmoid", + bias_in_glu=True, + linear_glu_in_convm=False, + export=False, + ): + super().__init__() + self.layer_norm = nn.LayerNorm(input_dim) + self.input_dim = input_dim + self.ext_pw_out_channel = ext_pw_out_channel + self.ext_pw_kernel_size = ext_pw_kernel_size + self.depthwise_seperable_out_channel = depthwise_seperable_out_channel + self.glu_type = glu_type + self.bias_in_glu = bias_in_glu + self.linear_glu_in_convm = linear_glu_in_convm + self.causal = causal + + self._add_ext_pw_layer() + + self.batch_norm = batch_norm + self.kernel_size = kernel_size + + if batch_norm: + self.bn_layer = nn.BatchNorm1d(input_dim) + + self.act = get_activation(activation) + self.dropout = nn.Dropout(dropout_rate) + self.export = export + + if causal: + if export: # Inference only. + padding = 0 # A cache is concatenated to the left. No padding in the kernel. + else: + # Training only. Padding will be added symmetrically on both sides. + # After convolution, clip off kernel_size-1 points on the right. + padding = kernel_size - 1 + else: + padding = (kernel_size - 1) // 2 + + self.dw_sep_conv_1d = DepthWiseSeperableConv1d( + input_dim, + depthwise_seperable_out_channel, + kernel_size, + depthwise_multiplier, + padding=padding, + ) + + if depthwise_seperable_out_channel != 0: + if input_dim != depthwise_seperable_out_channel: + self.ln2 = nn.Linear(depthwise_seperable_out_channel, input_dim) + else: + if depthwise_multiplier != 1: + self.ln2 = nn.Linear(input_dim * depthwise_multiplier, input_dim) + + def _add_ext_pw_layer(self): + """ + This function is an extension of __init__ function + and dedicated to the convolution module creation + of the conformer. + """ + self.ln1 = self.glu = self.bn_layer = self.ext_pw_conv_1d = nn.Identity() # jit hacks. + self.squeeze_excitation = nn.Identity() # jit. + self.apply_ln1 = self.fix_len1 = False # jit. + + if self.ext_pw_out_channel != 0: + if self.causal: + self.ext_pw_conv_1d = nn.Conv1d( + self.input_dim, + self.ext_pw_out_channel, + self.ext_pw_kernel_size, + 1, + padding=(self.ext_pw_kernel_size - 1), + ) + if self.ext_pw_kernel_size > 1: + self.fix_len1 = True + else: + self.fix_len1 = False + else: + self.ext_pw_conv_1d = nn.Conv1d( + self.input_dim, + self.ext_pw_out_channel, + self.ext_pw_kernel_size, + 1, + padding=(self.ext_pw_kernel_size - 1) // 2, + ) + self.fix_len1 = False + + if self.linear_glu_in_convm: + self.glu = GLULinear( + self.input_dim, self.ext_pw_out_channel, self.glu_type, self.bias_in_glu + ) + else: + self.glu = GLUPointWiseConv( + self.input_dim, + self.ext_pw_out_channel, + self.ext_pw_kernel_size, + self.glu_type, + self.bias_in_glu, + self.causal, + ) + + if self.input_dim != self.ext_pw_out_channel: + self.apply_ln1 = True + self.ln1 = nn.Linear(self.ext_pw_out_channel, self.input_dim) + else: + self.apply_ln1 = False + else: + self.pw_conv_simplify_w = torch.nn.Parameter(torch.ones(3)) + self.pw_conv_simplify_b = torch.nn.Parameter(torch.zeros(3)) + + def forward(self, x): + """ConvModule Forward. + + Args: + x: torch.Tensor + input tensor. + """ + x = self.layer_norm(x) + + if self.ext_pw_out_channel != 0: + x = self.glu(x) + if self.causal and self.ext_pw_kernel_size > 1: + x = x[:, : -(self.ext_pw_kernel_size - 1), :] + if self.apply_ln1: + x = self.ln1(x) + else: + x_0 = x * self.pw_conv_simplify_w[0] + self.pw_conv_simplify_b[0] + x_1 = x * self.pw_conv_simplify_w[1] + self.pw_conv_simplify_b[1] + x = x_0 + x_1 + + x = x.permute([0, 2, 1]) + + x = self.dw_sep_conv_1d(x) + if self.causal and self.kernel_size > 1: + x = x[:, :, : -(self.kernel_size - 1)] + if hasattr(self, "ln2"): + x = x.permute([0, 2, 1]) + x = self.ln2(x) + x = x.permute([0, 2, 1]) + if self.batch_norm: + x = self.bn_layer(x) + x = self.act(x) + + if self.ext_pw_out_channel != 0: + x = self.ext_pw_conv_1d(x) + if self.fix_len1: + x = x[:, :, : -(self.ext_pw_kernel_size - 1)] + + if self.apply_ln1: + x = x.permute([0, 2, 1]) + x = self.ln1(x) + x = x.permute([0, 2, 1]) + + x = x.permute([0, 2, 1]) + else: + x = x.unsqueeze(1).permute([0, 1, 3, 2]) + x = x * self.pw_conv_simplify_w[2] + self.pw_conv_simplify_b[2] + x = x.squeeze(1) + + x = self.dropout(x) + return x + +class GLULinear(nn.Module): + """Linear + GLU module + + Args: + input_dim: int + input size + output_dim: int + output size. + glu_type: + activation function name used in glu module. + default "sigmoid" (swish function). + bias_in_glu: bool, optional + If True, the addtive bias is added. Default False. + """ + + def __init__( + self, + input_dim, + output_dim, + glu_type="sigmoid", + bias_in_glu=True, + ): + super().__init__() + self.linear = nn.Linear(input_dim, output_dim * 2, bias_in_glu) + self.glu_act = GLU(-1, glu_type) + + def forward(self, x): + """GLULinear forward + + Args: + x: torch.Tensor + inpute tensor. + """ + x = self.linear(x) + return self.glu_act(x) + +class FeedForward(nn.Module): + """FeedForward Module. + For more details see Conformer paper: + https://arxiv.org/pdf/2005.08100.pdf + + Args: + d_model: int + input size. + d_inner: int + output size. + dropout_rate: float, + dropout rate. + activation: str, + activation function name, + one of ["relu", "swish", "sigmoid"], + sigmoid activation is only used with "glu_in_fnn=True", + default "sigmoid". + bias_in_glu: bool, optional + """ + + def __init__( + self, + d_model, + d_inner, + dropout_rate, + activation="sigmoid", + bias_in_glu=True, + ): + super().__init__() + self.d_model = d_model + self.d_inner = d_inner + + self.layer_norm = nn.LayerNorm(d_model) + module = GLULinear(d_model, d_inner, activation, bias_in_glu) + self.net = nn.Sequential( + module, + nn.Dropout(dropout_rate), + nn.Linear(d_inner, d_model), + nn.Dropout(dropout_rate), + ) + + def forward(self, x): + """FeedForward forward function. + + Args: + x: torch.Tensor + input tensor. + """ + out = self.net(self.layer_norm(x)) + + return out + +#### positional encoding starts here +def _pre_hook( + state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs +): + """Perform pre-hook in load_state_dict for backward compatibility. + + Note: + We saved self.pe until v.0.5.2 but we have omitted it later. + Therefore, we remove the item "pe" from `state_dict` for backward compatibility. + + """ + k = prefix + "pe" + if k in state_dict: + state_dict.pop(k) + +class T5RelativeAttentionLogitBias(nn.Module): + """ + This module implements the relative position bias described in Section 2.1 of + the T5 paper: https://arxiv.org/pdf/1910.10683.pdf + + The Huggingface implementation is used as a reference + https://github.com/huggingface/transformers/blob/v4.30.0/src/transformers/models/t5/modeling_t5.py#L435 + + Modifies attention as Q*K^T + B, where B is a learned scalar bias based on relative position + of the query and key. It is HxNxN, where H is the number of heads, N is the sequence length. + + I've made these modifications to the original T5 bias: + - Skipping of the bucketing step. Original T5 bias converted rel position distances into + logarithmically increasing buckets. This is supposed to help with length generalization. + - I just directly use rel position index as bias values, as we don't need length + generalization (40s max is good enough for ASR encoder), and it keeps ONNX export simple. + - I've also extended it so that biases can be asymmetric, the default implementation treats + L->R and R->L the same. Asymmetric was found to yield better results in my experiments. + + Args: + num_heads: int + Number of attention heads + num_buckets: int + Number of buckets to use for relative attention bias. This is the size of the learnable + bias parameter. Bucketing is not yet supported, so this defaults to -1 which means + no bucketing is used (max_distance determines size of bias param). + max_distance: int + Maximum distance to use for relative attention bias. With num_buckets=-1, this directly + controls the max size of the bias parameter. When num_buckets > 0 is supported, this + will control the maximum distance for logarithmic bucketing after which all positions + are in the same bucket. + symmetric: bool + Whether to use symmetric or asymmetric biases. symmetric=False uses 2x number of bias + params to distinguish L->R from R->L. This was found to be better for the encoder. + """ + + def __init__(self, num_heads, num_buckets=-1, max_distance=1000, symmetric=False): + super().__init__() + self.num_heads = num_heads + self.num_buckets = num_buckets + self.max_distance = max_distance + self.symmetric = symmetric + self._skip_bucketing = self.num_buckets < 0 + if self._skip_bucketing: + self.num_buckets = max_distance + else: + raise NotImplementedError("T5 attention bias with bucketed positions is not yet tested") + if not self.symmetric: + self.num_buckets *= 2 + self.bias_values = nn.Embedding(self.num_buckets, self.num_heads) + + def forward(self, x): + # instantiate bias compatible with shape of x + maxpos = x.size(1) + context_position = torch.arange(maxpos, device=x.device, dtype=torch.long)[:, None] + memory_position = torch.arange(maxpos, device=x.device, dtype=torch.long)[None, :] + relative_position = memory_position - context_position + # clipping to a maximum distance using ops that play well with ONNX export + relative_position = relative_position.masked_fill( + relative_position < -self.max_distance, -self.max_distance + ) + relative_position = relative_position.masked_fill( + relative_position > self.max_distance - 1, self.max_distance - 1 + ) + + # mapping from relative position to index in the bias parameter + if self._skip_bucketing: + bias_idx = relative_position + else: + bias_idx = self._bucket_relative_position(relative_position) + if self.symmetric: + bias_idx = bias_idx.abs() + else: + bias_idx += self.num_buckets // 2 + + t5_rel_att_bias = self.bias_values(bias_idx) # [L, L, H] + t5_rel_att_bias = t5_rel_att_bias.permute(2, 0, 1).unsqueeze(0) # [1, H, L, L] + + return t5_rel_att_bias + + def _bucket_relative_position(self, relative_position): + # this is a placeholder (isn't tested, likely buggy) using HuggingFace implem as a reference + # this also needs to be extended to support asymmetric +/- ve positions + relative_buckets = 0 + if not self.causal: + num_buckets //= 2 + relative_buckets += (relative_position > 0).to(torch.long) * num_buckets + relative_position = torch.abs(relative_position) + else: + relative_position = -torch.min(relative_position, torch.zeros_like(relative_position)) + # now relative_position is in the range [0, inf) + + # half of the buckets are for exact increments in positions + max_exact = num_buckets // 2 + is_small = relative_position < max_exact + + # The other half of the buckets are for logarithmically bigger bins in positions up to max_distance + relative_position_if_large = max_exact + ( + torch.log(relative_position.float() / max_exact) + / math.log(self.max_distance / max_exact) + * (num_buckets - max_exact) + ).to(torch.long) + relative_position_if_large = torch.min( + relative_position_if_large, torch.full_like(relative_position_if_large, num_buckets - 1) + ) + + relative_buckets += torch.where(is_small, relative_position, relative_position_if_large) + return relative_buckets + +class AbsolutePositionalEncoding(nn.Module): + """Absolute Positional encoding module. + This module implement Absolute sinusoidal positional encoding + from: https://arxiv.org/pdf/1706.03762.pdf + + Args: + d_model: int + Input embedding size. + dropout_rate: float + dropout rate + max_len: int, optional + Maximum input length sequence, Default 5000 + + """ + + def __init__(self, d_model, dropout_rate, max_len=5000): + """Construct an PositionalEncoding object.""" + super().__init__() + self.d_model = d_model + self.xscale = math.sqrt(self.d_model) + self.dropout = torch.nn.Dropout(p=dropout_rate) + self.pe = None + self.extend_pe(torch.tensor(0.0).expand(1, max_len)) + self._register_load_state_dict_pre_hook(_pre_hook) + + def extend_pe(self, x): + """Reset the positional encodings. + + Args: + x: torch.Tensor + """ + if self.pe is not None: + if self.pe.size(1) >= x.size(1): + if self.pe.dtype != x.dtype or self.pe.device != x.device: + self.pe = self.pe.to(dtype=x.dtype, device=x.device) + return + pe = torch.zeros(x.size(1), self.d_model) + position = torch.arange(0, x.size(1), dtype=torch.float32).unsqueeze(1) + div_term = torch.exp( + torch.arange(0, self.d_model, 2, dtype=torch.float32) + * -(math.log(10000.0) / self.d_model) + ) + pe[:, 0::2] = torch.sin(position * div_term) + pe[:, 1::2] = torch.cos(position * div_term) + pe = pe.unsqueeze(0) + self.pe = pe.to(device=x.device, dtype=x.dtype) + + def forward(self, x: torch.Tensor): + """Add positional encoding. + + Args: + x: torch.Tensor + Input tensor. shape is (batch, time, ...) + + Returns: + torch.Tensor: Encoded tensor. Its shape is (batch, time, ...) + + """ + self.extend_pe(x) + x = x * self.xscale + self.pe[:, : x.size(1)] + return self.dropout(x) + +#### forward embedding layers starts here + +@backoff.on_exception(backoff.expo, Exception, max_tries=10) +def np_loadtxt_with_retry(filepath): + """np.loadtxt with retry + + Args: + filepath: str + file path to the numpy array. + """ + result = np.loadtxt(filepath, dtype="f") + return result + +class MeanVarianceNormLayer(nn.Module): + """Mean/variance normalization layer. + + Will substract mean and multiply input by inverted standard deviation. + Typically used as a very first layer in a model. + + Args: + input_size: int + layer input size. + """ + + def __init__(self, input_size): + super().__init__() + self.input_size = input_size + self.register_buffer("global_mean", torch.zeros(input_size)) + self.register_buffer("global_invstd", torch.ones(input_size)) + self.global_mean: Optional[Tensor] + self.global_invstd: Optional[Tensor] + + def forward(self, input_: Tensor) -> Tensor: + """MeanVarianceNormLayer Forward + + Args: + input_: torch.Tensor + input tensor. + """ + return (input_ - self.global_mean) * self.global_invstd + + def load_mean_invstd(self, mean_file, invstd_file, cuside_features=False): + """Load feature mean and variance used for normalization. + + Args: + mean_file: str + path to the feature mean statistics file. + invstd_file: str + path to the features inverted standard deviation + statistics file. + cuside_features: bool + Boolean that indicates CUSIDE is being used. + The statistics of CUSIDE features are copied + from the normal features + """ + self.global_mean.data = torch.from_numpy(np_loadtxt_with_retry(mean_file)) + self.global_invstd.data = torch.from_numpy(np_loadtxt_with_retry(invstd_file)) + + if cuside_features: + self.global_mean.data = torch.cat((self.global_mean.data, self.global_mean.data), 0) + self.global_invstd.data = torch.cat( + (self.global_invstd.data, self.global_invstd.data), 0 + ) + +class CausalConv1D(nn.Conv1d): + """ + A causal version of nn.Conv1d where each step would have limited access to locations on its right or left + All arguments are the same as nn.Conv1d except padding. + + If padding is set None, then paddings are set automatically to make it a causal convolution where each location would not see any steps on its right. + + If padding is set as a list (size of 2), then padding[0] would be used as left padding and padding[1] as right padding. + It would make it possible to control the number of steps to be accessible on the right and left. + This mode is not supported when stride > 1. padding[0]+padding[1] should be equal to (kernel_size - 1). + """ + + def __init__( + self, + in_channels: int, + out_channels: int, + kernel_size: int, + stride: int = 1, + padding: Union[str, int] = 0, + dilation: int = 1, + groups: int = 1, + bias: bool = True, + padding_mode: str = "zeros", + device=None, + dtype=None, + ) -> None: + self.cache_drop_size = None + if padding is None: + self._left_padding = kernel_size - 1 + self._right_padding = stride - 1 + else: + if stride != 1 and padding != kernel_size - 1: + raise ValueError("No striding allowed for non-symmetric convolutions!") + if isinstance(padding, int): + self._left_padding = padding + self._right_padding = padding + elif ( + isinstance(padding, list) + and len(padding) == 2 + and padding[0] + padding[1] == kernel_size - 1 + ): + self._left_padding = padding[0] + self._right_padding = padding[1] + else: + raise ValueError(f"Invalid padding param: {padding}!") + + self._max_cache_len = self._left_padding + + super().__init__( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=0, + dilation=dilation, + groups=groups, + bias=bias, + padding_mode=padding_mode, + device=device, + dtype=dtype, + ) + + def update_cache(self, x, cache=None): + if cache is None: + new_x = F.pad(x, pad=(self._left_padding, self._right_padding)) + next_cache = cache + else: + new_x = F.pad(x, pad=(0, self._right_padding)) + new_x = torch.cat([cache, new_x], dim=-1) + if self.cache_drop_size > 0: + next_cache = new_x[:, :, : -self.cache_drop_size] + else: + next_cache = new_x + next_cache = next_cache[:, :, -cache.size(-1) :] + return new_x, next_cache + + def forward(self, x, cache=None): + x, cache = self.update_cache(x, cache=cache) + x = super().forward(x) + if cache is None: + return x + else: + return x, cache + + +class CausalConv2D(nn.Conv2d): + """ + A causal version of nn.Conv2d where each location in the 2D matrix would have no access to locations on its right or down + All arguments are the same as nn.Conv2d except padding which should be set as None + """ + + def __init__( + self, + in_channels: int, + out_channels: int, + kernel_size: int, + stride: int = 1, + padding: Union[str, int] = 0, + dilation: int = 1, + groups: int = 1, + bias: bool = True, + padding_mode: str = "zeros", + device=None, + dtype=None, + ) -> None: + if padding is not None: + raise ValueError("Argument padding should be set to None for CausalConv2D.") + self._left_padding = kernel_size - 1 + self._right_padding = stride - 1 + + padding = 0 + super().__init__( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + groups, + bias, + padding_mode, + device, + dtype, + ) + + def forward( + self, + x, + ): + if self.training: + x = F.pad( + x, + pad=( + self._left_padding, + self._right_padding, + self._left_padding, + self._right_padding, + ), + ) + else: + x = F.pad( + x, + pad=(self._left_padding, self._right_padding, 0, 0), + ) + x = super().forward(x) + return x + + +class NemoConvSubsampling(torch.nn.Module): + """Convlutional subsampling module, taken from NeMo ASR + (https://github.com/NVIDIA/NeMo/blob/b367413645d5c72db3c2c96e46e95a34501479cf/nemo/collections/asr/parts/submodules/subsampling.py) + + Striding Subsampling: "Speech-Transformer: A No-Recurrence Sequence-to-Sequence Model for + Speech Recognition" by Linhao Dong et al. (https://ieeexplore.ieee.org/document/8462506) + + + Compared with the EncoderConv2D (`input_layer: custom`), this is a much simplified approach, + and uses no LayerNorm and far fewer Conv2Ds. Moreover, depthwise convolutions are used to reduce + FLOPs, but the first layer is kept as a regular convolution so as not to degrade accuracy. + + `Striding` and `dw_striding` are the same except that the latter uses depthwise convolutions + after the first layer, whereas the former does not. + + Args: + subsampling_factor (int): Time reduction factor + feat_in (int): size of the input features + feat_out (int): size of the output features + subsampling (str): The subsampling technique, choose from + {"striding", "dw-striding", "striding_conv1d", "dw_striding_conv1d"} + conv_channels (int): Number of channels for the convolution layers, default is 256. + subsampling_conv_chunking_factor (int): Input chunking factor which can be -1 (no chunking) + 1 (auto) or a power of 2. Default is 1 + activation (Module): activation function, default is nn.ReLU() + is_causal (bool): whether to use causal Conv1/2D, where each step will have limited access + to locations on its right or left + """ + + def __init__( + self, + feat_in, + feat_out, + subsampling_factor=4, + subsampling="dw_striding", + conv_channels=256, + subsampling_conv_chunking_factor=1, + activation=nn.ReLU(), + is_causal=False, + ): + super().__init__() + self._subsampling = subsampling + self._conv_channels = conv_channels + self._feat_in = feat_in + self._feat_out = feat_out + + if subsampling_factor % 2 != 0: + raise ValueError("Sampling factor should be a multiply of 2!") + self._sampling_num = int(math.log(subsampling_factor, 2)) + self.subsampling_factor = subsampling_factor + self.is_causal = is_causal + self.subsampling_causal_cond = subsampling in ("dw_striding", "striding", "striding_conv1d") + + if ( + subsampling_conv_chunking_factor != -1 + and subsampling_conv_chunking_factor != 1 + and subsampling_conv_chunking_factor % 2 != 0 + ): + raise ValueError("subsampling_conv_chunking_factor should be -1, 1, or a power of 2") + self.subsampling_conv_chunking_factor = subsampling_conv_chunking_factor + + in_channels = 1 + layers = [] + + if subsampling == "dw_striding": + self._stride = 2 + self._kernel_size = 3 + self._ceil_mode = False + + if self.is_causal: + self._left_padding = self._kernel_size - 1 + self._right_padding = self._stride - 1 + self._max_cache_len = subsampling_factor + 1 + else: + self._left_padding = (self._kernel_size - 1) // 2 + self._right_padding = (self._kernel_size - 1) // 2 + self._max_cache_len = 0 + + # Layer 1 + if self.is_causal: + layers.append( + CausalConv2D( + in_channels=in_channels, + out_channels=conv_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=None, + ) + ) + else: + layers.append( + torch.nn.Conv2d( + in_channels=in_channels, + out_channels=conv_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=self._left_padding, + ) + ) + in_channels = conv_channels + layers.append(activation) + + for i in range(self._sampling_num - 1): + if self.is_causal: + layers.append( + CausalConv2D( + in_channels=in_channels, + out_channels=in_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=None, + groups=in_channels, + ) + ) + else: + layers.append( + torch.nn.Conv2d( + in_channels=in_channels, + out_channels=in_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=self._left_padding, + groups=in_channels, + ) + ) + + layers.append( + torch.nn.Conv2d( + in_channels=in_channels, + out_channels=conv_channels, + kernel_size=1, + stride=1, + padding=0, + groups=1, + ) + ) + layers.append(activation) + in_channels = conv_channels + + elif subsampling == "striding": + self._stride = 2 + self._kernel_size = 3 + self._ceil_mode = False + + if self.is_causal: + self._left_padding = self._kernel_size - 1 + self._right_padding = self._stride - 1 + self._max_cache_len = subsampling_factor + 1 + else: + self._left_padding = (self._kernel_size - 1) // 2 + self._right_padding = (self._kernel_size - 1) // 2 + self._max_cache_len = 0 + + for i in range(self._sampling_num): + if self.is_causal: + layers.append( + CausalConv2D( + in_channels=in_channels, + out_channels=conv_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=None, + ) + ) + else: + layers.append( + torch.nn.Conv2d( + in_channels=in_channels, + out_channels=conv_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=self._left_padding, + ) + ) + layers.append(activation) + in_channels = conv_channels + + elif subsampling == "striding_conv1d": + in_channels = feat_in + + self._stride = 2 + self._kernel_size = 5 + self._ceil_mode = False + + if self.is_causal: + self._left_padding = self._kernel_size - 1 + self._right_padding = self._stride - 1 + self._max_cache_len = subsampling_factor + 1 + else: + self._left_padding = (self._kernel_size - 1) // 2 + self._right_padding = (self._kernel_size - 1) // 2 + self._max_cache_len = 0 + + for i in range(self._sampling_num): + if self.is_causal: + layers.append( + CausalConv1D( + in_channels=in_channels, + out_channels=feat_out if self._sampling_num == i + 1 else conv_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=None, + ) + ) + else: + layers.append( + torch.nn.Conv1d( + in_channels=in_channels, + out_channels=feat_out if self._sampling_num == i + 1 else conv_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=self._left_padding, + ) + ) + layers.append(activation) + in_channels = conv_channels + + elif subsampling == "dw_striding_conv1d": + in_channels = feat_in + + self._stride = 2 + self._kernel_size = 5 + self._ceil_mode = False + + self._left_padding = (self._kernel_size - 1) // 2 + self._right_padding = (self._kernel_size - 1) // 2 + + # Layer 1 + layers.extend( + [ + torch.nn.Conv1d( + in_channels=in_channels, + out_channels=in_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=self._left_padding, + groups=in_channels, + ), + torch.nn.Conv1d( + in_channels=in_channels, + out_channels=feat_out if self._sampling_num == 1 else conv_channels, + kernel_size=1, + stride=1, + padding=0, + groups=1, + ), + ] + ) + in_channels = conv_channels + layers.append(activation) + + for i in range(self._sampling_num - 1): + layers.extend( + [ + torch.nn.Conv1d( + in_channels=in_channels, + out_channels=in_channels, + kernel_size=self._kernel_size, + stride=self._stride, + padding=self._left_padding, + groups=in_channels, + ), + torch.nn.Conv1d( + in_channels=in_channels, + out_channels=feat_out if self._sampling_num == i + 2 else conv_channels, + kernel_size=1, + stride=1, + padding=0, + groups=1, + ), + ] + ) + layers.append(activation) + in_channels = conv_channels + + else: + raise ValueError(f"Not valid sub-sampling: {subsampling}!") + + if subsampling in ["dw_striding", "striding"]: + in_length = torch.tensor(feat_in, dtype=torch.float) + out_length = calc_length( + lengths=in_length, + all_paddings=self._left_padding + self._right_padding, + kernel_size=self._kernel_size, + stride=self._stride, + ceil_mode=self._ceil_mode, + repeat_num=self._sampling_num, + ) + self.out = torch.nn.Linear(conv_channels * int(out_length), feat_out) + self.conv2d_subsampling = True + elif subsampling in ["striding_conv1d", "dw_striding_conv1d"]: + self.out = None + self.conv2d_subsampling = False + else: + raise ValueError(f"Not valid sub-sampling: {subsampling}!") + + self.conv = torch.nn.Sequential(*layers) + + def get_sampling_frames(self): + return [1, self.subsampling_factor] + + def get_streaming_cache_size(self): + return [0, self.subsampling_factor + 1] + + def forward(self, x, mask): + """ + Forward method for NeMo subsampling. + + Args: + x[Batch, Time, Filters]: torch.Tensor + input tensor + x_mask: torch.Tensor + input mask + + Returns: + x: torch.Tensor + Resulting tensor from subsampling (B, T // time_reduction_factor, feat_out) + pad_mask: torch.Tensor + tensor of padded hidden state sequences (B, 1, T // time_reduction_factor) + """ + # Unsqueeze Channel Axis + if self.conv2d_subsampling: + x = x.unsqueeze(1) + # Transpose to Channel First mode + else: + x = x.transpose(1, 2) + + # split inputs if chunking_factor is set + if self.subsampling_conv_chunking_factor != -1 and self.conv2d_subsampling: + if self.subsampling_conv_chunking_factor == 1: + # if subsampling_conv_chunking_factor is 1, we split only if needed + # avoiding a bug / feature limiting indexing of tensors to 2**31 + # see https://github.com/pytorch/pytorch/issues/80020 + x_ceil = 2**31 / self._conv_channels * self._stride * self._stride + if torch.numel(x) > x_ceil: + need_to_split = True + else: + need_to_split = False + else: + # if subsampling_conv_chunking_factor > 1 we always split + need_to_split = True + + if need_to_split: + x, success = self.conv_split_by_batch(x) + if not success: # if unable to split by batch, try by channel + if self._subsampling == "dw_striding": + x = self.conv_split_by_channel(x) + else: + x = self.conv(x) # try anyway + else: + x = self.conv(x) + else: + x = self.conv(x) + + # Flatten Channel and Frequency Axes + if self.conv2d_subsampling: + b, c, t, f = x.size() + x = self.out(x.transpose(1, 2).reshape(b, t, -1)) + # Transpose to Channel Last mode + else: + x = x.transpose(1, 2) + + if mask is None: + return x, None + + max_audio_length = x.shape[1] + feature_lens = mask.sum(1) + padding_length = torch.ceil(feature_lens / self.subsampling_factor) + if self.is_causal and self.subsampling_causal_cond: + feature_lens_remainder = feature_lens % self.subsampling_factor + padding_length[feature_lens_remainder != 1] += 1 + pad_mask = ( + torch.arange(0, max_audio_length, device=x.device).expand(padding_length.size(0), -1) + < padding_length.unsqueeze(1) + ) + return x, pad_mask.unsqueeze(1) + + def reset_parameters(self): + # initialize weights + if self._subsampling == "dw_striding": + with torch.no_grad(): + # init conv + scale = 1.0 / self._kernel_size + dw_max = (self._kernel_size**2) ** -0.5 + pw_max = self._conv_channels**-0.5 + + torch.nn.init.uniform_(self.conv[0].weight, -scale, scale) + torch.nn.init.uniform_(self.conv[0].bias, -scale, scale) + + for idx in range(2, len(self.conv), 3): + torch.nn.init.uniform_(self.conv[idx].weight, -dw_max, dw_max) + torch.nn.init.uniform_(self.conv[idx].bias, -dw_max, dw_max) + torch.nn.init.uniform_(self.conv[idx + 1].weight, -pw_max, pw_max) + torch.nn.init.uniform_(self.conv[idx + 1].bias, -pw_max, pw_max) + + # init fc (80 * 64 = 5120 from https://github.com/kssteven418/Squeezeformer/blob/13c97d6cf92f2844d2cb3142b4c5bfa9ad1a8951/src/models/conformer_encoder.py#L487 + fc_scale = (self._feat_out * self._feat_in / self._sampling_num) ** -0.5 + torch.nn.init.uniform_(self.out.weight, -fc_scale, fc_scale) + torch.nn.init.uniform_(self.out.bias, -fc_scale, fc_scale) + + def conv_split_by_batch(self, x): + """Tries to split input by batch, run conv and concat results""" + b, _, _, _ = x.size() + if b == 1: # can't split if batch size is 1 + return x, False + + if self.subsampling_conv_chunking_factor > 1: + cf = self.subsampling_conv_chunking_factor + else: + # avoiding a bug / feature limiting indexing of tensors to 2**31 + # see https://github.com/pytorch/pytorch/issues/80020 + x_ceil = 2**31 / self._conv_channels * self._stride * self._stride + p = math.ceil(math.log(torch.numel(x) / x_ceil, 2)) + cf = 2**p + + new_batch_size = b // cf + if new_batch_size == 0: # input is too big + return x, False + + return torch.cat([self.conv(chunk) for chunk in torch.split(x, new_batch_size, 0)]), True + + def conv_split_by_channel(self, x): + """For dw convs, tries to split input by time, run conv and concat results""" + x = self.conv[0](x) # full conv2D + x = self.conv[1](x) # activation + + for i in range(self._sampling_num - 1): + _, c, t, _ = x.size() + + if self.subsampling_conv_chunking_factor > 1: + cf = self.subsampling_conv_chunking_factor + else: + # avoiding a bug / feature limiting indexing of tensors to 2**31 + # see https://github.com/pytorch/pytorch/issues/80020 + p = math.ceil(math.log(torch.numel(x) / 2**31, 2)) + cf = 2**p + + new_c = int(c // cf) + if new_c == 0: + new_c = 1 + + new_t = int(t // cf) + if new_t == 0: + new_t = 1 + + x = self.channel_chunked_conv(self.conv[i * 3 + 2], new_c, x) # conv2D, depthwise + + # splitting pointwise convs by time + x = torch.cat( + [self.conv[i * 3 + 3](chunk) for chunk in torch.split(x, new_t, 2)], 2 + ) # conv2D, pointwise + x = self.conv[i * 3 + 4](x) # activation + return x + + def channel_chunked_conv(self, conv, chunk_size, x): + """Performs channel chunked convolution""" + + ind = 0 + out_chunks = [] + for chunk in torch.split(x, chunk_size, 1): + step = chunk.size()[1] + + if self.is_causal: + chunk = nn.functional.pad( + chunk, + pad=( + self._kernel_size - 1, + self._stride - 1, + self._kernel_size - 1, + self._stride - 1, + ), + ) + ch_out = nn.functional.conv2d( + chunk, + conv.weight[ind : ind + step, :, :, :], + bias=conv.bias[ind : ind + step], + stride=self._stride, + padding=0, + groups=step, + ) + else: + ch_out = nn.functional.conv2d( + chunk, + conv.weight[ind : ind + step, :, :, :], + bias=conv.bias[ind : ind + step], + stride=self._stride, + padding=self._left_padding, + groups=step, + ) + out_chunks.append(ch_out) + ind += step + + return torch.cat(out_chunks, 1) + + def change_subsampling_conv_chunking_factor(self, subsampling_conv_chunking_factor: int): + if ( + subsampling_conv_chunking_factor != -1 + and subsampling_conv_chunking_factor != 1 + and subsampling_conv_chunking_factor % 2 != 0 + ): + raise ValueError("subsampling_conv_chunking_factor should be -1, 1, or a power of 2") + self.subsampling_conv_chunking_factor = subsampling_conv_chunking_factor + + +def calc_length(lengths, all_paddings, kernel_size, stride, ceil_mode, repeat_num=1): + """Calculates the output length of a Tensor passed through a convolution or max pooling layer""" + add_pad: float = all_paddings - kernel_size + one: float = 1.0 + for i in range(repeat_num): + lengths = torch.div(lengths.to(dtype=torch.float) + add_pad, stride) + one + if ceil_mode: + lengths = torch.ceil(lengths) + else: + lengths = torch.floor(lengths) + return lengths.to(dtype=torch.int) + +#### multihead attention starts here +class AttModule(nn.Module): + """Attention abstraction module""" + + def __init__(self): + super().__init__() + self.export_mode = False + + def set_export(self, mode=True): + """set the export mode""" + self.export_mode = mode + + def forward( + self, + x: Tensor, + memory: Optional[Tensor] = None, + pos_emb: Optional[Tensor] = None, + att_mask: Optional[Tensor] = None, + ) -> Tuple[Tensor, Tensor, Optional[Tensor], Optional[Tensor]]: + """AttModule forward + + Args: + x: torch.Tensor + input tensor. + memory: torch.Tensor, optional + memory tensor. + pos_emb: torch.Tensor, optional + positional encoder embedding. + att_mask: torch.Tensor, optional + attention mask tensor. + """ + return x, memory, pos_emb, att_mask + + +class AttBlock(Block, AttModule): + """Attention Block module to support both Attention and Block module.""" + + def memory_dims(self, max_len=False): + """memory dimensions""" + return (1, self.input_size) + +def masked_softmax( + scores, + mask: Optional[Tensor], +): + if mask is not None: + mask = mask.unsqueeze(1).eq(0) # (batch, 1, time1, time2) + scores = scores.masked_fill(mask, -torch.inf) + attn = torch.softmax(scores, dim=-1).masked_fill(mask, 0.0) # (batch, head, time1, time2) + else: + attn = torch.softmax(scores, dim=-1) # (batch, head, time1, time2) + return attn + + +class MultiHeadedAttention(nn.Module): + """Multi-Head Attention layer with optional relative position embedding and GLU. + + Args: + n_head: int + the number of heads. + n_feat: int + input size features. + dropout_rate: float + dropout rate. + use_LN: bool + apply layer norm or not + dropout_at_output: bool + whether to apply dropout at output + attention_inner_dim: int, optional + the attention dimension used in the class, + it can be different from the input dimension n_feat. + default: -1 (equal to n_feat). + use_pt_scaled_dot_product_attention: bool, optional + if set True, use pytorch scaled dot product attention in training. NOTE: this will NOT + be used in ONNX decoding due to a lack of support. In that case, we use the original + attention implementation, which shows no regression. + default: False. + n_value: int, optional + if set to values other than -1, use a different dimension for value. With the default value (i.e. -1), it is backward compatible. + group_size: int, optional. must divide `n_head` + if group_size > 1: GQA + if group_size = 1: MHA + if group_size = n_head: MQA + """ + + inv_sqrt_d_k: torch.jit.Final[float] + h: torch.jit.Final[int] + h_k: torch.jit.Final[int] + g: torch.jit.Final[int] + + def __init__( + self, + n_head, + n_feat, + dropout_rate, + attention_inner_dim=-1, + glu_type="swish", + bias_in_glu=True, + use_pt_scaled_dot_product_attention=False, + n_value=-1, + group_size: int = 1, + ): + super().__init__() + if n_value == -1: + n_value = n_feat + if attention_inner_dim == -1: + attention_inner_dim = n_feat + assert attention_inner_dim % n_head == 0 + + # We assume d_v always equals d_k + self.d_k = attention_inner_dim // n_head + self.inv_sqrt_d_k = 1.0 / math.sqrt(self.d_k) + self.h = n_head + assert n_head % group_size == 0, "group_size must divide n_head" + self.g = group_size + self.h_k = n_head // group_size + + self.linear_q = nn.Linear(n_feat, attention_inner_dim) + self.linear_k = nn.Linear(n_feat, attention_inner_dim // group_size) + self.linear_v = nn.Linear(n_value, attention_inner_dim // group_size) + self.linear_out = nn.Linear(attention_inner_dim // group_size, n_value) + + self.attn = torch.jit.Attribute(None, Optional[Tensor]) + self.dropout = nn.Dropout(p=dropout_rate) + self.dropout_rate = dropout_rate + self.use_pt_scaled_dot_product_attention = use_pt_scaled_dot_product_attention + + if use_pt_scaled_dot_product_attention and group_size > 1: + raise ValueError("Cannot use PT Scaled Attention with GQA") + + # Torchscript eager quantization. Note that these functions below are + # NOOPs and have very little impact on performance unless quantization is + # enabled. + self.quant_q = torch.ao.quantization.QuantStub() + self.quant_x = torch.ao.quantization.QuantStub() + self.dequant = torch.ao.quantization.DeQuantStub() + self.ffunc = torch.ao.nn.quantized.FloatFunctional() + + def forward( + self, + query: Tensor, + key: Tensor, + value: Tensor, + pos_k: Tensor, + pos_v: Tensor, + mask: Optional[Tensor], + relative_attention_bias: Optional[Tensor] = None, + ): + """Compute 'Scaled Dot Product Attention'. + + Args: + query: torch.Tensor + query tensor (batch, time1, size) + key: torch.Tensor + key tensor (batch, time2, size) + value: torch.Tensor + value tensor (batch, time1, size) + pos_k: torch.Tensor + key tensor used for relative positional embedding. + pos_v: torch.Tensor + value tensor used for relative positional embedding. + mask: torch.Tensor + mask tensor (batch, time1, time2) + relative_attention_bias: torch.Tensor + bias added to attention logits w.r.t. relative positions (1, n_head, time1, time2) + """ + n_batch = query.size(0) + + q = self.linear_q(query).view(n_batch, -1, self.h, self.d_k) # (b, t, d) + k = self.linear_k(key).view(n_batch, -1, self.h_k, self.d_k) # (b, t, d) + v = self.linear_v(value).view(n_batch, -1, self.h_k, self.d_k) + q = ( + q.transpose(1, 2) + if self.use_pt_scaled_dot_product_attention and not torch.jit.is_scripting() + else q.transpose(1, 2) * self.inv_sqrt_d_k + ) + k = k.transpose(1, 2) # (batch, head_k, time2, d_k) + v = v.transpose(1, 2) # (batch, head_k, time2, d_k) + + if self.use_pt_scaled_dot_product_attention and not torch.jit.is_scripting(): + attn_mask = None + if mask is not None: + mask = mask.unsqueeze(1) + if relative_attention_bias is not None: + attn_mask = mask + relative_attention_bias + else: + attn_mask = mask + if mask.dtype != q.dtype: + attn_mask = attn_mask.to(q.dtype) + + with torch.backends.cuda.sdp_kernel( + enable_flash=True, enable_math=True, enable_mem_efficient=True + ): + x = torch.nn.functional.scaled_dot_product_attention( + q, + k, + v, + attn_mask=attn_mask, + dropout_p=self.dropout_rate, + ) + else: + if self.h != self.h_k: + q = q.reshape(n_batch, self.g, self.h_k, -1, self.d_k) + A = torch.einsum("b g h t d, b h s d -> b h t s", q, k) + else: + A = torch.matmul(q, k.transpose(-2, -1)) + if pos_k is not None: + if self.h != self.h_k: + B = torch.einsum("b g h t d, t s d -> b h t s", q, pos_k) + else: + reshape_q = ( + q.contiguous().view(n_batch * self.h, -1, self.d_k).transpose(0, 1) + ) # (t1,nh,dk) + B = torch.matmul(reshape_q, pos_k.transpose(-2, -1)) # pos_k: (t1,dk,t2) + B = B.transpose(0, 1).view(n_batch, self.h, pos_k.size(0), pos_k.size(1)) + scores = A + B + else: + scores = A + + if relative_attention_bias is not None: + scores = scores + relative_attention_bias + + attn = masked_softmax(scores, mask) # (batch, head, time1, time2) + + self.attn = attn + + p_attn = self.dropout(attn) + x = torch.matmul(p_attn.to(v.dtype), v) # (batch, head, time1, d_k) + if pos_v is not None: + reshape_attn = ( + p_attn.contiguous() + .view(n_batch * self.h, pos_v.size(0), pos_v.size(1)) + .transpose(0, 1) + ) # (t1, bh, t2) + + attn_v = ( + torch.matmul(reshape_attn, pos_v) + .transpose(0, 1) + .contiguous() + .view(n_batch, self.h, pos_v.size(0), self.d_k) + ) + x = x + attn_v + x = ( + x.transpose(1, 2).contiguous().view(n_batch, -1, self.h_k * self.d_k) + ) # (batch, time1, d_model) + + return self.linear_out(x) # (batch, time1, d_model) + + +def unfold_tensor(xs_pad, max_seq_len): + """ + For a given tensor with shape of (N, T, D), if sequence length T is longer than max_seq_len, + this function unfold it to a (NT', max_seq_len, D) where T' is T // max_seq_len. + Args: + xs_pad: N, T, D + """ + _, _, D = xs_pad.shape + xs_pad = xs_pad.transpose(-1, -2) # convert to N, D, T + # N x D x 1 x T => N x (D x max_seq_len) x T' + xs_pad = F.unfold( + xs_pad[..., None, :], + kernel_size=(1, max_seq_len), + stride=(1, max_seq_len), + ) + + new_bsz, _, slen = xs_pad.shape + # N x D x max_seq_len x T' + xs_pad = xs_pad.view(new_bsz, -1, max_seq_len, slen) + # N x T' x max_seq_len x D + xs_pad = xs_pad.permute(0, 3, 2, 1).contiguous() + # NT' x max_seq_len x D + xs_pad = xs_pad.view(-1, max_seq_len, D) + return xs_pad + +# conformer_encoder.py +class MultiSequential(torch.nn.Sequential): + """Multi-input multi-output torch.nn.Sequential""" + + @torch.jit.ignore + def forward(self, *args): + """Forward method implementation.""" + for m in self: + args = m(*args) + return args + +def repeat(repeat_num, module_gen_fn): + """repeat module N times + + :param int repeat_num: repeat time + :param function module_gen_fn: function to generate module + :return: repeated modules + :rtype: MultiSequential + """ + return MultiSequential(*[module_gen_fn(i) for i in range(repeat_num)]) + +class ConformerEncoderLayer(nn.Module): + """ConformerEncoder Layer module. + for more details see conformer paper: + https://arxiv.org/abs/2005.08100 + This module implement the Conformer block layer. + + Args: + d_model: int + attention dim. + ext_pw_out_channel: int + if > 0, ext_pw_out_channel is a dim channel size + for the last pointwise conv after swish activation. + depthwise_seperable_out_channel: int + if set different to 0, the number of depthwise_seperable_out_channel + will be used as a channel_out of the second conv1d layer. + otherwise, it equal to 0, the second conv1d layer is skipped. + depthwise_multiplier: int + number of input_dim channels duplication. this value + will be used to compute the hidden channels of the Conv1D. + n_head: int + the number of heads for multihead attention module. + d_ffn: int + output size of the feed_forward blocks. + ext_pw_kernel_size: int + kernel size of the conv pointwise of the conformer. + kernel_size: int + kernel size. + dropout_rate: float + dropout rate. + causal: bool, optional + if set to True, convolution have no access + to future frames. default False. + batch_norm: bool, optional + if set to True, apply batchnorm before activation + in ConvModule layer of the conformer. + default False + activation: str, optional + activation function name, + one of ["relu", "swish", "sigmoid"], + sigmoid activation is only used with "glu_in_fnn=True", + default "relu". + chunk_se: int, optional + 0 for offline SE. + 1 for streaming SE, where mean is computed + by accumulated history until current chunk_se. + 2 for streaming SE, where mean is computed + by only the current chunk. + default 0. + chunk_size: int, optional + chunk_size for cnn. default 18 + conv_activation: str, optional + activation function used in ConvModule part + of the conformer, default "relu". + conv_glu_type: str, optional + activation function used for the glu inside + the ConvModule part of the conformer. + default: "sigmoid". + bias_in_glu: bool, optional + if set to True, use additive bias in the weight module + before GLU. + linear_glu_in_convm: bool, optional + if set to True, use GLULinear module, + otherwise, used GLUPointWiseConv module. + default to False. + attention_innner_dim: int, otional + if equal to -1, attention dim for linears k/q/v is + equal to d_model. otherwise attention_innner_dim is used. + default -1. + attention_glu_type: str, optional + activation function for glu used in the multihead attention, + default "swish". + activation_checkpointing: str, optional + a dictionarry of {"module","interval","offload"}, where + "module": str + accept ["transformer", "attention"] to select + which module should do activation checkpointing. + "interval": int, default 1, + interval of applying activation checkpointing, + interval = 1 means that we apply checkpointing + on every layer (if activation), otherwise, + we apply it every x interval. + "offload": bool, default False, + if set to True, we offload activation to cpu and + reload it during backward, otherwise, + we recalculate activation in backward. + default "". + export: bool, optional + if set to True, it remove the padding from convolutional layers + and allow the onnx conversion for inference. + default False. + use_pt_scaled_dot_product_attention: bool, optional + if set to True, use pytorch's scaled dot product attention implementation in training. + attn_group_sizes: int, optional + the number of groups to use for attention, default 1 (Multi-Head Attention), + 1 = typical Multi-Head Attention, + 1 < attn_group_sizes < attention_heads = Grouped-Query Attention + attn_group_sizes = attenion_heads = Multi-Query Attention + """ + + def __init__( + self, + d_model=512, + ext_pw_out_channel=0, + depthwise_seperable_out_channel=256, + depthwise_multiplier=1, + n_head=4, + d_ffn=2048, + ext_pw_kernel_size=1, + kernel_size=3, + dropout_rate=0.1, + causal=False, + batch_norm=False, + activation="relu", + chunk_se=0, + chunk_size=18, + conv_activation="relu", + conv_glu_type="sigmoid", + bias_in_glu=True, + linear_glu_in_convm=False, + attention_innner_dim=-1, + attention_glu_type="swish", + activation_checkpointing="", + export=False, + use_pt_scaled_dot_product_attention=False, + attn_group_sizes: int = 1, + ): + super().__init__() + + self.feed_forward_in = FeedForward( + d_model=d_model, + d_inner=d_ffn, + dropout_rate=dropout_rate, + activation=activation, + bias_in_glu=bias_in_glu, + ) + + self.self_attn = encoder_checkpoint_wrapper( + activation_checkpointing, + MultiHeadedAttention, + )( + MultiHeadedAttention( + n_head, + d_model, + dropout_rate, + attention_innner_dim, + attention_glu_type, + bias_in_glu, + use_pt_scaled_dot_product_attention=use_pt_scaled_dot_product_attention, + group_size=attn_group_sizes, + ) + ) + self.conv = ConvModule( + d_model, + ext_pw_out_channel, + depthwise_seperable_out_channel, + ext_pw_kernel_size, + kernel_size, + depthwise_multiplier, + dropout_rate, + causal, + batch_norm, + chunk_se, + chunk_size, + conv_activation, + conv_glu_type, + bias_in_glu, + linear_glu_in_convm, + export=export, + ) + + self.feed_forward_out = FeedForward( + d_model=d_model, + d_inner=d_ffn, + dropout_rate=dropout_rate, + activation=activation, + bias_in_glu=bias_in_glu, + ) + + self.layer_norm_att = nn.LayerNorm(d_model) + self.layer_norm = nn.LayerNorm(d_model) + + def forward( + self, + x, + pos_k, + pos_v, + mask, + relative_attention_bias: Optional[Tensor] = None, + ): + """ConformerEncoder forward. + + Args: + x: torch.Tensor + input feature of shape (batch, max_time_in, size) + pos_k: torch.Tensor + positional key embedding. + mask: torch.Tensor + mask for x (batch, max_time_in) + relative_attention_bias: Optional[torch.Tensor] + bias added to attention logits w.r.t. relative positions (1, n_head, time1, time2) + """ + x = x + 0.5 * self.feed_forward_in(x) + norm_x = self.layer_norm_att(x) + + x = x + self.self_attn( + norm_x, + norm_x, + norm_x, + pos_k, + pos_v, + mask, + relative_attention_bias=relative_attention_bias, + ) + x = x + self.conv(x) + x = x + 0.5 * self.feed_forward_out(x) + + out = self.layer_norm(x) + + return out, pos_k, pos_v, mask + +class TransformerEncoderBase(abc.ABC, nn.Module): + """The Base class for Transformer based encoders + + Please set causal = True in streaming model + Args: + input_size: int + input feature dimension. + chunk_size: int, list(int) + Number of frames for each chunk + This variable can take 2 forms: + int: Used for inference, or single chunk size training + list(int) : Used only for variable chunk size training + Some examples for the 2 cases: + chunk_size = 12 + chunk_size = [6, 8, 12, 24] + left_chunk: int, list(int) + Number of chunks used for masking in streaming mode. + This variable can take 2 forms: + int: Used for inference, or single chunk size training + list(int) : Used only for variable chunk size training. When + chunk_size is a list, left_chunk must be a list with same length. + Some examples for the 2 cases: + left_chunk = 6 + left_chunk = [12, 9, 6, 3] + attention_dim: int, optional + attention dimension. default 256. + attention_heads: int, optional + the number of heads. default 4 + input_layer: str, optional + input layer type before Conformer, + one of ["linear", "conv2d", "custom", "vgg2l", "embed"], + default "conv2d" + cnn_out: int, optional + the number of CNN channels before Conformer. + default -1. + cnn_layer_norm: bool, optional + layer norm between Conformer and the first CNN. + default False. + time_reduction: int, optional + time reduction factor + default 4 + dropout_rate: float, optional + dropout rate. default 0.1 + padding_idx: int, optional + padding index for input_layer=embed + default -1 + relative_attention_bias_args: dict, optional + use more efficient scalar bias-based relative multihead attention (Q*K^T + B) + implemented in cmb.basics.embedding.[T5/ALiBi]RelativeAttentionLogitBias + usage: relative_attention_bias_args={"type": t5/alibi} + additional method-specific arguments can be provided (see transformer_base.py) + positional_dropout_rate: float, optional + dropout rate after positional encoding. default 0.0 + nemo_conv_settings: dict, optional + A dictionary of settings for NeMo Subsampling. + default None + conv2d_extra_padding: str, optional + Add extra padding in conv2d subsampling layers. Choices are + (feat, feat_time, none, True). + if True or feat_time, the extra padding is added into non full + supraframe utts in batch. + Default: none + attention_group_size: int, optional + the number of groups to use for attention, default 1 (Multi-Head Attention), + 1 = typical Multi-Head Attention, + 1 < attention_group_size < attention_heads = Grouped-Query Attention + attention_group_size = attenion_heads = Multi-Query Attention + """ + + def __init__( + self, + input_size, + chunk_size, + left_chunk, + attention_dim=256, + attention_heads=4, + input_layer="nemo_conv", + cnn_out=-1, + cnn_layer_norm=False, + time_reduction=4, + dropout_rate=0.0, + padding_idx=-1, + relative_attention_bias_args=None, + positional_dropout_rate=0.0, + nemo_conv_settings=None, + conv2d_extra_padding: Literal["feat", "feat_time", "none", True] = "none", + attention_group_size=1, + encoder_embedding_config=None, + ): + super().__init__() + self.input_size = input_size + self.input_layer = input_layer + self.chunk_size = chunk_size + self.left_chunk = left_chunk + self.attention_dim = attention_dim + self.num_heads = attention_heads + self.attention_group_size = attention_group_size + self.time_reduction = time_reduction + self.nemo_conv_settings = nemo_conv_settings + self.encoder_embedding_config = encoder_embedding_config + + if self.input_layer == "nemo_conv": + default_nemo_conv_settings = { + "subsampling": "dw_striding", + "subsampling_factor": self.time_reduction, + "feat_in": input_size, + "feat_out": attention_dim, + "conv_channels": 256, + "subsampling_conv_chunking_factor": 1, + "activation": nn.ReLU(), + "is_causal": False, + } + # Override any of the defaults with the incoming, user settings + if nemo_conv_settings: + default_nemo_conv_settings.update(nemo_conv_settings) + for i in ["subsampling_factor", "feat_in", "feat_out"]: + assert ( + i not in nemo_conv_settings + ), "{i} should be specified outside of the NeMo dictionary" + + self.embed = NemoConvSubsampling( + **default_nemo_conv_settings, + ) + else: + raise ValueError("unknown input_layer: " + input_layer) + + self.pos_emb = AbsolutePositionalEncoding(attention_dim, positional_dropout_rate) + + self.relative_attention_bias_type = ( + relative_attention_bias_args.get("type") if relative_attention_bias_args else None + ) + if self.relative_attention_bias_type == "t5": + assert ( + self.num_heads % self.attention_group_size == 0 + ), "attention_group_size must divide n_head" + self.relative_attention_bias_layer = T5RelativeAttentionLogitBias( + self.num_heads // self.attention_group_size, + max_distance=relative_attention_bias_args.get("t5_bias_max_distance", 1000), + symmetric=relative_attention_bias_args.get("t5_bias_symmetric", False), + ) + else: + raise NotImplementedError + + + def post_init(self, init_model_config): + + pretrained_speech_encoder_path = init_model_config.get('pretrained_speech_encoder_path', None) + if pretrained_speech_encoder_path: + model_state = torch.load(pretrained_speech_encoder_path, map_location="cpu") + encoder_state_dict = {} + for k, v in model_state.items(): + if "encoder." in k: + tmp_k = k.replace("encoder.", "") + encoder_state_dict[tmp_k] = v + + if hasattr(self, "encoder_embedding"): + del self.encoder_embedding + self.load_state_dict(encoder_state_dict) + + if not hasattr(self, "encoder_embedding"): + self.encoder_embedding = MeanVarianceNormLayer(self.encoder_embedding_config["input_size"]) + + mean_file = init_model_config.get('mean_file', None) + invstd_file = init_model_config.get('invstd_file', None) + if mean_file is not None and invstd_file is not None: + self.encoder_embedding.load_mean_invstd(mean_file, invstd_file) + + def compute_lens_change(self, feature_lens): + """feature_lens: int + return updated feature lens. + + This used to return a different lambda function for each case that computed + the right thing. That does not work within Torchscript. If you really + need this to be faster, create nn.Module()-s for all the cases and return + one of them. Torchscript does support that. + """ + if self.input_layer == "nemo_conv": + # Handle the special causal case + subsampling_causal_cond = self.nemo_conv_settings.get("subsampling", "dw_striding") in [ + "dw_striding", + "striding", + "striding_conv1d", + ] + is_causal = self.nemo_conv_settings.get("is_causal", False) + if is_causal and subsampling_causal_cond: + lens_change = ( + torch.ceil(feature_lens / self.time_reduction).long() + if isinstance(feature_lens, Tensor) + else math.ceil(feature_lens / self.time_reduction) + ) + feature_lens_remainder = feature_lens % self.time_reduction + if isinstance(feature_lens, Tensor): + lens_change[feature_lens_remainder != 1] += 1 + elif feature_lens_remainder != 1: + lens_change += 1 + return lens_change + ceil_func = math.ceil if isinstance(feature_lens, int) else torch.ceil + return ceil_func(feature_lens / self.time_reduction) + + @abc.abstractmethod + def forward(self): + """Abstract forward method implementation.""" + + def _chunk_size_selection(self, chunk_size=None, left_chunk=None): + """If chunk size is a list, we will randomly select a chunk size.""" + + if chunk_size is None: + chunk_size = self.chunk_size + if left_chunk is None: + left_chunk = self.left_chunk + if isinstance(chunk_size, list): + # Variable chunk size during training + chunk_size_index = int(torch.randint(low=0, high=len(chunk_size), size=(1,))) + chunk_size_train_eff = chunk_size[chunk_size_index] + if not isinstance(left_chunk, list): + raise ValueError("Since chunk_size is a list, left_chunk must be a list") + if len(left_chunk) != len(chunk_size): + raise ValueError( + "The length of left_chunk must be the same as length of chunk_size." + ) + left_chunk_train_eff = left_chunk[chunk_size_index] + else: + chunk_size_train_eff = chunk_size + left_chunk_train_eff = left_chunk + + return chunk_size_train_eff, left_chunk_train_eff + + def _get_embed_class(self, embed): + # pylint: disable=protected-access + is_embed_using_act_chkpt = isinstance(embed, CheckpointWrapper) + is_embed_fsdp_wrapped = isinstance(embed, FullyShardedDataParallel) + embed_class = embed + if is_embed_using_act_chkpt: + embed_class = embed._checkpoint_wrapped_module + if is_embed_fsdp_wrapped: + embed_class = embed.module + return embed_class + + def _forward_embeddings_core(self, input_tensor, masks): + embed_class = self._get_embed_class(self.embed) + assert isinstance(embed_class, NemoConvSubsampling) + input_tensor, masks = self.embed(input_tensor, masks) + return input_tensor, masks + + def _position_embedding(self, input_tensor): + pos_k = None + pos_v = None + if self.relative_attention_bias_layer is None: + input_tensor = self.pos_emb(input_tensor) # default to add abs sinusoid embedding + return pos_k, pos_v + + def _streaming_mask(self, seq_len, batch_size, chunk_size, left_chunk): + chunk_size_train_eff, left_chunk_train_eff = self._chunk_size_selection( + chunk_size, left_chunk + ) + + # Create mask matrix for streaming + # S stores start index. if chunksize is 18, s is [0,18,36,....] + chunk_start_idx = np.arange(0, seq_len, chunk_size_train_eff) + # avoid randomness when run evaluation or decoding + if self.training and np.random.rand() > 0.5: + # Either first or last chunk is not complete. + # If only the last one is not complete, EOS is not effective + chunk_start_idx = seq_len - chunk_start_idx + chunk_start_idx = chunk_start_idx[::-1] + chunk_start_idx = chunk_start_idx[:-1] + chunk_start_idx = np.insert(chunk_start_idx, 0, 0) + + enc_streaming_mask = ( + adaptive_enc_mask(seq_len, chunk_start_idx, left_window=left_chunk_train_eff) + .unsqueeze(0) + .expand([batch_size, -1, -1]) + ) + return enc_streaming_mask + + def forward_embeddings(self, xs_pad, masks, chunk_size_nc=None, left_chunk_nc=None): + """Forwarding the inputs through the top embedding layers + + Args: + xs_pad: torch.Tensor + input tensor + masks: torch.Tensor + input mask + chunk_size_nc: (optional, default is None) chunk size for non-causal layers + left_chunk_nc: (optional, default is None) # of left chunks for non-causal layers + """ + # pylint: disable=R0915 + # get new lens. + seq_len = int(self.compute_lens_change(xs_pad.shape[1])) + if seq_len <= 0: + raise ValueError( + f"""The squence length after time reduction is invalid: {seq_len}. + Your input feature is too short. Consider filtering out the very + short sentence from data loader""", + ) + + batch_size = xs_pad.shape[0] + + enc_streaming_mask = self._streaming_mask( + seq_len, batch_size, self.chunk_size, self.left_chunk + ) + + if xs_pad.device != "cpu": + enc_streaming_mask = enc_streaming_mask.to(xs_pad.device) + + input_tensor = xs_pad + input_tensor, masks = self._forward_embeddings_core(input_tensor, masks) + + streaming_mask = enc_streaming_mask + if streaming_mask is not None and masks is not None: + hs_mask = masks & streaming_mask + elif masks is not None: + hs_mask = masks + else: + hs_mask = streaming_mask + + if chunk_size_nc is not None: + enc_streaming_mask_nc = self._streaming_mask( + seq_len, batch_size, chunk_size_nc, left_chunk_nc + ) + if xs_pad.device != "cpu": + enc_streaming_mask_nc = enc_streaming_mask_nc.to(xs_pad.device) + if masks is not None: + hs_mask_nc = masks & enc_streaming_mask_nc + else: + hs_mask_nc = enc_streaming_mask_nc + else: + hs_mask_nc = None + + pos_k, pos_v = self._position_embedding(input_tensor) + + if chunk_size_nc is None: + return input_tensor, pos_k, pos_v, hs_mask, masks + return input_tensor, pos_k, pos_v, hs_mask, masks, hs_mask_nc + + def get_offset(self): + """Returns offset used when retaining inputs for decoding. + + This is essentially, how many additional frames have to be added to + the front-end CNN input to ensure it can produce a single output. + So if the "padding" parameter is 0, typically offset will be > 0. + """ + return get_offset(self.input_layer, self.time_reduction) + + +def get_offset(input_layer: str, time_reduction: int): + """Get an offset. We will use the offset for determining #frames of a subsampled feature. + + Args: + input_layer (str): Type of an input layer + time_reduction (int): time reduction factor for downsampling a feature + Returns: + int: offset + """ + if input_layer in ("conv2d", "nemo_conv") and time_reduction == 4: + return 3 + if input_layer in ("conv2d",) and time_reduction == 6: + return 1 + if input_layer in ("conv2d", "nemo_conv") and time_reduction == 8: + return 7 + return 0 + + +class ConformerEncoder(TransformerEncoderBase): + """ConformerEncoder module. + see original paper for more details: + https://arxiv.org/abs/2005.08100 + + Please set causal = True in streaming model + Args: + input_size: int + input feature dimension. + chunk_size: int, list(int) + Number of frames for each chunk + This variable can take 2 forms: + int: Used for inference, or single chunk size training + list(int) : Used only for variable chunk size training + Some examples for the 2 cases: + chunk_size = 12 + chunk_size = [6, 8, 12, 24] + left_chunk: int, list(int) + Number of chunks used for masking in streaming mode. + This variable can take 2 forms: + int: Used for inference, or single chunk size training + list(int) : Used only for variable chunk size training. When + chunk_size is a list, left_chunk must be a list with same length. + Some examples for the 2 cases: + left_chunk = 6 + left_chunk = [12, 9, 6, 3] + left_chunk: int + number of chunks used for masking in streaming mode. + num_lang: int + This parameter is used to store the number of languages in the lang_dict, + only used for multiseed/multilingual models. default None. + attention_dim: int, optional + attention dimension. default 256. + attention_heads: int, optional + the number of heads. default 4 + linear_units: + the number of units of position-wise feed forward. + default 2048 + num_block: + number of Transformer layer. default 6 + dropout_rate: float, optional + dropout rate. default 0.1 + input_layer: str, optional + input layer type before Conformer, + one of ["linear", "conv2d", "custom", "vgg2l", "embed"], + default "conv2d" + causal: bool, optional + if set to True, convolution have no access + to future frames. default False. + batch_norm: bool, optional + if set to True, apply batchnorm before activation + in ConvModule layer of the conformer. + default False + cnn_out: int, optional + the number of CNN channels before Conformer. + default -1. + cnn_layer_norm: bool, optional + layer norm between Conformer and the first CNN. + default False. + ext_pw_out_channel: int, optional + the number of channel for CNN + before depthwise_seperable_CNN. + If 0 then use linear. default 0. + ext_pw_kernel_size: int, optional + kernel size of N before depthwise_seperable_CNN. + only work for ext_pw_out_channel > 0. + default 1 + depthwise_seperable_out_channel: int, optional + the number of channel for + depthwise_seperable_CNN. + default 256. + depthwise_multiplier: int, optional + the number of multiplier for + depthwise_seperable_CNN. + default 1. + chunk_se: int, optional + 0 for offline SE. + 1 for streaming SE, where mean is computed + by accumulated history until current chunk_se. + 2 for streaming SE, where mean is computed + by only the current chunk. + default 0. + kernel_size: int, optional + the number of kernels for depthwise_seperable_CNN. + default 3. + activation: str, optional + FeedForward block activation. + one of ["relu", "swish", "sigmoid"] + default "relu". + conv_activation: str, optional + activation function used in ConvModule part + of the conformer, default "relu". + conv_glu_type: str, otional + activation used use glu in depthwise_seperable_CNN, + default "sigmoid" + bias_in_glu: bool, optional + if set to True, use additive bias in the weight module + before GLU. default True + linear_glu_in_convm: bool, optional + if set to True, use GLULinear module, + otherwise, used GLUPointWiseConv module. + default to False. + attention_glu_type: str + only work for glu_in_attention !=0 + default "swish". + export: bool, optional + if set to True, it remove the padding from convolutional layers + and allow the onnx conversion for inference. + default False. + activation_checkpointing: str, optional + a dictionarry of {"module","interval","offload"}, where + "module": str + accept ["transformer", "attention"] to select + which module should do activation checkpointing. + "interval": int, default 1, + interval of applying activation checkpointing, + interval = 1 means that we apply checkpointing + on every layer (if activation), otherwise, + we apply it every x interval. + "offload": bool, default False, + if set to True, we offload activation to cpu and + reload it during backward, otherwise, + we recalculate activation in backward. + default "". + extra_layer_output_idx: int + the layer index to be exposed. + relative_attention_bias_args: dict, optional + use more efficient scalar bias-based relative multihead attention (Q*K^T + B) + implemented in cmb.basics.embedding.[T5/ALiBi]RelativeAttentionLogitBias + usage: relative_attention_bias_args={"type": t5/alibi} + additional method-specific arguments can be provided (see transformer_base.py) + time_reduction: int optional + time reduction factor + default 4 + use_pt_scaled_dot_product_attention: whether to use pytorch scaled dot product attention + in training. + Default: False + nemo_conv_settings: dict, optional + A dictionary of settings for NeMo Subsampling. + default: None + usage: nemo_conv_settings= + { + "subsampling": + dw_striding/striding/dw_striding_conv1d/striding_conv1d, + "conv_channels": int, + "subsampling_conv_chunking_factor": int, + "is_causal": True/False + } + conv2d_extra_padding: str, optional + Add extra padding in conv2d subsampling layers. Choices are + (feat, feat_time, none, True) + Default: none + replication_pad_for_subsample_embedding: For batched-streaming decoding, use + "replication" padding for the cache at start of utterance. + Default: False + attention_group_size: int, optional + the number of groups to use for attention, default 1 (Multi-Head Attention), + 1 = typical Multi-Head Attention, + 1 < attention_group_size < attention_heads = Grouped-Query Attention + attention_group_size = attenion_heads = Multi-Query Attention + """ + + extra_multi_layer_output_idxs: List[int] + + def __init__( # pylint: disable-all + self, + input_size, + chunk_size, + left_chunk, + num_lang=None, + attention_dim=256, + attention_heads=4, + linear_units=2048, + num_blocks=6, + dropout_rate=0.1, + input_layer="nemo_conv", + causal=True, + batch_norm=False, + cnn_out=-1, + cnn_layer_norm=False, + ext_pw_out_channel=0, + ext_pw_kernel_size=1, + depthwise_seperable_out_channel=256, + depthwise_multiplier=1, + chunk_se=0, + kernel_size=3, + activation="relu", + conv_activation="relu", + conv_glu_type="sigmoid", + bias_in_glu=True, + linear_glu_in_convm=False, + attention_glu_type="swish", + export=False, + extra_layer_output_idx=-1, + extra_multi_layer_output_idxs=[], + activation_checkpointing="", + relative_attention_bias_args=None, + time_reduction=4, + use_pt_scaled_dot_product_attention=False, + nemo_conv_settings=None, + conv2d_extra_padding: Literal["feat", "feat_time", "none", True] = "none", + replication_pad_for_subsample_embedding=False, + attention_group_size=1, + encoder_embedding_config=None, + ): + super().__init__( + input_size, + chunk_size, + left_chunk, + attention_dim, + attention_heads, + input_layer, + cnn_out, + cnn_layer_norm, + time_reduction, + dropout_rate=dropout_rate, + relative_attention_bias_args=relative_attention_bias_args, + positional_dropout_rate=0.0, + nemo_conv_settings=nemo_conv_settings, + conv2d_extra_padding=conv2d_extra_padding, + attention_group_size=attention_group_size, + encoder_embedding_config=encoder_embedding_config, + ) + self.num_blocks = num_blocks + self.num_lang = num_lang + self.kernel_size = kernel_size + self.embed = embedding_checkpoint_wrapper(activation_checkpointing)(self.embed) + self.replication_pad_for_subsample_embedding: bool = replication_pad_for_subsample_embedding + assert self.num_heads % attention_group_size == 0, "attention_group_size must divide n_head" + self.num_heads_k = self.num_heads // attention_group_size + + self.encoders = repeat( + num_blocks, + lambda i: encoder_checkpoint_wrapper( + activation_checkpointing, ConformerEncoderLayer, i + )( + ConformerEncoderLayer( + d_model=attention_dim, + ext_pw_out_channel=ext_pw_out_channel, + depthwise_seperable_out_channel=depthwise_seperable_out_channel, + depthwise_multiplier=depthwise_multiplier, + n_head=attention_heads, + d_ffn=linear_units, + ext_pw_kernel_size=ext_pw_kernel_size, + kernel_size=kernel_size, + dropout_rate=dropout_rate, + causal=causal, + batch_norm=batch_norm, + activation=activation, + chunk_se=chunk_se, + chunk_size=chunk_size, + conv_activation=conv_activation, + conv_glu_type=conv_glu_type, + bias_in_glu=bias_in_glu, + linear_glu_in_convm=linear_glu_in_convm, + attention_glu_type=attention_glu_type, + activation_checkpointing=attn_checkpointing(activation_checkpointing, i), + export=export, + use_pt_scaled_dot_product_attention=use_pt_scaled_dot_product_attention, + attn_group_sizes=attention_group_size, + ) + ), + ) + self.extra_layer_output_idx = extra_layer_output_idx + self.extra_multi_layer_output_idxs = extra_multi_layer_output_idxs + # Make a zeros scalar we can use in get_initial_state to determine + # the device and the needed dtype: + self.register_buffer("dev_type", torch.zeros(()), persistent=False) + + def init_relative_attention_bias(self, input_tensor): + if self.relative_attention_bias_layer: + return self.relative_attention_bias_layer(input_tensor) + + def calculate_hs_mask(self, xs_pad, device, mask): + max_audio_length = xs_pad.shape[1] + batch_size = xs_pad.shape[0] + enc_streaming_mask = self._streaming_mask( + max_audio_length, batch_size, self.chunk_size, self.left_chunk + ) + enc_streaming_mask = enc_streaming_mask.to(device) + if mask is None: + return enc_streaming_mask + + feature_lens = mask.sum(1) + padding_length = feature_lens + pad_mask = ( + torch.arange(0, max_audio_length, device=device).expand(padding_length.size(0), -1) + < padding_length.unsqueeze(1) + ) + pad_mask = pad_mask.unsqueeze(1) + pad_mask = pad_mask & enc_streaming_mask + return pad_mask + + @torch.jit.ignore + def forward(self, xs_pad, masks): + """Conformer Forward function + + Args: + xs_pad: torch.Tensor + input tensor + masks: torch.Tensor + post-embedding input lengths + """ + xs_pad = self.encoder_embedding(xs_pad) + input_tensor, pos_k, pos_v, hs_mask, masks = self.forward_embeddings(xs_pad, masks) + + unfolded = False + ori_bz, seq_len, D = input_tensor.shape + max_seq_len = 500 #maxium position for absolute positional encoding + if seq_len > max_seq_len: + # audio sequence is longer than max_seq_len, unfold it into chunks of max_seq_len + unfolded = True + # the unfold op will drop residual frames, pad it to the multiple of max_seq_len + if seq_len % max_seq_len > 0: + chunk_pad_size = max_seq_len - (seq_len % max_seq_len) + else: + chunk_pad_size = 0 + if chunk_pad_size > 0: + input_tensor_pad = F.pad(input_tensor, (0, 0, 0, chunk_pad_size), "constant", 0) + input_tensor = input_tensor_pad.to(input_tensor.device) + + input_tensor = unfold_tensor(input_tensor, max_seq_len) + if masks is not None: + # revise hs_mask here because the previous calculated hs_mask did not consider extra pad + subsampled_pad_mask = masks.squeeze(1) # [bz, subsampled_unmask_seq_len] + extra_padded_subsamlped_pad_mask = F.pad(subsampled_pad_mask, (0, chunk_pad_size), "constant", False) # extra padding to the pad mask + extra_padded_subsamlped_pad_mask = extra_padded_subsamlped_pad_mask.unsqueeze(-1).float() + masks_unfold = unfold_tensor(extra_padded_subsamlped_pad_mask, max_seq_len) # unfold the pad mask like we did to the input tensor + masks_unfold = masks_unfold.squeeze(-1).bool() # unfold op does not support bool tensor + else: + masks_unfold = None + hs_mask = self.calculate_hs_mask(input_tensor, input_tensor.device, masks_unfold) # calculate hs_mask based on the unfolded pad mask + layer_emb = None + + relative_attention_bias = self.init_relative_attention_bias(input_tensor) + + _simplified_path = ( + self.extra_layer_output_idx == -1 + and relative_attention_bias is None + ) + + if _simplified_path: + input_tensor, *_ = self.encoders(input_tensor, pos_k, pos_v, hs_mask) + else: + for i, layer in enumerate(self.encoders): + input_tensor, _, _, _ = layer( + input_tensor, + pos_k, + pos_v, + hs_mask, + relative_attention_bias=relative_attention_bias, + ) + + if i == self.extra_layer_output_idx: + layer_emb = input_tensor + if unfolded: + embed_dim = input_tensor.shape[-1] + input_tensor = input_tensor.reshape(ori_bz, -1, embed_dim) + # if we ever padded before unfolding, we need to remove the padding + if chunk_pad_size > 0: + input_tensor = input_tensor[:, :-chunk_pad_size, :] + return input_tensor, masks #, layer_emb + + def gradient_checkpointing_enable(self): + pass diff --git a/tokenizer.json b/tokenizer.json new file mode 100644 index 0000000..feafd52 --- /dev/null +++ b/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c1b9f641d4f8b7247b8d5007dd3b6a9f6a87cb5123134fe0d326f14d10c0585 +size 15524479 diff --git a/tokenizer_config.json b/tokenizer_config.json new file mode 100644 index 0000000..eb04aec --- /dev/null +++ b/tokenizer_config.json @@ -0,0 +1,125 @@ +{ + "add_prefix_space": false, + "added_tokens_decoder": { + "200010": { + "content": "<|endoftext10|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200011": { + "content": "<|endoftext11|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "199999": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200018": { + "content": "<|endofprompt|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200019": { + "content": "<|assistant|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200020": { + "content": "<|end|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200021": { + "content": "<|user|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200022": { + "content": "<|system|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200023": { + "content": "<|tool|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200024": { + "content": "<|/tool|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200025": { + "content": "<|tool_call|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200026": { + "content": "<|/tool_call|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200027": { + "content": "<|tool_response|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200028": { + "content": "<|tag|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + } + }, + "bos_token": "<|endoftext|>", + "chat_template": "{% for message in messages %}{% if message['role'] == 'system' and 'tools' in message and message['tools'] is not none %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|tool|>' + message['tools'] + '<|/tool|>' + '<|end|>' }}{% else %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|end|>' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>' }}{% else %}{{ eos_token }}{% endif %}", + "clean_up_tokenization_spaces": false, + "eos_token": "<|endoftext|>", + "model_max_length": 131072, + "pad_token": "<|endoftext|>", + "tokenizer_class": "GPT2TokenizerFast", + "unk_token": "<|endoftext|>" +} diff --git a/vision-lora/adapter_config.json b/vision-lora/adapter_config.json new file mode 100644 index 0000000..72c07d6 --- /dev/null +++ b/vision-lora/adapter_config.json @@ -0,0 +1,23 @@ +{ + "auto_mapping": null, + "base_model_name_or_path": "TBA", + "bias": "none", + "fan_in_fan_out": false, + "inference_mode": true, + "init_lora_weights": true, + "layers_pattern": null, + "layers_to_transform": null, + "lora_alpha": 512, + "lora_dropout": 0.0, + "modules_to_save": [], + "peft_type": "LORA", + "r": 256, + "revision": null, + "target_modules": [ + "qkv_proj", + "o_proj", + "gate_up_proj", + "down_proj" + ], + "task_type": "CAUSAL_LM" +} \ No newline at end of file diff --git a/vision-lora/adapter_model.safetensors b/vision-lora/adapter_model.safetensors new file mode 100644 index 0000000..8b980e7 --- /dev/null +++ b/vision-lora/adapter_model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1620b16722edf701038bf66e3cd46412c7cc5458e58df89e9f92cedb71fcbde8 +size 738232904 diff --git a/vision-lora/added_tokens.json b/vision-lora/added_tokens.json new file mode 100644 index 0000000..af52cde --- /dev/null +++ b/vision-lora/added_tokens.json @@ -0,0 +1,12 @@ +{ + "<|/tool_call|>": 200026, + "<|/tool|>": 200024, + "<|assistant|>": 200019, + "<|end|>": 200020, + "<|system|>": 200022, + "<|tag|>": 200028, + "<|tool_call|>": 200025, + "<|tool_response|>": 200027, + "<|tool|>": 200023, + "<|user|>": 200021 +} diff --git a/vision-lora/special_tokens_map.json b/vision-lora/special_tokens_map.json new file mode 100644 index 0000000..330140f --- /dev/null +++ b/vision-lora/special_tokens_map.json @@ -0,0 +1,24 @@ +{ + "bos_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "eos_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "pad_token": "<|endoftext|>", + "unk_token": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + } +} diff --git a/vision-lora/tokenizer.json b/vision-lora/tokenizer.json new file mode 100644 index 0000000..3a12dac --- /dev/null +++ b/vision-lora/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382cc235b56c725945e149cc25f191da667c836655efd0857b004320e90e91ea +size 15524095 diff --git a/vision-lora/tokenizer_config.json b/vision-lora/tokenizer_config.json new file mode 100644 index 0000000..5212793 --- /dev/null +++ b/vision-lora/tokenizer_config.json @@ -0,0 +1,125 @@ +{ + "add_prefix_space": false, + "added_tokens_decoder": { + "200010": { + "content": "<|endoftext10|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200011": { + "content": "<|endoftext11|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "199999": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200018": { + "content": "<|endofprompt|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "200019": { + "content": "<|assistant|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200020": { + "content": "<|end|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200021": { + "content": "<|user|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200022": { + "content": "<|system|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + }, + "200023": { + "content": "<|tool|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200024": { + "content": "<|/tool|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200025": { + "content": "<|tool_call|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200026": { + "content": "<|/tool_call|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200027": { + "content": "<|tool_response|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": false + }, + "200028": { + "content": "<|tag|>", + "lstrip": false, + "normalized": false, + "rstrip": true, + "single_word": false, + "special": true + } + }, + "bos_token": "<|endoftext|>", + "chat_template": "{% for message in messages %}{% if message['role'] == 'system' and 'tools' in message and message['tools'] is not none %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|tool|>' + message['tools'] + '<|/tool|>' + '<|end|>' }}{% else %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|end|>' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>' }}{% else %}{{ eos_token }}{% endif %}", + "clean_up_tokenization_spaces": false, + "eos_token": "<|endoftext|>", + "model_max_length": 128000, + "pad_token": "<|endoftext|>", + "tokenizer_class": "GPT2TokenizerFast", + "unk_token": "<|endoftext|>" +} diff --git a/vision-lora/vocab.json b/vision-lora/vocab.json new file mode 100644 index 0000000..2460dac --- /dev/null +++ b/vision-lora/vocab.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cb65a857824fa6615bb1782d95d882617a8bbce1da0317118586b36f39e98bd +size 3910310 diff --git a/vision_siglip_navit.py b/vision_siglip_navit.py new file mode 100644 index 0000000..e3da680 --- /dev/null +++ b/vision_siglip_navit.py @@ -0,0 +1,1717 @@ +# coding=utf-8 +# Copyright 2024 The HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" Siglip model configuration""" + +import os +from typing import Union + +from transformers.configuration_utils import PretrainedConfig +from transformers.utils import logging + + +logger = logging.get_logger(__name__) + +SIGLIP_PRETRAINED_CONFIG_ARCHIVE_MAP = { + "google/siglip-base-patch16-224": "https://huggingface.co/google/siglip-base-patch16-224/resolve/main/config.json", +} + + +class SiglipTextConfig(PretrainedConfig): + r""" + This is the configuration class to store the configuration of a [`SiglipTextModel`]. It is used to instantiate a + Siglip text encoder according to the specified arguments, defining the model architecture. Instantiating a + configuration with the defaults will yield a similar configuration to that of the text encoder of the Siglip + [google/siglip-base-patch16-224](https://huggingface.co/google/siglip-base-patch16-224) architecture. + Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the + documentation from [`PretrainedConfig`] for more information. + Args: + vocab_size (`int`, *optional*, defaults to 32000): + Vocabulary size of the Siglip text model. Defines the number of different tokens that can be represented by + the `inputs_ids` passed when calling [`SiglipModel`]. + hidden_size (`int`, *optional*, defaults to 768): + Dimensionality of the encoder layers and the pooler layer. + intermediate_size (`int`, *optional*, defaults to 3072): + Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder. + num_hidden_layers (`int`, *optional*, defaults to 12): + Number of hidden layers in the Transformer encoder. + num_attention_heads (`int`, *optional*, defaults to 12): + Number of attention heads for each attention layer in the Transformer encoder. + max_position_embeddings (`int`, *optional*, defaults to 64): + The maximum sequence length that this model might ever be used with. Typically set this to something large + just in case (e.g., 512 or 1024 or 2048). + hidden_act (`str` or `function`, *optional*, defaults to `"gelu_pytorch_tanh"`): + The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`, + `"relu"`, `"selu"` and `"gelu_new"` `"quick_gelu"` are supported. + layer_norm_eps (`float`, *optional*, defaults to 1e-06): + The epsilon used by the layer normalization layers. + attention_dropout (`float`, *optional*, defaults to 0.0): + The dropout ratio for the attention probabilities. + pad_token_id (`int`, *optional*, defaults to 1): + The id of the padding token in the vocabulary. + bos_token_id (`int`, *optional*, defaults to 49406): + The id of the beginning-of-sequence token in the vocabulary. + eos_token_id (`int`, *optional*, defaults to 49407): + The id of the end-of-sequence token in the vocabulary. + Example: + ```python + >>> from transformers import SiglipTextConfig, SiglipTextModel + >>> # Initializing a SiglipTextConfig with google/siglip-base-patch16-224 style configuration + >>> configuration = SiglipTextConfig() + >>> # Initializing a SiglipTextModel (with random weights) from the google/siglip-base-patch16-224 style configuration + >>> model = SiglipTextModel(configuration) + >>> # Accessing the model configuration + >>> configuration = model.config + ```""" + + model_type = "siglip_text_model" + + def __init__( + self, + vocab_size=32000, + hidden_size=768, + intermediate_size=3072, + num_hidden_layers=12, + num_attention_heads=12, + max_position_embeddings=64, + hidden_act="gelu_pytorch_tanh", + layer_norm_eps=1e-6, + attention_dropout=0.0, + # This differs from `CLIPTokenizer`'s default and from openai/siglip + # See https://github.com/huggingface/transformers/pull/24773#issuecomment-1632287538 + pad_token_id=1, + bos_token_id=49406, + eos_token_id=49407, + _flash_attn_2_enabled=True, + **kwargs, + ): + super().__init__(pad_token_id=pad_token_id, bos_token_id=bos_token_id, eos_token_id=eos_token_id, **kwargs) + + self.vocab_size = vocab_size + self.hidden_size = hidden_size + self.intermediate_size = intermediate_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.max_position_embeddings = max_position_embeddings + self.layer_norm_eps = layer_norm_eps + self.hidden_act = hidden_act + self.attention_dropout = attention_dropout + self._flash_attn_2_enabled = _flash_attn_2_enabled + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> "PretrainedConfig": + cls._set_token_in_kwargs(kwargs) + + config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs) + + # get the text config dict if we are loading from SiglipConfig + if config_dict.get("model_type") == "siglip": + config_dict = config_dict["text_config"] + + if "model_type" in config_dict and hasattr(cls, "model_type") and config_dict["model_type"] != cls.model_type: + logger.warning( + f"You are using a model of type {config_dict['model_type']} to instantiate a model of type " + f"{cls.model_type}. This is not supported for all configurations of models and can yield errors." + ) + + return cls.from_dict(config_dict, **kwargs) + + +class SiglipVisionConfig(PretrainedConfig): + r""" + This is the configuration class to store the configuration of a [`SiglipVisionModel`]. It is used to instantiate a + Siglip vision encoder according to the specified arguments, defining the model architecture. Instantiating a + configuration with the defaults will yield a similar configuration to that of the vision encoder of the Siglip + [google/siglip-base-patch16-224](https://huggingface.co/google/siglip-base-patch16-224) architecture. + Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the + documentation from [`PretrainedConfig`] for more information. + Args: + hidden_size (`int`, *optional*, defaults to 768): + Dimensionality of the encoder layers and the pooler layer. + intermediate_size (`int`, *optional*, defaults to 3072): + Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder. + num_hidden_layers (`int`, *optional*, defaults to 12): + Number of hidden layers in the Transformer encoder. + num_attention_heads (`int`, *optional*, defaults to 12): + Number of attention heads for each attention layer in the Transformer encoder. + num_channels (`int`, *optional*, defaults to 3): + Number of channels in the input images. + image_size (`int`, *optional*, defaults to 224): + The size (resolution) of each image. + patch_size (`int`, *optional*, defaults to 16): + The size (resolution) of each patch. + hidden_act (`str` or `function`, *optional*, defaults to `"gelu_pytorch_tanh"`): + The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`, + `"relu"`, `"selu"` and `"gelu_new"` ``"quick_gelu"` are supported. + layer_norm_eps (`float`, *optional*, defaults to 1e-06): + The epsilon used by the layer normalization layers. + attention_dropout (`float`, *optional*, defaults to 0.0): + The dropout ratio for the attention probabilities. + Example: + ```python + >>> from transformers import SiglipVisionConfig, SiglipVisionModel + >>> # Initializing a SiglipVisionConfig with google/siglip-base-patch16-224 style configuration + >>> configuration = SiglipVisionConfig() + >>> # Initializing a SiglipVisionModel (with random weights) from the google/siglip-base-patch16-224 style configuration + >>> model = SiglipVisionModel(configuration) + >>> # Accessing the model configuration + >>> configuration = model.config + ```""" + + model_type = "siglip_vision_model" + + def __init__( + self, + hidden_size=768, + intermediate_size=3072, + num_hidden_layers=12, + num_attention_heads=12, + num_channels=3, + image_size=224, + patch_size=16, + hidden_act="gelu_pytorch_tanh", + layer_norm_eps=1e-6, + attention_dropout=0.0, + _flash_attn_2_enabled=True, + **kwargs, + ): + super().__init__(**kwargs) + + self.hidden_size = hidden_size + self.intermediate_size = intermediate_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.num_channels = num_channels + self.patch_size = patch_size + self.image_size = image_size + self.attention_dropout = attention_dropout + self.layer_norm_eps = layer_norm_eps + self.hidden_act = hidden_act + self._flash_attn_2_enabled = _flash_attn_2_enabled + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> "PretrainedConfig": + cls._set_token_in_kwargs(kwargs) + + config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs) + + # get the vision config dict if we are loading from SiglipConfig + if config_dict.get("model_type") == "siglip": + config_dict = config_dict["vision_config"] + + if "model_type" in config_dict and hasattr(cls, "model_type") and config_dict["model_type"] != cls.model_type: + logger.warning( + f"You are using a model of type {config_dict['model_type']} to instantiate a model of type " + f"{cls.model_type}. This is not supported for all configurations of models and can yield errors." + ) + + return cls.from_dict(config_dict, **kwargs) + + +class SiglipConfig(PretrainedConfig): + r""" + [`SiglipConfig`] is the configuration class to store the configuration of a [`SiglipModel`]. It is used to + instantiate a Siglip model according to the specified arguments, defining the text model and vision model configs. + Instantiating a configuration with the defaults will yield a similar configuration to that of the Siglip + [google/siglip-base-patch16-224](https://huggingface.co/google/siglip-base-patch16-224) architecture. + Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the + documentation from [`PretrainedConfig`] for more information. + Args: + text_config (`dict`, *optional*): + Dictionary of configuration options used to initialize [`SiglipTextConfig`]. + vision_config (`dict`, *optional*): + Dictionary of configuration options used to initialize [`SiglipVisionConfig`]. + kwargs (*optional*): + Dictionary of keyword arguments. + Example: + ```python + >>> from transformers import SiglipConfig, SiglipModel + >>> # Initializing a SiglipConfig with google/siglip-base-patch16-224 style configuration + >>> configuration = SiglipConfig() + >>> # Initializing a SiglipModel (with random weights) from the google/siglip-base-patch16-224 style configuration + >>> model = SiglipModel(configuration) + >>> # Accessing the model configuration + >>> configuration = model.config + >>> # We can also initialize a SiglipConfig from a SiglipTextConfig and a SiglipVisionConfig + >>> from transformers import SiglipTextConfig, SiglipVisionConfig + >>> # Initializing a SiglipText and SiglipVision configuration + >>> config_text = SiglipTextConfig() + >>> config_vision = SiglipVisionConfig() + >>> config = SiglipConfig.from_text_vision_configs(config_text, config_vision) + ```""" + + model_type = "siglip" + + def __init__(self, text_config=None, vision_config=None, **kwargs): + super().__init__(**kwargs) + + if text_config is None: + text_config = {} + logger.info("`text_config` is `None`. Initializing the `SiglipTextConfig` with default values.") + + if vision_config is None: + vision_config = {} + logger.info("`vision_config` is `None`. initializing the `SiglipVisionConfig` with default values.") + + self.text_config = SiglipTextConfig(**text_config) + self.vision_config = SiglipVisionConfig(**vision_config) + + self.initializer_factor = 1.0 + + @classmethod + def from_text_vision_configs(cls, text_config: SiglipTextConfig, vision_config: SiglipVisionConfig, **kwargs): + r""" + Instantiate a [`SiglipConfig`] (or a derived class) from siglip text model configuration and siglip vision + model configuration. + Returns: + [`SiglipConfig`]: An instance of a configuration object + """ + + return cls(text_config=text_config.to_dict(), vision_config=vision_config.to_dict(), **kwargs) + +# coding=utf-8 +# Copyright 2024 Google AI and The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" PyTorch Siglip model.""" + + +import math +import warnings +from dataclasses import dataclass +from typing import Any, Optional, Tuple, Union + +import numpy as np +import torch +import torch.nn.functional as F +import torch.utils.checkpoint +from torch import nn +from torch.nn.init import _calculate_fan_in_and_fan_out + +from transformers.activations import ACT2FN +from transformers.modeling_attn_mask_utils import _prepare_4d_attention_mask +from transformers.modeling_outputs import BaseModelOutput, BaseModelOutputWithPooling +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + add_start_docstrings, + add_start_docstrings_to_model_forward, + is_flash_attn_2_available, + logging, + replace_return_docstrings, +) + +logger = logging.get_logger(__name__) + +_CHECKPOINT_FOR_DOC = "google/siglip-base-patch16-224" + +SIGLIP_PRETRAINED_MODEL_ARCHIVE_LIST = [ + "google/siglip-base-patch16-224", + # See all SigLIP models at https://huggingface.co/models?filter=siglip +] + +if is_flash_attn_2_available(): + from flash_attn import flash_attn_func, flash_attn_varlen_func + from flash_attn.bert_padding import index_first_axis, pad_input, unpad_input # noqa + + +# Copied from transformers.models.llama.modeling_llama._get_unpad_data +def _get_unpad_data(attention_mask): + seqlens_in_batch = attention_mask.sum(dim=-1, dtype=torch.int32) + indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten() + max_seqlen_in_batch = seqlens_in_batch.max().item() + cu_seqlens = F.pad(torch.cumsum(seqlens_in_batch, dim=0, dtype=torch.torch.int32), (1, 0)) + return ( + indices, + cu_seqlens, + max_seqlen_in_batch, + ) + + +def _trunc_normal_(tensor, mean, std, a, b): + # Cut & paste from PyTorch official master until it's in a few official releases - RW + # Method based on https://people.sc.fsu.edu/~jburkardt/presentations/truncated_normal.pdf + def norm_cdf(x): + # Computes standard normal cumulative distribution function + return (1.0 + math.erf(x / math.sqrt(2.0))) / 2.0 + + if (mean < a - 2 * std) or (mean > b + 2 * std): + warnings.warn( + "mean is more than 2 std from [a, b] in nn.init.trunc_normal_. " + "The distribution of values may be incorrect.", + stacklevel=2, + ) + + # Values are generated by using a truncated uniform distribution and + # then using the inverse CDF for the normal distribution. + # Get upper and lower cdf values + l = norm_cdf((a - mean) / std) + u = norm_cdf((b - mean) / std) + + # Uniformly fill tensor with values from [l, u], then translate to + # [2l-1, 2u-1]. + tensor.uniform_(2 * l - 1, 2 * u - 1) + + # Use inverse cdf transform for normal distribution to get truncated + # standard normal + if tensor.dtype in [torch.float16, torch.bfloat16]: + # The `erfinv_` op is not (yet?) defined in float16+cpu, bfloat16+gpu + og_dtype = tensor.dtype + tensor = tensor.to(torch.float32) + tensor.erfinv_() + tensor = tensor.to(og_dtype) + else: + tensor.erfinv_() + + # Transform to proper mean, std + tensor.mul_(std * math.sqrt(2.0)) + tensor.add_(mean) + + # Clamp to ensure it's in the proper range + if tensor.dtype == torch.float16: + # The `clamp_` op is not (yet?) defined in float16+cpu + tensor = tensor.to(torch.float32) + tensor.clamp_(min=a, max=b) + tensor = tensor.to(torch.float16) + else: + tensor.clamp_(min=a, max=b) + + +def trunc_normal_tf_( + tensor: torch.Tensor, mean: float = 0.0, std: float = 1.0, a: float = -2.0, b: float = 2.0 +) -> torch.Tensor: + """Fills the input Tensor with values drawn from a truncated + normal distribution. The values are effectively drawn from the + normal distribution :math:`\\mathcal{N}(\text{mean}, \text{std}^2)` + with values outside :math:`[a, b]` redrawn until they are within + the bounds. The method used for generating the random values works + best when :math:`a \\leq \text{mean} \\leq b`. + NOTE: this 'tf' variant behaves closer to Tensorflow / JAX impl where the + bounds [a, b] are applied when sampling the normal distribution with mean=0, std=1.0 + and the result is subsquently scaled and shifted by the mean and std args. + Args: + tensor: an n-dimensional `torch.Tensor` + mean: the mean of the normal distribution + std: the standard deviation of the normal distribution + a: the minimum cutoff value + b: the maximum cutoff value + """ + with torch.no_grad(): + _trunc_normal_(tensor, 0, 1.0, a, b) + tensor.mul_(std).add_(mean) + + +def variance_scaling_(tensor, scale=1.0, mode="fan_in", distribution="normal"): + fan_in, fan_out = _calculate_fan_in_and_fan_out(tensor) + if mode == "fan_in": + denom = fan_in + elif mode == "fan_out": + denom = fan_out + elif mode == "fan_avg": + denom = (fan_in + fan_out) / 2 + + variance = scale / denom + + if distribution == "truncated_normal": + # constant is stddev of standard normal truncated to (-2, 2) + trunc_normal_tf_(tensor, std=math.sqrt(variance) / 0.87962566103423978) + elif distribution == "normal": + with torch.no_grad(): + tensor.normal_(std=math.sqrt(variance)) + elif distribution == "uniform": + bound = math.sqrt(3 * variance) + with torch.no_grad(): + tensor.uniform_(-bound, bound) + else: + raise ValueError(f"invalid distribution {distribution}") + + +def lecun_normal_(tensor): + variance_scaling_(tensor, mode="fan_in", distribution="truncated_normal") + + +def default_flax_embed_init(tensor): + variance_scaling_(tensor, mode="fan_in", distribution="normal") + + +@dataclass +# Copied from transformers.models.clip.modeling_clip.CLIPVisionModelOutput with CLIP->Siglip +class SiglipVisionModelOutput(ModelOutput): + """ + Base class for vision model's outputs that also contains image embeddings of the pooling of the last hidden states. + Args: + image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`): + The image embeddings obtained by applying the projection layer to the pooler_output. + last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`): + Sequence of hidden-states at the output of the last layer of the model. + hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`): + Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, + + one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`. + Hidden-states of the model at the output of each layer plus the optional initial embedding outputs. + attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`): + Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length, + sequence_length)`. + Attentions weights after the attention softmax, used to compute the weighted average in the self-attention + heads. + """ + + image_embeds: Optional[torch.FloatTensor] = None + last_hidden_state: torch.FloatTensor = None + hidden_states: Optional[Tuple[torch.FloatTensor]] = None + attentions: Optional[Tuple[torch.FloatTensor]] = None + + +@dataclass +# Copied from transformers.models.clip.modeling_clip.CLIPTextModelOutput with CLIP->Siglip +class SiglipTextModelOutput(ModelOutput): + """ + Base class for text model's outputs that also contains a pooling of the last hidden states. + Args: + text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`): + The text embeddings obtained by applying the projection layer to the pooler_output. + last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`): + Sequence of hidden-states at the output of the last layer of the model. + hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`): + Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, + + one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`. + Hidden-states of the model at the output of each layer plus the optional initial embedding outputs. + attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`): + Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length, + sequence_length)`. + Attentions weights after the attention softmax, used to compute the weighted average in the self-attention + heads. + """ + + text_embeds: Optional[torch.FloatTensor] = None + last_hidden_state: torch.FloatTensor = None + hidden_states: Optional[Tuple[torch.FloatTensor]] = None + attentions: Optional[Tuple[torch.FloatTensor]] = None + + +@dataclass +# Copied from transformers.models.clip.modeling_clip.CLIPOutput with CLIP->Siglip +class SiglipOutput(ModelOutput): + """ + Args: + loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`): + Contrastive loss for image-text similarity. + logits_per_image:(`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`): + The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text + similarity scores. + logits_per_text:(`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`): + The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image + similarity scores. + text_embeds(`torch.FloatTensor` of shape `(batch_size, output_dim`): + The text embeddings obtained by applying the projection layer to the pooled output of [`SiglipTextModel`]. + image_embeds(`torch.FloatTensor` of shape `(batch_size, output_dim`): + The image embeddings obtained by applying the projection layer to the pooled output of [`SiglipVisionModel`]. + text_model_output(`BaseModelOutputWithPooling`): + The output of the [`SiglipTextModel`]. + vision_model_output(`BaseModelOutputWithPooling`): + The output of the [`SiglipVisionModel`]. + """ + + loss: Optional[torch.FloatTensor] = None + logits_per_image: torch.FloatTensor = None + logits_per_text: torch.FloatTensor = None + text_embeds: torch.FloatTensor = None + image_embeds: torch.FloatTensor = None + text_model_output: BaseModelOutputWithPooling = None + vision_model_output: BaseModelOutputWithPooling = None + + def to_tuple(self) -> Tuple[Any]: + return tuple( + self[k] if k not in ["text_model_output", "vision_model_output"] else getattr(self, k).to_tuple() + for k in self.keys() + ) + + +class SiglipVisionEmbeddings(nn.Module): + def __init__(self, config: SiglipVisionConfig): + super().__init__() + self.config = config + self.embed_dim = config.hidden_size + self.image_size = config.image_size + self.patch_size = config.patch_size + + self.patch_embedding = nn.Conv2d( + in_channels=config.num_channels, + out_channels=self.embed_dim, + kernel_size=self.patch_size, + stride=self.patch_size, + padding="valid", + ) + + self.num_patches_per_side = self.image_size // self.patch_size + self.num_patches = self.num_patches_per_side**2 + self.num_positions = self.num_patches + self.position_embedding = nn.Embedding(self.num_positions, self.embed_dim) + + def forward(self, pixel_values: torch.FloatTensor, patch_attention_mask: torch.BoolTensor) -> torch.Tensor: + batch_size = pixel_values.size(0) + + patch_embeds = self.patch_embedding(pixel_values) + embeddings = patch_embeds.flatten(2).transpose(1, 2) + + max_im_h, max_im_w = pixel_values.size(2), pixel_values.size(3) + max_nb_patches_h, max_nb_patches_w = max_im_h // self.patch_size, max_im_w // self.patch_size + boundaries = torch.arange(1 / self.num_patches_per_side, 1.0, 1 / self.num_patches_per_side) + position_ids = torch.full( + size=( + batch_size, + max_nb_patches_h * max_nb_patches_w, + ), + fill_value=0, + ) + + for batch_idx, p_attn_mask in enumerate(patch_attention_mask): + nb_patches_h = p_attn_mask[:, 0].sum() + nb_patches_w = p_attn_mask[0].sum() + + fractional_coords_h = torch.arange(0, 1 - 1e-6, 1 / nb_patches_h) + fractional_coords_w = torch.arange(0, 1 - 1e-6, 1 / nb_patches_w) + + bucket_coords_h = torch.bucketize(fractional_coords_h, boundaries, right=True) + bucket_coords_w = torch.bucketize(fractional_coords_w, boundaries, right=True) + + pos_ids = (bucket_coords_h[:, None] * self.num_patches_per_side + bucket_coords_w).flatten() + position_ids[batch_idx][p_attn_mask.view(-1).cpu()] = pos_ids + + position_ids = position_ids.to(self.position_embedding.weight.device) + + embeddings = embeddings + self.position_embedding(position_ids) + return embeddings + + +# Copied from transformers.models.clip.modeling_clip.CLIPTextEmbeddings with CLIP->Siglip +class SiglipTextEmbeddings(nn.Module): + def __init__(self, config: SiglipTextConfig): + super().__init__() + embed_dim = config.hidden_size + + self.token_embedding = nn.Embedding(config.vocab_size, embed_dim) + self.position_embedding = nn.Embedding(config.max_position_embeddings, embed_dim) + + # position_ids (1, len position emb) is contiguous in memory and exported when serialized + self.register_buffer( + "position_ids", torch.arange(config.max_position_embeddings).expand((1, -1)), persistent=False + ) + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + ) -> torch.Tensor: + seq_length = input_ids.shape[-1] if input_ids is not None else inputs_embeds.shape[-2] + + if position_ids is None: + position_ids = self.position_ids[:, :seq_length] + + if inputs_embeds is None: + inputs_embeds = self.token_embedding(input_ids) + + position_embeddings = self.position_embedding(position_ids) + embeddings = inputs_embeds + position_embeddings + + return embeddings + + +class SiglipAttention(nn.Module): + """Multi-headed attention from 'Attention Is All You Need' paper""" + + # Copied from transformers.models.clip.modeling_clip.CLIPAttention.__init__ + def __init__(self, config): + super().__init__() + self.config = config + self.embed_dim = config.hidden_size + self.num_heads = config.num_attention_heads + self.head_dim = self.embed_dim // self.num_heads + if self.head_dim * self.num_heads != self.embed_dim: + raise ValueError( + f"embed_dim must be divisible by num_heads (got `embed_dim`: {self.embed_dim} and `num_heads`:" + f" {self.num_heads})." + ) + self.scale = self.head_dim**-0.5 + self.dropout = config.attention_dropout + + self.k_proj = nn.Linear(self.embed_dim, self.embed_dim) + self.v_proj = nn.Linear(self.embed_dim, self.embed_dim) + self.q_proj = nn.Linear(self.embed_dim, self.embed_dim) + self.out_proj = nn.Linear(self.embed_dim, self.embed_dim) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + output_attentions: Optional[bool] = False, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + """Input shape: Batch x Time x Channel""" + + batch_size, q_len, _ = hidden_states.size() + + query_states = self.q_proj(hidden_states) + key_states = self.k_proj(hidden_states) + value_states = self.v_proj(hidden_states) + + query_states = query_states.view(batch_size, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = key_states.view(batch_size, q_len, self.num_heads, self.head_dim).transpose(1, 2) + value_states = value_states.view(batch_size, q_len, self.num_heads, self.head_dim).transpose(1, 2) + + k_v_seq_len = key_states.shape[-2] + attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) * self.scale + + if attn_weights.size() != (batch_size, self.num_heads, q_len, k_v_seq_len): + raise ValueError( + f"Attention weights should be of size {(batch_size, self.num_heads, q_len, k_v_seq_len)}, but is" + f" {attn_weights.size()}" + ) + + if attention_mask is not None: + if attention_mask.size() != (batch_size, 1, q_len, k_v_seq_len): + raise ValueError( + f"Attention mask should be of size {(batch_size, 1, q_len, k_v_seq_len)}, but is {attention_mask.size()}" + ) + attn_weights = attn_weights + attention_mask + + # upcast attention to fp32 + attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(query_states.dtype) + attn_weights = nn.functional.dropout(attn_weights, p=self.dropout, training=self.training) + attn_output = torch.matmul(attn_weights, value_states) + + if attn_output.size() != (batch_size, self.num_heads, q_len, self.head_dim): + raise ValueError( + f"`attn_output` should be of size {(batch_size, self.num_heads, q_len, self.head_dim)}, but is" + f" {attn_output.size()}" + ) + + attn_output = attn_output.transpose(1, 2).contiguous() + attn_output = attn_output.reshape(batch_size, q_len, self.embed_dim) + + attn_output = self.out_proj(attn_output) + + return attn_output, attn_weights + + +class SiglipFlashAttention2(SiglipAttention): + """ + Llama flash attention module. This module inherits from `LlamaAttention` as the weights of the module stays + untouched. The only required change would be on the forward pass where it needs to correctly call the public API of + flash attention and deal with padding tokens in case the input contains any of them. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.is_causal = False # Hack to make sure we don't use a causal mask + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.LongTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Tuple[torch.Tensor]] = None, + output_attentions: bool = False, + use_cache: bool = False, + **kwargs, + ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + output_attentions = False + + bsz, q_len, _ = hidden_states.size() + + query_states = self.q_proj(hidden_states) + key_states = self.k_proj(hidden_states) + value_states = self.v_proj(hidden_states) + + # Flash attention requires the input to have the shape + # batch_size x seq_length x head_dim x hidden_dim + # therefore we just need to keep the original shape + query_states = query_states.view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = key_states.view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + value_states = value_states.view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx) + # cos, sin = self.rotary_emb(value_states, seq_len=kv_seq_len) + # query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids) + + # if past_key_value is not None: + # cache_kwargs = {"sin": sin, "cos": cos} # Specific to RoPE models + # key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs) + + # TODO: These transpose are quite inefficient but Flash Attention requires the layout [batch_size, sequence_length, num_heads, head_dim]. We would need to refactor the KV cache + # to be able to avoid many of these transpose/reshape/view. + query_states = query_states.transpose(1, 2) + key_states = key_states.transpose(1, 2) + value_states = value_states.transpose(1, 2) + + dropout_rate = self.dropout if self.training else 0.0 + + # In PEFT, usually we cast the layer norms in float32 for training stability reasons + # therefore the input hidden states gets silently casted in float32. Hence, we need + # cast them back in the correct dtype just to be sure everything works as expected. + # This might slowdown training & inference so it is recommended to not cast the LayerNorms + # in fp32. (LlamaRMSNorm handles it correctly) + + input_dtype = query_states.dtype + if input_dtype == torch.float32: + if torch.is_autocast_enabled(): + target_dtype = torch.get_autocast_gpu_dtype() + # Handle the case where the model is quantized + elif hasattr(self.config, "_pre_quantization_dtype"): + target_dtype = self.config._pre_quantization_dtype + else: + target_dtype = self.q_proj.weight.dtype + + logger.warning_once( + "The input hidden states seems to be silently casted in float32, this might be related to the fact" + " you have upcasted embedding or layer norm layers in float32. We will cast back the input in" + f" {target_dtype}." + ) + + query_states = query_states.to(target_dtype) + key_states = key_states.to(target_dtype) + value_states = value_states.to(target_dtype) + + attn_output = self._flash_attention_forward( + query_states, key_states, value_states, attention_mask, q_len, dropout=dropout_rate + ) + + attn_output = attn_output.reshape(bsz, q_len, self.embed_dim).contiguous() + attn_output = self.out_proj(attn_output) + + if not output_attentions: + attn_weights = None + + return attn_output, attn_weights + + def _flash_attention_forward( + self, query_states, key_states, value_states, attention_mask, query_length, dropout=0.0, softmax_scale=None + ): + """ + Calls the forward method of Flash Attention - if the input hidden states contain at least one padding token + first unpad the input, then computes the attention scores and pad the final attention scores. + Args: + query_states (`torch.Tensor`): + Input query states to be passed to Flash Attention API + key_states (`torch.Tensor`): + Input key states to be passed to Flash Attention API + value_states (`torch.Tensor`): + Input value states to be passed to Flash Attention API + attention_mask (`torch.Tensor`): + The padding mask - corresponds to a tensor of size `(batch_size, seq_len)` where 0 stands for the + position of padding tokens and 1 for the position of non-padding tokens. + dropout (`int`, *optional*): + Attention dropout + softmax_scale (`float`, *optional*): + The scaling of QK^T before applying softmax. Default to 1 / sqrt(head_dim) + """ + + # TODO: Remove the `query_length != 1` check once Flash Attention for RoCm is bumped to 2.1. For details, please see the comment in LlamaFlashAttention2 __init__. + causal = self.is_causal and query_length != 1 + + # Contains at least one padding token in the sequence + if attention_mask is not None: + batch_size = query_states.shape[0] + query_states, key_states, value_states, indices_q, cu_seq_lens, max_seq_lens = self._upad_input( + query_states, key_states, value_states, attention_mask, query_length + ) + + cu_seqlens_q, cu_seqlens_k = cu_seq_lens + max_seqlen_in_batch_q, max_seqlen_in_batch_k = max_seq_lens + + attn_output_unpad = flash_attn_varlen_func( + query_states, + key_states, + value_states, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_k=cu_seqlens_k, + max_seqlen_q=max_seqlen_in_batch_q, + max_seqlen_k=max_seqlen_in_batch_k, + dropout_p=dropout, + softmax_scale=softmax_scale, + causal=causal, + ) + + attn_output = pad_input(attn_output_unpad, indices_q, batch_size, query_length) + else: + attn_output = flash_attn_func( + query_states, key_states, value_states, dropout, softmax_scale=softmax_scale, causal=causal + ) + + return attn_output + + def _upad_input(self, query_layer, key_layer, value_layer, attention_mask, query_length): + indices_k, cu_seqlens_k, max_seqlen_in_batch_k = _get_unpad_data(attention_mask) + batch_size, kv_seq_len, num_key_value_heads, head_dim = key_layer.shape + + key_layer = index_first_axis( + key_layer.reshape(batch_size * kv_seq_len, num_key_value_heads, head_dim), indices_k + ) + value_layer = index_first_axis( + value_layer.reshape(batch_size * kv_seq_len, num_key_value_heads, head_dim), indices_k + ) + if query_length == kv_seq_len: + query_layer = index_first_axis( + query_layer.reshape(batch_size * kv_seq_len, self.num_heads, head_dim), indices_k + ) + cu_seqlens_q = cu_seqlens_k + max_seqlen_in_batch_q = max_seqlen_in_batch_k + indices_q = indices_k + elif query_length == 1: + max_seqlen_in_batch_q = 1 + cu_seqlens_q = torch.arange( + batch_size + 1, dtype=torch.int32, device=query_layer.device + ) # There is a memcpy here, that is very bad. + indices_q = cu_seqlens_q[:-1] + query_layer = query_layer.squeeze(1) + else: + # The -q_len: slice assumes left padding. + attention_mask = attention_mask[:, -query_length:] + query_layer, indices_q, cu_seqlens_q, max_seqlen_in_batch_q = unpad_input(query_layer, attention_mask) + + return ( + query_layer, + key_layer, + value_layer, + indices_q, + (cu_seqlens_q, cu_seqlens_k), + (max_seqlen_in_batch_q, max_seqlen_in_batch_k), + ) + + +# Copied from transformers.models.clip.modeling_clip.CLIPMLP with CLIP->Siglip +class SiglipMLP(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.activation_fn = ACT2FN[config.hidden_act] + self.fc1 = nn.Linear(config.hidden_size, config.intermediate_size) + self.fc2 = nn.Linear(config.intermediate_size, config.hidden_size) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + hidden_states = self.fc1(hidden_states) + hidden_states = self.activation_fn(hidden_states) + hidden_states = self.fc2(hidden_states) + return hidden_states + + +# Copied from transformers.models.clip.modeling_clip.CLIPEncoderLayer with CLIP->Siglip +class SiglipEncoderLayer(nn.Module): + def __init__(self, config: SiglipConfig): + super().__init__() + self.embed_dim = config.hidden_size + self.self_attn = ( + SiglipAttention(config) + if not getattr(config, "_flash_attn_2_enabled", False) + else SiglipFlashAttention2(config) + ) + self.layer_norm1 = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_eps) + self.mlp = SiglipMLP(config) + self.layer_norm2 = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_eps) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: torch.Tensor, + output_attentions: Optional[bool] = False, + ) -> Tuple[torch.FloatTensor]: + """ + Args: + hidden_states (`torch.FloatTensor`): + Input to the layer of shape `(batch, seq_len, embed_dim)`. + attention_mask (`torch.FloatTensor`): + Attention mask of shape `(batch, 1, q_len, k_v_seq_len)` where padding elements are indicated by very large negative values. + output_attentions (`bool`, *optional*, defaults to `False`): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under + returned tensors for more detail. + """ + residual = hidden_states + + hidden_states = self.layer_norm1(hidden_states) + hidden_states, attn_weights = self.self_attn( + hidden_states=hidden_states, + attention_mask=attention_mask, + output_attentions=output_attentions, + ) + hidden_states = residual + hidden_states + + residual = hidden_states + hidden_states = self.layer_norm2(hidden_states) + hidden_states = self.mlp(hidden_states) + hidden_states = residual + hidden_states + + outputs = (hidden_states,) + + if output_attentions: + outputs += (attn_weights,) + + return outputs + + +class SiglipPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = SiglipConfig + base_model_prefix = "siglip" + supports_gradient_checkpointing = True + + def _init_weights(self, module): + """Initialize the weights""" + + if isinstance(module, SiglipVisionEmbeddings): + width = ( + self.config.vision_config.hidden_size + if isinstance(self.config, SiglipConfig) + else self.config.hidden_size + ) + nn.init.normal_(module.position_embedding.weight, std=1 / np.sqrt(width)) + elif isinstance(module, nn.Embedding): + default_flax_embed_init(module.weight) + elif isinstance(module, SiglipAttention): + nn.init.normal_(module.q_proj.weight) + nn.init.normal_(module.k_proj.weight) + nn.init.normal_(module.v_proj.weight) + nn.init.normal_(module.out_proj.weight) + nn.init.zeros_(module.q_proj.bias) + nn.init.zeros_(module.k_proj.bias) + nn.init.zeros_(module.v_proj.bias) + nn.init.zeros_(module.out_proj.bias) + elif isinstance(module, SiglipMLP): + nn.init.normal_(module.fc1.weight) + nn.init.normal_(module.fc2.weight) + nn.init.normal_(module.fc1.bias, std=1e-6) + nn.init.normal_(module.fc2.bias, std=1e-6) + elif isinstance(module, SiglipMultiheadAttentionPoolingHead): + nn.init.normal_(module.probe.data) + nn.init.normal_(module.attention.in_proj_weight.data) + nn.init.zeros_(module.attention.in_proj_bias.data) + elif isinstance(module, SiglipModel): + logit_scale_init = torch.tensor(0.0) + module.logit_scale.data.fill_(logit_scale_init) + module.logit_bias.data.zero_() + elif isinstance(module, (nn.Linear, nn.Conv2d)): + lecun_normal_(module.weight) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + +SIGLIP_START_DOCSTRING = r""" + This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the + library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads + etc.) + This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. + Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage + and behavior. + Parameters: + config ([`SiglipConfig`]): Model configuration class with all the parameters of the model. + Initializing with a config file does not load the weights associated with the model, only the + configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights. +""" + +SIGLIP_TEXT_INPUTS_DOCSTRING = r""" + Args: + input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`): + Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide + it. + Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and + [`PreTrainedTokenizer.__call__`] for details. + [What are input IDs?](../glossary#input-ids) + attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*): + Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`: + - 1 for tokens that are **not masked**, + - 0 for tokens that are **masked**. + [What are attention masks?](../glossary#attention-mask) + position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0, + config.max_position_embeddings - 1]`. + [What are position IDs?](../glossary#position-ids) + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned + tensors for more detail. + output_hidden_states (`bool`, *optional*): + Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for + more detail. + return_dict (`bool`, *optional*): + Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. +""" + +SIGLIP_VISION_INPUTS_DOCSTRING = r""" + Args: + pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`): + Pixel values. Padding will be ignored by default should you provide it. Pixel values can be obtained using + [`AutoImageProcessor`]. See [`CLIPImageProcessor.__call__`] for details. + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned + tensors for more detail. + output_hidden_states (`bool`, *optional*): + Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for + more detail. + return_dict (`bool`, *optional*): + Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. +""" + +SIGLIP_INPUTS_DOCSTRING = r""" + Args: + input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`): + Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide + it. + Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and + [`PreTrainedTokenizer.__call__`] for details. + [What are input IDs?](../glossary#input-ids) + attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*): + Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`: + - 1 for tokens that are **not masked**, + - 0 for tokens that are **masked**. + [What are attention masks?](../glossary#attention-mask) + position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0, + config.max_position_embeddings - 1]`. + [What are position IDs?](../glossary#position-ids) + pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`): + Pixel values. Padding will be ignored by default should you provide it. Pixel values can be obtained using + [`AutoImageProcessor`]. See [`CLIPImageProcessor.__call__`] for details. + return_loss (`bool`, *optional*): + Whether or not to return the contrastive loss. + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned + tensors for more detail. + output_hidden_states (`bool`, *optional*): + Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for + more detail. + return_dict (`bool`, *optional*): + Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. +""" + + +# Copied from transformers.models.clip.modeling_clip.CLIPEncoder with CLIP->Siglip +class SiglipEncoder(nn.Module): + """ + Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a + [`SiglipEncoderLayer`]. + Args: + config: SiglipConfig + """ + + def __init__(self, config: SiglipConfig): + super().__init__() + self.config = config + self.layers = nn.ModuleList([SiglipEncoderLayer(config) for _ in range(config.num_hidden_layers)]) + self.gradient_checkpointing = False + + # Ignore copy + def forward( + self, + inputs_embeds, + attention_mask: Optional[torch.Tensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutput]: + r""" + Args: + inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`): + Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. + This is useful if you want more control over how to convert `input_ids` indices into associated vectors + than the model's internal embedding lookup matrix. + attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*): + Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`: + - 1 for tokens that are **not masked**, + - 0 for tokens that are **masked**. + [What are attention masks?](../glossary#attention-mask) + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under + returned tensors for more detail. + output_hidden_states (`bool`, *optional*): + Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors + for more detail. + return_dict (`bool`, *optional*): + Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + encoder_states = () if output_hidden_states else None + all_attentions = () if output_attentions else None + + hidden_states = inputs_embeds + for encoder_layer in self.layers: + if output_hidden_states: + encoder_states = encoder_states + (hidden_states,) + if self.gradient_checkpointing and self.training: + layer_outputs = self._gradient_checkpointing_func( + encoder_layer.__call__, + hidden_states, + attention_mask, + output_attentions, + ) + else: + layer_outputs = encoder_layer( + hidden_states, + attention_mask, + output_attentions=output_attentions, + ) + + hidden_states = layer_outputs[0] + + if output_attentions: + all_attentions = all_attentions + (layer_outputs[1],) + + if output_hidden_states: + encoder_states = encoder_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, encoder_states, all_attentions] if v is not None) + return BaseModelOutput( + last_hidden_state=hidden_states, hidden_states=encoder_states, attentions=all_attentions + ) + + +class SiglipTextTransformer(nn.Module): + def __init__(self, config: SiglipTextConfig): + super().__init__() + self.config = config + embed_dim = config.hidden_size + self.embeddings = SiglipTextEmbeddings(config) + self.encoder = SiglipEncoder(config) + self.final_layer_norm = nn.LayerNorm(embed_dim, eps=config.layer_norm_eps) + + self.head = nn.Linear(embed_dim, embed_dim) + + @add_start_docstrings_to_model_forward(SIGLIP_TEXT_INPUTS_DOCSTRING) + @replace_return_docstrings(output_type=BaseModelOutputWithPooling, config_class=SiglipTextConfig) + def forward( + self, + input_ids: Optional[torch.Tensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.Tensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPooling]: + r""" + Returns: + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + if input_ids is None: + raise ValueError("You have to specify input_ids") + + input_shape = input_ids.size() + input_ids = input_ids.view(-1, input_shape[-1]) + + hidden_states = self.embeddings(input_ids=input_ids, position_ids=position_ids) + + # note: SigLIP's text model does not use a causal mask, unlike the original CLIP model. + # expand attention_mask + if attention_mask is not None: + # [batch_size, seq_len] -> [batch_size, 1, tgt_seq_len, src_seq_len] + attention_mask = _prepare_4d_attention_mask(attention_mask, hidden_states.dtype) + + encoder_outputs = self.encoder( + inputs_embeds=hidden_states, + attention_mask=attention_mask, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + last_hidden_state = encoder_outputs[0] + last_hidden_state = self.final_layer_norm(last_hidden_state) + + # Assuming "sticky" EOS tokenization, last token is always EOS. + pooled_output = last_hidden_state[:, -1, :] + pooled_output = self.head(pooled_output) + + if not return_dict: + return (last_hidden_state, pooled_output) + encoder_outputs[1:] + + return BaseModelOutputWithPooling( + last_hidden_state=last_hidden_state, + pooler_output=pooled_output, + hidden_states=encoder_outputs.hidden_states, + attentions=encoder_outputs.attentions, + ) + + +@add_start_docstrings( + """The text model from SigLIP without any head or projection on top.""", + SIGLIP_START_DOCSTRING, +) +class SiglipTextModel(SiglipPreTrainedModel): + config_class = SiglipTextConfig + + _no_split_modules = ["SiglipTextEmbeddings", "SiglipEncoderLayer"] + + def __init__(self, config: SiglipTextConfig): + super().__init__(config) + self.text_model = SiglipTextTransformer(config) + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self) -> nn.Module: + return self.text_model.embeddings.token_embedding + + def set_input_embeddings(self, value): + self.text_model.embeddings.token_embedding = value + + @add_start_docstrings_to_model_forward(SIGLIP_TEXT_INPUTS_DOCSTRING) + @replace_return_docstrings(output_type=BaseModelOutputWithPooling, config_class=SiglipTextConfig) + def forward( + self, + input_ids: Optional[torch.Tensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.Tensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPooling]: + r""" + Returns: + Examples: + ```python + >>> from transformers import AutoTokenizer, SiglipTextModel + >>> model = SiglipTextModel.from_pretrained("google/siglip-base-patch16-224") + >>> tokenizer = AutoTokenizer.from_pretrained("google/siglip-base-patch16-224") + >>> # important: make sure to set padding="max_length" as that's how the model was trained + >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding="max_length", return_tensors="pt") + >>> outputs = model(**inputs) + >>> last_hidden_state = outputs.last_hidden_state + >>> pooled_output = outputs.pooler_output # pooled (EOS token) states + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + return self.text_model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + +class SiglipVisionTransformer(nn.Module): + def __init__(self, config: SiglipVisionConfig): + super().__init__() + self.config = config + embed_dim = config.hidden_size + + self.embeddings = SiglipVisionEmbeddings(config) + self.encoder = SiglipEncoder(config) + self.post_layernorm = nn.LayerNorm(embed_dim, eps=config.layer_norm_eps) + self.head = SiglipMultiheadAttentionPoolingHead(config) + + @add_start_docstrings_to_model_forward(SIGLIP_VISION_INPUTS_DOCSTRING) + @replace_return_docstrings(output_type=BaseModelOutputWithPooling, config_class=SiglipVisionConfig) + def forward( + self, + pixel_values, + patch_attention_mask: Optional[torch.BoolTensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPooling]: + r""" + Returns: + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + batch_size = pixel_values.size(0) + if patch_attention_mask is None: + patch_attention_mask = torch.ones( + size=( + batch_size, + pixel_values.size(2) // self.config.patch_size, + pixel_values.size(3) // self.config.patch_size, + ), + dtype=torch.bool, + device=pixel_values.device, + ) + + hidden_states = self.embeddings(pixel_values=pixel_values, patch_attention_mask=patch_attention_mask) + + patch_attention_mask = patch_attention_mask.view(batch_size, -1) + # The call to `_upad_input` in `_flash_attention_forward` is expensive + # So when the `patch_attention_mask` is full of 1s (i.e. attending to the whole sequence), + # avoiding passing the attention_mask, which is equivalent to attending to the full sequence + if not torch.any(~patch_attention_mask): + attention_mask=None + else: + attention_mask = ( + _prepare_4d_attention_mask(patch_attention_mask, hidden_states.dtype) + if not self.config._flash_attn_2_enabled + else patch_attention_mask + ) + + encoder_outputs = self.encoder( + inputs_embeds=hidden_states, + attention_mask=attention_mask, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + last_hidden_state = encoder_outputs[0] + last_hidden_state = self.post_layernorm(last_hidden_state) + + pooled_output = self.head( + hidden_state=last_hidden_state, + attention_mask=patch_attention_mask, + ) + + if not return_dict: + return (last_hidden_state, pooled_output) + encoder_outputs[1:] + + return BaseModelOutputWithPooling( + last_hidden_state=last_hidden_state, + pooler_output=pooled_output, + hidden_states=encoder_outputs.hidden_states, + attentions=encoder_outputs.attentions, + ) + + +class SiglipMultiheadAttentionPoolingHead(nn.Module): + """Multihead Attention Pooling.""" + + def __init__(self, config: SiglipVisionConfig): + super().__init__() + + self.probe = nn.Parameter(torch.randn(1, 1, config.hidden_size)) + self.attention = torch.nn.MultiheadAttention(config.hidden_size, config.num_attention_heads, batch_first=True) + self.layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.mlp = SiglipMLP(config) + + def forward(self, hidden_state, attention_mask): + batch_size = hidden_state.shape[0] + probe = self.probe.repeat(batch_size, 1, 1) + + hidden_state = self.attention( + query=probe, key=hidden_state, value=hidden_state, key_padding_mask=~attention_mask + )[0] + + residual = hidden_state + hidden_state = self.layernorm(hidden_state) + hidden_state = residual + self.mlp(hidden_state) + + return hidden_state[:, 0] + + +@add_start_docstrings( + """The vision model from SigLIP without any head or projection on top.""", + SIGLIP_START_DOCSTRING, +) +class SiglipVisionModel(SiglipPreTrainedModel): + config_class = SiglipVisionConfig + main_input_name = "pixel_values" + + def __init__(self, config: SiglipVisionConfig): + super().__init__(config) + + self.vision_model = SiglipVisionTransformer(config) + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self) -> nn.Module: + return self.vision_model.embeddings.patch_embedding + + @add_start_docstrings_to_model_forward(SIGLIP_VISION_INPUTS_DOCSTRING) + @replace_return_docstrings(output_type=BaseModelOutputWithPooling, config_class=SiglipVisionConfig) + def forward( + self, + pixel_values, + patch_attention_mask: Optional[torch.BoolTensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPooling]: + r""" + Returns: + Examples: + ```python + >>> from PIL import Image + >>> import requests + >>> from transformers import AutoProcessor, SiglipVisionModel + >>> model = SiglipVisionModel.from_pretrained("google/siglip-base-patch16-224") + >>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224") + >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" + >>> image = Image.open(requests.get(url, stream=True).raw) + >>> inputs = processor(images=image, return_tensors="pt") + >>> outputs = model(**inputs) + >>> last_hidden_state = outputs.last_hidden_state + >>> pooled_output = outputs.pooler_output # pooled features + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + return self.vision_model( + pixel_values=pixel_values, + patch_attention_mask=patch_attention_mask, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + +@add_start_docstrings(SIGLIP_START_DOCSTRING) +class SiglipModel(SiglipPreTrainedModel): + config_class = SiglipConfig + + def __init__(self, config: SiglipConfig): + super().__init__(config) + + if not isinstance(config.text_config, SiglipTextConfig): + raise ValueError( + "config.text_config is expected to be of type SiglipTextConfig but is of type" + f" {type(config.text_config)}." + ) + + if not isinstance(config.vision_config, SiglipVisionConfig): + raise ValueError( + "config.vision_config is expected to be of type SiglipVisionConfig but is of type" + f" {type(config.vision_config)}." + ) + + text_config = config.text_config + vision_config = config.vision_config + + self.text_model = SiglipTextTransformer(text_config) + self.vision_model = SiglipVisionTransformer(vision_config) + + self.logit_scale = nn.Parameter(torch.randn(1)) + self.logit_bias = nn.Parameter(torch.randn(1)) + + # Initialize weights and apply final processing + self.post_init() + + @add_start_docstrings_to_model_forward(SIGLIP_TEXT_INPUTS_DOCSTRING) + def get_text_features( + self, + input_ids: Optional[torch.Tensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.Tensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> torch.FloatTensor: + r""" + Returns: + text_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The text embeddings obtained by + applying the projection layer to the pooled output of [`SiglipTextModel`]. + Examples: + ```python + >>> from transformers import AutoTokenizer, AutoModel + >>> import torch + >>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224") + >>> tokenizer = AutoTokenizer.from_pretrained("google/siglip-base-patch16-224") + >>> # important: make sure to set padding="max_length" as that's how the model was trained + >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding="max_length", return_tensors="pt") + >>> with torch.no_grad(): + ... text_features = model.get_text_features(**inputs) + ```""" + # Use SigLIP model's config for some fields (if specified) instead of those of vision & text components. + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + text_outputs = self.text_model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + pooled_output = text_outputs[1] + + return pooled_output + + @add_start_docstrings_to_model_forward(SIGLIP_VISION_INPUTS_DOCSTRING) + def get_image_features( + self, + pixel_values: Optional[torch.FloatTensor] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> torch.FloatTensor: + r""" + Returns: + image_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The image embeddings obtained by + applying the projection layer to the pooled output of [`SiglipVisionModel`]. + Examples: + ```python + >>> from PIL import Image + >>> import requests + >>> from transformers import AutoProcessor, AutoModel + >>> import torch + >>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224") + >>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224") + >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" + >>> image = Image.open(requests.get(url, stream=True).raw) + >>> inputs = processor(images=image, return_tensors="pt") + >>> with torch.no_grad(): + ... image_features = model.get_image_features(**inputs) + ```""" + # Use SiglipModel's config for some fields (if specified) instead of those of vision & text components. + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + vision_outputs = self.vision_model( + pixel_values=pixel_values, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + pooled_output = vision_outputs[1] + + return pooled_output + + @add_start_docstrings_to_model_forward(SIGLIP_INPUTS_DOCSTRING) + @replace_return_docstrings(output_type=SiglipOutput, config_class=SiglipConfig) + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + pixel_values: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + return_loss: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, SiglipOutput]: + r""" + Returns: + Examples: + ```python + >>> from PIL import Image + >>> import requests + >>> from transformers import AutoProcessor, AutoModel + >>> import torch + >>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224") + >>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224") + >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" + >>> image = Image.open(requests.get(url, stream=True).raw) + >>> texts = ["a photo of 2 cats", "a photo of 2 dogs"] + >>> # important: we pass `padding=max_length` since the model was trained with this + >>> inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt") + >>> with torch.no_grad(): + ... outputs = model(**inputs) + >>> logits_per_image = outputs.logits_per_image + >>> probs = torch.sigmoid(logits_per_image) # these are the probabilities + >>> print(f"{probs[0][0]:.1%} that image 0 is '{texts[0]}'") + 31.9% that image 0 is 'a photo of 2 cats' + ```""" + # Use SigLIP model's config for some fields (if specified) instead of those of vision & text components. + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + vision_outputs = self.vision_model( + pixel_values=pixel_values, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + text_outputs = self.text_model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + image_embeds = vision_outputs[1] + text_embeds = text_outputs[1] + + # normalized features + image_embeds = image_embeds / image_embeds.norm(p=2, dim=-1, keepdim=True) + text_embeds = text_embeds / text_embeds.norm(p=2, dim=-1, keepdim=True) + + # cosine similarity as logits + logits_per_text = torch.matmul(text_embeds, image_embeds.t()) * self.logit_scale.exp() + self.logit_bias + logits_per_image = logits_per_text.t() + + loss = None + if return_loss: + raise NotImplementedError("SigLIP loss to be implemented") + + if not return_dict: + output = (logits_per_image, logits_per_text, text_embeds, image_embeds, text_outputs, vision_outputs) + return ((loss,) + output) if loss is not None else output + + return SiglipOutput( + loss=loss, + logits_per_image=logits_per_image, + logits_per_text=logits_per_text, + text_embeds=text_embeds, + image_embeds=image_embeds, + text_model_output=text_outputs, + vision_model_output=vision_outputs, + ) + + +def get_siglip_vision_model(_flash_attn_2_enabled=True, **kwargs): + siglip_vision_config = { + "hidden_size": 1152, + "image_size": 448, + "intermediate_size": 4304, + "model_type": "siglip_vision_model", + "num_attention_heads": 16, + "num_hidden_layers": 27, + "patch_size": 14, + } + + model_config = SiglipVisionConfig(**siglip_vision_config, _flash_attn_2_enabled=_flash_attn_2_enabled, **kwargs) + + vision_model = SiglipVisionModel(model_config).vision_model + + return vision_model diff --git a/vocab.json b/vocab.json new file mode 100644 index 0000000..2460dac --- /dev/null +++ b/vocab.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cb65a857824fa6615bb1782d95d882617a8bbce1da0317118586b36f39e98bd +size 3910310

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 literal 0 HcmV?d00001 diff --git a/figures/speech_qa.png b/figures/speech_qa.png new file mode 100644 index 0000000000000000000000000000000000000000..8cda416f88d0ada82e5f0065ce482993c565ab97 GIT binary patch literal 46754 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