LLMs之minimind:minimind的簡介、安裝和使用方法、案例應用之詳細攻略
導讀:2024年8月27日發(fā)布MiniMind,MiniMind是一個輕量級開源語言模型,旨在降低LLM的上手門檻,提供從0開始訓練LLM的完整流程和代碼。它具有模型體積小、訓練速度快、性能表現良好等特點,適合個人設備進行推理和訓練。MiniMind最小僅需26M (0.02B),最大可達108M (0.1B)。最低僅需2G顯卡即可推理訓練,訓練環(huán)境為RTX 3090 (24GB)。預訓練約2小時 (1 epoch),指令微調約2小時 (1 epoch)。自定義的minimind_tokenizer詞表大小為6400。
>> 性能表現:盡管模型非常小,但在對話能力上表現流暢。不同型號評分從50到60不等。
>> 數據構成:
● 預訓練數據:使用Seq-Monkey通用文本數據集,約10B tokens。或 SkyPile-150B數據集的可公開訪問部分。
● SFT數據:匠數大模型SFT數據集,10M條數據的中文數據集和包含2M條數據的英文數據集,約3B tokens。
● DPO數據:活字模型提供的人工標注的偏好數據,約8萬條偏好數據。
>> 數據預處理流程及策略:數據需要經過預處理,包括token-encoder和抽離QA到CSV文件。采用自定義的minimind_tokenizer以控制詞表長度,避免模型參數比例失衡。
>> 模型結構:
● MiniMind-Dense:基于Transformer的Decoder-Only結構。使用RMSNorm歸一化(借鑒GPT-3)和SwiGLU激活函數。采用旋轉位置嵌入(RoPE)。
● MiniMind-MoE: 基于Llama3和Deepseek-V2中的MixFFN混合專家模塊,在FFN方面采用了更細粒度的專家分割和共享的專家隔離技術。
>> 優(yōu)化策略:支持LoRA微調和DPO偏好優(yōu)化。訓練支持多卡加速(DDP+DeepSpeed),使用動態(tài)學習率進行微調。使用wandb可視化訓練流程。
minimind的簡介
本開源項目旨在完全從0開始,最快僅用3小時!即可訓練出僅為26M大小的微型語言模型MiniMind。MiniMind極其輕量,體積約是 GPT3 的1/7000,力求做到最普通的個人GPU也可快速推理甚至訓練。MiniMind改進自DeepSeek-V2、Llama3結構,項目包含整個數據處理、pretrain、sft、dpo的全部階段,包含混合專家(MoE)模型。這是一個既是開源項目,又是入門LLM教程,同時也是一個初具雛形的開源模型,希望能起到拋磚引玉的作用。
大語言模型(LLM)領域,如 GPT、LLaMA、GLM 等,雖然它們效果驚艷, 但動輒10 Bilion龐大的模型參數個人設備顯存遠不夠訓練,甚至推理困難。 幾乎所有人都不會只滿足于用Lora等方案fine-tuing大模型學會一些新的指令, 這約等于在教牛頓玩21世紀的智能手機,然而,這遠遠脫離了學習物理本身的奧妙。 此外,賣課付費訂閱的營銷號漏洞百出的一知半解講解AI的教程遍地, 讓理解LLM的優(yōu)質內容雪上加霜,嚴重阻礙了學習者。因此,本項目的目標是把上手LLM的門檻無限降低,直接從0開始訓練一個極其輕量的語言模型。
GitHub地址:GitHub - jingyaogong/minimind: 【大模型】3小時完全從0訓練一個僅有26M的小參數GPT,最低僅需2G顯卡即可推理訓練!
0、最近更新
2024-09-17 (new��):更新minimind-v1-moe模型。為了防止歧義,不再使用mistral_tokenizer分詞,全部采用自定義的minimind_tokenizer作為分詞器。
2024-09-01:更新minimind-v1 (108M)模型,采用minimind_tokenizer,預訓練輪次3 + SFT輪次10,更充分訓練,性能更強。
項目已部署至ModelScope創(chuàng)空間,可以在此網站上體驗:
ModelScope在線體驗
2024-08-27:項目首次開源
1、項目包含:
>> 公開MiniMind模型代碼(包含Dense和MoE模型)、Pretrain、SFT指令微調、LoRA微調、DPO偏好優(yōu)化的全過程代碼、數據集和來源。
>> 兼容transformers、accelerate、trl、peft等流行框架。
>> 訓練支持單機單卡、單機多卡(DDP、DeepSpeed)訓練。訓練過程中支持在任意位置停止,及在任意位置繼續(xù)訓練。
>> 在Ceval數據集上進行模型測試的代碼。
>> 實現Openai-Api基本的chat接口,便于集成到第三方ChatUI使用(FastGPT、Open-WebUI等)。
2、minimind訓練了3個型號模型
(截至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的RTX 3090 GPU上運行。
minimind的安裝和使用方法
1、安裝
僅是我個人的軟硬件環(huán)境配置,自行酌情更改:
Ubuntu == 20.04
Python == 3.9
Pytorch == 2.1.2
CUDA == 12.2
requirements.txt
2、使用方法
*0、環(huán)境安裝
pip install -r requirements.txt -i https://pypi.tuna./simple
*1、克隆項目代碼
git clone https://github.com/jingyaogong/minimind.git
*2、如果你需要自己訓練
2.1 下載數據集下載地址放到./dataset目錄下
數據集地址:GitHub - jingyaogong/minimind: 【大模型】3小時完全從0訓練一個僅有26M的小參數GPT,最低僅需2G顯卡即可推理訓練!
2.2 python data_process.py處理數據集,例如pretrain數據提前進行token-encoder、sft數據集抽離qa到csv文件
2.3 在./model/LMConfig.py 中調整model的參數配置
2.4 python 1-pretrain.py 執(zhí)行預訓練
LLMs之minimind:minimind源碼解讀(pretrain.py)——實現基于Transformer架構的大規(guī)模語言模型預訓練及wandb監(jiān)控—支持余弦退火學習率調度/分布式預訓練/自動混合精度優(yōu)化/梯度累積/梯度裁剪/定期保存模型
https://yunyaniu.blog.csdn.net/article/details/142472414
2.5 python 3-full_sft.py 執(zhí)行指令微調
2.6 python 4-lora_sft.py 執(zhí)行l(wèi)ora微調(非必須)
2.7 python 5-dpo_train.py 執(zhí)行DPO人類偏好強化學習對齊(非必須)
*3、測試模型推理效果
確保需要使用的,訓練完成的參數權重位于./out/目錄下
也可以直接去訓練完成的模型權重下載使用我訓練好的
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測試模型的對話效果 2-eval
【Tip】預訓練和全參微調pretrain和full_sft均支持多卡加速
單機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
3、數據集
分詞器
nlp中的Tokenizer類似于詞典,將單詞從自然語言通過“詞典”映射到0,1,36這樣的數字,可以理解為數字就代表了單詞在“詞典”中的頁碼。 LLM分詞器的構建方式有兩種:
???????T1、自訓練:一種是自己構造詞表訓練一個分詞器,代碼可見train_tokenizer.py
;
T2、采用開源模型訓練好的分詞器:另一種是選擇開源模型訓練好的分詞器。
“詞典”當然可以直接選擇用新華詞典或是牛津詞典,優(yōu)點是token轉化壓縮率很好,但缺點是詞表太長,動輒數十萬個詞匯短語; 也可以使用自己訓練的分詞器,優(yōu)點是詞表隨意控制,缺點是壓縮率不夠理想,且生僻詞不容易面面俱到。 當然,“詞典”的選擇很重要,LLM的輸出本質上是SoftMax到詞典N個詞的多分類問題,然后通過“詞典”解碼到自然語言。 因為LLM體積非常小,為了避免模型頭重腳輕(詞嵌入embedding層參數占整個LLM比太高),所以詞表長度需要選擇比較小。 強大的開源模型例如01萬物、千問、chatglm、mistral、Llama3等,它們的tokenizer詞表長度如下:
???????
Tokenizer模型 | 詞表大小 | 來源 |
---|
yi tokenizer | 64,000 | 01萬物(中國) |
qwen2 tokenizer | 151,643 | 阿里云(中國) |
glm tokenizer | 151,329 | 智譜AI(中國) |
mistral tokenizer | 32,000 | Mistral AI(法國) |
llama3 tokenizer | 128,000 | Meta(美國) |
minimind tokenizer | 6,400 | 自定義 |
[!TIP] 2024-09-17更新:為了防止過去的版本歧義&控制體積,minimind所有模型均使用minimind_tokenizer分詞,廢棄所有mistral_tokenizer版本。
盡管minimind_tokenizer長度很小,編解碼效率弱于qwen2、glm等中文友好型分詞器。 但minimind模型選擇了自己訓練的minimind_tokenizer作為分詞器,以保持整體參數輕量,避免編碼層和計算層占比失衡,頭重腳輕,因為minimind的詞表大小只有6400。 且minimind在實際測試中沒有出現過生僻詞匯解碼失敗的情況,效果良好。 由于自定義詞表壓縮長度到6400,使得LLM總參數量最低只有26M。
【Pretrain數據】:統(tǒng)一的JSONL格式→嚴格的篩選和去重→10B的token
?Seq-Monkey通用文本數據集?/?Seq-Monkey百度網盤?是由多種公開來源的數據(如網頁、百科、博客、開源代碼、書籍等)匯總清洗而成。整理成統(tǒng)一的JSONL格式,并經過了嚴格的篩選和去重,確保數據的全面性、規(guī)模、可信性和高質量??偭看蠹s在10B token,適合中文大語言模型的預訓練。
第2種選擇:SkyPile-150B數據集?的可公開訪問部分包含約2.33億個獨立網頁,每個網頁平均包含1000多個漢字。數據集包括大約1500億個令牌和620GB的純文本數據。?如果著急的話,可以嘗試只挑選SkyPile-150B的部分jsonl下載(并在./data_process.py中對文本tokenizer生成* .bin文件),以便快速跑通預訓練流程。
【SFT數據】:12M條, 包含10M條數據的中文數據集和包含2M條數據的英文數據集
匠數大模型SFT數據集?是一個完整、格式統(tǒng)一、安全的大模型訓練和研究資源。 從網絡上的公開數據源收集并整理了大量開源數據集,對其進行了格式統(tǒng)一,數據清洗, 包含10M條數據的中文數據集和包含2M條數據的英文數據集。 總量大約在3B token,適合中文大語言模型的SFT。 數據集整合來源于以下所有數據(僅供參考,因此無需單獨下載,僅需下載一個完整的【SFT數據】):
- BelleGroup/train_3.5M_CN
- LinkSoul/instruction_merge_set
- stingning/ultrachat
- BAAI/COIG-PC-core
- shibing624/sharegpt_gpt4
- shareAI/ShareGPT-Chinese-English-90k
- Tiger Research
- BelleGroup/school_math_0.25M
- YeungNLP/moss-003-sft-data
【DPO數據】:8萬條
大約合并后共8萬條dpo數據,人工標注的偏好數據,均來自活字模型?,可以用于訓練獎勵模型,優(yōu)化模型回復質量,使其更加符合人類偏好。
【更多數據集】
目前已經有HqWu-HITCS/Awesome-Chinese-LLM?在收集和梳理中文LLM相關的開源模型、應用、數據集及教程等資料,并持續(xù)更新這方面的最新進展。全面且專業(yè),Respect!
數據集下載地址
下載到./dataset/
目錄下
MiniMind訓練數據集 | 下載地址 |
---|
【tokenizer訓練集】 | HuggingFace?/?百度網盤 |
【Pretrain數據】 | Seq-Monkey官方?/?百度網盤?/?HuggingFace |
【SFT數據】 | 匠數大模型SFT數據集 |
【DPO數據】 | Huggingface |
4、模型
MiniMind的整體結構一致,只是在RoPE計算、推理函數和FFN層的代碼上做了一些小調整。 其結構如下圖(重繪版):
MiniMind-Dense
MiniMind-Dense(和Llama3.1一樣)使用了Transformer的Decoder-Only結構,跟GPT-3的區(qū)別在于:
- 采用了GPT-3的預標準化方法,也就是在每個Transformer子層的輸入上進行歸一化,而不是在輸出上。具體來說,使用的是RMSNorm歸一化函數。
- 用SwiGLU激活函數替代了ReLU,這樣做是為了提高性能。
- 像GPT-Neo一樣,去掉了絕對位置嵌入,改用了旋轉位置嵌入(RoPE),這樣在處理超出訓練長度的推理時效果更好。
??MiniMind-Dense結構示意圖—非常棒:Tokenizer Encoder→Input Embedding→TransformerLaye(MHSA+FFN)*k→RMSNorm→Linear→SoftMax→Tokenizer DecoderTo
MiniMind-MoE
MiniMind-MoE模型,它的結構基于Llama3和Deepseek-V2中的MixFFN混合專家模塊。
- DeepSeek-V2在前饋網絡(FFN)方面,采用了更細粒度的專家分割和共享的專家隔離技術,以提高Experts的效果。
MiniMind-MoE結構示意圖:Tokenizer Encoder→Input Embedding→TransformerLaye(MHSA+MoE-FFN【共享專家+路由專家】)*k→RMSNorm→Linear→SoftMax
修改模型配置見./model/LMConfig.py。 minimind目前訓練的模型版本見下表:
Model Name | params | len_vocab | n_layers | d_model | kv_heads | q_heads | share+route | TopK |
---|
minimind-v1-small | 26M | 6400 | 8 | 512 | 8 | 16 | - | - |
minimind-v1-moe | 4×26M | 6400 | 8 | 512 | 8 | 16 | 2+4 | 2 |
minimind-v1 | 108M | 6400 | 16 | 768 | 8 | 16 | - | - |
5、實驗
依賴???????環(huán)境
CPU: Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz
內存:128 GB
顯卡:NVIDIA GeForce RTX 3090(24GB) * 2
環(huán)境:python 3.9 + Torch 2.1.2 + DDP多卡訓練
耗時對比
Model Name | params | len_vocab | batch_size | pretrain_time | sft_single_time | sft_multi_time |
---|
minimind-v1-small | 26M | 6400 | 64 | ≈2 hour (1 epoch) | ≈2 hour (1 epoch) | ≈0.5 hour (1 epoch) |
minimind-v1-moe | 4×26M | 6400 | 40 | ≈6 hour (1 epoch) | ≈5 hour (1 epoch) | ≈1 hour (1 epoch) |
minimind-v1 | 108M | 6400 | 16 | ≈6 hour (1 epoch) | ≈4 hour (1 epoch) | ≈1 hour (1 epoch) |
預訓練(Text-to-Text):動態(tài)學習率,epoch=5
pretrain的學習率設置為1e-4到1e-5的動態(tài)學習率,預訓練epoch數設為5。
torchrun --nproc_per_node 2 1-pretrain.py
- LLM首先要學習的并非直接與人交流,而是讓肚子中充滿知識的墨水,至于墨水理論上喝的越飽越好,產生大量的對世界的認知積累。
- 預訓練就是讓Model先埋頭苦學大量基本的知識,例如從維基百科、新聞、常識、書籍等。
- 它無監(jiān)督的從大量的文本數據中壓縮知識到自己模型的權重,目的是:學會詞語接龍。例如我們輸入“秦始皇是”四個字,它在大量學習后能預測出下一句話大概率是“中國的第一位皇帝”。
單輪次對話有監(jiān)督微調(Single dialog Fine-tuning):RoPE+推到長度為2K,動態(tài)學習率,epoch=6
在推理時通過調整RoPE線性差值,實現長度外推到1024或2048及以上很方便。學習率設置為1e-5到1e-6的動態(tài)學習率,微調epoch數為6。
# 3-full_sft.py中設置數據集為sft_data_single.csv
torchrun --nproc_per_node 2 3-full_sft.py
- 經過預訓練,半成品LLM此時已經掌握了幾乎所有的語言知識和百科常識。此時它還不會與人聊天,相反它只會無腦地進行輸入詞語的接龍,生成下一個詞。
- 此時需要對半成品LLM做限制在聊天模板中進行微調,例如當它遇到這樣的模板“<聊天開始>秦始皇是<聊天終止> ”后不再無腦接龍,而是意識到這是一段完整的對話結束。
- 我們稱這個過程為指令微調,就如同讓學富五車的「牛頓」先生適應21世紀的聊天習慣,學習屏幕左側是對方消息,右側是本人消息這個規(guī)律。
- 在訓練時,MiniMind的指令和回答長度被截斷在512,是為了節(jié)省顯存空間。就像我們學習時,會先從短的文章開始,當學會閱讀200字作文后,800字長文章就不需要再單獨學習。
多輪對話微調(Multi dialog Fine-tuning):動態(tài)學習率,epoch=5
學習率設置為1e-5到1e-6的動態(tài)學習率,微調epoch數為5。
# 3-full_sft.py中設置數據集為sft_data.csv
torchrun --nproc_per_node 2 3-full_sft.py
- 在2的基礎上,LLM已經學會一個問題->一個回答的聊天模板。此時僅需在具備歷史問答的更長聊天模板上進一步微調即可。
- 我們僅需使用數據集的history_chat 字段,即歷史對話,以及history_chat_response字段,即歷史對話的回答。
- 構建【問題->回答,問題->回答,問題->】的新聊天模板,然后使用這個數據集進行微調。
- 學習完成的模型不僅僅只能回答當前問題,還能根據歷史對話進行連貫的對話。
- 這一步并非必須,因為小模型長上文對話能力很弱,強行對齊多輪問答模板會損失一定程度的單輪SFT效果。
直接偏好優(yōu)化,強化學習微調(Direct Preference Optimization, DPO):
活字三元組(q,chose,reject)數據集,學習率le-5,半精度fp16,共1個epoch,耗時1h。
python 5-dpo_train.py
- 在前面的訓練中,機器人已經具備了基本的對話能力。但是,我們希望它能夠更符合人的偏好,給出更讓人滿意的回答。
- 這個過程就像是讓機器人參加工作培訓,從優(yōu)秀員工的作為例子,消極員工作為反例,學習如何更好地服務客戶。
LLM的參數配置
關于LLM的參數配置,有一篇很有意思的論文MobileLLM做了詳細的研究和實驗。 scaling law在小模型中有自己獨特的規(guī)律。 引起Transformer參數成規(guī)模變化的參數幾乎只取決于d_model
和n_layers
。
d_model
↑+n_layers
↓->矮胖子d_model
↓+n_layers
↑->瘦高個
2020年提出Scaling Law的論文認為,訓練數據量、參數量以及訓練迭代次數才是決定性能的關鍵因素,而模型架構的影響幾乎可以忽視。 然而似乎這個定律對小模型并不完全適用。 MobileLLM提出架構的深度比寬度更重要,「深而窄」的「瘦長」模型可以學習到比「寬而淺」模型更多的抽象概念。 例如當模型參數固定在125M或者350M時,30~42層的「狹長」模型明顯比12層左右的「矮胖」模型有更優(yōu)越的性能, 在常識推理、問答、閱讀理解等8個基準測試上都有類似的趨勢。 這其實是非常有趣的發(fā)現,因為以往為100M左右量級的小模型設計架構時,幾乎沒人嘗試過疊加超過12層。 這與MiniMind在訓練過程中,模型參數量在d_model
和n_layers
之間進行調整實驗觀察到的效果是一致的。 然而「深而窄」的「窄」也是有維度極限的,當d_model<512時,詞嵌入維度坍塌的劣勢非常明顯, 增加的layers并不能彌補詞嵌入在固定q_head帶來d_head不足的劣勢。 當d_model>1536時,layers的增加似乎比d_model的優(yōu)先級更高,更能帶來具有“性價比”的參數->效果增益。 因此MiniMind設定small模型的d_model=512,n_layers=8來獲取的「極小體積<->更好效果」的平衡。 設定d_model=768,n_layers=16來獲取效果的更大收益,更加符合小模型scaling-law的變化曲線。
作為參考,GPT3的參數設定見下表:
訓練完成的模型權重
百度網盤
Model Name | params | Config | pretrain_model | single_sft_model | multi_sft_model |
---|
minimind-v1-small | 26M | d_model=512 n_layers=8 | 鏈接 | 鏈接 | 鏈接 |
minimind-v1-moe | 4×26M | d_model=512 n_layers=8 | 鏈接 | 鏈接 | 鏈接 |
minimind-v1 | 108M | d_model=768 n_layers=16 | 鏈接 | 鏈接 | 鏈接 |
6、評估
測試多個版本模型的內容輸出
以下測試于2024-09-17完成,此日期后發(fā)布的新模型,無特殊需要時將不加入測試。
[A]?minimind-v1-small(0.02B)
[B]?minimind-v1-moe(0.1B)
[C]?minimind-v1(0.1B)
[D]?baby-llama2-chinese(0.2B)
[E]?chatlm-mini-chinese(0.2B)
[Q]: 你知道長江嗎?
[A]: 是的,長江是中國最長的河流,全長超過3300千米。
[B]: 長江是中國最長的河流,總長度約為6300公里。它發(fā)源于青藏高原的青海湖,流經青海、四川、甘肅、寧夏、內蒙古、陜西和山西。長江流域是中國最大的農業(yè)區(qū)之一,也是中國的文化和經濟中心。
[C]: 是的,長江是中國最長的河流之一,也是世界第三大河流。長江發(fā)源于青藏高原,流經11個省份,最終注入東海。長江流域是中國最大的河流流域之一,擁有著豐富的自然資源和文化遺產,如長江大橋、長江海洋博物館、長江古城等。
[D]: 同時也知道,中國是世界上最長的城市之一,擁有超過3400萬人口。
[E]: 是的,長江是中國最長的河流,也是世界上最長的河流之一。它發(fā)源于青藏高原,流經九個省區(qū),最終注入東海。長江流域的氣候溫和,四季分明,是中國重要的農業(yè)和工業(yè)基地。長江流域的水產資源豐富,是中國的重要漁業(yè)資源之一。
[Q]: 第一顆人造衛(wèi)星是哪個國家發(fā)射的?
[A]: 第一顆人造衛(wèi)星是斯普特尼克1號。
[B]: 第一顆人造衛(wèi)星是俄羅斯的國際衛(wèi)星,于1957年發(fā)射。
[C]: 第一顆人造衛(wèi)星是蘇聯(lián)發(fā)射的,它是由蘇聯(lián)于1957年10月發(fā)射的。
[D]: 這顆名為“阿姆斯特朗”的衛(wèi)星,于1961年11月20日發(fā)射,是第一個成功將人類送入太空的衛(wèi)星。
[E]: 第一顆人造衛(wèi)星是蘇聯(lián)于1957年4月4日發(fā)射的,它是由蘇聯(lián)宇航員尤里·加加林(Yuri Gagarin)和蘇聯(lián)工程師羅爾德·謝爾蓋耶夫(Roald Skohley)共同發(fā)射的。在發(fā)射過程中,加加林和謝爾蓋耶夫使用了一個名為“斯普特尼克1號”的小型衛(wèi)星,它的直徑為4.3米,重量為1,051公斤。這枚衛(wèi)星被稱為“斯普特尼克1號”,是蘇聯(lián)太空競賽中的一個里程碑,也是人類歷史上第一次在太空中進行太空行走。
[Q]: 你知道泰山在哪里嗎?
[A]: 泰山位于中國東部地區(qū),是中國五岳之一。
[B]: 泰山位于山東省泰安市泰安市。泰安市是中國五岳之一,也是世界文化遺產和中國歷史文化名山之一。泰安市有許多著名的景點,如五岳之一、玉皇頂、南天門、玉皇閣等。
[C]: 泰山位于中國山東省泰安市,是中國五岳之一。
[D]: 作為一個人工智能助手,我無法訪問互聯(lián)網,因此無法提供關于你所在位置的信息。不過,你可以通過搜索或搜索相關關鍵詞來獲取有關你所在位置的信息,或者查看相關新聞或網站來獲取有關你所在位置的信息。
[E]: 泰山位于中國山東省泰安市境內,是中國五岳之一,也是中國文化和歷史的重要象征之一。它是中國五岳之一,也是中國道教和佛教的發(fā)源地之一。泰山的海拔高度為1,545米,是中國五岳之一,也是中國最著名的旅游景點之一。它的歷史可以追溯到公元前5世紀,是中國古代帝王祭祀的場所。泰山也是中國文化的重要組成部分,被譽為“五岳之首”,是中國文化的重要遺產之一。
[Q]: 世界上最高的山峰是什么?
[A]: 世界上最高的山峰是珠穆朗瑪峰,位于尼泊爾和中國的邊境上,海拔8848米。
[B]: 世界上最高的山峰是珠穆朗瑪峰,位于喜馬拉雅山脈,海拔8,848米。
[C]: 珠穆朗瑪峰是世界上最高的山峰,海拔8848米。
[D]: 世界上最高的山峰是珠穆朗瑪峰,位于喜馬拉雅山脈,海拔8,848.86米(29,031.69英尺)。
[E]: 世界上最高的山峰是珠穆朗瑪峰,也稱為薩加瑪塔,位于喜馬拉雅山脈的尼泊爾和中國邊境之間,海拔8,848.86米(29,031.69英尺)。它是世界上最著名的登山目標之一,吸引著來自世界各地的登山者前來挑戰(zhàn)。珠穆朗瑪峰的名字來自藏語,意思是“女神的額峰”,它是由兩個不同的山峰組成的,其中一個是位于尼泊爾的珠穆朗瑪峰,另一個則位于中國。它的高度是通過測量海拔高度來確定的,因為它是通過測量地球的平均高度來確定的。盡管珠穆朗瑪峰是世界上最高的山峰,但它并不是地球上任何其他地方都能到達的。地球上的其他地方,如南美洲的安第斯山脈,也是世界上最高的山脈,但它并不是地球上最高的山峰??傊?#xff0c;珠穆朗瑪峰是世界上最高的山峰,但它并不是地球上任何地方都能到達的。它是地球上最高的山脈,但它并不是地球上任何地方都能到達的。
[Q]: 萬有引力是誰提出的?
[A]: 萬有引力是由英國物理學家牛頓提出的。他認為,所有物體都會產生引力,這個引力是由物體的質量和距離決定的。這個理論揭示了質量和距離之間的關系,并證明了萬有引力的本質。
[B]: 萬有引力是由牛頓在1687年提出的。它是宇宙中一個基本的物理現象,它描述了物體之間的相互作用。這個力被稱為萬有引力,它在所有物體之間都存在,這種力與物體的質量和距離有關。萬有引力是自然界中最基本的力量之一,它不僅影響著物體的運動和變化,還對宇宙的結構和演化產生著重要的影響。
[C]: 萬有引力是英國物理學家艾薩克·牛頓在17世紀提出的。
[D]: 引力是宇宙中一種力量,它是由質量或能量所組成的。根據牛頓的萬有引力定律,一個物體之間的引力大小與它的質量成正比,與它的質量成反比。因此,牛頓的萬有引力定律表明,一個物體之間的引力大小與它的質量成正比,與它的質量成反比。這個定律在物理學、天文學和物理學中都有廣泛的應用。
[E]: 萬有引力是由英國物理學家艾薩克·牛頓于1687年提出的。他在1687年發(fā)表了一篇著名的論文,題為《自然哲學的數學原理》,其中提出了萬有引力定律,指出任何兩個物體之間都存在著一種引力,這種引力的大小與它們的質量成正比,與它們之間的距離的平方成反比。這個定律被稱為萬有引力定律,它描述了質量和距離之間的關系。它表明,兩個物體之間的引力與它們的質量成正比,與它們之間的距離的平方成反比。這個定律對于解釋宇宙中的許多現象和現象之間的相互作用非常重要,例如行星繞太陽運動、恒星之間的引力透鏡效應等等。它也被廣泛應用于天文學、物理學和工程學等領域,為我們理解宇宙的本質和演化提供了重要的理論基礎。
[Q]: 你知道大熊貓的主要食物是什么嗎?
[A]: 大熊貓的主要食物是竹子。它們通常吃竹子,每天需要吃掉大約30公斤的竹子。
[B]: 是的,大熊貓主要以竹子為食。它們每天需要吃掉大量的竹子來維持生命,每天需要吃掉40至80公斤的竹子。此外,它們也會吃一些其他的植物,如草、果實、堅果和小型哺乳動物。
[C]: 大熊貓主要以竹子為食,也會偶爾食用其他的植物和動物。此外,大熊貓也會吃一些野果、小動物和植物,但這些都不屬于它們的主要食物來源。
[D]: 大熊貓的主要食物是竹子。
[E]: 大熊貓是一種以竹子為主要食物的植食動物,它們的腸道結構適合消化纖維素含量高的竹子,但也會吃一些其他植物,如草本植物和小型哺乳動物。大熊貓的腸道結構也適應了高纖維的竹子,這使得它們能夠消化大量的纖維素,從而幫助它們在野外生存。大熊貓的腸道中還含有一種叫做“纖維素酶”的酶類物質,這種酶能夠幫助大熊貓分解纖維素,從而幫助它們消化大量的水分和營養(yǎng)物質。此外,大熊貓的腸道還含有一種叫做“纖維素蛋白”的蛋白質,這種蛋白質能夠幫助大熊貓維持體內的能量水平,從而幫助它們在野外生存。總的來說,大熊貓的主要食物是竹子,但它們也會吃一些其他植物,如草本植物和小型哺乳動物。
[Q]: 海水為什么是咸的?
[A]: 海水中含有許多鹽分,這些鹽分可以導致海水咸度的增加。海水中的鹽分主要來自于海水中的鹽分,這些鹽分可以從海水中的鹽分中獲得。海水中的氧化物和鹽分可以與海水中的鹽分形成氫鍵,從而使海水咸度增加。
[B]: 海水是咸的,這是因為它含有大量的鹽分,其中包括氯離子和氯離子。這些離子在海洋中形成了大量的鹽,這些鹽分被稱為鹽分。海水中含有許多溶解在水中的鹽,這些鹽分會隨著海水的升高而逐漸蒸發(fā),最終導致海水中鹽分的蒸發(fā)。這些鹽分在海水中被完全消耗,然后被排除在海水中。此外,海水中還含有許多其他的鹽分,但這些鹽分是不同的,因為它們在水中的浮起和下降過程是不同的。海水中的鹽分是從海底的巖石中提取出來的,這些鹽分在海水中可以被利用??偟膩碚f,海水是咸的,這也是為什么海水中含有許多鹽分和鹽分的原因。
[C]: 海水含有許多溶解的鹽類,其中最主要的是氯化鈉。當水中加入鹽時,鹽的分子會與水分子發(fā)生反應,形成氫氧化鈉,這是一種鹽。
[D]: 因為水是許多生物的生存所必需的,它能夠吸收和釋放二氧化碳,釋放氧氣,維持大氣中的水蒸氣,以及維持水循環(huán)。水中的鹽類和化學物質會釋放出氧氣,使地球上的生物呼吸。此外,水還具有許多其他功能,如保持水循環(huán)、維持水循環(huán)、調節(jié)氣候和環(huán)境等。水是許多生物生存所必需的,它也是許多自然現象的重要基礎。
[E]: 海水是咸的主要原因是因為其中含有大量的溶解鹽類,其中最主要的是氯化鈉(NaCl)。氯化鈉是一種非常常見的鹽類,它存在于地球上的大部分地區(qū),包括海洋、湖泊、河流和地下水。當水從海洋中蒸發(fā)時,它會帶走一部分鹽分,使海水變得咸。此外,海中還含有其他溶解鹽類的物質,如硫酸鹽、硫酸鎂、硫酸鈣、硫酸鎂鹽、硫酸鎂鉀、硫酸鎂鈉、硫酸鎂鈣、硫酸鎂鎂鈣、硫酸鎂鎂鈣、硫酸鎂鎂鈣、硫酸鎂鎂鈉、硫酸鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂鎂鎂鎂鈣、硫酸鎂鎂鎂鎂
Note
🙋?♂?直接把上述模型的回答丟給GPT-4o,讓它幫忙打個分:
基于GPT-4o的模型表現點評:
-
模型A:
- 表現:模型A的回答通常簡潔明了,但在某些問題上缺乏詳細信息和準確性。例如,在長江的長度問題上,模型A的回答是錯誤的。
- 評分:60
-
模型B:
- 表現:模型B的回答在某些問題上提供了額外的信息,但這些信息有時是不準確的或多余的。例如,在長江的長度問題上,模型B提供了不準確的長度和流域面積。
- 評分:65
-
模型C:
- 表現:模型C的回答通常較為詳細,且在大多數問題上提供了準確的信息。例如,在長江和泰山的問題上,模型C的回答是準確的。
- 評分:75
-
模型D:
- 表現:模型D的回答在某些問題上顯得混亂,且缺乏準確性。例如,在泰山的問題上,模型D的回答完全偏離了主題。
- 評分:50
-
模型E:
- 表現:模型E的回答通常非常詳細,但在某些問題上過于冗長,且包含了一些不必要的信息。例如,在萬有引力的問題上,模型E的回答過于復雜。
- 評分:70
排序(從高到低):
效果總結
-
minimind系列(ABC)的排序符合直覺,minimind-v1(0.1B)評分最高,常識性問題的回答基本沒有錯誤和幻覺。
- 出乎意料的是,minimind-v1-small(0.02B)僅有26M參數,卻可以接近minimind-v1(0.1B)的表現。
- minimind-v1(0.1B)的sft輪數
epochs
僅有不到2,偷懶提前kill騰出資源給小模型,0.1B沒有得到充分訓練的情況下依然做到了最強,其實還是底大一級壓死人。 - minimind-v1-moe(0.1B)表現只比minimind-v1-small(0.02B) 略好,同樣是因為偷懶早停騰出資源做其它訓練了,但是MoE模型這種稀疏多Experts模式需要的訓練輪次需要酌情更高,讓所有FFN層專家得到路由的激活充分訓練,在目前epochs設置為3時訓練的還不夠充足。 minimind在早期實驗驗證階段在Yi-Tokenizer上試驗過moe的充分訓練版本,可以做到比dense小模型表現肉眼可見地更好。此部分可能需要留給日后騰出服務器再訓練并更新v2、v3版本。
-
E模型的回答肉眼看起來是非常不錯的,盡管存在些許幻覺瞎編的情況。但GPT-4o和Deepseek的評分都一致認為它“信息過度冗長,且有重復內容,存在幻覺”。 其實這種評價略顯嚴格,100個字中哪怕有10個字是幻覺,就很容易把它歸到低分。由于E模型預訓練文本長度更長,數據集大得多,所以回答的看起來很完備。在體積近似的情況下,數據數量和質量都很重要。
🙋?♂?個人主觀評價:E>C>B≈A>D
🤖 GPT-4o 評價:C>E>B>A>D
Scaling Law:模型參數越大,訓練數據越多模型的性能越強。
Objective dataset: C-Eval
LLMs之minimind:minimind源碼解讀(eval_ceval.py)——基于Transformer模型的自動化考試評估系統(tǒng)(C-Eval)
https://yunyaniu.blog.csdn.net/article/details/142472364
C-Eval評測代碼見:./eval_ceval.py
, 小模型的測評通常為了避免回復格式的難以固定的特點, 而直接判斷A
,B
,C
,D
四個字母對應token預測概率,取最大的作為回答答案,與標準答案計算正確率。 minimind模型本身沒有使用較大的數據集訓練,也沒有針對回答選擇題的指令做微調,測評結果可以當個參考。
例如minimind-small的結果細項:
Type | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
---|
Data | probability_and_statistics | law | middle_school_biology | high_school_chemistry | high_school_physics | legal_professional | high_school_chinese | high_school_history | tax_accountant | modern_chinese_history | middle_school_physics | middle_school_history | basic_medicine | operating_system | logic | electrical_engineer | civil_servant | chinese_language_and_literature | college_programming | accountant | plant_protection | middle_school_chemistry | metrology_engineer | veterinary_medicine | marxism | advanced_mathematics | high_school_mathematics | business_administration | mao_zedong_thought | ideological_and_moral_cultivation | college_economics | professional_tour_guide | environmental_impact_assessment_engineer | computer_architecture | urban_and_rural_planner | college_physics | middle_school_mathematics | high_school_politics | physician | college_chemistry | high_school_biology | high_school_geography | middle_school_politics | clinical_medicine | computer_network | sports_science | art_studies | teacher_qualification | discrete_mathematics | education_science | fire_engineer | middle_school_geography |
Type | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
---|
T/A | 3/18 | 5/24 | 4/21 | 7/19 | 5/19 | 2/23 | 4/19 | 6/20 | 10/49 | 4/23 | 4/19 | 4/22 | 1/19 | 3/19 | 4/22 | 7/37 | 11/47 | 5/23 | 10/37 | 9/49 | 7/22 | 4/20 | 3/24 | 6/23 | 5/19 | 5/19 | 4/18 | 8/33 | 8/24 | 5/19 | 17/55 | 10/29 | 7/31 | 6/21 | 11/46 | 5/19 | 3/19 | 4/19 | 13/49 | 3/24 | 5/19 | 4/19 | 6/21 | 6/22 | 2/19 | 2/19 | 14/33 | 12/44 | 6/16 | 7/29 | 9/31 | 1/12 |
Accuracy | 16.67% | 20.83% | 19.05% | 36.84% | 26.32% | 8.70% | 21.05% | 30.00% | 20.41% | 17.39% | 21.05% | 18.18% | 5.26% | 15.79% | 18.18% | 18.92% | 23.40% | 21.74% | 27.03% | 18.37% | 31.82% | 20.00% | 12.50% | 26.09% | 26.32% | 26.32% | 22.22% | 24.24% | 33.33% | 26.32% | 30.91% | 34.48% | 22.58% | 28.57% | 23.91% | 26.32% | 15.79% | 21.05% | 26.53% | 12.50% | 26.32% | 21.05% | 28.57% | 27.27% | 10.53% | 10.53% | 42.42% | 27.27% | 37.50% | 24.14% | 29.03% | 8.33% |
總題數: 1346
總正確數: 316
總正確率: 23.48%
結果匯總:
category | correct | question_count | accuracy |
---|
minimind-v1-small | 344 | 1346 | 25.56% |
minimind-v1 | 351 | 1346 | 26.08% |
以下來自GPT-4o對minimind表現的瞎猜:
### 模型擅長的領域:
1. 高中的化學:正確率為42.11%,是最高的一個領域。說明模型在這方面的知識可能較為扎實。
2. 離散數學:正確率為37.50%,屬于數學相關領域,表現較好。
3. 教育科學:正確率為37.93%,說明模型在教育相關問題上的表現也不錯。
4. 基礎醫(yī)學:正確率為36.84%,在醫(yī)學基礎知識方面表現也比較好。
5. 操作系統(tǒng):正確率為36.84%,說明模型在計算機操作系統(tǒng)方面的表現較為可靠。
### 模型不擅長的領域:
1. 法律相關:如法律專業(yè)(8.70%)和稅務會計(20.41%),表現相對較差。
2. 中學和大學的物理:如中學物理(26.32%)和大學物理(21.05%),模型在物理相關的領域表現不佳。
3. 高中的政治、地理:如高中政治(15.79%)和高中地理(21.05%),模型在這些領域的正確率較低。
4. 計算機網絡與體系結構:如計算機網絡(21.05%)和計算機體系結構(9.52%),在這些計算機專業(yè)課程上的表現也不夠好。
5. 環(huán)境影響評估工程師:正確率僅為12.90%,在環(huán)境科學領域的表現也不理想。
### 總結:
- 擅長領域:化學、數學(特別是離散數學)、教育科學、基礎醫(yī)學、計算機操作系統(tǒng)。
- 不擅長領域:法律、物理、政治、地理、計算機網絡與體系結構、環(huán)境科學。
這表明模型在涉及邏輯推理、基礎科學和一些工程技術領域的問題上表現較好,但在人文社科、環(huán)境科學以及某些特定專業(yè)領域(如法律和稅務)上表現較弱。如果要提高模型的性能,可能需要加強它在人文社科、物理、法律、以及環(huán)境科學等方面的訓練。
7、推理與部署
推理與導出
API推理
-
my_openai_api.py完成了openai_api的聊天接口,方便將自己的模型接入第三方UI 例如fastgpt、OpenWebUI等
-
從Huggingface下載模型權重文件
minimind (root dir)
├─minimind
| ├── config.json
| ├── generation_config.json
| ├── LMConfig.py
| ├── model.py
| ├── pytorch_model.bin
| ├── special_tokens_map.json
| ├── tokenizer_config.json
| ├── tokenizer.json
-
啟動聊天服務端
python my_openai_api.py
python chat_openai_api.py
curl http://ip:port/v1/chat/completions
-H "Content-Type: application/json" -d '{
"model": "model-identifier",
"messages": [
{ "role": "user", "content": "世界上最高的山是什么?" }
],
"temperature": 0.7,
"max_tokens": -1,
"stream": true
}'
在fastgpt中接入使用minimind api
minimind的案例應用
1、測試
本地快速推理和測試
# step 1
git clone https:///jingyaogong/minimind-v1
# step 2
python 2-eval.py
或者啟動streamlit,啟動網頁聊天界面
# or step 3, use streamlit
streamlit run fast_inference.py
在線測試
地址:魔搭社區(qū)