minicpm5-finetune-ms-swift

star 9.5k

Fine-tune MiniCPM5-1B with ms-swift (ModelScope's SFT / DPO / KTO / ORPO toolkit). Use when the user mentions "ms-swift", "swift sft", "swift rlhf", or wants ModelScope-native training. The two mandatory flags `--model_type llama --template chatml` are baked in.

OpenBMB By OpenBMB schedule Updated 5/25/2026

name: minicpm5-finetune-ms-swift description: Fine-tune MiniCPM5-1B with ms-swift (ModelScope's SFT / DPO / KTO / ORPO toolkit). Use when the user mentions "ms-swift", "swift sft", "swift rlhf", or wants ModelScope-native training. The two mandatory flags --model_type llama --template chatml are baked in.

Fine-tune MiniCPM5-1B with ms-swift

ModelScope-native SFT / DPO / KTO / ORPO. ChatML template + standard llama model_type.

⚠️ ms-swift 4.x renamed --train_type--tuner_type. Older tutorials still use --train_type lora, which on 4.x produces ValueError: remaining_argv: ['--train_type', 'lora']. Use --tuner_type lora (or just omit it — lora is the default in 4.x).

Required input

Var Example Default
BASE_MODEL openbmb/MiniCPM5-1B required
DATA path to messages-format jsonl required
OUTPUT_DIR ./runs/minicpm5_swift required
GPU_ID 0 0

Each line of DATA: {"messages": [{"role":"...","content":"..."}, ...]}.

Steps

1. Install (once)

pip install "ms-swift>=3.0"
# or for the dev branch:
pip install git+https://github.com/modelscope/ms-swift.git

2. Train (LoRA SFT)

CUDA_VISIBLE_DEVICES=${GPU_ID} swift sft \
    --model "${BASE_MODEL}" \
    --model_type llama \
    --template chatml \
    --tuner_type lora \
    --dataset "${DATA}" \
    --output_dir "${OUTPUT_DIR}" \
    --num_train_epochs 2 \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 4 \
    --learning_rate 2e-4 \
    --lora_rank 16 --lora_alpha 32 --lora_dropout 0.05 \
    --target_modules q_proj k_proj v_proj o_proj gate_proj up_proj down_proj \
    --max_length 4096 \
    --warmup_ratio 0.03 \
    --bf16 true \
    --logging_steps 10 \
    --save_steps 200

🔑 --model_type llama AND --template chatml are MANDATORY. Without them ms-swift errors with Multiple possible types found: ['codefuse_codellama', 'llama', ...] because MiniCPM5's disk-level structure is shared with several Llama-family models and ms-swift refuses to guess.

3. Validate

Loss should decrease over the first few hundred steps:

{'loss': 4.52, 'token_acc': 0.26, 'epoch': 0.04}
{'loss': 3.57, 'token_acc': 0.35, 'epoch': 1.00}

Adapter is at ${OUTPUT_DIR}/v0-${TIMESTAMP}/checkpoint-${STEP}/.

Merge for serving

swift export \
    --model "${BASE_MODEL}" \
    --adapters "${OUTPUT_DIR}/v0-${TIMESTAMP}/checkpoint-${STEP}" \
    --merge_lora true \
    --output_dir ./minicpm5-swift-merged

The merged model is a regular LlamaForCausalLM and serves with any minicpm5-deploy-* skill.

Other trainers (DPO / KTO / ORPO / SimPO)

Same flag surface, just swap the trainer:

swift rlhf --rlhf_type dpo \
    --model "${BASE_MODEL}" --model_type llama --template chatml \
    --dataset preference.jsonl \
    --output_dir ${OUTPUT_DIR} ...

dpo / kto / orpo / simpo all work with the chatml template.

Multi-GPU

NPROC_PER_NODE=8 swift sft \
    --model "${BASE_MODEL}" --model_type llama --template chatml \
    --tuner_type lora --deepspeed default-zero2 \
    ...

Common pitfalls

  • Failed to automatically match model_type: add --model_type llama.
  • Failed to automatically match template_type: add --template chatml.
  • Conflict with LLaMA-Factory in same env: LLaMA-Factory pins transformers==4.52, ms-swift wants the latest (currently transformers ≥5.6). Use separate venvs, or set PYTHONNOUSERSITE=1 to ignore user-site transformers.

Reference

docs/finetune/ms_swift.md

Install via CLI
npx skills add https://github.com/OpenBMB/MiniCPM --skill minicpm5-finetune-ms-swift
Repository Details
star Stars 9,465
call_split Forks 621
navigation Branch main
article Path SKILL.md
More from Creator