大模型笔记【2】 LLM in Flash

Apple最近发表了一篇文章,可以在iphone, MAC 上运行大模型:【LLM in a flash: Efficient Large Language Model Inference with Limited Memory】。

图片

主要解决的问题是在DRAM中无法存放完整的模型和计算,但是Flash Memory可以存放完整的模型。但是Flash带宽较低,LLM in Flash通过尽量减少从Flash中加载参数的数量,优化在DRAM中的内存管理,实现在Flash带宽有限的条件下提高计算速度的目的。


这篇文章很多都是工程上的细节,很少理论。下面是这篇论文的总结,如有不对的地方,欢迎私信。

  • 利用FeedForward 层的稀疏度,只加载FeedForward层输入非0和预测输出非0的参数

  • 通过Window Sliding 只加载增量的参数,复用之前的计算,减少需要加载的参数。

  • 将up-projection的row和down-projection的column放在一起存放,这样在flash中可以一次读取比较大的chunk,提高flash的带宽利用效率。

    如下图所示,chunk越大,带宽也就越大,初始加载chunk的latency可以被平摊。

    图片


1. 大模型在FeedForward layer有超过90%的稀疏度。将embedding和attention 矩阵一直保存在DRAM中。Attention 的权重占据了model总量的1/3。对于FeedForward Layer,只有非稀疏的部分被动态的加载进去DRAM。

2. 预测Relu层的稀疏性。在attention层的输出后面增加low-rank predictor,预测在relu层之后可能是0的元素。

经过优化后,最终只需要加载2%的FeedForward层的参数到DRAM中。

图片

3. Sliding Window

每次滑动窗口,在生成新的token后,删掉不在window内的neuron,增加新的neuron。

图片

上图右侧为一个window size为5的示意图,粉色的是要删除的元素,蓝色的是新加入的元素。

上图左侧是如何在aggregated usage和incremental transfer中保持平衡,window设置的越大,每次新需要加载neruon也就越少,但是需要在memory中累计保存的空间占用的也就越大。

上图左侧的目标就是如何让aggregated usage和incremental transfer都比较小。

译者疑问:这个window就是Longformer: The Long-Document Transformer 中的sliding window吗?欢迎私信。

4. 内存管理

内存管理也是因为sliding window引入的。

译者注:

就像c++中vector的维护一样,如果每次删除vector中间的一个元素,都需要导致该元素后面所有元素的移动。

下图描述的就是删除和加入新neuron的内容。

图片

最后文章还提出了比较有意思的一点,他们主要进行了稀疏化的优化,在计算和加载参数方面。他们也尝试了通过和当前neuron关系紧密的 “closest friend”绑定,每次加载neuron时,也都加载他的closest friend。

作者说但是这样带来了负面作用,因为存在一些closest friend是很多neuron的closest friend (译者注:类似于大众之友),这些neuron被频繁的加载到DRAM中,反而降低了性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark Core------算子介绍

RDD基本介绍 什么是RDD RDD:英文全称Resilient Distributed Dataset,叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。 Resilient弹性:RDD的数据可以存储在内存或者磁盘…

vue简体繁体互转无需做字库

第一种方法 vue-i18n 需要自己写字库库很麻烦,而且不支持后端传值 第二种 opencc 这个库前端去使用的时候 数据较多的情况非常慢.影响使用 第三种 language-hk-loader npm i language-hk-loader 从其他博客中看到的一种,很方便不需要写字库,但是在打包的时候去整体的去翻译…

Samtec技术Demo | 优秀的PCIe 6.0性能:Rohde Schwarz公司VNA验证Samtec高速电缆

【摘要/前言】 Design-Con 2023的现场产品演示展现了Samtec Flyover高速电缆组件和Rohde & SchwarzZNA矢量网络分析仪的杰出PCIe 6.0性能。 在本期的视频中,Rohde & Schwarz公司的VNA产品规划经理Greg Vaught和Samtec公司的技术营销经理Matt Burns带领我们…

PyTorch|构建自己的卷积神经网络--池化操作

在卷积神经网络中,一般在卷积层后,我们往往进行池化操作。实现池化操作很简单,pytorch中早已有相应的实现。 nn.MaxPool2d(kernel_size ,stride ) 这种池化叫做最大池化。 最大池化原理很简单,就是一个filter以一定的stride在原…

led手电筒照明线性恒流驱动芯片推荐:SM2123EGL双通道可调光

LED手电筒照明线性恒流驱动芯片是一种专门用于LED手电筒的照明系统的关键组件。它采用了线性恒流驱动技术,可以确保LED手电筒在不同电池电压和温度变化下,保持恒定的亮度输出,提高了LED手电筒的稳定性和可靠性。 LED手电筒照明线性恒流驱动芯…

3.6 QUERYING DEVICE PROPERTIES

我们关于将执行资源分配给区块的讨论提出了一个重要问题。我们如何确定可用资源的数量?当CUDA应用程序在系统上执行时,它如何确定设备中的SM数量以及可以分配给每个SM的块和线程数量?可能与执行CUDA应用程序相关的其他资源尚未讨论。一般来说…

Python 自学(六) 之函数

目录 1. python函数的基本结构 P168 2. python函数的可变参数(不定长) *parameter P169 3. python函数的返回值(单个或多个) P173 4. python的匿名函数 lambda P177 1. python函数的基本结构 P168 2. python函数的可变参数(不定…

Samtec卓越应用 | SEARAY:最大限度提高设计灵活性和密度

【摘要/前言】 SEARAY™是Samtec 的高速、高密度栅格阵列连接器系列。SEARAY™为设计人员提供了大量的设计灵活性,远远超过业内任何其他阵列产品。 【灵活性】 SEARAY™ 是一种 1.27 毫米 X 1.27 毫米的栅格。它是一种开放式引脚字段栅格阵列,即引脚不…

找不到api-mswin-crt-runtime-|1-1-0.dll的修复方法解析

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“api-ms-win--crt-runtime-|1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中,它表示一个关键的动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&…

docker/华为云cce 部署nacos 2.3.0 集群模式

镜像地址 https://hub.docker.com/r/nacos/nacos-server 版本 nacos/nacos-server:v2.3.0-slim 关键环境变量 使用mysql数据源 变量值备注MODEcluster启用集群模式MYSQL_SERVICE_DB_NAME数据库名MYSQL_SERVICE_USER数据库用户名MYSQL_SERVICE_PASSWORD数据库密码SPRING_D…

【愚公系列】2023年12月 HarmonyOS教学课程 049-Stage模型(AbilityStage组件容器)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主&#xf…

护眼灯哪个品牌最好?2024年十大护眼灯品牌排行榜

由于科技水平的提高和电子产品的普及,儿童青少年的近视率正逐年攀升,出现低龄化现象,面对眼健康问题的严峻形势,我们应该还有爱眼意识、加强眼健康知识普及!现在呢,护眼台灯被越来越多的人发现了&#xff0…

【设计模式】解释器模式

一起学习设计模式 目录 前言 一、概述 二、结构 三、案例实现 四、优缺点 五、使用场景 总结 前言 【设计模式】——行为型模式。 一、概述 如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。 …

C++类与对象基础(5)——日期类的实现

对于实现日期类中需要用到的例如:构造函数,析构函数,运算符重载等内容,已经在前面几篇文章中进行介绍,故本文只给出关于类和对象中日期类的代码实现,对于代码的原理不给予详细的解释: 1.头文件…

[VUE]1-创建vue工程

目录 基于脚手架创建前端工程 1、环境要求 2、操作过程 3、工程结构 4、启动前端服务 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法&#xff0c…

Commander One for Mac:强大的双窗格文件管理器,让你的工作效率倍增!

Commander One for Mac是一款功能强大的文件管理工具,具有以下主要功能: 双窗格设计:主界面分为两个窗格,用户可以在左侧窗格中导航和浏览文件系统的目录结构,在右侧窗格中查看文件和文件夹的内容。文件操作&#xff…

Java:结束本机端口被占用进程

前言 在实际开发当中我们,往往在idea中将某个服务的启动给关闭了,但是在nacos的某个服务上,我们却可以看到本地别名服务还是在上面挂载着本地再次启动的时候就提示【端口被占用】,今天就说一下如何解决这个问题 操作 点击即可预…

C++_命令行操作

命令行操作 介绍第一步编译 源码第二部 找到exe 可执行文件第三步看图操作代码测试源码测试结果 介绍 本文介绍命令行操作 1.argc 表示当前输入 参数个数 2.argv 表示当前输入 字符串内容 第一步编译 源码 #include<iostream> #include<string>using namespace st…

el-table 展开行表格,展开的内容高度可以变化时,导致的固定列错位的问题

问题描述 一个可展开的表格&#xff08;列设置了type“expand”&#xff09;&#xff0c;并且展开后的内容高度可以变化&#xff0c;会导致后面所有行的固定列错位&#xff0c;图如下&#xff0c;展示行中是一个树形表格&#xff0c;默认不展示子级&#xff0c;点击树形表格的…

R4S软路由如何在iStoreOS后配置远程桌面本地电脑公网地址

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…