🌟 Model Overview
Baichuan-M2-32B is Baichuan AI's medical-enhanced reasoning model, the second medical model released by Baichuan. Designed for real-world medical reasoning tasks, this model builds upon Qwen2.5-32B with an innovative Large Verifier System. Through domain-specific fine-tuning on real-world medical questions, it achieves breakthrough medical performance while maintaining strong general capabilities.
Model Features:
Baichuan-M2 incorporates three core technical innovations: First, through the Large Verifier System, it combines medical scenario characteristics to design a comprehensive medical verification framework, including patient simulators and multi-dimensional verification mechanisms; second, through medical domain adaptation enhancement via Mid-Training, it achieves lightweight and efficient medical domain adaptation while preserving general capabilities; finally, it employs a multi-stage reinforcement learning strategy, decomposing complex RL tasks into hierarchical training stages to progressively enhance the model's medical knowledge, reasoning, and patient interaction capabilities.
Core Highlights:
- 🏆 World's Leading Open-Source Medical Model: Outperforms all open-source models and many proprietary models on HealthBench, achieving medical capabilities closest to GPT-5
- 🧠 Doctor-Thinking Alignment: Trained on real clinical cases and patient simulators, with clinical diagnostic thinking and robust patient interaction capabilities
- ⚡ Efficient Deployment: Supports 4-bit quantization for single-RTX4090 deployment, with 58.5% higher token throughput in MTP version for single-user scenarios
HealthBench Scores
Table with columns: Model Name, HealthBench, HealthBench-Hard, HealthBench-Consensus| Model Name | HealthBench | HealthBench-Hard | HealthBench-Consensus |
|---|
| Baichuan-M2 | 60.1 | 34.7 | 91.5 |
| gpt-oss-120b | 57.6 | 30 | 90 |
| Qwen3-235B-A22B-Thinking-2507 | 55.2 | 25.9 | 90.6 |
| Deepseek-R1-0528 | 53.6 | 22.6 | 91.5 |
Table with columns: Benchmark, Baichuan-M2-32B, Qwen3-32B (Thinking)| Benchmark | Baichuan-M2-32B | Qwen3-32B (Thinking) |
|---|
| AIME24 | 83.4 | 81.4 |
| AIME25 | 72.9 | 72.9 |
| Arena-Hard-v2.0 | 45.8 | 44.5 |
| CFBench | 77.6 | 75.7 |
| WritingBench | 8.56 | 7.90 |
Note: AIME uses max_tokens=64k, others use 32k; temperature=0.6 for all tests.
🔧 Technical Features
📗 Technical Blog: Blog - Baichuan-M2
📑 Technical Report: Arxiv - Baichuan-M2
Large Verifier System
- Patient Simulator: Virtual patient system based on real clinical cases
- Multi-Dimensional Verification: 8 dimensions including medical accuracy, response completeness, and follow-up awareness
- Dynamic Scoring: Real-time generation of adaptive evaluation criteria for complex clinical scenarios
Medical Domain Adaptation
- Mid-Training: Medical knowledge injection while preserving general capabilities
- Reinforcement Learning: Multi-stage RL strategy optimization
- General-Specialized Balance: Carefully balanced medical, general, and mathematical composite training data
⚙️ Quick Start
# 1. load modelfrom transformers import AutoTokenizer, AutoModelForCausalLMmodel = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan-M2-32B", trust_remote_code=True)tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan-M2-32B")# 2. Input prompt textprompt = "Got a big swelling after a bug bite. Need help reducing it."# 3. Encode the input text for the modelmessages = [ {"role": "user", "content": prompt}]text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, thinking_mode='on' # on/off/auto )model_inputs = tokenizer([text], return_tensors="pt").to(model.device)# 4. Generate textgenerated_ids = model.generate( **model_inputs, max_new_tokens=4096)output_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)][0].tolist()# 5. parsing thinking contenttry: # rindex finding 151668 (</think>) index = len(output_ids) - output_ids[::-1].index(151668)except ValueError: index = 0 thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("")content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("") print("thinking content:", thinking_content)print("content:", content)
For deployment, you can use sglang>=0.4.6.post1 or vllm>=0.9.0 or to create an OpenAI-compatible API endpoint:
- SGLang:
python -m sglang.launch_server --model-path baichuan-inc/Baichuan-M2-32B --reasoning-parser qwen3
- vLLM:
vllm serve baichuan-inc/Baichuan-M2-32B --reasoning-parser qwen3
MTP inference with SGLang
- Replace the qwen2.py file in the sglang installation directory with draft/qwen2.py.
- Launch sglang:
python3 -m sglang.launch_server \--model Baichuan-M2-32B \--speculative-algorithm EAGLE3 \--speculative-draft-model-path Baichuan-M2-32B/draft \--speculative-num-steps 6 \--speculative-eagle-topk 10 \--speculative-num-draft-tokens 32 \--mem-fraction 0.9 \--cuda-graph-max-bs 2 \--reasoning-parser qwen3 \--dtype bfloat16
⚠️ Usage Notices
- Medical Disclaimer: For research and reference only; cannot replace professional medical diagnosis or treatment
- Intended Use Cases: Medical education, health consultation, clinical decision support
- Safe Use: Recommended under guidance of medical professionals
📄 License
Licensed under the Apache License 2.0. Research and commercial use permitted.
🤝 Acknowledgements
- Base Model: Qwen2.5-32B
- Training Framework: verl
- Inference Engines: vLLM, SGLang
- Quantization: AutoRound, GPTQ
Thank you to the open-source community. We commit to continuous contribution and advancement of healthcare AI.
Empowering Healthcare with AI, Making Health Accessible to All