写点什么

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:223747

评论

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

Unity 之 音频类型和编码格式介绍

陈言必行

三周年连更

算法题每日一练:组合总和 Ⅳ

知心宝贝

数据结构 算法 前端 后端 三周年连更

跨平台应用开发进阶(五十三):uni-app 通过webview方式嵌套H5实现图片点击下载

No Silver Bullet

uni-app 跨平台应用开发 三周年连更 web-view

winDbg 提示 Unable to verify checksum for IOCommModel.exe

linux大本营

网络安全 数字证书

uniapp配置基本的tabbar和动态修改内容

格斗家不爱在外太空沉思

uni-app 三周年连更

Discourse 服务器上手动升级

HoneyMoose

Spring中事务嵌套这么用一定得注意了!!

JAVA旭阳

Java spring

强大的音频分析编辑工具:Amadeus Pro 汉化激活版

真大的脸盆

Mac Mac 软件 音频编辑 音频处理工具 编辑音频

缓解过拟合方法

linux大本营

SpringBoot之Tomcat与Undertow容器性能对比 | 超级详细,建议收藏

bug菌

tomcat 三周年连更 Undertow

设计模式之原型模式和建造者模式

共饮一杯无

设计模式 建造者模式 三周年连更

【Python实战】XPath采集数据

BROKEN

三周年连更

面试必考: 手撕代码系列(一)

Immerse

JavaScript 手写代码 前端面试 手撕代码 超全前端面试题

【Linux】iptables之防火墙概述及规则匹配+实例(1)

A-刘晨阳

Linux iptables 防火墙规则 三周年连更

领先企业的数智化进入2.0阶段,需要升级数智底座

用友BIP

@PathVariable 和 @RequestParam 的区别

linux大本营

leaflet加载聚合

linux大本营

Qz学算法-数据结构篇(链表、栈)

浅辄

数据结构 链表 三周年连更

创新引领・数创未来 | 数据流通与治理专题论坛交流会顺利召开

郑州埃文科技

基于Java+Dubbo设计的智能公交查询系统

DS小龙哥

三周年连更

Django笔记十三之select_for_update等选择和更新等相关操作

Hunter熊

Python django select_for_update bulk_create update_or_create

基于Ubuntu安装Kubernetes集群指南

王玉川

Kubernetes 云原生 k8s 安装 集群

Gradle工程适配为Hvigor工程

坚果

OpenHarmony 三周年连更

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0 (Ⅴ)

字节跳动数据平台

数据仓库 云原生 白皮书 企业号 4 月 PK 榜

C++grpc 服务器接收到请求后如何处理

linux大本营

gRPC 序列化 protobuf C++

delphi中TServerSocker使用stThreadBlocking模式的例子

linux大本营

Go 语言中的 Slice 陷阱:如何避免常见错误

陈明勇

Go golang 切片 三周年连更 切片陷阱

AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

王吉伟频道

RPA AI大模型 ChatGPT RPAxAI 企业级RPA

ES开发指南|如何快速上手ElasticSearch

浅羽技术

全文检索 搜索 Lucence Elastic Search 三周年连更

ChatGPT安全受质疑 网信办发布生成式人工智能服务管理办法意见稿

郑州埃文科技

什么叫函数的注册,用c++举个例子

linux大本营

c++ 函数

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