写点什么

Hugging Face 大语言模型优化技术

  • 2023-10-07
    北京
  • 本文字数:1303 字

    阅读完需:约 4 分钟

大小:684.82K时长:03:53
Hugging Face 大语言模型优化技术

大语言模型的生产部署存在两个主要的挑战,一个是需要大量的参数,一个是需要处理非常长的用于表示上下文信息的输入序列。Hugging Face 基于他们提供大模型服务的经验分享了一些克服这些障碍的技术


Patrick von Platen 在文中介绍的 Hugging Face 研究的三种技术是降低数值精度、使用一种叫作 Flash Attention 的注意力算法,以及使用专门的推理架构


大语言模型需要大量的 VRAM 来加载,从几十(bigcode/starcoder)到数百 GB (Llama、Bloom、GPT3)。第一个优化手段是从float32切换到bfloat16精度:


现在几乎所有的模型都是基于 bfloat16 训练的,如果你的 GPU 支持 bfloat16,就没有理由基于全 float32 精度运行模型。float32 不会给出比训练模型所使用的精度更好的推理结果。


这可以使总体内存消耗减少一半,但可惜的是,在许多情况下仍然需要很大的内存。一种更激进的方法是将模型权重量化为 8 位或 4 位,这已经被证明不会导致显著的性能下降


量化对于文本生成来说特别有效,因为我们所关心的是选择最有可能的下一个标记集合,而不是下一个标记 Logit 分布的确切值。


这将进一步减少所需的内存,使得在只有 16GB VRAM 的 GPU 上运行较小的模型成为可能,尽管代价是推理时间稍长。


von Platen 写道,使用Flash Attention是另一相关键的优化,它是大语言模型用来理解输入标记上下文关系的自注意力层的一种算法,有可能打破输入标记数量的二次增长。


因为该算法太过复杂,无法在这里描述,但可以这么说,它利用了 softmax 规范化统计数据和一些数学手段,在只需要随输入标记线性增长的内存的情况下提供相同的输出。推理性能也得益于算法使用了更快的 SRAM 而不是更慢的 GPU VRAM。


在实践中,目前绝对没有理由不使用 Flash Attention。该算法在数学层面给出了相同的输出,并且速度更快,内存效率更高。


Here recent research can help to make the right choice with two components that quickly become bottlenecks, says von Platen, _positional embeddings_ and the _key-value cache_.


在生产环境中部署大语言模型的第三项优化措施是选择正确的架构,让它们能够有效地处理长文本输入。von Platen 写道,最近的研究有助于我们如何对两个很快成为瓶颈的组件做出选择——一个是_位置嵌入(positional embeddings)_,一个是_键值缓存_。


位置嵌入通过将每个标记的位置编码为数字表示来帮助语言大模型理解序列顺序。对于需要处理大型文本输入任务的大语言模型,应该使用RoPEALiBi等相对位置嵌入技术进行训练。


RoPE 和 ALiBi 位置编码都可以外推到训练期间未遇到过的输入长度,而事实证明,与 RoPE 相比,外推对于开箱即用的 ALiBi 的效果要好得多。


目前的许多大语言模型中已经在使用这两种算法。


键值缓存可以作为对对话上下文进行编码的一种方法。键值缓存在发生每个新交互时增加一个元素,这比为每个请求编码/解码上下文的方法要有效得多。von Platen 详细介绍了两类键值缓存,即Multi-Query-Attention (MQA)Grouped-Query-Attention(GQA)


von Platen 的文章所涵盖的内容不只有本文所概述的这些,他的文章中还提供了实际的例子来证明他的观点,所以请不要错过他的文章。


原文链接

https://www.infoq.com/news/2023/09/hugging-face-optimizing-llms/

2023-10-07 10:224426

评论

发布
暂无评论
发现更多内容

大咖说·图书分享|深入浅出Node.js

大咖说

node.js

从多个角度分析顺序表和链表区别和特点

C++后台开发

数据结构 算法 链表 linux开发 C++开发

多场景下 3-11 倍性能提升,Apache Doris 1.2 新版本性能揭秘!

SelectDB

数据库 数据分析 Clickhouse Doris 数仓

事务

ssun

事务 JAV A 11月月更

如何拆掉跨部门的墙?

PMO实践

项目管理 企业管理 跨部门沟通

面试官:介绍一下 Redis 三种集群模式

Jeremy Lai

redis集群

多云时代,如何构建配置管理数据库?

BoCloud博云

《Python编程:从入门到实践》有奖书评活动来啦!

图灵社区

openGauss的SQL引擎在3.1.0版本中做了哪些优化?

偶数层PCB板为何在PCB多层板中“独领风骚”?

华秋PCB

工艺 PCB PCB设计

精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

BoCloud博云

云原生

openGauss 3.1.0的新型选择率模型大解密

C语言学生管理系统

我是一个茶壶

C语言 学生成绩管理系统 11月月更

openGauss企业级开源数据库荣获2022年度中国计算机学会(CCF)科技进步奖特等奖

使用 Rainbond 搭建本地开发环境

北京好雨科技有限公司

Kubernetes rainbond

公司真的需要PMO吗?

PMO实践

项目管理 PMO

元年智答|数据洞察功能介绍

元年技术洞察

人工智能 数字化转型 智能

欢迎航天宏图加入社区

RocketMQ 客户端负载均衡机制详解及最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

金奖方案 | 一专多能、傲视寰宇,南大通用GBase8c数据库牛在哪里?

海量数据 x 宝兰德 x openGauss Meetup成功举办,广州用户组正式成立!

(Java开发岗)了解大厂面试基本套路及每一轮的重点

程序知音

Java 后端 java面试 java架构 互联网大厂面试

WebGL入门之基于WebGL的Sovit3D可视化平台

2D3D前端可视化开发

数据可视化 WebGL 三维可视化 web3d 3d绘图引擎

为啥PMO困惑的起因和其他职能部门不一样?

PMO实践

项目管理 PMO

Wallys/IPQ8072/IPQ8074/2x(4×4 or 8×8) 11AX/IPQ6010 (IPQ6018 FAMILY)/industrial wifi6 moudle

wallysSK

IPQ6010 ipq6018 IPQ8072 IPQ8074

openGauss的高效数据压缩算法

重磅来袭!爆肝一周整理的多线程&高并发笔记(含面试题+导图+笔记)

小小怪下士

Java 面试 多线程 高并发

瓴羊Quick BI企业数据分析工具,公司运营实时掌控

巷子

openGauss内核荣获中国首个国际CC EAL4+级别认证

openGauss —— 智能优化器之基数估计

京东云正式加入openGauss社区,共筑数据库科技服务供应链

Hugging Face 大语言模型优化技术_生成式 AI_Sergio De Simone_InfoQ精选文章