LLMs之InternLM:InternLM/InternLM-7B模型的簡介、安裝、使用方法之詳細(xì)攻略
導(dǎo)讀:InternLM有?1040億參數(shù),是在包含1.6萬億token的多語種高質(zhì)量數(shù)據(jù)集上訓(xùn)練而成。同時(shí),InternLM-7B完全可商用,支持8k語境窗口長度,中文超ChatGPT,訓(xùn)練和評估動(dòng)態(tài)反饋調(diào)整,基于ML deploy部署(基于Fast?Transform研發(fā))快速加載大模型,比Transform快到2~3倍,Hybrid?Zero提速?,開放OpenCompass?評測標(biāo)準(zhǔn)。
InternLM模型的簡介
? ? ? ? ?2023年6月7日,上海人工智能實(shí)驗(yàn)室(上海AI實(shí)驗(yàn)室)、商湯科技聯(lián)合香港中文大學(xué)、復(fù)旦大學(xué)及上海交通大學(xué)發(fā)布千億級參數(shù)大語言模型“書生·浦語”(InternLM)。“書生·浦語”具有?1040億參數(shù),是在包含1.6萬億token的多語種高質(zhì)量數(shù)據(jù)集上訓(xùn)練而成。全面評測結(jié)果顯示,“書生·浦語”不僅在知識掌握、閱讀理解、數(shù)學(xué)推理、多語翻譯等多個(gè)測試任務(wù)上表現(xiàn)優(yōu)秀,而且具備很強(qiáng)的綜合能力,因而在綜合性考試中表現(xiàn)突出,在多項(xiàng)中文考試中取得超越ChatGPT的成績,其中就包括中國高考各科目的數(shù)據(jù)集(GaoKao)。
? ? ? ? ?2023年7月6日,在2023世界人工智能大會(huì)(WAIC)科學(xué)前沿全體會(huì)議上,深度學(xué)習(xí)與計(jì)算機(jī)專家、上海人工智能實(shí)驗(yàn)室教授、香港中文大學(xué)教授林達(dá)華,發(fā)布了“書生通用大模型體系”(以下簡稱“書生大模型”),包括書生·多模態(tài)、書生·浦語InternLM和書生·天際LandMark等三大基礎(chǔ)模型,以及首個(gè)面向大模型研發(fā)與應(yīng)用的全鏈條開源體系。當(dāng)天,正式開源的版本為一個(gè)70億參數(shù)的輕量級InternLM-7B,在包含40個(gè)評測集的全維度評測中展現(xiàn)出卓越且平衡的性能,全面領(lǐng)先現(xiàn)有開源模型。
? ? ? ? ?InternLM ,即書生·浦語大模型,包含面向?qū)嵱脠鼍暗?0億參數(shù)基礎(chǔ)模型與對話模型 (InternLM-7B)。模型具有以下特點(diǎn):
- 使用上萬億高質(zhì)量預(yù)料,建立模型超強(qiáng)知識體系;
- 支持8k語境窗口長度,實(shí)現(xiàn)更長輸入與更強(qiáng)推理體驗(yàn);
- 通用工具調(diào)用能力,支持用戶靈活自助搭建流程;
? ? ? ? ?提供了支持模型預(yù)訓(xùn)練的輕量級訓(xùn)練框架,無需安裝大量依賴包,一套代碼支持千卡預(yù)訓(xùn)練和單卡人類偏好對齊訓(xùn)練,同時(shí)實(shí)現(xiàn)了極致的性能優(yōu)化,實(shí)現(xiàn)千卡訓(xùn)練下近90%加速效率。
GitHub地址:GitHub - InternLM/InternLM: InternLM has open-sourced a 7 billion parameter base model, a chat model tailored for practical scenarios and the training system.
論文地址:https://github.com/InternLM/InternLM-techreport/blob/main/InternLM.pdf
InternLM-techreport:GitHub - InternLM/InternLM-techreport
1、InternLM的techreport
? ? ? ? 我們推出了InternLM,一個(gè)具有1,040億參數(shù)的多語言基礎(chǔ)語言模型。InternLM使用多階段漸進(jìn)式的過程,在1.6T個(gè)標(biāo)記的大型語料庫上進(jìn)行預(yù)訓(xùn)練,然后通過微調(diào)來與人類喜好相匹配。我們還開發(fā)了一個(gè)名為Uniscale-LLM的訓(xùn)練系統(tǒng),用于高效的大型語言模型訓(xùn)練。在多個(gè)基準(zhǔn)測試上的評估表明,InternLM在多個(gè)方面,包括知識理解、閱讀理解、數(shù)學(xué)和編碼方面,均實(shí)現(xiàn)了最先進(jìn)的性能。憑借如此全面的能力,InternLM在包括MMLU、AGIEval、C-Eval和GAOKAO-Bench在內(nèi)的綜合考試中取得了出色的表現(xiàn),而無需使用外部工具。在這些基準(zhǔn)測試中,InternLM不僅表現(xiàn)優(yōu)于開源模型,而且相對于ChatGPT也獲得了更優(yōu)異的性能。此外,InternLM展示了出色的理解中文語言和中華文化的能力,這使得它成為支持面向中文語言應(yīng)用的基礎(chǔ)模型的合適選擇。本文詳細(xì)介紹了我們的結(jié)果,包括跨越各種知識領(lǐng)域和任務(wù)的基準(zhǔn)測試和示例。
(1)、主要結(jié)果
? ? ? ? 隨著最新的大型語言模型開始展現(xiàn)人類級別的智能,針對人類設(shè)計(jì)的考試,如中國的高考、美國的SAT和GRE,被視為評估語言模型的重要手段。值得注意的是,在其關(guān)于GPT-4的技術(shù)報(bào)告中,OpenAI通過跨多個(gè)領(lǐng)域的考試對GPT-4進(jìn)行了測試,并將考試成績作為關(guān)鍵結(jié)果。
? ? ? ? 我們在以下四個(gè)綜合考試基準(zhǔn)測試中,將InternLM與其他模型進(jìn)行了比較:
MMLU:基于各種美國考試構(gòu)建的多任務(wù)基準(zhǔn)測試,涵蓋了小學(xué)數(shù)學(xué)、物理、化學(xué)、計(jì)算機(jī)科學(xué)、美國歷史、法律、經(jīng)濟(jì)、外交等多個(gè)學(xué)科。
AGIEval:由微軟研究開發(fā)的基準(zhǔn)測試,用于評估語言模型通過人類導(dǎo)向的考試的能力,包括19個(gè)任務(wù)集,派生自中國和美國的各種考試,例如中國的高考和律師資格考試,以及美國的SAT、LSAT、GRE和GMAT。在這19個(gè)任務(wù)集中,有9個(gè)基于中國的高考(Gaokao),我們將其單獨(dú)列為一個(gè)重要的集合,稱為AGIEval(GK)。
C-Eval:用于評估中文語言模型的綜合基準(zhǔn)測試,包含52個(gè)學(xué)科的近14,000道問題,涵蓋數(shù)學(xué)、物理、化學(xué)、生物、歷史、政治、計(jì)算機(jī)和其他學(xué)科,以及公務(wù)員、注冊會(huì)計(jì)師、律師和醫(yī)生的專業(yè)考試。
排行榜地址:https:///static/leaderboard.html
GAOKAO-Bench:基于中國的高考的綜合基準(zhǔn)測試,包括高考的所有科目。它提供不同類型的問題,包括多項(xiàng)選擇、填空和問答。為了簡潔起見,我們將這個(gè)基準(zhǔn)測試簡稱為高考。
2、InternLM-7B模型的簡介
? ? ?InternLM ,即書生·浦語大模型,包含面向?qū)嵱脠鼍暗?0億參數(shù)基礎(chǔ)模型 (InternLM-7B)。模型具有以下特點(diǎn):
- 使用上萬億高質(zhì)量預(yù)料,建立模型超強(qiáng)知識體系;
- 通用工具調(diào)用能力,支持用戶靈活自助搭建流程;
官網(wǎng):internlm/internlm-7b · Hugging Face
3、InternLM、InternLM-7B模型的性能評測
? ? ?我們使用開源評測工具?OpenCompass?從學(xué)科綜合能力、語言能力、知識能力、推理能力、理解能力五大能力維度對InternLM開展全面評測,部分評測結(jié)果如下表所示,歡迎訪問?OpenCompass 榜單?獲取更多的評測結(jié)果。
數(shù)據(jù)集\模型 | InternLM-Chat-7B | InternLM-7B | LLaMA-7B | Baichuan-7B | ChatGLM2-6B | Alpaca-7B | Vicuna-7B |
---|
C-Eval(Val) | 53.2 | 53.4 | 24.2 | 42.7 | 50.9 | 28.9 | 31.2 |
MMLU | 50.8 | 51.0 | 35.2* | 41.5 | 46.0 | 39.7 | 47.3 |
AGIEval | 42.5 | 37.6 | 20.8 | 24.6 | 39.0 | 24.1 | 26.4 |
CommonSenseQA | 75.2 | 59.5 | 65.0 | 58.8 | 60.0 | 68.7 | 66.7 |
BUSTM | 74.3 | 50.6 | 48.5 | 51.3 | 55.0 | 48.8 | 62.5 |
CLUEWSC | 78.6 | 59.1 | 50.3 | 52.8 | 59.8 | 50.3 | 52.2 |
MATH | 6.4 | 7.1 | 2.8 | 3.0 | 6.6 | 2.2 | 2.8 |
GSM8K | 34.5 | 31.2 | 10.1 | 9.7 | 29.2 | 6.0 | 15.3 |
HumanEval | 14.0 | 10.4 | 14.0 | 9.2 | 9.2 | 9.2 | 11.0 |
RACE(High) | 76.3 | 57.4 | 46.9* | 28.1 | 66.3 | 40.7 | 54.0 |
- 以上評測結(jié)果基于?OpenCompass 20230706?獲得(部分?jǐn)?shù)據(jù)標(biāo)注
*
代表數(shù)據(jù)來自原始論文),具體測試細(xì)節(jié)可參見?OpenCompass?中提供的配置文件。 - 評測數(shù)據(jù)會(huì)因?OpenCompass?的版本迭代而存在數(shù)值差異,請以?OpenCompass?最新版的評測結(jié)果為主。
4、InternLM-7B模型的局限性
? ? ? ? 盡管在訓(xùn)練過程中我們非常注重模型的安全性,盡力促使模型輸出符合倫理和法律要求的文本,但受限于模型大小以及概率生成范式,模型可能會(huì)產(chǎn)生各種不符合預(yù)期的輸出,例如回復(fù)內(nèi)容包含偏見、歧視等有害內(nèi)容,請勿傳播這些內(nèi)容。由于傳播不良信息導(dǎo)致的任何后果,本項(xiàng)目不承擔(dān)責(zé)任。
InternLM-7B模型的安裝
1、Model Zoo
當(dāng)前通過 InternLM 訓(xùn)練的 InternLM 7B 和 InternLM 7B Chat 已經(jīng)開源,我們提供兩種格式的模型權(quán)重以供使用。除了使用 Transformers 格式加載模型之外,還可以通過 InternLM 加載以下格式的權(quán)重直接進(jìn)行繼續(xù)預(yù)訓(xùn)練或人類偏好對齊訓(xùn)練
模型 | InternLM 格式權(quán)重下載地址 | Transformers 格式權(quán)重下載地址 |
---|
InternLM 7B | ?編輯 | 🤗internlm/intern-7b |
InternLM Chat 7B | ?編輯 | 🤗internlm/intern-chat-7b |
InternLM Chat 7B 8k | ?編輯 | 🤗internlm/intern-chat-7b-8k |
2、InternLM 7B下載地址
下載地址:https:///internlm/internlm-7b/tree/main
InternLM模型的高性能部署
1、使用?LMDeploy?完成 InternLM 的一鍵部署。
首先安裝 LMDeploy:
python3 -m pip install lmdeploy
快速的部署命令如下:
python3 -m lmdeploy.serve.turbomind.deploy InternLM-7B /path/to/internlm-7b/model hf
在導(dǎo)出模型后,你可以直接通過如下命令啟動(dòng)服務(wù)一個(gè)服務(wù)并和部署后的模型對話
python3 -m lmdeploy.serve.client {server_ip_addresss}:33337
完整部署教程:GitHub - InternLM/lmdeploy: LMDeploy is a toolkit for compressing, deploying, and serving LLM
2、微調(diào)&訓(xùn)練
預(yù)訓(xùn)練與微調(diào)使用教程
請參考使用教程開始InternLM的安裝、數(shù)據(jù)處理、預(yù)訓(xùn)練與微調(diào)。
轉(zhuǎn)換為 Transformers 格式使用
通過 InternLM 進(jìn)行訓(xùn)練的模型可以很輕松地轉(zhuǎn)換為 HuggingFace Transformers 格式,方便與社區(qū)各種開源項(xiàng)目無縫對接。借助?tools/convert2hf.py
?可以將訓(xùn)練保存的權(quán)重一鍵轉(zhuǎn)換為 transformers 格式
python convert2hf.py --src_folder origin_ckpt/ --tgt_folder hf_ckpt/ --tokenizer tokenizes/tokenizer.model
轉(zhuǎn)換之后可以通過以下的代碼加載為 transformers
from transformers import AutoTokenizer, AutoModel
model = AutoModel.from_pretrained("hf_ckpt/", trust_remote_code=True).cuda()
3、訓(xùn)練系統(tǒng)
InternLM系統(tǒng)結(jié)構(gòu)代碼文件結(jié)構(gòu)
InternLM系統(tǒng)結(jié)構(gòu)本項(xiàng)目系統(tǒng)代碼文件結(jié)構(gòu)如下所示:
├── configs # 配置模塊,管理模型和訓(xùn)練相關(guān)參數(shù)
│ └── 7B_sft.py # 7B_sft.py 是系統(tǒng) demo 的配置文件樣例
├── internlm # 系統(tǒng)代碼的主目錄
│ ├── apis # 接口模塊,包含一些關(guān)于推理等的接口函數(shù)
│ ├── core # 核心模塊,管理用于訓(xùn)練和推理的 parallel context 和訓(xùn)練調(diào)度引擎
│ │ ├── context # context 模塊,主要負(fù)責(zé)初始化并行進(jìn)程組,并管理 parallel context
│ │ │ ├── parallel_context.py
│ │ │ └── process_group_initializer.py
│ │ ├── engine.py # 負(fù)責(zé)管理模型的訓(xùn)練和評估過程
│ │ ├── no_pipeline_scheduler.py # 并行訓(xùn)練的調(diào)度器
│ │ └── trainer.py # 負(fù)責(zé)管理訓(xùn)練引擎和調(diào)度器
│ ├── data # 數(shù)據(jù)模塊,負(fù)責(zé)管理數(shù)據(jù)集生成和處理
│ ├── initialize # 初始化模塊,負(fù)責(zé)管理分布式環(huán)境啟動(dòng)和訓(xùn)練器初始化
│ ├── model # 模型模塊,負(fù)責(zé)管理模型結(jié)構(gòu)定義和實(shí)現(xiàn)
│ ├── solver # 負(fù)責(zé)管理 optimizer 和 lr_scheduler 等的實(shí)現(xiàn)
│ └── utils # 輔助模塊,負(fù)責(zé)管理日志、存儲、模型注冊等
├── train.py # 模型訓(xùn)練的主函數(shù)入口文件
├── requirements # 系統(tǒng)運(yùn)行的依賴包列表
├── third_party # 系統(tǒng)所依賴的第三方模塊,包括 apex 和 flash-attention 等
├── tools # 一些腳本工具,用于原始數(shù)據(jù)集處理和轉(zhuǎn)換,模型 checkpoint 轉(zhuǎn)換等
└── version.txt # 系統(tǒng)版本號
訓(xùn)練性能
InternLM 深度整合了 Flash-Attention, Apex 等高性能模型算子,提高了訓(xùn)練效率。通過構(gòu)建 Hybrid Zero 技術(shù),實(shí)現(xiàn)計(jì)算和通信的高效重疊,大幅降低了訓(xùn)練過程中的跨節(jié)點(diǎn)通信流量。InternLM 支持 7B 模型從 8 卡擴(kuò)展到 1024 卡,千卡規(guī)模下加速效率可高達(dá) 90%,訓(xùn)練吞吐超過 180TFLOPS,平均單卡每秒處理的 token 數(shù)量超過3600。下表為 InternLM 在不同配置下的擴(kuò)展性測試數(shù)據(jù):
GPU Number | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 |
---|
TGS | 4078 | 3939 | 3919 | 3944 | 3928 | 3920 | 3835 | 3625 |
TFLOPS | 193 | 191 | 188 | 188 | 187 | 185 | 186 | 184 |
TGS 代表平均每GPU每秒可以處理的 Token 數(shù)量。更多的性能測試數(shù)據(jù)可參考訓(xùn)練性能文檔進(jìn)一步了解。
InternLM-7B模型的使用方法
1、通過以下的代碼加載 InternLM 7B Chat 模型
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-7b", trust_remote_code=True).cuda()
model = model.eval()
inputs = tokenizer(["來到美麗的大自然,我們發(fā)現(xiàn)"], return_tensors="pt")
for k,v in inputs.items():
gen_kwargs = {"max_length": 128, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.1}
output = model.generate(**inputs, **gen_kwargs)
print(output)
2、InternLM 7B Chat 模型的使用方法
(1)、通過以下的代碼加載 InternLM 7B Chat 模型
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-chat-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-chat-7b", trust_remote_code=True).cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "請?zhí)峁┤齻€(gè)管理時(shí)間的建議。", history=history)
print(response)
(2)、通過前端網(wǎng)頁對話
可以通過以下代碼啟動(dòng)一個(gè)前端的界面來與 InternLM Chat 7B 模型進(jìn)行交互
pip install streamlit==1.24.0
pip install transformers==4.30.2
streamlit run web_demo.py