大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来,通过对多款主流大语言模型进行了调研,我们针对其训练方法和模型特点进行逐一分析,方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。

 

01各模型结构及特点


自从2017年6月谷歌推出Transformer以来,它已经成为自然语言处理领域的重要里程碑和核心模型之一。从2018年至今推出的主流模型GPT、BERT、T5、ChatGLM、LLaMA系列模型,都是以Transformer为基本架构实现的。


BERT

使用了Transformer中Encoder编码器。

特点:

1. 双向注意力,也就是说每个时刻的Attention计算都能够得到全部时刻的输入,可同时感知上下文。

2. 适合文本理解,但不适合生成任务。


GPT

使用Transformer中Decoder解码器。

特点:

1. 单向注意力,无法利用下文信息。

2. 适合文本生成领域。


T5

采用Transformer的Encoder-Decoder结构。

改动:

1. 移除了层归一化的偏置项。

2. 将层归一化放置在残差路径之外。

3. 使用了相对位置编码,且是加在Encoder中第一个自注意力的Query和Key乘积之后。

特点:

1. 编码器的注意力是双向的,解码器的注意力是单向的,所以可以同时胜任理解和生成任务。

2. 参数量大。


LLaMA

使用Transformer中Decoder解码器。

改动:

1. 预归一化。对每个Transformer子层的输入进行规范化,而不是对输出进行规范化。

2. SwiGLU激活函数。采用SwiGLU激活函数替换了ReLU。

3. 旋转嵌入。删除了绝对位置嵌入,而在网络的每一层增加了旋转位置嵌入。

特点:

1. LLaMA-13B比GPT-3(参数量为175B)小10倍,但在大多数基准测试中都超过了GPT-3。

2. 没有将中文语料加入预训练,LLaMA在中文上的效果很弱。


ChatGLM

ChatGLM是基于GLM-130B训练得到的对话机器人。GLM使用了一个单独的Transformer。

改动:

1. 自定义Mask矩阵。

2. 重新排列了层归一化和残差连接的顺序。

3. 对于输出的预测标记,使用了一个单独的线性层。

4. 将ReLU激活函数替换为GeLU函数。

5. 二维位置编码。

特点:

通过Mask矩阵,GLM把BERT、GPT、T5这3个模型优点结合起来:

0a9a6f6f8ad6189f6dee9aad657bb5ea.jpeg


1. 当整个的文本被Mask时,空白填充任务等价于无条件语言生成任务。

2. 当被掩码的片段长度为1时,空白填充任务等价于掩码语言建模任务。

3. 当文本1和文本2拼接在一起时,再将文本2掩码掉,空白填充任务等价于有条件语言生成任务。


随机从一个参数为3的泊松分布中采样片段的长度,直到至少遮盖了原始Token的15%。然后在文本中随机排布填空片段的位置,如Part B所示。另外,Position 1表示的是Mask后的文本中的位置,Position 2表示的是在Mask内部的相对位置。


02训练方法及训练目标

各大语言模型的训练基本都是基于大规模无标签语料来训练初始的语言模型,再利用下游任务的有标签训练语料,进行微调训练。


BERT

BERT使用了Transformer的Encoder作为Block,既参考了ELMo模型的双向编码思想,参考了GPT用Transformer作为特征提取器的方法,又参考了 Word2Vec所使用的CBOW方法。

BERT的训练方法

分为两个阶段,分别是多任务训练目标的预训练阶段和基于有标签语料的微调阶段。

BERT的预训练目标

• 掩码语言模型:Masked Language Model(MLM),目的是提高模型的语义理解能力,即对文本进行随机掩码,然后预测被掩码的词。

• 下句预测:Next Sentence Prediction(NSP),目的是训练句子之间的理解能力,即预测输入语句对(A,B)中,句子B是否为句子A的下一句。


T5

T5模型采用Transformer的Encoder和Decoder,把各种NLP任务都视为Text-to-Text任务。

T5的训练方法

同样采用了预训练和微调的训练策略。

T5模型采用了两个阶段的训练:Encoder-Decoder Pretraining(编码器-解码器预训练)和 Denoising Autoencoder Pretraining(去噪自编码器预训练)。

  • 在Encoder-Decoder Pretraining阶段,T5模型通过将输入序列部分遮盖(用特殊的占位符替换)然后让模型预测被遮盖掉的词或片段。这可以帮助模型学习到上下文理解和生成的能力。

  • 在Denoising Autoencoder Pretraining阶段,T5模型通过将输入序列部分加入噪声或随机置换,然后将模型训练为还原原始输入序列。这可以增强模型对输入的鲁棒性和理解能力。


T5的预训练目标

类似BERT的MLM。T5中可Mask连续多个Token,让模型预测出被Mask掉的Token到底有几个,并且是什么。

c63514aec46171a24b145e0b09130b19.jpeg


GPT

GPT采用两阶段式训练方法

第一阶段:在没有标注的数据集中进行预训练,得到预训练语言模型。

第二阶段:在有标注的下游任务上进行微调。(有监督任务上进行了实验,包括自然语言推理、问答、语义相似度和文本分类等。)

除了常规的有监督微调,引入RLHF(人类反馈强化学习)之后,还需要:

  • 收集数据并训练奖励模型。

  • 使用强化学习对语言模型进行微调。

GPT的训练目标

是从左到右的文本生成,无条件生成。


GPT2

  • 在无Finetune的Zero-Shot场景下进行,也就是“无监督,多任务”。

  • 在原始Input上加入任务相关Prompt,无需微调也可做任务。

 

GPT3

  • 2020年5月模型参数规模增加到1750亿,大力出奇迹,预训练后不需要微调。

  • 提出了In-Context Learning。

  • 2020年9月,GPT3引入RLHF。

  • 2022年3月的OpenAI发布InstructGPT,也就是GPT3+Instruction Tuning+RLHF+PPO。


GPT4

2023年3月,GPT4支持图片形式输入。


LLaMA

训练一系列语言模型,使用的更多的Token进行训练,在不同的推理预算下达到最佳的性能。

模型参数包括从7B到65B等多个版本:

a220b20667271de592e32e45efc60625.jpeg


LLaMA的训练方法

  • 无监督预训练。

  • 有监督微调,训练奖励模型,根据人类反馈进行强化学习。

LLaMA的任务

零样本和少样本任务,并在总共20个基准测试上报告了结果:

  • 零样本。提供任务的文本描述和一个测试示例。模型要么通过开放式生成提供答案,要么对提出的答案进行排名。

  • 少样本。提供任务的几个示例(1到64个)和一个测试示例。模型将这个文本作为输入,并生成答案或对不同选项进行排名。

LlaMA2相比于LLaMA

1. 支持更长的上下文,是LLaMA的2倍。

2. 提出Grouped-Query Attention,加速推理。

3. 提出Ghost Attention让多回合对话前后一致。


ChatGLM

对话机器人ChatGLM是基于GLM-130B模型训练得到的。结合模型量化技术,得到可在普通显卡部署的ChatGLM-6B。

GLM的预训练目标

  • 文档级别的目标:从原始本文长度的50%到100%之间均匀分布的范围中进行抽样,得到片段。该目标旨在生成较长的文本。

  • 句子级别的目标:限制被Mask的片段必须是完整的句子。抽样多个片段(句子)来覆盖原始Tokens的15%。该目标旨在用于Seq2seq任务,其中预测通常是完整的句子或段落。

 ChatGLM的训练方法

无标签预训练,有监督微调、反馈自助、人类反馈强化学习等技术。


 大语言模型小结

大语言模型的训练方式基本是海量无标签数据预训练,下游再用有标签数据微调。从GPT3开始,ChatGLM、LLaMA系列模型也都引入了基于人类反馈的强化学习,让模型与人类偏好对齐,这是一个很酷的想法。


03ChatGLM2-6B在K8S上的实践


获取项目代码和模型文件,相关链接如下

(https://github.com/THUDM/ChatGLM2-6B/tree/main)

基于UCloud云平台的K8S实践

可参照UCloud文档中心(https://docs.ucloud.cn),登录UCloud控制台(https://console.ucloud.cn/uhost/uhost/create),创建UFS、创建UK8S。


创建文件存储UFS

先创建文件系统,将模型文件存储到UFS中,之后记得添加挂载点。

c1f9885902a1a9e61e97330775299e50.jpeg


这是可选项,UFS优点是可多节点挂载。如果不使用UFS,模型文件可放在其他位置,需要在后续的ufspod.yml文件中做相应修改。


创建容器云UK8S

首选创建集群:

b69a0b3ede7e90786554aa2c8ae4150e.jpeg


可自由选择Node节点到配置:

4ad2e9bed356d74cc9d734618bf090a4.jpeg


创建好了之后,界面如下:

efa6527f8630c63f934c15ec228e9bc3.jpeg


接下来可点击右侧的“详情”按钮,在跳转到的新页面左侧,点击“外网凭证”对应行的“查看”,可以看到如下图所示:

3babc043ed760a5c67d35f87cacc3090.jpeg


根据提示,保存文本内容到~/.kube/config文件中。


在UK8S中的Node节点:

  • 安装Docker

  • 安装英伟达GPU驱动

  • 安装NVIDIA Container Toolkit


在UK8S中使用UFS

根据在UK8S中使用UFS(https://docs.ucloud.cn/uk8s/volume/ufs?id=在uk8s中使用ufs)的文档说明,创建PV和PVC。

 登录UK8S的Node节点

首先参照文档安装及配置Kubectl(https://docs.ucloud.cn/uk8s/manageviakubectl/connectviakubectl?id=安装及配置kubectl)。


1. 先放上配置文件Ufspod.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myfrontend
spec:
  selector:
    matchLabels:
      app: myfrontend
  replicas: 1
  template:
    metadata:
      labels:
        app: myfrontend
    spec:
      containers:
        - name: myfrontend
          image: uhub.service.ucloud.cn/yaoxl/chatglm2-6b:y1
          volumeMounts:
            - mountPath: "/app/models"
              name: mypd
          ports:
            - containerPort: 7861
      volumes:
        - name: mypd
          persistentVolumeClaim:
            claimName: ufsclaim
---
apiVersion: v1
kind: Service
metadata:
  name: myufsservice
spec:
  selector:
    app: myfrontend
  type: NodePort
  ports:
    - name: http
      protocol: TCP
      port: 7861
      targetPort: 7861
      nodePort: 30619


2. 执行配置文件Ufspod.yml

kubectl apply -f ufspod.yml


3. 进入Pod

首先通过命令得到Pod Name:

kubectl get po
#NAME               READY   STATUS    RESTARTS   AGE
#myfrontend-5488576cb-b2wqw   1/1     Running   0          83m


在Pod内部启动一个Bash Shell:

kubectl exec -it <pod_name> -- /bin/bash


4.&nbsp;打开网页版的Demo

执行:

python3 web_demo.py


得到:

4805b0493e945204ae3c141ee260cdd5.jpeg


UCloud将持续关注大语言模型的发展,并在后续发布有关LlaMA2实践、LangChain构建云上推理环境等方面的文章。欢迎大家保持关注并与我们进行更多交流探讨!

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

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

相关文章

FlexTools plugin and 3dWindow plugin for SketchUp Crack

FlexTools v2.3.6 plugin for SketchUp 3dWindow v.4.5 plugin for SketchUp 建筑师和3D艺术家使用FlexTools创建SketchUp门、窗、楼梯和其他建筑元素&#xff0c;具有卓越的速度和控制水平。 SketchUp功能强大但易于使用的扩展。对于在施工图或建筑图中使用SketchUp的每个人…

034_小驰私房菜_[问题复盘] Qcom平台,某些三方相机拍照旋转90度

全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 【一、问题】 某些三方相机,预览正常,拍照旋转90度 【二、问题排查】 1 ) HAL这边Jpeg编码数据在哪个地方…

C# 随机法求解线性规划问题 蒙特卡洛

线性规划问题: max3x12x2 x12x2<5 2x1x2<4 4x13x2<9 x1>0 x2>0 正确的结果:x11.5; x21, max z6.5 Random random1 new Random(DateTime.Now.Millisecond);Random random2 new Random(DateTime.Now.Millisecond*DateTime.Now.Millisecond);double max-9999,x1…

Pycharm与Anaconda Python的开发环境搭建

目录 一&#xff1a;下载 二&#xff1a;安装python 三&#xff1a;设置Pycharm 一&#xff1a;下载 下载Anaconda&#xff1a; Anaconda | The World’s Most Popular Data Science Platform 安装好以后&#xff0c;设置一下环境变量&#xff1a; 打开命令行&#xff0c…

UI界面设置

文章目录 1. 修改 share.html 内容如下&#xff1a;2. 修改 html 文件格式为 utf-83.保存&#xff0c;运行程序4. 访问页面 1. 修改 share.html 内容如下&#xff1a; <!DOCTYPE html><html> <head><meta charset"utf-8"><title>1v1屏…

uniapp 官方扩展组件 uni-combox 实现:只能选择不能手写(输入中支持过滤显示下拉列表)

uniapp 官方扩展组件 uni-combox 实现&#xff1a;只能选择不能手写&#xff08;输入中支持过滤显示下拉列表&#xff09; uni-comboxuni-combox 原本支持&#xff1a;问题&#xff1a; 改造源码参考资料 uni-combox uni-combox 原本支持&#xff1a; 下拉选择。输入关键字&am…

【002】学习笔记之typescript的【任意类型】

任意类型 顶级类型&#xff1a;any类型和 unknown 类型 any类型 声明变量的时候没有指定任意类型默认为any任意类型都可以赋值给any&#xff0c;不需要检查类型。也是他的弊端如果使用any 就失去了TS类型检测的作用 unknown 类型 TypeScript 3.0中引入的 unknown 类型也被认为…

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意&#xff1a;一个数组&#xff0c;找到和最大的子串 我的思路 我记得好像On的动态规划来做的&#xff1f;但是想不起来了&#xff0c;先死做&#xff0c;用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…

XDR解决方案成为了新的安全趋势

和当今指数倍增长的安全数据相比&#xff0c;安全人才的短缺带来了潜在的风险。几乎所有的公司&#xff0c;无论规模大小&#xff0c;在安全资源能力上都有限&#xff0c;需要过滤各种告警才能将分析量保持在可接受范围。但这样一来&#xff0c;潜在的威胁线索就可能被埋没&…

docker的资源控制管理——Cgroups

目录 一、对CPU使用率的控制 1.1 CPU 资源控制 1.2 cgroups有四大功能 1.3 设置cpu使用率上限 查看周期限制和cpu配额限制 进行cpu压力测试然后修改每个周期的使用cpu的时间&#xff0c;查看cpu使用率 1.4 设置cpu资源占用比&#xff08;设置多个容器时才有效&#xf…

跨境外贸业务,选择动态IP还是静态IP?

在跨境业务中&#xff0c;代理IP是一个关键工具。它们提供了匿名的盾牌&#xff0c;有助于克服网络服务器针对数据提取设置的限制。无论你是需要经营管理跨境电商店铺、社交平台广告投放&#xff0c;还是独立站SEO优化&#xff0c;代理IP都可以让你的业务程度更加丝滑&#xff…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光标移动复制粘贴内容查找 底线命令行模式 前言 用vim指令进入文件。 刚进入时是命令行模式&#xff0c;也叫一般模式。 按i或者insert进入编辑模式&#xff0c;此时可以编辑文件内容。 按esc可从编辑模式退回到一般模式&#xff0c;输入冒号进…

基于 spring boot 的动漫信息管理系统【源码在文末】

半山腰总是最挤的&#xff0c;你得去山顶看看 大学生嘛&#xff0c;论文写不出&#xff0c;代码搞不懂不要紧&#xff0c;重要的是&#xff0c;从这一刻就开始学习&#xff0c;立刻马上&#xff01; 今天带来的是最新的选题&#xff0c;基于 spring boot 框架的动漫信息管理系…

Linux系统安装Google Chrome

1.进入谷歌浏览器官网 Google Chrome - Download the Fast, Secure Browser from GoogleGet more done with the new Google Chrome. A more simple, secure, and faster web browser than ever, with Google’s smarts built-in. Download now.http://www.google.cn/intl/en_…

Azure如何启用网络观察应用程序

文章目录 基础概念介绍实操 基础概念介绍 Azure中的网络观察应用程序是一种用于监视和诊断Azure网络的工具。它提供了一种集中管理和监控网络流量、连接性和性能的方式。网络观察应用程序能够提供网络流量分析、连接监视、性能监视和故障诊断等功能&#xff0c;用于帮助管理员…

K8S核心组件etcd详解(下)

1 k8s如何使用etcd 在k8s中所有对象的manifest都需要保存到某个地方&#xff0c;这样他们的manifest在api server重启和失败的时候才不会丢失。 只有api server能访问etcd&#xff0c;其它组件只能间接访问etcd的好处是 增强乐观锁系统及验证系统的健壮性 方便后续存储的替换…

使用 BERT 进行文本分类 (01/3)

摄影&#xff1a;Max Chen on Unsplash 一、说明 这是使用 BERT 语言模型的一系列文本分类演示的第一部分。以文本的分类作为例&#xff0c;演示它们的调用过程。 二、什么是伯特&#xff1f; BERT 代表 来自变压器的双向编码器表示。 首先&#xff0c;转换器是一种深度学习模…

SpringBoot 操作Redis、创建Redis文件夹、遍历Redis文件夹

文章目录 前言依赖连接 RedisRedis 配置文件Redis 工具类操作 Redis创建 Redis 文件夹查询数据遍历 Redis 文件夹 前言 Redis 是一种高性能的键值存储数据库&#xff0c;支持网络、可基于内存亦可持久化的日志型&#xff0c;而 Spring Boot 是一个简化了开发过程的 Java 框架。…

【TA 挖坑02】RayMarching SDF 物体黏合

写在前面 由于实习和忙着论文很久没经营博客了&#xff0c;最近以各种方式收集到了一些想实现的效果&#xff0c;其中一个就是卡通云融合、变大变小、聚散收拢的效果如何实现的问题&#xff0c;这就不得不提搁置了很久的RayMarching... 挖坑&#xff01;整理一下有帮助的文章…

AWS WAF实战、优势对比和缺陷解决

文章目录 挑战和目标AWS WAF的优势AWS WAF的不足我是怎么做的?什么是比较好的AWS WAF设计? 笔者为了解决公司Web站点防御性问题&#xff0c;较为深入的研究AWS WAF的相关规则。面对上千万的冲突&#xff0c;笔者不得设计出一种能漂亮处理冲突数据WAF规则。 AWS WAF开发人员在…