- MiMo-7B ของ Xiaomi เป็นซีรีส์โมเดลภาษา 7B ที่ฝึกตั้งแต่ต้นสำหรับงานอนุมาน และเปิดโอเพนซอร์ส checkpoint ของโมเดล Base, SFT และ RL
- ในอัปเดตวันที่ 30 พฤษภาคม 2025 ได้ขยายชุดข้อมูล SFT จากประมาณ 5 แสนรายการเป็น 6 ล้านรายการ และขยายขนาดหน้าต่างการฝึก RL จาก 32K เป็น 48K ทำให้ MiMo-7B-RL-0530 ทำคะแนน AIME 2024 ได้ 80.1
- การ pretraining ใช้ประมาณ 25 ล้านล้านโทเค็น และกลยุทธ์ผสมข้อมูล 3 ขั้นตอน รวมถึงการกรองข้อมูลเพื่อเพิ่มความหนาแน่นของแพตเทิร์นการอนุมาน, ข้อมูลอนุมานสังเคราะห์ และ Multiple-Token Prediction
- การ post-training ใช้โจทย์คณิตศาสตร์·โค้ด 1.3 แสนรายการ, ตัวตรวจสอบแบบ rule-based, รางวัลความถูกต้องแบบ rule-based, รางวัลตามความยากของการทดสอบ สำหรับโจทย์โค้ด และกลยุทธ์ resampling สำหรับโจทย์ง่าย
- การ deploy มีตัวอย่างสำหรับ SGLang, vLLM fork ของ Xiaomi และ HuggingFace โดยการตรวจสอบ MiMo บน inference engine อื่นยังไม่เสร็จสิ้น และเปิดรับ contribution
เป้าหมายและขอบเขตการเผยแพร่ของซีรีส์ MiMo-7B
- MiMo-7B เป็นซีรีส์โมเดลที่มีเป้าหมายเพื่อดึงศักยภาพด้านการอนุมานของโมเดลภาษาออกมาตั้งแต่ pretraining ไปจนถึง post-training
- checkpoint ที่เผยแพร่มี 4 รายการดังนี้
- MiMo-7B-Base: โมเดล Base ที่มีศักยภาพด้านการอนุมาน
- MiMo-7B-RL-Zero: โมเดลที่ฝึกด้วย RL จากโมเดล Base
- MiMo-7B-SFT: โมเดลที่ฝึกด้วย SFT จากโมเดล Base
- MiMo-7B-RL: โมเดลที่ฝึกด้วย RL จากโมเดล SFT
- โมเดลมีให้ใช้งานบน HuggingFace และ ModelScope
- รายงานทางเทคนิคเผยแพร่บน arXiv
อัปเดตวันที่ 30 พฤษภาคม 2025
- MiMo-7B-RL-0530 สะท้อนผลจากการขยายชุดข้อมูล SFT จากประมาณ 5 แสนรายการเป็น 6 ล้านรายการ และการขยายขนาดหน้าต่างการฝึก RL ต่อเนื่องจาก 32K เป็น 48K
- บน AIME 2024 MiMo-7B-RL-0530 ทำคะแนนได้ 80.1 แซงหน้า DeepSeek R1 ที่ได้ 79.8
- การเปลี่ยนแปลงของ benchmark หลักมีดังนี้
- MATH500 Pass@1: 95.8 → 97.2
- AIME 2024 Pass@1: 68.2 → 80.1
- AIME 2025 Pass@1: 55.4 → 70.2
- LiveCodeBench v5 Pass@1: 57.8 → 60.9
- LiveCodeBench v6 Pass@1: 49.3 → 52.2
- GPQA-Diamond Pass@1: 54.4 → 60.6
- Alignbench1.1, การประเมินด้วย GPT-4.1: 6.9 → 7.4
Pretraining: โมเดล Base สำหรับการอนุมาน
- MiMo-7B-Base เป็นโมเดล Base ที่ฝึกตั้งแต่ต้นสำหรับงานอนุมาน
- การ pretraining ใช้ประมาณ 25 ล้านล้านโทเค็น
- ในการประมวลผลข้อมูล มีการปรับปรุงเครื่องมือสกัดข้อความ และใช้การกรองข้อมูลหลายมิติเพื่อเพิ่ม ความหนาแน่นของแพตเทิร์นการอนุมาน ในข้อมูล pretraining
- ใช้หลายกลยุทธ์เพื่อสร้าง ข้อมูลอนุมานสังเคราะห์ ขนาดใหญ่ที่หลากหลาย
- การ pretraining ใช้กลยุทธ์ผสมข้อมูล 3 ขั้นตอน
- เพิ่ม Multiple-Token Prediction เป็นเป้าหมายการฝึกเพิ่มเติม เพื่อปรับปรุงประสิทธิภาพของโมเดลและความเร็วในการอนุมาน
Post-training และวิธีฝึก RL
- ใน post-training ใช้ โจทย์คณิตศาสตร์·โค้ด 1.3 แสนรายการ ที่ตรวจสอบได้ด้วยตัวตรวจสอบแบบ rule-based เป็นข้อมูลฝึก RL
- แต่ละโจทย์ผ่านการคัดกรองและประเมินความยากเพื่อรับประกันคุณภาพ
- สำหรับรางวัล ใช้เฉพาะ รางวัลความถูกต้องแบบ rule-based เพื่อหลีกเลี่ยงการแฮ็กรางวัลที่อาจเกิดขึ้น
- นำรางวัลโค้ดตามความยากของการทดสอบมาใช้ เพื่อลดปัญหา sparse reward ในโจทย์โค้ดยาก
- ให้คะแนนแบบละเอียดแก่ test case ที่มีความยากต่างกัน
- policy สามารถ optimize ได้ด้วยสัญญาณรางวัลที่หนาแน่นขึ้น
- สำหรับโจทย์ง่าย ใช้กลยุทธ์ data resampling เพื่อเพิ่มประสิทธิภาพการ sampling rollout และทำให้การอัปเดต policy เสถียรขึ้น โดยเฉพาะในช่วงท้ายของการฝึก RL
โครงสร้างพื้นฐาน RL และสถาปัตยกรรมโมเดล
- Seamless Rollout Engine ถูกพัฒนาขึ้นเพื่อเร่งการฝึกและการตรวจสอบ RL
- การออกแบบผสาน continuous rollout, การคำนวณรางวัลแบบ asynchronous และ early termination เพื่อลดเวลาว่างของ GPU
- ตัวเลขการปรับปรุงประสิทธิภาพมีดังนี้
- ความเร็วการฝึกดีขึ้น 2.29 เท่า
- ความเร็วการตรวจสอบดีขึ้น 1.96 เท่า
- เลเยอร์ MTP ของ MiMo-7B ถูกจูนระหว่าง pretraining และ SFT และถูกตรึงไว้ระหว่าง RL
- เมื่อใช้เลเยอร์ MTP 1 เลเยอร์กับ speculative decoding อัตราการยอมรับอยู่ที่ประมาณ 90%
- รองรับ MTP ใน vLLM และเสริมความแข็งแกร่งของ inference engine ในระบบ RL
ผลการประเมิน
- มีการระบุว่า MiMo-7B-RL แสดงประสิทธิภาพในงานอนุมานด้านคณิตศาสตร์และโค้ดเทียบเท่า OpenAI o1-mini
- ในการเปรียบเทียบโมเดลหลัก ผลลัพธ์ด้านคณิตศาสตร์·โค้ดของ MiMo-7B-RL มีดังนี้
- MATH-500 Pass@1: 95.8
- AIME 2024 Pass@1: 68.2
- AIME 2025 Pass@1: 55.4
- LiveCodeBench v5 Pass@1: 57.8
- LiveCodeBench v6 Pass@1: 49.3
- ในการเปรียบเทียบภายในซีรีส์ MiMo-7B ประสิทธิภาพเพิ่มขึ้นอย่างมากหลังใช้ RL
- MATH500: Base 37.4 → RL-Zero 93.6 → SFT 93.0 → RL 95.8
- AIME 2024: Base 32.9 → RL-Zero 56.4 → SFT 58.7 → RL 68.2
- LiveCodeBench v5: Base 32.9 → RL-Zero 49.1 → SFT 52.3 → RL 57.8
- การตั้งค่าการประเมินคือ
temperature=0.6 - เงื่อนไขการประเมินซ้ำมีดังนี้
- AIME24 และ AIME25 เป็น ค่าเฉลี่ยจากการทำซ้ำ 32 ครั้ง
- LiveCodeBench v5, LiveCodeBench v6, GPQA-Diamond, IF-Eval เป็น ค่าเฉลี่ยจากการทำซ้ำ 8 ครั้ง
- MATH500 และ SuperGPQA เป็น การรันครั้งเดียว
การ deploy และการใช้งานอนุมาน
- SGLang รองรับ MiMo ใน mainstream ผ่านการรองรับโมเดล MiMo และการรองรับ MTP
- PR ที่เกี่ยวข้อง: MiMo model support, MTP
- เอกสารการใช้งานมีให้ที่ SGLang documents
- สำหรับการอนุมานด้วย vLLM แนะนำให้ใช้ vLLM fork ของ Xiaomi
- fork ที่แนะนำ: XiaomiMiMo/vllm
- fork นี้พัฒนาบนพื้นฐาน vLLM 0.7.3
- ยังสามารถลงทะเบียน vLLM loader ในแบบที่ไม่โหลดพารามิเตอร์ MTP ได้ด้วย
- ไฟล์ลงทะเบียน: registry/register_mimo_in_vllm.py
- ตัวอย่างการอนุมานของ HuggingFace ใช้
AutoModelForCausalLM.from_pretrainedและAutoTokenizer.from_pretrained - การตั้งค่า prompt ที่แนะนำคือ system prompt ว่าง
- การตรวจสอบ MiMo บน inference engine อื่นยังไม่เสร็จสิ้น และเปิดรับ contribution ที่อิงจากนิยามโมเดลใน repository ของ HuggingFace
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
สิ่งที่น่าสนใจคือในเปเปอร์จัดการกับ ขั้นตอน reinforcement learning สำหรับข้อมูลโค้ด อย่างไร โดยฝึกจากโจทย์สร้างโค้ดที่ยากแต่ยังแก้ได้ แล้วรันด้วย unit test จึงสงสัยว่าโมเดลอื่น ๆ ก็ผ่านขั้นตอนฝึกแบบนี้ด้วยหรือไม่
ในเปเปอร์บอกว่าตัดปัญหาที่ไม่มี test case ออก และแม้จะมีโค้ดคำตอบ หากไม่ผ่านทุกเทสต์ก็จะคัดออก ส่วนปัญหาที่ไม่มีโค้ดคำตอบ หากจากการ sampling 16 ครั้งด้วยโมเดล reasoning ระดับสูงแล้วไม่สามารถผ่านเทสต์ใด ๆ ได้เลย ก็จะทิ้งไป ปัญหาที่ง่ายก็กรองออกด้วย MiMo-7B เวอร์ชัน SFT จนสุดท้ายได้ โจทย์โค้ด 30,000 ข้อ
นอกจากนี้ ในแต่ละรอบของ reinforcement learning ต้องประเมินโจทย์หลายพันข้อและ test case หลายร้อยชุดต่อโจทย์ จึงสร้างสภาพแวดล้อม online judge ที่รัน unit test ปริมาณมหาศาลแบบขนาน เพื่อไม่ให้ GPU มีเวลาว่าง
วิธีนี้อาจทำได้กับปัญหาแบบ modular ขนาดเล็ก แต่กับปัญหาที่อินพุตยาว 200,000 token อาจทำได้ยาก
สงสัยว่าทำไมโมเดล AI จากจีนถึงมี โมเดลที่ให้ความสำคัญกับภาษาอังกฤษก่อน มากขนาดนี้ ไม่รู้ว่าไม่ได้คิดจะเจาะผู้ใช้ในประเทศตัวเองหรือเปล่า หรือเพราะแม้จะเปิดโมเดลที่ให้ความสำคัญกับภาษาจีนก่อน ก็คงยากที่จะได้รับความสนใจในโลกตะวันตก
https://commoncrawl.org/
เห็นได้ชัดว่าเป็นไปไม่ได้ที่จะทดลองอะไรบางอย่างเป็นภาษาจีนโดยตรง จึงต้องมีการแปล
ตัวอย่างเช่น คำตรงข้ามของ “small” ในภาษาอังกฤษคือ big, คำตรงข้ามของ “petit” ในภาษาฝรั่งเศสคือ grand และคำตรงข้ามของ “小” ในภาษาจีนคือ “大” ภาพประกอบที่เกี่ยวข้องก็ดูเท่มาก
ภาษาอังกฤษเป็นภาษากลางของอินเทอร์เน็ตและครองสัดส่วน corpus ใหญ่ที่สุด แต่โมเดลกระแสหลักสามารถใช้ dataset ภาษาอังกฤษเพื่อสร้างความเชื่อมโยงข้ามภาษาได้ ดังนั้นชุมชนภาษาที่ขาดข้อมูล เทคโนโลยี และทรัพยากรจนสร้างโมเดลท้องถิ่นของตนเองได้ยาก ก็อาจมี AI และความสามารถด้าน reasoning ที่แข็งแกร่งขึ้นมากได้เช่นกัน
https://www.anthropic.com/research/tracing-thoughts-language...
https://www.anthropic.com/_next/image?url=https%3A%2F%2Fwww-...
เว็บไซต์ยอดนิยมจำนวนมากยังเป็นแบบใช้ผ่านแอปเท่านั้น ทำให้เป็นไปไม่ได้ที่จะรวบรวม corpus ที่จำเป็นสำหรับการฝึก LLM ที่ดี
สำหรับโมเดล 7B แล้ว ประสิทธิภาพด้านการเขียนโค้ด แข็งแกร่งจนแทบไม่น่าเชื่อ Gemini Pro 2.5 ที่ผมใช้ได้ 67.8 แต่โมเดลนี้ได้ 57.8 และใกล้กับ Gemini 2.5 Flash ที่ได้ 60.6 มาก
หลังจากเห็นเรื่องราวเกี่ยวกับ llama4 ก็เริ่มค่อนข้างกังขากับผลประเมินแล้ว คงต้องรอดูว่าในการประเมินแบบปิดจะออกมาอยู่ประมาณไหน แต่ตัวเลขตอนนี้น่าประทับใจมาก
เวอร์ชัน GGUF ที่ใช้ได้กับ LM Studio, Ollama ฯลฯ: https://huggingface.co/jedisct1/MiMo-7B-RL-GGUF
สงสัยว่าเวลาใช้ไฟล์ gguf ใน Ollama โดยทั่วไปคนทำและใช้ Modelfile คู่กันเองหรือเปล่า หรือคาดหวังว่าค่าเริ่มต้นของ Ollama จะเข้ากับโมเดลใหม่ ๆ ได้ดีอยู่แล้ว
https://github.com/ollama/ollama/blob/main/docs%2Fmodelfile....
ข้อมูลทั้งหมดที่จำเป็นสำหรับการโหลดโมเดลอยู่ในไฟล์โมเดล และผู้ใช้ไม่จำเป็นต้องให้ข้อมูลเพิ่มเติม
https://github.com/ggml-org/ggml/blob/master/docs/gguf.md
อุตส่าห์กำจัดความสับสนจากหลายไฟล์ได้แล้ว แต่ Ollama กลับเพิ่มมันกลับเข้ามาอีก เลยรู้สึกน่าเสียดาย
ollama pullตัว Modelfile ก็จะถูกดาวน์โหลดมาพร้อมกับ blob ด้วย หากต้องการแก้ไขโมเดลแบบถาวร ก็สามารถคัดลอก Modelfile ไปไว้ในโปรแกรมแก้ไขข้อความ แล้วใส่การเปลี่ยนแปลงที่ต้องการเพื่อสร้างโมเดลใหม่จาก Modelfile เดิมได้เวิร์กโฟลว์ของผมใน Open WebUI คือดูด้วย
ollama show qwen3:30b-a3b-q8_0 --modelfileแล้วนำเนื้อหา Modelfile ไปวางในadmin -> models -> OpenwebUIจากนั้นเปลี่ยนชื่อเป็นประมาณqwen3:30b-a3b-q8_0-monkversion-1ปรับจำนวนเลเยอร์ด้วยพารามิเตอร์อย่างnum_gpu 90แล้วจะเก็บไฟล์เก่าไว้หรือลบทิ้งก็ได้ใน Modelfile จะมีคำแนะนำว่าถ้าจะสร้าง Modelfile ใหม่ให้เปลี่ยน
FROMเป็นแบบ# FROM qwen3:30b-a3b-q8_0และต้องตรวจสอบด้วยว่า path ถูกต้องหรือไม่ สำหรับผมเรื่องนี้สำคัญเพราะเก็บโมเดลไว้ในไดรฟ์ NVMe ขนาดใหญ่ ไม่ใช่ตำแหน่งเริ่มต้นของ Ollamaเสริมว่า ผมไม่ชอบ เวิร์กโฟลว์ Modelfile เลย เพราะมันยุ่งยากและเป็นแพตเทิร์นที่แย่มาก บางโมเดลมีขนาด 30–60GB แต่ต้องคัดลอกทั้งหมดเพียงเพื่อเปลี่ยนพารามิเตอร์เดียว เป็นวิธีที่โง่มาก
ถึงอย่างนั้น Ollama ก็มีหลายอย่างที่ทำได้ดี และทำให้เริ่มต้นใช้งานได้ง่าย ส่วน vLLM, SGLang, Mistral.rs, llama.cpp ต้องทำงานตั้งค่าเยอะกว่ามาก
เห็นในการ benchmark ตัดโมเดลระดับบนอย่าง O3, Gemini Pro, Claude 3.7 ซึ่งตอนนี้ทำผลงานดีที่สุดในการประเมินหลายรายการออกไปแล้วก็แอบขำ
ต้องดูด้วยว่าคู่เทียบส่วนใหญ่เป็นโมเดล 7B ข้อยกเว้นคือ Qwen-2.5-32B-RL-Zero ซึ่งเป็นโมเดล open weights และ MiMo-7B ยังทำได้ดีกว่าโมเดล 32B parameters ด้วยซ้ำ
MiMo-7B อ้างว่าเทรนโมเดล 7B ตั้งแต่ต้นจนแซงโมเดลที่ใหญ่กว่าอย่าง Qwen-32B และทำผลงานใน benchmark ด้านคณิตศาสตร์กับโค้ดได้พอ ๆ กับ OpenAI o1-mini สงสัยว่านี่เป็นสัญญาณว่า pretraining + การปรับแต่งด้วย RLHF เริ่มเอาชนะพลังของสเกลได้แล้วจริง ๆ หรือเป็นแค่การเก่งขึ้นในการ benchmark ความสามารถเฉพาะด้านแคบ ๆ เท่านั้น
ใน README ไม่ได้ระบุว่าเป็น reinforcement learning แบบไหน แค่เขียนว่า RL เฉย ๆ เข้าใจว่านักวิจัยยุ่ง และการเขียนให้ดีต้องใช้เวลา แต่รายละเอียดแบบนี้ไม่อยากให้ตกหล่น
สงสัยว่าจะใช้โมเดลนี้ใน AI assistant ของโทรศัพท์ Xiaomi 15 series หรือไม่ ดูแล้วน่าจะมีความเป็นไปได้สูง แต่ก็ยังไม่แน่ใจว่าจะได้ผลลัพธ์แบบไหน
ยากจะเชื่อว่าโมเดล 7B จะทำ ตัวเลข benchmark แบบนี้ได้
ไม่นานมานี้ผมลองโหลดโมเดล 12B แบบสุ่มตัวหนึ่งใน Ollama แล้วเมื่อคิดถึงเครื่องที่ใช้อยู่ ก็แปลกใจว่ามันทำได้ดีและเร็วมาก เมื่อประมาณ 1 ปีก่อนคงไม่เป็นแบบนี้
https://qwenlm.github.io/blog/qwen3/