端侧大模型落地关键技术探索
黎立北京航空航天大学
演讲嘉宾
黎立
北京航空航天大学
北京航天航天大学教授,荣获2024年IEEE TCSE新星奖(首位华人),2023年ACM北京新星奖,2023年MSR Ric Holt青年研究成就奖,入选澳大利亚2020年优秀青年基金(DECRA),曾被评为全球前三最有影响力的青年软件工程研究人员。主要研究方向为智能软件工程和移动软件工程,累计发表高水平期刊和会议论文150余篇,谷歌学术引用超8500次(H-index为45),荣获10项最佳/杰出论文奖励。受邀担任中科院一区期刊(ACM Computing Survey)编委以及包括TOSEM、TSE、ICSE、ESEC/FSE、ASE、ISSTA在内的CCF A类期刊和国际会议的审稿人,多次受邀在国际会议上作特邀报告。
智能手机2.0:大模型让智能手机更智能
各大手机厂商正奋力打造具有原生智能的移动操作系统
AS-IS:⼤量AI模型部署在云端,少量模型被嵌⼊应⽤中
TO-BE:核⼼场景端侧完成,⾮核⼼场景沿⽤云端⼤模型
可根据应⽤请求⾃动决定是否调⽤云侧⼤模型(⽐如隐私需求,联⽹,或者⼤概率端侧模型得不到好结果)
大模型入端势在必行,带来巨大机遇的同时也面临着诸多挑战
大模型入端=大模型入端+大模型应用编程框架入端
数据清理与保护
数据清洗:高质量标注数据是训练高质量AI模型的基础ParenthesesShortSentenceURLs#
CodeSearchNet数据集示例包含⼤量注释-代码对(Comment-Code Pairs)
19307
7049566232990206775316729
264049
数据清洗:高质量标注数据是训练高质量AI模型的基础
语法级过滤存在不⾜
1.部分注释与代码语义⽆关:Not for public use. This method isexpected to be retained only as a package private method.
2.代码注释与通⽤场景问题语⾔⻛格可能不⼀致
数据保护:高质量标注数据需要技术手段进行保护
⾸次提出⼤模型数据⽔印技术
此种类型的数据不具有隐蔽性,⽔印实⽤困难
数据保护:基于代码语义等价变换的数据水印技术
代码语义等价转换规则
a+=1a=a+1VS.语法糖(Syntactic Sugar)
range(x)range(0, x)VS.默认参数(Default Parameter)
split(‘ ’)split(sep=‘ ’)VS.关键词参数(Keyword Parameter)
模型性能
大模型推理运算成本高,性能提升几乎等于硬件提升
代码大模型已经发展为以数十亿甚至千亿、万亿计的参数量。一味追求推理效果而加深模型深度,增加模型参数,忽视了大规模参数带来的推理运算成本,导致目前大模型性能的提升几乎等于硬件能力。
大模型训练成本高,推理成本更高
LLaMA完成一轮训练需花费405万美元
大模型推理运算成本高,性能提升几乎等于硬件提升
大模型推理成本高,能否减少大模型的访问次数?
大模型每一层网络都参与运算,推理成本与网络层数直接相关
分支限界法:明确得不到最优解的分支,可以直接跳过
是否能将分支限界法的思想用于大模型推理?
减少10%推理=>节约162万美元减少20%推理=>节约324万美元
训练(20%)=405万美元推理(80%)=4*405=1620万美元
大语言动态推理提升推理速度(降低资源消耗)
在大模型推理层间插入判断逻辑(基于隐藏状态信息),动态修改大模型的推理过程,加速大模型推理过程,降低推理成本
大模型动态推理在代码生成模型上的应用
通过在大模型网络的层间添加调节与控制单元(分类器)的形式,使网络具备根据不同输入,结合用户的定制化需求以及特定领域的领域特点,动态调节推理流程的能力。
GPT-2124M参数,12 Layers
CodeGen350M参数,20 Layers
Exit场景,提升速度的同时,推理长度几乎没有影响
大模型编程框架与实践
LLM for Software Engineering
对标LangChain,自研大模型应用编程框架
苍穹⽤来形容⼴阔的天空、壮阔的景象,代表着壮阔、辽阔的意境。⽐如《诗经》中的“苍苍者天”,《庄⼦》中的“苍苍乎如在其上”的描述。苍穹常常被⽤来⽐喻⾼远的理想或抱负,也可以指代神话中的天空之神。
苍穹(CangChain)框架服务于软件⼚商、模型⼚商,帮助终端⽤户快速开发AI应⽤。
Cangchain基本功能简介
main() {let llm =getLLMInstance(LLMType.OPEN_AI)println(llm.query("translate what youhave said into Chinese"))}拉起⼀个⼤模型并进⾏交互
计算词向量(Word Embedding)
main(): Int64 {var sentences:Array