Image-Text-to-Text
Transformers
Safetensors
minimax_m3_vl
multimodal
Mixture of Experts
agent
coding
video
conversational
custom_code
8-bit precision
quark
Instructions to use amd/MiniMax-M3-MXFP4 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use amd/MiniMax-M3-MXFP4 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="amd/MiniMax-M3-MXFP4", trust_remote_code=True) messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("amd/MiniMax-M3-MXFP4", trust_remote_code=True) model = AutoModelForMultimodalLM.from_pretrained("amd/MiniMax-M3-MXFP4", trust_remote_code=True) messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use amd/MiniMax-M3-MXFP4 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "amd/MiniMax-M3-MXFP4" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "amd/MiniMax-M3-MXFP4", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/amd/MiniMax-M3-MXFP4
- SGLang
How to use amd/MiniMax-M3-MXFP4 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "amd/MiniMax-M3-MXFP4" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "amd/MiniMax-M3-MXFP4", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "amd/MiniMax-M3-MXFP4" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "amd/MiniMax-M3-MXFP4", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use amd/MiniMax-M3-MXFP4 with Docker Model Runner:
docker model run hf.co/amd/MiniMax-M3-MXFP4
| pipeline_tag: image-text-to-text | |
| license: other | |
| license_name: minimax-community | |
| license_link: LICENSE | |
| library_name: transformers | |
| tags: | |
| - multimodal | |
| - moe | |
| - agent | |
| - coding | |
| - video | |
| base_model: | |
| - MiniMaxAI/MiniMax-M3 | |
| # Model Overview | |
| - **Model Architecture:** MiniMaxM3SparseForConditionalGeneration | |
| - **Input:** Text, Image | |
| - **Output:** Text | |
| - **Supported Hardware Microarchitecture:** AMD MI350/MI355 | |
| - **ROCm**: 7.1.1 | |
| - **PyTorch**: 2.10.0 | |
| - **Transformers**: 5.2.0 | |
| - **Operating System(s):** Linux | |
| - **Inference Engine:** [vLLM](https://docs.vllm.ai/en/latest/) | |
| - **Model Optimizer:** [AMD-Quark](https://quark.docs.amd.com/latest/index.html) | |
| - **Weight quantization:** OCP MXFP4, Static | |
| - **Activation quantization:** OCP MXFP4, Dynamic | |
| # Model Quantization | |
| The model was quantized from [MiniMaxAI/MiniMax-M3](https://huggingface.co/MiniMaxAI/MiniMax-M3) using [AMD-Quark](https://quark.docs.amd.com/latest/index.html). The weights are quantized to MXFP4 and activations are quantized to MXFP4. | |
| **Quantization scripts:** | |
| ```python | |
| from quark.torch import LLMTemplate, ModelQuantizer | |
| # --- Register template --- | |
| minimax_m3_vl_template = LLMTemplate( | |
| model_type="minimax_m3_vl", | |
| kv_layers_name=["*language_model.*k_proj", "*language_model.*v_proj"], | |
| q_layer_name="*language_model.*q_proj", | |
| exclude_layers_name=[ | |
| "*lm_head", | |
| "*vision_tower*", | |
| "*multi_modal_projector*", | |
| "*patch_merge_mlp*", | |
| "*block_sparse_moe.gate", | |
| "*self_attn*", | |
| ], | |
| ) | |
| LLMTemplate.register_template(minimax_m3_vl_template) | |
| print(f"[INFO]: Registered template '{minimax_m3_vl_template.model_type}'") | |
| # --- Configuration --- | |
| model_dir = "MiniMaxAI/MiniMax-M3" | |
| output_dir = "amd/MiniMax-M3-MXFP4" | |
| quant_scheme = "mxfp4" | |
| exclude_layers = [ | |
| "*lm_head", | |
| "*vision_tower*", | |
| "*multi_modal_projector*", | |
| "*patch_merge_mlp*", | |
| "*block_sparse_moe.gate", | |
| "*self_attn*", | |
| "*mlp.gate_proj", | |
| "*mlp.up_proj", | |
| "*mlp.down_proj", | |
| ] | |
| # --- Build quant config from template --- | |
| template = LLMTemplate.get("minimax_m3_vl") | |
| quant_config = template.get_config(scheme=quant_scheme, exclude_layers=exclude_layers) | |
| # --- File-to-file quantization (memory-efficient, no full model loading) --- | |
| quantizer = ModelQuantizer(quant_config) | |
| quantizer.direct_quantize_checkpoint( | |
| pretrained_model_path=model_dir, | |
| save_path=output_dir, | |
| ) | |
| print(f"[INFO]: Quantization complete. Output saved to {output_dir}") | |
| ``` | |
| # Evaluation | |
| The model was evaluated on gsm8k benchmarks using the vllm framework. | |
| ### Accuracy | |
| <table> | |
| <tr> | |
| <td><strong>Benchmark</strong> | |
| </td> | |
| <td><strong>MiniMaxAI/MiniMax-M3 </strong> | |
| </td> | |
| <td><strong>amd/MiniMax-M3-MXFP4(this model)</strong> | |
| </td> | |
| <td><strong>Recovery</strong> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td>gsm8k (flexible-extract) | |
| </td> | |
| <td>95.30 | |
| </td> | |
| <td>94.19 | |
| </td> | |
| <td>98.84% | |
| </td> | |
| </tr> | |
| </table> | |
| ### Reproduction | |
| The GSM8K results were obtained using the lm-eval framework, based on the | |
| Docker image `rocm/pytorch-private:vllm-hy-mm-06112026`. The vLLM shipped in | |
| that image was used as-is, with the patch from this PR ([#45794](https://github.com/vllm-project/vllm/pull/45794/changes)) applied on top. | |
| #### Launching server | |
| ```bash | |
| vllm serve /mnt/amd/MiniMax-M3-MXFP4 \ | |
| --trust-remote-code \ | |
| --block-size 128 \ | |
| --tensor-parallel-size 8 \ | |
| --attention-backend TRITON_ATTN \ | |
| --mm-encoder-tp-mode data \ | |
| --mm-encoder-attn-backend ROCM_AITER_FA \ | |
| --tool-call-parser minimax_m3 \ | |
| --enable-auto-tool-choice \ | |
| --reasoning-parser minimax_m3 \ | |
| --moe-backend emulation | |
| ``` | |
| #### Evaluating model in a new terminal | |
| ```bash | |
| lm_eval \ | |
| --model local-chat-completions \ | |
| --model_args "model=/mnt/amd/MiniMax-M3-MXFP4,base_url=http://127.0.0.1:8000/v1/chat/completions,num_concurrent=32,max_gen_toks=16384" \ | |
| --tasks gsm8k \ | |
| --num_fewshot 5 \ | |
| --batch_size 1 \ | |
| --apply_chat_template \ | |
| --fewshot_as_multiturn | |
| ``` |