2024年3月17日,马斯克旗下人工智能公司xAI 开源了其开发的大模型Grok-1,马斯克一直在指责OpenAI没有开源,大模型Grok-1的开源将压力给到了OpenAI。一个月后,META也就是FACEBOOK开源了其Llama 3大模型。令马斯克尴尬的是,在全球最大的开源AI社区Hugging Face上,Grok-1上月的下载次数仅为4815,而发布不到1个月的Llama 3 8B版本是917538,Llama 3 70B版本是352394。不过在Github上,Grok-1扳回一局,到目前为止,Grok-1的星标高达48.3K,远超Llama3的19.9K,这也表明对Grok-1感兴趣的人很多,但下载下来尝试运行的人极少。这是为什么呢,很简单,Grok-1太大了,参数高达3140亿个,是目前为止参数最多的开源大模型,即便是最低的8位精度,那也是314GB的庞大体积,如果是做训练而不是推理,需要用FP32精度,1256GB。目前提供下载的版本是296.38GiB,也就是317.8GB大小,显然是FP8精度。
运行Grok-1对硬件要求极高,要流畅运行Grok-1需要3台8U的服务器,单台服务器8张A100或者H100显卡,硬盘容量为4TB 固态硬盘,内存至少512GB,4颗Intel(R) Xeon(R) 白金8593 CPU(每片CPU售价高达1.24万美元,NV-LINK显卡连接器。整套系统大概500-700万人民币。特斯拉的粉丝坚信Grok-1可以在特斯拉上运行,但即便是HW4.0的RAM存储不过32GB,最低精度的Grok-1都放不下。
如果不在乎卡顿或延迟,也不在乎精度,网上有人用顶配苹果Mac Studio with an M2 Ultra运行了4位精度的Grok-1,4位精度的容量是157GB,Mac Studio with an M2 Ultra顶配的内存是192GB,价格是8799美元,便宜多了。
M2 Ultra算力极低,但这不意味着低算力就可以运行Grok-1,Grok-1需要的是强大的高带宽存储。M2 Ultra最强之处在于其存储带宽高达800GB/s,是1万美元以下能买到的最高带宽,最新的苹果M4才120GB/s,而特斯拉第一代HW3.0 FSD芯片是63.5GB/s,英伟达Orin是205GB/s。特斯拉第二代HW4.0 FSD芯片存储用了GDDR6,成本比主流的LPDDR5贵大约50-70%,如果是高端的256bit位宽的话存储带宽是576GB/s,128bit则是288GB/s。这些和英伟达H100那TB/s级的存储带宽根本不能比。
Grok-1简介
基础模型和训练:Grok-1是基于大量文本数据进行训练的,没有针对任何具体任务进行微调。这意味着它是一个通用的语言模型,可以应用于多种不同的自然语言处理任务。它的训练从头开始,使用JAX库和Rust语言组成的自定义训练堆栈。
参数数量:Grok-1拥有3140亿个参数,是目前参数量最大的开源大语言模型。这些参数在给定token上的激活权重为25%,表明了模型的规模和复杂性。
混合专家模型(MoE):Grok-1采用了混合专家系统的设计,这是一种将多个专家网络(expert networks)结合起来的方法,以提高模型的效率和性能。在Grok-1中,每个token从8个专家中选择2个进行处理。
激活参数:Grok-1的激活参数数量为860亿,这比Llama-2的70B参数还要多,表明其在处理语言任务时的潜在能力。
嵌入和位置嵌入:Grok-1使用旋转嵌入而非固定位置嵌入,这是一种处理序列数据的方法,可以提高模型处理长文本的能力。Tokenizer词汇大小为131,072,类似于GPT-4,嵌入大小为6,144。上下文长度为8192 tokens,精度为bf16。
Transformer层:模型包含64个Transformer层,每层都包含一个解码器层,由多头注意力块和密集块组成。多头注意力块有48个头用于查询(Query),8个头用于键/值(Key/Value),KV大小为128。密集块(密集前馈块)的加宽因子为8,隐藏层大小为32,768。
- 量化:Grok-1还提供了一些权重的8bit量化内容,这有助于减少模型的存储和计算需求,使其更适合在资源有限的环境中运行。
依靠3140亿参数,Grok-1表现不错,某些领域秒杀META的LLAMA2 70B。但与一流厂家比差距还是很明显,Palm2是谷歌的大模型,参数是3400亿,略高于Grok,但表现远在Grok之上。
要部署大模型,主要是算力和存储,存储方面经常被人忽视,这里重点来讲存储。
CPU与GPU之间的关系
CPU与GPU之间的关系,AI计算部分也可以看作GPU,GPU是外设,CPU是主机。GPU任务的控制,调度和发起都由CPU完成,CPU根据任务类型划分流向,并行计算的任务才交给GPU,而串行计算一般CPU完成。大模型存储在SSD里,可以看做电脑硬盘,对车载来说,一般是UFS,成本敏感的厂家会使用eMMC。
运算系统有两种存储,一种是断电后存储内容不丢失的非易失性存储器(Non-Volatile Memory,缩写:NVM),最常见的NVM是Flash存储器;还有一种是断电后存储内容便消失的易失性存储器,即RAM,又分为DRAM和SRAM。通常内存指的是RAM,内存严格讲应该叫缓存或暂存,它是NVM和CPU之间的桥梁。NVM原理类似电容,因此其读出写入速度很慢,与CPU速度比差太多,为了两者协调工作,加入内存做中转缓冲,它是计算单元与数据或指令存储之间的桥梁。在芯片内部的一般叫cache,发音类似现金,所以很多地方写成$。
RAM是桥梁,而SSD或UFS是仓库,存放着大模型、操作系统等等,RAM只是通过,每一次大模型推理都需要从仓库中取出大模型的权重数据,与输入数据做矩阵乘法,得到激活函数值后再写入RAM传给CPU,让CPU做出对应的计算将指令交给底盘MCU执行。ChatGPT这样一问一答,可以延迟1-2秒,人都可以接受,但汽车不行,智能驾驶系统运行频率最低20Hz,也就是每秒20次的一问一答,算力和存储带宽需求暴增20-40倍。这也是为什么手机敢说自己可以运行百亿参数的大模型,而汽车不行,如果手机真有那么强大,谁还买3万美元一张的H100显卡?
英伟达显卡与特斯拉芯片存储对比
整理:佐思汽研
英伟达的GPU架构实际变化微乎其微,性能的提升主要来自存储系统的提升,这也是为什么SK Hynix的HBM存储到2025年底的产品已经被全额买下的原因,AI芯片的竞争主要就是存储和制造工艺的竞争。
车端自然不可能用上数千美元的HBM内存,因此需要对模型压缩。按照压缩过程对网络结构的破坏程度,《解析卷积神经网络》一书中将模型压缩技术分为“前端压缩”和“后端压缩”两部分:
前端压缩,是指在不改变原网络结构的压缩技术,主要包括知识蒸馏、轻量级网络(紧凑的模型结构设计)以及滤波器(filter)层面的剪枝(结构化剪枝)等;
后端压缩,是指包括低秩分解、未加限制的剪枝(非结构化剪枝/稀疏)、参数量化以及二值网络等,目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造。
前端压缩几乎不改变原有网络结构(仅仅只是在原模型基础上减少了网络的层数或者滤波器个数),压缩效率很低。后端压缩对网络结构有不可逆的大幅度改变,造成原有深度学习库、甚至硬件设备不兼容改变之后的网络。其维护成本很高。
业内常用的模型压缩方法有六种:
-
- 参数剪枝
- 参数量化
- 低秩分解
- 参数共享
- 紧凑网络(轻量级网络)
- 知识蒸馏
剪枝(Pruning)是除量化外最常见的模型压缩方法,也叫稀疏化,英伟达的GPU对稀疏网络有特别优化。不同于模型量化对每一个权重参数进行压缩,稀疏化方法是尝试直接“删除”部分权重参数。模型剪枝的原理是通过剔除模型中 “不重要” 的权重,使得模型减少参数量和计算量,同时尽量保证模型的精度不受影响。它分为非结构化剪枝(细粒度)和结构化剪枝(粗粒度),非结构化剪枝的粒度比较细,可以无限制地去掉网络中期望比例的任何“冗余”参数,但这样会带来裁剪后网络结构不规整、难以有效加速的问题(对神经元之间的连接重要性设计评价准则,删除冗余连接,可达到模型压缩的目的)。非结构化剪枝压缩效率极高,准确度也高,可以达到90%。其算法大都是上世纪90年代的,近来鲜少有人研究,压缩效率高,但难以并行加速,需要强大的CPU而非GPU来支撑,但CPU性能提升非常耗费成本,笔者不看好这种压缩算法的前景。
结构化剪枝的粒度比较粗,剪枝的最小单位是filter内参数的组合,通过对filter或者 feature map设置评价因子,甚至可以删除整个filter或者某几个channel,使网络“变窄”,从而可以直接在现有软/硬件上获得有效加速,但可能会带来预测精度(accuracy)的下降,需要通过对模型微调(fine-tuning)以恢复性能。
粗粒度的压缩效率不高,精度还下降不少,但对应的硬件很容易取得,地平线和英伟达都有针对这种网络的加速。
参数量化无需多说,业内无一例外都在使用,是默认的压缩方式,汽车领域训练大多是BF16或FP16,FP32都越来越少了,推理都是INT8,将来可能出现INT4,模型直接缩小一半。FP16转换为INT8,精度下降大约3%。汽车领域提到模型压缩一般都是指量化之外的压缩。
知识蒸馏是目前关注度比较高的压缩方法,其起源于2006年康奈尔大学的一篇论文《Model Compression》,2015年谷歌论文《Distilling the Knowledge in a Neural Network》正式提出知识蒸馏,一般简称KD。
知识蒸馏(knowledge distillation),其实也属于迁移学习(transfer learning)的一种,通俗理解就是训练一个大模型(teacher 模型)和一个小模型(student 模型),将庞大而复杂的大模型学习到的知识,通过一定技术手段迁移到精简的小模型上,从而使小模型能够获得与大模型相近的性能。也可说让小模型去拟合大模型,从而让小模型学到与大模型相似的函数映射。使其保持其快速的计算速度前提下,同时拥有复杂模型的性能,达到模型压缩的目的。将教师模型的softmax 层输出作为soft target与学生模型的softmax 层输出作为hard target一同送入total loss 计算,指导学生模型训练,将教师模型的知识迁移到学生模型中,使学生模型达到与教师模型相当的性能。学生模型更加紧凑高效,起到模型压缩的目的。知识蒸馏法可使深层网络变浅,极大地降低了计算成本,但也存在其局限性。由于使用softmax 层输出作为知识,所以一般多用于具有softmax损失函数的分类任务,在其他任务的泛化性不好。
小米的UniOcc中深度Aware部分知识蒸馏模型
知识蒸馏在汽车领域就是OCC占用网络上比较常见,因为OCC太大了。上图就是小米的UniOcc中深度Aware部分知识蒸馏模型。
华为的RadOcc也使用了知识蒸馏
知识蒸馏可以降低算力需求,但对参数量没有多少降低,也就是对存储性能要求基本没有降低,以华为的RadOcc为例,教师大模型参数1.35亿,蒸馏出来的学生模型1.26亿,但推理时间缩短了66%。教师模型是mIoU是49.4,学生模型是46.1。
要用大模型,必须加强存储,目前特斯拉HW4.0用上了GDDR6。目前特斯拉模型参数总和大约10亿,根据目前自动驾驶的发展趋势,模型大小会像摩尔定律一样,每年翻一倍,上百亿指日可待。
免责说明:本文观点和数据仅供参考,和实际情况可能存在偏差。本文不构成投资建议,文中所有观点、数据仅代表笔者立场,不具有任何指导、投资和决策意见。