【代码大模型】Compressing Pre-trained Models of Code into 3 MB论文阅读

news/2024/11/18 14:01:59/

Compressing Pre-trained Models of Code into 3 MB
key word: code PLM, compression, GA算法

论文:https://dl.acm.org/doi/pdf/10.1145/3551349.3556964
代码:https://github.com/soarsmu/Compressor.git

【why】
1.问题描述: code LLM 在广泛使用过程中存在障碍,模型占内存大+在个人设备上运行缓慢
2. Idea的起源:vscode建议发布 IDE组件 or 编辑器插件 给用户的开发者,将组件大小限制为50MB,3MB的模型为最佳模型大小,且延时应被降至0.1s
3. 现有的方法存在的问题:
model pruning ===> 无法将codeBERT和GraphCodeBERT压缩至50MB以下
model quantization ===> 压缩后的模型在推理上并不快或消耗更少的CPU内存,且在运行时需要专门的硬件
knowledge distillation ===> 知识蒸馏训练一个小的student model去模仿一个大的teacher model,但是小模型不能有效的从大模型中吸收知识
4. 解决上述问题,获得一个合适的模型结构的挑战:
(1)寻找合适的体系结构本质上是一个搜索空间巨大的组合问题
(2)通过训练和测试来评估每个可能的候选模型在计算上是不可行的,从而难以指导搜索

【what】
提出了 Compressor,通过遗传算法将PLM压缩成极小的模型,而性能损失忽略不计。
利用遗传算法搜索,知识蒸馏找到小模型,利用预训练模型中的知识对小模型训练
在这里插入图片描述

  1. 问题搜索空间
    调整网络层数( L ),网络层的维度( H ),注意力头的数量( A ),前馈层的维度( D )和词汇量( V )
    在这里插入图片描述
  2. GA 算法指导模型简化
    在这里插入图片描述
    (1)Chromosome Representation => 通过随机设置其中每个键值对的值
    (2)Fitness Function => 衡量候选目标的质量。在这里插入图片描述
    使用 GFLOPs 表示计算模型需要进行前向传递的乘法和累加操作的次数,更大的 GFLOPs 意味着模型具有更大的capacity。
    T 表示给定的模型大小,ts 表示 微小模型的尺寸。| ts-T | 是当前搜索模型的模型尺寸与目标模型尺寸的差值。
    (3)Operators & Selection
    算子选择使用算法:crossover (r的概率) & mutation (1-r的概率)
  3. 使用 unlabeled 数据进行数据蒸馏
    应用特定于下游任务的蒸馏方法 Distilling the Knowledge in a Neural Network 。将 unlabeled data 输入到PLM中,收集 output probability values,接着训练获得的 tiny model。
    训练的loss函数为:
    在这里插入图片描述
    n表示训练样本数,pi是大模型输出,qi是小模型输出

【how】
1.实验配置
硬件环境: Ubuntu 18.04 server with an Intel Xeon E5-2698 CPU, 504GB RAM, and 8 Tesla P100 GPUs
模型: CodeBert and GraphCodeBert
下游任务和数据集:
Vulnerability Prediction ==> Devign,是CodeXGLUE中的一部分
Clone Detection ==> BigCloneBench
GA算法: 保存50个候选模型,crossover rate = 0.6,迭代次数为 100
衡量指标: computational cost [GFLOPS]
baseline: 基于特定任务的知识蒸馏方法BiLSTMsoft,其能将模型压缩至7.5MB左右
2.实验结果
(1)精度下降 + 模型缩小率
在这里插入图片描述
(2)延时比较
在这里插入图片描述
(3)压缩预训练模型所需使用的时间
在这里插入图片描述
(4)模型大小与模型精度的关系
在这里插入图片描述


http://www.ppmy.cn/news/1548000.html

相关文章

3. langgraph中的react agent使用 (在react agent添加系统提示)

环境准备 确保你已经安装了以下库: langchainlangchain_openailanggraph 你可以使用以下命令进行安装: pip install langchain langchain_openai langgraph代码实现 1. 初始化模型 首先,我们需要初始化智谱AI的聊天模型。 from langch…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历,分享给大家 作者是如何在没有 iOS 开发经验的情况下,借助 AI(如 Claude 3 模型)成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月,ChatGPT 诞生并迅速引发全球关注。…

8. 基于 Redis 实现限流

在高并发的分布式系统中,限流是保证服务稳定性的重要手段之一。通过限流机制,可以控制系统处理请求的频率,避免因瞬时流量过大导致系统崩溃。Redis 是一种高效的缓存数据库,具备丰富的数据结构和原子操作,适合用来实现…

智能网页内容截图工具:AI助力内容提取与可视化

我们每天都会接触到大量的网页内容。然而,如何从这些内容中快速提取关键信息,并有效地进行整理和分享,一直是困扰我们的问题。本文将介绍一款我近期完成的基于AI技术的智能网页内容截图工具,它能够自动分析网页内容,截…

【Cesium】自定义材质,添加带有方向的滚动路线

【Cesium】自定义材质,添加带有方向的滚动路线 🍖 前言🎶一、实现过程✨二、代码展示🏀三、运行结果🏆四、知识点提示 🍖 前言 【Cesium】自定义材质,添加带有方向的滚动路线 🎶一、…

时序预测:多头注意力+宽度学习

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Java算法OJ(7)随机快速排序

目录 1.前言 2.正文 1. 快速排序的基本原理 2. 随机快速排序的改进 3. 随机快速排序的步骤 3.小结 1.前言 哈喽大家好吖,今儿给大家带来算法—随机快速排序相关知识点,废话不多说让我们开始。 2.正文 在了解随机快排之前,先了解一下…

【网络安全】XSS注入

一、什么是XSS注入 XSS(Cross-Site Scripting)注入是一种网络安全漏洞,它允许攻击者向网站注入恶意脚本代码,然后在用户的浏览器上执行。 二、XSS注入有哪些危害 盗取用户的敏感信息:攻击者可以通过注入恶意脚本代码…