系列篇章💥
AI大模型探索之路-訓練篇1:大語言模型微調基礎認知
AI大模型探索之路-訓練篇2:大語言模型預訓練基礎認知
AI大模型探索之路-訓練篇3:大語言模型全景解讀
AI大模型探索之路-訓練篇4:大語言模型訓練數據集概覽
AI大模型探索之路-訓練篇5:大語言模型預訓練數據準備-詞元化
AI大模型探索之路-訓練篇6:大語言模型預訓練數據準備-預處理
AI大模型探索之路-訓練篇7:大語言模型Transformer庫之HuggingFace介紹
AI大模型探索之路-訓練篇8:大語言模型Transformer庫-預訓練流程編碼體驗
AI大模型探索之路-訓練篇9:大語言模型Transformer庫-Pipeline組件實踐
AI大模型探索之路-訓練篇10:大語言模型Transformer庫-Tokenizer組件實踐
AI大模型探索之路-訓練篇11:大語言模型Transformer庫-Model組件實踐
AI大模型探索之路-訓練篇12:語言模型Transformer庫-Datasets組件實踐
AI大模型探索之路-訓練篇13:大語言模型Transformer庫-Evaluate組件實踐
AI大模型探索之路-訓練篇14:大語言模型Transformer庫-Trainer組件實踐
AI大模型探索之路-訓練篇15:大語言模型預訓練之全量參數微調
AI大模型探索之路-訓練篇16:大語言模型預訓練-微調技術之LoRA
AI大模型探索之路-訓練篇17:大語言模型預訓練-微調技術之QLoRA
AI大模型探索之路-訓練篇18:大語言模型預訓練-微調技術之Prompt Tuning
AI大模型探索之路-訓練篇19:大語言模型預訓練-微調技術之Prefix Tuning
AI大模型探索之路-訓練篇20:大語言模型預訓練-常見微調技術對比
AI大模型探索之路-訓練篇21:Llama2微調實戰-LoRA技術微調步驟詳解
AI大模型探索之路-訓練篇22: ChatGLM3微調實戰-從原理到應用的LoRA技術全解
AI大模型探索之路-訓練篇23:ChatGLM3微調實戰-基于P-Tuning V2技術的實踐指南
AI大模型探索之路-訓練篇24:ChatGLM3微調實戰-多卡方案微調步驟詳解
目錄
- 系列篇章💥
- 前言
- 一、概述
- 二、知識庫核心架構回顧(RAG)
- 1、知識數據向量化
- 2、知識數據檢索返回
- 三、技術選型
- 1、模型選擇ChatGLM3-6B
- 2、Embedding模型選擇
- 四、改造后的技術選型
- 五、服務器資源準備
- 六、私有模型下載測試
- 1、下載ChatGLM3工程
- 2、安裝依賴
- 3、模型測試
- 七、微調工具LLaMA-Factory
- 1、LLaMA-Factory簡介
- 2、LLaMA-Factory下載安裝
- 1)下載工程
- 2)創建單獨python環境
- 3)安裝依賴
- 3、LLaMA-Factory測試
- 1)下載Llama3-8B-Instruct
- 2)模型微調
- 3)模型推理
- 4)模型合并
- 八、基于模型問題本地知識庫
- 1、環境映射配置
- 1)AutoDL配置
- 2)啟動web UI界面
- 3)本地端口映射處理
- 2、模型下載
- 1)下載模型(權重相關文件)
- 2)下載embedding模型
- 3、數據準備
- 4、UI界面微調演示和驗證
- 1)微調
- 2)推理
- 3)模型合并
- 5、代碼微調演示和驗證
- 6、本地知識庫代碼改造
- 總結
前言
在當前信息技術迅猛發展的時代,知識庫的構建與應用已成為企業競爭的關鍵。隨著自然語言處理技術的不斷進步,基于微調的企業級知識庫改造落地方案受到越來越多的關注。在前面的系列篇章中我們分別實踐了基于CVP架構-企業級知識庫實戰落地和基于基于私有模型GLM-企業級知識庫開發實戰;本文將深入探討和實踐一種基于微調技術的企業級知識庫改造方法,以期為企業提供更加高效、安全和可靠的知識管理解決方案。
一、概述
企業知識庫架構方案,通常有3中可選方案:
1)基于在線的大模型如ChatGPT,加上Embedding技術,通過更新迭代向量數據庫;開發、運維簡單,開發門檻比較低;僅需少量的AI知識技能儲備,但是需要將知識開放給大模型;
2)基于開源的大模型如GLM,Llama,自己獨立部署,同樣加上Embedding技術,通過更新迭代向量數據庫;開發、運維簡單,需要提供硬件GPU資源保障;需要較少的AI知識技能儲備,可以保障知識庫的隱私安全;
3)基于開源的大模型如GLM,Llama,自己獨立部署,采用微調技術,再同樣加上Embedding技術,通過更新迭代向量數據庫;開發、運維簡單,需要提供硬件GPU資源保障;需要較深的AI知識技能儲備,可以保障知識庫的隱私安全;可以自己定制化擴展。( 如果知識庫更新頻率較低,可以不需要引入向量數據庫作為補充,直接定期微調即可)
二、知識庫核心架構回顧(RAG)
1、知識數據向量化
首先,通過文檔加載器加載本地知識庫數據,然后使用文本拆分器將大型文檔拆分為較小的塊,便于后續處理。接著,對拆分的數據塊進行Embedding向量化處理,最后將向量化后的數據存儲到向量數據庫中以便于檢索。
2、知識數據檢索返回
根據用戶輸入,使用檢索器從向量數據庫中檢索相關的數據塊。然后,利用包含問題和檢索到的數據的提示,交給ChatModel / LLM(聊天模型/語言生成模型)生成答案。
三、技術選型
1、模型選擇ChatGLM3-6B
1)開源的:需要選擇開源的項目方便自主擴展。
2)高性能的:選擇各方面性能指標比較好的,能夠提升用戶體驗。
3)可商用的:在不增加額外成本的前提下,保證模型的商用可行性。
4)低成本部署的:部署時要能夠以最低成本代價部署運行知識庫,降低公司成本開支。
5)中文支持:需要選擇對我母語中文支持性比較好的模型,能夠更好的解析理解中文語義。
注意:選擇ChatGLM3-6B更主要的原因是方便自己能夠跑起來(本錢不夠)
企業實踐可以考慮通義千問-72B(Qwen-72B)
,阿里云研發的通義千問大模型系列的720億參數規模的模型。Qwen-72B是基于Transformer的大語言模型,
在超大規模的預訓練數據上進行訓練得到。預訓練數據類型多樣,覆蓋廣泛,包括大量網絡文本、專業書籍、代碼等。同時,在Qwen-72B的基礎上,還使用對齊機制打造了基于大語言模型的AI助手Qwen-72B-Chat。
主要有以下特點:
1)大規模高質量訓練語料:使用超過3萬億tokens的數據進行預訓練,包含高質量中、英、多語言、代碼、數學等數據,涵蓋通用及專業領域的訓練語料。通過大量對比實驗對預訓練語料分布進行了優化。
2)強大的性能:Qwen-72B在多個中英文下游評測任務上(涵蓋常識推理、代碼、數學、翻譯等),效果顯著超越現有的開源模型。具體評測結果請詳見下文。
3)覆蓋更全面的詞表:相比目前以中英詞表為主的開源模型,Qwen-72B使用了約15萬大小的詞表。該詞表對多語言更加友好,方便用戶在不擴展詞表的情況下對部分語種進行能力增強和擴展。
4)更長的上下文支持:Qwen-72B支持32k的上下文長度。
5)系統指令跟隨:Qwen-72B-Chat可以通過調整系統指令,實現角色扮演,語言風格遷移,任務設定,和行為設定等能力。*
資源要求:運行FP16模型需要多卡至少144GB顯存(例如2xA100-80G或5xV100-32G);運行Int4模型(生產環境不建議采用量化技術,避免影響準確度)
至少需要48GB顯存(例如1xA100-80G或2xV100-32G)
2、Embedding模型選擇
我們要選擇一個開源免費的、中文支持性比較好的,場景合適的,各方面排名靠前的嵌入模型。
MTEB排行榜:https://huggingface.co/spaces/mteb/leaderboard ,MTEB是衡量文本嵌入模型在各種嵌入任務上性能的重要基準;可從排行榜中選相應的Enbedding模型;
本次從中選擇使用比較廣泛的 bge-large-zh-v1.5 (同樣也是智譜AI的開源模型),常用的還有text2vec-base-chinese
四、改造后的技術選型
1)LLM模型:ChatGLM3-6B
2)Embedding模型:bge-large-zh-v1.5/text2vec-base-chinese
3)應用開發框架:LangChain
4)向量數據庫:FAISS/pinecone/Milvus
5)WEB框架:streamlit/gradio
6)訓練技術:高效微調
7)高效微調技術:LoRA
五、服務器資源準備
1)如果精度為FP16, 需要GPU顯存大概需要16G左右。
2)如果量化為int8, 需要GPU顯存大概需要12G左右。
3)如果量化為int4, 需要GPU顯存大概需要8.5G左右。
實際情況需要比估算值要更大一點,購買云資源配置如下
六、私有模型下載測試
1、下載ChatGLM3工程
git clone https://github.com/THUDM/ChatGLM3
2、安裝依賴
執行下面的pip命令,安裝依賴
cd ChatGLM3
pip install -r requirements.txt
3、模型測試
進入basic_demo目錄,查看測試的demo,執行腳本:
python cli_demo.py
這個目錄放了各種測試用的demo,為了方便使用,本次主要采用命令行客戶端的方式測試
七、微調工具LLaMA-Factory
1、LLaMA-Factory簡介
本次采用市面流行的微調工具LLaMA-Factory,實現無代碼微調;它提供了簡單易用的訓練推理一體化WebUI 。
git地址:https://github.com/hiyouga/LLaMA-Factory.git
特點如下:
1)幾乎為0的命令行操作和零代碼編輯
2)中英文雙語界面即時切換
3)訓練、評估和推理一體化界面
4)預置 25 種模型和 24 種多語言訓練數據
5)即時的訓練狀態監控和簡潔的模型斷點管理
2、LLaMA-Factory下載安裝
1)下載工程
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
2)創建單獨python環境
conda create -n llama_factory python=3.10
conda activate llama_factory
3)安裝依賴
cd LLaMA-Factory
pip install -e .[torch,metrics]
3、LLaMA-Factory測試
使用官網提供的 Llama3-8B-Instruct 進行測試
1)下載Llama3-8B-Instruct
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
下面三行命令分別對 Llama3-8B-Instruct 模型進行 LoRA 微調、推理和合并。
注意:執行之前將下面3個文件中的模型地址改為本地下載的地址
2)模型微調
執行命令:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml
也可以直接采用原始命令參數的方式調用,例如:
llamafactory-cli train \--model_name_or_path /root/autodl-tmp/model/Meta-Llama-3-8B-Instruct \--template llama3
微調結果如下:
3)模型推理
執行命令:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
使用瀏覽器界面風格推理
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat examples/inference/llama3_lora_sft.yaml
啟動 OpenAI 風格 API推理
CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml
推理如下:
4)模型合并
執行命令:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml
合并結果:
/root/autodl-tmp/LLaMA-Factory/models/llama3_lora_sft
八、基于模型問題本地知識庫
1、環境映射配置
1)AutoDL配置
(注:僅限于跟我一樣用的AutoDL平臺的場景
)
如果您正在使用 AutoDL,先修改AutoDL的默認對外開放的端口:
export GRADIO_SERVER_PORT=6006
2)啟動web UI界面
CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=1 llamafactory-cli webui
---啟動后頁面打開展示不全 后改用了老版本的LLaMA-Factory
cd LLaMA-Factory
pip install -r requirements.txt
python src/train_web.py
3)本地端口映射處理
(注:僅限于跟我一樣用的AutoDL平臺的場景
)
ssh -CNg -L 6006:127.0.0.1:6006 root@123.125.240.150 -p 42151
其中root@123.125.240.150和42151分別是實例中SSH指令的訪問地址與端口,請找到自己實例的ssh指令做相應替換。6006:127.0.0.1:6006是指代理實例內6006端口到本地的6006端口。
2、模型下載
1)下載模型(權重相關文件)
在autodl-tmp下新建model用于放模型文件
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
檢查權重文件
對比modelscope上的文件列表和文件的大小,檢查是否下載完整
2)下載embedding模型
下載huggingface上的詞嵌入模型
git clone https://huggingface.co/BAAI/bge-large-zh-v1.5
git clone https://huggingface.co/shibing624/text2vec-base-chinese
3、數據準備
{"instruction": "朱利葉斯·凱撒是如何死亡的?","input": "","output": "朱利葉斯·凱撒,又稱尤利烏斯·愷撒(Julius Caesar)是古羅馬的政治家、軍事家和作家。他于公元前44年3月15日被刺殺。 \n\n根據歷史記載,當時羅馬元老院里一些參議員聯合起來策劃了對愷撒的刺殺行動,因為他們擔心愷撒的統治將給羅馬共和制帶來威脅。在公元前44年3月15日(又稱“3月的艾達之日”),愷撒去參加元老院會議時,被一群參議員包圍并被攻擊致死。據記載,他身中23刀,其中一刀最終致命。"},{"instruction": "法國的首都是什么?","input": "","output": "法國的首都是巴黎。"},{"instruction": "生成一個人們去野營旅行可能需要的十件物品的清單。","input": "","output": "1. 帳篷: 帳篷是野營必備的物品,可以提供庇護,避免風吹日曬,還能夠防止野生動物的干擾。\n2. 睡袋: 睡袋能夠為您提供一個溫暖舒適的睡眠環境,確保您在野外可以擁有一個良好的睡眠。\n3. 防水夾克: 在野外,天氣變化無常,因此攜帶一件防水夾克十分必要,可以防止您被雨水淋濕。\n4. 照明設備: 如手電筒、頭燈等,在野外夜晚黑暗的情況下為您提供照明,確保您的安全。\n5. 烹飪用具: 如便攜式爐灶、鍋碗瓢盆等,方便您在野外烹飪食物。\n6. 刀具: 如多功能軍刀、折疊刀等,能夠滿足您在野外的各種需求。\n7. 防蚊液: 在野外,蚊蟲十分繁多,因此攜帶防蚊液能夠有效避免蚊蟲叮咬。\n8. 防曬霜: 日曬對皮膚有害,攜帶防曬霜能夠有效防護紫外線,避免曬傷。\n9. 水壺: 在野外,水是必不可少的,攜帶一個水壺能夠方便您隨時飲用。\n10. 隨身背包: 一個輕"},{"instruction": "討論大蕭條的原因","input": "","output": "大蕭條是20世紀初期發生在全球范圍內的經濟衰退現象,其中最為嚴重的地區當屬美國。這場經濟危機持續了近十年之久,它的起因較為復雜,涉及多方面因素。\n\n首先,我們要提到1929年的股市崩盤。股票價格大幅下跌,導致投資者損失慘重,進而影響了消費信心。\n\n其次,當時的金融政策也是一個重要因素。為了維持金本位制度,聯邦儲備系統采取緊縮政策,卻進一步加劇了資金短缺的問題。\n\n此外,當時政府對失業率的應對不力,社會保障制度不健全,也為經濟衰退的進一步惡化埋下了禍根。\n\n最后,國際貿易也受到了影響。由于當時許多國家采取貿易保護主義政策,全球貿易額大幅下降,給各國經濟造成了巨大沖擊。\n\n綜上所述,大蕭條的原因是多方面的,涉及到金融政策,國際貿易,社會保障制度等多個領域。它給全球經濟發展帶來了嚴重的挑戰,也為我們提供了深刻的歷史經驗教訓。"}
將數據集添加到數據集庫中
4、UI界面微調演示和驗證
通過界面進行微調測試、再通過界面進行模型推理、最后在界面上直接進行模型合并
1)微調
默認是在Train訓練頁面;且訓練階段為“Supervised Fine-Tuning”(SFT)微調階段
命令預覽如下:
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage sft \--do_train True \--model_name_or_path /root/autodl-tmp/model/chatglm3-6b \--finetuning_type lora \--template chatglm3 \--dataset_dir data \--dataset mydata \--cutoff_len 1024 \--learning_rate 5e-05 \--num_train_epochs 3.0 \--max_samples 20000 \--per_device_train_batch_size 4 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--lora_rank 8 \--lora_dropout 0.1 \--lora_target query_key_value \--output_dir saves/ChatGLM3-6B-Chat/lora/train_2024-05-20-21-25-48 \--fp16 True \--val_size 0.1 \--evaluation_strategy steps \--eval_steps 100 \--load_best_model_at_end True \--plot_loss True
微調結束:
輸出文件如下:
2)推理
切換到聊天模式,加載模型之后即可進行聊天提問
3)模型合并
先刷新適配器,再選擇微調時輸出的目錄;設置最大的塊大小;設置合并后導出的模型目錄,進行導出
5、代碼微調演示和驗證
基于代碼調用合并后的模型,進行推理驗證,樣例如下:
6、本地知識庫代碼改造
只需要將原來中直接引入"THUDM/chatglm3-6b"的地址,改為本地合并后的模型地址 “/root/autodl-tmp/model/chatglm3-6b-sft” 即可;
修改llm_model.py中的get_chatglm3_6b_model方法
def get_chatglm3_6b_model(model_path=keys.Keys.CHATGLM3_MODEL_PATH):MODEL_PATH = "/root/autodl-tmp/model/chatglm3-6b-sft" #"THUDM/chatglm3-6b"llm = chatglm3(llm.load_model(model_name_or_path=MODEL_PATH)return llm
其他內容和前面AI大模型探索之路-實戰篇3基于私有模型GLM-企業級知識庫開發實戰中一樣
啟動運行測試:
總結
通過本文的深入分析和實踐,我們成功地實現了一種基于微調技術的企業級知識庫改造落地方案。這一方案充分結合了自然語言處理技術和企業的實際需求,不僅提高了知識庫構建的效率,還確保了數據的安全性和隱私性。在實踐中,我們采用了開源的ChatGLM3-6B模型作為基礎,通過微調技術對其進行優化,使其更加適應企業的應用場景。同時,我們還探討了不同的知識庫架構方案,為企業提供了更多的選擇空間。
🎯🔖更多專欄系列文章:AIGC-AI大模型探索之路
如果文章內容對您有所觸動,別忘了點贊、?關注,收藏!加入我,讓我們攜手同行AI的探索之旅,一起開啟智能時代的大門!