美文网首页
论文阅读_ChatGLM

论文阅读_ChatGLM

作者: xieyan0811 | 来源:发表于2023-03-25 13:59 被阅读0次

    name_en: GLM-130B: AN OPEN BILINGUAL PRE-TRAINED
    name_ch: Glm-130B:开放双语预训练模型
    paper_addr: https://arxiv.org/abs/2210.02414
    doi: 10.48550/arXiv.2210.02414
    date_read: 2023-03-23
    date_publish: 2023-01-01
    tags: ['深度学习','自然语言处理']
    author: Aohan Zeng
    code: https://github.com/THUDM/GLM-130B/
    citation: 4


    读后感

    2022年11月,斯坦福大学大模型中心对全球30个主流大模型进行了全方位的评测2,GLM-130B 是亚洲唯一入选的大模型。 GLM-130B 在准确性和恶意性指标上与 GPT-3 175B (davinci) 接近或持平。
    ChatGLM最大的优点是开源,并针对中文进行了优化,尤其是可以在自己的机器上搭建其简版的int4服务,实测回答一般性问题效果还不错,文后附环境搭建方法。

    摘要

    ChatGLM是使用中英双语预训练的大语言模型,具有130B参数(1300亿),使用400B token训练。
    在模型结构上结合了GPT和BERT。在英文方面,效果优于GPT-3;在中文方面,优于260B参数的ERNIE TITAN 3.0。可在4×RTX 3090 (24G) 或 8×RTX 2080 Ti (11G) GPUs 环境下运行。

    介绍

    论文提出:通用语言模型General Language Model (GLM) ,主要使用的技术是:双向注意力和自回归空白填充目标。嵌入梯度收缩策略可以显著提升GLM - 130B的训练稳定性。

    方法

    结构

    GLM架构

    与GPT,PaLM等模型使用Transformer的解码器方式不同,GLM-130B使用了一种双向通用语言模型(GLM)作为其Backbone。模型结构详见论文:Glm: General language model pretraining with autoregressive blank infilling (2022).

    GLM是一种基于Transformer的语言模型,它以自回归空白填充为训练目标。简而言之,对于一个文本序列x=[x1, · · · ,xn],从其中采样文本span{s1,· · ·,sm},其中每个si表示连续令牌的跨度,并用单个掩码替换si,要求模型对它们进行自回归恢复。与GPT类模型不同的是,它在不Mask的位置使用双向注意力,因此它混合了两种Mask,以支持理解和生成:

    [MASK]:句子中的短空白,长度加总到输入的某一部分
    [gMASK]:随机长度的长空白,加在提供前缀上下文的句子末尾

    理论上,双向注意力的空白填充目标比GPT风格的模型能够更有效地理解语境:当使用 MASK 时,GLM- 130B表现类似BERT和T5;当使用 gMASK 时,GLM - 130B表现出与 PrefixLM 相似的性质。

    GLM - 130B在零样本LAMBADA上取得了80.2 %的高准确率,优于图2中的GPT - 3和PaLM 540B。

    归一化方法

    归一化有助于提升模型训练的稳定性,文中使用了2022年提出的DeepNorm方法(详见论文 :Deepnet: Scaling transformers to 1,000 layers),其公式为:
    DeepNorm(x) = LayerNorm(α · x + Network(x))
    α = (2N )^{\frac{1}{2}}
    其中N为层数。此方法有效地提升了训练稳定性。

    位置编码和前馈网络

    对于GLM - 130B中的位置编码采用旋转位置编码(RoPE),并选择GeLU激活函数以优化FFN。

    训练设置

    GLM - 130B预训练目标不仅包括自监督的GLM自回归空白填充,还包括对小部分token的多任务学习,以提升其下游zero-shot任务的性能。

    自监督空白填充(95%)

    同时使用了 MASK 和 gMASK,每个序列使用其中一种。具体来说,MASK用于在30 %的训练序列中掩盖连续的Token以进行空白填充。对于其他70%的序列,保留每个序列的前缀作为上下文,并使用gMASK来掩盖其余序列训练。
    预训练数据包括1.2 T英语、1.0 T的中文悟道语料库,以及从网络爬取的250G中文语料库(包括在线论坛、百科全书和QA),形成了平衡的英汉内容构成。

    多任务指导预训练(MIP,5%)

    预训练中加入包括语言理解、生成和信息提取在内的多种指令提示数据集训练模型。

    并行训练和模型配置

    在96个DGX - A100 GPU ( 8 × 40G )服务器集群上进行了60天的训练。将pipline模型并行与其他两种策略结合形成了3D并行策略。

    模型训练的稳定性

    需要在精度和稳定间保持平衡,低精度的FP格式提高了计算效率,但容易出现溢出错误,导致训练崩溃。

    混合精度

    FP16用于前向和后向,FP32用于优化器状态和主权重,以减少GPU内存使用,提高训练效率。

    嵌入层梯度收缩

    实验表明,梯度范数可以作为训练崩溃的信息指标。具体来说,训练崩溃通常滞后于梯度范数中的"尖峰"几个训练步。发现嵌入层的梯度收缩可以克服损失尖峰,从而稳定GLM - 130B的训练。

    在 Rtx 2080 TI 上使用模型推理

    在保持FP16激活精度的同时,重点关注模型权重的量化。量化后的模型在运行时动态转换为FP16精度,引入了较小的计算开销,大大降低了存储模型权重的GPU内存使用量。文中成功地实现了GLM - 130B的INT4权重量化,目前模型已发布,可下载使用。

    实验

    与英文模型比较:

    与中文模型比较:

    实战——环境搭建

    ChatGLM-6B 是一个具有62亿参数的中英双语语言模型,由大模型量化后得到,代码+模型一共只有几个G大小。

    下载代码和模型

    由于我家机器性能有限,就下载了int4模型,约占空间5G左右,运行时占GPU内存5G左右。

    $ git clone https://github.com/THUDM/ChatGLM-6B
    $ git clone https://huggingface.co/THUDM/chatglm-6b-int4/
    

    在网站 https://huggingface.co/THUDM/chatglm-6b-int4/tree/main 中下载:
    ice_text.model 和 pytorch_model.bin 两个大文件,替换git中的文件。

    下载运行环境镜像

    如果使用docker启动,推荐镜像:

    $ docker pull pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime
    

    启动镜像

    $ nvidia-docker run -e "LC_ALL=zh_CN.UTF-8" -e "LANGUAGE=zh_CN.UTF-8" -e "LANG=zh_CN.UTF-8" -p 7860:7860 --rm -v /exports:/workspace/exports -it pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime bash
    

    调整代码

    修改web_demo.py

    • 修改模型名为指定目录:
    tokenizer = AutoTokenizer.from_pretrained("../chatglm-6b-int4/", trust_remote_code=True)
    model = AutoModel.from_pretrained("../chatglm-6b-int4/", trust_remote_code=True).half().cuda()
    
    • 设置server_name为0.0.0.0,以便服务在docker外部调用
    demo.queue().launch(share=False, inbrowser=True, server_name="0.0.0.0")
    

    运行服务

    在镜像内部运行

    $ cd ChatGLM-6B/
    $ pip install -r requirements.txt
    $ python web_demo.py
    

    启动服务后,就可以在宿主机浏览器中通过端口7860访问,效果如下:

    个人觉得速度还挺快的,回答效果也还行。

    相关链接

    ChatGLM项目地址
    ChatGLM模型介绍
    模型下载

    相关文章

      网友评论

          本文标题:论文阅读_ChatGLM

          本文链接:https://www.haomeiwen.com/subject/viknrdtx.html