采用LoRA方法微調llama3大語言模型

文章目錄

  • 前言
  • 一、Llama3模型簡介
    • 1.下載llama3源碼到linux服務器
    • 2.安裝依賴
    • 3.測試預訓練模型Meta-Llama-3-8B
    • 4.測試指令微調模型Meta-Llama3-8B-Instruct
    • 5.小結
  • 二、LoRA微調Llama3
    • 1.引入庫
    • 2.編寫配置文件
    • 3.LoRA訓練的產物
  • 三、測試新模型效果
    • 1.編寫配置文件
    • 2.運行配置文件:
  • 總結


前言

因為上篇文章點贊數超過1,所以今天繼續更新llama3微調方法。先介紹一下如何與本地llama3模型交互,再介紹如何使用torchtune和LoRA方式微調llama3,最后介紹一下如何用torchtune與llama3模型交互。


一、Llama3模型簡介

目前llama3開源的模型有Meta-Llama-3-8B、Meta-Llama-3-8B-Instruct、Meta-Llama-3-70B和Meta-Llama-3-70B-Instruct。這里Meta-Llama-3-8B是參數規模為80億的預訓練模型(pretrained model),Meta-Llama-3-8B-Instruct是80億參數經過指令微調的模型(instruct fine-tuned model);對應的,后兩個模型就是對應700億參數的預訓練和指令微調模型。那么,預訓練模型和指令微調模型有什么區別呢?我們來跟她們對話一下就明白了。

1.下載llama3源碼到linux服務器

git clone https://github.com/meta-llama/llama3.git

2.安裝依賴

最好先用anaconda創建一個專門為微調模型準備的python虛擬環境,然后運行命令:

cd llama3
pip install -e .

3.測試預訓練模型Meta-Llama-3-8B

torchrun --nproc_per_node 1 example_text_completion.py
–ckpt_dir Meta-Llama-3-8B/
–tokenizer_path Meta-Llama-3-8B/tokenizer.model
–max_seq_len 128 --max_batch_size 4

參數解釋:
–ckpt_dir 模型權重所在文件夾路徑,一般后綴為.pt、.pth或.safetensors
–tokenizer_path 分詞器路徑,必須帶上分詞器名稱,例如tokenizer.model
–max_seq_len 輸出的最大序列長度,這個在預訓練模型的調用中是必帶參數
–max_batch_size 每個批次包含的最大樣本數

下圖是模型的輸出結果,當我輸入英文"I believe the meaning of life is"時,模型會輸出"to love. It is to love others, to love ourselves, and to love God. Love is the meaning of life blablabla"。
llama3預訓練模型的輸出
很明顯,預訓練模型Meta-Llama3-8B是對用戶輸入的一個續寫。

4.測試指令微調模型Meta-Llama3-8B-Instruct

torchrun --nproc_per_node 1 example_chat_completion.py
–ckpt_dir /data/jack/Meta-Llama-3-8B-Instruct/original/
–tokenizer_path /data/jack/Meta-Llama-3-8B-Instruct/original/tokenizer.model
–max_seq_len 512 --max_batch_size 4
參數解釋:
–max_seq_len 輸出的最大序列長度,這個對指令微調模型是可選參數,不設置指令微調模型也會在問答中自動停止輸出
指令詞微調的模型問答
如上圖所示,Meta-Llama-3-8B-Instruct模型面對用戶的提問,會給出合適的回答。

5.小結

Meta-Llama-3-8B是針對用戶輸入的一個續寫,跟Transformer架構的模型在預訓練過程中的下一詞匯預測很相似;Meta-Llama-3-8B-Instruct是可以回答用戶提問的模型。因此,在選擇LoRA微調的基底模型時,大部分情況應當選擇指令詞微調模型。

二、LoRA微調Llama3

1.引入庫

在切換到anaconda或venv的python環境后:

pip install torchtune

2.編寫配置文件

如果下載了torchtune倉庫的源碼,可以從中拷貝出對應的recipe文件,文件夾的相對路徑為:
torchtune\recipes\configs\llama3

# Model Arguments
model:_component_: torchtune.models.llama3.lora_llama3_8blora_attn_modules: ['q_proj', 'v_proj']apply_lora_to_mlp: Falseapply_lora_to_output: Falselora_rank: 8lora_alpha: 16# Tokenizer
tokenizer:_component_: torchtune.models.llama3.llama3_tokenizerpath: /data/jack/Meta-Llama-3-8B-Instruct/original/tokenizer.modelcheckpointer:_component_: torchtune.utils.FullModelMetaCheckpointercheckpoint_dir: /data/jack/Meta-Llama-3-8B-Instruct/original/checkpoint_files: [consolidated.00.pth]recipe_checkpoint: nulloutput_dir: /data/jack/Meta-Llama-3-8B-Instruct/model_type: LLAMA3
resume_from_checkpoint: False# Dataset and Sampler
dataset:_component_: torchtune.datasets.alpaca_cleaned_datasettrain_on_input: True
seed: null
shuffle: True
batch_size: 2# Optimizer and Scheduler
optimizer:_component_: torch.optim.AdamWweight_decay: 0.01lr: 3e-4
lr_scheduler:_component_: torchtune.modules.get_cosine_schedule_with_warmupnum_warmup_steps: 100loss:_component_: torch.nn.CrossEntropyLoss# Training
epochs: 1
max_steps_per_epoch: null
gradient_accumulation_steps: 64
compile: False# Logging
output_dir: /data/jack/torchtune_test/lora_finetune_output
metric_logger:_component_: torchtune.utils.metric_logging.DiskLoggerlog_dir: ${output_dir}
log_every_n_steps: 1
log_peak_memory_stats: False# Environment
device: cuda
dtype: bf16
enable_activation_checkpointing: True# Profiler (disabled)
profiler:_component_: torchtune.utils.profilerenabled: False

這里解釋一下各個參數:
tokenizer下的path 這個一定要填寫你下載的基底模型的分詞器路徑
checkpointer下的checkpoint_dir 填寫你要微調的基底模型的存放文件夾路徑
checkpointer下的checkpoint_files 基底模型文件名(一個或多個)
dataset下的_component_ 填寫現有的或自定義的數據集類名
loss下的_component_ 填寫訓練過程中的損失函數,默認是交叉熵損失
epochs(發音:一剖克斯) 訓練輪次,可以先設置為1試一下

下命令進行微調:

tune run lora_finetune_single_device --config ./8B_lora_single_device_custom.yaml

3.LoRA訓練的產物

結束訓練后,在輸出文件夾中會產出一個合并了lora和基底模型權重的新模型meta_model_0.pt,也會產出一個獨立的lora權重文件adapter_0.pt。

三、測試新模型效果

1.編寫配置文件

# Model arguments
model:_component_: torchtune.models.llama3.llama3_8bcheckpointer:_component_: torchtune.utils.FullModelMetaCheckpointercheckpoint_dir: /data/feipan3/Meta-Llama-3-8B-Instruct/checkpoint_files: [meta_model_0.pt]output_dir: /data/feipan3/Meta-Llama-3-8B-Instruct/model_type: LLAMA3device: cuda
dtype: bf16seed: 5678# Tokenizer arguments
tokenizer:_component_: torchtune.models.llama3.llama3_tokenizerpath: /data/feipan3/Meta-Llama-3-8B-Instruct/original/tokenizer.model# Generation arguments; defaults taken from gpt-fast
prompt: "Give three tips for staying healthy."
max_new_tokens: 512
temperature: 0.6 # 0.8 and 0.6 are popular values to try
top_k: 300quantizer: null

2.運行配置文件:

tune run generate --config generation_custom.yaml
我的問題是“給出保持健康的三條建議”,得到輸出結果:
微調后的問答效果


總結

本文主要介紹了如何用torchtune工具微調Llama3,詳細介紹了如何設置配方文件,如何運行以及最后如何進行效果驗證。本文點贊超過2個,下一期繼續更新如何準備微調數據集。

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

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

相關文章

QT教程-一,初識QT

目錄 一,QT是什么?能夠使用它做什么? 二,Qt 能夠使用的語言 三,Qt主要用于什么領域? 四,Qt開發的軟件 一,QT是什么?能夠使用它做什么? Qt是一個跨平臺的 C 開發庫,主…

全球最高點贊記錄,世界點贊第一名是誰?世界點贊第一人名字的由來

世界點贊第一人名字的由來: 起源與概念提出: 二十一世紀東方偉大的思想家哲學家教育家顏廷利教授,一位在中國21世紀早期便以其非凡才華和創新精神著稱的學者,早在互聯網尚未普及的20世紀90年代,就已經提出了“點贊”的…

算法提高之最大數

算法提高之最大數 核心思想&#xff1a;線段樹 添加數 看作原本的數組有數(0) 現在將他修改成另一個值 詢問后l個數的最大值query函數具體實現 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 200010;typed…

python爬蟲登錄到海康相機管理頁面

簡述 1.最近接到個任務是在管理頁面更改相機的某個參數&#xff0c;下載官方的sdk貌似沒有提供這個接口&#xff0c;所以只能自己寫爬蟲登錄發請求了。 1.主要步驟 1.1 發送get請求獲取到salt&#xff0c;sessionID&#xff0c;challenge等信息 http://admin:123456192.168.…

交叉熵損失函數計算過程(tensorflow)

交叉熵損失函數通常用于多類分類損失函數計算。計算公式如下&#xff1a; P為真實值&#xff0c;Q為預測值。 使用tensorflow計算 import tensorflow as tf import keras# 創建一個示例數據集 # 假設有3個樣本&#xff0c;每個樣本有4個特征&#xff0c;共2個類別 # 目標標簽…

Spark Client 配置

前言 記錄Spark Client 配置,這里的 Spark Client 和 HDFS、YARN 不在一個節點,只是一個單節點的 Spark Client,需要能連接其他節點的大數據集群的 Hive 和 能提交到Yarn 。 環境信息 大數據節點(已配置好Spark): 192.168.44.154 192.168.44.155 192.168.44.156 客戶端…

P2P 技術:點對點網絡的興起

目錄 概述 P2P 的興起 P2P 的定義和特征 定義 特征 P2P 的發展 早期發展 快速成長 成熟應用 P2P 的關鍵技術 P2P 的應用 總結 概述 P2P&#xff08;Peer-to-Peer&#xff09;&#xff0c;即點對點網絡&#xff0c;是一種去中心化的網絡架構&#xff0c;它允許網絡中…

2024最新私有化部署AI大模型,讓每個人都有屬于自己的AI助理

讓每個人都擁有一個屬于自己的本地大模型 下載Ollama 下載地址 ? https://ollama.com/download ? Ollama支持MacOS、Linux、Windows 解壓 下載完成后&#xff0c;會得到一個Ollama-darwin.zip文件&#xff0c;解壓后&#xff0c;以Mac為例是一個可運行文件&#xff1a;O…

Jupyter 使用手冊: 探索交互式計算的無限可能

什么是 Jupyter? Jupyter 是一個開源的 Web 應用程序,可用于創建和共享包含實時代碼、可視化和敘述性文本的文檔。它最初是作為 IPython 項目的一部分開發的,后來發展成為支持多種編程語言的交互式計算環境。 應用場景 作為一個開源的交互式計算環境,Jupyter 在以下幾個領域…

AI應用案例:服務器智能分析管理系統

服務器硬件配置、性能狀態、所運行的應用系統等信息分散于多個不同的信息管理系統。人為查詢判斷現有的服務器資源是否滿足用戶需求&#xff0c;且需結合資產管理系統與Maximo基礎資源、性能監控、運維管理等各個系統互不關聯&#xff0c;數據分散不能為運維管理提供完整一致的…

在Spring 當中存在的八大模式

在Spring 當中存在的八大模式 文章目錄 在Spring 當中存在的八大模式每博一文案1. 簡單工廠模式2. 工廠方法模式3. 單例模式4. 代理模式5. 裝飾器模式6. 觀察者模式7. 策略模式8. 模板方法模式最后&#xff1a; 每博一文案 我認為 “知世故而不世故” 才是真正意義上的成熟。回…

Micrometer中0.5 0.9 0.99三個百分位數詳解

Micrometer的Timer類中的publishPercentiles方法使用0.5, 0.95, 0.99這三個百分位數&#xff0c;是因為它們在性能監控和SLA&#xff08;Service Level Agreement&#xff0c;服務等級協議&#xff09;指標測量中具有特定的意義和普遍應用。 在系統性能監控領域&#xff0c;這…

【PPT密碼】PPT文件的兩種不可編輯情況

不知道大家有沒有遇到過&#xff0c;PPT文件無法編輯的情況&#xff0c;今天小編分享兩種ppt文件不可編輯的原因以及解決方法。 情況一 如果打開ppt文件之后&#xff0c;發現幻燈片某些地方或者每張幻燈片同一個地方&#xff0c;無法編輯&#xff0c;這可能是因為PPT中設置了…

Scala學習筆記6: 類

目錄 第六章 類1- 簡單類和無參方法2- 帶有getter和setter的屬性3- 只帶getter的屬性4- 對象私有化5- 輔助構造器6- 主構造器7- 嵌套類end 第六章 類 在Scala中, 類用于創建對象的藍圖; 類可以包含方法、值、變量、類型、對象和特質等成員; 類名應該以大寫字母開頭, 可以包含…

ISCC 2024 部分wp

文章目錄 一、Misc1、Number_is_the_key2、FunZip3、擂臺—— 重“隱”&#xff1b;4、RSA_KU5、時間刺客6、成語學習7、 精裝四合一8、鋼鐵俠在解密9、有人讓我給你帶個話10、Magic_Keyboard11、工業互聯網模擬仿真數據分析 二、Web1、還沒想好名字的塔防游戲2、代碼審計3、原…

又一個換臉工具-swapface

網址 https://www.swapface.org/ 看官網支持windows和mac m1,我下載了但是我沒安裝&#xff0c;因為我的硬盤真的遭不住了。 可以去別的地方搜搜介紹&#xff0c;聽說使用挺簡單的。 但是我感覺還是rope比較好&#xff0c;其實rope已經很快了&#xff0c;就是沒有gpu有點坑…

Python數據分析實驗四:數據分析綜合應用開發

目錄 一、實驗目的與要求二、主要實驗過程1、加載數據集2、數據預處理3、劃分數據集4、創建模型估計器5、模型擬合6、模型性能評估 三、主要程序清單和運行結果四、實驗體會 一、實驗目的與要求 1、目的&#xff1a; 綜合運用所學知識&#xff0c;選取有實際背景的應用問題進行…

【Python】【Scrapy 爬蟲】理解HTML和XPath

為了從網頁中抽取信息&#xff0c;必須對其結構有更多了解。我們快速瀏覽HTML、HTML的樹狀表示&#xff0c;以及在網頁上選取信息的一種方式XPath。 HTML、DOM樹表示以及XPath 互聯網是如何工作的&#xff1f; 當兩臺電腦需要通信的時候&#xff0c;你必須要連接他們&#xff…

Android Studio實現MQTT協議的連接

1添加依賴 在項目中找到下圖文件 打開文件 如下 plugins {alias(libs.plugins.android.application) }android {namespace "com.example.mqtt_04"compileSdk 34defaultConfig {applicationId "com.example.mqtt_04"minSdk 27targetSdk 34versionCo…

樹的層序遍歷,平衡二叉樹,以及反轉二叉樹

一、樹的層序遍歷 層序遍歷的實現&#xff1a; 1.依賴于隊列的數據結構 2.核心怎么實現&#xff1a; 1&#xff09;創建一個隊列的容器對象。 2&#xff09;判斷根節點是否為空&#xff0c;不為空則添加根節點到隊列中。 3&#xff09;遍歷是一個循環性的工作&#xff0c;寫…