Llama 3超級課堂作業筆記

文章目錄

  • 基礎作業
    • 完成 Llama 3 Web Demo 部署
      • 環境配置
      • 下載模型
      • Web Demo 部署
      • 對話截圖
    • 使用 XTuner 完成小助手認知微調
      • Web Demo 部署
      • 自我認知訓練數據集準備
      • 訓練模型
      • 推理驗證
    • 使用 LMDeploy 成功部署 Llama 3 模型
      • 環境,模型準備
      • LMDeploy CLI chat
      • LMDeploy模型量化(lite)
        • 1. 設置最大KV Cache緩存大小
        • 2. 使用W4A16量化
      • LMDeploy服務(serve)
        • 1. 啟動API服務器
        • 2. 命令行客戶端連接API服務器
        • 3. 網頁客戶端連接API服務器
  • 進階作業
    • 多模態 Llava 微調和部署
    • Llama3 工具調用能力訓練

Github 文檔:https://github.com/SmartFlowAI/Llama3-Tutorial
B站視頻:https://www.bilibili.com/video/BV1Kr421u71u/


基礎作業

完成 Llama 3 Web Demo 部署

環境配置

注意,這里用的是12.1的CUDA版本,在新建開發機時不要選錯了。

conda create -n llama3 python=3.10
conda activate llama3
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

在這里插入圖片描述

下載模型

軟鏈接 InternStudio 中的模型

mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct

在這里插入圖片描述

Web Demo 部署

cd ~
git clone https://github.com/SmartFlowAI/Llama3-Tutorial

安裝 XTuner 時會自動安裝其他依賴

cd ~
git clone -b v0.1.18 https://github.com/InternLM/XTuner
cd XTuner
pip install -e .

在這里插入圖片描述
添加端口映射
在這里插入圖片描述

運行 web_demo.py

streamlit run ~/Llama3-Tutorial/tools/internstudio_web_demo.py \~/model/Meta-Llama-3-8B-Instruct

點擊這里進入網頁。
在這里插入圖片描述

對話截圖

在這里插入圖片描述

使用 XTuner 完成小助手認知微調

Web Demo 部署

同作業一

自我認知訓練數據集準備

進入 tools/gdata.py 腳本,修改身份認知

import json# 輸入你的名字
name = '貓貓卷'
# 重復次數
n = 2000data = [{"conversation": [{"system":"你是一個懂中文的小助手","input": "你是(請用中文回答)","output": "您好,我是{},一個由 SmartFlowAI 打造的人工智能助手,請問有什么可以幫助您的嗎?".format(name)}]}
]for i in range(n):data.append(data[0])with open('data/personal_assistant.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)
cd ~/Llama3-Tutorial
python tools/gdata.py 

在這里插入圖片描述
以上腳本在生成了 ~/Llama3-Tutorial/data/personal_assistant.json 數據文件格式如下所示:

[{"conversation": [{"system": "你是一個懂中文的小助手","input": "你是(請用中文回答)","output": "您好,我是貓貓卷,一個由 SmartFlowAI 打造的人工智能助手,請問有什么可以幫助您的嗎?"}]}
]

訓練模型

cd ~/Llama3-Tutorial# 開始訓練,使用 deepspeed 加速,A100 40G顯存 耗時24分鐘。
# train之后包含了兩個路徑,一個是訓練的config,一個是訓練的工作路徑。工作路徑將保存我們的微調權重。
xtuner train configs/assistant/llama3_8b_instruct_qlora_assistant.py --work-dir /root/llama3_pth# Adapter PTH 轉 HF 格式
xtuner convert pth_to_hf /root/llama3_pth/llama3_8b_instruct_qlora_assistant.py \/root/llama3_pth/iter_500.pth \/root/llama3_hf_adapter# 模型合并
# 由三個路徑組成,分別是原始的llama3權重路徑,剛剛轉換好的huggingface的adapter路徑,以及最后合并完成后的路徑
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge /root/model/Meta-Llama-3-8B-Instruct \/root/llama3_hf_adapter\/root/llama3_hf_merged

訓練時的顯存占用情況:
在這里插入圖片描述
訓練時命令行輸出:
在這里插入圖片描述
模型權重轉化:
在這里插入圖片描述
合并模型權重:
在這里插入圖片描述

最終權重保存在/root/llama3_hf_merged

推理驗證

streamlit run ~/Llama3-Tutorial/tools/internstudio_web_demo.py \/root/llama3_hf_merged

在這里插入圖片描述
在這里插入圖片描述

使用 LMDeploy 成功部署 Llama 3 模型

環境,模型準備

# 如果你是InternStudio 可以直接使用
# studio-conda -t lmdeploy -o pytorch-2.1.2
# 初始化環境
conda create -n lmdeploy python=3.10
conda activate lmdeploy
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

安裝lmdeploy最新版。

pip install -U lmdeploy[all]

llama3下載:(在作業一中已經軟鏈接過了)

LMDeploy CLI chat

直接在終端運行

conda activate lmdeploy
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct

在這里插入圖片描述
運行效果:
在這里插入圖片描述
在這里插入圖片描述

LMDeploy模型量化(lite)

對模型進行量化。主要包括 KV8量化和W4A16量化。

1. 設置最大KV Cache緩存大小

模型在運行時,占用的顯存可大致分為三部分:模型參數本身占用的顯存、KV Cache占用的顯存,以及中間運算結果占用的顯存。LMDeploy的KV Cache管理器可以通過設置--cache-max-entry-count參數,控制KV緩存占用剩余顯存的最大比例。默認的比例為0.8。

下面通過幾個例子,來看一下調整--cache-max-entry-count參數的效果。首先保持不加該參數(默認0.8),運行 Llama3-8b 模型。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/

對話效果:
在這里插入圖片描述

新建一個終端運行

# 如果你是InternStudio 就使用
# studio-smi
nvidia-smi 

在使用chat進行對話時的顯存占用為36240MiB

在這里插入圖片描述
下面,改變–cache-max-entry-count參數,設為0.5。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5

對話效果:
在這里插入圖片描述
在這里插入圖片描述

看到顯存占用明顯降低,變為28680MiB。

把–cache-max-entry-count參數設置為0.01,約等于禁止KV Cache占用顯存。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.01

對話效果:在這里插入圖片描述

可以看到,此時顯存占用僅為16400M,代價是會降低模型推理速度。
在這里插入圖片描述

2. 使用W4A16量化

僅需執行一條命令,就可以完成模型量化工作。

lmdeploy lite auto_awq \/root/model/Meta-Llama-3-8B-Instruct \--calib-dataset 'ptb' \--calib-samples 128 \--calib-seqlen 1024 \--w-bits 4 \--w-group-size 128 \--work-dir /root/model/Meta-Llama-3-8B-Instruct_4bit

運行時間較長,需要耐心等待。量化工作結束后,新的HF模型被保存到Meta-Llama-3-8B-Instruct_4bit目錄。下面使用Chat功能運行W4A16量化后的模型。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq

在這里插入圖片描述

在這里插入圖片描述
顯存占用為34294MiB。

為了更加明顯體會到W4A16的作用,我們將KV Cache比例再次調為0.01,查看顯存占用情況。(W4A16量化+KV Cache量化)

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq --cache-max-entry-count 0.01

在這里插入圖片描述

在這里插入圖片描述
顯存占用為6738MiB。

LMDeploy服務(serve)

在前面的章節,我們都是在本地直接推理大模型,這種方式成為本地部署。在生產環境下,我們有時會將大模型封裝為 API 接口服務,供客戶端訪問。

1. 啟動API服務器

通過以下命令啟動API服務器,推理Meta-Llama-3-8B-Instruct模型:

lmdeploy serve api_server \/root/model/Meta-Llama-3-8B-Instruct \--model-format hf \--quant-policy 0 \--server-name 0.0.0.0 \--server-port 23333 \--tp 1

在這里插入圖片描述
其中,model-format、quant-policy這些參數是與第三章中量化推理模型一致的;server-name和server-port表示API服務器的服務IP與服務端口;tp參數表示并行數量(GPU數量)。 通過運行以上指令,我們成功啟動了API服務器,請勿關閉該窗口,后面我們要新建客戶端連接該服務。 也可以直接打開http://{host}:23333查看接口的具體使用說明,如下圖所示。

在這里插入圖片描述
這代表API接口啟動成功了。

這一步由于Server在遠程服務器上,所以本地需要做一下ssh轉發才能直接訪問。在你本地打開一個cmd窗口,輸入命令如下:

<intern-studio的開發機端口號>```打開`127.0.0.1:23333`
![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/65fef3dd6cf0445e88dcd06798f3c83d.png)
2. 命令行客戶端連接API服務器

在“1.”中,我們在終端里新開了一個API服務器。 本節中,我們要新建一個命令行客戶端去連接API服務器。首先通過VS Code新建一個終端:
激活conda環境

conda activate lmdeploy

運行命令行客戶端:

lmdeploy serve api_client http://localhost:23333

運行后,可以通過命令行窗口直接與模型對話
在這里插入圖片描述

3. 網頁客戶端連接API服務器

關閉剛剛的VSCode終端,但服務器端的終端不要關閉。 運行之前確保自己的gradio版本低于4.0.0。

pip install gradio==3.50.2

新建一個VSCode終端,激活conda環境。

conda activate lmdeploy

使用Gradio作為前端,啟動網頁客戶端。

lmdeploy serve gradio http://localhost:23333 \--server-name 0.0.0.0 \--server-port 6006

打開瀏覽器,訪問地址http://127.0.0.1:6006 然后就可以與模型進行對話了!

在這里插入圖片描述

進階作業

多模態 Llava 微調和部署

沒有100%的A100。。。

Llama3 工具調用能力訓練

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

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

相關文章

SQL Server 2022安裝+SQL Server最新補丁+smss工具連接超詳細教程

文章目錄 一、SQL Server 2022安裝二、SSMS的安裝與連接三、最新補丁下載總結 一、SQL Server 2022安裝 官網下載安裝包&#xff1a;https://www.microsoft.com/en-us/sql-server/sql-server-downloads 打開 選擇自定義 更改你要安裝到的位置后進行安裝 安裝程序包下載完后會自…

將本地項目代碼上傳到別人GitHub的遠程分支上流程記錄

首先將別人的項目克隆到本地&#xff1a; git clone 項目地址 然后cd進項目中&#xff0c;查看分支名稱&#xff1a; git branch git branch -a 切換分支&#xff1a; git checkout 遠程分支名 &#xff08;必須與所要提交代碼的遠程分支同名&#xff09; 截圖案例&#xff1…

簡單的TCP網絡程序:英譯漢服務器

一、服務器的初始化 下面介紹程序中用到的socket API,這些函數都在sys/socket.h中。 1.創建套接字 socket()&#xff1a; ?參數介紹&#xff1a; socket()打開一個網絡通訊端口,如果成功的話,就像open()一樣返回一個文件描述符;應用程序可以像讀寫文件一樣用read/write在網…

AI大模型日報#0523:中國大模型價格戰的真相、大模型「上車」、王小川首款 AI 應用

導讀&#xff1a;AI大模型日報&#xff0c;爬蟲LLM自動生成&#xff0c;一文覽盡每日AI大模型要點資訊&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一萬物”&#xff08;Yi-Large&#xff09;生成了今日要點以及每條資訊的摘要。歡迎閱讀&#xf…

04. Redis 配置文件

文章目錄 單位包含網絡 NETWORK通用 GENERAL快照 SNAPSHOTTING主從復制 REPLICATION安全 SECURITY客戶端 CLIENTS內存設置 MEMORY MANAGEMENTAPPEND ONLY MODE 模式&#xff08;aof 的配置&#xff09; 單位 配置文件對大小寫不敏感&#xff08;unit單位&#xff09;。 包含 …

Flutter 中的 WillPopScope 小部件:全面指南

Flutter 中的 WillPopScope 小部件&#xff1a;全面指南 在 Flutter 應用開發中&#xff0c;WillPopScope 是一個非常有用的小部件&#xff0c;它允許開發者攔截和處理用戶嘗試退出當前頁面的操作。這在需要確認用戶是否真的想要離開當前頁面&#xff0c;或者在離開前需要執行…

京東h5st加密參數分析與批量商品價格爬取(文末含純算法)

文章目錄 1. 寫在前面2. 接口分析3. 加密分析4. 算法還原【??作者主頁】:吳秋霖 【??作者介紹】:擅長爬蟲與JS加密逆向分析!Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致力于Python與爬蟲領域研究與開發工作! 【??作者推…

羅德與施瓦茨ZNB20矢量網絡分析儀怎么讀取Trace?

矢量網絡分析儀(VNA)是電子測量領域廣泛應用的重要儀器&#xff0c;可以幫助工程師精確測量各種射頻和微波設備的參數&#xff0c;為設計優化、故障診斷等提供關鍵數據支持。作為業界領先的VNA制造商&#xff0c;羅德與施瓦茨的ZNB20型號在測量精度、動態范圍、掃描速度等方面都…

家政預約小程序05服務管理

目錄 1 設計數據源2 后臺管理3 后端API4 調用API總結 家政預約小程序的核心是展示家政公司提供的各項服務的能力&#xff0c;比如房屋維護修繕&#xff0c;家電維修&#xff0c;育嬰&#xff0c;日常保潔等。用戶在選擇家政服務的時候&#xff0c;價格&#xff0c;評價是影響用…

中國網對話神工坊創始人任虎: 先進計算技術賦能,領跑自主CAE新時代

隨著"中國制造2025"收官在即&#xff0c;智能制造和工業互聯網的發展勢頭更勁。作為現代工業的基石&#xff0c;工業軟件已成為推動工業數字化轉型的關鍵力量。 近日&#xff0c;神工坊創始人&CEO任虎先生接受了中國網記者的專訪&#xff0c;就“國產CAE軟件的崛…

C++中的Lambda的定義與使用

文章目錄 前言Lambda的定義與使用方式總結 Lambda的使用和細節 前言 在C11引入了Lambda表達式&#xff0c;它是一種方便的匿名函數&#xff0c;可以在需要時臨時定義函數&#xff0c;并且可以捕獲局部變量。下面是Lambda表達式的定義與使用方式&#xff0c;并對其進行總結 La…

【東山派Vision K510開發板試用筆記】nncase的安裝

概述 最近試用了百問網提供的東山派Vision開發板&#xff0c;DongshanPI-Vision開發板是百問網針對AI應用開發設計出來的一個RSIC-V架構的AI開發板&#xff0c;主要用于學習使用嘉楠的K510芯片進行Linux項目開發和嵌入式AI應用開發等用途。DongshanPI-Vision開發板采用嘉楠公司…

持續總結中!2024年面試必問 20 道 Redis面試題(三)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 20 道 Redis面試題&#xff08;二&#xff09;-CSDN博客 五、Redis的持久化機制是什么&#xff1f;各自的優缺點&#xff1f; Redis的持久化機制主要有三種&#xff1a;RDB持久化、AOF持久化以及混合持久化。下面…

Android 13 QSSI和TARGET編譯時間不一致導致recovery升級失敗

環境 $ cat /etc/os-release NAME"Ubuntu" VERSION"20.04.4 LTS (Focal Fossa)" IDubuntu ID_LIKEdebian PRETTY_NAME"Ubuntu 20.04.4 LTS" VERSION_ID"20.04" HOME_URL"https://www.ubuntu.com/" SUPPORT_URL"https:/…

寡姐不高興了:這次可能會讓 OpenAI 遇到真正的麻煩|TodayAI

寡姐這次真不高興了 演員斯嘉麗約翰遜&#xff08;Scarlett Johansson&#xff09;近日表示&#xff0c;她拒絕了 OpenAI 的邀請&#xff0c;不愿為對話式 ChatGPT 系統配音&#xff0c;卻發現公司仍然使用了一個聽起來非常像她的聲音。對此&#xff0c;她感到“震驚”和“憤怒…

react狀態管理

狀態管理的實現 組件之外&#xff0c;可以在全局共享狀態/數據 closure&#xff08;閉包&#xff09; 可以解決 有修改這個數據的明確方法&#xff0c;并且&#xff0c;能夠讓其他的方法感知到。 本質上&#xff0c;就是把監聽函數放在一個地方&#xff0c;必要時拿出來執行一…

Java數據結構與算法(最小棧)

前言 設計一個支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂部的元素。i…

Educational Codeforces Round 160 C. Game with Multiset (貪心之盡量選最大來填滿)

在這個問題中&#xff0c;最初會給你一個空的多集。您必須處理兩種類型的查詢&#xff1a; ADD x x x - 在多集合中添加一個等于 2 x 2x 2x 的元素&#xff1b; GET w w w - 詢問是否可以求當前多集的某個子集的和&#xff0c;并得到等于 w w w 的值。 輸入 第一行包含一…

java后端輪播圖的設計

對于表示輪播圖位置這種有限且較小范圍的數據&#xff0c;一般可以使用整數類型來表示。考慮到位置序號一般是非負整數且數量較少&#xff0c;可以選擇使用小范圍的整數類型&#xff0c;如下&#xff1a; 整數類型: 對于Java中&#xff0c;可以考慮使用 int 類型來表示位置序號…

Vue3 ts實現將assets中的圖片轉為file格式,實現本地圖片選擇上傳功能

Vue3 ts實現將assets中的圖片轉為file格式&#xff0c;實現本地圖片選擇上傳功能 1、需求描述2、關鍵代碼3、img標簽src使用變量打包后圖片無法展示 1、需求描述 用戶可以選項系統固定的幾個圖標&#xff0c;也可以自定義上傳圖片。系統固定圖標存在 src\assets\images\app 路徑…