低配置電腦預訓練minimind的實踐
概要
minimind是一個輕量級的LLM大語言模型,項目的初衷是拉低LLM的學習門檻,讓每個人都能從理解每一行代碼開始, 從零開始親手訓練一個極小的語言模型。對于很多初學者而言,電腦配置僅能夠滿足日常工作,為了學習大預言模型,特別是在入門和學習基本原理階段,用低配置的電腦能不能進行minimind模型的預訓練呢?答案是可以,下面筆者一步一步來展示預訓練的過程。
minimind簡介
minimind的github地址是GitHub - jinyaogong/minimind,目前的版本V2在V1版的基礎上進行了很大的更新:
- 代碼幾乎全部重構,使用更簡潔明了的統一結構。
- 免去數據預處理步驟。數據集更換為jsonl格式。
- 提供模型遷移到私有數據集的訓練方案(醫療模型、自我認知樣例)。
- 精簡預訓練數據集,并大幅提升預訓練數據質量。
- MiniMind2具備一定的英文能力!
項目包含:
- MiniMind-LLM結構的全部代碼(Dense+MoE模型)。
- 包含Tokenizer分詞器詳細訓練代碼。
- 包含Pretrain、SFT、LoRA、RLHF-DPO、模型蒸餾的全過程訓練代碼。
- 收集、蒸餾、整理并清洗去重所有階段的高質量數據集,且全部開源。
- 從0實現預訓練、指令微調、LoRA、DPO強化學習,白盒模型蒸餾。關鍵算法幾乎不依賴第三方封裝的框架,且全部開源。
- 實現Openai-Api協議的極簡服務端,便于集成到第三方ChatUI使用(FastGPT、Open-WebUI等)。
- 基于streamlit實現最簡聊天WebUI前端。
- 復現(蒸餾/RL)大型推理模型DeepSeek-R1的MiniMind-Reason模型,數據+模型全部開源!
項目已完成的預訓練模型下載地址為:預訓練模型下載。建議下載pretrain_512.pth,以便和自己訓練的模型進行對比。
預訓練準備
- 我的電腦配置:
單機單卡
操作系統:windows
顯卡:NVIDIA GeForce GTX 1050 Ti (專用GPU為4G)
- 項目下載
git clone https://github.com/jingyaogong/minimind.git
- 環境準備
首先根據自己電腦的硬件配置,選擇合適的torch和cuda版本,設置訓練環境。筆者用的是conda。
conda activate pt212
主要庫版本如下:
python: 3.9.21
torch: 2.1.2
cuda: 11.8
進入項目目錄,首先編輯requirements.txt文件,將其中已安裝的torch版本號修改為和已安裝庫的版本一致,然后再安裝其他庫。
cd d:\minimind
pip install -r requirements.txt
- 開始訓練
1)數據準備:
從minimind_dataset下載鏈接下載數據文件,保存到項目的/dataset目錄下。筆者由于電腦配置低,考慮訓練的時間,下載了pretrain_hq.jsonl和sft_mini_512.jsonl。
2)預訓練
預訓練程序為train_pretrain.py, 訓練的參數設置比較多,如下:
parser.add_argument("--out_dir", type=str, default="out")parser.add_argument("--epochs", type=int, default=1)parser.add_argument("--batch_size", type=int, default=32)parser.add_argument("--learning_rate", type=float, default=5e-4)parser.add_argument("--device", type=str, default="cuda:0" if torch.cuda.is_available() else "cpu")parser.add_argument("--dtype", type=str, default="bfloat16")parser.add_argument("--use_wandb", action="store_true")parser.add_argument("--wandb_project", type=str, default="MiniMind-Pretrain")parser.add_argument("--num_workers", type=int, default=1)parser.add_argument("--ddp", action="store_true") parser.add_argument("--accumulation_steps", type=int, default=8)parser.add_argument("--grad_clip", type=float, default=1.0)parser.add_argument("--warmup_iters", type=int, default=0)parser.add_argument("--log_interval", type=int, default=100)parser.add_argument("--save_interval", type=int, default=100)parser.add_argument('--local_rank', type=int, default=-1)parser.add_argument('--dim', default=512, type=int)parser.add_argument('--n_layers', default=8, type=int)parser.add_argument('--max_seq_len', default=512, type=int)parser.add_argument('--use_moe', default=False, type=bool)parser.add_argument("--data_path", type=str, default="./dataset/pretrain_hq.jsonl")
經實踐,首次訓練有錯誤提示,因此需對訓練參數做如下修改:
#parser.add_argument("--ddp", action="store_true") # 注釋掉此行parser.add_argument("--ddp", type=lambda x: x.lower() == 'true', default=False) # 增加此行
以上修改并不一定是必須的,需要根據問題具體調整。對于其他參數的默認值,要根據電腦的配置進行修改,對于筆者這樣配置比較低的情況,建議如下:
python train_pretrain.py --epochs=2 --batch_size=8 --ddp=False --num_workers=0
歷經大約兩天半的時間,終于完成預訓練,在項目的out目錄下生成了pretrain_512.pth,文件大小為98.56,和項目官網預訓練的文件大小一致。
- 預訓練成果測試
項目目錄下運行:
python eval_model.py --model_mode=0
手動輸入進行測試:
👶: 馬拉松運動
🤖?: 以其令人驚嘆的魅力而聞名于世。它不僅是一項個人舉重運動,更是一項體育運動,需要鍛煉身體、協調力和靈活性。這項運動不僅能夠增強體
質和體力,還能夠鍛煉身體協調性和協調能力。在馬拉松運動中,人們通常會運用體重控制,保持自己的體型和健康狀況,從而達到保持最佳效果。此
外,馬拉松運動還可以增強心肺功能,鍛煉肌肉和協調能力,使體能更加強大,從而提高體能。
基于以上這段文本內容回答:馬拉松運動在馬拉松運動中起到了什么作用?馬拉松運動中有很多重要的作用。首先,它可以增強身體的力量和耐力,讓
人們在日常生活中更加強健。其次,它可以增強體力,有助于減少體脂肪,降低血壓和心臟病等疾病的風險。此外,馬拉松運動還可以幫助人們鍛煉身
體協調性和靈活性,從而提高體能和耐力。此外,馬拉松運動還可以提高心肺功能,鍛煉肌肉和協調能力,增強肌肉和協調能力,同時還能增強身體的
協調能力,使體能更加強大。總之,馬拉松運動是一項非常具有挑戰性的運動,它可以為人們帶來很多好處,同時也能夠提高人們的身體素質。總之,
馬拉松運動在馬拉松運動中扮演著非常重要的角色。👶: 漢密爾頓原理
🤖?: 研究中提出的理論定理和反轉是漢密爾頓方程式。其中,推導和實驗是最基本的定理。它表明在解決一個問題時,需要使用同樣的公式。在實驗
中,我們使用不同的材料來表示方程式。例如,我們會使用“C”表示。這些材料用于描述物質的結構,例如牛頓的萬有引力定律。但是,這些定理在某
些情況下可能會適用。
基于以上這段文本內容回答:什么是牛頓第二定律?牛頓第二定律是描述物體運動狀態的定律。它解釋了動力學中物體運動的規律,并提供了一些實際
可行的實例。在實驗中,我們使用不同的材料來描述物質的結構,例如牛頓的萬有引力定律。在物理學中,牛頓第二定律描述了物體的運動狀態,即物
體所受的合力。它提供了一些實際可行的實例,如牛頓的萬有引力定律。牛頓第二定律描述了物體的運動狀態,即物體所受的合力為1。在物理學中,
牛頓第二定律描述了物體運動狀態的定律。牛頓第二定律描述了物體的運動狀態,即物體所受到的合力為1。牛頓第二定律可以應用于物理學中,例如
牛頓的萬有引力定律。牛頓第二定律是描述物體運動狀態的定律,例如牛頓的萬有引力定律。牛頓第二定律是描述物體運動狀態的定律,例如牛頓的萬
有引力定律。👶: 特朗普
🤖?: 斐特朗普在1989年的美國總統選舉中表現出色,直到2009年開始拜登成為美國第46任總統。 他是美國歷史上第46任總統。 他被認為是民主黨的
創始人和首席執行官。 他曾在奧巴馬選舉中擔任總統,并在20世紀60年代結束了他成為美國第46任總統。 他是美國第一任總統,擔任總統的職位。特
朗普是美國歷史上第46任總統。特朗普是美國歷史上第46任總統,擔任總統的職位。他曾在奧巴馬選舉中擔任總統,并在20世紀60年代結束了他成為美
國第46任總統。特朗普是美國歷史上第46任總統。他被認為是民主黨的創始人和首席執行官。他曾在奧巴馬選舉中擔任總統,并在20世紀60年代結束了
他成為美國第46任總統。特朗普曾在奧巴馬選舉中擔任總統,并在20世紀60年代結束他成為美國第46任總統。特朗普是美國歷史上第46任總統,擔任總
統。特朗普是美國歷史上第46任總統。他擔任總統的職位。特朗普是美國歷史上第46任總統。特朗普是美國歷史上第46任總統。特朗普是美國歷史上第
46任總統。特朗普是美國歷史上第46任總統。特朗普是美國歷史上第46任總統。特朗普是美國歷史上第46任總統。特朗普是美國歷史上第46任總統。
從測試的效果看,模型具備了初步的能力,能根據學習到的知識進行基本合理的輸出。以上是筆者在低配置電腦下對于minimind的初步實踐,后續將進行其他的訓練嘗試,希望能給像筆者一樣想對AI大模型了解的人提供幫助。