XTuner InternLM-Chat 個人小助手認知微調實踐

要解決的問題:
如何讓模型知道自己做什么,是什么樣身份。是誰創建了他!!!

概述

目標:通過微調,幫助模型認清了解對自己身份弟位

方式:使用XTuner進行微調

微調前(回答比較官方)
在這里插入圖片描述

微調后(對自己的身份有了清晰的認知)
在這里插入圖片描述

實操

# 創建自己的環境
conda create --name personal_assistant python=3.10 -y# 激活環境
conda activate personal_assistant
# 進入家目錄 (~的意思是 “當前用戶的home路徑”)
cd ~
# 創建版本文件夾并進入,以跟隨本教程
# personal_assistant用于存放本教程所使用的東西
mkdir /root/personal_assistant && cd /root/personal_assistant
mkdir /root/personal_assistant/xtuner019 && cd /root/personal_assistant/xtuner019# 拉取 0.1.9 的版本源碼
git clone -b v0.1.9  https://github.com/InternLM/xtuner
# 無法訪問github的用戶請從 gitee 拉取:
# git clone -b v0.1.9 https://gitee.com/Internlm/xtuner# 進入源碼目錄
cd xtuner# 從源碼安裝 XTuner
pip install -e '.[all]'

數據準備

創建data文件夾用于存放用于訓練的數據集

mkdir -p /root/personal_assistant/data && cd /root/personal_assistant/data

在data目錄下創建一個json文件personal_assistant.json作為本次微調所使用的數據集。json中內容可參考下方(復制粘貼n次做數據增廣,數據量小無法有效微調,下面僅用于展示格式,下面也有生成腳本)

其中conversation表示一次對話的內容,input為輸入,即用戶會問的問題,output為輸出,即想要模型回答的答案

[{"conversation": [{"input": "請介紹一下你自己","output": "我是kaai的小助手,內在是上海AI實驗室書生·浦語的7B大模型哦"}]},{"conversation": [{"input": "請做一下自我介紹","output": "我是kaai的小助手,內在是上海AI實驗室書生·浦語的7B大模型哦"}]}
]

以下是一個python腳本,用于生成數據集。在data目錄下新建一個generate_data.py文件,將以下代碼復制進去,然后運行該腳本即可生成數據集。

import json# 輸入你的名字
name = 'kaai'
# 重復次數
n = 10000# 創建初始問答數據
qa_data = [{"conversation": [{"input": "請介紹一下你自己","output": f"我是{name}的小助手,內在是上海AI實驗室書生·浦語的7B大模型哦"}]},{"conversation": [{"input": "請做一下自我介紹","output": f"我是{name}的小助手,內在是上海AI實驗室書生·浦語的7B大模型哦"}]}
]# 將生成的問答數據保存到JSON文件中
file_path = './qa_data_repeated.json'with open(file_path, 'w', encoding='utf-8') as file:# 使用json.dump直接寫入文件,而不是先創建一個大的字符串json.dump(qa_data * n, file, ensure_ascii=False, indent=4)

下載模型InternLM-chat-7B、

Hugging Face
使用 Hugging Face 官方提供的 huggingface-cli 命令行工具。安裝依賴:

pip install -U huggingface_hub

然后新建 python 文件,填入以下代碼,運行即可。

  • resume-download:斷點續下
  • local-dir:本地存儲路徑。(linux 環境下需要填寫絕對路徑)
import os# 下載模型
os.system('huggingface-cli download --resume-download internlm/internlm-chat-7b --local-dir your_path')

XTuner 提供多個開箱即用的配置文件,用戶可以通過下列命令查看:

# 列出所有內置配置
xtuner list-cfg
#創建用于存放配置的文件夾config并進入
mkdir /root/personal_assistant/config && cd /root/personal_assistant/config

拷貝一個配置文件到當前目錄:xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH} 在本例中:(注意最后有個英文句號,代表復制到當前路徑)

xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .

修改拷貝后的文件internlm_chat_7b_qlora_oasst1_e3_copy.py,修改下述位置: (這是一份修改好的文件internlm_chat_7b_qlora_oasst1_e3_copy.py)

主要改模型的位置同時一些超參數

在這里插入圖片描述
具體的內容

# PART 1 中
# 預訓練模型存放的位置
pretrained_model_name_or_path = '/root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b'# 微調數據存放的位置
data_path = '/root/personal_assistant/data/personal_assistant.json'# 訓練中最大的文本長度
max_length = 512# 每一批訓練樣本的大小
batch_size = 2# 最大訓練輪數
max_epochs = 3# 驗證的頻率
evaluation_freq = 90# 用于評估輸出內容的問題(用于評估的問題盡量與數據集的question保持一致)
evaluation_inputs = [ '請介紹一下你自己', '請做一下自我介紹' ]# PART 3 中
dataset=dict(type=load_dataset, path='json', data_files=dict(train=data_path))
dataset_map_fn=None

微調啟動

xtuner train /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py

微調后參數轉換/合并

# 創建用于存放Hugging Face格式參數的hf文件夾
mkdir /root/personal_assistant/config/work_dirs/hfexport MKL_SERVICE_FORCE_INTEL=1# 配置文件存放的位置
export CONFIG_NAME_OR_PATH=/root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py# 模型訓練后得到的pth格式參數存放的位置
export PTH=/root/personal_assistant/config/work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth# pth文件轉換為Hugging Face格式后參數存放的位置
export SAVE_PATH=/root/personal_assistant/config/work_dirs/hf# 執行參數轉換
xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATH

Merge模型參數

export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER='GNU'# 原始模型參數存放的位置
export NAME_OR_PATH_TO_LLM=/root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b# Hugging Face格式參數存放的位置
export NAME_OR_PATH_TO_ADAPTER=/root/personal_assistant/config/work_dirs/hf# 最終Merge后的參數存放的位置
mkdir /root/personal_assistant/config/work_dirs/hf_merge
export SAVE_PATH=/root/personal_assistant/config/work_dirs/hf_merge# 執行參數Merge
xtuner convert merge \$NAME_OR_PATH_TO_LLM \$NAME_OR_PATH_TO_ADAPTER \$SAVE_PATH \--max-shard-size 2GB

網頁DEMO

安裝網頁Demo所需依賴

pip install streamlit==1.24.0

下載demo代碼

# 創建code文件夾用于存放InternLM項目代碼
mkdir /root/personal_assistant/code && cd /root/personal_assistant/code
git clone https://github.com/InternLM/InternLM.git

修改代碼

/mnt/xtuner/xtuner019/personal_assistant/code/InternLM/chat/web_demo.py
@st.cache_resource
def load_model():model = (AutoModelForCausalLM.from_pretrained('/mnt/xtuner/xtuner019/personal_assistant/merge',trust_remote_code=True).to(torch.bfloat16).cuda())tokenizer = AutoTokenizer.from_pretrained('/mnt/xtuner/xtuner019/personal_assistant/merge',trust_remote_code=True)return model, tokenizer

運行

streamlit run web_demo.py --server.address 127.0.0.1 --server.port 6006

效果

微調前
在這里插入圖片描述
微調后(對自己的身份有了清晰的認知)
在這里插入圖片描述

你的路徑應該如下

├── code
│   └── InternLM
│       ├── agent
│       │   ├── lagent.md
│       │   ├── lagent_zh-CN.md
│       │   ├── pal_inference.md
│       │   ├── pal_inference.py
│       │   ├── pal_inference_zh-CN.md
│       │   ├── README.md
│       │   └── README_zh-CN.md
│       ├── assets
│       │   ├── compass_support.svg
│       │   ├── license.svg
│       │   ├── logo.svg
│       │   ├── modelscope_logo.png
│       │   ├── robot.png
│       │   └── user.png
│       ├── chat
│       │   ├── chat_format.md
│       │   ├── chat_format_zh-CN.md
│       │   ├── lmdeploy.md
│       │   ├── lmdeploy_zh_cn.md
│       │   ├── openaoe.md
│       │   ├── openaoe_zh_cn.md
│       │   ├── react_web_demo.py
│       │   ├── README.md
│       │   ├── README_zh-CN.md
│       │   └── web_demo.py
│       ├── finetune
│       │   ├── README.md
│       │   └── README_zh-CN.md
│       ├── LICENSE
│       ├── model_cards
│       │   ├── internlm_20b.md
│       │   ├── internlm2_1.8b.md
│       │   ├── internlm2_20b.md
│       │   ├── internlm2_7b.md
│       │   └── internlm_7b.md
│       ├── README.md
│       ├── README_zh-CN.md
│       ├── requirements.txt
│       ├── sonar-project.properties
│       ├── tests
│       │   └── test_hf_model.py
│       └── tools
│           ├── convert2llama.py
│           └── README.md
├── config
│   ├── internlm_chat_7b_qlora_oasst1_e3_copy.py
│   └── work_dirs
│       └── internlm_chat_7b_qlora_oasst1_e3_copy
│           ├── 20240223_160926
│           │   ├── 20240223_160926.log
│           │   └── vis_data
│           │       └── config.py
│           ├── 20240223_161009
│           │   ├── 20240223_161009.log
│           │   └── vis_data
│           │       └── config.py
│           ├── 20240223_161051
│           │   ├── 20240223_161051.log
│           │   └── vis_data
│           │       ├── 20240223_161051.json
│           │       ├── config.py
│           │       └── scalars.json
│           ├── epoch_1.pth
│           ├── epoch_2.pth
│           ├── epoch_3.pth
│           ├── internlm_chat_7b_qlora_oasst1_e3_copy.py
│           └── last_checkpoint
├── data
│   ├── data.py
│   ├── data_QA.py
│   └── personal_assistant.json
├── hf
│   ├── adapter_config.json
│   ├── adapter_model.safetensors
│   ├── README.md
│   └── xtuner_config.py
├── internlm-chat-7b
│   ├── config.json
│   ├── configuration_internlm.py
│   ├── configuration.json
│   ├── generation_config.json
│   ├── modeling_internlm.py
│   ├── pytorch_model-00001-of-00008.bin
│   ├── pytorch_model-00002-of-00008.bin
│   ├── pytorch_model-00003-of-00008.bin
│   ├── pytorch_model-00004-of-00008.bin
│   ├── pytorch_model-00005-of-00008.bin
│   ├── pytorch_model-00006-of-00008.bin
│   ├── pytorch_model-00007-of-00008.bin
│   ├── pytorch_model-00008-of-00008.bin
│   ├── pytorch_model.bin.index.json
│   ├── README.md
│   ├── special_tokens_map.json
│   ├── tokenization_internlm.py
│   ├── tokenizer_config.json
│   └── tokenizer.model
└── merge├── added_tokens.json├── config.json├── configuration_internlm.py├── generation_config.json├── modeling_internlm.py├── pytorch_model-00001-of-00008.bin├── pytorch_model-00002-of-00008.bin├── pytorch_model-00003-of-00008.bin├── pytorch_model-00004-of-00008.bin├── pytorch_model-00005-of-00008.bin├── pytorch_model-00006-of-00008.bin├── pytorch_model-00007-of-00008.bin├── pytorch_model-00008-of-00008.bin├── pytorch_model.bin.index.json├── special_tokens_map.json├── tokenization_internlm.py├── tokenizer_config.json└── tokenizer.model

github鏈接

操作指南

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

精致女童時尚穿搭~你想要的我都有哦

不論是版型還是顏色 都絕絕子的一件輕薄外套 整件看著干凈利落有設計感 兩側按扣式口袋超級實用的 穿著透氣不悶熱 搭配各種風格的褲子都一絕

【安卓基礎5】中級控件

🏆作者簡介:|康有為| ,大四在讀,目前在小米安卓實習,畢業入職 🏆本文收錄于 安卓學習大全持續更新中,歡迎關注 🏆安卓學習資料推薦: 視頻:b站搜動腦學院 視頻…

中東阿拉伯阿聯酋迪拜媒體宣發稿新聞報道推廣有哪些平臺渠道?跨境出海營銷

【本篇由言同數字科技有限公司原創】阿拉伯聯合酋長國是一個經濟和文化極為繁榮的地區,其中的迪拜更是以其獨特的地理位置、國際化的環境和世界級的商業和金融中心而出名。 1. 全球市場:阿聯酋迪拜是一個全球化的商業樞紐,吸引了來自世界各地…

無線聽覺新體驗:南卡、韶音、墨覺骨傳導耳機綜合評測

作為一個資深的跑步愛好者,我幾乎離不開音樂的陪伴。不知道大家有沒有同感,有時候一首歌曲就是我堅持下去的動力,尤其是在那段艱難的跑步時刻。但是找到一款既能讓我在運動中自由呼吸、又能提供優質音樂體驗的耳機,并不是一件容易…

C#,動態規劃(DP)丟雞蛋問題(Egg Dropping Puzzle)的三種算法與源代碼

1 扔雞蛋問題 動態規劃(Dynamic Programming,DP)是運籌學的一個分支,是求解決策過程最優化的過程。20世紀50年代初,美國數學家貝爾曼(R.Bellman)等人在研究多階段決策過程的優化問題時&#xf…

船舶制造5G智能工廠數字孿生可視化平臺,推進船舶行業數字化轉型

船舶制造5G智能工廠數字孿生可視化平臺,推進船舶行業數字化轉型。隨著數字化時代的到來,船舶行業正面臨著前所未有的機遇與挑戰。為了適應這一變革,船舶制造企業需要加快數字化轉型的步伐,提高生產效率、降低成本并增強市場競爭力…

電氣機械5G智能工廠數字孿生可視化平臺,推進電氣機械行業數字化轉型

電氣機械5G智能工廠數字孿生可視化平臺,推進電氣機械行業數字化轉型。隨著科技的不斷發展,數字化轉型已經成為各行各業發展的重要趨勢。電氣機械行業作為傳統制造業的重要組成部分,也面臨著數字化轉型的挑戰和機遇。為了更好地推進電氣機械行…

就業月薪14K!兩年后漲到25K! 考研失敗后,這個95年小哥哥成功轉行軟件測試,人生開掛了!

01 考研連續失敗 因為沒有特別明確的職業規劃,加上內心的學歷崇拜情節。大學畢業后,我沒有選擇參加工作,而是毅然選擇了加入考研大軍。 備考的日子緊張有序,我也一直在題海里廢寢忘食的遨游,本以為能順順當當地考上自…

每日學習總結20240221

每日總結 20240221 花自飄零水自流。一種相思,兩處閑愁。 —— 李清照「一剪梅紅藕香殘玉簟秋」 1. stat 在Linux中,stat 是一個用于顯示文件或文件系統狀態的命令行工具。它提供了關于文件的詳細信息,包括文件類型、權限、大小、所有者、修…

Codeforces Round 490 (Div. 3)

目錄 A. Mishka and Contest B. Reversing Encryption C. Alphabetic Removals D. Equalize the Remainders E. Reachability from the Capital F. Cards and Joy A. Mishka and Contest 依照題目意思左右遍歷標記即可 void solve(){cin>>n>>m;for(int i1;i…

Windows環境下查看磁盤層級占用空間的解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

C++ //練習 7.48 假定Sales_data的構造函數不是explicit的,則下述定義將執行什么樣的操作?

C Primer(第5版) 練習 7.48 練習 7.48 假定Sales_data的構造函數不是explicit的,則下述定義將執行什么樣的操作? string null_isbn("9-999-99999-9"); Sales_data item1(null_isbn); Sales_data item2("9-999-99…

生產環境下,應用模式部署flink任務,通過hdfs提交

前言 通過通過yarn.provided.lib.dirs配置選項指定位置,將flink的依賴上傳到hdfs文件管理系統 1. 實踐 (1)生產集群為cdh集群,從cm上下載配置文件,設置環境 export HADOOP_CONF_DIR/home/conf/auth export HADOOP_CL…

前端常見面試題之react基礎

文章目錄 1. react事件為何需要bind this(1)箭頭函數(2)bind改變this指向(3)構造函數中使用箭頭函數綁定this 2. react事件和dom事件的區別3. react事件中的event參數4. react事件中的自定義參數5. 自定義參數和event參數共存6. 受控組件和非受控組件7. props實現父子組件通信1…

Android將 ViewBinding封裝到BaseActivity基類中(Java版)

在Android中使用Java語言將ViewBinding封裝到基類中,操作步驟如下: 1、在項目的build.gradle文件中啟用了ViewBinding,添加以下代碼: android {...buildFeatures {viewBinding true} } 2、創建一個名為“BaseActivity”的基類&…

vue2和vue3 setup beforecreate create生命周期時間比較

創建一個vue程序&#xff0c;vue3可以兼容Vue2的寫法&#xff0c;很流暢完全沒問題 寫了一個vue3組件 <template><div></div> </template><script lang"ts"> import {onMounted} from vue export default{data(){return {}},beforeCr…

解決SpringAMQP工作隊列模型程序報錯:WARN 48068:Failed to declare queue: simple.queue

這里寫目錄標題 1.運行環境2.報錯信息3.解決方案4.查看解決之后的效果 1.運行環境 使用docker運行了RabbitMQ的服務器&#xff1a; 在idea中導入springAMQP的jar包&#xff0c;分別編寫了子模塊生產者publisher&#xff0c;消費者consumer&#xff1a; 1.在publisher中運行測試…

【機器學習的主要任務和應用領域】

曾夢想執劍走天涯&#xff0c;我是程序猿【AK】 目錄 簡述概要知識圖譜 簡述概要 了解機器學習的主要任務和應用領域 知識圖譜 機器學習的主要任務可以分為監督學習、無監督學習和半監督學習。 監督學習&#xff1a;這是機器學習中最為常見的一類任務&#xff0c;基于已知類…

[TCP] TCP/IP 基礎知識詞典(3)

我想統計一下&#xff0c;TCP/IP 尤其是TCP協議&#xff0c;能搜到的常見的問題&#xff0c;整理起來&#xff0c;關鍵詞添加在目錄中&#xff0c;便于以后查閱。 目前預計整理共3篇&#xff1a; [TCP] TCP/IP 基礎知識問答 &#xff1a;基礎知識 [TCP] TCP/IP 基礎知識問答&…

R語言數據分析(五)

R語言數據分析&#xff08;五&#xff09; 文章目錄 R語言數據分析&#xff08;五&#xff09;前言一、什么是整潔的數據二、延長數據2.1 列名中的數據值2.2 pivot_longer()的處理原理2.3 列名中包含許多變量的情況2.4 列名同時包含數據和變量 三、擴寬數據3.1 pivot_wider的處…