大語言模型(LLM)領域,如 GPT、LLaMA、GLM 等,雖然它們效果驚艷, 但動輒10 Bilion龐大的模型參數個人設備顯存遠不夠訓練,甚至推理困難。 幾乎所有人都不會只滿足于用Lora等方案fine-tuing大模型學會一些新的指令, 這約等于在教牛頓玩21世紀的智能手機,然而,這遠遠脫離了學習物理本身的奧妙。 此外,賣課付費訂閱的營銷號漏洞百出的一知半解講解AI的教程遍地, 讓理解LLM的優質內容雪上加霜,嚴重阻礙了學習者。
因此,本項目的目標是把上手LLM的門檻無限降低, 直接從0開始訓練一個極其輕量的語言模型。
7200 Stars 750 Forks 32 Issues 4 貢獻者 Apache-2.0 License Python 語言
代碼: GitHub - jingyaogong/minimind: 🚀🚀 「大模型」3小時完全從0訓練26M的小參數GPT!🌏 Train a 26M-parameter GPT from scratch in just 3 hours!
主頁: MiniMind Project
更多AI開源軟件:AI開源 - 小眾AI
?
?
Tip
(截至2024-9-17)MiniMind系列已完成了3個型號模型的預訓練,最小僅需26M(0.02B),即可具備流暢的對話能力!
模型 (大小) | tokenizer長度 | 推理占用 | release | 主觀評分(/100) |
---|---|---|---|---|
minimind-v1-small (26M) | 6400 | 0.5 GB | 2024.08.28 | 50' |
minimind-v1-moe (4×26M) | 6400 | 1.0 GB | 2024.09.17 | 55' |
minimind-v1 (108M) | 6400 | 1.0 GB | 2024.09.01 | 60' |
該分析在具有Torch 2.1.2、CUDA 12.2和Flash Attention 2的2×RTX 3090 GPU上進行。
主要功能
- 公開MiniMind模型代碼(包含Dense和MoE模型)、Pretrain、SFT指令微調、LoRA微調、DPO偏好優化的全過程代碼、數據集和來源。
- 兼容transformers?、accelerate?、trl?、peft?等流行框架。
- 訓練支持單機單卡、單機多卡(DDP、DeepSpeed)訓練,使用wandb可視化訓練流程。支持在任意位置停止,及在任意位置繼續訓練。
- 在Ceval數據集上進行模型測試的代碼。
- 實現Openai-Api基本的chat接口,便于集成到第三方ChatUI使用(FastGPT、Open-WebUI等)。
安裝和使用
環境參考:
CPU: Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz
內存:128 GB
顯卡:NVIDIA GeForce RTX 3090(24GB) * 2
環境:python 3.9 + Torch 2.1.2 + DDP單機多卡訓練
- Ubuntu == 20.04
- Python == 3.9
- Pytorch == 2.1.2
- CUDA == 12.2
- requirements.txt
📌 開始訓練
-
0、克隆項目代碼
git clone https://github.com/jingyaogong/minimind.git cd minimind
-
1、環境安裝
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 測試torch是否可用cuda import torch print(torch.cuda.is_available())
如果不可用,請自行去torch_stable 下載whl文件安裝。參考鏈接
-
2、如果你需要自己訓練
-
2.1 下載數據集下載地址放到./dataset?目錄下
-
2.2 python data_process.py?處理數據集,例如pretrain數據提前進行token-encoder、sft數據集抽離qa到csv文件
-
2.3 在./model/LMConfig.py? 中調整model的參數配置
這里僅需調整dim和n_layers和use_moe參數,分別是(512+8)?或(768+16)?,對應于minimind-v1-small?和minimind-v1?
-
2.4 python 1-pretrain.py? 執行預訓練,得到 pretrain_*.pth? 作為預訓練的輸出權重
-
2.5 python 3-full_sft.py? 執行指令微調,得到 full_sft_*.pth? 作為指令微調的輸出權重
-
2.6 python 4-lora_sft.py? 執行lora微調(非必須)
-
2.7 python 5-dpo_train.py? 執行DPO人類偏好強化學習對齊(非必須)
-
-
3、測試模型推理效果
-
確保需要使用的,訓練完成的參數權重*.pth?文件位于./out/?目錄下
-
也可以直接去訓練完成的模型權重下載使用我訓練好的*.pth?權重文件
minimind/out ├── multi_chat │ ├── full_sft_512.pth │ ├── full_sft_512_moe.pth │ └── full_sft_768.pth ├── single_chat │ ├── full_sft_512.pth │ ├── full_sft_512_moe.pth │ └── full_sft_768.pth ├── pretrain_768.pth ├── pretrain_512_moe.pth ├── pretrain_512.pth
-
?python 0-eval_pretrain.py?測試預訓練模型的接龍效果
-
?python 2-eval.py?測試模型的對話效果
minimind/images/2-eval.png at master · jingyaogong/minimind · GitHub
-
🍭「Tip」預訓練和全參微調pretrain和full_sft均支持多卡加速
假設你的設備只有1張顯卡,使用原生python啟動訓練即可:
-
執行預訓練或指令微調訓練
python 1-pretrain.py # and python 3-full_sft.py
假設你的設備有N (N>1) 張顯卡:
-
單機N卡啟動訓練(DDP)
torchrun --nproc_per_node N 1-pretrain.py # and torchrun --nproc_per_node N 3-full_sft.py
-
單機N卡啟動訓練(DeepSpeed)
deepspeed --master_port 29500 --num_gpus=N 1-pretrain.py # and deepspeed --master_port 29500 --num_gpus=N 3-full_sft.py
-
開啟wandb記錄訓練過程(非必須)
torchrun --nproc_per_node N 1-pretrain.py --use_wandb # and python 1-pretrain.py --use_wandb
通過添加--use_wandb?參數,可以記錄訓練過程,訓練完成后,可以在wandb網站上查看訓練過程。通過修改wandb_project? 和wandb_run_name?參數,可以指定項目名稱和運行名稱。