你的GPU能跑Llama 2等大模型吗?用这个开源项目上手测一测

2023-11-06 17:52

本文主要是介绍你的GPU能跑Llama 2等大模型吗?用这个开源项目上手测一测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你的 GPU 内存够用吗?这有一个项目,可以提前帮你查看。

在算力为王的时代,你的 GPU 可以顺畅的运行大模型(LLM)吗?

对于这一问题,很多人都难以给出确切的回答,不知该如何计算 GPU 内存。因为查看 GPU 可以处理哪些 LLM 并不像查看模型大小那么容易,在推理期间(KV 缓存)模型会占用大量内存,例如,llama-2-7b 的序列长度为 1000,需要 1GB 的额外内存。不仅如此,模型在训练期间,KV 缓存、激活和量化都会占用大量内存。

我们不禁要问,能不能提前了解上述内存的占用情况。近几日,GitHub 上新出现了一个项目,可以帮你计算在训练或推理 LLM 的过程中需要多少 GPU 内存,不仅如此,借助该项目,你还能知道详细的内存分布情况、评估采用什么的量化方法、处理的最大上下文长度等问题,从而帮助用户选择适合自己的 GPU 配置。

图片

项目地址:https://github.com/RahulSChand/gpu_poor

不仅如此,这个项目还是可交互的,如下所示,它能计算出运行 LLM 所需的 GPU 内存,简单的就像填空题一样,用户只需输入一些必要的参数,最后点击一下蓝色的按钮,答案就出来了。

图片

交互地址:https://rahulschand.github.io/gpu_poor/

最终的输出形式是这样子的:

{ "Total": 4000, "KV Cache": 1000, "Model Size": 2000, "Activation Memory": 500, "Grad & Optimizer memory": 0, "cuda + other overhead": 500}

至于为什么要做这个项目,作者 Rahul Shiv Chand 表示,有以下原因:

  • 在 GPU 上运行 LLM 时,应该采用什么的量化方法来适应模型;

  • GPU 可以处理的最大上下文长度是多少;

  • 什么样的微调方法比较适合自己?Full? LoRA? 还是 QLoRA?

  • 微调期间,可以使用的最大 batch 是多少;

  • 到底是哪项任务在消耗 GPU 内存,该如何调整,从而让 LLM 适应 GPU。

那么,我们该如何使用呢?

首先是对模型名称、ID 以及模型尺寸的处理。你可以输入 Huggingface 上的模型 ID(例如 meta-llama/Llama-2-7b)。目前,该项目已经硬编码并保存了 Huggingface 上下载次数最多的 top 3000 LLM 的模型配置。

如果你使用自定义模型或 Hugginface ID 不可用,这时你需要上传 json 配置(参考项目示例)或仅输入模型大小(例如 llama-2-7b 为 70 亿)就可以了。

接着是量化,目前该项目支持 bitsandbytes (bnb) int8/int4 以及 GGML(QK_8、QK_6、QK_5、QK_4、QK_2)。后者仅用于推理,而 bnb int8/int4 可用于训练和推理。

最后是推理和训练,在推理过程中,使用 HuggingFace 实现或用 vLLM、GGML 方法找到用于推理的 vRAM;在训练过程中,找到 vRAM 进行全模型微调或使用 LoRA(目前项目已经为 LoRA 配置硬编码 r=8)、QLoRA 进行微调。

不过,项目作者表示,最终结果可能会有所不同,具体取决于用户模型、输入的数据、CUDA 版本以及量化工具等。实验中,作者试着把这些因素都考虑在内,并确保最终结果在 500MB 以内。下表是作者交叉检查了网站提供的 3b、7b 和 13b 模型占用内存与作者在 RTX 4090 和 2060 GPU 上获得的内存比较结果。所有值均在 500MB 以内。

图片

图片

这篇关于你的GPU能跑Llama 2等大模型吗?用这个开源项目上手测一测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/358148

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man