本篇文章主要講解,如何通過極低的成本訓練自己的大模型的方法和教程,通過MiniMind快速實現普通家用電腦的模型訓練。
日期:2025年3月5日
作者:任聰聰
一、MiniMind 介紹
基本信息
在2小時,訓練出屬于自己的28M大模型。
開源地址:https://github.com/jingyaogong/minimind
特性說明:
1、在家用電腦中即可進行大模型的訓練。
2、訓練時間可在一天之內,讓你獲得低成本訓練出的大模型。
3、適用于性能不高的電腦本地運行及訓練迭代。
模型基礎認知
1.模型大小
諸如目前大家都會講解的,多少M 多少B 等等,這代表了模型涵蓋的參數數量。
2.模型速度
一般通過token/s測量,這代表了每秒輸出的字符數,也是api常見的計費形式。
3.模型消耗
一般分為三個部分即算力消耗、能源消耗、硬件成本。一般情況下模型訓練需要耗費大量的算力及電力。這是由GPU集群計算機決定的。
二、安裝MiniMind
安裝前的準備:
1、GPU:一臺入門級獨顯計算機RTX 3060 左右的顯卡。
2、RAM:16-64GB
3、硬盤:500GB及以上
4、python 3.9環境
5、pycharm 編輯器
6、git 版本管理工具
備注:配置低的也可以就是滿,且效果沒有配置高的電腦好。
安裝說明:
通過git進行clone進行下載,使用python的pip進行安裝所需依賴。
步驟一、克隆到本地
輸入指令:
git clone https://github.com/jingyaogong/minimind.git
等待下載完畢…
步驟二、使用PyCharm打開項目工程如下圖:
進入到加載打開項目的目錄,如下圖:
點擊“OK”進入到項目,并等待加載完畢。
選擇python 3.9的版本,過低的版本可能會報錯,建議選擇更高或相同于本篇文章的版本,點擊“OK”進入到下一個環節。
步驟三、使用PIP 安裝我們所需的依賴
輸入命令:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
直到安裝和完畢,如下圖:
三、訓練模型
需要先準備好所需的數據集,而后通過訓練集和驗證集進行訓練,并同構測試集測試模型的性能。
階段分為:預訓練、監督微調、循環迭代
步驟一、準備好我們的訓練數據,如下:
這里我們使用自己的數據集,優先創建一個val目錄并在val目錄下,創建名為training_data.txt 的文件如下圖:
編入內容,一行一條:
步驟二、對數據進行預處理,如下優先安裝預處理依賴:
pip install transformers datasets
下載依賴完畢后,通過pycharm創建一個新項目如下圖:
完成后進入項目,并把val數據集放入項目根目錄:
創建我們的預處理腳本,在項目根目錄下:
內容如下:
from transformers import BertTokenizer
from datasets import Dataset# 加載預訓練的BERT分詞器
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')# 讀取文本文件
with open('./val/training_data.txt', 'r', encoding='utf-8') as file:lines = [line.strip() for line in file.readlines()]# 將文本轉換為分詞后的輸入
def fc_func(examples):return tokenizer(examples['text'], truncation=True, padding='max_length', max_length=512)dataset = Dataset.from_dict({'text': lines})
tokenized_dataset = dataset.map(fc_func, batched=True)# 保存處理后的數據集
tokenized_dataset.save_to_disk('./go_ai_data')
步驟三、開始運行我們的數據預處理腳本:
運行成功后我們將得到如下的文件信息:
這些數據便是我們用來進行預訓練的數據集,在根目錄下創建訓練腳本如下圖:
腳本內容:
from transformers import BertTokenizer, BertForMaskedLM, Trainer, TrainingArguments
from datasets import Dataset# 加載預訓練的BERT分詞器和模型
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForMaskedLM.from_pretrained('bert-base-chinese')# 讀取文本文件并處理數據
with open('./val/training_data.txt', 'r', encoding='utf-8') as file:lines = [line.strip() for line in file.readlines()]def preprocess_function(examples):return tokenizer(examples['text'], truncation=True, padding='max_length', max_length=512)dataset = Dataset.from_dict({'text': lines})
tokenized_dataset = dataset.map(preprocess_function, batched=True)# 設置訓練參數
training_args = TrainingArguments(output_dir='./results',overwrite_output_dir=True,num_train_epochs=3,per_device_train_batch_size=8,save_steps=10_000,save_total_limit=2,
)# 創建Trainer實例并開始訓練
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_dataset,
)trainer.train()
修改并設置自己的輸出參數及輸入的預訓練數據,即可通過下方命令進行運行腳本執行訓練,等待一段時間后將會獲得自己的模型。
訓練好的模型文件后綴為 .pth,通過自定義編寫python的模型加載和調用腳本即可生成遠端api進行外部的調用與本機的web ui的使用,此處不做詳細說明,運行模型詳細見章節四部分。
四、運行模型
一般情況,模型的運行使用api的形式調用,這里客戶端一般為web ui、app、pc等客戶端,其中客戶端只是用來呈現我們的模型運行效果和對話消息的,主要用于我們的日常生活辦公。
步驟一、下載我們所需的運行模型項目
命令輸入:
git clone https://huggingface.co/jingyaogong/MiniMind2
完成,如下圖:
步驟二、通過pycharm打開項目:
安裝所需依賴 命令 pip install streamli
:
步驟三、運行我們的web ui對話框
在pycharm的 --> minimind <—項目終端目錄下,打卡我們的scripts目錄如下圖:
cd scripts
并執行運行web ui的命令:
streamlit run web_demo.py
運行后如下,需要輸入自己的電子郵箱:
輸入完畢后按下“Enter” 即可運行,彈出防火墻信息:
此處點擊允許即可,回到終端即可看到web ui 的地址:
大功告成,ui已經正常運行.。
五、性能體驗與迭代說明
實際效果
可以看到速度非常快!
迭代說明
形式說明通過模型的迭代,可以讓模型的數據量及信息量,不斷的增長和擴大所覆蓋的參數信息,以此對模型的能力進行更新。
END:閉環,不斷收集新的數據,篩選數據,不斷迭代模型,使得其更加完善和智慧。
常見問題:
1、PIP提示更新:
解決辦法:
命令 python.exe -m pip install --upgrade pip
進行更新即可重試。
2、初次進入到項目提示報錯情況
具體報文內容如下:
pcFailed to Create Virtual Environment
Executed command:
C: Users/admin/ApDatalLocalyPrograms/Ppython/python39/python.exe cyProgram files/letrainsPycharm 2024.1/plugins/python,hepershitualenv-20.24.5 pyzEildeveloplaiminimindven
Error occurred:
AttributeError: module 'virtualenv.create.via global ref.buitin.cpython.mac os' has no attribute 'CPython2macOsframework'
Command output:
Traceback(most recent call last)File "c: \Users ladminlAppDatalLocal!Programs Python\Python39\lib\runpy. py", line 197, in _run module_as_mainreturn rum code(code, main globals, oneFile "c: \UsersladminlAppDatalLocal\ProgramslPython\Python39\liblrunpy.py", line 87, in ru codeexec(code, rum globals)File C:\Program FilesWletBrains\Pycharn2024,1lpluginslpvthonlhelperslvirtualenv-20.24.5.pyzl main py ,line 163,in<module>File "C:\Program FilesWJetBrains\PyCharms\virtualenv-20.24.5.pyz\ main .py", line 159, in run00941File"C:\ProgramFilesiletBrainslPvchars\virtualenv-20.24.5.pyz\virtualenvl main .py", line 18, in run“C:\ProgramFileFileslTetBrains\Pvchars\virtualenv-20.24.5.pyz\virtualenv\run\ init..py", line 3l, in cli_runFile"C:\Programinit .py ,line 49, in session via cliEileslTetBrainslPycha1111g119111svirtualenv-20.24.5.pvglvirtualenvirunlFile"C:\Program Files\JetBrains\Pycharmslvirtualenv-20.24.5.pyz\virtualenvlrunl init__.py", line 82, in build_parser1\p1ug111sFile"C:\ProgramTetBrains\Pvchar1-20.24.5.pyz\virtualenv\run\plugin\creators.py",line 24,ininitFilesw“C:1PrOgIEi1e1-20.24.5.pyz\virtualenv\run\plugin\creators.py", line 31, in for_interpreter“C,5.pyz\virtualenv\run\pluginlbase.py", line 45, in options\Progr2File"C:Prograilhelperslvirtualeny-20.24.5.pyzlvirtualenv(runlpluginlbase.py", line 24, in entry points forFile\Prog120.24.5.pyzlvirtualenv\runlpluginlbase.py", line 24, in<genexpr>~C.File“C:\Isers\import1ih\metadata.py .line 79.in loadreturn functools.rattrs, moduleAttributeRrror: modulevirtualenv.create.via global ref.builtin.cpython.mac os’has no attributeCPython2macOsFramework
OK
Cancel
直接點擊OK即可進入到項目目錄,可以忽略
3、無法安裝運行web ui的必要依賴 streamli 報錯如下時:
通過加入鏡像源進行再次下載即可:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit
4、打開鏈接后報錯缺少依賴情況:
這個報錯由于我們少安裝依賴導致,只需要通過pip進行安裝提示中的對應依賴 tansformers即可,具體命令如下:
pip install transformers
等待安裝完畢即可解決該報錯問題。
5、報錯模型項目問題如下圖:
這是由于我們git clone時沒有將模型項目放入 minimind 目錄的根目錄導致,只需要轉移目錄即可。
6、預處理數據時報錯:
這是由于缺少必要依賴導致,我們只需要下載特定提示的依賴即可。
pip install torch torchvision torchaudio
pip install tensorflow
pip install flax
等待下載完畢即可重新運行。
7、訓練到一半突然報錯停止的情況
更新檢查依賴兼容性或腳本運行的python版本,建議使用最新的版本號。