使用LLaMA-Factory對大模型進行微調

之前了解過一些LLM從訓練到落地的過程;
其中一個重要的步驟就是微調;

預訓練:在大規模數據上學習通用語言知識。(使用海量無標注文本(TB級))
微調:在預訓練基礎上,使用特定任務的標注數據進一步優化模型。(使用少量任務標注數據(KB-MB級))
預訓練是“培養通才”,微調是“打造專才”

全量微調, 成本太高, 個人搞不了,一般企業也搞不了, 所以現在開始學習高效參數微調PEFT(Parameter-Efficient Fine Tuning)

核心思想:凍結大部分預訓練參數,只訓練少量新增參數。
優勢:顯存占用低、訓練速度快、避免遺忘

通常大模型部署在服務器上,代碼在我們自己的電腦上編寫
核心思路就是
本地:負責編寫代碼、準備數據、發起微調任務、監控訓練過程。
服務器:負責實際的模型加載、計算和參數更新(利用 GPU 資源)

其實就是本地寫代碼,然后把代碼在服務器上運行
我這邊采用的方式是VS Code 遠程開發
安裝 VS Code 插件:Remote-SSH 參考: https://blog.csdn.net/xy3233/article/details/149528434

現在開始微調一個大模型,
參考: https://www.lixueduan.com/posts/ai/05-finetune-llamafactory/
先跟著別人一步一步做
我們先下載一個小模型 Qwen1.5-1.8B-Chat

modelscope download --model Qwen/Qwen1.5-1.8B-Chat  --local_dir /opt/vllm/models/Qwen1.5-1.8B-Chat

然后啟動模型(注意python虛擬環境)

vllm serve /opt/vllm/models/Qwen1.5-1.8B-Chat \
--max-model-len 8192  \
--gpu-memory-utilization 0.70  \
--host 0.0.0.0  \
--port 8081  \
--served-model-name Qwen1.5-1.8B-Chat

gpu小的話 就調整 gpu-memory-utilization 0.70 不然顯存不夠
啟動完畢
在這里插入圖片描述
測試:
http://localhost:8081/v1/chat/completions

{"model": "Qwen1.5-1.8B-Chat","messages": [{"role": "system","conten": "You are a helpful assistant."},{"role": "user","content": [{"type": "text","text": "你是誰"}]}]
}  

回復:

{"id": "chatcmpl-1fdd8d7a1e134a0ea2938520a983d58e","object": "chat.completion","created": 1753168788,"model": "Qwen1.5-1.8B-Chat","choices": [{"index": 0,"message": {"role": "assistant","reasoning_content": null,"content": "我是來自阿里云的大規模語言模型,我叫通義千問。我是阿里巴巴集團研發的超大規模語言模型,是全球首個預訓練語言模型,擁有超過1750萬參數,能夠理解和生成高質量的語言文本。\n\n我可以回答各種問題,無論是科技、文化、生活、娛樂還是專業知識領域的問題,都能提供準確和流暢的回答。我能處理大量數據,具有強大的語義理解、自然語言生成、問答系統、知識圖譜構建等能力,能夠根據上下文進行推理和思考,幫助用戶獲取所需的信息和知識,實現人機交互的智能化。\n\n此外,我還支持多種應用場景,例如智能客服、智能寫作、智能翻譯、自動摘要、推薦系統、智能問答系統等,并且可以通過接口與多個外部應用系統集成,形成更復雜的多模態對話系統。\n\n作為一款預訓練語言模型,我通過不斷的學習和優化,持續提升自己的性能和效果,同時也為人工智能領域的研究和發展做出了重要貢獻。無論是在技術上,還是在實際場景的應用中,我都希望能夠成為您高效解決問題、獲取信息、交流溝通的重要工具,共同推動人工智能的進步和發展。","tool_calls": []},"logprobs": null,"finish_reason": "stop","stop_reason": null}],"usage": {"prompt_tokens": 15,"total_tokens": 251,"completion_tokens": 236,"prompt_tokens_details": null},"prompt_logprobs": null,"kv_transfer_params": null
}

目標: 修改模型自我認知, 當詢問: 它是誰 要回復它是: 它是賈維斯,由鋼鐵俠制造;

下面使用 LLaMAFactory 演示如何進行 LoRA 微調。
LLaMAFactory簡介:

LLaMA Factory 是一個大模型微調與部署工具包
兼容主流開源模型,如 LLaMA 系列、Qwen 系列、Mistral、Baichuan、ChatGLM、Yi 等,支持多種微調方法
全參數微調:更新模型所有參數,適合資源充足的場景。
參數高效微調:包括 LoRA、QLoRA、IA3、Prefix-Tuning 等,僅更新少量參數,大幅降低顯存需求。
指令微調:針對對話、問答等任務優化模型響應,支持多輪對話格式。評估與部署一體化
提供自動評估工具,支持困惑度(Perplexity)、人工評分等指標。
集成部署功能,可直接導出為 Hugging Face 格式、ONNX 格式,
或通過 vllm、FastAPI 快速部署為 API 服務。

環境隔離

創建一個虛擬環境python3 -m venv LLaMA-env
激活  source /opt/vllm/env/LLaMA-env/bin/activate
退出 deactivate

前置條件
安裝 torch,torchvision,transformers 這幾個的版本;
直接到 https://github.com/hiyouga/LLaMA-Factory.git 看一下推薦版本;
然后根據cuda的版本 來確定 torch的版本
我這里使用的是 torch 2.6.0+cu118, torchvision 0.21.0+cu118;
然后安裝 transformers==4.50.0

①安裝 LLaMAFactory 和所需依賴

git clone  https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -r  requirements.txt
pip install -e .

LLaMA-Factory 校驗
使用 llamafactory-cli version 快速校驗安裝是否成功
在這里插入圖片描述
在這里插入圖片描述

  1. 準備數據集
    準備數據集可以分為兩個步驟:
    1)準備數據集文件,json 格式,存放到 data 目錄下
    2)注冊數據集,將 json 文件注冊到 data 目錄下的 dataset_info.json 文件
    LLaMA-Factory 內置了一些數據集,本次就使用內置的 identity 數據集(在data文件夾下),用于修改模型的自我意識。

將identity.json 復制一份, 命名 identity2.json,
對{{name}} 和{{author}} 進行全局替換。 這樣數據就準備好了

注冊數據集: 在data文件夾中找dataset_info.json,把內容改成 (只放這一個)

{"identity": {"file_name": "identity2.json"}
}

key 為數據集名稱,比如這里的 identity
value 為數據集配置,只有文件名 file_name 為必填的,比如這里的 identity2.json

modelPath=/opt/vllm/models/Qwen1.5-1.8B-Chatllamafactory-cli train \--model_name_or_path $modelPath \--stage sft \--do_train \--finetuning_type lora \--template qwen \--dataset identity \--output_dir ./saves/lora/sft \--learning_rate 0.0005 \--num_train_epochs 8 \--cutoff_len 4096 \--logging_steps 1 \--warmup_ratio 0.1 \--weight_decay 0.1 \--gradient_accumulation_steps 8 \--save_total_limit 1 \--save_steps 256 \--seed 42 \--data_seed 42 \--lr_scheduler_type cosine \--overwrite_cache \--preprocessing_num_workers 16 \--plot_loss \--overwrite_output_dir \--per_device_train_batch_size 1 \--fp16

執行完之后是這樣的
在這里插入圖片描述
根據前面的指令 微調后的模型保存到了我們指定的 ./saves/lora/sft 目錄
只是權重文件比較小,只有 29M。(這個執行不起來,我試了 也許是錯了)
在這里插入圖片描述
權重合并
使用的 LoRA 微調,會生成單獨的 LoRA 權重,當微調完成后需要將原始模型和 LoRA 權重進行合并,得到一個新的模型。

# 原始模型
modelPath=/opt/vllm/models/Qwen1.5-1.8B-Chat
# 上一步微調得到的 LoRA 權重
adapterModelPath=./saves/lora/sft/llamafactory-cli export \--model_name_or_path $modelPath \--adapter_name_or_path $adapterModelPath \--template qwen \--finetuning_type lora \--export_dir /opt/vllm/models/Qwen1.5-1.8B-Chat-2 \--export_size 2 \--export_device cpu \--export_legacy_format False

結果是這樣的
在這里插入圖片描述

合并完之后
重新啟動測試

vllm serve /opt/vllm/models/Qwen1.5-1.8B-Chat-2 \
--max-model-len 8192  \
--gpu-memory-utilization 0.70  \
--host 0.0.0.0  \
--port 8081  \
--served-model-name Qwen1.5-1.8B-Chat

測試結果
在這里插入圖片描述

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

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

相關文章

WxPython——一些最常見的錯誤現象及解決方法

一些最常見的錯誤現象及解決方法 有一些錯誤它們可能會發生在你的wxPython應用程序對象或初始的頂級窗口在創建時,這些錯誤可能是很難診斷的。下面我們列出一些最常見的錯誤現象及解決方法: 錯誤現象:程序啟動時提示“unable to import modul…

SparkSQL 子查詢 IN/NOT IN 對 NULL 值的處理

SparkSQL 子查詢 IN/NOT IN 對 NULL 值的處理 官網:https://spark.apache.org/docs/4.0.0/sql-ref-functions.html https://spark.apache.org/docs/4.0.0/sql-ref-null-semantics.html#innot-in-subquery Unlike the EXISTS expression, IN expression can return…

【安卓筆記】lifecycle與viewModel

0. 環境: 電腦:Windows10 Android Studio: 2024.3.2 編程語言: Java Gradle version:8.11.1 Compile Sdk Version:35 Java 版本:Java11 1. 本篇文章涉及到的內容 lifecycle livedata databinding viewModel 2. …

84、逆向工程開發方法

逆向工程開發方法是一種通過分析現有產品、系統或代碼來理解其設計原理、功能實現及潛在缺陷,并在此基礎上進行改進、復制或創新的技術過程。它廣泛應用于軟件、硬件、機械、電子等多個領域,尤其在缺乏原始設計文檔或需要快速掌握復雜系統時具有顯著優勢…

ospf單區域實驗

拓撲圖:AR1:[Huawei]ospf 1 router-id 1.1.1.1 [Huawei-ospf-1]area 0[Huawei-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255(1.當前網段會被ospf的進程1學習到然后通告出去;2.如果接口的IP地址處于這個網段中&#xff0c…

Linux命令基礎完結篇

用戶權限修改 chmod修改文件權限 文字設定法 u:所有者g:所屬組o:其他人a:所有:添加權限-:刪除權限:賦予權限數字設定法 r:4w:2x:1每一組權限:0~7舉…

高效互聯,ModbusTCP轉EtherCAT網關賦能新能源電纜智能制造

在新能源汽車快速發展的背景下,新能源電纜作為關鍵組件,需滿足耐高低溫、阻燃、耐老化等嚴苛要求,這對生產線的工藝與設備提出了更高標準。為提升制造效率,某領先設備制造商創新采用**ModbusTCP轉EtherCAT網關**技術,實…

Java_多線程_生產者消費者模型_互斥鎖,阻塞隊列

生產者消費者模型(Producer-Consumer Model)是計算機科學中一個經典的并發編程模型,用于解決多線程/多進程環境下的協作問題。 基本概念 生產者:負責生成數據或任務的實體 消費者:負責處理數據或執行任務的實體 緩沖區:生產者與消…

Vue3實現視頻播放彈窗組件,支持全屏播放,音量控制,進度條自定義樣式,適配瀏覽器小窗播放,視頻大小自適配,緩沖loading,代碼復制即用

效果圖組件所需VUE3代碼<template><div class"video-dialog" :class"fullScreen && video-dialog-full-screen"><el-dialogv-model"props.visible"draggable:show-close"false"title""centeralign-c…

LLM層歸一化:γβ與均值方差的協同奧秘

LLM層歸一化參數均值和方差;縮放和平移參數是什么 層歸一化(Layer Normalization,LN)是深度學習中用于穩定神經網絡訓練的一種歸一化技術 均值和方差參數用于對輸入數據進行標準化處理,即將輸入數據轉換為均值為0、方差為1的標準正態分布 縮放因子γ\gammaγ:標準化后…

智慧場景:定制開發開源AI智能名片S2B2C商城小程序賦能零售新體驗

摘要&#xff1a;智慧場景作為零售行業創新發展的關鍵載體&#xff0c;正深刻改變著消費者的生活方式。本文聚焦智慧零售模式下智慧場景的構建&#xff0c;以定制開發開源AI智能名片S2B2C商城小程序為切入點&#xff0c;深入探討其在零售企業選址布局、商業模式創新、經營理念轉…

QML WorkerScript

WorkerScript是QML中實現多線程編程的關鍵組件&#xff0c;它允許開發者將耗時操作移至后臺線程執行&#xff0c;避免阻塞主UI線程&#xff0c;從而提升應用響應速度和用戶體驗。本文將全面介紹WorkerScript的核心機制、使用方法和最佳實踐。WorkerScript核心機制WorkerScript通…

銳浪報表 Grid++Report 表頭表尾的隱藏

設計銳浪表格的模板時&#xff0c;可以通過設計多個表頭、表尾&#xff0c;表頭、表尾中放入打印控件&#xff0c;可以打印相關的數據。在真實打印時&#xff0c;可以通過打印時讓表頭、表尾隱藏或顯示&#xff0c;實現用戶的表格樣式。一、表頭的指定1、 表頭可以多個&#xf…

低速信號設計之 QSPI 篇

一、引言? 在服務器技術不斷演進的當下,對高效、穩定的數據存儲和傳輸需求日益增長。QSPI(Quad Serial Peripheral Interface)總線作為一種高速、串行的外圍設備接口,在服務器領域中發揮著關鍵作用。它為服務器中的各類存儲設備及部分外圍芯片與主處理器之間提供了快速可…

別只知道暴力循環!我從用戶名校驗功能中領悟到的高效字符集判斷法(1684. 統計一致字符串的數目)

別只知道暴力循環&#xff01;我從用戶名校驗功能中領悟到的高效字符集判斷法 &#x1f60e; 大家好&#xff0c;日常開發中&#xff0c;我們經常會遇到一些看似不起眼&#xff0c;卻能成為性能瓶頸的小模塊。今天&#xff0c;我想和大家分享一個我親身經歷的故事&#xff0c;…

力扣面試150題--在排序數組中查找元素的第一個和最后一個位置

Day 85 題目描述思路 當 nums[mid] < target 時&#xff0c;說明目標值在右側&#xff0c;移動左指針 left mid 1 當 nums[mid] > target 時&#xff0c;說明目標值可能在當前位置或左側&#xff0c;移動右指針 right mid - 1 循環結束后&#xff0c;left 指針會指向第…

C++實戰:人臉識別7大核心實例

計算機視覺實例應用 基于C++的人臉識別實例 以下是一些基于C++的人臉識別實例的示例和實現方法,涵蓋了多種技術和庫的應用。這些例子可以幫助開發者快速上手并實現人臉識別功能。 OpenCV 基礎人臉檢測 使用OpenCV的預訓練模型進行人臉檢測是入門級示例。OpenCV自帶Haar級聯…

Uniapp中使用vue3語法

在setup語法糖中調用uniapp的頁面生命周期 <script setup>import { onShow } from "dcloudio/uni-app"onShow(() > {//hanlder...}) </script>vue2混入在vue3中建議使用組合式API 新建baseHook.js import { ref } from "vue"; export fu…

C++vector(2)

2.vector深度剖析及模擬實現 2.1std::vector的核心框架接口的模擬實現bit::vector vector的模擬實現 2.2 使用memcpy拷貝問題 假設模擬實現的vector中的reserve接口中&#xff0c;使用memcpy進行的拷貝&#xff0c;以下代碼會發生什么問題&#xff1f; int main() {gxl::ve…

IPSec VPN -- 野蠻模式

一、野蠻模式簡介野蠻模式VPN是指IPsec VPN中IKE協商采用野蠻模式&#xff08;Aggressive Mode&#xff09;的虛擬專用網絡。它是IKE第一階段協商的一種方式&#xff0c;與主模式相對&#xff0c;具有協商速度快但安全性稍低的特點。以下是具體介紹&#xff1a;1、工作原理&…