diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..606ddeeae0e211bc1690a523700f02b6c8c8323b --- /dev/null +++ b/.gitattributes @@ -0,0 +1,37 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt 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 +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz 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 +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl 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 +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* 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 +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +tokenizer.json filter=lfs diff=lfs merge=lfs -text +assets/architecture.png filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d122300cb29de8e518fb94ff7354f6dbab54ef8d --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +--- +license: mit +language: +- en +- zh +library_name: mlx +pipeline_tag: text-generation +base_model: XiaomiMiMo/MiMo-V2.6-Flash-RL +base_model_relation: quantized +tags: +- mlx +- apple-silicon +- mimo-v2 +- mixture-of-experts +- 4-bit +- mtp +--- + +
+ + + Xiaomi MiMo + +
+ +

MiMo-V2.6-Flash-RL MLX 4-bit MTP

+ +

+ A tested Apple Silicon conversion of + XiaomiMiMo/MiMo-V2.6-Flash-RL, + published by Vontra. +

+ +## What is in this release + +This is the text backbone of MiMo-V2.6-Flash-RL converted for MLX. The dense projections use 4-bit affine quantization with group size 64, while the model's native MXFP4 MoE experts remain in their original group-size-32 format. The resulting main model averages 4.257 bits per weight. + +The checkpoint includes its native three-layer MTP payload in `mtp/model_mtp.safetensors`, converted to 4-bit affine weights. It also carries the upstream five-layer DFlash drafter, vision encoder, audio encoder, and audio tokenizer so those assets do not need a second download. + +| Native component | Path | Format | +| --- | --- | --- | +| MTP predictor | `mtp/model_mtp.safetensors` | MLX 4-bit affine | +| DFlash drafter | `dflash/model.safetensors` | Upstream BF16 | +| Vision encoder | `omnimodal/vision_encoder.safetensors` | Upstream BF16 | +| Audio encoder | `omnimodal/audio_encoder.safetensors` | Upstream BF16 | +| Audio tokenizer | `audio_tokenizer/model.safetensors` | Upstream weights | + +Current oMLX and MLX text generation run the target model correctly but do not automatically execute MiMo's MTP, DFlash, vision, or audio paths. The speed figures below are serial text decode measurements. The auxiliary tensors and configs are packaged for MiMo-aware runtimes and ongoing MLX integration, not advertised as working oMLX controls. + +## Measured on Apple Silicon + +Tested on a 256 GB M3 Ultra Mac Studio with oMLX 0.7.0.dev2, MLX 0.32.2, and mlx-lm 0.31.3. + +| Test | Result | +| --- | ---: | +| Sustained generation, 128-token decode | 59.4 tok/s average | +| Prompt processing, 512 tokens | 477.1 tok/s | +| Prompt processing, 2,048 tokens | 562.8 tok/s | +| Peak unified memory, short context | 164.3 GB | +| Peak unified memory, 2,048-token prompt | 166.8 GB | +| Quantized text model size on disk | about 154 GiB | +| Complete repository size | about 160 GiB | + +The model produced correct arithmetic, a clear factual explanation, and coherent Python in repeated smoke tests. A 256 GB Mac is recommended so there is room for the model, KV cache, and the rest of the system. + +## Run with mlx-lm + +```bash +pip install -U "mlx-lm>=0.31.3" + +python -m mlx_lm generate \ + --model Vontra/MiMo-V2.6-Flash-RL-MLX-4bit-MTP \ + --prompt "Write a Python function that checks whether an integer is prime." \ + --max-tokens 256 \ + --temp 0.6 +``` + +The upstream tokenizer chat template is included. In oMLX, download or select `Vontra/MiMo-V2.6-Flash-RL-MLX-4bit-MTP` as an MLX model. + +## Quantization notes + +MiMo-V2.6 stores fused attention tensors in checkpoint tensor-parallel order and pads the FP8 scale grid separately for each shard. This conversion reconstructs those shards before quantization. Skipping that step produces a model that loads but returns broken output. + +The quantized MTP payload lives in its own `mtp/` directory with a manifest describing its tensors. It is not a standalone drafter for `mlx_lm.generate --draft-model` today. The upstream DFlash payload retains its trained mask embedding and corrected JSON config; an MLX smoke test matched serial greedy output, but it did not beat serial decode in the current experimental runtime. + +The vision and audio tensors are kept outside the root text-model index so `mlx_lm` and oMLX continue to load the tested text checkpoint unchanged. `omnimodal/manifest.json` records every auxiliary path and its upstream source. + +## About MiMo-V2.6-Flash-RL + +Xiaomi describes MiMo-V2.6-Flash-RL as a sparse 309B-parameter MoE with 15B active parameters, 48 transformer layers, 256 routed experts, and eight active experts per token. The full upstream release supports a one-million-token context and omnimodal inputs. See the [original model card](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Flash-RL) for architecture details, evaluations, deployment recipes, intended use, and limitations. + +## License and credit + +The upstream model is released under the MIT license. All model architecture, training, tokenizer work, and original branding belong to the Xiaomi MiMo team. This repository contains a community MLX conversion and measured Apple Silicon results. + +```bibtex +@misc{mimo2026v26flash, + title={MiMo-V2.6-Flash-RL}, + author={{Xiaomi MiMo Team}}, + year={2026}, + howpublished={\url{https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Flash-RL}}, +} +``` + +Follow [Vontra](https://huggingface.co/Vontra) for new Apple Silicon releases and fixes. diff --git a/assets/architecture.png b/assets/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..5a42079d9e7c8127560a943cd4a5fbe2170ed672 --- /dev/null +++ b/assets/architecture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d288768e1771fec19b39ed7dbac4adcbbd2e490384d4ad3c58d259b0c6c6bdcc +size 405440 diff --git a/audio_tokenizer/chat_template.jinja b/audio_tokenizer/chat_template.jinja new file mode 100644 index 0000000000000000000000000000000000000000..2b156ae9110a5966c5c6f266075a0f2fae7768d0 --- /dev/null +++ b/audio_tokenizer/chat_template.jinja @@ -0,0 +1,120 @@ +{%- if tools %} + {{- '<|im_start|>system\n' }} + {%- if messages[0].role == 'system' %} + {%- if messages[0].content is string %} + {{- messages[0].content }} + {%- else %} + {%- for content in messages[0].content %} + {%- if content.type == 'audio' %} + {{- ("<|sosp|>" + (content.meta | tojson) + "<|eosp|>") }} + {%- elif content.type == 'text' %} + {{- content.text }} + {%- endif %} + {%- endfor %} + {%- endif %} + {%- endif %} + {{- '\n\n' }} + {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n" }} + {%- for tool in tools %} + {{- "\n" }} + {{- tool | tojson }} + {%- endfor %} + {{- "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" }} +{%- else %} + {%- if messages[0].role == 'system' %} + {{- '<|im_start|>system\n' }} + {%- if messages[0].content is string %} + {{- messages[0].content }} + {%- else %} + {%- for content in messages[0].content %} + {%- if content.type == 'audio' %} + {{- ("<|sosp|>" + (content.meta | tojson) + "<|eosp|>") }} + {%- elif content.type == 'text' %} + {{- content.text }} + {%- endif %} + {%- endfor %} + {%- endif %} + {{- '\n<|im_end|>\n' }} + {%- endif %} +{%- endif %} +{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1, assistant_is_last=false) %} +{%- for message in messages[::-1] %} + {%- set index = (messages|length - 1) - loop.index0 %} + {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('') and message.content.endswith('')) %} + {%- set ns.multi_step_tool = false %} + {%- set ns.last_query_index = index %} + {%- endif %} +{%- endfor %} +{%- for message in messages %} + {%- if message.content is string %} + {%- set content = message.content %} + {%- else %} + {%- set content = namespace(text="") %} + {%- for mcontent in message.content %} + {%- if mcontent.type == 'audio' %} + {%- set content.text = content.text~("<|sosp|>" + (mcontent.meta | tojson) + "<|eosp|>") %} + {%- elif mcontent.type == 'text' %} + {%- set content.text = content.text~mcontent.text %} + {%- endif %} + {%- endfor %} + {%- set content = content.text %} + {%- endif %} + {%- if (message.role == "user") or (message.role == "system" and not loop.first) %} + {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }} + {%- elif message.role == "assistant" %} + {%- set reasoning_content = "" %} + {%- if message.reasoning_content is string %} + {%- set reasoning_content = message.reasoning_content %} + {%- else %} + {%- if '' in content %} + {%- set reasoning_content = content.split('')[0].rstrip('\n').split('')[-1].lstrip('\n') %} + {%- set content = content.split('')[-1].lstrip('\n') %} + {%- endif %} + {%- endif %} + {%- if loop.index0 > ns.last_query_index %} + {%- if loop.last or (not loop.last and reasoning_content) %} + {{- '<|im_start|>' + message.role + '\n\n' + reasoning_content.strip("\n") + '\n\n\n' + content.lstrip('\n') }} + {%- else %} + {{- '<|im_start|>' + message.role + '\n' + content }} + {%- endif %} + {%- else %} + {{- '<|im_start|>' + message.role + '\n' + content }} + {%- endif %} + {%- if message.tool_calls %} + {%- for tool_call in message.tool_calls %} + {%- if (loop.first and content) or (not loop.first) %}{{- '\n' }}{%- endif %} + {%- if tool_call.function %} + {%- set tool_call = tool_call.function %} + {%- endif %} + {{- '\n{"name": "' }} + {{- tool_call.name }} + {{- '", "arguments": ' }} + {%- if tool_call.arguments is string %} + {{- tool_call.arguments }} + {%- else %} + {{- tool_call.arguments | tojson }} + {%- endif %} + {{- '}\n' }} + {%- endfor %} + {%- endif %} + {%- if loop.last %} + {%- set ns.assistant_is_last = true %} + {%- else %} + {{- '<|im_end|>\n' }} + {%- endif %} + {%- elif message.role == "tool" %} + {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}{{- '<|im_start|>user' }}{%- endif %} + {{- '\n\n' }} + {{- content }} + {{- '\n' }} + {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}{{- '<|im_end|>\n' }}{%- endif %} + {%- endif %} +{%- endfor %} +{%- if add_generation_prompt and not ns.assistant_is_last %} + {{- '<|im_start|>assistant\n' }} + {%- if audio_output %} + {{- '<|sostm|>'}} + {%- elif not enable_thinking %} + {{- '\n\n\n' }} + {%- endif %} +{%- endif %} diff --git a/audio_tokenizer/config.json b/audio_tokenizer/config.json new file mode 100644 index 0000000000000000000000000000000000000000..e0d6fd1b099bf9d1c0033a7d13ab9c384d2430dc --- /dev/null +++ b/audio_tokenizer/config.json @@ -0,0 +1,68 @@ +{ + "max_audio_seconds": 300, + "stride_size": 2, + "avg_pooler": 2, + "d_model": 1024, + "scale_embedding": false, + "kernel_size": 3, + "activation_function": "gelu", + "encoder_layers": 24, + "encoder_skip_layer_id": 3, + "encoder_attention_heads": 16, + "encoder_ffn_dim": 4096, + "encoder_causal": true, + "encoder_attn_window_size": [ + 128, + 0 + ], + "decoder_layers": 24, + "decoder_attention_heads": 16, + "decoder_ffn_dim": 4096, + "decoder_kernel_size": 3, + "decoder_stride_size": 2, + "decoder_causal": true, + "decoder_attn_window_size": [ + 128, + 0 + ], + "nfft": 960, + "n_mels": 128, + "sampling_rate": 24000, + "hop_length": 240, + "window_size": 960, + "vocoder_padding": "same", + "fmin": 0, + "fmax": null, + "num_quantizers": 20, + "codebook_size": [ + 1024, + 1024, + 256, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128, + 128 + ], + "threshold_ema_dead_code": 2, + "position_embedding_type": "rope", + "rope_theta": 10000, + "rope_type": "default", + "ln_type": "LayerNorm", + "use_istft_only": true, + "hybrid_attention": true, + "hybrid_block_size": 8, + "swa_per_block": 2 +} \ No newline at end of file diff --git a/audio_tokenizer/generation_config.json b/audio_tokenizer/generation_config.json new file mode 100644 index 0000000000000000000000000000000000000000..c6911e35d75e2ddedbec5716154f0c19442e29e6 --- /dev/null +++ b/audio_tokenizer/generation_config.json @@ -0,0 +1,9 @@ +{ + "do_sample": true, + "temperature": 0.6, + "top_k": -1, + "top_p": 0.95, + "audio_temperature": 0.9, + "audio_top_k": -1, + "audio_top_p": 0.95 +} \ No newline at end of file diff --git a/audio_tokenizer/model.safetensors b/audio_tokenizer/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d26fff20968c281e2ffb811fa92fbde1ab0bf8ba --- /dev/null +++ b/audio_tokenizer/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:077033345d80eef3a315e8d394e0589667e80e4cdaba9bc5a7488410c6657265 +size 1872618384 diff --git a/audio_tokenizer/tokenizer_config.json b/audio_tokenizer/tokenizer_config.json new file mode 100644 index 0000000000000000000000000000000000000000..2063165454f0c8e509fda3de638f065df46165d8 --- /dev/null +++ b/audio_tokenizer/tokenizer_config.json @@ -0,0 +1,267 @@ +{ + "add_bos_token": false, + "add_prefix_space": false, + "added_tokens_decoder": { + "151643": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151644": { + "content": "<|im_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151645": { + "content": "<|im_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151646": { + "content": "<|object_ref_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151647": { + "content": "<|object_ref_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151648": { + "content": "<|box_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151649": { + "content": "<|box_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151650": { + "content": "<|quad_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151651": { + "content": "<|quad_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151652": { + "content": "<|vision_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151653": { + "content": "<|vision_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151654": { + "content": "<|vision_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151655": { + "content": "<|image_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151656": { + "content": "<|video_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151657": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151658": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151659": { + "content": "<|fim_prefix|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151660": { + "content": "<|fim_middle|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151661": { + "content": "<|fim_suffix|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151662": { + "content": "<|fim_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151663": { + "content": "<|repo_name|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151664": { + "content": "<|file_sep|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151665": { + "content": "<|mimo_audio_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151666": { + "content": "<|mimo_audio_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151667": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151668": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "151669": { + "content": "<|audio_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151670": { + "content": "<|mimo_video_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "151671": { + "content": "<|mimo_video_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + } + }, + "additional_special_tokens": [ + "<|im_start|>", + "<|im_end|>", + "<|object_ref_start|>", + "<|object_ref_end|>", + "<|box_start|>", + "<|box_end|>", + "<|quad_start|>", + "<|quad_end|>", + "<|vision_start|>", + "<|vision_end|>", + "<|vision_pad|>", + "<|image_pad|>", + "<|video_pad|>", + "<|audio_pad|>", + "<|mimo_audio_start|>", + "<|mimo_audio_end|>", + "<|mimo_video_start|>", + "<|mimo_video_end|>" + ], + "bos_token": null, + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "errors": "replace", + "model_max_length": 131072, + "pad_token": "<|endoftext|>", + "split_special_tokens": false, + "tokenizer_class": "Qwen2Tokenizer", + "unk_token": null +} \ No newline at end of file diff --git a/chat_template.jinja b/chat_template.jinja new file mode 100644 index 0000000000000000000000000000000000000000..f23265d928b22848e4879cc0f1d6cfe999bf7429 --- /dev/null +++ b/chat_template.jinja @@ -0,0 +1,96 @@ +{%- macro render_value(value) -%} + {%- if value is string -%} + {{- value -}} + {%- else -%} + {{- value | tojson(ensure_ascii=False) -}} + {%- endif -%} +{%- endmacro -%} + +{%- macro render_content(message_content) -%} + {%- if message_content is string -%} + {{- message_content -}} + {%- elif message_content is iterable -%} + {%- for part in message_content -%} + {%- if part is not mapping -%} + {{- part -}} + {%- elif part['type'] == 'image' or 'image' in part or 'image_url' in part -%} + {{- '<|vision_start|><|image_pad|><|vision_end|>' -}} + {%- elif part['type'] == 'audio' or part['type'] == 'input_audio' or 'audio' in part or 'audio_url' in part or 'input_audio' in part -%} + {{- '<|mimo_audio_start|><|audio_pad|><|mimo_audio_end|>' -}} + {%- elif part['type'] == 'video' or 'video' in part or 'video_url' in part -%} + {{- '<|vision_start|><|video_pad|><|vision_end|>' -}} + {%- elif 'text' in part -%} + {{- part['text'] -}} + {%- endif -%} + {%- endfor -%} + {%- endif -%} +{%- endmacro -%} + +{%- macro render_tools(tools) -%} + {{- 'You are provided with the following tools:\n\n' -}} + {%- for tool in tools -%} + {{- '\n' ~ (tool | tojson(ensure_ascii=False)) -}} + {%- endfor -%} + {{- '\n' -}} +{%- endmacro -%} + +{%- macro render_tool_calls(tool_calls) -%} + {%- for tool_call in tool_calls -%} + {%- if tool_call.function is defined -%} + {%- set tool_call = tool_call.function -%} + {%- elif tool_call.custom is defined -%} + {%- set tool_call = tool_call.custom -%} + {%- endif -%} + {{- '' -}} + {%- if tool_call.input is defined and tool_call.input is string -%} + {{- tool_call.input -}} + {%- elif tool_call.arguments -%} + {%- if tool_call.arguments is string -%} + {{- tool_call.arguments -}} + {%- else -%} + {%- for args_name, args_value in tool_call.arguments | items -%} + {{- '' ~ render_value(args_value) ~ '' -}} + {%- endfor -%} + {%- endif -%} + {%- endif -%} + {{- '' -}} + {%- endfor -%} +{%- endmacro -%} + +{%- macro render_assistant_message(message) -%} + {%- set content = render_content(message.content) -%} + {%- set reasoning = message.reasoning_content if message.reasoning_content is string else '' -%} + {{- '<|im_start|>assistant\n' ~ reasoning ~ '' ~ content -}} + {%- if message.tool_calls is defined and message.tool_calls is iterable and message.tool_calls | length > 0 -%} + {{- render_tool_calls(message.tool_calls) -}} + {%- endif -%} + {{- '<|im_end|>' -}} +{%- endmacro -%} + + +{%- if tools is defined and tools is iterable and tools | length > 0 -%} + {{- '<|im_start|>system\n' ~ render_tools(tools) ~ '<|im_end|>' -}} +{%- endif -%} + +{%- for message in messages -%} + {%- if message.role == 'assistant' -%} + {{- render_assistant_message(message) -}} + {%- else -%} + {%- set body = render_content(message.content) -%} + {{- '<|im_start|>' ~ message.role ~ '\n' ~ body -}} + {%- if message.tools is defined and message.tools is iterable and message.tools | length > 0 -%} + {%- if body -%} + {{- '\n\n' -}} + {%- endif -%} + {{- render_tools(message.tools) -}} + {%- endif -%} + {{- '<|im_end|>' -}} + {%- endif -%} +{%- endfor -%} + +{%- if add_generation_prompt -%} + {{- '<|im_start|>assistant\n' -}} + {%- if enable_thinking is false -%} + {{- '' -}} + {%- endif -%} +{%- endif -%} diff --git a/config.json b/config.json new file mode 100644 index 0000000000000000000000000000000000000000..bbee1233c94670d569f8d6a5b62a87d2f395c331 --- /dev/null +++ b/config.json @@ -0,0 +1,3648 @@ +{ + "add_full_attention_sink_bias": false, + "add_swa_attention_sink_bias": true, + "architectures": [ + "MiMoV2FlashForCausalLM" + ], + "attention_bias": false, + "attention_chunk_size": 128, + "attention_dropout": 0.0, + "attention_projection_layout": "fused_qkv", + "attention_value_scale": 0.707, + "audio_config": { + "add_post_norm": true, + "audio_channels": 20, + "audio_segment_size": 6000, + "group_size": 4, + "input_full_attention": true, + "input_local_attn_heads": 16, + "input_local_dim": 1024, + "input_local_head_dim": 64, + "input_local_hidden_dropout": 0.0, + "input_local_intermediate_size": 4096, + "input_local_layers": 6, + "out_hidden_size": 4096, + "partial_rotary_factor": 1.0, + "projection_layers": 2, + "rope_theta": 640000, + "speech_vocab_size": "1280", + "speech_zeroemb_idx": "1024" + }, + "audio_end_token_id": 151674, + "audio_start_token_id": 151673, + "audio_token_id": 151669, + "bos_token_id": null, + "dtype": "bfloat16", + "eos_token_id": [ + 151643, + 151645, + 151672 + ], + "head_dim": 192, + "hidden_act": "silu", + "hidden_size": 4096, + "hybrid_block_size": null, + "hybrid_layer_pattern": [ + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0 + ], + "image_token_id": 151655, + "initializer_range": 0.02, + "intermediate_size": 16384, + "layernorm_epsilon": 1e-06, + "max_position_embeddings": 1048576, + "model_type": "mimo_v2_flash", + "moe_intermediate_size": 2048, + "moe_layer_freq": [ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "moe_router_dtype": "bfloat16", + "n_group": 1, + "n_routed_experts": 256, + "n_shared_experts": null, + "norm_topk_prob": true, + "num_attention_heads": 64, + "num_experts_per_tok": 8, + "num_hidden_layers": 48, + "num_key_value_heads": 4, + "num_nextn_predict_layers": 3, + "pad_token_id": 151643, + "partial_rotary_factor": 0.334, + "processor_config": { + "audio_avg_pooler": 2, + "audio_channels": 20, + "audio_end_token_id": 151674, + "audio_fmax": null, + "audio_fmin": 0, + "audio_group_size": 4, + "audio_hop_length": 240, + "audio_input_id_per_second": 25.0, + "audio_kernel_size": 3, + "audio_n_mels": 128, + "audio_nfft": 960, + "audio_sampling_rate": 24000, + "audio_segment_size": 6000, + "audio_start_token_id": 151673, + "audio_stride_size": 2, + "audio_token_id": 151669, + "audio_window_size": 960, + "audio_zeroemb_idx": [ + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024 + ], + "fps": 1.0, + "image_max_pixels": 8388608, + "image_min_pixels": 8192, + "image_token_id": 151655, + "max_frames": 3600, + "merge_size": 2, + "min_frames": null, + "num_frames": null, + "pad_token_id": 151643, + "patch_size": 16, + "rope_type": "rope", + "temporal_compression_ratio": 1, + "temporal_patch_size": 2, + "use_per_grid_t_timestamps": false, + "use_video_timestamps": true, + "video_audio_interleave_length": 0.0, + "video_end_token_id": 151671, + "video_max_pixels": 8388608, + "video_min_pixels": 8192, + "video_process_num_threads": 16, + "video_start_token_id": 151670, + "video_token_id": 151656, + "video_tokens_per_second": 2, + "video_total_max_pixels": 268435456, + "vision_end_token_id": 151653, + "vision_start_token_id": 151652 + }, + "quantization": { + "group_size": 64, + "bits": 4, + "mode": "affine", + "model.layers.1.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.1.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.1.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.2.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.2.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.2.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.3.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.3.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.3.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.4.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.4.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.4.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.5.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.5.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.5.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.6.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.6.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.6.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.7.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.7.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.7.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.8.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.8.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.8.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.9.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.9.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.9.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.10.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.10.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.10.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.11.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.11.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.11.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.12.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.12.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.12.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.13.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.13.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.13.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.14.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.14.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.14.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.15.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.15.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.15.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.16.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.16.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.16.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.17.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.17.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.17.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.18.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.18.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.18.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.19.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.19.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.19.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.20.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.20.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.20.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.21.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.21.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.21.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.22.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.22.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.22.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.23.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.23.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.23.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.24.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.24.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.24.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.25.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.25.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.25.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.26.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.26.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.26.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.27.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.27.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.27.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.28.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.28.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.28.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.29.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.29.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.29.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.30.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.30.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.30.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.31.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.31.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.31.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.32.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.32.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.32.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.33.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.33.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.33.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.34.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.34.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.34.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.35.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.35.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.35.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.36.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.36.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.36.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.37.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.37.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.37.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.38.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.38.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.38.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.39.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.39.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.39.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.40.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.40.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.40.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.41.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.41.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.41.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.42.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.42.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.42.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.43.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.43.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.43.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.44.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.44.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.44.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.45.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.45.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.45.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.46.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.46.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.46.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.47.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.47.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.47.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.embed_tokens": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.mlp.gate_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.mlp.up_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.mlp.down_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "lm_head": { + "group_size": 64, + "bits": 4, + "mode": "affine" + } + }, + "quantization_config": { + "group_size": 64, + "bits": 4, + "mode": "affine", + "model.layers.1.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.1.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.1.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.2.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.2.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.2.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.3.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.3.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.3.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.4.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.4.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.4.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.5.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.5.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.5.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.6.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.6.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.6.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.7.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.7.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.7.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.8.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.8.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.8.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.9.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.9.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.9.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.10.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.10.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.10.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.11.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.11.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.11.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.12.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.12.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.12.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.13.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.13.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.13.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.14.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.14.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.14.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.15.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.15.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.15.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.16.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.16.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.16.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.17.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.17.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.17.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.18.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.18.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.18.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.19.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.19.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.19.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.20.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.20.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.20.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.21.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.21.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.21.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.22.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.22.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.22.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.23.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.23.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.23.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.24.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.24.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.24.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.25.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.25.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.25.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.26.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.26.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.26.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.27.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.27.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.27.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.28.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.28.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.28.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.29.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.29.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.29.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.30.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.30.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.30.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.31.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.31.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.31.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.32.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.32.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.32.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.33.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.33.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.33.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.34.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.34.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.34.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.35.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.35.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.35.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.36.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.36.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.36.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.37.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.37.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.37.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.38.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.38.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.38.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.39.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.39.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.39.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.40.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.40.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.40.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.41.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.41.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.41.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.42.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.42.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.42.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.43.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.43.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.43.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.44.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.44.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.44.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.45.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.45.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.45.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.46.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.46.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.46.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.47.mlp.switch_mlp.gate_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.47.mlp.switch_mlp.down_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.layers.47.mlp.switch_mlp.up_proj": { + "group_size": 32, + "bits": 4, + "mode": "mxfp4" + }, + "model.embed_tokens": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.mlp.gate_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.mlp.up_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.0.mlp.down_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.1.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.2.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.3.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.4.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.5.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.6.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.7.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.8.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.9.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.10.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.11.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.12.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.13.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.14.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.15.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.16.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.17.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.18.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.19.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.20.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.21.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.22.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.23.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.24.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.25.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.26.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.27.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.28.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.29.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.30.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.31.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.32.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.33.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.34.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.35.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.36.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.37.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.38.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.39.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.40.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.41.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.42.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.43.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.44.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.45.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.46.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.q_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.k_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.v_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.layers.47.self_attn.o_proj": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "lm_head": { + "group_size": 64, + "bits": 4, + "mode": "affine" + } + }, + "rope_parameters": { + "partial_rotary_factor": 0.334, + "rope_theta": 10000000.0, + "rope_type": "default", + "type": "default" + }, + "rope_theta": 10000000.0, + "routed_scaling_factor": null, + "scoring_func": "sigmoid", + "sliding_window": 128, + "sliding_window_size": 128, + "swa_head_dim": 192, + "swa_num_attention_heads": 64, + "swa_num_key_value_heads": 8, + "swa_rope_theta": 10000.0, + "swa_v_head_dim": 128, + "tie_word_embeddings": false, + "topk_group": 1, + "topk_method": "noaux_tc", + "transformers_version": "5.3.0", + "use_cache": true, + "v_head_dim": 128, + "video_token_id": 151656, + "vision_end_token_id": 151653, + "vision_model_type": "mimovl", + "vision_start_token_id": 151652, + "vocab_size": 152576 +} \ No newline at end of file diff --git a/configuration_mimo_v2.py b/configuration_mimo_v2.py new file mode 100644 index 0000000000000000000000000000000000000000..bb6f447232de5b0a5d773ccd42db63d05ae5acea --- /dev/null +++ b/configuration_mimo_v2.py @@ -0,0 +1,247 @@ +# coding=utf-8 +# +# Copyright 2026 Xiaomi Corporation. +# Copyright 2026 The HuggingFace Inc. team. +# +# 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. + +from copy import deepcopy + +from transformers.configuration_utils import PretrainedConfig +from transformers.modeling_rope_utils import rope_config_validation +from transformers.utils import logging + + +logger = logging.get_logger(__name__) + + +_MIMOV2_ATTENTION_PROJECTION_LAYOUTS = {"split", "fused_qkv"} + +_MIMOV2_SPLIT_TP_PLAN = { + "layers.*.self_attn.q_proj": "colwise", + "layers.*.self_attn.k_proj": "colwise", + "layers.*.self_attn.v_proj": "colwise", + "layers.*.self_attn.o_proj": "rowwise", + "layers.*.mlp.gate_proj": "colwise", + "layers.*.mlp.up_proj": "colwise", + "layers.*.mlp.down_proj": "rowwise", +} + +_MIMOV2_FUSED_QKV_TP_PLAN = { + "layers.*.self_attn.qkv_proj": "colwise", + "layers.*.self_attn.o_proj": "rowwise", + "layers.*.mlp.gate_proj": "colwise", + "layers.*.mlp.up_proj": "colwise", + "layers.*.mlp.down_proj": "rowwise", +} + +_MIMOV2_PP_PLAN = { + "embed_tokens": (["input_ids"], ["inputs_embeds"]), + "layers": (["hidden_states", "attention_mask"], ["hidden_states"]), + "norm": (["hidden_states"], ["hidden_states"]), +} + + +def _to_plain_dict(value): + if value is None: + return {} + if isinstance(value, dict): + return deepcopy(value) + if hasattr(value, "to_dict"): + return deepcopy(value.to_dict()) + if hasattr(value, "__dict__"): + return deepcopy(vars(value)) + raise TypeError(f"Unsupported config value type: {type(value)!r}") + + +class MiMoV2Config(PretrainedConfig): + + model_type = "mimo_v2" + keys_to_ignore_at_inference = ["past_key_values"] + + base_model_tp_plan = _MIMOV2_SPLIT_TP_PLAN + base_model_pp_plan = _MIMOV2_PP_PLAN + + attribute_map = { + "num_local_experts": "n_routed_experts", + } + + def __init__( + self, + vocab_size=151936, + hidden_size=4096, + intermediate_size=22016, + num_hidden_layers=32, + num_attention_heads=32, + num_key_value_heads=32, + hidden_act="silu", + max_position_embeddings=32768, + initializer_range=0.02, + layernorm_epsilon=1e-6, + use_cache=True, + tie_word_embeddings=False, + rope_theta=10000.0, + rope_scaling=None, + attention_dropout=0.0, + attention_bias=False, + attention_value_scale=None, + head_dim=None, + v_head_dim=None, + swa_num_attention_heads=None, + swa_num_key_value_heads=None, + swa_head_dim=None, + swa_v_head_dim=None, + swa_rope_theta=None, + sliding_window=None, + sliding_window_size=None, + add_full_attention_sink_bias=False, + add_swa_attention_sink_bias=False, + hybrid_block_size=None, + hybrid_layer_pattern=None, + partial_rotary_factor=1.0, + n_routed_experts=None, + moe_intermediate_size=None, + num_experts_per_tok=None, + routed_scaling_factor=None, + scoring_func="sigmoid", + topk_method="noaux_tc", + n_group=None, + topk_group=None, + norm_topk_prob=True, + moe_layer_freq=None, + attention_projection_layout="split", + vision_config=None, + audio_config=None, + processor_config=None, + image_token_id=None, + video_token_id=None, + vision_start_token_id=None, + vision_end_token_id=None, + vision_model_type=None, + **kwargs, + ): + rope_parameters = kwargs.pop("rope_parameters", None) + if rope_scaling is None and rope_parameters is not None: + rope_scaling = rope_parameters + + if attention_projection_layout is None: + attention_projection_layout = "split" + if attention_projection_layout not in _MIMOV2_ATTENTION_PROJECTION_LAYOUTS: + raise ValueError(f"Unsupported MiMoV2 attention projection layout: {attention_projection_layout}") + + self.attention_projection_layout = attention_projection_layout + self.base_model_tp_plan = ( + _MIMOV2_FUSED_QKV_TP_PLAN.copy() + if attention_projection_layout == "fused_qkv" + else _MIMOV2_SPLIT_TP_PLAN.copy() + ) + self.base_model_pp_plan = _MIMOV2_PP_PLAN.copy() + + self.vocab_size = vocab_size + self.max_position_embeddings = max_position_embeddings + 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 + if num_attention_heads % num_key_value_heads != 0: + raise ValueError("num_attention_heads must be divisible by num_key_value_heads") + + self.num_key_value_heads = num_key_value_heads + self.hidden_act = hidden_act + self.initializer_range = initializer_range + self.layernorm_epsilon = layernorm_epsilon + self.use_cache = use_cache + self.rope_theta = rope_theta + self.rope_scaling = rope_scaling + self.attention_dropout = attention_dropout + self.attention_bias = attention_bias + self.attention_value_scale = attention_value_scale + + self.head_dim = head_dim if head_dim is not None else hidden_size // num_attention_heads + self.v_head_dim = v_head_dim if v_head_dim is not None else self.head_dim + self.swa_num_attention_heads = ( + swa_num_attention_heads if swa_num_attention_heads is not None else num_attention_heads + ) + self.swa_num_key_value_heads = ( + swa_num_key_value_heads if swa_num_key_value_heads is not None else num_key_value_heads + ) + if self.swa_num_attention_heads % self.swa_num_key_value_heads != 0: + raise ValueError("swa_num_attention_heads must be divisible by swa_num_key_value_heads") + self.swa_head_dim = swa_head_dim if swa_head_dim is not None else self.head_dim + self.swa_v_head_dim = swa_v_head_dim if swa_v_head_dim is not None else self.swa_head_dim + self.swa_rope_theta = swa_rope_theta if swa_rope_theta is not None else rope_theta + + if sliding_window is None: + sliding_window = sliding_window_size + self.sliding_window = sliding_window + self.sliding_window_size = sliding_window_size if sliding_window_size is not None else sliding_window + self.add_full_attention_sink_bias = add_full_attention_sink_bias + self.add_swa_attention_sink_bias = add_swa_attention_sink_bias + + if hybrid_block_size is not None and hybrid_layer_pattern is None: + hybrid_layer_pattern = [0 if ((i + 1) % hybrid_block_size == 0) else 1 for i in range(num_hidden_layers)] + elif hybrid_layer_pattern is None: + hybrid_layer_pattern = [0] * num_hidden_layers + if len(hybrid_layer_pattern) != num_hidden_layers: + raise ValueError("hybrid_layer_pattern length must match num_hidden_layers") + self.hybrid_block_size = hybrid_block_size + self.hybrid_layer_pattern = hybrid_layer_pattern + + self.partial_rotary_factor = partial_rotary_factor + + self.n_routed_experts = n_routed_experts + self.moe_intermediate_size = moe_intermediate_size if moe_intermediate_size is not None else intermediate_size + self.num_experts_per_tok = num_experts_per_tok + self.routed_scaling_factor = routed_scaling_factor + self.scoring_func = scoring_func + self.topk_method = topk_method + self.n_group = n_group + self.topk_group = topk_group + self.norm_topk_prob = norm_topk_prob + if isinstance(moe_layer_freq, int): + moe_layer_freq = [moe_layer_freq > 0 and i % moe_layer_freq == 0 for i in range(num_hidden_layers)] + elif moe_layer_freq is None: + moe_layer_freq = [False] * num_hidden_layers + if len(moe_layer_freq) != num_hidden_layers: + raise ValueError("moe_layer_freq length must match num_hidden_layers") + self.moe_layer_freq = moe_layer_freq + + self.vision_config = _to_plain_dict(vision_config) + self.audio_config = _to_plain_dict(audio_config) + self.processor_config = _to_plain_dict(processor_config) + self.image_token_id = image_token_id + self.video_token_id = video_token_id + self.vision_start_token_id = vision_start_token_id + self.vision_end_token_id = vision_end_token_id + self.vision_model_type = vision_model_type + self.audio_token_id = self.processor_config.get("audio_token_id", None) if self.processor_config else None + self.audio_start_token_id = ( + self.processor_config.get("audio_start_token_id", None) if self.processor_config else None + ) + self.audio_end_token_id = ( + self.processor_config.get("audio_end_token_id", None) if self.processor_config else None + ) + + if self.rope_scaling is not None and "type" in self.rope_scaling: + self.rope_scaling["rope_type"] = self.rope_scaling["type"] + rope_config_validation(self) + + super().__init__( + tie_word_embeddings=tie_word_embeddings, + **kwargs, + ) + +__all__ = ["MiMoV2Config"] diff --git a/dflash/config.json b/dflash/config.json new file mode 100644 index 0000000000000000000000000000000000000000..9d25559ad598fe16076bec44f755f6bec688bbd2 --- /dev/null +++ b/dflash/config.json @@ -0,0 +1,56 @@ +{ + "architectures": [ + "DFlashDraftModel" + ], + "model_type": "qwen3", + "auto_map": { + "AutoModel": "dflash.DFlashDraftModel" + }, + "hidden_size": 4096, + "intermediate_size": 16384, + "num_hidden_layers": 5, + "num_attention_heads": 64, + "num_key_value_heads": 8, + "head_dim": 128, + "v_head_dim": 128, + "partial_rotary_factor": 0.5, + "block_size": 8, + "dflash_config": { + "target_layer_ids": [ + 0, + 11, + 23, + 35, + 47 + ], + "mask_token_id": 151675, + "num_anchors": 4096, + "block_size": 8, + "loss_decay_gamma": 7.0, + "attention_value_scale": 0.612, + "attention_sink_bias": true + }, + "layer_types": [ + "sliding_attention", + "sliding_attention", + "sliding_attention", + "sliding_attention", + "sliding_attention" + ], + "sliding_window": 1024, + "use_sliding_window": true, + "is_causal": false, + "num_target_layers": 48, + "target_hidden_size": 4096, + "vocab_size": 152576, + "max_position_embeddings": 1048576, + "rope_theta": 10000.0, + "rms_norm_eps": 1e-06, + "torch_dtype": "bfloat16", + "hidden_act": "silu", + "attention_bias": false, + "attention_dropout": 0.0, + "add_swa_attention_sink_bias": true, + "tie_word_embeddings": false, + "use_cache": true +} diff --git a/dflash/dflash.py b/dflash/dflash.py new file mode 100644 index 0000000000000000000000000000000000000000..0aea03fe130ec6070d8d94f8d11c37ee9885782f --- /dev/null +++ b/dflash/dflash.py @@ -0,0 +1,379 @@ +from typing import Callable, Optional + +import torch +from torch import nn +from transformers import DynamicCache +from transformers.cache_utils import Cache +from transformers.modeling_outputs import CausalLMOutputWithPast +from transformers.models.qwen3.modeling_qwen3 import ( + ALL_ATTENTION_FUNCTIONS, + FlashAttentionKwargs, + GradientCheckpointingLayer, + Qwen3Config, + Qwen3MLP, + Qwen3PreTrainedModel, + Qwen3RMSNorm, + Qwen3RotaryEmbedding, + eager_attention_forward, + rotate_half, +) +from typing_extensions import Tuple, Unpack + + +def sample(logits: torch.Tensor, temperature: float = 0.0) -> torch.Tensor: + if temperature < 1e-5: + return torch.argmax(logits, dim=-1) + bsz, seq_len, vocab_size = logits.shape + logits = logits.view(-1, vocab_size) + logits = logits / temperature + probs = torch.softmax(logits, dim=-1) + return torch.multinomial(probs, num_samples=1).view(bsz, seq_len) + + +def apply_rotary_pos_emb(q, k, cos, sin, position_ids=None, unsqueeze_dim=1): + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + q_len = q.size(-2) + q_embed = (q * cos[..., -q_len:, :]) + (rotate_half(q) * sin[..., -q_len:, :]) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +class Qwen3DFlashAttention(nn.Module): + """Multi-headed attention from 'Attention Is All You Need' paper""" + + def __init__(self, config: Qwen3Config, layer_idx: int): + super().__init__() + self.config = config + self.layer_idx = layer_idx + self.head_dim = getattr( + config, "head_dim", config.hidden_size // config.num_attention_heads + ) + self.num_key_value_groups = ( + config.num_attention_heads // config.num_key_value_heads + ) + self.scaling = self.head_dim**-0.5 + self.attention_dropout = config.attention_dropout + self.is_causal = False + self.q_proj = nn.Linear( + config.hidden_size, + config.num_attention_heads * self.head_dim, + bias=config.attention_bias, + ) + self.k_proj = nn.Linear( + config.hidden_size, + config.num_key_value_heads * self.head_dim, + bias=config.attention_bias, + ) + self.v_proj = nn.Linear( + config.hidden_size, + config.num_key_value_heads * self.head_dim, + bias=config.attention_bias, + ) + self.o_proj = nn.Linear( + config.num_attention_heads * self.head_dim, + config.hidden_size, + bias=config.attention_bias, + ) + self.q_norm = Qwen3RMSNorm(self.head_dim, eps=config.rms_norm_eps) + self.k_norm = Qwen3RMSNorm(self.head_dim, eps=config.rms_norm_eps) + self.sliding_window = ( + config.sliding_window + if config.layer_types[layer_idx] == "sliding_attention" + else None + ) + + def forward( + self, + hidden_states: torch.Tensor, + target_hidden: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + attention_mask: Optional[torch.Tensor], + past_key_values: Optional[Cache] = None, + cache_position: Optional[torch.LongTensor] = None, + **kwargs: Unpack[FlashAttentionKwargs], + ) -> tuple[torch.Tensor, Optional[torch.Tensor]]: + bsz, q_len = hidden_states.shape[:-1] + ctx_len = target_hidden.shape[1] + q = self.q_proj(hidden_states) + q = q.view(bsz, q_len, -1, self.head_dim) + q = self.q_norm(q).transpose(1, 2) + k_ctx = self.k_proj(target_hidden) + k_noise = self.k_proj(hidden_states) + v_ctx = self.v_proj(target_hidden) + v_noise = self.v_proj(hidden_states) + k = torch.cat([k_ctx, k_noise], dim=1).view( + bsz, ctx_len + q_len, -1, self.head_dim + ) + v = torch.cat([v_ctx, v_noise], dim=1).view( + bsz, ctx_len + q_len, -1, self.head_dim + ) + k = self.k_norm(k).transpose(1, 2) + v = v.transpose(1, 2) + cos, sin = position_embeddings + q, k = apply_rotary_pos_emb(q, k, cos, sin) + if past_key_values is not None: + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} + k, v = past_key_values.update(k, v, self.layer_idx, cache_kwargs) + attn_fn: Callable = eager_attention_forward + if self.config._attn_implementation != "eager": + attn_fn = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation] + attn_output, attn_weights = attn_fn( + self, + q, + k, + v, + attention_mask, + dropout=0.0 if not self.training else self.attention_dropout, + scaling=self.scaling, + sliding_window=self.sliding_window, + **kwargs, + ) + attn_output = attn_output.reshape(bsz, q_len, -1) + attn_output = self.o_proj(attn_output) + return attn_output, attn_weights + + +class Qwen3DFlashDecoderLayer(GradientCheckpointingLayer): + def __init__(self, config: Qwen3Config, layer_idx: int): + super().__init__() + self.hidden_size = config.hidden_size + self.self_attn = Qwen3DFlashAttention(config=config, layer_idx=layer_idx) + self.mlp = Qwen3MLP(config) + self.input_layernorm = Qwen3RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.post_attention_layernorm = Qwen3RMSNorm( + config.hidden_size, eps=config.rms_norm_eps + ) + + def forward( + self, + target_hidden: Optional[torch.Tensor] = None, + hidden_states: Optional[torch.Tensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + output_attentions: Optional[bool] = False, + use_cache: Optional[bool] = False, + cache_position: Optional[torch.LongTensor] = None, + position_embeddings: Optional[ + Tuple[torch.Tensor, torch.Tensor] + ] = None, # necessary, but kept here for BC + **kwargs: Unpack[FlashAttentionKwargs], + ) -> Tuple[ + torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]] + ]: + residual = hidden_states + hidden_states = self.input_layernorm(hidden_states) + hidden_states = self.self_attn( + hidden_states=hidden_states, + target_hidden=target_hidden, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_value, + output_attentions=output_attentions, + use_cache=use_cache, + cache_position=cache_position, + position_embeddings=position_embeddings, + **kwargs, + )[0] + hidden_states = residual + hidden_states + residual = hidden_states + hidden_states = self.post_attention_layernorm(hidden_states) + hidden_states = self.mlp(hidden_states) + hidden_states = residual + hidden_states + return hidden_states + + +def build_target_layer_ids(num_target_layers: int, num_draft_layers: int): + if num_draft_layers == 1: + return [(num_target_layers // 2)] + start = 1 + end = num_target_layers - 3 + span = end - start + target_layer_ids = [ + int(round(start + (i * span) / (num_draft_layers - 1))) + for i in range(num_draft_layers) + ] + return target_layer_ids + + +def extract_context_feature( + hidden_states: list[torch.Tensor], + layer_ids: Optional[list[int]], +) -> torch.Tensor: + offset = 1 + selected_states = [] + for layer_id in layer_ids: + selected_states.append(hidden_states[layer_id + offset]) + target_hidden = torch.cat(selected_states, dim=-1) + return target_hidden + + +class DFlashDraftModel(Qwen3PreTrainedModel): + config_class = Qwen3Config + _no_split_modules = ["Qwen3DFlashDecoderLayer"] + + def __init__(self, config) -> None: + super().__init__(config) + self.config = config + self.layers = nn.ModuleList( + [ + Qwen3DFlashDecoderLayer(config, layer_idx) + for layer_idx in range(config.num_hidden_layers) + ] + ) + dflash_config = getattr(config, "dflash_config", {}) or {} + self.target_layer_ids = dflash_config.get( + "target_layer_ids", + build_target_layer_ids(config.num_target_layers, config.num_hidden_layers), + ) + self.norm = Qwen3RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.rotary_emb = Qwen3RotaryEmbedding(config) + self.fc = nn.Linear( + len(self.target_layer_ids) * config.hidden_size, + config.hidden_size, + bias=False, + ) + self.hidden_norm = Qwen3RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.block_size = config.block_size + self.mask_token_id = dflash_config.get("mask_token_id", None) + self.post_init() + + def forward( + self, + position_ids: torch.LongTensor, + attention_mask: Optional[torch.Tensor] = None, + noise_embedding: Optional[torch.Tensor] = None, + target_hidden: Optional[torch.Tensor] = None, + past_key_values: Optional[Cache] = None, + use_cache: bool = False, + **kwargs, + ) -> CausalLMOutputWithPast: + hidden_states = noise_embedding + target_hidden = self.hidden_norm(self.fc(target_hidden)) + position_embeddings = self.rotary_emb(hidden_states, position_ids) + for layer in self.layers: + hidden_states = layer( + hidden_states=hidden_states, + target_hidden=target_hidden, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_values, + use_cache=use_cache, + position_embeddings=position_embeddings, + **kwargs, + ) + return self.norm(hidden_states) + + @torch.inference_mode() + def spec_generate( + self, + target: nn.Module, + input_ids: torch.LongTensor, + max_new_tokens: int, + stop_token_ids: list[int], + temperature: float, + ): + self.eval() + num_input_tokens = input_ids.shape[1] + max_length = num_input_tokens + max_new_tokens + + block_size = self.block_size + output_ids = torch.full( + (1, max_length + block_size), + self.mask_token_id, + dtype=torch.long, + device=target.device, + ) + position_ids = torch.arange( + output_ids.shape[1], device=target.device + ).unsqueeze(0) + + past_key_values_target = DynamicCache() + past_key_values_draft = DynamicCache() + + # Prefill stage + output = target( + input_ids, + position_ids=position_ids[:, :num_input_tokens], + past_key_values=past_key_values_target, + use_cache=True, + logits_to_keep=1, + output_hidden_states=True, + ) + + output_ids[:, :num_input_tokens] = input_ids + output_ids[:, num_input_tokens : num_input_tokens + 1] = sample( + output.logits, temperature + ) + target_hidden = extract_context_feature( + output.hidden_states, self.target_layer_ids + ) + + # Decode stage + acceptance_lengths = [] + start = input_ids.shape[1] + while start < max_length: + block_output_ids = output_ids[:, start : start + block_size].clone() + block_position_ids = position_ids[:, start : start + block_size] + noise_embedding = target.model.embed_tokens(block_output_ids) + draft_logits = target.lm_head( + self( + target_hidden=target_hidden, + noise_embedding=noise_embedding, + position_ids=position_ids[ + :, past_key_values_draft.get_seq_length() : start + block_size + ], + past_key_values=past_key_values_draft, + use_cache=True, + is_causal=False, + )[:, -block_size + 1 :, :] + ) + past_key_values_draft.crop(start) + block_output_ids[:, 1:] = sample(draft_logits) + + output = target( + block_output_ids, + position_ids=block_position_ids, + past_key_values=past_key_values_target, + use_cache=True, + output_hidden_states=True, + ) + + posterior = sample(output.logits, temperature) + acceptance_length = ( + (block_output_ids[:, 1:] == posterior[:, :-1]) + .cumprod(dim=1) + .sum(dim=1)[0] + .item() + ) + output_ids[:, start : start + acceptance_length + 1] = block_output_ids[ + :, : acceptance_length + 1 + ] + output_ids[:, start + acceptance_length + 1] = posterior[ + :, acceptance_length + ] + start += acceptance_length + 1 + past_key_values_target.crop(start) + target_hidden = extract_context_feature( + output.hidden_states, self.target_layer_ids + )[:, : acceptance_length + 1, :] + acceptance_lengths.append(acceptance_length + 1) + if stop_token_ids is not None and any( + stop_token_id in output_ids[:, num_input_tokens:] + for stop_token_id in stop_token_ids + ): + break + output_ids = output_ids[:, :max_length] + output_ids = output_ids[:, output_ids[0] != self.mask_token_id] + if stop_token_ids is not None: + stop_token_ids = torch.tensor(stop_token_ids, device=output_ids.device) + stop_token_indices = torch.isin( + output_ids[0][num_input_tokens:], stop_token_ids + ).nonzero(as_tuple=True)[0] + if stop_token_indices.numel() > 0: + output_ids = output_ids[ + :, : num_input_tokens + stop_token_indices[0] + 1 + ] + + return output_ids diff --git a/dflash/mask_embedding.pt b/dflash/mask_embedding.pt new file mode 100644 index 0000000000000000000000000000000000000000..6ebcfd4abd4d19a215375c7b19684794b1b0fa3c --- /dev/null +++ b/dflash/mask_embedding.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b35b379fe0497ffdc0d6407f502622237d9346e0d03f457ec574be60f6c2cee0 +size 9882 diff --git a/dflash/model.safetensors b/dflash/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..06591100b3e0e791b59638ae2a6e9b4d4771bd8a --- /dev/null +++ b/dflash/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94d9c02c17e0b469f88699e98424825ebe13a17f07eb3b86727b5e0c8143d287 +size 2936121080 diff --git a/dflash/model.safetensors.index.json b/dflash/model.safetensors.index.json new file mode 100644 index 0000000000000000000000000000000000000000..c15812ce9c7ecc237b0554e86f080df20a517472 --- /dev/null +++ b/dflash/model.safetensors.index.json @@ -0,0 +1,70 @@ +{ + "metadata": { + "total_size": 2936114304 + }, + "weight_map": { + "fc.weight": "model.safetensors", + "hidden_norm.weight": "model.safetensors", + "norm.weight": "model.safetensors", + "layers.0.input_layernorm.weight": "model.safetensors", + "layers.0.post_attention_layernorm.weight": "model.safetensors", + "layers.0.self_attn.q_norm.weight": "model.safetensors", + "layers.0.self_attn.k_norm.weight": "model.safetensors", + "layers.0.self_attn.q_proj.weight": "model.safetensors", + "layers.0.self_attn.k_proj.weight": "model.safetensors", + "layers.0.self_attn.v_proj.weight": "model.safetensors", + "layers.0.self_attn.o_proj.weight": "model.safetensors", + "layers.0.mlp.gate_proj.weight": "model.safetensors", + "layers.0.mlp.up_proj.weight": "model.safetensors", + "layers.0.mlp.down_proj.weight": "model.safetensors", + "layers.0.self_attn.attention_sink_bias": "model.safetensors", + "layers.1.input_layernorm.weight": "model.safetensors", + "layers.1.post_attention_layernorm.weight": "model.safetensors", + "layers.1.self_attn.q_norm.weight": "model.safetensors", + "layers.1.self_attn.k_norm.weight": "model.safetensors", + "layers.1.self_attn.q_proj.weight": "model.safetensors", + "layers.1.self_attn.k_proj.weight": "model.safetensors", + "layers.1.self_attn.v_proj.weight": "model.safetensors", + "layers.1.self_attn.o_proj.weight": "model.safetensors", + "layers.1.mlp.gate_proj.weight": "model.safetensors", + "layers.1.mlp.up_proj.weight": "model.safetensors", + "layers.1.mlp.down_proj.weight": "model.safetensors", + "layers.1.self_attn.attention_sink_bias": "model.safetensors", + "layers.2.input_layernorm.weight": "model.safetensors", + "layers.2.post_attention_layernorm.weight": "model.safetensors", + "layers.2.self_attn.q_norm.weight": "model.safetensors", + "layers.2.self_attn.k_norm.weight": "model.safetensors", + "layers.2.self_attn.q_proj.weight": "model.safetensors", + "layers.2.self_attn.k_proj.weight": "model.safetensors", + "layers.2.self_attn.v_proj.weight": "model.safetensors", + "layers.2.self_attn.o_proj.weight": "model.safetensors", + "layers.2.mlp.gate_proj.weight": "model.safetensors", + "layers.2.mlp.up_proj.weight": "model.safetensors", + "layers.2.mlp.down_proj.weight": "model.safetensors", + "layers.2.self_attn.attention_sink_bias": "model.safetensors", + "layers.3.input_layernorm.weight": "model.safetensors", + "layers.3.post_attention_layernorm.weight": "model.safetensors", + "layers.3.self_attn.q_norm.weight": "model.safetensors", + "layers.3.self_attn.k_norm.weight": "model.safetensors", + "layers.3.self_attn.q_proj.weight": "model.safetensors", + "layers.3.self_attn.k_proj.weight": "model.safetensors", + "layers.3.self_attn.v_proj.weight": "model.safetensors", + "layers.3.self_attn.o_proj.weight": "model.safetensors", + "layers.3.mlp.gate_proj.weight": "model.safetensors", + "layers.3.mlp.up_proj.weight": "model.safetensors", + "layers.3.mlp.down_proj.weight": "model.safetensors", + "layers.3.self_attn.attention_sink_bias": "model.safetensors", + "layers.4.input_layernorm.weight": "model.safetensors", + "layers.4.post_attention_layernorm.weight": "model.safetensors", + "layers.4.self_attn.q_norm.weight": "model.safetensors", + "layers.4.self_attn.k_norm.weight": "model.safetensors", + "layers.4.self_attn.q_proj.weight": "model.safetensors", + "layers.4.self_attn.k_proj.weight": "model.safetensors", + "layers.4.self_attn.v_proj.weight": "model.safetensors", + "layers.4.self_attn.o_proj.weight": "model.safetensors", + "layers.4.mlp.gate_proj.weight": "model.safetensors", + "layers.4.mlp.up_proj.weight": "model.safetensors", + "layers.4.mlp.down_proj.weight": "model.safetensors", + "layers.4.self_attn.attention_sink_bias": "model.safetensors" + } +} diff --git a/generation_config.json b/generation_config.json new file mode 100644 index 0000000000000000000000000000000000000000..167a2b078ebc16fc7633618141c1f9869783a65c --- /dev/null +++ b/generation_config.json @@ -0,0 +1,9 @@ +{ + "bos_token_id": 151643, + "do_sample": false, + "eos_token_id": [151643, 151645, 151672], + "temperature": 1.0, + "top_p": 0.95, + "max_new_tokens": 2048, + "transformers_version": "4.37.0" +} \ No newline at end of file diff --git a/model-00001-of-00036.safetensors b/model-00001-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..590555504f8c45f3291195ec1eab4bfe5b059cc6 --- /dev/null +++ b/model-00001-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9717a9f2ca1fd9d2e008820e92e723c86f5e1e2aa1493b5df82be755b65f55c3 +size 5186626055 diff --git a/model-00002-of-00036.safetensors b/model-00002-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..3a47aba6a3aeaf4f557d78590e7aac5097cfd0d1 --- /dev/null +++ b/model-00002-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47948f9f7d137b83a239ec109228902cc62e45f53e6aee9b9c4b36ae3ef6c810 +size 4618604595 diff --git a/model-00003-of-00036.safetensors b/model-00003-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e44a1e6d8fc287dbac7818a629ef218acc77156b --- /dev/null +++ b/model-00003-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:031ba72c675b9c6d486bf19182181ea44a37f6dbbe0ca3e143e03a66e7e94ded +size 4670855972 diff --git a/model-00004-of-00036.safetensors b/model-00004-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d4d3dad492619a9cd67b3f8244c4880d80334d49 --- /dev/null +++ b/model-00004-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d195ed39cc967b7439cc5d6a10702f3d22e4ba6f67f6212d314879b53c932de +size 4618604599 diff --git a/model-00005-of-00036.safetensors b/model-00005-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8bee402315449ee899ca662af0abeb02148c91ee --- /dev/null +++ b/model-00005-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a0b2c4c1b91ba2a43a9403282858943d006e0815ed836aaae81381b89a2953c +size 4618604595 diff --git a/model-00006-of-00036.safetensors b/model-00006-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a478b2832ae0fe0e4c9f80854396cdcafa299905 --- /dev/null +++ b/model-00006-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80aa112ca6d4919afd2609a8e2a63f561717ce158726c4b5898060464a4196a0 +size 4673805352 diff --git a/model-00007-of-00036.safetensors b/model-00007-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..53e2f2b9ba717c2fc7a917096d4d4522373ddf03 --- /dev/null +++ b/model-00007-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7d12135983a44f4d7ed25a89883e88edfeb5217167f9bd54cc39602cdb829be +size 4618604614 diff --git a/model-00008-of-00036.safetensors b/model-00008-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6a35fe3473b5fca1856102b0cd10cc04c2069eb6 --- /dev/null +++ b/model-00008-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5de8b3706808db7fb5509a656d2e1dfa1a3efdf57978b6ba50fcfb8a58d572c +size 4615655241 diff --git a/model-00009-of-00036.safetensors b/model-00009-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..b674894207e2233d089294d18979a457f99a9c99 --- /dev/null +++ b/model-00009-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bda8c14aa59e21e5186f3d6834bbb4abdf348bb69c95d706a5960c733c20c508 +size 4673805400 diff --git a/model-00010-of-00036.safetensors b/model-00010-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..1932e390b2a07efbb30d2f7d7e5c59491e8645e1 --- /dev/null +++ b/model-00010-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:816b2b4a992b41396a32503f4adf9729f943c6ee6c6d7918882d37e952b3fb77 +size 4618604620 diff --git a/model-00011-of-00036.safetensors b/model-00011-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..176187896168e47f8957df61297b3c1fc03d400a --- /dev/null +++ b/model-00011-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:667e9728c74c6f9ee23458449ad77fc4ddc4678835899fd0a6aebae69b17af20 +size 4618604616 diff --git a/model-00012-of-00036.safetensors b/model-00012-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d2e8c4bf42cf1d7b4c137600ce3ed80332e0f759 --- /dev/null +++ b/model-00012-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfcbf2c8637009f46159de4b022633b22286540b9a6be4c2eceebd4e2ec0f483 +size 4670856025 diff --git a/model-00013-of-00036.safetensors b/model-00013-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..249da0be311b121a3281f6244fcd5d9f976023c8 --- /dev/null +++ b/model-00013-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed842f934f5107a5996a450519576ebab3f57d2ce8953a20964e9b28f1ef8a7c +size 4618604624 diff --git a/model-00014-of-00036.safetensors b/model-00014-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..fa0c94d4b00c8675f90fca2cda925b9a75f79a8b --- /dev/null +++ b/model-00014-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66b591865afb9fc1eacabec2f95f59ba3121dc18dad23f45e6b5bf784ed56b96 +size 4618604616 diff --git a/model-00015-of-00036.safetensors b/model-00015-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..c9ba79d729124b323b2b13c00690a362485a6d85 --- /dev/null +++ b/model-00015-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a02fe4c759185220eae57d446fbe7e9f827529d011182f48b72ff11b099e736 +size 4673805392 diff --git a/model-00016-of-00036.safetensors b/model-00016-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2a19f476038670d261974c0e87d0d686080c6a19 --- /dev/null +++ b/model-00016-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8f74bb155608e41e64b91239abeedc50f0cee9f3d02c36bcfae36f3da96027c +size 4618604624 diff --git a/model-00017-of-00036.safetensors b/model-00017-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..0ba31acf23320d4711affc0bbacae8446ad29b66 --- /dev/null +++ b/model-00017-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd8c46b2d9e796dd8acc2454940605f629f4b67b8efa8a6f48e26e66a696d299 +size 4615655245 diff --git a/model-00018-of-00036.safetensors b/model-00018-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..aeaa0943b39de7a664afca0c7b8c2e15ca058eff --- /dev/null +++ b/model-00018-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2a4ae6107f0c0d67145204b2915151c363fe8beaad37371551a17b6a37bac73 +size 4673805402 diff --git a/model-00019-of-00036.safetensors b/model-00019-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..58931b3091febc0d1334f7e9205b4ebdf87810e4 --- /dev/null +++ b/model-00019-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbdcbc9da79886a1396bdecc6100538ef0f520e97ce1e4578fb613c315656251 +size 4618604620 diff --git a/model-00020-of-00036.safetensors b/model-00020-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..8d8d5676ed448c079878c34e621831b38021bdb6 --- /dev/null +++ b/model-00020-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bbf8a9b0fd343ebed081b6048cf52a335251cf481d8edc1db99a89f19bbfce7 +size 4618604620 diff --git a/model-00021-of-00036.safetensors b/model-00021-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e35264fe3904a49a1684e6d0502a05612f7bfd27 --- /dev/null +++ b/model-00021-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48c8c75f72dbd8705b4abaf4d0438a24be073b86071a107dab0e70ee9bb7d99a +size 4670856049 diff --git a/model-00022-of-00036.safetensors b/model-00022-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..93cc5fb72818aab2a330ce08a92e183c3520646a --- /dev/null +++ b/model-00022-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:431c940aafa7816a36a0e273e66525416a5cafeb0946f78cf81ff751e5fe2414 +size 4618604564 diff --git a/model-00023-of-00036.safetensors b/model-00023-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a8b0cdc099a902491c54aa68618e5644eebfc464 --- /dev/null +++ b/model-00023-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8212cef46711c12c006a6fd4b4f0bd21bb67fff3b5a31e8dfae817b71f31300d +size 4618604616 diff --git a/model-00024-of-00036.safetensors b/model-00024-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..30f622b7e6362b3956a2295a6a8fc2b4df774fe7 --- /dev/null +++ b/model-00024-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a672089c20c8210191663c426f0443e932ac7ae544829699172231f306bdf8ff +size 4673805390 diff --git a/model-00025-of-00036.safetensors b/model-00025-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..7853df2c889f9164a52824e93f5be0c1c07d7721 --- /dev/null +++ b/model-00025-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb2e8831822d68aa29144b060ac508159b74be3f752eea73ef6048aebf41b66a +size 4618604582 diff --git a/model-00026-of-00036.safetensors b/model-00026-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e4f3c7ead600d3233131cd9680877d3a6b626854 --- /dev/null +++ b/model-00026-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21fdfa1e5555f968c7efccffc0d794c731e71934bf5849ae0672c3fc6e787c78 +size 4615655245 diff --git a/model-00027-of-00036.safetensors b/model-00027-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a56ee01911305f0b474b8c8bd5e01f44143be1be --- /dev/null +++ b/model-00027-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de4c3349bc39ee06be0f15fa72e379c2175bd27e6f0ccb8d0377741e18bc3c63 +size 4673805414 diff --git a/model-00028-of-00036.safetensors b/model-00028-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..df768a6b335d8cb0122adf637c5d79a16d2f3341 --- /dev/null +++ b/model-00028-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59b682efe7912f6bad93e504bfb028726802f5e5ee5a8abd7494ab7774fbaa71 +size 4618604624 diff --git a/model-00029-of-00036.safetensors b/model-00029-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a83297c82cf31b9ed046c41b9431f6b3579bb67a --- /dev/null +++ b/model-00029-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f60ed323b2ec0dea0b70f87af61a583358a4a91dd9a819afc761fe0f570b244 +size 4618604620 diff --git a/model-00030-of-00036.safetensors b/model-00030-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..c91934e05a2c321bd18a949208476d4eb8041796 --- /dev/null +++ b/model-00030-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cd6959c12ce52e2373d6cae7b4b4866b76c60da7477730acd06021be2b545e9 +size 4670856037 diff --git a/model-00031-of-00036.safetensors b/model-00031-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a7fb3791ead1716048da3a6ba85825227b2eda32 --- /dev/null +++ b/model-00031-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06e2836cf5d997dfb201067525f3c5bf3dce15d9c05b1a4b39ef6d8c57f45983 +size 4618604620 diff --git a/model-00032-of-00036.safetensors b/model-00032-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..655f9ab940460d52e3ad23f436dba78f9e6c6520 --- /dev/null +++ b/model-00032-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22cf26cee83eb18be716913f899755c67762e9d6111c723c3ad9a0cec099b55f +size 4618604590 diff --git a/model-00033-of-00036.safetensors b/model-00033-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..e8d83714fc9cc7a1ddec8667477b455387aead56 --- /dev/null +++ b/model-00033-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5fdc9b1794bdcfef78ad9a9e9be84744e4d9729c169e634c8d6fcaae5cc650 +size 4673805398 diff --git a/model-00034-of-00036.safetensors b/model-00034-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..2307af68db6e03c707d8e53604a5f7f55d234ce7 --- /dev/null +++ b/model-00034-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17dde5e85b23ca40b48690c3faf53d64bd463eaecf32580ee1ff073a97ee2ab8 +size 4618604624 diff --git a/model-00035-of-00036.safetensors b/model-00035-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..afa5fcc0edee47e749af009c9e844da3645bbc1d --- /dev/null +++ b/model-00035-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26793dcf4a2f872ef61ddd9fc4e7fa98466532230308f6aa34ac0aa9039df648 +size 4615655241 diff --git a/model-00036-of-00036.safetensors b/model-00036-of-00036.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a311475d2f6a016cabfe4c2d32e79dbbbf42049e --- /dev/null +++ b/model-00036-of-00036.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcf9620b0ae7a0fb6c9d91ca876684962426fa664ea8dd382ce88067a0bed2d9 +size 1494509636 diff --git a/model.safetensors.index.json b/model.safetensors.index.json new file mode 100644 index 0000000000000000000000000000000000000000..5f3a564d04b36f9457065f458e85462fcb3116cf --- /dev/null +++ b/model.safetensors.index.json @@ -0,0 +1,1111 @@ +{ + "metadata": { + "total_size": 164297174912, + "total_parameters": 308778778368 + }, + "weight_map": { + "lm_head.biases": "model-00036-of-00036.safetensors", + "lm_head.scales": "model-00036-of-00036.safetensors", + "lm_head.weight": "model-00036-of-00036.safetensors", + "model.embed_tokens.biases": "model-00001-of-00036.safetensors", + "model.embed_tokens.scales": "model-00001-of-00036.safetensors", + "model.embed_tokens.weight": "model-00001-of-00036.safetensors", + "model.layers.0.input_layernorm.weight": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.down_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.down_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.down_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.gate_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.gate_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.gate_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.up_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.up_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.mlp.up_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.0.post_attention_layernorm.weight": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.k_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.k_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.k_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.o_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.o_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.o_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.q_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.q_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.q_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.v_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.v_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.0.self_attn.v_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.input_layernorm.weight": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.gate.e_score_correction_bias": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.gate.weight": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.switch_mlp.down_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.switch_mlp.down_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.switch_mlp.gate_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.switch_mlp.gate_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.switch_mlp.up_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.mlp.switch_mlp.up_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.post_attention_layernorm.weight": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.attention_sink_bias": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.k_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.k_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.k_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.o_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.o_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.o_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.q_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.q_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.q_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.v_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.v_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.1.self_attn.v_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.10.input_layernorm.weight": "model-00008-of-00036.safetensors", + "model.layers.10.mlp.gate.e_score_correction_bias": "model-00008-of-00036.safetensors", + "model.layers.10.mlp.gate.weight": "model-00008-of-00036.safetensors", + "model.layers.10.mlp.switch_mlp.down_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.10.mlp.switch_mlp.down_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.10.mlp.switch_mlp.gate_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.10.mlp.switch_mlp.gate_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.10.mlp.switch_mlp.up_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.10.mlp.switch_mlp.up_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.10.post_attention_layernorm.weight": "model-00008-of-00036.safetensors", + "model.layers.10.self_attn.attention_sink_bias": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.k_proj.biases": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.k_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.k_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.o_proj.biases": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.o_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.o_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.q_proj.biases": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.q_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.q_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.v_proj.biases": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.v_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.10.self_attn.v_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.11.input_layernorm.weight": "model-00009-of-00036.safetensors", + "model.layers.11.mlp.gate.e_score_correction_bias": "model-00009-of-00036.safetensors", + "model.layers.11.mlp.gate.weight": "model-00009-of-00036.safetensors", + "model.layers.11.mlp.switch_mlp.down_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.11.mlp.switch_mlp.down_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.11.mlp.switch_mlp.gate_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.11.mlp.switch_mlp.gate_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.11.mlp.switch_mlp.up_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.11.mlp.switch_mlp.up_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.11.post_attention_layernorm.weight": "model-00009-of-00036.safetensors", + "model.layers.11.self_attn.k_proj.biases": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.k_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.k_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.o_proj.biases": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.o_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.o_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.q_proj.biases": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.q_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.q_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.v_proj.biases": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.v_proj.scales": "model-00008-of-00036.safetensors", + "model.layers.11.self_attn.v_proj.weight": "model-00008-of-00036.safetensors", + "model.layers.12.input_layernorm.weight": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.gate.e_score_correction_bias": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.gate.weight": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.switch_mlp.down_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.switch_mlp.down_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.switch_mlp.gate_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.switch_mlp.gate_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.switch_mlp.up_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.mlp.switch_mlp.up_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.12.post_attention_layernorm.weight": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.attention_sink_bias": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.k_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.k_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.k_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.o_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.o_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.o_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.q_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.q_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.q_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.v_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.v_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.12.self_attn.v_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.13.input_layernorm.weight": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.gate.e_score_correction_bias": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.gate.weight": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.switch_mlp.down_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.switch_mlp.down_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.switch_mlp.gate_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.switch_mlp.gate_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.switch_mlp.up_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.13.mlp.switch_mlp.up_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.13.post_attention_layernorm.weight": "model-00010-of-00036.safetensors", + "model.layers.13.self_attn.attention_sink_bias": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.k_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.k_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.k_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.o_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.o_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.o_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.q_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.q_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.q_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.v_proj.biases": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.v_proj.scales": "model-00009-of-00036.safetensors", + "model.layers.13.self_attn.v_proj.weight": "model-00009-of-00036.safetensors", + "model.layers.14.input_layernorm.weight": "model-00011-of-00036.safetensors", + "model.layers.14.mlp.gate.e_score_correction_bias": "model-00011-of-00036.safetensors", + "model.layers.14.mlp.gate.weight": "model-00011-of-00036.safetensors", + "model.layers.14.mlp.switch_mlp.down_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.14.mlp.switch_mlp.down_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.14.mlp.switch_mlp.gate_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.14.mlp.switch_mlp.gate_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.14.mlp.switch_mlp.up_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.14.mlp.switch_mlp.up_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.14.post_attention_layernorm.weight": "model-00011-of-00036.safetensors", + "model.layers.14.self_attn.attention_sink_bias": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.k_proj.biases": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.k_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.k_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.o_proj.biases": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.o_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.o_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.q_proj.biases": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.q_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.q_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.v_proj.biases": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.v_proj.scales": "model-00010-of-00036.safetensors", + "model.layers.14.self_attn.v_proj.weight": "model-00010-of-00036.safetensors", + "model.layers.15.input_layernorm.weight": "model-00012-of-00036.safetensors", + "model.layers.15.mlp.gate.e_score_correction_bias": "model-00012-of-00036.safetensors", + "model.layers.15.mlp.gate.weight": "model-00012-of-00036.safetensors", + "model.layers.15.mlp.switch_mlp.down_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.15.mlp.switch_mlp.down_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.15.mlp.switch_mlp.gate_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.15.mlp.switch_mlp.gate_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.15.mlp.switch_mlp.up_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.15.mlp.switch_mlp.up_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.15.post_attention_layernorm.weight": "model-00012-of-00036.safetensors", + "model.layers.15.self_attn.attention_sink_bias": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.k_proj.biases": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.k_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.k_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.o_proj.biases": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.o_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.o_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.q_proj.biases": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.q_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.q_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.v_proj.biases": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.v_proj.scales": "model-00011-of-00036.safetensors", + "model.layers.15.self_attn.v_proj.weight": "model-00011-of-00036.safetensors", + "model.layers.16.input_layernorm.weight": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.gate.e_score_correction_bias": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.gate.weight": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.switch_mlp.down_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.switch_mlp.down_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.switch_mlp.gate_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.switch_mlp.gate_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.switch_mlp.up_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.mlp.switch_mlp.up_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.16.post_attention_layernorm.weight": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.attention_sink_bias": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.k_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.k_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.k_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.o_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.o_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.o_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.q_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.q_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.q_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.v_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.v_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.16.self_attn.v_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.17.input_layernorm.weight": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.gate.e_score_correction_bias": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.gate.weight": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.switch_mlp.down_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.switch_mlp.down_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.switch_mlp.gate_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.switch_mlp.gate_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.switch_mlp.up_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.17.mlp.switch_mlp.up_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.17.post_attention_layernorm.weight": "model-00013-of-00036.safetensors", + "model.layers.17.self_attn.k_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.k_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.k_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.o_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.o_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.o_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.q_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.q_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.q_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.v_proj.biases": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.v_proj.scales": "model-00012-of-00036.safetensors", + "model.layers.17.self_attn.v_proj.weight": "model-00012-of-00036.safetensors", + "model.layers.18.input_layernorm.weight": "model-00014-of-00036.safetensors", + "model.layers.18.mlp.gate.e_score_correction_bias": "model-00014-of-00036.safetensors", + "model.layers.18.mlp.gate.weight": "model-00014-of-00036.safetensors", + "model.layers.18.mlp.switch_mlp.down_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.18.mlp.switch_mlp.down_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.18.mlp.switch_mlp.gate_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.18.mlp.switch_mlp.gate_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.18.mlp.switch_mlp.up_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.18.mlp.switch_mlp.up_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.18.post_attention_layernorm.weight": "model-00014-of-00036.safetensors", + "model.layers.18.self_attn.attention_sink_bias": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.k_proj.biases": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.k_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.k_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.o_proj.biases": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.o_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.o_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.q_proj.biases": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.q_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.q_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.v_proj.biases": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.v_proj.scales": "model-00013-of-00036.safetensors", + "model.layers.18.self_attn.v_proj.weight": "model-00013-of-00036.safetensors", + "model.layers.19.input_layernorm.weight": "model-00015-of-00036.safetensors", + "model.layers.19.mlp.gate.e_score_correction_bias": "model-00015-of-00036.safetensors", + "model.layers.19.mlp.gate.weight": "model-00015-of-00036.safetensors", + "model.layers.19.mlp.switch_mlp.down_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.19.mlp.switch_mlp.down_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.19.mlp.switch_mlp.gate_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.19.mlp.switch_mlp.gate_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.19.mlp.switch_mlp.up_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.19.mlp.switch_mlp.up_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.19.post_attention_layernorm.weight": "model-00015-of-00036.safetensors", + "model.layers.19.self_attn.attention_sink_bias": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.k_proj.biases": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.k_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.k_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.o_proj.biases": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.o_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.o_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.q_proj.biases": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.q_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.q_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.v_proj.biases": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.v_proj.scales": "model-00014-of-00036.safetensors", + "model.layers.19.self_attn.v_proj.weight": "model-00014-of-00036.safetensors", + "model.layers.2.input_layernorm.weight": "model-00002-of-00036.safetensors", + "model.layers.2.mlp.gate.e_score_correction_bias": "model-00002-of-00036.safetensors", + "model.layers.2.mlp.gate.weight": "model-00002-of-00036.safetensors", + "model.layers.2.mlp.switch_mlp.down_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.2.mlp.switch_mlp.down_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.2.mlp.switch_mlp.gate_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.2.mlp.switch_mlp.gate_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.2.mlp.switch_mlp.up_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.2.mlp.switch_mlp.up_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.2.post_attention_layernorm.weight": "model-00002-of-00036.safetensors", + "model.layers.2.self_attn.attention_sink_bias": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.k_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.k_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.k_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.o_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.o_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.o_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.q_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.q_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.q_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.v_proj.biases": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.v_proj.scales": "model-00001-of-00036.safetensors", + "model.layers.2.self_attn.v_proj.weight": "model-00001-of-00036.safetensors", + "model.layers.20.input_layernorm.weight": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.gate.e_score_correction_bias": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.gate.weight": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.switch_mlp.down_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.switch_mlp.down_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.switch_mlp.gate_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.switch_mlp.gate_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.switch_mlp.up_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.mlp.switch_mlp.up_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.20.post_attention_layernorm.weight": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.attention_sink_bias": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.k_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.k_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.k_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.o_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.o_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.o_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.q_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.q_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.q_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.v_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.v_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.20.self_attn.v_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.21.input_layernorm.weight": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.gate.e_score_correction_bias": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.gate.weight": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.switch_mlp.down_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.switch_mlp.down_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.switch_mlp.gate_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.switch_mlp.gate_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.switch_mlp.up_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.21.mlp.switch_mlp.up_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.21.post_attention_layernorm.weight": "model-00016-of-00036.safetensors", + "model.layers.21.self_attn.attention_sink_bias": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.k_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.k_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.k_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.o_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.o_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.o_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.q_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.q_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.q_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.v_proj.biases": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.v_proj.scales": "model-00015-of-00036.safetensors", + "model.layers.21.self_attn.v_proj.weight": "model-00015-of-00036.safetensors", + "model.layers.22.input_layernorm.weight": "model-00017-of-00036.safetensors", + "model.layers.22.mlp.gate.e_score_correction_bias": "model-00017-of-00036.safetensors", + "model.layers.22.mlp.gate.weight": "model-00017-of-00036.safetensors", + "model.layers.22.mlp.switch_mlp.down_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.22.mlp.switch_mlp.down_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.22.mlp.switch_mlp.gate_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.22.mlp.switch_mlp.gate_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.22.mlp.switch_mlp.up_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.22.mlp.switch_mlp.up_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.22.post_attention_layernorm.weight": "model-00017-of-00036.safetensors", + "model.layers.22.self_attn.attention_sink_bias": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.k_proj.biases": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.k_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.k_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.o_proj.biases": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.o_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.o_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.q_proj.biases": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.q_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.q_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.v_proj.biases": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.v_proj.scales": "model-00016-of-00036.safetensors", + "model.layers.22.self_attn.v_proj.weight": "model-00016-of-00036.safetensors", + "model.layers.23.input_layernorm.weight": "model-00018-of-00036.safetensors", + "model.layers.23.mlp.gate.e_score_correction_bias": "model-00018-of-00036.safetensors", + "model.layers.23.mlp.gate.weight": "model-00018-of-00036.safetensors", + "model.layers.23.mlp.switch_mlp.down_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.23.mlp.switch_mlp.down_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.23.mlp.switch_mlp.gate_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.23.mlp.switch_mlp.gate_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.23.mlp.switch_mlp.up_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.23.mlp.switch_mlp.up_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.23.post_attention_layernorm.weight": "model-00018-of-00036.safetensors", + "model.layers.23.self_attn.k_proj.biases": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.k_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.k_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.o_proj.biases": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.o_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.o_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.q_proj.biases": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.q_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.q_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.v_proj.biases": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.v_proj.scales": "model-00017-of-00036.safetensors", + "model.layers.23.self_attn.v_proj.weight": "model-00017-of-00036.safetensors", + "model.layers.24.input_layernorm.weight": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.gate.e_score_correction_bias": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.gate.weight": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.switch_mlp.down_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.switch_mlp.down_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.switch_mlp.gate_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.switch_mlp.gate_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.switch_mlp.up_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.mlp.switch_mlp.up_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.24.post_attention_layernorm.weight": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.attention_sink_bias": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.k_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.k_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.k_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.o_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.o_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.o_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.q_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.q_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.q_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.v_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.v_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.24.self_attn.v_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.25.input_layernorm.weight": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.gate.e_score_correction_bias": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.gate.weight": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.switch_mlp.down_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.switch_mlp.down_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.switch_mlp.gate_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.switch_mlp.gate_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.switch_mlp.up_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.25.mlp.switch_mlp.up_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.25.post_attention_layernorm.weight": "model-00019-of-00036.safetensors", + "model.layers.25.self_attn.attention_sink_bias": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.k_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.k_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.k_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.o_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.o_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.o_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.q_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.q_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.q_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.v_proj.biases": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.v_proj.scales": "model-00018-of-00036.safetensors", + "model.layers.25.self_attn.v_proj.weight": "model-00018-of-00036.safetensors", + "model.layers.26.input_layernorm.weight": "model-00020-of-00036.safetensors", + "model.layers.26.mlp.gate.e_score_correction_bias": "model-00020-of-00036.safetensors", + "model.layers.26.mlp.gate.weight": "model-00020-of-00036.safetensors", + "model.layers.26.mlp.switch_mlp.down_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.26.mlp.switch_mlp.down_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.26.mlp.switch_mlp.gate_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.26.mlp.switch_mlp.gate_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.26.mlp.switch_mlp.up_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.26.mlp.switch_mlp.up_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.26.post_attention_layernorm.weight": "model-00020-of-00036.safetensors", + "model.layers.26.self_attn.attention_sink_bias": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.k_proj.biases": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.k_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.k_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.o_proj.biases": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.o_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.o_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.q_proj.biases": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.q_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.q_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.v_proj.biases": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.v_proj.scales": "model-00019-of-00036.safetensors", + "model.layers.26.self_attn.v_proj.weight": "model-00019-of-00036.safetensors", + "model.layers.27.input_layernorm.weight": "model-00021-of-00036.safetensors", + "model.layers.27.mlp.gate.e_score_correction_bias": "model-00021-of-00036.safetensors", + "model.layers.27.mlp.gate.weight": "model-00021-of-00036.safetensors", + "model.layers.27.mlp.switch_mlp.down_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.27.mlp.switch_mlp.down_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.27.mlp.switch_mlp.gate_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.27.mlp.switch_mlp.gate_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.27.mlp.switch_mlp.up_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.27.mlp.switch_mlp.up_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.27.post_attention_layernorm.weight": "model-00021-of-00036.safetensors", + "model.layers.27.self_attn.attention_sink_bias": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.k_proj.biases": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.k_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.k_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.o_proj.biases": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.o_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.o_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.q_proj.biases": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.q_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.q_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.v_proj.biases": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.v_proj.scales": "model-00020-of-00036.safetensors", + "model.layers.27.self_attn.v_proj.weight": "model-00020-of-00036.safetensors", + "model.layers.28.input_layernorm.weight": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.gate.e_score_correction_bias": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.gate.weight": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.switch_mlp.down_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.switch_mlp.down_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.switch_mlp.gate_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.switch_mlp.gate_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.switch_mlp.up_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.mlp.switch_mlp.up_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.28.post_attention_layernorm.weight": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.attention_sink_bias": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.k_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.k_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.k_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.o_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.o_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.o_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.q_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.q_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.q_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.v_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.v_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.28.self_attn.v_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.29.input_layernorm.weight": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.gate.e_score_correction_bias": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.gate.weight": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.switch_mlp.down_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.switch_mlp.down_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.switch_mlp.gate_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.switch_mlp.gate_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.switch_mlp.up_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.29.mlp.switch_mlp.up_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.29.post_attention_layernorm.weight": "model-00022-of-00036.safetensors", + "model.layers.29.self_attn.k_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.k_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.k_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.o_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.o_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.o_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.q_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.q_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.q_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.v_proj.biases": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.v_proj.scales": "model-00021-of-00036.safetensors", + "model.layers.29.self_attn.v_proj.weight": "model-00021-of-00036.safetensors", + "model.layers.3.input_layernorm.weight": "model-00003-of-00036.safetensors", + "model.layers.3.mlp.gate.e_score_correction_bias": "model-00003-of-00036.safetensors", + "model.layers.3.mlp.gate.weight": "model-00003-of-00036.safetensors", + "model.layers.3.mlp.switch_mlp.down_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.3.mlp.switch_mlp.down_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.3.mlp.switch_mlp.gate_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.3.mlp.switch_mlp.gate_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.3.mlp.switch_mlp.up_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.3.mlp.switch_mlp.up_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.3.post_attention_layernorm.weight": "model-00003-of-00036.safetensors", + "model.layers.3.self_attn.attention_sink_bias": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.k_proj.biases": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.k_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.k_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.o_proj.biases": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.o_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.o_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.q_proj.biases": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.q_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.q_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.v_proj.biases": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.v_proj.scales": "model-00002-of-00036.safetensors", + "model.layers.3.self_attn.v_proj.weight": "model-00002-of-00036.safetensors", + "model.layers.30.input_layernorm.weight": "model-00023-of-00036.safetensors", + "model.layers.30.mlp.gate.e_score_correction_bias": "model-00023-of-00036.safetensors", + "model.layers.30.mlp.gate.weight": "model-00023-of-00036.safetensors", + "model.layers.30.mlp.switch_mlp.down_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.30.mlp.switch_mlp.down_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.30.mlp.switch_mlp.gate_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.30.mlp.switch_mlp.gate_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.30.mlp.switch_mlp.up_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.30.mlp.switch_mlp.up_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.30.post_attention_layernorm.weight": "model-00023-of-00036.safetensors", + "model.layers.30.self_attn.attention_sink_bias": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.k_proj.biases": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.k_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.k_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.o_proj.biases": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.o_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.o_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.q_proj.biases": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.q_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.q_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.v_proj.biases": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.v_proj.scales": "model-00022-of-00036.safetensors", + "model.layers.30.self_attn.v_proj.weight": "model-00022-of-00036.safetensors", + "model.layers.31.input_layernorm.weight": "model-00024-of-00036.safetensors", + "model.layers.31.mlp.gate.e_score_correction_bias": "model-00024-of-00036.safetensors", + "model.layers.31.mlp.gate.weight": "model-00024-of-00036.safetensors", + "model.layers.31.mlp.switch_mlp.down_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.31.mlp.switch_mlp.down_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.31.mlp.switch_mlp.gate_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.31.mlp.switch_mlp.gate_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.31.mlp.switch_mlp.up_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.31.mlp.switch_mlp.up_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.31.post_attention_layernorm.weight": "model-00024-of-00036.safetensors", + "model.layers.31.self_attn.attention_sink_bias": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.k_proj.biases": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.k_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.k_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.o_proj.biases": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.o_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.o_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.q_proj.biases": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.q_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.q_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.v_proj.biases": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.v_proj.scales": "model-00023-of-00036.safetensors", + "model.layers.31.self_attn.v_proj.weight": "model-00023-of-00036.safetensors", + "model.layers.32.input_layernorm.weight": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.gate.e_score_correction_bias": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.gate.weight": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.switch_mlp.down_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.switch_mlp.down_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.switch_mlp.gate_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.switch_mlp.gate_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.switch_mlp.up_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.mlp.switch_mlp.up_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.32.post_attention_layernorm.weight": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.attention_sink_bias": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.k_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.k_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.k_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.o_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.o_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.o_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.q_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.q_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.q_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.v_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.v_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.32.self_attn.v_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.33.input_layernorm.weight": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.gate.e_score_correction_bias": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.gate.weight": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.switch_mlp.down_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.switch_mlp.down_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.switch_mlp.gate_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.switch_mlp.gate_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.switch_mlp.up_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.33.mlp.switch_mlp.up_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.33.post_attention_layernorm.weight": "model-00025-of-00036.safetensors", + "model.layers.33.self_attn.attention_sink_bias": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.k_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.k_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.k_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.o_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.o_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.o_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.q_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.q_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.q_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.v_proj.biases": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.v_proj.scales": "model-00024-of-00036.safetensors", + "model.layers.33.self_attn.v_proj.weight": "model-00024-of-00036.safetensors", + "model.layers.34.input_layernorm.weight": "model-00026-of-00036.safetensors", + "model.layers.34.mlp.gate.e_score_correction_bias": "model-00026-of-00036.safetensors", + "model.layers.34.mlp.gate.weight": "model-00026-of-00036.safetensors", + "model.layers.34.mlp.switch_mlp.down_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.34.mlp.switch_mlp.down_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.34.mlp.switch_mlp.gate_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.34.mlp.switch_mlp.gate_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.34.mlp.switch_mlp.up_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.34.mlp.switch_mlp.up_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.34.post_attention_layernorm.weight": "model-00026-of-00036.safetensors", + "model.layers.34.self_attn.attention_sink_bias": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.k_proj.biases": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.k_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.k_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.o_proj.biases": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.o_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.o_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.q_proj.biases": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.q_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.q_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.v_proj.biases": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.v_proj.scales": "model-00025-of-00036.safetensors", + "model.layers.34.self_attn.v_proj.weight": "model-00025-of-00036.safetensors", + "model.layers.35.input_layernorm.weight": "model-00027-of-00036.safetensors", + "model.layers.35.mlp.gate.e_score_correction_bias": "model-00027-of-00036.safetensors", + "model.layers.35.mlp.gate.weight": "model-00027-of-00036.safetensors", + "model.layers.35.mlp.switch_mlp.down_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.35.mlp.switch_mlp.down_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.35.mlp.switch_mlp.gate_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.35.mlp.switch_mlp.gate_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.35.mlp.switch_mlp.up_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.35.mlp.switch_mlp.up_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.35.post_attention_layernorm.weight": "model-00027-of-00036.safetensors", + "model.layers.35.self_attn.k_proj.biases": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.k_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.k_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.o_proj.biases": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.o_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.o_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.q_proj.biases": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.q_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.q_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.v_proj.biases": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.v_proj.scales": "model-00026-of-00036.safetensors", + "model.layers.35.self_attn.v_proj.weight": "model-00026-of-00036.safetensors", + "model.layers.36.input_layernorm.weight": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.gate.e_score_correction_bias": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.gate.weight": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.switch_mlp.down_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.switch_mlp.down_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.switch_mlp.gate_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.switch_mlp.gate_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.switch_mlp.up_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.mlp.switch_mlp.up_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.36.post_attention_layernorm.weight": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.attention_sink_bias": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.k_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.k_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.k_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.o_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.o_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.o_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.q_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.q_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.q_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.v_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.v_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.36.self_attn.v_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.37.input_layernorm.weight": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.gate.e_score_correction_bias": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.gate.weight": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.switch_mlp.down_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.switch_mlp.down_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.switch_mlp.gate_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.switch_mlp.gate_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.switch_mlp.up_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.37.mlp.switch_mlp.up_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.37.post_attention_layernorm.weight": "model-00028-of-00036.safetensors", + "model.layers.37.self_attn.attention_sink_bias": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.k_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.k_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.k_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.o_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.o_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.o_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.q_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.q_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.q_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.v_proj.biases": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.v_proj.scales": "model-00027-of-00036.safetensors", + "model.layers.37.self_attn.v_proj.weight": "model-00027-of-00036.safetensors", + "model.layers.38.input_layernorm.weight": "model-00029-of-00036.safetensors", + "model.layers.38.mlp.gate.e_score_correction_bias": "model-00029-of-00036.safetensors", + "model.layers.38.mlp.gate.weight": "model-00029-of-00036.safetensors", + "model.layers.38.mlp.switch_mlp.down_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.38.mlp.switch_mlp.down_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.38.mlp.switch_mlp.gate_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.38.mlp.switch_mlp.gate_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.38.mlp.switch_mlp.up_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.38.mlp.switch_mlp.up_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.38.post_attention_layernorm.weight": "model-00029-of-00036.safetensors", + "model.layers.38.self_attn.attention_sink_bias": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.k_proj.biases": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.k_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.k_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.o_proj.biases": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.o_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.o_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.q_proj.biases": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.q_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.q_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.v_proj.biases": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.v_proj.scales": "model-00028-of-00036.safetensors", + "model.layers.38.self_attn.v_proj.weight": "model-00028-of-00036.safetensors", + "model.layers.39.input_layernorm.weight": "model-00030-of-00036.safetensors", + "model.layers.39.mlp.gate.e_score_correction_bias": "model-00030-of-00036.safetensors", + "model.layers.39.mlp.gate.weight": "model-00030-of-00036.safetensors", + "model.layers.39.mlp.switch_mlp.down_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.39.mlp.switch_mlp.down_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.39.mlp.switch_mlp.gate_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.39.mlp.switch_mlp.gate_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.39.mlp.switch_mlp.up_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.39.mlp.switch_mlp.up_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.39.post_attention_layernorm.weight": "model-00030-of-00036.safetensors", + "model.layers.39.self_attn.attention_sink_bias": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.k_proj.biases": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.k_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.k_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.o_proj.biases": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.o_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.o_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.q_proj.biases": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.q_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.q_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.v_proj.biases": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.v_proj.scales": "model-00029-of-00036.safetensors", + "model.layers.39.self_attn.v_proj.weight": "model-00029-of-00036.safetensors", + "model.layers.4.input_layernorm.weight": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.gate.e_score_correction_bias": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.gate.weight": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.switch_mlp.down_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.switch_mlp.down_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.switch_mlp.gate_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.switch_mlp.gate_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.switch_mlp.up_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.mlp.switch_mlp.up_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.4.post_attention_layernorm.weight": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.attention_sink_bias": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.k_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.k_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.k_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.o_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.o_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.o_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.q_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.q_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.q_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.v_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.v_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.4.self_attn.v_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.40.input_layernorm.weight": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.gate.e_score_correction_bias": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.gate.weight": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.switch_mlp.down_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.switch_mlp.down_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.switch_mlp.gate_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.switch_mlp.gate_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.switch_mlp.up_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.mlp.switch_mlp.up_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.40.post_attention_layernorm.weight": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.attention_sink_bias": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.k_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.k_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.k_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.o_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.o_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.o_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.q_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.q_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.q_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.v_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.v_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.40.self_attn.v_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.41.input_layernorm.weight": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.gate.e_score_correction_bias": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.gate.weight": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.switch_mlp.down_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.switch_mlp.down_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.switch_mlp.gate_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.switch_mlp.gate_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.switch_mlp.up_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.41.mlp.switch_mlp.up_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.41.post_attention_layernorm.weight": "model-00031-of-00036.safetensors", + "model.layers.41.self_attn.k_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.k_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.k_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.o_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.o_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.o_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.q_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.q_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.q_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.v_proj.biases": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.v_proj.scales": "model-00030-of-00036.safetensors", + "model.layers.41.self_attn.v_proj.weight": "model-00030-of-00036.safetensors", + "model.layers.42.input_layernorm.weight": "model-00032-of-00036.safetensors", + "model.layers.42.mlp.gate.e_score_correction_bias": "model-00032-of-00036.safetensors", + "model.layers.42.mlp.gate.weight": "model-00032-of-00036.safetensors", + "model.layers.42.mlp.switch_mlp.down_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.42.mlp.switch_mlp.down_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.42.mlp.switch_mlp.gate_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.42.mlp.switch_mlp.gate_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.42.mlp.switch_mlp.up_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.42.mlp.switch_mlp.up_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.42.post_attention_layernorm.weight": "model-00032-of-00036.safetensors", + "model.layers.42.self_attn.attention_sink_bias": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.k_proj.biases": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.k_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.k_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.o_proj.biases": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.o_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.o_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.q_proj.biases": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.q_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.q_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.v_proj.biases": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.v_proj.scales": "model-00031-of-00036.safetensors", + "model.layers.42.self_attn.v_proj.weight": "model-00031-of-00036.safetensors", + "model.layers.43.input_layernorm.weight": "model-00033-of-00036.safetensors", + "model.layers.43.mlp.gate.e_score_correction_bias": "model-00033-of-00036.safetensors", + "model.layers.43.mlp.gate.weight": "model-00033-of-00036.safetensors", + "model.layers.43.mlp.switch_mlp.down_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.43.mlp.switch_mlp.down_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.43.mlp.switch_mlp.gate_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.43.mlp.switch_mlp.gate_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.43.mlp.switch_mlp.up_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.43.mlp.switch_mlp.up_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.43.post_attention_layernorm.weight": "model-00033-of-00036.safetensors", + "model.layers.43.self_attn.attention_sink_bias": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.k_proj.biases": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.k_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.k_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.o_proj.biases": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.o_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.o_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.q_proj.biases": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.q_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.q_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.v_proj.biases": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.v_proj.scales": "model-00032-of-00036.safetensors", + "model.layers.43.self_attn.v_proj.weight": "model-00032-of-00036.safetensors", + "model.layers.44.input_layernorm.weight": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.gate.e_score_correction_bias": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.gate.weight": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.switch_mlp.down_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.switch_mlp.down_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.switch_mlp.gate_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.switch_mlp.gate_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.switch_mlp.up_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.mlp.switch_mlp.up_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.44.post_attention_layernorm.weight": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.attention_sink_bias": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.k_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.k_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.k_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.o_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.o_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.o_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.q_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.q_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.q_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.v_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.v_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.44.self_attn.v_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.45.input_layernorm.weight": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.gate.e_score_correction_bias": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.gate.weight": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.switch_mlp.down_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.switch_mlp.down_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.switch_mlp.gate_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.switch_mlp.gate_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.switch_mlp.up_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.45.mlp.switch_mlp.up_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.45.post_attention_layernorm.weight": "model-00034-of-00036.safetensors", + "model.layers.45.self_attn.attention_sink_bias": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.k_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.k_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.k_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.o_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.o_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.o_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.q_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.q_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.q_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.v_proj.biases": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.v_proj.scales": "model-00033-of-00036.safetensors", + "model.layers.45.self_attn.v_proj.weight": "model-00033-of-00036.safetensors", + "model.layers.46.input_layernorm.weight": "model-00035-of-00036.safetensors", + "model.layers.46.mlp.gate.e_score_correction_bias": "model-00035-of-00036.safetensors", + "model.layers.46.mlp.gate.weight": "model-00035-of-00036.safetensors", + "model.layers.46.mlp.switch_mlp.down_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.46.mlp.switch_mlp.down_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.46.mlp.switch_mlp.gate_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.46.mlp.switch_mlp.gate_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.46.mlp.switch_mlp.up_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.46.mlp.switch_mlp.up_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.46.post_attention_layernorm.weight": "model-00035-of-00036.safetensors", + "model.layers.46.self_attn.attention_sink_bias": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.k_proj.biases": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.k_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.k_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.o_proj.biases": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.o_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.o_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.q_proj.biases": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.q_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.q_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.v_proj.biases": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.v_proj.scales": "model-00034-of-00036.safetensors", + "model.layers.46.self_attn.v_proj.weight": "model-00034-of-00036.safetensors", + "model.layers.47.input_layernorm.weight": "model-00036-of-00036.safetensors", + "model.layers.47.mlp.gate.e_score_correction_bias": "model-00036-of-00036.safetensors", + "model.layers.47.mlp.gate.weight": "model-00036-of-00036.safetensors", + "model.layers.47.mlp.switch_mlp.down_proj.scales": "model-00036-of-00036.safetensors", + "model.layers.47.mlp.switch_mlp.down_proj.weight": "model-00036-of-00036.safetensors", + "model.layers.47.mlp.switch_mlp.gate_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.47.mlp.switch_mlp.gate_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.47.mlp.switch_mlp.up_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.47.mlp.switch_mlp.up_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.47.post_attention_layernorm.weight": "model-00036-of-00036.safetensors", + "model.layers.47.self_attn.k_proj.biases": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.k_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.k_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.o_proj.biases": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.o_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.o_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.q_proj.biases": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.q_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.q_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.v_proj.biases": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.v_proj.scales": "model-00035-of-00036.safetensors", + "model.layers.47.self_attn.v_proj.weight": "model-00035-of-00036.safetensors", + "model.layers.5.input_layernorm.weight": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.gate.e_score_correction_bias": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.gate.weight": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.switch_mlp.down_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.switch_mlp.down_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.switch_mlp.gate_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.switch_mlp.gate_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.switch_mlp.up_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.5.mlp.switch_mlp.up_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.5.post_attention_layernorm.weight": "model-00004-of-00036.safetensors", + "model.layers.5.self_attn.k_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.k_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.k_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.o_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.o_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.o_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.q_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.q_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.q_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.v_proj.biases": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.v_proj.scales": "model-00003-of-00036.safetensors", + "model.layers.5.self_attn.v_proj.weight": "model-00003-of-00036.safetensors", + "model.layers.6.input_layernorm.weight": "model-00005-of-00036.safetensors", + "model.layers.6.mlp.gate.e_score_correction_bias": "model-00005-of-00036.safetensors", + "model.layers.6.mlp.gate.weight": "model-00005-of-00036.safetensors", + "model.layers.6.mlp.switch_mlp.down_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.6.mlp.switch_mlp.down_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.6.mlp.switch_mlp.gate_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.6.mlp.switch_mlp.gate_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.6.mlp.switch_mlp.up_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.6.mlp.switch_mlp.up_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.6.post_attention_layernorm.weight": "model-00005-of-00036.safetensors", + "model.layers.6.self_attn.attention_sink_bias": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.k_proj.biases": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.k_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.k_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.o_proj.biases": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.o_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.o_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.q_proj.biases": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.q_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.q_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.v_proj.biases": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.v_proj.scales": "model-00004-of-00036.safetensors", + "model.layers.6.self_attn.v_proj.weight": "model-00004-of-00036.safetensors", + "model.layers.7.input_layernorm.weight": "model-00006-of-00036.safetensors", + "model.layers.7.mlp.gate.e_score_correction_bias": "model-00006-of-00036.safetensors", + "model.layers.7.mlp.gate.weight": "model-00006-of-00036.safetensors", + "model.layers.7.mlp.switch_mlp.down_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.7.mlp.switch_mlp.down_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.7.mlp.switch_mlp.gate_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.7.mlp.switch_mlp.gate_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.7.mlp.switch_mlp.up_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.7.mlp.switch_mlp.up_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.7.post_attention_layernorm.weight": "model-00006-of-00036.safetensors", + "model.layers.7.self_attn.attention_sink_bias": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.k_proj.biases": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.k_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.k_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.o_proj.biases": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.o_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.o_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.q_proj.biases": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.q_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.q_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.v_proj.biases": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.v_proj.scales": "model-00005-of-00036.safetensors", + "model.layers.7.self_attn.v_proj.weight": "model-00005-of-00036.safetensors", + "model.layers.8.input_layernorm.weight": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.gate.e_score_correction_bias": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.gate.weight": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.switch_mlp.down_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.switch_mlp.down_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.switch_mlp.gate_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.switch_mlp.gate_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.switch_mlp.up_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.mlp.switch_mlp.up_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.8.post_attention_layernorm.weight": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.attention_sink_bias": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.k_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.k_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.k_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.o_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.o_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.o_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.q_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.q_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.q_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.v_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.v_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.8.self_attn.v_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.9.input_layernorm.weight": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.gate.e_score_correction_bias": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.gate.weight": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.switch_mlp.down_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.switch_mlp.down_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.switch_mlp.gate_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.switch_mlp.gate_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.switch_mlp.up_proj.scales": "model-00007-of-00036.safetensors", + "model.layers.9.mlp.switch_mlp.up_proj.weight": "model-00007-of-00036.safetensors", + "model.layers.9.post_attention_layernorm.weight": "model-00007-of-00036.safetensors", + "model.layers.9.self_attn.attention_sink_bias": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.k_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.k_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.k_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.o_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.o_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.o_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.q_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.q_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.q_proj.weight": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.v_proj.biases": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.v_proj.scales": "model-00006-of-00036.safetensors", + "model.layers.9.self_attn.v_proj.weight": "model-00006-of-00036.safetensors", + "model.norm.weight": "model-00036-of-00036.safetensors" + } +} \ No newline at end of file diff --git a/modeling_mimo_v2.py b/modeling_mimo_v2.py new file mode 100644 index 0000000000000000000000000000000000000000..40225ab4e30d790eab2a4dbbd74690dbb71c55ad --- /dev/null +++ b/modeling_mimo_v2.py @@ -0,0 +1,1878 @@ +# coding=utf-8 +# +# Copyright 2026 Xiaomi Corporation. +# Copyright 2026 The HuggingFace Inc. team. +# +# 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. + +import math +from copy import copy +from types import SimpleNamespace +from typing import Callable, Optional, Union + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from transformers.activations import ACT2FN +from transformers.cache_utils import Cache, DynamicCache +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin +from transformers.integrations import use_kernel_forward_from_hub +from transformers.masking_utils import create_causal_mask, create_sliding_window_causal_mask +from transformers.modeling_outputs import BaseModelOutputWithPast, CausalLMOutputWithPast +from transformers.modeling_rope_utils import ROPE_INIT_FUNCTIONS, dynamic_rope_update +from transformers.modeling_utils import ALL_ATTENTION_FUNCTIONS, PreTrainedModel +from transformers.models.qwen2.configuration_qwen2 import Qwen2Config +from transformers.models.qwen2.modeling_qwen2 import Qwen2Model +from transformers.processing_utils import Unpack +from transformers.utils import TransformersKwargs, can_return_tuple, logging + +from .configuration_mimo_v2 import MiMoV2Config + + +logger = logging.get_logger(__name__) + + +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 query and key tensors.""" + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + q_embed = (q * cos) + (rotate_half(q) * sin) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor: + 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) + + +def eager_attention_forward( + module: nn.Module, + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + attention_mask: Optional[torch.Tensor], + scaling: float, + dropout: float = 0.0, + sinks: Optional[torch.Tensor] = None, + **kwargs, +): + key_states = repeat_kv(key, module.num_key_value_groups) + value_states = repeat_kv(value, module.num_key_value_groups) + attn_weights = torch.matmul(query, key_states.transpose(2, 3)) * scaling + if attention_mask is not None: + causal_mask = attention_mask[:, :, :, : key_states.shape[-2]] + attn_weights = attn_weights + causal_mask + + if sinks is not None: + sinks = module.attention_sink_bias.reshape(1, -1, 1, 1).expand(query.shape[0], -1, query.shape[-2], -1) + attn_weights = torch.cat([attn_weights, sinks], dim=-1) + + attn_weights = attn_weights - attn_weights.max(dim=-1, keepdim=True).values + probs = F.softmax(attn_weights, dim=-1, dtype=torch.float32).to(query.dtype) + + if sinks is not None: + probs = probs[..., :-1] + + attn_weights = nn.functional.dropout(probs, p=dropout, training=module.training) + attn_output = torch.matmul(attn_weights, value_states) + attn_output = attn_output.transpose(1, 2).contiguous() + return attn_output, attn_weights + + +@use_kernel_forward_from_hub("RMSNorm") +class MiMoV2RMSNorm(nn.Module): + def __init__(self, hidden_size, eps=1e-6): + 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) + + +class MiMoV2MLP(nn.Module): + def __init__(self, config, intermediate_size=None): + super().__init__() + self.config = config + self.hidden_size = config.hidden_size + self.intermediate_size = config.intermediate_size if intermediate_size is None else intermediate_size + self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False) + self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False) + self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False) + self.act_fn = ACT2FN[config.hidden_act] + + def forward(self, hidden_states): + return self.down_proj(self.act_fn(self.gate_proj(hidden_states)) * self.up_proj(hidden_states)) + + +class MiMoV2MoEGate(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.top_k = config.num_experts_per_tok + self.n_routed_experts = config.n_routed_experts + self.routed_scaling_factor = config.routed_scaling_factor if config.routed_scaling_factor is not None else 1.0 + self.scoring_func = config.scoring_func + self.topk_method = config.topk_method + self.n_group = config.n_group + self.topk_group = config.topk_group + self.norm_topk_prob = config.norm_topk_prob + self.gating_dim = config.hidden_size + self.weight = nn.Parameter(torch.empty((self.n_routed_experts, self.gating_dim))) + if self.topk_method == "noaux_tc": + self.e_score_correction_bias = nn.Parameter(torch.empty((self.n_routed_experts))) + + def forward(self, hidden_states): + bsz, seq_len, h = hidden_states.shape + hidden_states = hidden_states.view(-1, h) + logits = F.linear(hidden_states.type(torch.float32), self.weight.type(torch.float32), None) + if self.scoring_func == "sigmoid": + scores = logits.sigmoid() + else: + raise NotImplementedError(f"Unsupported scoring function for MoE gating: {self.scoring_func}") + + if self.topk_method == "noaux_tc": + if self.training: + raise ValueError("MiMoV2 noaux_tc routing is only implemented for inference.") + scores_for_choice = scores.view(bsz * seq_len, -1) + self.e_score_correction_bias.unsqueeze(0) + group_scores = scores_for_choice.view(bsz * seq_len, self.n_group, -1).topk(2, dim=-1)[0].sum(dim=-1) + group_idx = torch.topk(group_scores, k=self.topk_group, dim=-1, sorted=False)[1] + group_mask = torch.zeros_like(group_scores) + group_mask.scatter_(1, group_idx, 1) + score_mask = ( + group_mask.unsqueeze(-1) + .expand(bsz * seq_len, self.n_group, self.n_routed_experts // self.n_group) + .reshape(bsz * seq_len, -1) + ) + tmp_scores = scores_for_choice.masked_fill(~score_mask.bool(), float("-inf")) + _, topk_idx = torch.topk(tmp_scores, k=self.top_k, dim=-1, sorted=False) + topk_weight = scores.gather(1, topk_idx) + else: + raise NotImplementedError(f"Unsupported TopK function for MoE gating: {self.topk_method}") + + if self.top_k > 1 and self.norm_topk_prob: + denominator = topk_weight.sum(dim=-1, keepdim=True) + 1e-20 + topk_weight = topk_weight / denominator + topk_weight = topk_weight * self.routed_scaling_factor + return topk_idx, topk_weight + + +class MiMoV2MoE(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.experts = nn.ModuleList( + [MiMoV2MLP(config, intermediate_size=config.moe_intermediate_size) for _ in range(config.n_routed_experts)] + ) + self.gate = MiMoV2MoEGate(config) + + def moe(self, hidden_states: torch.Tensor, topk_indices: torch.Tensor, topk_weights: torch.Tensor): + final_hidden_states = torch.zeros_like(hidden_states, dtype=topk_weights.dtype) + expert_mask = torch.nn.functional.one_hot(topk_indices, num_classes=len(self.experts)) + expert_mask = expert_mask.permute(2, 0, 1) + + for expert_idx, expert in enumerate(self.experts): + mask = expert_mask[expert_idx] + token_indices, weight_indices = torch.where(mask) + if token_indices.numel() > 0: + expert_weights = topk_weights[token_indices, weight_indices] + expert_input = hidden_states[token_indices] + expert_output = expert(expert_input) + final_hidden_states.index_add_(0, token_indices, expert_output * expert_weights.unsqueeze(-1)) + + return final_hidden_states.type(hidden_states.dtype) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + orig_shape = hidden_states.shape + topk_indices, topk_weights = self.gate(hidden_states) + hidden_states = hidden_states.view(-1, hidden_states.shape[-1]) + hidden_states = self.moe(hidden_states, topk_indices, topk_weights).view(*orig_shape) + return hidden_states + + +class MiMoV2Attention(nn.Module): + """MiMoV2 attention. + + `projection_layout` only controls how checkpoint weights are named and + stored: Flash uses separate q/k/v projections, while Pro uses fused qkv. + The attention computation after projection is shared. + """ + + def __init__(self, config, is_swa: bool, layer_idx: int, projection_layout: str = "split"): + super().__init__() + if projection_layout not in {"split", "fused_qkv"}: + raise ValueError(f"Unsupported MiMoV2 attention projection layout: {projection_layout}") + + self.config = config + self.layer_idx = layer_idx + self.is_swa = is_swa + self.is_causal = True + self.projection_layout = projection_layout + + default_head_dim = config.hidden_size // config.num_attention_heads + default_v_head_dim = getattr(config, "v_head_dim", default_head_dim) + + if is_swa: + self.head_dim = getattr(config, "swa_head_dim", getattr(config, "head_dim", default_head_dim)) + self.v_head_dim = getattr(config, "swa_v_head_dim", default_v_head_dim) + self.num_attention_heads = getattr(config, "swa_num_attention_heads", config.num_attention_heads) + self.num_key_value_heads = getattr(config, "swa_num_key_value_heads", config.num_key_value_heads) + else: + self.head_dim = getattr(config, "head_dim", default_head_dim) + self.v_head_dim = getattr(config, "v_head_dim", self.head_dim) + self.num_attention_heads = config.num_attention_heads + self.num_key_value_heads = config.num_key_value_heads + + self.rope_dim = int(self.head_dim * getattr(config, "partial_rotary_factor", 1.0)) + if self.rope_dim % 2 != 0: + raise ValueError( + f"MiMoV2 rotary dimension must be even, got {self.rope_dim} from " + f"head_dim={self.head_dim} and partial_rotary_factor={getattr(config, 'partial_rotary_factor', 1.0)}" + ) + self.num_key_value_groups = self.num_attention_heads // self.num_key_value_heads + self.attention_dropout = getattr(config, "attention_dropout", 0.0) + self.scaling = self.head_dim**-0.5 + self.sliding_window = getattr(config, "sliding_window", None) if is_swa else None + self.q_size = self.num_attention_heads * self.head_dim + self.k_size = self.num_key_value_heads * self.head_dim + self.v_size = self.num_key_value_heads * self.v_head_dim + self.o_hidden_size = self.num_attention_heads * self.v_head_dim + self.v_scale = getattr(config, "attention_value_scale", None) + self.attention_sink_bias = ( + nn.Parameter(torch.empty(self.num_attention_heads), requires_grad=False) + if ( + (getattr(config, "add_full_attention_sink_bias", False) and not is_swa) + or (getattr(config, "add_swa_attention_sink_bias", False) and is_swa) + ) + else None + ) + + attention_bias = getattr(config, "attention_bias", False) + if self.projection_layout == "fused_qkv": + self.qkv_proj = nn.Linear( + config.hidden_size, + self.q_size + self.k_size + self.v_size, + bias=attention_bias, + ) + else: + self.q_proj = nn.Linear(config.hidden_size, self.q_size, bias=attention_bias) + self.k_proj = nn.Linear(config.hidden_size, self.k_size, bias=attention_bias) + self.v_proj = nn.Linear(config.hidden_size, self.v_size, bias=attention_bias) + self.o_proj = nn.Linear(self.o_hidden_size, config.hidden_size, bias=False) + + def _forward_attention( + self, + query_states: torch.Tensor, + key_states: torch.Tensor, + value_states: torch.Tensor, + input_shape: torch.Size, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + attention_mask: Optional[torch.Tensor], + past_key_values: Optional[Cache] = None, + cache_position: Optional[torch.LongTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + ) -> tuple[torch.Tensor, torch.Tensor]: + if self.v_scale is not None: + value_states = value_states * self.v_scale + + cos, sin = position_embeddings + query_rope, query_nope = query_states.split([self.rope_dim, self.head_dim - self.rope_dim], dim=-1) + key_rope, key_nope = key_states.split([self.rope_dim, self.head_dim - self.rope_dim], dim=-1) + query_rope, key_rope = apply_rotary_pos_emb(query_rope, key_rope, cos, sin) + query_states = torch.cat([query_rope, query_nope], dim=-1) + key_states = torch.cat([key_rope, key_nope], dim=-1) + + if past_key_values is not None: + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} + key_states, value_states = past_key_values.update(key_states, value_states, self.layer_idx, cache_kwargs) + + attn_implementation = self.config._attn_implementation + if attn_implementation is not None and attn_implementation.startswith("paged|"): + raise ValueError( + "MiMoV2 remote code does not support paged attention cache. " + "Please use eager, sdpa, flex_attention, or flash_attention_2." + ) + + attention_interface: Callable = ALL_ATTENTION_FUNCTIONS.get_interface( + attn_implementation, eager_attention_forward + ) + if self.attention_sink_bias is not None and attn_implementation == "sdpa": + logger.warning_once( + "MiMoV2 attention sink bias is not supported by SDPA; falling back to eager attention for correctness." + ) + attention_interface = eager_attention_forward + + attention_kwargs = { + "dropout": 0.0 if not self.training else self.attention_dropout, + "scaling": self.scaling, + "position_ids": position_ids, + "is_causal": self.is_causal, + } + if attention_interface is eager_attention_forward: + attention_kwargs["sinks"] = self.attention_sink_bias + else: + if self.attention_sink_bias is not None: + attention_kwargs["s_aux"] = self.attention_sink_bias + if self.sliding_window is not None: + attention_kwargs["sliding_window"] = self.sliding_window + + attn_output, attn_weights = attention_interface( + self, + query_states, + key_states, + value_states, + attention_mask, + **attention_kwargs, + ) + attn_output = attn_output.reshape(*input_shape, -1).contiguous() + attn_output = self.o_proj(attn_output) + return attn_output, attn_weights + + def forward( + self, + hidden_states: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + attention_mask: Optional[torch.Tensor], + past_key_values: Optional[Cache] = None, + cache_position: Optional[torch.LongTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + **kwargs: Unpack[TransformersKwargs], + ) -> tuple[torch.Tensor, torch.Tensor]: + input_shape = hidden_states.shape[:-1] + + if self.projection_layout == "fused_qkv": + qkv_states = self.qkv_proj(hidden_states) + query_states, key_states, value_states = qkv_states.split([self.q_size, self.k_size, self.v_size], dim=-1) + else: + 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(*input_shape, self.num_attention_heads, self.head_dim).transpose(1, 2) + key_states = key_states.view(*input_shape, self.num_key_value_heads, self.head_dim).transpose(1, 2) + value_states = value_states.view(*input_shape, self.num_key_value_heads, self.v_head_dim).transpose(1, 2) + return self._forward_attention( + query_states, + key_states, + value_states, + input_shape, + position_embeddings, + attention_mask, + past_key_values=past_key_values, + cache_position=cache_position, + position_ids=position_ids, + ) + + +class MiMoV2DecoderLayer(nn.Module): + attention_projection_layout = "split" + + def __init__(self, config, layer_idx: int, attention_projection_layout: Optional[str] = None): + super().__init__() + attention_projection_layout = attention_projection_layout or self.attention_projection_layout + is_swa_layer = config.hybrid_layer_pattern[layer_idx] == 1 + self.attention_type = "sliding_window_attention" if is_swa_layer else "full_attention" + self.self_attn = MiMoV2Attention( + config, is_swa_layer, layer_idx, projection_layout=attention_projection_layout + ) + self.mlp = ( + MiMoV2MoE(config) + if getattr(config, "n_routed_experts", None) is not None and config.moe_layer_freq[layer_idx] + else MiMoV2MLP(config) + ) + self.input_layernorm = MiMoV2RMSNorm(config.hidden_size, eps=config.layernorm_epsilon) + self.post_attention_layernorm = MiMoV2RMSNorm(config.hidden_size, eps=config.layernorm_epsilon) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Cache] = None, + use_cache: Optional[bool] = False, + cache_position: Optional[torch.LongTensor] = None, + position_embeddings: Optional[tuple[torch.Tensor, torch.Tensor]] = None, + **kwargs: Unpack[TransformersKwargs], + ) -> torch.Tensor: + residual = hidden_states + hidden_states = self.input_layernorm(hidden_states) + hidden_states, _ = self.self_attn( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + use_cache=use_cache, + cache_position=cache_position, + position_embeddings=position_embeddings, + **kwargs, + ) + hidden_states = residual + hidden_states + + residual = hidden_states + hidden_states = self.post_attention_layernorm(hidden_states) + hidden_states = self.mlp(hidden_states) + hidden_states = residual + hidden_states + return hidden_states + + +class MiMoV2RotaryEmbedding(nn.Module): + inv_freq: torch.Tensor + + def __init__(self, config, is_swa: bool, device=None): + super().__init__() + if hasattr(config, "rope_scaling") and isinstance(config.rope_scaling, dict): + self.rope_type = config.rope_scaling.get("rope_type", config.rope_scaling.get("type", "default")) + else: + self.rope_type = "default" + self.max_seq_len_cached = config.max_position_embeddings + self.original_max_seq_len = config.max_position_embeddings + + self.config = copy(config) + self.config.rope_parameters = copy(getattr(config, "rope_parameters", None) or {}) + if is_swa: + self.config.rope_theta = getattr(config, "swa_rope_theta", config.rope_theta) + self.config.head_dim = getattr(config, "swa_head_dim", getattr(config, "head_dim", None)) + if self.config.rope_parameters: + self.config.rope_parameters["rope_theta"] = self.config.rope_theta + self.rope_init_fn = ( + self.compute_default_rope_parameters + if self.rope_type == "default" + else ROPE_INIT_FUNCTIONS[self.rope_type] + ) + + inv_freq, self.attention_scaling = self.rope_init_fn(self.config, device) + self.register_buffer("inv_freq", inv_freq, persistent=False) + self.original_inv_freq = self.inv_freq + + @staticmethod + def compute_default_rope_parameters(config, device=None, seq_len=None, layer_type=None): + config.standardize_rope_params() + rope_parameters = config.rope_parameters[layer_type] if layer_type is not None else config.rope_parameters + base = rope_parameters["rope_theta"] + partial_rotary_factor = rope_parameters.get("partial_rotary_factor", 1.0) + head_dim = getattr(config, "head_dim", None) or config.hidden_size // config.num_attention_heads + dim = int(head_dim * partial_rotary_factor) + if dim % 2 != 0: + raise ValueError( + f"MiMoV2 rotary dimension must be even, got {dim} from " + f"head_dim={head_dim} and partial_rotary_factor={partial_rotary_factor}" + ) + inv_freq = 1.0 / ( + base ** (torch.arange(0, dim, 2, dtype=torch.int64).to(device=device, dtype=torch.float) / dim) + ) + return inv_freq, 1.0 + + @torch.no_grad() + @dynamic_rope_update + def forward(self, x, position_ids): + inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1).to(x.device) + position_ids_expanded = position_ids[:, None, :].float() + + device_type = x.device.type if isinstance(x.device.type, str) and x.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() * self.attention_scaling + sin = emb.sin() * self.attention_scaling + + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +# --------------------------------------------------------------------------- +# Multimodal helpers +# --------------------------------------------------------------------------- + + +def _as_namespace(config_like): + if config_like is None: + return SimpleNamespace() + if isinstance(config_like, dict): + return SimpleNamespace(**config_like) + return config_like + + +def _parse_maybe_list(value: str | int, length: int) -> list[int]: + if isinstance(value, str) and "-" in value: + return [int(x) for x in value.split("-")] + return [int(value)] * length + + +def _build_speech_embeddings(config) -> nn.ModuleList: + audio_channels = getattr(config, "audio_channels") + input_local_dim = getattr(config, "input_local_dim") + speech_empty_ids = _parse_maybe_list(getattr(config, "speech_zeroemb_idx"), audio_channels) + speech_vocab_sizes = _parse_maybe_list(getattr(config, "speech_vocab_size"), audio_channels) + return nn.ModuleList( + [ + nn.Embedding(speech_vocab_sizes[i], input_local_dim, padding_idx=speech_empty_ids[i]) + for i in range(audio_channels) + ] + ) + + +def _pad_and_group_audio_codes( + audio_codes: torch.Tensor, audio_channels: int, group_size: int +) -> torch.Tensor: + """Slice to `audio_channels`, pad to `group_size` boundary, reshape to [G, group_size, C].""" + if audio_codes.dim() != 2: + raise ValueError(f"`audio_codes` must be 2D [T, C], got shape={tuple(audio_codes.shape)}") + audio_codes = audio_codes[:, :audio_channels] + T = audio_codes.shape[0] + padded_T = ((T + group_size - 1) // group_size) * group_size + if padded_T > T: + audio_codes = torch.cat([audio_codes, audio_codes[-1:].expand(padded_T - T, -1)], dim=0) + return audio_codes.reshape(padded_T // group_size, group_size, audio_channels) + + +def _replace_modal_embeddings_inplace( + input_ids: torch.Tensor, + inputs_embeds: torch.Tensor, + token_id: int | None, + modal_embeds: torch.Tensor | None, +) -> None: + if token_id is None or modal_embeds is None: + return + + if modal_embeds.dim() != 2: + raise ValueError(f"`modal_embeds` must be 2D [N, H], got shape={tuple(modal_embeds.shape)}") + + mask = input_ids.eq(token_id) + num_slots = int(mask.sum().item()) + if num_slots == 0: + return + + if modal_embeds.shape[0] != num_slots: + raise ValueError( + f"Modal embedding count mismatch for token_id={token_id}: " + f"found {num_slots} placeholders but got {modal_embeds.shape[0]} embeddings." + ) + + inputs_embeds[mask] = modal_embeds.to(device=inputs_embeds.device, dtype=inputs_embeds.dtype) + + +# --------------------------------------------------------------------------- +# Vision encoder +# --------------------------------------------------------------------------- + + +def _rotate_half_vision(x: torch.Tensor) -> torch.Tensor: + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def _apply_rotary_pos_emb_vision( + q: torch.Tensor, k: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor +) -> tuple[torch.Tensor, torch.Tensor]: + orig_q_dtype, orig_k_dtype = q.dtype, k.dtype + q, k = q.float(), k.float() + cos, sin = cos.unsqueeze(-2).float(), sin.unsqueeze(-2).float() + q_embed = (q * cos) + (_rotate_half_vision(q) * sin) + k_embed = (k * cos) + (_rotate_half_vision(k) * sin) + return q_embed.to(orig_q_dtype), k_embed.to(orig_k_dtype) + + +class MiMoVisionRotaryEmbedding(nn.Module): + def __init__(self, dim: int, theta: float = 10000.0) -> None: + super().__init__() + inv_freq = 1.0 / (theta ** (torch.arange(0, dim, 2, dtype=torch.float) / dim)) + self.register_buffer("inv_freq", inv_freq, persistent=False) + + def forward(self, seqlen: int) -> torch.Tensor: + seq = torch.arange(seqlen, device=self.inv_freq.device, dtype=self.inv_freq.dtype) + return torch.outer(seq, self.inv_freq) + + +class MiMoVisionPatchEmbed(nn.Module): + def __init__( + self, patch_size: int = 16, temporal_patch_size: int = 2, in_channels: int = 3, embed_dim: int = 1280 + ): + super().__init__() + self.patch_size = patch_size + self.temporal_patch_size = temporal_patch_size + self.in_channels = in_channels + self.embed_dim = embed_dim + kernel_size = [temporal_patch_size, patch_size, patch_size] + self.proj = nn.Conv3d(in_channels, embed_dim, kernel_size=kernel_size, stride=kernel_size, bias=False) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + target_dtype = self.proj.weight.dtype + hidden_states = hidden_states.view( + -1, self.in_channels, self.temporal_patch_size, self.patch_size, self.patch_size + ) + return self.proj(hidden_states.to(dtype=target_dtype)).view(-1, self.embed_dim) + + +class MiMoVisionSwiGLUMLP(nn.Module): + def __init__(self, dim: int, intermediate_dim: int, hidden_act: str = "silu"): + super().__init__() + self.gate_proj = nn.Linear(dim, intermediate_dim, bias=True) + self.up_proj = nn.Linear(dim, intermediate_dim, bias=True) + self.down_proj = nn.Linear(intermediate_dim, dim, bias=True) + self.act_fn = ACT2FN[hidden_act] + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x)) + + +class MiMoVisionAttention(nn.Module): + def __init__( + self, + dim: int, + num_heads: int, + num_kv_heads: int | None = None, + head_dim: int | None = None, + use_sinks: bool = False, + window_size: int = -1, + ): + super().__init__() + self.dim = dim + self.num_heads = num_heads + self.num_kv_heads = num_kv_heads if num_kv_heads is not None else num_heads + self.head_dim = head_dim if head_dim is not None else dim // num_heads + self.num_kv_groups = self.num_heads // self.num_kv_heads + self.scaling = self.head_dim**-0.5 + self.window_size = window_size + + qkv_dim = (self.num_heads + 2 * self.num_kv_heads) * self.head_dim + self.qkv = nn.Linear(dim, qkv_dim, bias=True) + self.proj = nn.Linear(self.num_heads * self.head_dim, dim, bias=True) + self.sinks = nn.Parameter(torch.zeros(self.num_heads)) if use_sinks else None + + def _build_window_mask(self, seq_len: int, device: torch.device, dtype: torch.dtype) -> torch.Tensor | None: + if self.window_size <= 0: + return None + row_idx = torch.arange(seq_len, device=device).unsqueeze(1) + col_idx = torch.arange(seq_len, device=device).unsqueeze(0) + mask = torch.zeros(seq_len, seq_len, device=device, dtype=dtype) + mask = mask.masked_fill((row_idx - col_idx).abs() > self.window_size, float("-inf")) + return mask + + def forward( + self, + hidden_states: torch.Tensor, + cu_seqlens: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + full_attn: bool = False, + ) -> torch.Tensor: + seq_len = hidden_states.shape[0] + qkv = self.qkv(hidden_states) + + q_dim = self.num_heads * self.head_dim + kv_dim = self.num_kv_heads * self.head_dim + q = qkv[:, :q_dim].view(seq_len, self.num_heads, self.head_dim) + k = qkv[:, q_dim : q_dim + kv_dim].view(seq_len, self.num_kv_heads, self.head_dim) + v = qkv[:, q_dim + kv_dim :].view(seq_len, self.num_kv_heads, self.head_dim) + + cos, sin = position_embeddings + q, k = _apply_rotary_pos_emb_vision(q, k, cos, sin) + + lengths = cu_seqlens[1:] - cu_seqlens[:-1] + q_chunks = torch.split(q, lengths.tolist(), dim=0) + k_chunks = torch.split(k, lengths.tolist(), dim=0) + v_chunks = torch.split(v, lengths.tolist(), dim=0) + + outputs = [] + for q_c, k_c, v_c in zip(q_chunks, k_chunks, v_chunks): + q_c = q_c.unsqueeze(0).transpose(1, 2) + k_c = k_c.unsqueeze(0).transpose(1, 2) + v_c = v_c.unsqueeze(0).transpose(1, 2) + + if self.num_kv_groups > 1: + k_c = k_c.repeat_interleave(self.num_kv_groups, dim=1) + v_c = v_c.repeat_interleave(self.num_kv_groups, dim=1) + + attn_mask = None + if not full_attn: + attn_mask = self._build_window_mask(q_c.shape[2], q_c.device, q_c.dtype) + + if self.sinks is not None: + sink_bias = torch.zeros( + 1, self.num_heads, q_c.shape[2], k_c.shape[2], device=q_c.device, dtype=q_c.dtype + ) + sink_bias[..., 0] = self.sinks.view(1, self.num_heads, 1) + attn_mask = sink_bias if attn_mask is None else attn_mask + sink_bias + + attn_out = F.scaled_dot_product_attention(q_c, k_c, v_c, attn_mask=attn_mask, scale=self.scaling) + outputs.append(attn_out.squeeze(0).transpose(0, 1)) + + attn_output = torch.cat(outputs, dim=0) + attn_output = attn_output.reshape(seq_len, -1) + return self.proj(attn_output) + + +class MiMoVisionBlock(nn.Module): + def __init__( + self, + dim: int, + intermediate_dim: int, + num_heads: int, + num_kv_heads: int | None = None, + head_dim: int | None = None, + hidden_act: str = "silu", + rms_norm_eps: float = 1e-6, + use_sinks: bool = False, + window_size: int = -1, + ): + super().__init__() + self.norm1 = nn.RMSNorm(dim, eps=rms_norm_eps) + self.norm2 = nn.RMSNorm(dim, eps=rms_norm_eps) + self.attn = MiMoVisionAttention( + dim=dim, num_heads=num_heads, num_kv_heads=num_kv_heads, head_dim=head_dim, + use_sinks=use_sinks, window_size=window_size, + ) + self.mlp = MiMoVisionSwiGLUMLP(dim=dim, intermediate_dim=intermediate_dim, hidden_act=hidden_act) + + def forward( + self, + hidden_states: torch.Tensor, + cu_seqlens: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + full_attn: bool = False, + ) -> torch.Tensor: + hidden_states = hidden_states + self.attn( + self.norm1(hidden_states), cu_seqlens=cu_seqlens, + position_embeddings=position_embeddings, full_attn=full_attn, + ) + hidden_states = hidden_states + self.mlp(self.norm2(hidden_states)) + return hidden_states + + +class MiMoVisionPatchMerger(nn.Module): + def __init__(self, dim: int, context_dim: int, spatial_merge_size: int = 2): + super().__init__() + self.hidden_size = context_dim * (spatial_merge_size**2) + self.ln_q = nn.LayerNorm(context_dim, eps=1e-6) + self.mlp = nn.Sequential( + nn.Linear(self.hidden_size, self.hidden_size), + nn.GELU(), + nn.Linear(self.hidden_size, dim), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.mlp(self.ln_q(x).view(-1, self.hidden_size)) + + +class MiMoVisionTransformer(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + hidden_size = config.hidden_size + depth = config.depth + num_heads = config.num_heads + num_kv_heads = getattr(config, "num_key_value_heads", num_heads) + head_dim = getattr(config, "qk_channels", 64) + spatial_merge_size = getattr(config, "spatial_merge_size", 2) + rms_norm_eps = getattr(config, "rms_norm_eps", 1e-6) + self.fullatt_block_indexes = getattr(config, "fullatt_block_indexes", []) + use_sink = getattr(config, "use_sink", False) + visual_token_window_size = getattr(config, "visual_token_window_size", -1) + self.vit_window_attn_types = getattr(config, "vit_window_attn_types", None) or [-1] * depth + + self.spatial_merge_size = spatial_merge_size + self.spatial_merge_unit = spatial_merge_size * spatial_merge_size + + self.patch_embed = MiMoVisionPatchEmbed( + patch_size=config.patch_size, + temporal_patch_size=config.temporal_patch_size, + in_channels=getattr(config, "in_channels", None) or getattr(config, "in_chans", 3), + embed_dim=hidden_size, + ) + + self.rotary_pos_emb = MiMoVisionRotaryEmbedding(head_dim // 2) + + self.blocks = nn.ModuleList( + [ + MiMoVisionBlock( + dim=hidden_size, + intermediate_dim=config.intermediate_size, + num_heads=num_heads, + num_kv_heads=num_kv_heads, + head_dim=head_dim, + hidden_act=config.hidden_act, + rms_norm_eps=rms_norm_eps, + use_sinks=use_sink and (i not in self.fullatt_block_indexes), + window_size=visual_token_window_size, + ) + for i in range(depth) + ] + ) + + self.merger = MiMoVisionPatchMerger( + dim=config.out_hidden_size, + context_dim=hidden_size, + spatial_merge_size=spatial_merge_size, + ) + + @property + def dtype(self) -> torch.dtype: + return self.patch_embed.proj.weight.dtype + + def apply_index(self, tensor: torch.Tensor, index: torch.Tensor) -> torch.Tensor: + tensor = tensor.unflatten(0, (-1, self.spatial_merge_unit)) + tensor = tensor[index] + return tensor.flatten(0, 1) + + def get_window_index_1d(self, grid_thw: torch.Tensor, col: bool = True) -> torch.Tensor: + window_index = [] + window_index_id = 0 + for grid_t, grid_h, grid_w in grid_thw: + llm_grid_h = grid_h // self.spatial_merge_size + llm_grid_w = grid_w // self.spatial_merge_size + index = torch.arange(grid_t * llm_grid_h * llm_grid_w).reshape(grid_t, llm_grid_h, llm_grid_w) + index_new = index.transpose(1, 2).reshape(-1) if col else index.reshape(-1) + window_index.append(index_new + window_index_id) + window_index_id += (grid_t * llm_grid_h * llm_grid_w).item() + return torch.cat(window_index, dim=0) + + def rot_pos_emb(self, grid_thw: torch.Tensor) -> torch.Tensor: + pos_ids = [] + for t, h, w in grid_thw: + hpos_ids = torch.arange(h).unsqueeze(1).expand(-1, w) + hpos_ids = hpos_ids.reshape( + h // self.spatial_merge_size, self.spatial_merge_size, + w // self.spatial_merge_size, self.spatial_merge_size, + ) + hpos_ids = hpos_ids.permute(0, 2, 1, 3).flatten() + + wpos_ids = torch.arange(w).unsqueeze(0).expand(h, -1) + wpos_ids = wpos_ids.reshape( + h // self.spatial_merge_size, self.spatial_merge_size, + w // self.spatial_merge_size, self.spatial_merge_size, + ) + wpos_ids = wpos_ids.permute(0, 2, 1, 3).flatten() + + pos_ids.append(torch.stack([hpos_ids, wpos_ids], dim=-1).repeat(t, 1)) + pos_ids = torch.cat(pos_ids, dim=0) + max_grid_size = grid_thw[:, 1:].max() + rotary_pos_emb_full = self.rotary_pos_emb(max_grid_size) + return rotary_pos_emb_full[pos_ids].flatten(1) + + def forward(self, pixel_values: torch.Tensor, grid_thw: torch.Tensor) -> torch.Tensor: + x = pixel_values.to(device=self.patch_embed.proj.weight.device, dtype=self.dtype) + x = self.patch_embed(x) + + rotary_emb = self.rot_pos_emb(grid_thw) + rotary_emb = rotary_emb.to(device=x.device) + emb = torch.cat((rotary_emb, rotary_emb), dim=-1) + + window_index_1d_col = self.get_window_index_1d(grid_thw, col=True).to(device=x.device) + reverse_window_index_1d_col = torch.argsort(window_index_1d_col).to(device=x.device) + + row_based_embeddings = (emb.cos(), emb.sin()) + col_emb = self.apply_index(emb, window_index_1d_col) + col_based_embeddings = (col_emb.cos(), col_emb.sin()) + + cu_seqlens = torch.repeat_interleave(grid_thw[:, 1] * grid_thw[:, 2], grid_thw[:, 0]).cumsum( + dim=0, dtype=torch.int32 + ) + cu_seqlens = F.pad(cu_seqlens, (1, 0), value=0).to(device=x.device) + + for i, blk in enumerate(self.blocks): + window_attn_type = self.vit_window_attn_types[i] + + if window_attn_type == 1 and (i == 0 or self.vit_window_attn_types[i - 1] != 1): + x = self.apply_index(x, window_index_1d_col) + + if i > 0 and window_attn_type != 1 and self.vit_window_attn_types[i - 1] == 1: + x = self.apply_index(x, reverse_window_index_1d_col) + + position_embeddings = col_based_embeddings if window_attn_type == 1 else row_based_embeddings + full_attn = i in self.fullatt_block_indexes + x = blk(x, cu_seqlens=cu_seqlens, position_embeddings=position_embeddings, full_attn=full_attn) + + return self.merger(x) + + +# --------------------------------------------------------------------------- +# Audio encoder +# --------------------------------------------------------------------------- + + +class AudioProjection(nn.Module): + def __init__(self, input_size: int, hidden_size: int, output_size: int): + super().__init__() + self.mlp = nn.Sequential( + nn.Linear(input_size, hidden_size, bias=False), + nn.GELU(), + nn.Linear(hidden_size, output_size, bias=False), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.mlp(x) + + +class MiMoAudioEncoder(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + + self.audio_channels = getattr(config, "audio_channels") + self.group_size = getattr(config, "group_size") + self.input_local_dim = getattr(config, "input_local_dim") + self.out_hidden_size = getattr(config, "out_hidden_size") + self.input_full_attention = getattr(config, "input_full_attention", True) + self.audio_segment_size = getattr(config, "audio_segment_size", 6000) + + input_local_config = Qwen2Config( + hidden_size=getattr(config, "input_local_dim"), + num_hidden_layers=getattr(config, "input_local_layers"), + num_attention_heads=getattr(config, "input_local_attn_heads"), + num_key_value_heads=getattr(config, "input_local_attn_heads"), + intermediate_size=getattr(config, "input_local_intermediate_size"), + attention_dropout=getattr(config, "input_local_hidden_dropout", 0.0), + rope_theta=getattr(config, "rope_theta", 640000.0), + partial_rotary_factor=getattr(config, "partial_rotary_factor", 1.0), + ) + self.input_local_transformer = Qwen2Model(input_local_config) + + if not getattr(config, "add_post_norm", True): + self.input_local_transformer.norm = nn.Identity() + + proj_in = self.input_local_dim * self.group_size + projection_layers = getattr(config, "projection_layers", 2) + if projection_layers == 1: + self.projection = nn.Linear(proj_in, self.out_hidden_size, bias=False) + elif projection_layers == 2: + self.projection = AudioProjection(proj_in, proj_in * 4, self.out_hidden_size) + else: + raise ValueError(f"Unsupported projection_layers={projection_layers}, expected 1 or 2.") + + def _apply_speech_embeddings(self, audio_codes: torch.Tensor, speech_embeddings: nn.ModuleList) -> torch.Tensor: + num_segments = audio_codes.shape[0] + out = torch.zeros( + (num_segments, self.group_size, self.input_local_dim), + dtype=speech_embeddings[0].weight.dtype, + device=audio_codes.device, + ) + for i in range(self.audio_channels): + out.add_(speech_embeddings[i](audio_codes[:, :, i].long())) + return out + + def _apply_input_local_transformer(self, speech_embeddings: torch.Tensor) -> torch.Tensor: + output = self.input_local_transformer( + inputs_embeds=speech_embeddings, return_dict=True, use_cache=False, + is_causal=not self.input_full_attention, + ) + return output.last_hidden_state + + def _process_audio_codes(self, audio_codes: torch.Tensor, speech_embeddings: nn.ModuleList) -> torch.Tensor: + audio_codes = _pad_and_group_audio_codes(audio_codes, self.audio_channels, self.group_size) + audio_embs = self._apply_speech_embeddings(audio_codes, speech_embeddings) + audio_hidden = self._apply_input_local_transformer(audio_embs) + return self.projection(audio_hidden.reshape(audio_hidden.shape[0], -1)) + + def get_audio_feature( + self, + mels: list[torch.Tensor], + speech_embeddings: nn.ModuleList, + audio_tokenizer_encoder, + ) -> torch.Tensor: + """Full pipeline: mel spectrograms → tokenize → codes → embed → project.""" + if not mels: + device = next(self.projection.parameters()).device + dtype = next(self.projection.parameters()).dtype + return torch.empty(0, self.out_hidden_size, device=device, dtype=dtype) + + device = next(audio_tokenizer_encoder.parameters()).device + code_list = tokenize_audio_batch( + mels, audio_tokenizer_encoder, segment_size=self.audio_segment_size, device=device, + ) + + codecs_to_concat = [] + for codecs in code_list: + codecs_to_concat.append(_pad_and_group_audio_codes(codecs, self.audio_channels, self.group_size)) + audio_codes = torch.cat(codecs_to_concat, dim=0) + + audio_embs = self._apply_speech_embeddings(audio_codes, speech_embeddings) + audio_hidden = self._apply_input_local_transformer(audio_embs) + return self.projection(audio_hidden.reshape(audio_hidden.shape[0], -1)) + + def forward( + self, + speech_embeddings: nn.ModuleList, + audio_codes: torch.Tensor | None = None, + audio_embeds: torch.Tensor | None = None, + ) -> torch.Tensor: + if audio_embeds is not None: + if audio_embeds.dim() != 2: + raise ValueError(f"`audio_embeds` must be 2D [N, H], got shape={tuple(audio_embeds.shape)}") + if audio_embeds.shape[-1] != self.out_hidden_size: + raise ValueError( + f"Unexpected audio_embeds hidden size {audio_embeds.shape[-1]}, expected {self.out_hidden_size}" + ) + return audio_embeds + + if audio_codes is None: + raise ValueError("Either `audio_codes` or `audio_embeds` must be provided.") + + return self._process_audio_codes(audio_codes, speech_embeddings) + + +# --------------------------------------------------------------------------- +# Audio tokenizer (codec: mel → encoder → VQ → codes) +# Adapted from https://github.com/XiaomiMiMo/MiMo-Audio-Tokenizer.git +# --------------------------------------------------------------------------- + + +class MiMoAudioTokenizerConfig(PretrainedConfig): + model_type = "mimo_audio_tokenizer" + + def __init__( + self, + max_audio_seconds: int = 1800, + stride_size: int = 2, + avg_pooler: int = 1, + d_model: int = 768, + scale_embedding: bool = True, + kernel_size: int = 3, + activation_function: str = "gelu", + encoder_layers: int = 8, + encoder_skip_layer_id: int = None, + encoder_attention_heads: int = 12, + encoder_ffn_dim: int = 3072, + encoder_causal: bool = False, + encoder_attn_window_size: list = None, + decoder_layers: int = 8, + decoder_attention_heads: int = 12, + decoder_ffn_dim: int = 3072, + decoder_kernel_size: int = 3, + decoder_stride_size: int = 2, + decoder_causal: bool = True, + decoder_attn_window_size: list = None, + nfft: int = 1024, + vocoder_dim: int = 512, + vocoder_intermediate_dim: int = 4096, + vocoder_num_layers: int = 30, + n_mels: int = 80, + sampling_rate: int = 24000, + hop_length: int = 240, + window_size: int = 1024, + vocoder_padding: str = "same", + fmin: int = 0, + fmax: int = None, + num_quantizers: int = 12, + codebook_size: list = None, + threshold_ema_dead_code: int = 10, + position_embedding_type: str = "rope", + rope_theta: int = 10000, + rope_type: str = "default", + ln_type: str = "LayerNorm", + vocoder_attention_heads: int = 4, + vocoder_attn_window_size: list = None, + use_istft_only: bool = False, + hybrid_attention: bool = False, + hybrid_block_size: int = 8, + swa_per_block: int = 2, + **kwargs, + ): + super().__init__(**kwargs) + self.max_audio_seconds = max_audio_seconds + self.stride_size = stride_size + self.avg_pooler = avg_pooler + self.d_model = d_model + self.scale_embedding = scale_embedding + self.kernel_size = kernel_size + self.activation_function = activation_function + self.encoder_layers = encoder_layers + self.encoder_skip_layer_id = encoder_skip_layer_id + self.encoder_attention_heads = encoder_attention_heads + self.encoder_ffn_dim = encoder_ffn_dim + self.encoder_causal = encoder_causal + self.encoder_attn_window_size = encoder_attn_window_size if encoder_attn_window_size is not None else [-1, -1] + self.decoder_layers = decoder_layers + self.decoder_attention_heads = decoder_attention_heads + self.decoder_ffn_dim = decoder_ffn_dim + self.decoder_kernel_size = decoder_kernel_size + self.decoder_stride_size = decoder_stride_size + self.decoder_causal = decoder_causal + self.decoder_attn_window_size = decoder_attn_window_size if decoder_attn_window_size is not None else [-1, -1] + self.nfft = nfft + self.vocoder_dim = vocoder_dim + self.vocoder_intermediate_dim = vocoder_intermediate_dim + self.vocoder_num_layers = vocoder_num_layers + self.n_mels = n_mels + self.sampling_rate = sampling_rate + self.hop_length = hop_length + self.window_size = window_size + self.vocoder_padding = vocoder_padding + self.fmin = fmin + self.fmax = fmax + self.num_quantizers = num_quantizers + self.codebook_size = codebook_size if codebook_size is not None else [1024] + self.threshold_ema_dead_code = threshold_ema_dead_code + self.position_embedding_type = position_embedding_type + self.rope_theta = rope_theta + self.rope_type = rope_type + self.ln_type = ln_type + self.vocoder_attention_heads = vocoder_attention_heads + self.vocoder_attn_window_size = vocoder_attn_window_size if vocoder_attn_window_size is not None else [40, 10] + self.use_istft_only = use_istft_only + self.hybrid_attention = hybrid_attention + self.hybrid_block_size = hybrid_block_size + self.swa_per_block = swa_per_block + + +class EuclideanCodebook(nn.Module): + def __init__(self, dim: int, codebook_size: int, kmeans_init: bool = False, **kwargs): + super().__init__() + init_fn = torch.zeros if kmeans_init else self._uniform_init + embed = init_fn(codebook_size, dim) + self.codebook_size = codebook_size + self.register_buffer("inited", torch.Tensor([not kmeans_init])) + self.register_buffer("cluster_size", torch.zeros(codebook_size)) + self.register_buffer("embed", embed) + self.register_buffer("embed_avg", embed.clone()) + + def quantize(self, x): + embed = self.embed.t() + dist = -(x.pow(2).sum(1, keepdim=True) - 2 * x @ embed + embed.pow(2).sum(0, keepdim=True)) + return dist.max(dim=-1).indices + + def encode(self, x): + shape = x.shape + x = x.reshape(-1, x.shape[-1]) + embed_ind = self.quantize(x) + return embed_ind.view(*shape[:-1]) + + def decode(self, embed_ind): + return F.embedding(embed_ind, self.embed) + + @staticmethod + def _uniform_init(*shape: int): + t = torch.empty(shape) + nn.init.kaiming_uniform_(t) + return t + + +class VectorQuantization(nn.Module): + def __init__(self, dim: int, codebook_size: int, codebook_dim: Optional[int] = None, kmeans_init: bool = True, **kwargs): + super().__init__() + _codebook_dim = codebook_dim if codebook_dim is not None else dim + requires_projection = _codebook_dim != dim + self.project_in = nn.Linear(dim, _codebook_dim) if requires_projection else nn.Identity() + self.project_out = nn.Linear(_codebook_dim, dim) if requires_projection else nn.Identity() + self._codebook = EuclideanCodebook(dim=_codebook_dim, codebook_size=codebook_size, kmeans_init=kmeans_init) + self.codebook_size = codebook_size + + def encode(self, x): + return self._codebook.encode(self.project_in(x)) + + def decode(self, embed_ind): + return self.project_out(self._codebook.decode(embed_ind)) + + +class ResidualVectorQuantization(nn.Module): + def __init__(self, *, num_quantizers, codebook_size, **kwargs): + super().__init__() + if isinstance(codebook_size, int): + codebook_size = [codebook_size] * num_quantizers + elif len(codebook_size) < num_quantizers: + codebook_size += [codebook_size[-1]] * (num_quantizers - len(codebook_size)) + self.layers = nn.ModuleList( + [VectorQuantization(codebook_size=codebook_size[i], **kwargs) for i in range(num_quantizers)] + ) + + def encode(self, x: torch.Tensor, n_q: Optional[int] = None, st: Optional[int] = None) -> torch.Tensor: + residual = x + all_indices = [] + n_q = len(self.layers) if n_q is None else n_q + st = 0 if st is None else st + for layer in self.layers[st:n_q]: + indices = layer.encode(residual) + quantized = layer.decode(indices) + residual = residual - quantized + all_indices.append(indices) + return torch.stack(all_indices) + + def decode(self, q_indices: torch.Tensor, st: int = 0) -> torch.Tensor: + quantized_out = self.layers[st].decode(q_indices[0]) + for i in range(1, len(q_indices)): + quantized_out = quantized_out + self.layers[st + i].decode(q_indices[i]) + return quantized_out + + +class ResidualVectorQuantizer(nn.Module): + def __init__(self, dimension: int = 256, n_q: int = 8, bins: int | list = 1024, kmeans_init: bool = True, **kwargs): + super().__init__() + self.n_q = n_q + self.vq = ResidualVectorQuantization(dim=dimension, codebook_size=bins, num_quantizers=n_q, kmeans_init=kmeans_init) + + def encode(self, x: torch.Tensor, n_q: Optional[int] = None, st: Optional[int] = None) -> torch.Tensor: + return self.vq.encode(x, n_q=n_q or self.n_q, st=st or 0) + + def decode(self, codes: torch.Tensor, st: int = 0) -> torch.Tensor: + return self.vq.decode(codes, st=st) + + +class AudioTokenizerRotaryEmbedding(nn.Module): + def __init__(self, base, dim, max_seq_len, rope_type="default", device=None): + super().__init__() + self.attention_scaling = 1.0 + inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2, dtype=torch.float, device=device) / dim)) + self.register_buffer("inv_freq", inv_freq, persistent=False) + + @torch.no_grad() + def forward(self, x, position_ids): + inv_freq_expanded = self.inv_freq[:, None].float().expand(-1, 1).to(x.device) + position_ids_expanded = position_ids[None, :].float() + with torch.autocast(device_type="cpu", enabled=False): + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(0, 1) + emb = torch.cat((freqs, freqs), dim=-1) + cos = emb.cos() * self.attention_scaling + sin = emb.sin() * self.attention_scaling + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +def _at_get_position_ids(lengths): + total_len = lengths.sum() + offset = torch.cat([torch.zeros(1, device=lengths.device, dtype=lengths.dtype), lengths[:-1].cumsum(dim=0)]) + offset = torch.repeat_interleave(offset, lengths) + return torch.arange(0, total_len, device=lengths.device) - offset + + +def _at_get_sequence_mask(inputs, inputs_length): + if inputs.dim() == 3: + bsz, tgt_len, _ = inputs.size() + else: + bsz, tgt_len = inputs_length.shape[0], torch.max(inputs_length) + sequence_mask = torch.arange(0, tgt_len, device=inputs.device) + sequence_mask = torch.lt(sequence_mask, inputs_length.reshape(bsz, 1)).view(bsz, tgt_len, 1) + unpacking_index = torch.cumsum(sequence_mask.to(torch.int64).view(-1), dim=0) - 1 + return sequence_mask, unpacking_index + + +def _at_unpack_hidden_states(hidden_states, lengths, sequence_mask=None, unpacking_index=None): + bsz = lengths.shape[0] + if sequence_mask is None or unpacking_index is None: + sequence_mask, unpacking_index = _at_get_sequence_mask(hidden_states, lengths) + hidden_states = torch.index_select(hidden_states, 0, unpacking_index).view( + bsz, torch.max(lengths), hidden_states.shape[-1] + ) + return torch.where(sequence_mask, hidden_states, 0) + + +def _at_rotate_half(x): + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def _at_apply_rotary_pos_emb(q, k, cos, sin, unsqueeze_dim=1): + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + return (q * cos) + (_at_rotate_half(q) * sin), (k * cos) + (_at_rotate_half(k) * sin) + + +_AT_LAYER_NORM = {"LayerNorm": nn.LayerNorm} + + +class AudioTokenizerAttention(nn.Module): + def __init__(self, embed_dim: int, num_heads: int, window_size: tuple[int, int] = (-1, -1), causal: bool = False): + super().__init__() + self.embed_dim = embed_dim + self.num_heads = num_heads + self.head_dim = embed_dim // num_heads + self.window_size = window_size + self.causal = causal + self.scaling = self.head_dim**-0.5 + + self.k_proj = nn.Linear(embed_dim, embed_dim, bias=False) + self.v_proj = nn.Linear(embed_dim, embed_dim, bias=True) + self.q_proj = nn.Linear(embed_dim, embed_dim, bias=True) + self.out_proj = nn.Linear(embed_dim, embed_dim, bias=True) + + def _build_attn_mask(self, seq_len: int, device: torch.device, dtype: torch.dtype) -> torch.Tensor | None: + has_window = self.window_size[0] > 0 + if not self.causal and not has_window: + return None + mask = torch.zeros(seq_len, seq_len, device=device, dtype=dtype) + if self.causal: + mask = mask + torch.triu(torch.full((seq_len, seq_len), float("-inf"), device=device, dtype=dtype), diagonal=1) + if has_window: + row_idx = torch.arange(seq_len, device=device).unsqueeze(1) + col_idx = torch.arange(seq_len, device=device).unsqueeze(0) + mask = mask.masked_fill((row_idx - col_idx).abs() > self.window_size[0], float("-inf")) + return mask + + def forward(self, hidden_states, cu_seqlens, max_seqlen, rope_position_embeddings=None): + total_len = hidden_states.shape[0] + q = self.q_proj(hidden_states).view(total_len, self.num_heads, self.head_dim) + k = self.k_proj(hidden_states).view(total_len, self.num_heads, self.head_dim) + v = self.v_proj(hidden_states).view(total_len, self.num_heads, self.head_dim) + if rope_position_embeddings is not None: + cos, sin = rope_position_embeddings + q, k = _at_apply_rotary_pos_emb(q, k, cos, sin) + num_seqs = cu_seqlens.shape[0] - 1 + outputs = [] + for i in range(num_seqs): + start, end = cu_seqlens[i].item(), cu_seqlens[i + 1].item() + seq_len = end - start + q_seq = q[start:end].transpose(0, 1).unsqueeze(0) + k_seq = k[start:end].transpose(0, 1).unsqueeze(0) + v_seq = v[start:end].transpose(0, 1).unsqueeze(0) + attn_mask = self._build_attn_mask(seq_len, q_seq.device, q_seq.dtype) + out = F.scaled_dot_product_attention(q_seq, k_seq, v_seq, attn_mask=attn_mask, scale=self.scaling) + outputs.append(out.squeeze(0).transpose(0, 1)) + return self.out_proj(torch.cat(outputs, dim=0).reshape(total_len, self.embed_dim)) + + +class AudioTokenizerTransformerLayer(nn.Module): + def __init__(self, config: MiMoAudioTokenizerConfig, causal: bool, attn_window_size: tuple[int, int] = (-1, -1)): + super().__init__() + self.embed_dim = config.d_model + self.self_attn = AudioTokenizerAttention( + embed_dim=self.embed_dim, num_heads=config.encoder_attention_heads, + window_size=attn_window_size, causal=causal, + ) + self.self_attn_layer_norm = _AT_LAYER_NORM[config.ln_type](self.embed_dim) + self.activation_fn = ACT2FN[config.activation_function] + self.fc1 = nn.Linear(self.embed_dim, config.encoder_ffn_dim) + self.fc2 = nn.Linear(config.encoder_ffn_dim, self.embed_dim) + self.final_layer_norm = _AT_LAYER_NORM[config.ln_type](self.embed_dim) + + def forward(self, hidden_states, cu_seqlens, max_seqlen, rope_position_embeddings): + residual = hidden_states + hidden_states = self.self_attn_layer_norm(hidden_states) + hidden_states = self.self_attn(hidden_states, cu_seqlens, max_seqlen, rope_position_embeddings=rope_position_embeddings) + hidden_states = residual + hidden_states + residual = hidden_states + hidden_states = self.final_layer_norm(hidden_states) + hidden_states = self.activation_fn(self.fc1(hidden_states)) + hidden_states = self.fc2(hidden_states) + hidden_states = residual + hidden_states + return hidden_states + + +class AudioTokenizerEncoder(nn.Module): + def __init__(self, config: MiMoAudioTokenizerConfig): + super().__init__() + self.config = config + self.max_source_positions = (config.max_audio_seconds * config.sampling_rate // config.hop_length) // config.stride_size + self.embed_scale = math.sqrt(config.d_model) if config.scale_embedding else 1.0 + self.skip_layer_idx = config.encoder_skip_layer_id + + self.conv1 = nn.Conv1d(config.n_mels, config.d_model, kernel_size=config.kernel_size, padding=1) + self.conv2 = nn.Conv1d(config.d_model, config.d_model, kernel_size=config.kernel_size, stride=config.stride_size, padding=1) + + self.position_embedding = AudioTokenizerRotaryEmbedding( + config.rope_theta, config.d_model // config.encoder_attention_heads, + self.max_source_positions, config.rope_type, + ) + + attn_window_sizes = [] + if config.hybrid_attention: + for i in range(config.encoder_layers): + if i % config.swa_per_block < config.swa_per_block - 1: + attn_window_sizes.append(tuple(config.encoder_attn_window_size)) + else: + attn_window_sizes.append((-1, -1)) + else: + attn_window_sizes = [tuple(config.encoder_attn_window_size)] * config.encoder_layers + + self.layers = nn.ModuleList([ + AudioTokenizerTransformerLayer(config=config, causal=config.encoder_causal, attn_window_size=attn_window_sizes[i]) + for i in range(config.encoder_layers) + ]) + + self.layer_norm = _AT_LAYER_NORM[config.ln_type](config.d_model) + + if config.avg_pooler != 1: + self.down_sample_layer = nn.Sequential( + nn.Conv1d(config.d_model, config.d_model, config.avg_pooler, config.avg_pooler, bias=False), + nn.GELU(), + ) + self.down_sample_norm = _AT_LAYER_NORM[config.ln_type](config.d_model) + else: + self.down_sample_layer = None + + if config.num_quantizers != 0: + self.quantizer = ResidualVectorQuantizer( + dimension=config.d_model, n_q=config.num_quantizers, + bins=config.codebook_size, + threshold_ema_dead_code=config.threshold_ema_dead_code, + ) + else: + self.quantizer = None + + def get_output_length(self, mel_len): + tgt_len = mel_len + 3 - self.config.kernel_size + return (tgt_len + 2 - self.config.kernel_size) // self.config.stride_size + 1 + + def get_features(self, input_features, output_length): + input_features = input_features.to(self.conv1.weight) + inputs_embeds = F.gelu(self.conv1(input_features)) + inputs_embeds = F.gelu(self.conv2(inputs_embeds)) + inputs_embeds = inputs_embeds.permute(0, 2, 1) + bsz, tgt_len, _ = inputs_embeds.size() + + position_ids = _at_get_position_ids(output_length).long().to(input_features.device) + rope_position_embeddings = self.position_embedding(input_features, position_ids) + + attention_mask, unpacking_index = _at_get_sequence_mask(inputs_embeds, output_length) + hidden_states = torch.masked_select(inputs_embeds, attention_mask).view( + torch.sum(output_length), self.config.d_model + ) + + cu_seqlens = F.pad(torch.cumsum(output_length, dim=0), (1, 0), "constant", 0).to( + device=hidden_states.device, dtype=torch.int32 + ) + max_seqlen = torch.max(output_length).to(torch.int32).item() + + skip_connect_hidden_states = 0.0 + for idx, encoder_layer in enumerate(self.layers): + hidden_states = encoder_layer(hidden_states, cu_seqlens, max_seqlen, rope_position_embeddings=rope_position_embeddings) + if self.skip_layer_idx is not None and idx == self.skip_layer_idx - 1: + skip_connect_hidden_states = hidden_states.clone() + + hidden_states += skip_connect_hidden_states + hidden_states = self.layer_norm(hidden_states) + + if self.down_sample_layer is not None: + hidden_states = torch.index_select(hidden_states, 0, unpacking_index).view(bsz, tgt_len, self.config.d_model) + if hidden_states.size(1) % self.config.avg_pooler: + pad_len = self.config.avg_pooler - hidden_states.size(1) % self.config.avg_pooler + hidden_states = F.pad(hidden_states, (0, 0, 0, pad_len), mode="constant", value=0.0) + tgt_len += pad_len + tgt_len = tgt_len // self.config.avg_pooler + hidden_states = self.down_sample_layer(hidden_states.transpose(1, 2)) + output_length = output_length // self.config.avg_pooler + (output_length % self.config.avg_pooler != 0).int() + hidden_states = hidden_states.transpose(1, 2) + attention_mask, unpacking_index = _at_get_sequence_mask(hidden_states, output_length) + hidden_states = torch.masked_select(hidden_states, attention_mask).view( + torch.sum(output_length), self.config.d_model + ) + hidden_states = self.down_sample_norm(hidden_states) + + return hidden_states, output_length, attention_mask, unpacking_index, tgt_len, bsz + + @torch.no_grad() + def encode(self, input_features, input_lens=None, output_length=None, return_codes_only=False, n_q=None, use_quantizer=True): + if output_length is None: + output_length = self.get_output_length(input_lens) + input_features = _at_unpack_hidden_states(input_features, input_lens) + hidden_states, output_length, attention_mask, unpacking_index, tgt_len, bsz = self.get_features( + input_features=input_features.transpose(1, 2), output_length=output_length, + ) + dtype = hidden_states.dtype + if use_quantizer and self.quantizer is not None: + self.quantizer.float() + codes = self.quantizer.encode(hidden_states.float(), n_q=n_q) + if return_codes_only: + return codes, output_length + hidden_states = self.quantizer.decode(codes) + hidden_states = hidden_states.to(dtype) + else: + codes = None + hidden_states_packed = hidden_states.clone() + hidden_states = torch.index_select(hidden_states, 0, unpacking_index).view(bsz, tgt_len, self.config.d_model) + hidden_states = torch.where(attention_mask, hidden_states, 0) + return hidden_states, hidden_states_packed, output_length, codes + + +class MiMoAudioTokenizer(PreTrainedModel): + config_class = MiMoAudioTokenizerConfig + + def __init__(self, config: MiMoAudioTokenizerConfig): + super().__init__(config) + self.config = config + self.sampling_rate = config.sampling_rate + self.encoder = AudioTokenizerEncoder(config=config) + self.downsample_rate = int(config.hop_length * 2 * config.avg_pooler) + + def get_output_length(self, mel_len): + return self.encoder.get_output_length(mel_len) + + @torch.no_grad() + def encode(self, mels, input_lens, use_quantizer=True): + return self.encoder.encode(mels, input_lens=input_lens, use_quantizer=use_quantizer) + + +def _at_group_by_length(features, lengths, max_length): + split_points, current_sum = [], 0 + for i, seq_len in enumerate(lengths): + if current_sum + seq_len > max_length and current_sum > 0: + split_points.append(i) + current_sum = seq_len.item() + else: + current_sum += seq_len.item() + group_sizes, prev = [], 0 + for point in split_points: + group_sizes.append(point - prev) + prev = point + if prev < len(lengths): + group_sizes.append(len(lengths) - prev) + len_groups = torch.split(lengths, group_sizes) + feature_groups = torch.split(features, [g.sum().item() for g in len_groups]) + return feature_groups, len_groups + + +@torch.no_grad() +def tokenize_audio_batch(mels, audio_tokenizer_encoder, segment_size=6000, device=None): + if not mels: + return [] + if device is None: + device = next(audio_tokenizer_encoder.parameters()).device + input_len_seg_per_mel = [] + for m in mels: + input_len = m.size(0) + segs = [segment_size] * (input_len // segment_size) + if input_len % segment_size > 0: + segs.append(input_len % segment_size) + input_len_seg_per_mel.append(segs) + input_lens_flat = [s for segs in input_len_seg_per_mel for s in segs] + input_features = torch.cat([m.to(device) for m in mels], dim=0) + input_lens_t = torch.tensor(input_lens_flat, dtype=torch.long, device=device) + feature_groups, len_groups = _at_group_by_length(input_features, input_lens_t, 256000) + encoded_parts = [] + for features, lengths in zip(feature_groups, len_groups): + codes, _ = audio_tokenizer_encoder.encode(input_features=features, input_lens=lengths, return_codes_only=True) + encoded_parts.append(codes) + codes = torch.cat(encoded_parts, dim=-1).transpose(0, 1).detach() + code_lengths = [] + for segs in input_len_seg_per_mel: + out_len = audio_tokenizer_encoder.get_output_length(torch.tensor(segs, dtype=torch.long, device=device)) + if getattr(audio_tokenizer_encoder, "down_sample_layer", None) is not None: + avg = audio_tokenizer_encoder.config.avg_pooler + out_len = out_len // avg + (out_len % avg != 0).long() + code_lengths.append(out_len.sum().item()) + return list(torch.split(codes, code_lengths)) + + +# --------------------------------------------------------------------------- +# LLM backbone +# --------------------------------------------------------------------------- + + +class MiMoV2Model(PreTrainedModel): + config_class = MiMoV2Config + attention_projection_layout = "split" + + def __init__(self, config): + super().__init__(config) + self.attention_projection_layout = getattr( + config, "attention_projection_layout", self.attention_projection_layout + ) + self.vocab_size = config.vocab_size + self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size) + self.layers = nn.ModuleList( + [ + MiMoV2DecoderLayer( + config, + layer_idx, + attention_projection_layout=self.attention_projection_layout, + ) + for layer_idx in range(config.num_hidden_layers) + ] + ) + self.norm = MiMoV2RMSNorm(config.hidden_size, eps=config.layernorm_epsilon) + self.rotary_emb = MiMoV2RotaryEmbedding(config=config, is_swa=False) + self.swa_rotary_emb = MiMoV2RotaryEmbedding(config=config, is_swa=True) + self.has_sliding_layers = any(pattern == 1 for pattern in config.hybrid_layer_pattern) + self.config.layer_types = [ + "sliding_attention" if config.hybrid_layer_pattern[i] == 1 else "full_attention" + for i in range(config.num_hidden_layers) + ] + self.post_init() + + def get_input_embeddings(self): + return self.embed_tokens + + def set_input_embeddings(self, value): + self.embed_tokens = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Cache] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + **kwargs: Unpack[TransformersKwargs], + ) -> BaseModelOutputWithPast: + if (input_ids is None) ^ (inputs_embeds is not None): + raise ValueError("You must specify exactly one of input_ids or inputs_embeds") + + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if inputs_embeds is None: + inputs_embeds = self.embed_tokens(input_ids) + + if use_cache and past_key_values is None: + past_key_values = DynamicCache(config=self.config) + + 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) + + if not isinstance(causal_mask_mapping := attention_mask, dict): + mask_kwargs = { + "config": self.config, + "input_embeds": inputs_embeds, + "attention_mask": attention_mask, + "cache_position": cache_position, + "past_key_values": past_key_values, + "position_ids": position_ids, + } + causal_mask_mapping = { + "full_attention": create_causal_mask(**mask_kwargs), + } + if self.has_sliding_layers: + if getattr(self.config, "sliding_window", None) is None: + raise ValueError("MiMoV2 config `sliding_window` must be set when hybrid_layer_pattern uses SWA.") + causal_mask_mapping["sliding_window_attention"] = create_sliding_window_causal_mask(**mask_kwargs) + + hidden_states = inputs_embeds + position_embeddings = self.rotary_emb(hidden_states, position_ids) + swa_position_embeddings = self.swa_rotary_emb(hidden_states, position_ids) + + for decoder_layer in self.layers[: self.config.num_hidden_layers]: + hidden_states = decoder_layer( + hidden_states, + attention_mask=causal_mask_mapping[decoder_layer.attention_type], + position_embeddings=position_embeddings + if decoder_layer.attention_type == "full_attention" + else swa_position_embeddings, + position_ids=position_ids, + past_key_values=past_key_values, + use_cache=use_cache, + cache_position=cache_position, + **kwargs, + ) + + hidden_states = self.norm(hidden_states) + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=past_key_values if use_cache else None, + ) + + +class MiMoV2ForCausalLM(PreTrainedModel, GenerationMixin): + config_class = MiMoV2Config + model_class = MiMoV2Model + _tied_weights_keys = {"lm_head.weight": "model.embed_tokens.weight"} + _tp_plan = {"lm_head": "colwise_rep"} + _pp_plan = {"lm_head": (["hidden_states"], ["logits"])} + _keys_to_ignore_on_load_unexpected = [ + r"model\.(swa_)?rotary_emb\.inv_freq", + r"model\.layers\.\d+\.self_attn\.rotary_emb\.inv_freq", + r"model\.layers\.\d+\.self_attn\.rotary_emb\.(cos_cached|sin_cached)", + r"model\.mtp\..*", + ] + _keys_to_ignore_on_load_missing = [ + r"audio_encoder\.input_local_transformer\.embed_tokens\.weight", + ] + + def __init__(self, config): + super().__init__(config) + self.model = self.model_class(config) + self.vocab_size = config.vocab_size + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + if config.vision_config: + self.visual = MiMoVisionTransformer(_as_namespace(config.vision_config)) + if config.audio_config: + audio_cfg = _as_namespace(config.audio_config) + self.speech_embeddings = _build_speech_embeddings(audio_cfg) + self.audio_encoder = MiMoAudioEncoder(audio_cfg) + + self.audio_tokenizer = None + self.post_init() + + def load_audio_tokenizer(self, path: str, device: torch.device | str | None = None, dtype: torch.dtype = torch.bfloat16): + """Load the audio tokenizer from a directory containing config.json and model.safetensors.""" + import json + import os + + from safetensors.torch import load_file + + config_path = os.path.join(path, "config.json") + with open(config_path) as f: + config_dict = json.load(f) + tokenizer_config = MiMoAudioTokenizerConfig(**config_dict) + tokenizer_model = MiMoAudioTokenizer(tokenizer_config) + + safetensors_path = os.path.join(path, "model.safetensors") + bin_path = os.path.join(path, "pytorch_model.bin") + if os.path.exists(safetensors_path): + state_dict = load_file(safetensors_path, device="cpu") + elif os.path.exists(bin_path): + state_dict = torch.load(bin_path, map_location="cpu", weights_only=True) + else: + raise FileNotFoundError(f"No model weights found in {path}") + tokenizer_model.load_state_dict(state_dict, strict=False) + + if device is None: + device = next(self.parameters()).device + tokenizer_model = tokenizer_model.to(device=device, dtype=dtype) + tokenizer_model.eval() + tokenizer_model.requires_grad_(False) + self.audio_tokenizer = tokenizer_model + + def get_input_embeddings(self): + return self.model.embed_tokens + + def set_input_embeddings(self, value): + self.model.embed_tokens = value + + def get_output_embeddings(self): + return self.lm_head + + def set_output_embeddings(self, new_embeddings): + self.lm_head = new_embeddings + + def _get_multimodal_embeds( + self, + input_ids: torch.Tensor, + inputs_embeds: torch.Tensor, + pixel_values: Optional[torch.Tensor] = None, + image_grid_thw: Optional[torch.Tensor] = None, + image_embeds: Optional[torch.Tensor] = None, + video_pixel_values: Optional[torch.Tensor] = None, + video_grid_thw: Optional[torch.Tensor] = None, + video_embeds: Optional[torch.Tensor] = None, + audio_codes: Optional[torch.Tensor] = None, + audio_embeds: Optional[torch.Tensor] = None, + ) -> torch.Tensor: + has_image = image_embeds is not None or pixel_values is not None + has_video = video_embeds is not None or video_pixel_values is not None + has_audio = audio_embeds is not None or audio_codes is not None + + if not (has_image or has_video or has_audio): + return inputs_embeds + + inputs_embeds = inputs_embeds.clone() + + if has_image: + cur_image_embeds = image_embeds if image_embeds is not None else self.visual(pixel_values=pixel_values, grid_thw=image_grid_thw) + _replace_modal_embeddings_inplace( + input_ids=input_ids, inputs_embeds=inputs_embeds, + token_id=getattr(self.config, "image_token_id", None), modal_embeds=cur_image_embeds, + ) + + if has_video: + cur_video_embeds = video_embeds if video_embeds is not None else self.visual(pixel_values=video_pixel_values, grid_thw=video_grid_thw) + _replace_modal_embeddings_inplace( + input_ids=input_ids, inputs_embeds=inputs_embeds, + token_id=getattr(self.config, "video_token_id", None), modal_embeds=cur_video_embeds, + ) + + if has_audio: + _replace_modal_embeddings_inplace( + input_ids=input_ids, inputs_embeds=inputs_embeds, + token_id=getattr(self.config, "audio_token_id", None), + modal_embeds=self.audio_encoder( + speech_embeddings=self.speech_embeddings, audio_codes=audio_codes, audio_embeds=audio_embeds, + ), + ) + + return inputs_embeds + + @can_return_tuple + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Cache] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + logits_to_keep: Union[int, torch.Tensor] = 0, + pixel_values: Optional[torch.Tensor] = None, + image_grid_thw: Optional[torch.Tensor] = None, + image_embeds: Optional[torch.Tensor] = None, + video_pixel_values: Optional[torch.Tensor] = None, + video_grid_thw: Optional[torch.Tensor] = None, + video_embeds: Optional[torch.Tensor] = None, + audio_codes: Optional[torch.Tensor] = None, + audio_embeds: Optional[torch.Tensor] = None, + **kwargs: Unpack[TransformersKwargs], + ) -> CausalLMOutputWithPast: + if inputs_embeds is None and input_ids is not None: + inputs_embeds = self.model.get_input_embeddings()(input_ids) + if any(x is not None for x in [pixel_values, image_embeds, video_pixel_values, video_embeds, audio_codes, audio_embeds]): + inputs_embeds = self._get_multimodal_embeds( + input_ids=input_ids, inputs_embeds=inputs_embeds, + pixel_values=pixel_values, image_grid_thw=image_grid_thw, image_embeds=image_embeds, + video_pixel_values=video_pixel_values, video_grid_thw=video_grid_thw, video_embeds=video_embeds, + audio_codes=audio_codes, audio_embeds=audio_embeds, + ) + input_ids = None + + outputs: BaseModelOutputWithPast = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + cache_position=cache_position, + **kwargs, + ) + + hidden_states = outputs.last_hidden_state + slice_indices = slice(-logits_to_keep, None) if isinstance(logits_to_keep, int) else logits_to_keep + logits = self.lm_head(hidden_states[:, slice_indices, :]) + + loss = None + if labels is not None: + loss = self.loss_function(logits=logits, labels=labels, vocab_size=self.config.vocab_size, **kwargs) + + return CausalLMOutputWithPast( + loss=loss, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + +__all__ = [ + "MiMoAudioTokenizer", + "MiMoAudioTokenizerConfig", + "MiMoV2Attention", + "MiMoV2DecoderLayer", + "MiMoV2ForCausalLM", + "MiMoV2MLP", + "MiMoV2MoE", + "MiMoV2MoEGate", + "MiMoV2Model", + "MiMoV2RMSNorm", + "MiMoV2RotaryEmbedding", +] diff --git a/mtp/config.json b/mtp/config.json new file mode 100644 index 0000000000000000000000000000000000000000..b27a27e03bd1f9544592f36002951efcfcf10a5b --- /dev/null +++ b/mtp/config.json @@ -0,0 +1,98 @@ +{ + "format": "mlx", + "architecture": "MiMo-V2.6 native MTP", + "num_nextn_predict_layers": 3, + "quantization": { + "model.mtp.layers.2.self_attn.qkv_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.0.self_attn.qkv_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.2.mlp.down_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.1.self_attn.qkv_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.2.eh_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.1.self_attn.o_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.1.mlp.up_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.0.self_attn.o_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.1.mlp.gate_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.2.self_attn.o_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.1.mlp.down_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.0.mlp.up_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.0.mlp.down_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.1.eh_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.0.mlp.gate_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.2.mlp.gate_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.0.eh_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + }, + "model.mtp.layers.2.mlp.up_proj.weight": { + "group_size": 64, + "bits": 4, + "mode": "affine" + } + }, + "runtime_status": "weights retained; requires a MiMo MTP-capable runtime" +} diff --git a/mtp/model_mtp.safetensors b/mtp/model_mtp.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6269609280f073ef5b940bc0376519a2efa3cb20 --- /dev/null +++ b/mtp/model_mtp.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee3a2b6eb1b7dbabec67d979f499356f2469e0f955224a4188145dbc0feeacd8 +size 555745678 diff --git a/omnimodal/audio_encoder.safetensors b/omnimodal/audio_encoder.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..a561fcec08641610d8d368929086f27cf5e7de80 --- /dev/null +++ b/omnimodal/audio_encoder.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7cf8d8564208481a045b981db782fd9f95244213318cde90e94f3ebe2ccaa4b +size 522267128 diff --git a/omnimodal/config.json b/omnimodal/config.json new file mode 100644 index 0000000000000000000000000000000000000000..9e0d9673d479e810bb2cd0ff8e581e9f16f702b4 --- /dev/null +++ b/omnimodal/config.json @@ -0,0 +1,376 @@ +{ + "add_full_attention_sink_bias": false, + "add_swa_attention_sink_bias": true, + "architectures": [ + "MiMoV2ForCausalLM" + ], + "attention_bias": false, + "attention_chunk_size": 128, + "attention_dropout": 0.0, + "attention_projection_layout": "fused_qkv", + "attention_value_scale": 0.707, + "moe_router_dtype": "bfloat16", + "audio_config": { + "add_post_norm": true, + "audio_channels": 20, + "audio_segment_size": 6000, + "group_size": 4, + "input_full_attention": true, + "input_local_attn_heads": 16, + "input_local_dim": 1024, + "input_local_head_dim": 64, + "input_local_hidden_dropout": 0.0, + "input_local_intermediate_size": 4096, + "input_local_layers": 6, + "out_hidden_size": 4096, + "partial_rotary_factor": 1.0, + "projection_layers": 2, + "rope_theta": 640000, + "speech_vocab_size": "1280", + "speech_zeroemb_idx": "1024" + }, + "audio_end_token_id": 151674, + "audio_start_token_id": 151673, + "audio_token_id": 151669, + "auto_map": { + "AutoConfig": "configuration_mimo_v2.MiMoV2Config", + "AutoModel": "modeling_mimo_v2.MiMoV2Model", + "AutoModelForCausalLM": "modeling_mimo_v2.MiMoV2ForCausalLM" + }, + "bos_token_id": null, + "dtype": "bfloat16", + "eos_token_id": 151645, + "head_dim": 192, + "hidden_act": "silu", + "hidden_size": 4096, + "hybrid_block_size": null, + "hybrid_layer_pattern": [ + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0 + ], + "image_token_id": 151655, + "initializer_range": 0.02, + "intermediate_size": 16384, + "layernorm_epsilon": 1e-06, + "max_position_embeddings": 1048576, + "model_type": "mimo_v2", + "moe_intermediate_size": 2048, + "moe_layer_freq": [ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "n_group": 1, + "n_routed_experts": 256, + "n_shared_experts": null, + "norm_topk_prob": true, + "num_attention_heads": 64, + "num_experts_per_tok": 8, + "num_hidden_layers": 48, + "num_key_value_heads": 4, + "num_nextn_predict_layers": 3, + "pad_token_id": 151643, + "partial_rotary_factor": 0.334, + "processor_config": { + "audio_avg_pooler": 2, + "audio_channels": 20, + "audio_end_token_id": 151674, + "audio_fmax": null, + "audio_fmin": 0, + "audio_group_size": 4, + "audio_hop_length": 240, + "audio_input_id_per_second": 25.0, + "audio_kernel_size": 3, + "audio_n_mels": 128, + "audio_nfft": 960, + "audio_sampling_rate": 24000, + "audio_segment_size": 6000, + "audio_start_token_id": 151673, + "audio_stride_size": 2, + "audio_token_id": 151669, + "audio_window_size": 960, + "audio_zeroemb_idx": [ + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024, + 1024 + ], + "fps": 1.0, + "image_max_pixels": 8388608, + "image_min_pixels": 8192, + "image_token_id": 151655, + "max_frames": 3600, + "merge_size": 2, + "min_frames": null, + "num_frames": null, + "pad_token_id": 151643, + "patch_size": 16, + "rope_type": "rope", + "temporal_compression_ratio": 1, + "temporal_patch_size": 2, + "use_per_grid_t_timestamps": false, + "use_video_timestamps": true, + "video_audio_interleave_length": 0.0, + "video_end_token_id": 151671, + "video_max_pixels": 8388608, + "video_min_pixels": 8192, + "video_process_num_threads": 16, + "video_start_token_id": 151670, + "video_token_id": 151656, + "video_tokens_per_second": 2, + "video_total_max_pixels": 268435456, + "vision_end_token_id": 151653, + "vision_start_token_id": 151652 + }, + "quantization_config": { + "activation_scheme": "dynamic", + "fmt": "e4m3", + "ignored_layers": [ + "model.layers.0.self_attn.o_proj", + "model.layers.1.self_attn.o_proj", + "model.layers.10.self_attn.o_proj", + "model.layers.11.self_attn.o_proj", + "model.layers.12.self_attn.o_proj", + "model.layers.13.self_attn.o_proj", + "model.layers.14.self_attn.o_proj", + "model.layers.15.self_attn.o_proj", + "model.layers.16.self_attn.o_proj", + "model.layers.17.self_attn.o_proj", + "model.layers.18.self_attn.o_proj", + "model.layers.19.self_attn.o_proj", + "model.layers.2.self_attn.o_proj", + "model.layers.20.self_attn.o_proj", + "model.layers.21.self_attn.o_proj", + "model.layers.22.self_attn.o_proj", + "model.layers.23.self_attn.o_proj", + "model.layers.24.self_attn.o_proj", + "model.layers.25.self_attn.o_proj", + "model.layers.26.self_attn.o_proj", + "model.layers.27.self_attn.o_proj", + "model.layers.28.self_attn.o_proj", + "model.layers.29.self_attn.o_proj", + "model.layers.3.self_attn.o_proj", + "model.layers.30.self_attn.o_proj", + "model.layers.31.self_attn.o_proj", + "model.layers.32.self_attn.o_proj", + "model.layers.33.self_attn.o_proj", + "model.layers.34.self_attn.o_proj", + "model.layers.35.self_attn.o_proj", + "model.layers.36.self_attn.o_proj", + "model.layers.37.self_attn.o_proj", + "model.layers.38.self_attn.o_proj", + "model.layers.39.self_attn.o_proj", + "model.layers.4.self_attn.o_proj", + "model.layers.40.self_attn.o_proj", + "model.layers.41.self_attn.o_proj", + "model.layers.42.self_attn.o_proj", + "model.layers.43.self_attn.o_proj", + "model.layers.44.self_attn.o_proj", + "model.layers.45.self_attn.o_proj", + "model.layers.46.self_attn.o_proj", + "model.layers.47.self_attn.o_proj", + "model.layers.5.self_attn.o_proj", + "model.layers.6.self_attn.o_proj", + "model.layers.7.self_attn.o_proj", + "model.layers.8.self_attn.o_proj", + "model.layers.9.self_attn.o_proj", + "model.decoder.self_attn.o_proj" + ], + "mxfp4_block_size": 32, + "quant_method": "fp8", + "store_dtype": "mxfp4", + "weight_block_size": [ + 128, + 128 + ] + }, + "rope_parameters": { + "partial_rotary_factor": 0.334, + "rope_theta": 10000000.0, + "rope_type": "default", + "type": "default" + }, + "rope_theta": 10000000.0, + "routed_scaling_factor": null, + "scoring_func": "sigmoid", + "sliding_window": 128, + "sliding_window_size": 128, + "swa_head_dim": 192, + "swa_num_attention_heads": 64, + "swa_num_key_value_heads": 8, + "swa_rope_theta": 10000.0, + "swa_v_head_dim": 128, + "tie_word_embeddings": false, + "topk_group": 1, + "topk_method": "noaux_tc", + "transformers_version": "5.3.0", + "use_cache": true, + "v_head_dim": 128, + "video_token_id": 151656, + "vision_config": { + "depth": 28, + "fullatt_block_indexes": [ + 0, + 9, + 18, + 27 + ], + "hidden_act": "silu", + "hidden_size": 1280, + "in_chans": 3, + "intermediate_size": 4608, + "num_heads": 32, + "num_key_value_heads": 8, + "num_query_groups": 4, + "out_hidden_size": 4096, + "patch_size": 16, + "spatial_merge_size": 2, + "spatial_patch_size": 16, + "temporal_patch_size": 2, + "tokens_per_second": 2, + "use_sink": true, + "visual_token_window_size": 64, + "vit_window_attn_types": [ + -1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + -1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + -1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + -1 + ], + "window_size": 128 + }, + "vision_end_token_id": 151653, + "vision_model_type": "mimovl", + "vision_start_token_id": 151652, + "vocab_size": 152576 +} diff --git a/omnimodal/manifest.json b/omnimodal/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..72e2afe543baf79a79f6f6b72f1e955239c860b4 --- /dev/null +++ b/omnimodal/manifest.json @@ -0,0 +1,10 @@ +{ + "source": "XiaomiMiMo/MiMo-V2.6-Flash-RL", + "vision_tensors": 364, + "audio_tensors": 95, + "vision_weights": "omnimodal/vision_encoder.safetensors", + "audio_weights": "omnimodal/audio_encoder.safetensors", + "audio_tokenizer": "audio_tokenizer/model.safetensors", + "dflash_weights": "dflash/dflash_draft_model.safetensors", + "native_mtp_weights": "mtp/model_mtp.safetensors" +} diff --git a/omnimodal/vision_encoder.safetensors b/omnimodal/vision_encoder.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..97e06d7fa31c03c30696d29479bc01ebec0a46ef --- /dev/null +++ b/omnimodal/vision_encoder.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df93fbdf577c3683ece3571712dda2f61e9685c2b43dd0a05dd55f68f22187f7 +size 1457227672 diff --git a/preprocessor_config.json b/preprocessor_config.json new file mode 100644 index 0000000000000000000000000000000000000000..f411f0c1b33500d80b7f81777cb9f5f48898e68b --- /dev/null +++ b/preprocessor_config.json @@ -0,0 +1,19 @@ +{ + "min_pixels": 3136, + "max_pixels": 12845056, + "patch_size": 16, + "temporal_patch_size": 2, + "merge_size": 2, + "image_mean": [ + 0.48145466, + 0.4578275, + 0.40821073 + ], + "image_std": [ + 0.26862954, + 0.26130258, + 0.27577711 + ], + "image_processor_type": "Qwen2VLImageProcessor", + "processor_class": "Qwen2_5_VLProcessor" +} \ No newline at end of file diff --git a/tokenizer.json b/tokenizer.json new file mode 100644 index 0000000000000000000000000000000000000000..a34b365f707937ca15dff7d9e6362ec7f649cfa0 --- /dev/null +++ b/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d4b7746684abeca0980d9b740e761c8e135cbf927feab55b377d07a6cca83e8 +size 11423819 diff --git a/tokenizer_config.json b/tokenizer_config.json new file mode 100644 index 0000000000000000000000000000000000000000..1185b8d48b3afccc29701bcd08f0c6b770094bb5 --- /dev/null +++ b/tokenizer_config.json @@ -0,0 +1,37 @@ +{ + "add_prefix_space": false, + "backend": "tokenizers", + "bos_token": null, + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "errors": "replace", + "extra_special_tokens": [ + "<|im_start|>", + "<|im_end|>", + "<|object_ref_start|>", + "<|object_ref_end|>", + "<|box_start|>", + "<|box_end|>", + "<|quad_start|>", + "<|quad_end|>", + "<|vision_start|>", + "<|vision_end|>", + "<|vision_pad|>", + "<|image_pad|>", + "<|video_pad|>", + "<|audio_pad|>", + "<|mimo_video_start|>", + "<|mimo_video_end|>", + "<|mimo_audio_eod|>", + "<|mimo_audio_start|>", + "<|mimo_audio_end|>" + ], + "is_local": true, + "local_files_only": false, + "model_max_length": 1048576, + "pad_token": "<|endoftext|>", + "split_special_tokens": false, + "tokenizer_class": "Qwen2Tokenizer", + "tool_parser_type": "json_tools", + "unk_token": null +}