MiniLLM is a lightweight LLM training and inference project.
minillm/
├─dataset/
│ ├─__init__.py
│ └─lm_dataset.py
├─infer/
│ ├─__init__.py
│ ├─chat_openai_api.py
│ ├─convert_model.py
│ ├─serve_openai_api.py
│ └─web_demo.py
├─model/
│ ├─config.py
│ ├─model_lora.py
│ ├─model_minillm.py
│ └─triton_flash_attn.py
├─test/
│ ├─__init__.py
│ └─eval_llm.py
├─tokenizer/
│ ├─tokenizer.json
│ └─tokenizer_config.json
└─trainer/
├─__init__.py
├─trainer_utils.py
├─train_pretrain.py
├─train_full_sft.py
├─train_dpo.py
├─train_reason.py
├─train_distillation.py
├─train_lora.py
├─train_ppo.py
├─train_grpo.py
├─train_spo.py
└─train_tokenizer.py
# 1) create virtual env
uv venv --prompt minillm --python 3.12
source .venv/bin/activate
# 2) install dependencies
uv syncRun from repository root using module mode (python -m ...).
Script: minillm/trainer/train_pretrain.py
torchrun --standalone --nproc_per_node=1 \
minillm/trainer/train_pretrain.py \
--model_config examples/configs/common/model_config.small.json \
--train_config examples/configs/pretrain/train_config.json \
--script_config examples/configs/pretrain/script_config.json
Test the trained Model
python minillm/test/eval_llm.py \
--load_from out/pretrain-small \
--tokenizer_path minillm/tokenizer \
--data_path datasets/sft_t2t_mini.jsonl \
--sample_index 0 \
--max_samples 5 \
--max_new_tokens 128 \
--temperature 0.8 \
--top_p 0.9Script: minillm/trainer/train_full_sft.py
torchrun --standalone --nproc_per_node=1 \
minillm/trainer/train_full_sft.py \
--model_config examples/configs/common/model_config.small.json \
--train_config examples/configs/full_sft/train_config.json \
--script_config examples/configs/full_sft/script_config.jsonDPO即相对偏好优化,通过最大化chosen和rejected样本的相对概率差异来训练模型。其损失计算公式为
Script: minillm/trainer/train_dpo.py
torchrun --standalone --nproc_per_node=1 \
minillm/trainer/train_dpo.py \
--model_config examples/configs/common/model_config.small.json \
--train_config examples/configs/dpo/train_config.json \
--script_config examples/configs/dpo/script_config.jsonScript: minillm/trainer/train_reason.py
torchrun --standalone --nproc_per_node=1 \
minillm/trainer/train_dpo.py \
--model_config examples/configs/common/model_config.small.json \
--train_config examples/configs/dpo/train_config.json \
--script_config examples/configs/dpo/script_config.jsonScript: minillm/trainer/train_distillation.py
python -m minillm.trainer.train_distillation \
--data_path ./dataset/sft_mini_512.jsonl \
--save_dir ./out \
--epochs 6 \
--batch_size 32Script: minillm/trainer/train_lora.py
python -m minillm.trainer.train_lora \
--data_path ./dataset/lora_identity.jsonl \
--save_dir ./out/lora \
--epochs 50 \
--batch_size 32- PPO: minillm/trainer/train_ppo.py
- GRPO: minillm/trainer/train_grpo.py
- SPO: minillm/trainer/train_spo.py
Example:
python -m minillm.trainer.train_grpo \
--data_path ./dataset/rlaif-mini.jsonl \
--save_dir ./out \
--epochs 1 \
--batch_size 2Script: minillm/test/eval_llm.py
python -m minillm.test.eval_llm \
--load_from model \
--save_dir out \
--weight full_sftScript: minillm/infer/serve_openai_api.py
python -m minillm.infer.serve_openai_api \
--load_from ../model \
--save_dir out \
--weight full_sft \
--hidden_size 512 \
--num_hidden_layers 8Script: minillm/infer/web_demo.py
streamlit run minillm/infer/web_demo.pyScript: minillm/infer/convert_model.py
python -m minillm.infer.convert_modelTriton implementation has been migrated to minillm/model/triton_flash_attn.py and integrated into minillm/model/model_minillm.py.
The model will use Triton flash-attention only when all conditions are met:
- CUDA is available
- inference/eval mode (not training)
- Q/K/V are CUDA tensors with same dtype
- dtype is float16 or bfloat16
- head dimension is one of 16, 32, 64, 128
- attention mask is all-ones (or
None)
If conditions are not met, it automatically falls back to SDPA.
MIT License. See LICENSE.