CogVLM多模态大模型训练代码详细教程(基于vscode调试与训练)

文章目录

  • 前言
  • 一、cogvlm环境安装
    • 1、apex问题
    • 2、en_core_web_sm问题
  • 二、launch.json文件配置
    • 1、finetune_cogvlm_lora.sh被配置内容
    • 2、launch.json文件配置
    • 3、debug调试展示
  • 三、训练源码解读
    • 1、权重问题
    • 2、数据问题
    • 3、训练模型参数修改
    • 4、训练源码解读
    • 5、训练结果展示


前言

今天(2023-12-29),我很开心,断断续续时间搞了一下CogVLM大模型训练代码,终于实现了CogVLM大模型训练。特别是我是基于vscode编辑器配置launch.json文件在RTX4090显卡实现多模态大模型训练。可能很多玩过大模型或显卡显存充足情况下,使用官网教程,顺利情况亦可实现该模型训练。然我介于显卡为云服务,不得不在一张4090显卡上实现代码解读与训练。而代码解读必然使用debug模式较佳,在多种编辑器中看到vscode能力,我实现deepspeed方式在vscode中训练大模型。同时,有关CogVLM模型训练的解读或代码资料较少。因此,本文将介绍如何训练CogVLM模型,重点是如何使用vscode在4090显卡上调试模型。当然,我的博客也分享了vscode使用deepspeed方法与CogVLM推理过程解读,感兴趣可参考我的博客。


一、cogvlm环境安装

按照官网方法安装:https://github.com/THUDM/CogVLM/tree/main

# CUDA >= 11.8
pip install -r requirements.txt
python -m spacy download en_core_web_sm

建议查看requirements.txt文件下载对应torch版本离线安装,特别注意2.0以上版本含有cudnn,如果你cuda安装有cudnn,则下载不含cudnn的版本。当然,你安装也可存在以下问题,如下:

1、apex问题

github上下载apex离线安装会报错,大致原因是与torch版本兼容问题,可直接忽略,在setup.py文件中注释如下图框中内容即可:
在这里插入图片描述
最后,会提示安装成功,如下图:
在这里插入图片描述

2、en_core_web_sm问题

也许运行代码会有OSError: [E050] Can’t find model ‘en_core_web_sm’. 错误,这个是中文映射相关库,word2embeding相关内容,方法如下:

下载:
可以使用命令下载:python3 -m spacy download en_core_web_sm
也可以直接使用链接手动下载(链接来源命令):
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl

安装:

pip install en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl

通过运行:
在这里插入图片描述

二、launch.json文件配置

想要调试方式对CogVLM模型debug解读代码,必然需要配置launch.json文件内容。在这里,我假设使用finetune_cogvlm_lora.sh文件运行,我会给出如何将sh运行脚本配置launch.json文件,可debug方式解读代码。

1、finetune_cogvlm_lora.sh被配置内容

#! /bin/bash
# export PATH=/usr/local/cuda/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHNUM_GPUS_PER_WORKER=8
MP_SIZE=1script_path=$(realpath $0)
script_dir=$(dirname $script_path)
main_dir=$(dirname $script_dir)
MODEL_TYPE="cogvlm-base-490"
VERSION="base"
MODEL_ARGS="--from_pretrained $MODEL_TYPE \--max_length 1288 \--lora_rank 10 \--use_lora \--local_tokenizer lmsys/vicuna-7b-v1.5 \--version $VERSION"
# Tips: If training models of resolution 244, you can set --max_length smaller OPTIONS_SAT="SAT_HOME=~/.sat_models"
OPTIONS_NCCL="NCCL_DEBUG=info NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2 LOCAL_WORLD_SIZE=$NUM_GPUS_PER_WORKER"
HOST_FILE_PATH="hostfile"
train_data="./archive_split/train"
valid_data="./archive_split/valid"
gpt_options=" \--experiment-name finetune-$MODEL_TYPE \--model-parallel-size ${MP_SIZE} \--mode finetune \--train-iters 800 \--resume-dataloader \$MODEL_ARGS \--train-data ${train_data} \--valid-data ${valid_data} \--distributed-backend nccl \--lr-decay-style cosine \--warmup .02 \--checkpoint-activations \--vit_checkpoint_activations \--save-interval 200 \--eval-interval 200 \--save "./checkpoints" \--eval-iters 10 \--eval-batch-size 1 \--split 1. \--deepspeed_config test_config_bf16.json \--skip-init \--seed 2023
"run_cmd="${OPTIONS_NCCL} ${OPTIONS_SAT} deepspeed --master_port 16666 --hostfile ${HOST_FILE_PATH} finetune_cogvlm_demo.py ${gpt_options}"
echo ${run_cmd}
eval ${run_cmd}set +x

2、launch.json文件配置

将上面的sh文件配置成launch.json文件,内容如下:

{"version": "0.2.0","configurations": [{"name": "finetune_cogvlm_lora","type": "python","request": "launch","program": "/home/ubuntu/anaconda3/envs/cogvlm/bin/deepspeed","console": "integratedTerminal","justMyCode": true, "args": [ //"--hostfile","./hostfile.txt","finetune_demo/finetune_cogvlm_demo.py",//"${file}","--experiment-name", "cogvlm-base-490","--model-parallel-size", "1","--mode", "finetune","--train-iters", "800","--resume-dataloader","--from_pretrained", "cogvlm-base-224","--max_length", "1288","--lora_rank", "10","--use_lora","--local_tokenizer", "lmsys/vicuna-7b-v1.5","--version", "base","--train-data", "/home/CogVLM-main/archive_split/train","--valid-data", "/home/CogVLM-main/archive_split/valid","--distributed-backend", "nccl","--lr-decay-style", "cosine","--warmup",".02","--checkpoint-activations","--vit_checkpoint_activations","--save-interval", "200","--eval-interval", "200","--save", "./checkpoints","--eval-iters", "10", "--eval-batch-size", "1","--split", "1.","--deepspeed_config", "test_config_bf16.json","--skip-init","--seed", "2023"],"env": {//"SAT_HOME": "~/.sat_models","NCCL_DEBUG": "info","NCCL_IB_DISABLE": "0","NCCL_NET_GDR_LEVEL": "1","LOCAL_WORLD_SIZE": "1","CUDA_VISIBLE_DEVICES": "0","PYDEVD_DISABLE_FILE_VALIDATION": "1",}}]
}

注:最重要是vscode如何使用deepspeed运行大模型

3、debug调试展示

按照以上内容即可实现如下debug方式,解决sh无法debug模型变成可debug方式,大大提高代码解读和修改。
在这里插入图片描述

三、训练源码解读

1、权重问题

模型中使用的相关权重,可参考官网和我的博客http://t.csdnimg.cn/53d2C

2、数据问题

数据参考官网:https://github.com/THUDM/CogVLM/blob/main/README_zh.md
使用下图步骤处理数据,如下:

在这里插入图片描述

3、训练模型参数修改

如果你的显卡不足,但又想解读源码,可更改模型文件模型层数,如下红框内容修改,即可实现源码解读。我修改如下,使用cogvlm-grounding-generalist模型,在4090显卡上大约占9个G左右。

在这里插入图片描述

4、训练源码解读

finetune源码集成代码文件为finetune_cogvlm_demo.py内,模型加载依然使用from_pretrained,之后和我之前博客点击这里说的类似,我将不在解读。
在这里插入图片描述

5、训练结果展示

当训练完后,依然会保存和cogvlm-grounding-generalist文件夹一样的内容,值权重值不一样。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604743.shtml

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

相关文章

认识Git

🌎初识Git 初识Git 什么是Git Git的安装       Centos平台安装Git       Ubuntu平台安装Git Git的基本操作       创建远程仓库       配置Git 认识工作区、暂存区与版本库       添加文件到暂存区       将暂存区文件提交至本…

weak_ptr如何能做到解决循环引用又能传递参数呢?

引子:今天在看CLR via C#的时候看到C#的垃圾回收算法--引用跟踪算法的时候想到以下几个问题。 一、引用计数法存在的问题 一般引用计数法存在的问题就是不好处理循环引用的问题,但是C不是有weak_ptr吗? 这个引用跟踪的垃圾回收算法看起来还…

MySQL忘记密码,如何重置密码(Windows)

1. 停止MySQL服务 打开“服务”管理工具(可以在开始菜单搜索“服务”或运行 services.msc)。 找到你的MySQL服务,可能叫别的,但是应该都是mysql开头的。 鼠标右键停止运行它。 2. 跳过权限表启动 MySQL 打开命令提示符&#x…

HTML5 新元素

新多媒体元素 标签描述<audio>定义音频内容<video>定义视频&#xff08;video 或者 movie&#xff09;<source>定义多媒体资源 <video> 和 <audio><embed>定义嵌入的内容&#xff0c;比如插件。<track>为诸如 <video> 和 <…

理论U2 贝叶斯决策理论

文章目录 一、概率统计理论基础1、乘法公式2、全概率公式3、贝叶斯公式 二、贝叶斯决策理论1、用处2、解决问题3、决策基础4、一些概念5、核心公式 三、最小错误率贝叶斯决策1、目标2、例题分析3、问题1&#xff09;决策的风险 四、最小风险贝叶斯决策1、背景2、基本概念1&…

西电期末1034.勒让德多项式

一.题目 二.分析与思路 带递推式即可&#xff0c;注意数据类型的使用和转换&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;double x;scanf("%d%lf",&n,&x);double ans0;double num[n];num[0]1;num[1]x;//初始化ansnum…

VS2017 CMake编译Opencv

先下载opencv4.2.0源码以及opencv_contrib-4.2.0 地址链接&#xff1a;https://pan.baidu.com/s/1AgFsiH4uMqTRJftNXAqmTw?pwd3663 提取码&#xff1a;3663 先建立一个opencv_debug和opencv_release文件夹这两个都是为了后续存放编译好的debug版本和release版本opencv的&#…

jaeger简单发送---链路追踪

jaeger go发送单个span package mainimport ("fmt""github.com/uber/jaeger-client-go"jaegercfg "github.com/uber/jaeger-client-go/config" )func main() {cfg : jaegercfg.Configuration{Sampler: &jaegercfg.SamplerConfig{ //采样类…

小程序 蓝牙连接与回连过程

小程序蓝牙连接过程包括扫描设备、连接设备和发送数据等步骤 具体步骤如下&#xff1a; 打开蓝牙&#xff1a;在小程序中调用wx.openBluetoothAdapter()函数打开蓝牙适配器。 监听蓝牙适配器状态&#xff1a;使用wx.onBluetoothAdapterStateChange()函数监听蓝牙适配器的状态…

2023年12 月电子学会Python等级考试试卷(一级)答案解析

青少年软件编程(Python)等级考试试卷(一级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 下列程序运行的结果是?( ) print(hello) print(world) A. helloworld

部署可道云网盘的一个漏洞解决

目录 1漏洞展示 2.防范措施 1漏洞展示 因为可道云网盘的上传文档有保存在 /data/Group/public/home/文档/ 中,当别有用心之人知道个人部署的域名与上次的文件后&#xff0c;可以进行访问拿到uid。例我在我部署的网盘上上次一个aa.php 文件&#xff0c;然后拿来演示 然后通过…

LeetCode刷题笔记之栈与队列

一、队列与栈相互转换 1. 232【用栈实现队列】 题目&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末…

Java SE入门及基础(5)

变量的定义与使用 1. 变量的概念 从字面意思看&#xff0c;变量就是会变化的量。 从计算机专业角度看&#xff0c;变量就是一个内存空间地址的表示。 在Java中&#xff0c;内存分为栈内存和堆内存两大块 2. 变量的声明 语法 数据类型 变量名 ; 变量名 变量值…

Python笔记07-异常、模块和包

文章目录 异常及捕获方法python模块python包安装第三方包 异常及捕获方法 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG 例如&#xff1a;以r方式打开一个不存在的…

LNMP架构及应用部署

目录 简介 1、构建LNMP网站平台 1.1、安装MySQL数据库 &#xff08;1&#xff09;编译安装MySQL &#xff08;2&#xff09;优化调整 &#xff08;3&#xff09;初始化数据库 &#xff08;4&#xff09;启动mysql服务 1.2、安装PHP解析环境 &#xff08;1&#xf…

【pytorch学习】 深度学习 教程 and 实战

pytorch编程实战博主&#xff1a;https://github.com/lucidrains https://github.com/lucidrains/vit-pytorch

K8S-环境部署

1 基础环境配置 主机名规划 序号主机ip主机名规划110.0.0.12kubernetes-master.sswang.com kubernetes-master210.0.0.15kubernetes-node1.sswang.com kubernetes-node1310.0.0.16kubernetes-node2.sswang.com kubernetes-node2410.0.0.17kubernetes-node3.sswang.com kubern…

【Java】设计模式之两阶段终止

两阶段终止 两阶段终止&#xff0c;即Two Phase Termination。是用来终止线程的套路。 它的思想是&#xff0c;如何在一个线程T1中优雅地终止线程T2&#xff1f;这里的【优雅】指的是给T2一个料理后事的机会。 错误思路&#xff1a; 使用stop方法。stop 方法会真正杀死线程…

uniapp上传文件时用到的api是什么?格式是什么?

在UniApp中&#xff0c;你可以使用uni.uploadFile()方法来上传文件。这是一个异步方法&#xff0c;用于将本地资源上传到服务器。 该方法的基本格式如下&#xff1a; uni.uploadFile({url: 上传接口地址,filePath: 要上传的文件路径,name: 后端接收的文件参数名,formData: {/…

58. 最后一个单词的长度(Java)

题目描述 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 输入&#xff1a; s “luffy is still joyboy” 输出&#xff1a; 6 解释&am…