当前位置: 首页 > news >正文

chatglm2-6b在P40上做LORA微调 | 京东云技术团队

背景:

目前,大模型的技术应用已经遍地开花。最快的应用方式无非是利用自有垂直领域的数据进行模型微调。chatglm2-6b在国内开源的大模型上,效果比较突出。本文章分享的内容是用chatglm2-6b模型在集团EA的P40机器上进行垂直领域的LORA微调。

一、chatglm2-6b介绍

github: https://github.com/THUDM/ChatGLM2-6B

chatglm2-6b相比于chatglm有几方面的提升:

1. 性能提升: 相比初代模型,升级了 ChatGLM2-6B 的基座模型,同时在各项数据集评测上取得了不错的成绩;

2. 更长的上下文: 我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练;

3. 更高效的推理: 基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%;

4. 更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

二、微调环境介绍

2.1 性能要求

推理这块,chatglm2-6b在精度是fp16上只需要14G的显存,所以P40是可以cover的。

EA上P40显卡的配置如下:

2.2 镜像环境

做微调之前,需要编译环境进行配置,我这块用的是docker镜像的方式来加载镜像环境,具体配置如下:

FROM base-clone-mamba-py37-cuda11.0-gpu# mpich
RUN yum install mpich  # create my own environment
RUN conda create -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ --override --yes --name py39 python=3.9
# display my own environment in Launcher
RUN source activate py39 \&& conda install --yes --quiet ipykernel \&& python -m ipykernel install --name py39 --display-name "py39"# install your own requirement package
RUN source activate py39 \&& conda install -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ \pytorch  torchvision torchaudio faiss-gpu \&& pip install --no-cache-dir  --ignore-installed -i https://pypi.tuna.tsinghua.edu.cn/simple \protobuf \streamlit \transformers==4.29.1 \cpm_kernels \mdtex2html \gradio==3.28.3 \sentencepiece \accelerate \langchain \pymupdf \unstructured[local-inference] \layoutparser[layoutmodels,tesseract] \nltk~=3.8.1 \sentence-transformers \beautifulsoup4 \icetk \fastapi~=0.95.0 \uvicorn~=0.21.1 \pypinyin~=0.48.0 \click~=8.1.3 \tabulate \feedparser \azure-core \openai \pydantic~=1.10.7 \starlette~=0.26.1 \numpy~=1.23.5 \tqdm~=4.65.0 \requests~=2.28.2 \rouge_chinese \jieba \datasets \deepspeed \pdf2image \urllib3==1.26.15 \tenacity~=8.2.2 \autopep8 \paddleocr \mpi4py \tiktoken

如果需要使用deepspeed方式来训练, EA上缺少mpich信息传递工具包,需要自己手动安装。

2.3 模型下载

huggingface地址: https://huggingface.co/THUDM/chatglm2-6b/tree/main

三、LORA微调

3.1 LORA介绍

paper: https://arxiv.org/pdf/2106.09685.pdf

LORA(Low-Rank Adaptation of Large Language Models)微调方法: 冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。

LoRA 的思想:

  • 在原始 PLM (Pre-trained Language Model) 旁边增加一个旁路,做一个降维再升维的操作。
  • 训练的时候固定 PLM 的参数,只训练降维矩阵A与升维矩B。而模型的输入输出维度不变,输出时将BA与 PLM 的参数叠加。
  • 用随机高斯分布初始化A,用 0 矩阵初始化B,保证训练的开始此旁路矩阵依然是 0 矩阵。

3.2 微调

huggingface提供的peft工具可以方便微调PLM模型,这里也是采用的peft工具来创建LORA。

peft的github: https://gitcode.net/mirrors/huggingface/peft?utm_source=csdn_github_accelerator

加载模型和lora微调:

    # load modeltokenizer = AutoTokenizer.from_pretrained(args.model_dir, trust_remote_code=True)model = AutoModel.from_pretrained(args.model_dir, trust_remote_code=True)print("tokenizer:", tokenizer)# get LoRA modelconfig = LoraConfig(r=args.lora_r,lora_alpha=32,lora_dropout=0.1,bias="none",)# 加载lora模型model = get_peft_model(model, config)# 半精度方式model = model.half().to(device)

这里需要注意的是,用huggingface加载本地模型,需要创建work文件,EA上没有权限在没有在.cache创建,这里需要自己先制定work路径。

import os
os.environ['TRANSFORMERS_CACHE'] = os.path.dirname(os.path.abspath(__file__))+"/work/"
os.environ['HF_MODULES_CACHE'] = os.path.dirname(os.path.abspath(__file__))+"/work/"

如果需要用deepspeed方式训练,选择你需要的zero-stage方式:

    conf = {"train_micro_batch_size_per_gpu": args.train_batch_size,"gradient_accumulation_steps": args.gradient_accumulation_steps,"optimizer": {"type": "Adam","params": {"lr": 1e-5,"betas": [0.9,0.95],"eps": 1e-8,"weight_decay": 5e-4}},"fp16": {"enabled": True},"zero_optimization": {"stage": 1,"offload_optimizer": {"device": "cpu","pin_memory": True},"allgather_partitions": True,"allgather_bucket_size": 2e8,"overlap_comm": True,"reduce_scatter": True,"reduce_bucket_size": 2e8,"contiguous_gradients": True},"steps_per_print": args.log_steps}

其他都是数据处理处理方面的工作,需要关注的就是怎么去构建prompt,个人认为在领域内做微调构建prompt非常重要,最终对模型的影响也比较大。

四、微调结果

目前模型还在finetune中,batch=1,epoch=3,已经迭代一轮。

作者:京东零售 郑少强

来源:京东云开发者社区 转载请注明来源

相关文章:

chatglm2-6b在P40上做LORA微调 | 京东云技术团队

背景: 目前,大模型的技术应用已经遍地开花。最快的应用方式无非是利用自有垂直领域的数据进行模型微调。chatglm2-6b在国内开源的大模型上,效果比较突出。本文章分享的内容是用chatglm2-6b模型在集团EA的P40机器上进行垂直领域的LORA微调。 …...

WebGL 同时使用多幅纹理

目录 前言 ​编辑 示例代码 颜色矢量的分量乘法来计算两个纹素最终的片元颜色 注册事件响应函数:loadTexture(),最后一个参数是纹理单元编号。 请求浏览器加载图像: 配置纹理:loadTexture&#xff0…...

探索云计算和大数据分析的崛起:API行业的机遇与挑战【电商大数据与电商API接入】

I. 引言 随着云计算和大数据分析技术的快速发展,企业和个人对数据分析和处理的需求不断增加。在这个信息爆炸的时代,数据已成为企业决策和战略规划的重要基础。云计算提供了强大的计算和存储能力,使得大规模数据的处理和分析变得更加容易和高…...

android studio通过wifi、无线连接设备

AndroidStudio无线wifi调试设备_android studio wifi_zwylovemzj的博客-CSDN博客 使用​​adbWireless​​工具,其能够让手机用无线来取代USB连接而使用ADB工具 1. 手机需要与电脑在同一局域网内 2. 把adbWireless安装到手机上,并开启,上面…...

kafka 3.5 主题分区ISR伸缩源码

ISR(In-sync Replicas):保持同步的副本 OSR(Outof-sync Replicas):不同步的副本。最开始所有的副本都在ISR中,在kafka工作的过程中,如果某个副本同步速度慢于replica.lag.time.max.ms指定的阈值,则被踢出ISR存入OSR&am…...

1-centOS7搭建伪分布式

前言:虚拟机快照的使用 VMware Workstation 软件可以用快照进行迅速的虚拟机状态的切换 ※. 类似于虚拟机备份, 可以使用备份进行快速恢复。 比如没安装jdk之前拍摄快照来备份 ※. 若jdk没安装好或者jdk环境变量配置的有问题, 可以用安装之…...

对开源自动化测试平台MeterSphere的使用感触

1:该平台可以通过接口,参数,配置的维护,然后继续接口自动化“一键测试”,功能还是挺强大的,具体的使用需要研究 MeterSphere的官网:MeterSphere - 专业测试云 2:一键测试在生产环境…...

Spring boot 第一个程序

新建工程 选择spring-boot版本 右键创建类TestController: 代码如下: package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springf…...

【SpringMVC】实现增删改查(附源码)

目录 引言 一、前期准备 1.1.搭建Maven环境 1.2.导入pom.xml依赖 1.3.导入配置文件 ①jdbc.properties ②generatorConfig.xml ③log4j2.xml ④spring-mybatis.xml ⑤spring-context.xml ⑥spring-mvc.xml ⑦修改web.xml文件 二、逆向生成增删改查 2.1.导入相关u…...

理财是什么?怎样学习理财?

大家好,我是财富智星,今天跟大家分享一下理财是什么?怎样学习理财的方法。 一、理财的基本原则 1、理财应注重投资而不是投机,要与时间为友。 让我们先考虑以下问题:什么样的回报才算是真正的高回报?假设有…...

华为云云耀云服务器L实例评测 | 开启OPC UA之旅

OPC Unified Architecture (OPC UA)是一种用于工业自动化的M2M协议(Machine-to-machine),具有平台独立性,在Windows和Linux上都可以运行。随着云服务在工业现场的不断普及,OPCUA服务也开始大量部署在云端。 本文以华为云云耀云服务器L为基础…...

帝国CMS灵动标签如何调用$ecms_hashur[‘ehref‘]函数

我们在二次开发时,后台调用链接就需要加上帝国CMS的$ecms_hashur[ehref]函数,这是帝国CMS后台的安全函数,防止外部直接访问后台页面,直接强制访问后台链接就会提示“非法来源”。 我的站长站分享下制作自定义php页面,用帝国CMS灵动标签如何调用$ecms_hashur[ehref]函数方…...

ES6 拓展(下)

一、函数的拓展 1.1、默认参数 在ES5中设置默认参数: function func(words, name) {name name || "闷墩儿";console.log(words, name); } func("大家好!我是"); func("大家好!我是", "憨憨");func(…...

TouchGFX之自定义触发条件和操作

通过TouchGFX Designer,您可以自己定义具有触发条件和操作的交互组件。 自定义容器创建自定义触发条件:通过自定义容器的属性选项卡添加自定义触发条件 使用交互系统发送自定义触发条件: 通过自定义容器的“交互”选项卡,创建新的…...

Linux防火墙(iptables)

一、linux的防火墙组成 linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。 netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核…...

zookeeper教程

zookeeper教程 zookeeper简介zookeeper的特点及数据模型zookeeper下载安装zookeeper客户端命令zookeeper配置文件zookeeper服务器常用命令zookeeper可视化管理工具zkuizookeeper集群环境搭建zookeeper选举机制使用Java原生api操作zookeeper使用java zkclient库操作zookeeper使用…...

杭州快递物流展-2024长三角快递物流供应链与技术装备展览会(杭州)

2024快递物流创新高质量发展论坛暨 2024长三角快递物流供应链与技术装备展览会(杭州) 时间:2024年4月12-14 日 地点:杭州国际博览中心 ESYE长三角快递物流展是亚洲范围内超大规模的快递物流业展示平台,由于展会的需求 及扩大市场的影响力…...

CSP 202203-1 未初始化警告

答题 要注意是xi和yi的范围&#xff0c;yi可以是0为常数。 #include<iostream> using namespace std;int main() {int n,k;cin>>n>>k;bool*initializenew bool[n]{false};int result0,x,y;while(k--){cin>>x>>y;if(y&&!initialize[y-1…...

开发指导—利用组件插值器动画实现 HarmonyOS 动效

一. 组件动画 在组件上创建和运行动画的快捷方式。具体用法请参考通用方法。 获取动画对象 通过调用 animate 方法获得 animation 对象&#xff0c;animation 对象支持动画属性、动画方法和动画事件。 <!-- xxx.hml --><div class"container"> <di…...

树莓派入门

目录 前言系统烧录使用官方烧录工具选择操作系统选择存储卡配置 Win32DiskImager 有屏幕树莓派开机树莓派关机无屏幕树莓派开机获取树莓派IP地址通过路由器获取共享网络方式获取给树莓派配置静态IP地址查找默认网关分盘给树莓派的IP地址修改树莓派DHCP配置文件 ssh登录 让树莓派…...

告别混乱!WPF项目如何用ResourceDictionary优雅管理样式和转换器(附完整项目结构)

告别混乱&#xff01;WPF项目如何用ResourceDictionary优雅管理样式和转换器&#xff08;附完整项目结构&#xff09; 当WPF项目从Demo阶段步入正式开发&#xff0c;资源管理往往会成为第一个"拦路虎"。我曾接手过一个中型设备管理系统的UI重构&#xff0c;打开项目时…...

Python包安装全攻略:从pip、conda到离线安装,总有一种方法适合你

Python包安装全攻略&#xff1a;从pip、conda到离线安装&#xff0c;总有一种方法适合你 在Python开发中&#xff0c;依赖管理是每个开发者必须掌握的核心技能。无论是数据科学家搭建机器学习环境&#xff0c;还是Web开发者部署Django应用&#xff0c;都离不开Python包的安装与…...

MTKClient实用指南:三步解锁联发科设备的终极解决方案

MTKClient实用指南&#xff1a;三步解锁联发科设备的终极解决方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款专为联发科芯片设备设计的开源逆向工程与刷机工具&#x…...

别再死记硬背公式了!用‘能量流动’视角图解RLC二阶电路,轻松理解零输入响应

能量流动视角&#xff1a;用物理直觉破解RLC二阶电路零输入响应之谜 想象一下&#xff0c;你手中握着一个透明的能量沙漏。上层的沙子&#xff08;电能&#xff09;缓缓流入下层&#xff08;磁能&#xff09;&#xff0c;又因为重力作用回弹&#xff0c;形成有节奏的流动——这…...

TimescaleDB Helm Charts 项目停止维护后的应对策略与迁移指南

1. 项目概述与背景如果你正在Kubernetes上寻找一种可靠、可扩展的方式来部署时序数据库&#xff0c;那么TimescaleDB的Helm Charts项目曾经是一个绕不开的选项。这个由Timescale官方维护的仓库&#xff0c;旨在为开发者提供一套标准化的、声明式的部署方案&#xff0c;让你能通…...

开关电源传导共模噪声抑制:Y电容原理、安规限制与EMI滤波器设计

1. 项目概述&#xff1a;理解隔离式开关电源中的传导共模噪声在开发离线式开关电源&#xff0c;比如我们常见的手机充电器、笔记本电脑适配器或者工业电源模块时&#xff0c;工程师们常常会遇到一个既棘手又必须解决的难题&#xff1a;传导电磁干扰&#xff08;Conducted EMI&a…...

LLM训练实战:8个编程谜题带你掌握分布式训练核心技术

1. 项目概述与核心价值如果你对大型语言模型&#xff08;LLM&#xff09;的训练过程感到好奇&#xff0c;或者你听说过“千卡集群”、“万亿参数”这些词&#xff0c;但总觉得它们离自己很遥远&#xff0c;那么这个名为“LLM Training Puzzles”的项目&#xff0c;就是为你量身…...

Arduino Uno R3 bootloader烧写避坑全记录:从USBasp驱动安装到熔丝位设置(Win10/11实测)

Arduino Uno R3 bootloader烧写实战指南&#xff1a;从驱动配置到熔丝位安全操作 当一块全新的Atmega328P芯片静静躺在工作台上时&#xff0c;它就像一张白纸&#xff0c;等待着被赋予生命。作为硬件开发者&#xff0c;我们常常需要为这些空白芯片注入灵魂——烧写bootloader。…...

003-VXLAN集中式网关实验(命令详解版)

VXLAN集中式网关实验1&#xff08;命令详解版&#xff09;最近有读者私信说刚开始学习VXLAN&#xff0c;实战技巧薄弱、部分命令不是很理解&#xff0c;想循序渐进通过实验过渡到真实项目案例。下面从一个简单的集中式网关实验开始&#xff0c;通过2个基础实验和1个项目实验完成…...

告别编译噩梦:在Ubuntu 22.04上为你的C++项目搞定Abseil依赖的三种方法

告别编译噩梦&#xff1a;在Ubuntu 22.04上为你的C项目搞定Abseil依赖的三种方法 在C项目的开发过程中&#xff0c;依赖管理一直是开发者面临的一大挑战。特别是对于现代C项目而言&#xff0c;如何高效、可靠地引入和管理第三方库&#xff0c;往往决定了项目的开发效率和最终质…...