Model reference · open weights

Baichuan-M2

LLMs baichuan-inc Text gen 2 builds Open weights 1k dl/mo

Baichuan-M2 is an open-weight language model from baichuan-inc. Baichuan-M2-32B (BF16) weighs 65.5 GB; the smallest configuration that runs it is H100 80 GB.

  • Baichuan-M2 is a 32.8B parameter text-generation model developed by baichuan-inc for medical reasoning tasks.
  • It supports a context length of 131,072 tokens and operates in English and Chinese.
  • The model is licensed under the Apache 2.0 license.

Summary of the baichuan-inc/Baichuan-M2-32B model card, 2026-10-01

What it is

Released bybaichuan-inc
Released2025-08-10
Parameters32.8B
VRAM65.5 GB for the weights

What it runs on

Memory and cards for Baichuan-M2-32B (BF16)

65.5 GBweights, file size
262 MBcache per 1K tokens
896 MBruntime overhead, at least
131,072 tokenscontext max
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB … L40S 48 GB
6 smaller cards
———
A100 80 GB5143K78.2 GB
H100 80 GB3—25K78.1 GB
RTX PRO 6000 Blackwell 96 GB10284K93.8 GB
DGX Spark (GB10) 128 GB unified164all 128K107 GB
H200 141 GB317all 128K138 GB
B200 180 GB4812all 128K176 GB
2× L40S 48 GB
tensor parallel
9276K44.0 GB a card
4× RTX 4090 24 GB
tensor parallel
11290K23.4 GB a card
4× RTX 3090 24 GB
tensor parallel
11291K23.4 GB a card
4× RTX 5090 32 GB
tensor parallel
256all 128K31.0 GB a card
2× H100 80 GB
tensor parallel
369all 128K78.1 GB a card
2× A100 80 GB
tensor parallel
4110all 128K78.2 GB a card
Memory needed at each load
Requests at once8K tokens each32K tokens each
168.6 GB75.0 GB
577.2 GB109 GB
883.6 GB135 GB
16101 GB204 GB
32135 GB341 GB
64204 GB616 GB

One card, with vLLM's small-card settings.

Builds

Sizes, precisions & builds

BuildParamsPrecisionWeightsSmallest setup
Baichuan-M2-32B (above) ↗ 32.8BBF16 65.5 GBH100 80 GB
Baichuan-M2-32B-GPTQ-Int4 ↗ 32.8BGPTQ 19.3 GBRTX 4090 24 GB

From the model card

What baichuan-inc says about Baichuan-M2

Read the model card

This repository contains the model presented in Baichuan-M2: Scaling Medical Capability with Large Verifier System.

🌟 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

📊 Performance Metrics

HealthBench Scores

Model NameHealthBenchHealthBench-HardHealthBench-Consensus
Baichuan-M260.134.791.5
gpt-oss-120b57.63090
Qwen3-235B-A22B-Thinking-250755.225.990.6
Deepseek-R1-052853.622.691.5
GLM-4.547.818.785.3
Kimi-K24310.790.9
gpt-oss-20b42.510.882.6

General Performance

BenchmarkBaichuan-M2-32BQwen3-32B (Thinking)
AIME2483.481.4
AIME2572.972.9
Arena-Hard-v2.045.844.5
CFBench77.675.7
WritingBench8.567.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 model
from transformers import AutoTokenizer, AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan-M2-32B", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan-M2-32B")
# 2. Input prompt text
prompt = "Got a big swelling after a bug bite. Need help reducing it."
# 3. Encode the input text for the model
messages = [
    {"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 text
generated_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 content
try:
    # rindex finding 151668 ()
    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

  1. Replace the qwen2.py file in the sglang installation directory with draft/qwen2.py.
  2. 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

  1. Medical Disclaimer: For research and reference only; cannot replace professional medical diagnosis or tre

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms