【ChatGLM3-6B】Docker下部署及微調

【ChatGLM2-6B】小白入門及Docker下部署

  • 注意:Docker基于鏡像中網盤上上傳的有已經做好的鏡像,想要便捷使用的可以直接從Docker基于鏡像安裝看
  • Docker從0安裝
    • 前提
    • 下載
    • 啟動
    • 訪問
  • Docker基于鏡像安裝
    • 容器打包操作(生成鏡像時使用的命令)
    • 安裝時命令
  • 微調
    • 前提
    • 微調和驗證文件準備
    • 微調和驗證文件格式轉換
    • 修改微調腳本
    • 執行微調
    • 微調完成
    • 結果推理驗證
    • 報錯解決
      • 出現了$‘\r’: command not found錯誤
  • 加載微調模型
  • API接口調用

注意:Docker基于鏡像中網盤上上傳的有已經做好的鏡像,想要便捷使用的可以直接從Docker基于鏡像安裝看

Docker從0安裝

前提

  • 安裝好了docker
  • 安裝好了NVIDIA
  • 顯卡16G

下載

  • 新建一個文件夾,用來存放下載下來的ChatGLM3代碼和模型

  • 右鍵,打開一個git窗口,拉取模型(會很慢,耐心等待)

    • 地址: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/summary
    git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
    

    在這里插入圖片描述

  • 右鍵,打開一個git窗口,拉取源代碼

    • 地址:https://github.com/THUDM/ChatGLM3
    git clone https://github.com/THUDM/ChatGLM3
    

    git clone https://ghproxy.com/https://github.com/THUDM/ChatGLM3
    

在這里插入圖片描述

  • 注意:將下載好的模型(chatglm3-6b-models)和代碼放到一個目錄里面,并上傳到服務器上

啟動

docker run -itd --name chatglm3 -v `pwd`/ChatGLM3:/data \
--gpus=all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all \
-p 8501:8501 pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel
# 進入啟動好的容器
docker exec -it chatglm3 bash# 設置pip3下載路徑為國內鏡像
cd /data
pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple 
pip3 config set install.trusted-host mirrors.aliyun.com# 安裝基礎依賴
pip3  install -r requirements.txt

修改模型路徑
在這里插入圖片描述

啟動

streamlit run basic_demo/web_demo2.py

在這里插入圖片描述

訪問

http://10.22.2.18:8501/

在這里插入圖片描述

Docker基于鏡像安裝

容器打包操作(生成鏡像時使用的命令)

  • 將安裝好、啟動好的容器打包成鏡像

    docker commit -m='glm3 commit' -a='zhangzh' chatglm3 chatglm3-6b:1.1
    
  • 將鏡像,打成可以傳到其他地方的tar包

    docker save -o chatglm3-6b.tar chatglm3-6b:1.1
    

安裝時命令

  • 網盤地址

    ? 這里因為網盤上傳文件有大小限制,所以使用了分卷壓縮的方式進行了上傳,全部下載下來就可以。

    鏈接:https://pan.baidu.com/s/1wY3QqaWrMyBR39d2ZhN_Kg?pwd=9zdd 
    提取碼:9zdd
    

    在這里插入圖片描述

  • 將下載好的鏡像文件和代碼模型文件上傳到服務器上,并進行解壓,然后在該目錄進行操作。

  • 在其他的docker服務器加載鏡像

    docker load -i chatglm3-6b.tar
    
  • 啟動

    docker run -itd --name chatglm3 -v `pwd`/ChatGLM3:/data \
    --gpus=all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all \
    -p 8501:8501 -p 8000:8000 chatglm3-6b:1.1
    
  • 進入容器

    docker exec -it chatglm3 bash
    
  • 啟動

    cd /data 
    streamlit run basic_demo/web_demo2.py
    
  • 訪問:http://10.22.2.18:8501/

微調

微調操作直接在docker內進行

 docker exec -it chatglm3 bash

前提

運行示例需要 python>=3.9,除基礎的 torch 依賴外,示例代碼運行還需要依賴

pip install transformers==4.30.2 accelerate sentencepiece astunparse deepspeed

微調和驗證文件準備

微調參數文件為.json文件,先將你的微調數據和驗證數據處理成如下格式:

{"content": "類型#褲*版型#寬松*風格#性感*圖案#線條*褲型#闊腿褲", "summary": "寬松的闊腿褲這兩年真的吸粉不少,明星時尚達人的心頭愛。畢竟好穿時尚,誰都能穿出腿長2米的效果寬松的褲腿,當然是遮肉小能手啊。上身隨性自然不拘束,面料親膚舒適貼身體驗感棒棒噠。系帶部分增加設計看點,還讓單品的設計感更強。腿部線條若隱若現的,性感撩人。顏色敲溫柔的,與褲子本身所呈現的風格有點反差萌。"}
{"content": "類型#裙*風格#簡約*圖案#條紋*圖案#線條*圖案#撞色*裙型#魚尾裙*裙袖長#無袖", "summary": "圓形領口修飾脖頸線條,適合各種臉型,耐看有氣質。無袖設計,尤顯清涼,簡約橫條紋裝飾,使得整身人魚造型更為生動立體。加之撞色的魚尾下擺,深邃富有詩意。收腰包臀,修飾女性身體曲線,結合別出心裁的魚尾裙擺設計,勾勒出自然流暢的身體輪廓,展現了婀娜多姿的迷人姿態。"}
{"content": "類型#上衣*版型#寬松*顏色#粉紅色*圖案#字母*圖案#文字*圖案#線條*衣樣式#衛衣*衣款式#不規則", "summary": "寬松的衛衣版型包裹著整個身材,寬大的衣身與身材形成鮮明的對比描繪出纖瘦的身形。下擺與袖口的不規則剪裁設計,彰顯出時尚前衛的形態。被剪裁過的樣式呈現出布條狀自然地垂墜下來,別具有一番設計感。線條分明的字母樣式有著花式的外觀,棱角分明加上具有少女元氣的棗紅色十分有年輕活力感。粉紅色的衣身把肌膚襯托得很白嫩又健康。"}
{"content": "類型#裙*版型#寬松*材質#雪紡*風格#清新*裙型#a字*裙長#連衣裙", "summary": "踩著輕盈的步伐享受在午后的和煦風中,讓放松與愜意感為你免去一身的壓力與束縛,仿佛要將靈魂也寄托在隨風搖曳的雪紡連衣裙上,吐露出<UNK>微妙而又浪漫的清新之意。寬松的a字版型除了能夠帶來足夠的空間,也能以上窄下寬的方式強化立體層次,攜帶出自然優雅的曼妙體驗。"}

其中content是向模型輸入的內容,summary為模型應該輸出的內容。

其中微調數據是通過本批數據對模型進行調試(文件是train.json),驗證數據是通過這些數據驗證調試的結果(文件是dev.json)。

微調和驗證文件格式轉換

1、在項目代碼的finetune_demo目錄下新建一個AdvertiseGen目錄,并將你的文件上傳上去。

在這里插入圖片描述

2、然后回到finetune_demo目錄,執行以下腳本進行轉換,轉換后的文件放在formatted_data目錄下。

python ./scripts/format_advertise_gen.py --path "AdvertiseGen/train.json"

在這里插入圖片描述

修改微調腳本

本方法使用的微調腳本是finetune_demo/scripts/finetune_pt.sh,修改各個參數為自己的環境,其中:

PRE_SEQ_LEN: 模型長度,后續使用微調結果加載時要保持一直
MAX_SOURCE_LEN:模型輸入文本的長度,超過該長度會截取,會影響占用GPU,我這里GPU為16G基本吃滿
MAX_TARGET_LEN:模型輸出文本的最大長度,會影響占用GPU,我這里GPU為16G基本吃滿
BASE_MODEL_PATH:原模型的地址
DATASET_PATH:模型微調參數文件的地址
OUTPUT_DIR:模型微調結果存放的地址
MAX_STEP:調試的步數,主要跟微調需要的時間有關,越小則時間越短,但微調的準確度(影響度)越小
SAVE_INTERVAL:多少步保存一個微調結果

在這里插入圖片描述

腳本如下:

#! /usr/bin/env bashset -exPRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1
MAX_SOURCE_LEN=512
MAX_TARGET_LEN=64
DEV_BATCH_SIZE=1
GRAD_ACCUMULARION_STEPS=32
MAX_STEP=1500
SAVE_INTERVAL=500DATESTR=`date +%Y%m%d-%H%M%S`
RUN_NAME=advertise_gen_ptBASE_MODEL_PATH=/data/chatglm3-6b-models
DATASET_PATH=formatted_data/advertise_gen.jsonl
OUTPUT_DIR=output/${RUN_NAME}-${DATESTR}-${PRE_SEQ_LEN}-${LR}mkdir -p $OUTPUT_DIRtorchrun --standalone --nnodes=1 --nproc_per_node=$NUM_GPUS finetune.py \--train_format input-output \--train_file $DATASET_PATH \--preprocessing_num_workers 1 \--model_name_or_path $BASE_MODEL_PATH \--output_dir $OUTPUT_DIR \--max_source_length $MAX_SOURCE_LEN \--max_target_length $MAX_TARGET_LEN \--per_device_train_batch_size $DEV_BATCH_SIZE \--gradient_accumulation_steps $GRAD_ACCUMULARION_STEPS \--max_steps $MAX_STEP \--logging_steps 1 \--save_steps $SAVE_INTERVAL \--learning_rate $LR \--pre_seq_len $PRE_SEQ_LEN 2>&1 | tee ${OUTPUT_DIR}/train.log

執行微調

先給腳本執行權限

chmod -R 777 ./scripts/finetune_pt.sh

執行腳本

./scripts/finetune_ds.sh  # 全量微調
./scripts/finetune_pt.sh  # P-Tuning v2 微調

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

微調完成

在這里插入圖片描述

結果推理驗證

python inference.py \--pt-checkpoint "/data/finetune_demo/output/advertise_gen_pt-20231123-022517-128-2e-2/checkpoint-1500" \--model /data/chatglm3-6b-models

報錯解決

出現了$‘\r’: command not found錯誤

可能因為該Shell腳本是在Windows系統編寫時,每行結尾是\r\n
而在Linux系統中行每行結尾是\n
在Linux系統中運行腳本時,會認為\r是一個字符,導致運行錯誤

使用dos2unix 轉換一下就可以了

dos2unix <文件名># dos2unix: converting file one-more.sh to Unix format ...

-bash: dos2unix: command not found

就是還沒安裝,安裝一下就可以了

apt install dos2unix

加載微調模型

cd ../composite_demo
MODEL_PATH="/data/chatglm3-6b-models" PT_PATH="/data/finetune_demo/output/advertise_gen_pt-20231123-022517-128-2e-2/checkpoint-1500" streamlit run main.py

重新訪問頁面,即可啦~

API接口調用

  • 下載依賴

    pip install openai==1.3.0
    pip install pydantic==2.5.1
    
  • 進入openai_api_demo目錄

  • 修改腳本

在這里插入圖片描述

  • 啟動腳本

    python openai_api_wt.py
    
  • 訪問SwaggerUI地址

    http://10.22.2.18:8000/docs#/default/list_models_v1_models_get

    接口:http://10.22.2.18:8000/v1/chat/completions

    參數:

    {"model": "chatglm3-6b","messages": [{"role": "user","content": "你好,給我講一個故事,大概100字"  # 這里是請求的參數}],"stream": false,"max_tokens": 100,"temperature": 0.8,"top_p": 0.8
    }
    

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

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

相關文章

Nginx常用負載均衡策略

Nginx常用負載均衡策略 輪詢&#xff08;默認&#xff09; 注意&#xff1a;這里的輪詢并不是每個請求輪流分配到不同的后端服務器&#xff0c;與ip_hash類似&#xff0c;但是按照訪問url的hash結果來分配請求&#xff0c;使得每個url定向到同一個后端服務器&#xff0c;主要…

什么手機30萬?VERTU唐卡手機頂配56.8萬

近日,一則新聞在社交媒體上引發了廣泛關注。一名男子遺失了一部價值30萬的VERTU唐卡定制款手機,而一位女士在撿到這部手機后,誤以為是一部普通的老年機,引發了種種誤會。30萬的手機是什么牌子?VERTU唐卡手機浮出水面 據了解,這部VERTU唐卡定制款手機是一款豪華的奢侈品定制手機…

2-Python與設計模式--前言

0-Python與設計模式–前言 一 什么是設計模式 設計模式是面對各種問題進行提煉和抽象而形成的解決方案。這些設計方案是前人不斷試驗&#xff0c; 考慮了封裝性、復用性、效率、可修改、可移植等各種因素的高度總結。它不限于一種特定的語言&#xff0c; 它是一種解決問題的思…

GoogleNet詳解

一、亮點 AlexNet、VGG都只有一個輸出層。googlenet有三個&#xff08;其中兩個是輔助分類層&#xff09; 二、先看看Inception結構 1、Inception 之前的網絡&#xff1a; AlexNet、VGG都是串行結構 Inception&#xff1a; 并行結構 上一層的輸出同時傳入四個并行結構&…

有了傾斜攝影,如何搭建一座智慧城市?

隨著無人機航測、傾斜攝影等全新一代測繪信息技術方法的發展&#xff0c;可以迅速搜集制作精細化的城市三維模型&#xff0c;搭建城市地理信息基礎服務架構。 近期都在重點關注的“智慧城市”究竟是什么&#xff0c;有什么重大作用&#xff0c;同時又面臨著什么難關&#xff0c…

短劇付費變現小程序源碼系統+開通會員+在線充值 附帶完整的搭建教程

大家好啊&#xff0c;今天小編來給大家分享一款短劇付費變現小程序源碼系統。近年來&#xff0c;隨著互聯網技術的飛速發展&#xff0c;短劇成為了一個備受矚目的領域。短劇以其簡潔、緊湊的故事情節和制作周期短、傳播速度快的特點&#xff0c;成為了越來越多人的選擇。然而&a…

小紅書達人類型特點有哪些,創作形式總結!

小紅書自帶的社交電商屬性&#xff0c;吸引了眾多優秀的內容創作者和品牌達人。他們以不同的風格和主題&#xff0c;贏得了粉絲們的喜愛和關注。今天為大家分享下小紅書達人類型特點有哪些&#xff0c;創作形式總結&#xff01; 1. 內容創作風格 我們從內容上來區分小紅書達人類…

微信小程序開發學習——小程序基本架構

1.創建一個包含&#xff1a;首頁、咨詢、關于我們 3個標簽的小程序&#xff0c;每個標簽都有對應的頁面、圖標和標簽文字。 知識點&#xff1a;app.json文件對小程序進行全局配置&#xff0c;同名.json文件對本窗口進行配置 app.json屬性&#xff1a; pages用于指定小程序由哪…

設計模式之建造者(Builder)模式

目錄 1、什么是建造者Builder模式&#xff1f; 2、建造者Builder模式的利與弊 3、建造者Builder模式的應用場景 4、建造者模式中的指導者&#xff08;Director&#xff09;有什么作用&#xff1f; 5、建造者Builder模式與其他模式的關系 小結 1、什么是建造者Builder模式…

百分點科技入選《2023年央國企數字化升級研究報告》

近日&#xff0c;艾瑞咨詢發布了《2023年央國企數字化升級研究報告》&#xff0c;報告總結了央國企數字化升級的方向和特點&#xff0c;并重點研究了基礎平臺及關鍵技術工具、通用及綜合型應用、重要配套建設等方面。報告指出&#xff0c;數據治理是央國企數字化升級過程中的重…

【鴻蒙應用ArkTS開發系列】- 云開發入門實戰二 實現省市地區三級聯動地址選擇器組件(上)

目錄 概述 云數據庫開發 一、創建云數據庫的對象類型。 二、預置數據&#xff08;為對象類型添加數據條目&#xff09;。 三、部署云數據庫 云函數實現業務邏輯 一、創建云函數 二、云函數目錄講解 三、創建resources目錄 四、獲取云端憑據 五、導出之前創建的元數據…

HTML新手入門筆記整理:特殊符號

音標符 音標符 字符 Construct 輸出結果 ?、 a a a? ?′ a a a?n ? a a a? ?&#xff5e; a a a? ??、 O O O? ??′ O O O? ? O O O? ?&#xff5e; O O O? 字符 顯示結果 描述 實體名稱 實體編號 空格 <…

【數據結構】F : 道路建設 (Ver. I)

F : 道路建設 (Ver. I) Description 有N個村莊&#xff0c;編號從1到N&#xff0c;你應該建造一些道路&#xff0c;使每個村莊都可以相互連接。 兩個村A和B是相連的&#xff0c;當且僅當A和B之間有一條道路&#xff0c;或者存在一個村C使得在A和C之間有一條道路&#xff0c;并…

編程實例,隨機抽獎編程

編程實例&#xff0c;隨機抽獎編程 操作步驟&#xff1a; 1、將在本店消費的會員數據導入到抽獎池&#xff0c;可以設定最近多少天內的記錄。 2、點擊 開始隨機抽獎&#xff0c;軟件將從抽獎池隨機抽取9名&#xff0c;并不斷變化&#xff0c;每0.02秒重新隨機抽取9名顯示到屏…

Java 項目中常用注解匯總!! (自整理)

Spring框架的注解 PostMapping("/getDetails") post請求 映射到接口 RequestBody 用來接收HTTP請求體中參數 GetMapping("/getDetails") get請求 映射到接口 RequestParam 用來接收URL中的查詢參數 PutMappi…

7:kotlin 數組 (Arrays)

數組是一種數據結構&#xff0c;它保存固定數量的相同類型或其子類型的值。kotlin中最常見的數組類型是對象類型數組&#xff0c;數組由array類表示。 什么時候使用 當你在kotlin中有特殊的底層需求需要滿足時&#xff0c;可以使用數組。例如&#xff0c;如果你有超出常規應用…

關于js的find的基本用法

Array.prototype.find() 是 JavaScript 的一個數組方法&#xff0c;它被用來在數組中查找一個符合條件的元素。一旦找到第一個符合條件的元素, find() 會立即返回這個元素的值&#xff0c;否則返回 undefined。 以下是 find() 方法的基本語法&#xff1a; arr.find(callback(el…

?LeetCode解法匯總1410. HTML 實體解析器

目錄鏈接&#xff1a; 力扣編程題-解法匯總_分享記錄-CSDN博客 GitHub同步刷題項目&#xff1a; https://github.com/September26/java-algorithms 原題鏈接&#xff1a;力扣&#xff08;LeetCode&#xff09;官網 - 全球極客摯愛的技術成長平臺 描述&#xff1a; 「HTML 實…

利用企業被執行人信息查詢API保障商業交易安全

前言 在當今競爭激烈的商業環境中&#xff0c;企業為了保障商業交易的安全性不斷尋求新的手段。隨著技術的發展&#xff0c;利用企業被執行人信息查詢API已經成為了一種強有力的工具&#xff0c;能夠幫助企業在商業交易中降低風險&#xff0c;提高合作的信任度。 企業被執行人…

如何使用 JavaScript 實現圖片上傳并轉換為 LaTeX 公式

在本教程中&#xff0c;我們將學習如何使用 JavaScript 創建一個上傳圖片的功能&#xff0c;并將所選圖片轉換為 LaTeX 公式。我們將使用 FileReader 對象來讀取圖片并將其轉換為 Base64 格式&#xff0c;然后利用 img2latex API 將其轉換為 LaTeX 公式。 1. HTML 結構 首先&…