0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

chatglm2-6b在P40上做LORA微调

京东云 来源:jf_75140285 作者:jf_75140285 2024-08-13 17:12 次阅读

背景:

目前,大模型的技术应用已经遍地开花。最快的应用方式无非是利用自有垂直领域的数据进行模型微调。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的。

wKgaoma7I3aASvk2AADHmpxfTLQ074.png

EA上P40显卡的配置如下:

wKgZoma7I3iAM9EbAAQus7i5EGI540.png

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)微调方法: 冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。

chaijie_default.png

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 model
    tokenizer = 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 model
    config = 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,已经迭代一轮。

wKgaoma7I3qAVUBDAAW1M1mXOuk426.png

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LoRa
    +关注

    关注

    349

    文章

    1668

    浏览量

    231751
  • 大模型
    +关注

    关注

    2

    文章

    2296

    浏览量

    2399
收藏 人收藏

    评论

    相关推荐

    P40能像P2那样拥有FRL吗

    VDI运行一个工程团队,其中3个主机具有K2,并且刚刚获得了带有P40的新服务器。到目前为止,我没有体验到P40的任何优点。如果有什么
    发表于 09-12 15:52

    怎么P40看到cinebench性能

    我想在P40看到cinebench性能,4GB RAM和3vCPU以及不同的P40配置文件P40-24Q,P40-12Q,
    发表于 09-12 15:55

    P40置于图形模式是否无法进行远程渲染?

    试图Windows Server Azure VM使用P40获取图形模式(WDDM)并收到“不支持”消息。是否无法将P40置于图形模式以进行远程渲染?我们目前正在使用M60,它运行
    发表于 09-12 16:13

    NVIDIA Tesla P40动态GPU内存分配可能吗?

    你好是由VM分配的P40修复的GPU内存还是动态的? p40有24GB gpu ram所以让我们采取以下的配置文件p40-1q1024 mb帧缓冲2个虚拟显示器头最大分辨率4096x2
    发表于 09-25 17:27

    华为P40系列曝光P40采用了平面设计P40 Pro采用了曲面设计

    整体来看,华为P40P40 Pro采用了相似的设计语言,当然细微之处还是有差异的。比如屏幕,P40采用平面设计,P40 Pro则采用曲面设计,而且从特写图来看是四曲面屏幕,这一点和数
    发表于 12-19 13:48 4111次阅读

    华为P40带壳渲染图晒出,设计风格与华为P40 Pro类似

    今日早间,消息报道称,华为P40和华为P40 Pro的设计风格类似,但是有一些细节是不一样的。华为P40显示屏为6.1英寸到6.2英寸,平面设计;华为P40 Pro显示屏尺寸为6.5英
    的头像 发表于 12-20 14:33 2923次阅读

    p40怎么升级鸿蒙系统 华为p40现在可以更新鸿蒙系统吗?

    自从华为62号的鸿蒙发布会之后,有很多小伙伴都在问华为p40现在可以更新鸿蒙系统吗?
    的头像 发表于 06-07 11:35 1.1w次阅读

    四川移动发布:将采购华为P40P40 PRO公开版手机63000台

    11月2日消息,近日,四川移动终端公司发布公告称,将采购华为P40P40 PRO公开版手机。 公告显示,本次四川移动采购的华为手机型号为P40(ANA-AN00
    的头像 发表于 11-02 16:03 2257次阅读

    华为p40如何升级鸿蒙系统 操作步骤如下

    华为62日召开了鸿蒙系统发布会,华为官方正式发布了鸿蒙系统,也公布了第一批支持更新的机型,当然华为p40升级鸿蒙系统的队里,华为
    的头像 发表于 06-15 09:44 8599次阅读

    华为p40鸿蒙系统怎么升级

    大家都知道华为鸿蒙HarmonyOS 2发布会已于62日开启,目前华为P40也是支持鸿蒙系统全新升级的。那么华为P40如何升级鸿蒙系统呢?
    的头像 发表于 06-16 15:20 5018次阅读

    p40怎么更新鸿蒙系统

    p40怎么更新鸿蒙系统?p40可以更新鸿蒙系统吗?下面小编就为大家简单介绍一下!
    的头像 发表于 07-08 10:07 4287次阅读

    ChatGLM-6B的局限和不足

    ;ChatGLM-6B 参考了 ChatGPT 的设计思路,千 亿基座模型 GLM-130B 中注入了代码预训练,通过有监督微调等技术实现与人类意图对齐(即让机 器的回答符合人类的期
    的头像 发表于 06-25 11:50 5386次阅读
    <b class='flag-5'>ChatGLM-6B</b>的局限和不足

    ChatGLM2-6B:性能大幅提升,8-32k上下文,推理提速42%,中文榜单位列榜首

    主要评估LLM模型中文能力的 C-Eval 榜单中,截至6月25日 ChatGLM2 模型以 71.1 的分数位居 Rank 0 ,ChatGLM2-6B 模型以 51.7 的分数位
    的头像 发表于 06-26 14:30 955次阅读
    <b class='flag-5'>ChatGLM2-6B</b>:性能大幅提升,8-32k上下文,推理提速42%,<b class='flag-5'>在</b>中文榜单位列榜首

    ChatGLM2-6B解析与TPU部署

    ChatGLM2-6B解析与TPU部署
    的头像 发表于 08-18 11:28 758次阅读
    <b class='flag-5'>ChatGLM2-6B</b>解析与TPU部署

    探索ChatGLM2算能BM1684XINT8量化部署,加速大模型商业落地

    1.背景介绍2023年7月时我们已通过静态设计方案完成了ChatGLM2-6B单颗BM1684X的部署工作,量化模式F16,模型大小12GB,平均速度约为3token/s,详见《
    的头像 发表于 10-10 10:18 3573次阅读
    探索<b class='flag-5'>ChatGLM2</b><b class='flag-5'>在</b>算能BM1684X<b class='flag-5'>上</b>INT8量化部署,加速大模型商业落地