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

news2024/12/22 10:11:22

【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 bash

set -ex

PRE_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=500

DATESTR=`date +%Y%m%d-%H%M%S`
RUN_NAME=advertise_gen_pt

BASE_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_DIR

torchrun --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.coloradmin.cn/o/1246144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle rac环境归档日志清除

文章目录 一、处理步骤1、使用终端登录上服务器查看磁盘使用状态2、使用恢复备份管理工具RMAN删除归档日志 二、详细操作步骤三、定时任务自动清归档日志1、编写删除脚本4、测试脚本运行情况5、设置定时任务每周执行一次&#xff0c;并测试运行效果 昨天单位的所有系统都连不上…

干货科普 | 不同类型的机器人及其在工作中的应用

原创 | 文 BFT机器人 制造商在其操作中使用各种类型的机器人&#xff0c;每种机器人都具有特定的能力和功能。我们将讨论制造业中使用的一些最常见类型的机器人&#xff0c;以及哪种机器人可能最适合您的应用。 01 关节机器人 关节式机器人是一种工业机器人&#xff0c;具有一…

管理后台系统,springboot+redis+nginx+html+bootstrap

一个简易版的管理后台系统&#xff0c;前后端分离&#xff0c;可适用于小团队开发&#xff0c;支持二次开发。 后端主要技术springboot&#xff0c;他可以帮我们快速的搭建项目&#xff0c;并快速实现开发。 redis做缓存&#xff0c;保存登录状态和一些高频率查询的基础数据。…

玻色量子“揭秘”之背包问题与Ising建模

摘要&#xff1a;背包问题(Knapsack problem)是一种组合优化的NP-Complete问题。问题可以描述为&#xff1a;给定一组物品&#xff0c;每种物品都有自己的重量和价格&#xff0c;在限定的总重量内&#xff0c;我们如何选择&#xff0c;才能使得物品的总价格最高。 背包问题早期…

高清录屏软件推荐,捕捉每一个美好瞬间

在数字媒体和内容创作领域&#xff0c;高清录屏软件已经成为了日常工作与娱乐中不可或缺的一部分。无论是录制游戏视频、制作教育教程&#xff0c;还是记录演示文稿&#xff0c;高清画质能够让您的内容更加生动、吸引人。在本文中&#xff0c;我们将介绍三款不同的高清录屏软件…

微信小程序商城实例mpvue-xbyjShop-master(附精选源码32套,涵盖商城团购等)

mpvue-xbyjShop 基于mpvue的微信小程序商城&#xff08;小程序端&#xff0c;服务端&#xff09; 小程序端 技术栈 mpvue mpvue-router-patch mpvue-entry vuex webpack ES6/7 flyio mpvue-wxparse 项目运行 微信开发中工具选中mpvue-xbyjShop/buyer作为项目目录即可功…

RFID技术在刀具智能管理中的应用

RFID技术在刀具智能管理中的应用 科技日新月异&#xff0c;工业科技的不断提升,慢慢的改变了传统制造业。RFID技术的崛起改变了传统的人工记录数据、盘点物料的方式&#xff0c;带来更高效、错误率低的解决方案。 刀具是生产过程中不可或缺的工具&#xff0c;高效管理和利用刀…

Zabbix-Liunx服务器内存使用率测试

要在Python 2.7中运行内存消耗脚本并安装psutil&#xff0c;您需要先安装pip。以下是完整的步骤&#xff0c;包括如何在Python 2.7环境中安装pip&#xff0c;然后安装psutil&#xff0c;以及最后如何运行内存消耗脚本。 步骤1: 安装pip 在Python 2.7中安装pip&#xff1a; 首先…

rocketMQ5.0顺序消息golang接入

本人理解&#xff0c;顺序消息如果不分消息组&#xff0c;那么会影响并行处理速度&#xff0c;所以尽量消息组分的散一些 首先上要求&#xff0c;官方文档如下&#xff1a; 总结&#xff1a; 1.必须同一个消息组&#xff0c;消息组和消费组不是一个概念&#xff0c;不要混 2.必…

大语言模型概述(二):基于亚马逊云科技的研究分析与实践

上期介绍了大语言模型的定义和发展历史&#xff0c;本期将分析基于亚马逊云科技的大语言模型相关研究方向&#xff0c;以及大语言模型的训练和构建优化。 大语言模型研究方向分析 Amazon Titan 2023 年 4 月&#xff0c;亚马逊云科技宣布推出 Amazon Titan 大语言模型。根据…

Azure Machine Learning - 创建Azure AI搜索服务

目录 准备工作查找 Azure AI 搜索产品/服务选择订阅设置资源组为服务命名选择区域选择层创建服务配置身份验证扩展服务何时添加第二个服务将多个服务添加到订阅 Azure AI 搜索是用于将全文搜索体验添加到自定义应用的 Azure 资源&#xff0c;本文介绍如何创建Azure AI搜索服务 …

ROS知识:卡尔曼滤波

https://en.wikipedia.org/wiki/Kalman_filter 一、提要 在卡尔曼滤波的相关技术文献中,其数学表达看起来都非常晦涩和不透明。这很糟糕,如果您以正确的方式看待卡尔曼滤波器,它实际上非常简单易懂。这里的叙述简单,先决条件也很简单;您所需要的只是对概率和矩阵的基本了解…

数字孪生智慧校园 Web 3D 可视化监测

当今&#xff0c;智慧校园发展阶段亟需推动信息可视化建设与发展&#xff0c;将大数据、云计算、可视化等高新技术相融合&#xff0c;为校园师生创造科学智能的学习环境&#xff0c;并实现教学资源最大化和信息服务智能化。帮助学校更好地应用校园可视化技术&#xff0c;提升校…

java--static修饰成员方法

1.成员方法的分类 ①类方法&#xff1a;有static修饰的成员方法&#xff0c;属于类 ②实例方法&#xff1a;无static修饰的成员方法&#xff0c;属于对象。 2.成员方法的执行原理 解析&#xff1a; 第一行代码&#xff1a;扫描class包名&#xff0c;在方法区生成一个Test.cl…

chatGPT4机器学习数据后最终保留在机器里的是什么? 机器是怎么产生智能的? TensorFlow没有直接开发出类似GPT-4这样的模型

机器学习数据后最终保留在机器里的是机器学习模型。机器学习模型是机器学习系统中的核心&#xff0c;它是机器学习系统能够进行推理和预测的基础。 机器学习模型通常由参数组成。参数是机器学习模型的权重和偏差。机器学习系统通过训练来学习这些参数。训练是指让机器学习系统…

46、Flink 的table api与sql之配项列表及示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

opencv-GrabCut 图像分割算法

GrabCut 是一种图像分割算法&#xff0c;通过迭代优化的方式将图像分割为前景和背景。这种算法最初由Carsten Rother、Vladimir Kolmogorov和Andrew Blake于2004年提出。 GrabCut 算法的基本思想是通过用户**提供的一个矩形区域&#xff08;称为"掩模"&#xff09;*…

【C++】:多态

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关多态的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结…

MFC所有控件介绍及基本使用

一、前言 本篇文档介绍了MFC控件的基本使用&#xff0c;同时提供了关于MFC控件使用的工程代码&#xff0c;程序界面如下图&#xff0c;有兴趣的可以到文档最后的链接处进行下载。 二、控件介绍 2.1 Button &#xff08;按钮&#xff09; 2.2 CheckBox&#xff08;复选框&am…

【算法】链表-20231124

这里写目录标题 一、83. 删除排序链表中的重复元素二、206. 反转链表三、234. 回文链表 一、83. 删除排序链表中的重复元素 简单 1.1K 相关企业 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例…