jingyaogong/minimind
요약
이 오픈소스 프로젝트는 단 3위안의 비용과 2시간의 짧은 시간만으로 약 64M 규모의 초소형 언어 모델(MiniMind)을 처음부터 완전히 구축하는 것을 목표로 합니다. MiniMind 시리즈는 GPT-3 대비 극도로 가벼워 개인 GPU에서도 훈련 및 재현이 가능하도록 설계되었으며, MoE, 데이터 정제, 사전 훈련, SFT, LoRA, RLHF/RLAIF 등 LLM의 전 과정 코드를 오픈소스로 제공합니다. 특히 핵심 알고리즘을 제3자 라이브러리에 의존하지 않고 PyTorch로 직접 구현하여, 사용자가 LLM의 내부 작동 메커니즘을 깊이 있게 이해하고 훈련 과정을 처음부터 실습할 수 있도록 합니다.
핵심 포인트
- MiniMind는 GPT-3 대비 극도로 가벼운 초소형 언어 모델(약 64M)로, 개인 GPU에서도 훈련 및 재현이 용이합니다.
- MoE, 데이터 정제, Pretrain, SFT, LoRA, RLHF/RLAIF 등 LLM의 전 과정 파이프라인 코드를 오픈소스로 제공합니다.
- 핵심 알고리즘을 PyTorch로 직접 구현하여, 제3자 프레임워크에 의존하지 않고 LLM 작동 원리를 깊이 있게 학습할 수 있습니다.
- 단순한 튜토리얼을 넘어, 0부터 모델 구축 전 과정을 경험하며 AI 커뮤니티의 이해도를 높이는 것을 목표로 합니다.
- MiniMind-V (시각), MiniMind-O (멀티모달), MiniMind-dLM (확산 언어) 등 다양한 확장 버전을 지원합니다.
- 이 오픈소스 프로젝트는 단 3위안의 비용과 2시간의 훈련 시간만으로 약 64M 규모의 초소형 언어 모델(Small Language Model)인 MiniMind를 0부터 완전히 구축하는 것을 목표로 합니다.
- MiniMind 시리즈는 극도로 가볍습니다. 메인 라인의 최소 버전 크기는 GPT-3의 약 $\frac{1}{2700}$ 수준으로, 일반 개인 GPU에서도 훈련과 재현을 빠르게 완료할 수 있도록 설계되었습니다. 프로젝트는 대규모 언어 모델(Large Language Model, LLM)의 간결한 구조와 전체 훈련 파이프라인을 동시에 오픈소스로 공개하며, MoE, 데이터 정제(Data Cleaning), 사전 훈련(Pretrain), 지도 미세 조정(SFT), LoRA, RLHF(DPO), RLAIF(PPO / GRPO / CISPO), 도구 사용(Tool Use), Agentic RL, 적응형 사고(Adaptive Thinking) 및 모델 증류(Model Distillation) 등 전 과정의 코드를 포함합니다.
- MiniMind는 시각 모달리티 모델인 MiniMind-V, 멀티모달 Omni 모델인 MiniMind-O, 확산 언어 모델(Diffusion Language Model, MiniMind-dLM), 선형 모델(Linear Model, MiniMind-Linear)로도 확장되었습니다. 자세한 내용은 Discussion을 참조하세요.
- 프로젝트의 모든 핵심 알고리즘 코드는 제3자 라이브러리가 제공하는 고수준 추상화 인터페이스에 의존하지 않고, PyTorch를 사용하여 0부터 직접 구현되었습니다.
- 이는 단순히 대규모 언어 모델의 전 단계 오픈소스 재현 프로젝트일 뿐만 아니라, LLM 입문 및 실습을 위한 튜토리얼 세트이기도 합니다.
- 이 프로젝트가 더 많은 사람에게 재현 가능하고, 이해 가능하며, 확장 가능한 시작점을 제공하여, 함께 창조의 즐거움을 느끼고 더 넓은 AI 커뮤니티의 발전을 추진할 수 있기를 바랍니다.
참고: 본 프로젝트는 Apache 2.0 라이선스를 기반으로 오픈소스화되었으며 완전히 무료입니다. "2시간"은 단일 NVIDIA 3090에서 SFT 단계의 1 epoch를 완료하는 데 걸리는 실제 측정 시간이며, "3위안"은 해당 기간의 GPU 대여 비용을 의미합니다.
대규모 언어 모델(Large Language Model, LLM)의 등장은 전 세계적으로 AI에 대한 전례 없는 관심을 불러일으켰습니다. ChatGPT, DeepSeek, Qwen 모두 놀라운 효과를 보여주며 기술적 파도의 충격력을 실감하게 합니다. 그러나 수백억 개의 파라미터를 가진 모델 규모는 개인 장치로 훈련하기 어려울 뿐만 아니라 배포조차 버겁게 만듭니다. 대규모 모델의 "블랙박스"를 열어 내부 작동 메커니즘을 진정으로 이해하는 것은 매우 가슴 벅찬 일이어야 합니다. 안타깝게도 대부분의 탐구는 LoRA와 같은 기술을 사용하여 기존 모델에 대해 새로운 지시어나 특정 작업을 학습시키는 소량의 미세 조정 단계에서 멈추곤 합니다. 이는 뉴턴에게 21세기 스마트폰 사용법을 가르치는 것과 비슷합니다. 흥미롭기는 하지만, 물리적 본질을 이해하려는 본래의 의도에서는 벗어나 있습니다.
동시에 transformers, trl, peft와 같은 제3자 대규모 모델 프레임워크 및 도구 라이브러리는 종종 고도로 추상화된 인터페이스만을 노출합니다. 단 몇 줄의 코드로 "모델 로드 + 데이터셋 로드 + 추론 + 강화 학습"의 전체 훈련 프로세스를 완료할 수 있습니다. 이러한 효율적인 캡슐화는 편리하지만, 개발자를 저수준 구현으로부터 격리시켜 LLM 핵심 코드를 깊이 있게 이해할 기회를 약화시킵니다. 저는 "레고로 직접 비행기를 조립하는 것이 일등석에 앉아 비행하는 것보다 훨씬 더 흥분되는 일"이라고 생각합니다. 그러나 더 현실적인 문제는 인터넷에 허점이 많고 얕은 지식으로 포장된 소위 AI 튜토리얼과 유료 강의가 넘쳐난다는 점입니다. 그렇기에 본 프로젝트의 취지는 LLM의 학습 문턱을 최대한 낮추어, 모든 사람이 코드 한 줄 한 줄을 이해하는 것부터 시작하여 0부터 직접 아주 작은 언어 모델을 훈련할 수 있도록 하는 것입니다. 그렇습니다. 단순히 추론(Inference) 단계에 머무는 것이 아니라, **0부터 직접 훈련(Training from scratch)**하는 것입니다. 3위안 미만의 서버 비용만으로도 0에서 1까지 언어 모델을 구축하는 전 과정을 직접 경험할 수 있습니다.
😊 함께 창조의 즐거움을 느껴봅시다!
- 완전한 MiniMind-LLM 구조 코드(Dense + MoE)를 제공하며, 현재 메인 라인 구조는
Qwen3 / Qwen3-MoE생태계와 정렬되어 있습니다. - Tokenizer 및 토크나이저 훈련 코드를 제공하며,
<tool_call>,<tool_response>,<think>등의 템플릿 마커를 지원합니다. - Pretrain, SFT, LoRA, RLHF-DPO, RLAIF(PPO / GRPO / CISPO), Tool Use, Agentic RL, 적응형 사고 및 모델 증류를 포함한 전체 훈련 프로세스를 다룹니다.
- 수집, 증류, 정제 및 중복 제거를 거친 고품질 데이터셋을 포함한 전 단계 오픈소스 데이터를 제공합니다.
- 핵심 훈련 알고리즘과 핵심 모듈은 제3자 프레임워크의 캡슐화에 의존하지 않고 0부터 구현되었습니다.
transformers,trl,peft와 같은 주요 프레임워크는 물론,llama.cpp,vllm,ollama와 같은 일반적인 추론 엔진 및Llama-Factory와 호환됩니다.
등 훈련 프레임워크. - 단일 머신 단일 GPU 및 단일 머신 다중 GPU (DDP, DeepSpeed) 훈련을 지원하며, wandb / swanlab 시각화 및 동적 훈련 시작/중지를 지원합니다.
- C-Eval, C-MMLU, OpenBookQA 등 제3자 평가 세트에서의 평가를 지원하며, YaRN을 통한 RoPE 긴 문맥 외삽 (Long-context Extrapolation)을 지원합니다.
- OpenAI API 프로토콜과 호환되는 초간결 서버를 제공하여 FastGPT, Open-WebUI 등 제3자 Chat UI에 연결하기 용이하며,
reasoning_content,tool_calls,open_thinking을 지원합니다. - Streamlit 기반의 초간결 채팅 WebUI를 제공하며, 사고 과정(Thinking) 표시, 도구 선택 및 다회차 Tool Call을 지원합니다.
- 실험적 확장 포함: 이산 확산 언어 모델 (dLM) 및 선형 어텐션 모델 (Linear Attention)이 포함되며, 모두 메인 라인 AR 모델을 기반으로 연속 학습이 가능합니다.
| 모델 | 파라미터 수 | 출시 |
|---|---|---|
| minimind-3 | 64M | 2026.04.01 |
| ... |
🔥 2026-04-01
minimind-3/minimind-3-moe출시: 구조, Tokenizer, 훈련 파이프라인, 추론 인터페이스 및 기본 설정이 전면 업데이트되었습니다. - 구조 메인 라인이Qwen3 / Qwen3-MoE생태계와 정렬되었습니다: Dense 모델은 약64M, MoE 모델은 약198M-A64M이며, shared expert 설계를 제거했습니다. - 기본 훈련 데이터가pretrain_t2t(_mini).jsonl,sft_t2t(_mini).jsonl,rlaif.jsonl,agent_rl.jsonl및agent_rl_math.jsonl로 전환되었습니다.- 독립적인
train_reason.py를 제거했습니다. 사고 능력은chat_template + <think>와open_thinking적응형 스위치에 의해 통합 제어됩니다.toolcall능력은sft_t2t / sft_t2t_mini메인 데이터에 포함되어 있으며, 기본full_sft시 기초적인 Tool Call 능력을 갖춥니다. 동시에scripts/chat_api.py등 추론 예시를 추가했습니다. - 새로운 네이티브Agentic RL훈련 스크립트train_agent.py를 추가하여, 다회차 Tool-Use 시나리오에서의GRPO / CISPO를 지원합니다. - RLAIF / Agentic RL 훈련 프로세스의
rollout engine을 분리하여,serve_openai_api.py를 통해 생성 백엔드를 더 유연하게 전환할 수 있도록 지원합니다.web_demo.py에reasoning_content/tool_calls/open_thinking지원을 추가했습니다. - Tokenizer가BPE + ByteLevel기반으로 업데이트되었으며, 도구 호출 및 사고 마커를 추가하고 향후 확장을 위해 buffer token을 예약했습니다. - 새로운 LoRA 가중치 병합 및 내보내기 프로세스를 추가하여,scripts/convert_model.py를 통해 베이스 모델과 LoRA 가중치를 새로운 완전한 모델 가중치로 병합할 수 있습니다. - 구조도 리소스 업데이트 및 README 대폭 업데이트
2025-10-24
- 🔥 새로운 RLAIF 훈련 알고리즘 추가: PPO, GRPO, SPO (0부터 네이티브 구현)
- 체크포인트 연속 학습 기능 추가: 훈련 자동 복구, GPU 개수 변경 시 복구 지원, wandb 기록 연속성 지원
- 새로운 RLAIF 데이터셋 추가: rlaif-mini.jsonl (SFT 데이터에서 1만 개 무작위 샘플링); DPO 데이터셋 간소화 및 중국어 데이터 추가
- 새로운 YaRN 알고리즘 추가: RoPE 긴 문맥 외삽을 지원하여 긴 시퀀스 처리 능력 향상
- Adaptive Thinking: Reason 모델에서 사고 사슬 (Chain of Thought) 활성화 여부 선택 가능
- chat_template에서 Tool Calling 및 Reasoning 태그 (
<tool_call>,<think>등)를 전면 지원 - 새로운 RLAIF 섹션, 훈련 곡선 비교, 알고리즘 원리 접기 설명 추가 - SwanLab이 WandB를 대체 (중국 내 접속 용이, API 완전 호환)
- 모든 코드 규격화 및 알려진 버그 수정
2025-04-26
- 중요 업데이트
- 호환성이 필요한 경우 🔗이전 저장소 내용🔗을 방문하십시오.
- MiniMind 모델 파라미터 명칭이 Transformers 라이브러리 모델과 일치하도록 완전히 변경되었습니다 (명칭 통일).
- generate 방식 재구축, GenerationMixin 클래스를 상속받음.
- 🔥llama.cpp, vllm, ollama 등 인기 있는 제3자 생태계 지원.
- 코드 및 디렉토리 구조 규격화.
- 어휘집 (Vocabulary) 변경:
<s></s>-><|im_start|><|im_end|>
제3자 추론 프레임워크인 llama.cpp, vllm과의 호환성을 위해 이번 업데이트에는 상당한 대가가 따릅니다.
이번 업데이트에서는 25-04-26 이전의 구형 모델을 "직접" 로드하여 추론하는 기능을 더 이상 지원하지 않습니다.
Llama의 위치 인코딩 (Position Encoding) 방식과 minimind 사이에 차이가 있어, Llama 모델을 매핑한 후 QK 값이 차이가 발생하기 때문입니다.
...
More...
2025-02-09
- 출시 이후 중대한 업데이트인 minimind2 Series를 출시했습니다.
- 코드를 거의 전부 리팩토링하여 더욱 간결하고 명확한 통합 구조를 사용합니다. 구형 코드의 호환성이 필요한 경우 🔗구형 저장소 내용🔗을 방문하세요.
- 데이터 전처리 단계를 생략했습니다. 데이터셋 형식을 통일하고
jsonl형식으로 변경하여 데이터셋 다운로드 혼란 문제를 방지했습니다. - minimind2 시리즈의 효과는 MiniMind-V1 대비 현저히 향상되었습니다. - 소소한 개선 사항: {KV-Cache 작성 방식 표준화, MoE의 부하 균형 손실 (Load Balancing Loss) 고려 등}
- 모델을 개인 데이터셋으로 이전하는 훈련 방안(의료 모델, 자기 인식 샘플)을 제공합니다.
- 사전 학습 (Pre-training) 데이터셋을 정예화하고 사전 학습 데이터의 품질을 대폭 향상하여, 개인이 빠르게 훈련하는 데 필요한 시간을 대폭 단축했습니다. 단일 카드 RTX 3090으로 2시간 만에 재현 가능합니다!
- 업데이트: LoRA 미세 조정 (Fine-tuning)이 peft 패키지에서 벗어나 0부터 LoRA 과정을 직접 구현함; DPO 알고리즘을 PyTorch 네이티브를 사용하여 0부터 구현함; 모델 화이트박스 증류 (White-box Distillation)를 네이티브로 구현함.
- minimind2-DeepSeek-R1 시리즈 증류 모델 탄생!
- minimind2는 일정 수준의 영어 능력을 갖추고 있습니다!
- 더 많은 대규모 언어 모델 (LLM) 벤치마크 테스트 결과를 바탕으로 minimind2와 제3자 모델의 성능을 업데이트했습니다.
2024-10-05
- MiniMind에 멀티모달 (Multimodal) 능력인 시각 (Vision) 기능을 확장했습니다.
- 자세한 내용은 쌍둥이 프로젝트인 minimind-v에서 확인하세요!
2024-09-27
- 09-27 사전 학습 (Pre-train) 데이터셋의 전처리 방식을 업데이트했습니다. 텍스트의 완전성을 보장하기 위해 .bin 파일로 전처리하는 형식을 포기했습니다 (훈련 속도는 약간 희생됨).
- 현재 사전 학습 전처리 후의 파일 이름은
pretrain_data.csv입니다. - 일부 불필요한 코드를 삭제했습니다.
2024-09-17
- minimind-v1-moe 모델을 업데이트했습니다.
- 모호함을 방지하기 위해 더 이상 mistral_tokenizer를 사용하지 않고, 모두 커스텀 minimind_tokenizer를 토크나이저 (Tokenizer)로 채택합니다.
2024-09-01
- minimind-v1 (108M) 모델을 업데이트했습니다. minimind_tokenizer를 채택하였으며, 사전 학습 (Pre-train) 3 에폭 + 미세 조정 (SFT) 10 에폭을 적용하여 더욱 충분히 훈련되었으며 성능이 더 강력합니다.
- 프로젝트가 ModelScope 창공 (Spaces)에 배포되었습니다. 이 웹사이트에서 체험할 수 있습니다:
- 🔗ModelScope 온라인 체험🔗
2024-08-27
- 프로젝트 최초 오픈 소스 공개
본인의 소프트웨어 및 하드웨어 구성 (참고용)
- CPU: Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz
- RAM: 128 GB
- GPU: NVIDIA GeForce RTX 3090 (24GB) * 8
- Ubuntu==20.04
- CUDA==12.2
- Python==3.10.16
- requirements.txt
# 저장소 클론 및 의존성 설치
git clone --depth 1 https://github.com/jingyaogong/minimind
cd minimind && pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
프로젝트 루트 디렉토리에서:
# 방식 1
modelscope download --model gongjy/minimind-3 --local_dir ./minimind-3
# 방식 2
...
# 방식 1: Transformers 형식 모델 사용
python eval_llm.py --load_from ./minimind-3
# 방식 2: PyTorch 모델 기반 (./out 디렉토리에 해당 가중치가 있는지 확인하세요)
...
# `python>=3.10`이 필요할 수 있으며, `pip install streamlit`을 설치해야 합니다.
# ⚠️ 반드시 먼저 Transformers 형식의 모델 폴더를 ./scripts/ 디렉토리로 복사해야 합니다 (예: cp -r minimind-3 ./scripts/minimind-3). web_demo 스크립트는 해당 디렉토리 내의 가중치 파일을 포함한 하위 폴더를 자동으로 스캔하며, 존재하지 않을 경우 에러가 발생합니다.
cd scripts && streamlit run web_demo.py
# ollama
ollama run jingyaogong/minimind-3
# vllm
...
주의: Torch의 사용 가능한 백엔드 사전 확인
import torch
print(torch.cuda.is_available())
CUDA를 사용하여 학습할 계획이라면, 현재 환경이 GPU를 올바르게 인식하고 있는지 먼저 확인하는 것을 권장합니다.
만약 cuda를 사용할 수 없는 경우에도, 자신의 장치에 따라 CPU 또는 MPS를 선택하여 실행할 수 있지만, 학습 속도와 호환성에는 매우 큰 차이가 있습니다.
PyTorch 버전을 설치하거나 교체해야 하는 경우, torch_stable 링크를 참고하십시오.
아래에서 제공하는 데이터셋 다운로드 링크를 통해 필요한 데이터 파일을 다운로드하여 ./dataset 디렉토리에 넣으십시오.
현재 기본적으로는 pretrain_t2t_mini.jsonl과 sft_t2t_mini.jsonl만 다운로드하면 MiniMind Zero 대화 모델을 빠르게 재현할 수 있습니다. 더 많은 요구 사항이 있는 경우, 아래에 다양한 조합 방안을 제공하므로 자신의 작업 목표와 GPU 리소스에 따라 유연하게 선택할 수 있습니다.
💡 체크포인트 중단 후 학습 재개 (Checkpoint Resume)
모든 학습 스크립트는 체크포인트 저장을 지원합니다. --from_resume 1 파라미터를 추가하면 학습 진행 상황을 자동으로 감지하고 복구할 수 있습니다.
python train_pretrain.py --from_resume 1
python train_full_sft.py --from_resume 1
# ...
중단 후 학습 재개(Resume) 설명:
- 학습 과정 중
./checkpoints/디렉토리에 완전한 체크포인트(모델, 옵티마이저 (Optimizer), 학습 진행 상황 등)를 자동으로 저장합니다. - 체크포인트 파일 명명 규칙:
<가중치명>_<차원>_resume.pth(예:full_sft_512_resume.pth) - 서로 다른 GPU 개수 간의 복구를 지원합니다 (스텝(step) 자동 조정).
- wandb 학습 기록의 연속성을 지원합니다 (동일한 run을 자동으로 복구).
장시간 학습이 필요하거나 불안정한 환경에 적합하며, 학습 중단으로 인한 진행 상황 손실을 걱정할 필요가 없습니다.
cd trainer && python train_pretrain.py 명령어로 학습을 진행하면, 출력 가중치로 out/pretrain_*.pth를 얻게 됩니다 (여기서 *는 모델 차원(dimension)이며, 기본값은 768입니다).
cd trainer && python train_full_sft.py 명령어로 학습을 진행하면, 출력 가중치로 out/full_sft_*.pth를 얻게 됩니다 (여기서 full은 전체 파라미터 미세 조정 (Full Parameter Fine-tuning)을 의미합니다).
테스트할 모델 *.pth 파일이 ./out/ 디렉토리에 있는지 확인하십시오. 또는 제가 이미 학습해 둔 *.pth 가중치를 이곳에서 직접 다운로드할 수도 있습니다.
python eval_llm.py --weight full_sft
--weight는 pretrain, full_sft 등 가중치 이름의 접두사를 지정하는 데 사용됩니다. 더 많은 파라미터는 eval_llm.py를 직접 참고하십시오.
주의: 기타 유의 사항
-
모든 학습 스크립트는 PyTorch 네이티브 구현을 기반으로 하며, 멀티 GPU 가속을 지원합니다.
-
장치에
N (N > 1)개의 그래픽 카드가 있는 경우, 다음과 같은 방식으로 단일 머신N개 카드 학습 (DDP, 멀티 노드 멀티 GPU로 확장 가능)을 시작할 수 있습니다:
torchrun --nproc_per_node N train_xxx.py -
필요에 따라 학습 과정을 기록하기 위해 wandb를 활성화할 수 있습니다.
... train_xxx.py --use_wandb
2025년 6월 이후, 중국 내 네트워크 환경에서는 일반적으로 WandB에 직접 연결할 수 없습니다. MiniMind는 현재 기본적으로 학습 시각화 도구로 SwanLab을 사용하도록 전환되었으며, 인터페이스는 WandB와 기본적으로 호환됩니다. 일반적으로 import wandb를 import swanlab as wandb로 교체하기만 하면 되며, 나머지 호출 방식은 거의 수정할 필요가 없습니다.
토크나이저 (Tokenizer)는 LLM이 사용하는 하나의 "사전"으로 대략 이해할 수 있습니다. 자연어를 토큰 ID (token id)로 매핑하고, 다시 토큰 ID를 텍스트로 디코딩하는 역할을 담당합니다. 프로젝트에는 어휘집 (Vocabulary) 학습 예시로 train_tokenizer.py가 제공됩니다. 토크나이저를 다시 학습하는 것은 권장하지 않습니다. 어휘집과 분할 규칙이 변경되면 모델 가중치, 데이터 형식, 추론 인터페이스 및 커뮤니티 생태계와의 호환성이 떨어지며, 모델의 전파성도 약화되기 때문입니다. 동시에, 토크나이저는 PPL과 같이 토큰 단위로 통계되는 지표에도 영향을 미칩니다. 따라서 토크나이저 간 비교 시에는 BPB (Bits Per Byte)가 더 참고할 가치가 있는 경우가 많으며, 이 글을 참고하십시오.
MiniMind와 같은 소형 모델의 경우, 어휘집 크기는 임베딩 (Embedding) 층과 출력 (Output) 층의 파라미터 비중에도 직접적인 영향을 미치므로, 어휘집을 간결하게 유지하는 것이 일반적으로 더 적절한 선택입니다.
Tokenizer 소개
Yi, Qwen2, ChatGLM, Mistral, Llama 3와 같은 강력한 제3자 오픈소스 모델의 토크나이저 어휘집 길이는 다음과 같습니다:
| Tokenizer 모델 | 어휘집 크기 | 출처 |
|---|---|---|
| Yi | 64,000 | 01万物 (중국) |
| ... |
현재 메인라인(Mainline)은 과거 버전의 모호함을 피하고 전체 크기를 제어하기 위해 minimind_tokenizer를 통합하여 사용하며, 더 이상 mistral_tokenizer 버전은 유지보수하지 않습니다.
minimind_tokenizer의 어휘집 크기는 6400에 불과하여, qwen2, glm 등 중국어 친화적인 토크나이저 (Tokenizer)보다 인코딩/디코딩 효율은 낮지만, 임베딩 (Embedding) 층과 출력 층의 파라미터 비중을 현저히 압축할 수 있어 MiniMind와 같은 소형 모델의 크기 제약에 더 적합합니다.
실제 사용 효과를 보면, 이 토크나이저 세트가 희귀 단어의 디코딩 실패 문제를 눈에 띄게 일으키지는 않으며 전체적으로 충분히 안정적이고 사용 가능합니다. 따라서 현재 메인라인 학습에서도 이 어휘집을 통합하여 사용하며, 다른 토크나이저 버전을 별도로 분기하여 유지보수하지 않습니다.
MiniMind-3 현재 메인라인 사전 학습 (Pre-training) 데이터는 pretrain_t2t.jsonl / pretrain_t2t_mini.jsonl 입니다.
이 두 데이터는 이미 통합된 text -> next token prediction 학습 형식으로 정리되었으며, 비교적 적은 연산 자원(Computing power) 하에서 다음 사항들을 동시에 고려하는 것을 목표로 합니다:
- 텍스트 품질;
- 길이 분포;
- 중-영 혼합 능력;
- 후속 SFT / Tool Calling / RLAIF 단계의 템플릿 연결.
데이터 출처는 일반 텍스트 코퍼스 (Corpus), 대화 정리 코퍼스, 증류 (Distillation) 보충 코퍼스, 그리고 다양한 완화된 오픈소스 라이선스 (Open-source license) 사용 가능한 데이터셋을 포함하되 이에 국한되지 않습니다. 메인라인 데이터는 세척 (Cleaning), 중복 제거 (De-duplication), 길이 제어 및 형식 통일을 거친 후 학습에 투입됩니다. 주요 출처로는 匠数 대규모 모델 데이터셋, Magpie-Align 등의 공개 데이터 소스가 있습니다.
그중:
pretrain_t2t_mini.jsonl은 빠른 재현 (Reproduction)에 더 적합하며, pretrain_t2t.jsonl은 MiniMind-3 메인라인 모델을 완전하게 학습시키는 데 더 적합합니다.
파일 데이터 형식은 다음과 같습니다:
{"text": "어떻게 하면 미루는 버릇을 고칠 수 있을까요? 미루는 습관을 고치는 것은 쉽지 않지만, 다음의 제안들이 도움이 될 수 있습니다."}
{"text": "이른 아침의 햇살이 커튼 사이로 방 안으로 쏟아지고, 책상 위의 책장이 바람에 살랑살랑 넘어갑니다."}
{"text": "Transformer는 셀프 어텐션 (Self-attention) 메커니즘을 통해 문맥 관계를 모델링하며, 현대 대규모 언어 모델의 중요한 기초 구조입니다."}
MiniMind-3 현재 메인라인 SFT 데이터는 sft_t2t.jsonl / sft_t2t_mini.jsonl 입니다. 초기 단계의 sft_512 / sft_1024 / sft_2048 방식과 비교하여, 현재 버전은 다음을 더 강조합니다:
- 통합 템플릿;
- 대화 + 사고 (Reasoning) 태그 + Tool Calling에 더 적합한 혼합 학습;
- 데이터 전처리 분기를 최대한 줄여 재현 비용 절감.
데이터 출처는 고품질 지시 이행 (Instruction following) 데이터, 공개 대화 데이터, 모델 증류 합성 데이터, 그리고 라이선스 친화적인 오픈소스 데이터셋을 포함하되 이에 국한되지 않습니다. t2t 메인라인에 들어가기 전, 현재 저장소에서 사용하는 다회차 대화 형식으로 통합됩니다. 현재 메인라인에는 또한 많은 합성 데이터가 포함되어 있는데, 예를 들어 본인이 qwen3-4b를 기반으로 합성한 약 10만 개의 tool call 데이터와 qwen3 시리즈의 reasoning 데이터 등이 있습니다. 그중 커뮤니티의 주요 출처는 匠数 대규모 모델 데이터셋, Magpie-Align, R1-Distill-SFT, COIG, Step-3.5-Flash-SFT 등입니다. 공개 버전은 데이터 출처와 처리 경로가 해당 오픈소스 라이선스의 전달 가능성 제약 조건을 준수하도록 보장하며, Apache-2.0, CC-BY-NC-2.0 등의 관련 라이선스 요구 사항을 준수합니다.
그중:
sft_t2t_mini.jsonl: 대화 모델을 빠르게 학습시키기에 적합합니다. sft_t2t.jsonl: 메인라인 버전을 완전하게 재현하기에 적합합니다. toolcall 능력은 이미 메인라인 SFT 데이터에 통합되었습니다.
모든 SFT 파일 데이터 형식은 다음과 같습니다 (대화 데이터, Tool Use 데이터 포함):
{
"conversations": [
{"role": "user", "content": "안녕하세요"},
...
MiniMind 현재 메인라인 RL 데이터는 dpo.jsonl 입니다. 데이터는 DPO-En-Zh-20k에서 샘플링되었습니다.
메인라인에서는 이 샘플들을 현재 저장소에서 사용하는 선호 학습 (Preference learning) 형식으로 통합 재구성하여, 보상 모델 (Reward model) 또는 선호 최적화 (Preference optimization) 단계 학습에 사용합니다. 여기서 chosen은 선호에 더 부합하는 응답을, rejected는 상대적으로 좋지 않은 응답을 나타냅니다.
그중 dpo.jsonl 데이터 형식은 다음과 같습니다:
{
"chosen": [
{"content": "Q", "role": "user"},
...
이 외에 다른 RL 데이터와 SFT 데이터 형식은 일치하며, 일반적으로 SFT 데이터에서 전체 길이와 대화 횟수에 따라 필터링하여 얻으며, 마지막 assistant
위치를 비워두어, rollout 단계에서 이어 쓰기(continuation)에 사용할 수 있도록 합니다.
Note
현재 메인라인 학습에 필요한 핵심 데이터셋이 오픈 소스로 공개되었으므로, 대규모 데이터셋을 직접 전처리할 필요가 없어 반복적인 데이터 처리 작업을 피할 수 있습니다.
MiniMind 학습 데이터셋 다운로드 주소: ModelScope | HuggingFace
전체를 클론(clone)할 필요 없이 필요한 파일만 개별적으로 다운로드할 수 있습니다.
다운로드한 데이터셋 파일을 ./dataset/ 디렉토리에 넣으세요 (✨는 권장되는 필수 항목입니다).
./dataset/
├── agent_rl.jsonl (86MB)
├── agent_rl_math.jsonl (18MB)
...
참고: 각 데이터셋 소개
agent_rl.jsonl
-- Agentic RL 메인라인 학습 데이터로, train_agent.py를 통한 다회차 Tool-Use / CISPO / GRPO 학습에 사용됩니다.
agent_rl_math.jsonl
-- Agentic RL 순수 수학 보충 데이터로, 최종 검증 목표가 포함된 다회차 추론/도구 사용 시나리오에 적합합니다 (RLVR용).
dpo.jsonl
-- RLHF 단계의 선호도 학습 데이터 (DPO).
pretrain_t2t_mini
✨ -- minimind-3
경량 사전 학습 (Pre-training) 데이터로, 빠른 재현에 적합합니다 ( max_seq_len≈768 설정을 권장합니다).
pretrain_t2t
-- minimind-3
메인라인 사전 학습 (Pre-training) 데이터입니다 ( max_seq_len≈380 설정을 권장합니다).
rlaif.jsonl
✨ -- RLAIF 학습 데이터셋으로, PPO / GRPO / CISPO 등 강화 학습 (Reinforcement Learning) 알고리즘 학습에 사용됩니다.
sft_t2t_mini.jsonl
✨ -- minimind-3
경량 SFT 데이터 (Zero 모델의 빠른 학습용)로, max_seq_len≈768 설정을 권장하며, 일부 Tool Call 샘플이 혼합되어 있습니다.
sft_t2t.jsonl
-- minimind-3
메인라인 SFT 데이터로, 완전한 재현에 적합하며 마찬가지로 Tool Call 샘플이 혼합되어 있습니다.
학습 파라미터 max_seq_len
현재 이는 절대적인 문자 수가 아닌 토큰 (tokens) 길이를 의미합니다.
본 프로젝트의 토크나이저 (tokenizer)는 중국어 텍스트에서 약 1.5~1.7 자/token이며, 순수 영어의 압축률은 4~5 자/token입니다. 데이터 분포에 따라 변동이 있을 수 있습니다.
데이터셋 명칭에 표기된 "최대 길이"는 모두 문자 수 기준입니다. 길이가 100인 문자열은 대략 100/1.5≈67 토큰 길이로 환산할 수 있습니다.
예시:
- 중국어:
白日依山尽
5개 문자가 [白日, 依, 山, 尽] 4개의 토큰으로 분리될 수 있습니다.
- 영어:
The sun sets in the west
24개 문자가 [The, sun, sets, in, the, west] 6개의 토큰으로 분리될 수 있습니다.
"권장 설정"은 각 데이터셋의 최대 토큰 길이에 대한 대략적인 추정치를 제공합니다.
max_seq_len은 공격적 / 보수적 / 균형 잡힌 방식으로 조정할 수 있음을 유의하세요. 크거나 작거나 모두 부작용을 피할 수 없기 때문입니다. 일부 샘플은 max_seq_len보다 짧아 패딩 (padding)으로 인해 연산력이 낭비되고, 일부 샘플은 max_seq_len보다 길어 의미가 잘릴(truncated) 수 있습니다.
연산 효율성과 의미적 완전성 사이에서 균형점을 찾으면 됩니다.
MiniMind 메인라인 학습 데이터 구성 및 권장 조합 예시도
설명 및 권장 학습 방안
minimind-3메인라인은pretrain_t2t+sft_t2t+rlaif/agent_rl의 단계별 학습 조합을 사용하는 것을 권장합니다.- 가장 빠른 속도로 0에서 Zero 모델을 구현하고 싶다면,
pretrain_t2t_mini.jsonl+sft_t2t_mini.jsonl데이터 조합을 권장합니다. - 일정 수준의 연산 자원을 보유하고 있거나 성능을 더 중요하게 생각하는 분들은
minimind-3를 완전하게 재현하는 것을 권장합니다. 단일 GPU만 보유하고 있거나 빠른 재현을 더 중요하게 생각하는 분들에게는 mini 조합을 강력히 추천합니다. - 현재
sft_t2t / sft_t2t_mini에는 이미 Tool Call 데이터가 혼합되어 있으므로, 일반적으로 별도의 독립적인 Tool Calling 지도 미세 조정 (Supervised Fine-Tuning) 단계를 수행할 필요가 없습니다.
minimind-3 Dense는 Transformer Decoder-Only 구조를 사용하며, 전체 설정은 Qwen3 생태계와 정렬되어 있어 향후 transformers / llama.cpp / ollama / vllm으로의 변환이 용이합니다:
- Pre-Norm (사전 정규화) + RMSNorm을 채택했습니다.
- SwiGLU 활성화 함수 (Activation Function)를 사용합니다.
- RoPE 회전 위치 인코딩 (Rotary Positional Embedding)을 사용하며, YaRN 외삽 (extrapolation)을 지원합니다.
q_heads=8,kv_heads=4
, max_position_embeddings=32768`
, rope_theta=1e6`
.
minimind-3-moe
동일한 구조에서 MoE 피드포워드 층 (Feed-forward layer)을 확장하여, Qwen3-MoE 스타일의 설정(공유 전문가(shared expert) 제거)과 호환됩니다.
- 현재 기본 설정은
4 experts / top-1 routing이며, 이는 더 낮은 활성화 파라미터(activation parameters)로 더 높은 용량(capacity)을 확보하기 위해 사용됩니다. - 전문가(Experts)의 수가 계속 증가하면, 실제 소요 시간은 동일한 규모의 밀집(dense) 모델보다 훨씬 높아지는 경우가 많습니다. 이는 "MoE 추론이 더 빠르다"는 말과 함께 보면 다소 직관에 어긋날 수 있지만, 훈련 시 토큰을 먼저 전문가별로 버킷팅(bucketing)한 후 각각 순전파(forward)를 수행하기 때문에, 네이티브 훈련 시 발생하는kernel시작/중단 및 스케줄링 오버헤드가 급격히 무거워지는 것은 매우 자연스러운 현상입니다. 이를 최적화하려면Triton기반의 커스텀 커널(custom kernel),DeepSpeed-MoE,Megatron-LM등 MoE 커널 퓨전(kernel-fused)을 지원하는 연산자 라이브러리(operator library)에 의존해야 합니다. 물론, 이 프로젝트는 네이티브 PyTorch의 범용성을 유지하기를 원하므로 현실적인 절충안을 택했습니다. 현재 구현에서4 experts / top-1이라는 최적의 설정(sweet spot)은 dense 모델보다 약50%정도만 느립니다.
minimind-3 시리즈의 구조는 아래 그림과 같습니다:
모델 설정 수정은 ./model/model_minimind.py를 참조하십시오. 모델 파라미터 버전은 아래 표를 참조하십시오:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Python (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기