【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.mzph.cn/news/166135.shtml

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

相关文章

什么手机30万?VERTU唐卡手机顶配56.8万

近日,一则新闻在社交媒体上引发了广泛关注。一名男子遗失了一部价值30万的VERTU唐卡定制款手机,而一位女士在捡到这部手机后,误以为是一部普通的老年机,引发了种种误会。30万的手机是什么牌子?VERTU唐卡手机浮出水面 据了解,这部VERTU唐卡定制款手机是一款豪华的奢侈品定制手机…

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目录 四、获取云端凭据 五、导出之前创建的元数据…

编程实例,随机抽奖编程

编程实例&#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…

关于js的find的基本用法

Array.prototype.find() 是 JavaScript 的一个数组方法&#xff0c;它被用来在数组中查找一个符合条件的元素。一旦找到第一个符合条件的元素, find() 会立即返回这个元素的值&#xff0c;否则返回 undefined。 以下是 find() 方法的基本语法&#xff1a; arr.find(callback(el…

利用企业被执行人信息查询API保障商业交易安全

前言 在当今竞争激烈的商业环境中&#xff0c;企业为了保障商业交易的安全性不断寻求新的手段。随着技术的发展&#xff0c;利用企业被执行人信息查询API已经成为了一种强有力的工具&#xff0c;能够帮助企业在商业交易中降低风险&#xff0c;提高合作的信任度。 企业被执行人…

GitHub桌面版

GitHub桌面版 一、GitHub 桌面版二、clone 仓库三、更新仓库 一、GitHub 桌面版 二、clone 仓库 三、更新仓库

Azure Machine Learning - Azure可视化图像分类操作实战

目录 一、数据准备二、创建自定义视觉资源三、创建新项目四、选择训练图像五、上传和标记图像六、训练分类器七、评估分类器概率阈值 八、管理训练迭代 在本文中&#xff0c;你将了解如何使用Azure可视化页面创建图像分类模型。 生成模型后&#xff0c;可以使用新图像测试该模型…

TIDB拓扑结构

TiDB Server&#xff1a;SQL层&#xff0c;负责接受客户端的连接&#xff0c;执行SQL解析和优化&#xff0c;最终生成分布式执行计划。TiDB Server为无状态的&#xff0c;可增加节点负载均衡。 PD (Placement Driver) Server&#xff1a;整个TiDB集群的元信息管理模块&#xf…

【超详细】手搓一个微信日记本

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资料&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 这里对之前的微信记事本小程序进行了重新编写&#xff0c;增加了更加详细的步骤描述&#xff0c;将全部图片都改成了本地图…

用EasyAVFilter将网络文件或者本地文件推送RTMP出去的时候发现CPU占用好高,用的也是vcodec copy呀,什么原因?

最近同事在用EasyAVFilter集成在EasyDarwin中做视频拉流转推RTMP流的功能的时候&#xff0c;发现怎么做CPU占用都会很高&#xff0c;但是视频没有调用转码&#xff0c;vcodec用的就是copy&#xff0c;这是什么原因呢&#xff1f; 我们用在线的RTSP流就不会出现这种情况&#x…

SSM个性化旅游管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 个性化旅游管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库 &#xff0c;系统主要采用B…

raid磁盘阵列

在单机时代&#xff0c;采用单块磁盘进行数据存储和读写的方式&#xff0c;由于寻址和读写的时间消耗&#xff0c;导致I/O性能非常低&#xff0c;且存储容量还会受到限制。另外&#xff0c;单块磁盘极其容易出现物理故障&#xff0c;经常导致数据的丢失。此时&#xff0c;RAID技…