微調Qwen2大語言模型加入領域知識

目錄

  • 試用Qwen2做推理
  • 安裝LLaMA-Factory
  • 使用自有數據集微調Qwen2
  • 驗證微調效果

試用Qwen2做推理

參考:https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html

from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto# Now you do not need to add "trust_remote_code=True"
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-7B-Instruct",torch_dtype="auto",device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-7B-Instruct")# Instead of using model.chat(), we directly use model.generate()
# But you need to use tokenizer.apply_chat_template() to format your inputs as shown below
prompt = "Give me a short introduction to large language model."
messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)# Directly use generate() and tokenizer.decode() to get the output.
# Use `max_new_tokens` to control the maximum output length.
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512
)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)

執行此操作后模型會緩存到如下目錄
/root/.cache/huggingface/hub/models–Qwen–Qwen2-7B-Instruct/

安裝LLaMA-Factory

參考:https://github.com/hiyouga/LLaMA-Factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

使用自有數據集微調Qwen2

參考:https://qwen.readthedocs.io/en/latest/training/SFT/llama_factory.html

啟動web ui 界面來進行微調

llamafactory-cli webui

在這里插入圖片描述

數據集選擇提前準備好的自有數據集train_data.json
編輯LLaMA-Factory/data路徑下的dataset_info.json,把自有數據集加入進去
在這里插入圖片描述

按照自己需求配置訓練參數,所有的參數都配置好之后,點一下“預覽命令”,確認命令沒有問題之后,就可以點擊“開始”進行訓練了。訓練的過程中可以看到 loss的變化曲線、訓練耗時等。

參考:https://blog.csdn.net/u012505617/article/details/137864437

驗證微調效果

可以直接點擊webui界面中的“chat”選項卡,然后點擊“加載模型”,然后就可以進行對話了,不過使用A100實測非常慢,一次會話花了四十多分鐘。

所以建議在webui 界面訓練好模型之后點擊“Export”選項卡,然后,在“模型路徑”中輸入原始模型路徑,然后在“檢查點路徑”中選擇自己微調得到的 checkpoint路徑,然后在“最大分塊大小(GB)”中設置為4,同時設置一下導出目錄,最后點擊“開始導出”,就可以看到輸出的模型了

本地部署模型,并做推理測試
參考:https://qwen.readthedocs.io/en/latest/run_locally/llama.cpp.html

這里使用的是vLLM
參考:https://qwen.readthedocs.io/en/latest/deployment/vllm.html

from transformers import AutoTokenizer
from vllm import LLM, SamplingParams# Initialize the tokenizer
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-7B-Instruct")# Pass the default decoding hyperparameters of Qwen2-7B-Instruct
# max_tokens is for the maximum length for generation.
sampling_params = SamplingParams(temperature=0.1, top_p=0.1, repetition_penalty=1.05, max_tokens=512) #這里想要推理的結果跟我們微調的預期嚴格一致,所以調低了前兩個參數的值。# Input the model name or path. Can be GPTQ or AWQ models.
llm = LLM(model="LLaMA-Factory/saves/Qwen2-7B-Chat/sft") #這里填寫前面Export時填寫的Path# Prepare your prompts
prompt = "這里輸入與微調數據集中類似的問題來驗證"
messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)# generate outputs
outputs = llm.generate([text], sampling_params)# Print the outputs.
for output in outputs:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

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

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

相關文章

極速構建的藝術:Kylin中Cube的并行構建實踐

極速構建的藝術:Kylin中Cube的并行構建實踐 引言 Apache Kylin是一款開源的分布式分析引擎,專為處理大規模數據集的即時查詢而設計。Kylin通過構建數據立方體(Cube)來優化查詢性能。隨著數據量的不斷增長,Cube的構建…

9.6 柵格圖層符號化唯一值著色渲染

文章目錄 前言多波段彩色渲染唯一值著色QGis設置為唯一值著色二次開發代碼實現唯一值著色 總結 前言 介紹柵格圖層數據渲染之唯一值著色渲染說明:文章中的示例代碼均來自開源項目qgis_cpp_api_apps 多波段彩色渲染唯一值著色 以“with_color_table.tif”數據為例…

硅谷甄選4(項目主體)

1.路由配置 1.1路由組件的雛形 src\views\home\index.vue(以home組件為例) 安裝插件: 1.2路由配置 1.2.1路由index文件 src\router\index.ts //通過vue-router插件實現模板路由配置 import { createRouter, createWebHashHistory } fro…

B站學習Java路線

Java 基礎 【零基礎 快速學Java】韓順平 零基礎30天學會Java JVM 尚硅谷宋紅康JVM全套教程(詳解java虛擬機) Java 并發 JUC

react-router實現路由攔截,useLocation,useNavigate鉤子

路由攔截 react-router中沒有直接給出攔截路由的方法,需要手動的去監聽路由的變化來攔截路由 路由攔截的要點: 能夠識別出目標路由和原始路由(區分跳轉前和跳轉后)能夠在跳轉時(跳轉前或者跳轉后)執行一些…

Python redis獲取的結果是字節不是字符串

Python redis獲取的結果是字節不是字符串 pool redis.ConnectionPool(hostlocalhost,port6379, passwordREDIS_PWD, decode_responsesTrue)需要指明給結果解碼decode_responsesTrue才能返回字符串

圖論基礎概念(詳細講解)

今天,我們講解一下圖論的概念,首先我們知道圖是一個什么東西。 圖你可以理解成一個網絡系統,兩個節點之間可能會有邊,邊鏈接兩個節點,可能是有向(就比如說a只能往b,或者b只能往c),可能是無向&a…

Vulnhub靶場 | DC系列 - DC1

https://www.vulnhub.com/series/dc,199/ 環境搭建 靶機鏡像下載地址:https://www.vulnhub.com/entry/dc-1,292/;需要將靶機和 kali 攻擊機放在同一個局域網里;本實驗kali 的 IP 地址:192.168.10.146。 滲透測試 1. 信息收集 …

CH16-DOM元素增刪改

CH16-DOM元素增刪改 本章目標 掌握如何使用DOM獲取節點時使用的屬性熟練使用DOM節點進行創建、添加、刪除、替換 一、使用DOM獲取節點時使用的屬性 1.1 首尾子節點 firstChild:獲取當前節點的首個子節點,注意:換行符、空格等也是節點。 …

【逆向】-異或-分組異或2

IDA查看源代碼 src長度32,encrypt函數加密,工4個參數,_FFFC雙擊,可以看到是個長度為7的固定值FnTest! 加密函數將4個參數又重新命名,混淆視聽,但是還是可以看到是嵌套循環,動態調試直接看結果可…

ArcGIS Pro SDK (八)地理數據庫 8 拓撲

ArcGIS Pro SDK (八)地理數據庫 8 拓撲 文章目錄 ArcGIS Pro SDK (八)地理數據庫 8 拓撲1 開放拓撲和進程定義2 獲取拓撲規則3 驗證拓撲4 獲取拓撲錯誤5 標記和不標記為錯誤6 探索拓撲圖7 找到最近的元素 環境:Visual …

C++11中重要的新特性之 lambda表達式 Part two

序言 在上一篇文章中,我們主要介紹了 C11 中的新增的關鍵詞,以及 范圍for循環 這類語法糖的使用和背后的邏輯。在這篇文章中我們會繼續介紹一個特別重要的新特性分別是 lambda表達式 。 1. lambda表達式 1.1 lambda的定義 C11 中的 lambda表達式 是一種…

昇思25天學習打卡營第19天 | ResNet50遷移學習再續

訓練模型部分代碼解析 構建Resnet50網絡 兩行初始化代碼 weight_init Normal(mean0, sigma0.02)這行代碼定義了一個初始化器weight_init,它將使用均值為0,標準差為0.02的正態分布來初始化網絡中的權重。這種初始化策略有助于在網絡的初始階段避免梯度…

Java基礎之集合

集合和數組的類比 數組: 長度固定可以存基本數據類型和引用數據類型 集合: 長度可變只能存引用數據類型存儲基本數據類型要把他轉化為對應的包裝類 ArrayList集合 ArrayList成員方法 添加元素 刪除元素 索引刪除 查詢 遍歷數組

day30【LeetCode力扣】18.四數之和

day30【LeetCode力扣】18.四數之和 1.題目描述 給你一個由 n 個整數組成的數組 nums ,和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] (若兩個四元組元素一一對應,則認為兩個…

Linux: Mysql環境安裝

Mysql環境安裝(Centos) 前言一、卸載多余環境1.1 卸載mariadb1.2 查看并卸載系統mysql和mariadb安裝包 二、換取mysql官方yum源三、安裝并啟動mysql服務3.1 yum源加載3.2 安裝yum源3.3 安裝mysql服務3.3.1 安裝指令3.3.2 GPG密鑰問題解決方法3.3.3 查看是…

循環結構(一)——for語句【互三互三】

文章目錄 🍁 引言 🍁 一、語句格式 🍁 二、語句執行過程 🍁 三、語句格式舉例 🍁四、例題 👉【例1】 🚀示例代碼: 👉【例2】 【方法1】 🚀示例代碼: 【方法2】…

【C++ 編程】引用 - 給變量起別名、淺復制

基本語法:數據類型 &別名 原名int a 10; int &b a;引用必須初始化 (? int &b;),初始化后不可改變 (int c 5; b c:b 沒有變成c的別名,而是 a、b 對應的值變更為了 c 的值)本質是指針常量, 淺復制 【黑馬程序員匠…

Cartographer重入門到精通(二):運行作者demo及自己的數據集

在demo數據包上運行cartographer 現在Cartographer和Cartographer的Ros包已經都安裝好了,你可以下載官方的數據集到指定的目錄(比如在Deutsches Museum用背包采集的2D和3D 數據),然后使用roslauch來啟動demo。 注:la…

IO半虛擬化-Virtio學習筆記

參考:《深入淺出DPDK》及大佬們的各種博客 Virtio簡介&運行環境 Virtio 是一種用于虛擬化環境中的半虛擬化 I/O 框架,目的是在虛擬機和主機之間提供一種高效的 I/O 機制。關于什么是半虛擬化和全虛擬化:見SR-IOV學習筆記。 YES&#xf…