<<< \color{blue}{ (●’◡’●) 点赞 <(- ●’◡’●) }
/\\ //>>>>
/__\\ // 关注加RP,AC更容易!
/ \\ //>>>>>
<<< \color{blue}{ (●’◡’●) 收藏 <(- ●’◡’●) }
大模型突飞猛进,平民化如火如荼。单卡LLM项目到处都是,哪个适合我的8G显存?
急着拉代码配环境,不如先想想这些问题:
大模型能不能放进显卡
先来回顾下<大模型>和<大模型>怎么比大小。
现在通用的模型名称通常会加一个多少多少b后缀,这个b表示的不是大小byte, 而是参数量单位:十亿(billion);再乘以参数表示的类型,大致就是大模型\color{red}{【加载】}需要的显存大小。
比如喜闻乐见的llama-7b,就是参数有70亿;按照原始的double表示,这个模型有:
7,000,000,000 * 4 / 1024 / 1024 / 1024 ≈ 26
26G, 8G显卡可以退散了;
不过好在有量化技术, 把每个模型参数压缩到float,int8,甚至int4。如果采用int4, 模型就可以减小到原来double表示的八分之一,也就是3.25G,装进手机也是轻轻松松。
对一个8G显卡来说,如果采用激进的int4压缩,最多能装进17b参数的模型。不同的显存可以按显存 / 3.25 * 7速算下。
跑模型是什么意思
能加载模型只是第一步,跑模型也要看看跑什么任务。
大模型相关的任务主要有:
- 训练
- 微调
- 推理
从头训练可以不用考虑了,消费级显卡显然是不可能的。
接下来看看微调和推理。微调还有全参数微调和增量微调(lora/qlora)两种。
对任意结构的模型来说,通常情况下,模型全参数微调要存储的参数至少要包含模型每一层被激活的输入与输出(正向传播和反向传播的要求),优化器所需要的梯度和别的一些优化参数,模型本身的参数;最坏情况下,这需要预留4倍模型大小的缓存;这还是batch-size为1的情况,如果batch-size更大,显存消耗也就更大;一般会留模型大小10倍的余量空间。
针对大模型有许多优化的方式,最新的研究成果LOMO能将这个值降到大约1.6倍(24G * 8 显卡微调33B模型;
根据乘数比例,就可以实验自己的显卡是否方便进行全参数微调;
增量微调则是在原来附加层外增加一个小网络;lora仍然是在浮点类型上进行调整,qlora则可以在int8, int4之类的量化模型上进行微调;它们微调的参数量一般只有模型的3%~5%,所以占用的激活函数,优化函数变量都可以大大降低;训练速度也会提升很多。
显然全量微调的时间要比增量微调长得多得多得多, 具体任务下可以进行取舍;玩玩而已,lora足够。
训练lora和qlora会得到一个增量的模型参数,具体拼接的代码对应的github都有。
推理任务需要的显存也和模型结构和精度有关,有些模型如果有旁路,就需要存储很多中间变量;就llama这些大模型而言,推理需要的内存和上下文长度有关;token是512的话,全精度的llama-7b大概占用17G内存;1024估计就需要25G以上;如果用了量化技术,用CPU+内存推理也不是梦。详情可见大模型多快好省之道
不过大模型也不止LLM一种
如果实在只有8G,就玩玩stable diffusion吧,各种开箱即用无视平台,人生的第一个纸片女友,SD值得拥有。
环境确实不好配,python包安装失败一个接一个,哎,cpython,哎,pip
用conda 就好了 基本无痛
conda为什么一直安装不完成啊,一直卡在py311上,等了一天也安装不上
国外的python源连不上 查一下换源教程