动手点关注
干货不迷路
本文旨在让无大模型开发背景的工程师或者技术爱好者无痛理解大语言模型应用开发的理论和主流工具,因此会先从与LLM应用开发相关的基础概念谈起,并不刻意追求极致的严谨和完备,而是从直觉和本质入手,结合笔者调研整理及消化理解,帮助大家能够更容易的理解LLM技术全貌,大家可以基于本文衍生展开,结合自己感兴趣的领域深入研究。若有不准确或者错误的地方也希望大家能够留言指正。
本文体系完整,内容丰富,由于内容比较多,分多次连载 。
第一部分 基础概念
1.机器学习场景类别
2.机器学习类型(LLM相关)
3.深度学习的兴起
4.基础模型
第二部分 应用挑战
1.问题定义与基本思路
2.基本流程与相关技术
1)Tokenization与Embbeding
2)向量数据库
3)finetune(微调)
4)模型部署与推理
5)prompt
6)编排与集成
7)预训练
第三部分 场景案例
常用参考
2.基本流程与相关技术
4)模型部署与推理
主流工具或框架
在上一节里,我们介绍了很多降低资源要求,提升推理吞吐和降低延迟的一些理论技术,在业内有很多优秀的工具或框架利用到这些技术加速推理过程。在本节中将会架构和工具特点角度切入,让大家能够有一个完整体系化的认识,再结合着自己感兴趣的项目深入研究。
LLM应用技术分层
关于大模型推理领域的工具,当下是一个百花齐放的状态,网络上充斥着大量的项目,初学者难以理清其中脉络。为了便于后续介绍,笔者将目前的LLM应用在推理阶段在技术上分为5层,分别是硬件层,资源平台层,模型服务层,中间件层,应用编排层。
1)硬件层
硬件层主要基于设备的硬件情况来区分,这里提两个主要的关注点:
a)GPU或CPU设备,设备是否拥有GPU,GPU的提供商是谁,比如是英伟达的GPU。基于不同的提供商的设备,也会有相应的构建之上的一整套解决方案。比如在推理加速引擎上英伟达平台首推TensorRT,而在Intel平台就是OpenVINO 。
b)设备的类型,即是服务器设备,个人电脑,还是边缘嵌入式设备。这些设备其独特的形态和应用场景决定了上层方案的差异。它们在算力,可靠性,性能要求上通常有很大不同,比如在数据中心集群化方案可能会采用K8S,而到了边缘设备集群,那么K3S或许才是更好的选择。
在大模型领域,很多加速引擎在设计之初就会充分考虑了这一点,它是优化部署优化的出发点和落脚点,选择合适的理论方案,在设备特性和场景要求获得比较好的平衡。
2)资源编排层
和普通的大规模计算系统一样,为了提高可用性和资源利用率,往往都有弹性伸缩,负载均衡,智能调度等需求。 在这一层里数据中心服务资源编排领域k8s是霸主,同时还有一些公有云品牌,如Azure,AWS,GCP,通过这一层的封装,开发者可以很方便的把自己的推理服务扩展为推理集群。这一层里有一些细分解决方案,比如多云管理方案,如karmada,还有提供精细的任务调度策略,如volcano就可以结合大模型任务特点,通过合理调度,提升GPU利用率。
3)模型服务层
该层目标就是构建核心模型推理服务,提供高阶服务接口给上层使用。这一层是本章重点,众多的优化方案也均在这一层应用。笔者结合当下工具的封装程度,简单将其分为三类。
1.推理执行引擎(Inference Execute Engine)
2.推理服务(Inference Server)
3.开箱即用的对话服务(Chat Server)
它们的关系是,推理执行引擎结合其场景和设备情况,对模型采用相关技术优化,如量化,并行化等,将其转换并执行,其可以本地调用,也可以与一些web高性能服务框架集成形成推理服务。
但出于简化上层开发者使用复杂度,统一提供模型服务接口,全局优化性能,比如动态批处理,屏蔽底层优化实现细节等目的,业内存在一些项目其目标便是开发一个高性能易用的推理服务,如Triton Server。
更有一些项目,更进一步,把目标定在实现一个类似于ChatGPT这样的产品级服务,做到开箱即用,LLM应用开发者可以很方便的在OPENAI接口和自己部署的服务上切换,甚至实现了插件等功能,这对于普通开发者来讲是个福音,基本不用考虑内部的复杂性,是很好的平替ChatGPT的选择。
这一层相关的工具和框架,本节后面部分将会展开介绍。
4)中间件层
随着生产级应用的复杂度越来越高,外界环境的复杂性越来越高,需要有一层做一些公共工作,如拦截,过滤,防御,改写等,提升LLM服务的安全性,可控性等。
基于这些目的,这样的一层就产生了,参考python django框架的命名方式,将其叫做“中间件层”。其中,最常见的就是Cache,可以通过一些cache策略减少LLM应用对于模型服务的调用量,不仅可以提升速度还能节约算力成本。除此之外,如prompt漏洞防 御,访问审计,资源及服务监控都是这一层的工作。在这一层里也涌现了大量优秀的框架,比如 Guiduice ,Rebuff,GPTCache等,对于框架开发者来讲,中间件层是一个很新兴的一层,有大量的课题需要研究,与其去推理层和编排层重复造轮子,不如尝试研究这一层 ,或许存在很大的机会。
后续在编排与集成一章中会加以介绍这里面典型的一些模式和项目。
5)应用编排层,这一层最受大家熟知,主要负责将业务逻辑的编排实现及底层部件的集成,是整个LLM应用的中枢。在这一层基于场景沉淀了LLM应用常见的编程模式,通过这一层,开发者能够基于简单一致的编程接口,在不了解底层细节的情况下也能写出高质量的LLM应用,前一阶段大火的BabyAGI就是一个例子。在这一层,在框架层面基本形成了三国鼎立的局面,l angchai n,llama-index,Semantic Kernel(SK), 他们各有所长,都有自己的基本盘,比如langchain开发agent应用,llamaindex开发RAG应用,SK则因为背靠微软,拥有大量的微软技术栈开发者。
这一层技术也将在编排与集成章节中展开讨论。
在本节介绍整个LLM应用分层其目的是希望读者能够有一个全貌,并且每一层并不是割裂的,而是一个有机整体,它 们是从解决问题角度逐层展开的,选择每一层方案都需要考虑其它层的影响,最终选择合适的方案。
模型服务层相关工具和框架
前文对模型服务层做了简单的分类,基于封装程度不同,有大量的框架和工具,笔者结合目前趋势,在每个类别中挑选了几个常见的项目和大家分享,它们各有特点,将从内向外一一介绍,最后最后给出一些选型建议以供参考。
未完待续...
合集目录:
3)微调
4)模型部署与推理
一文探秘LLM应用开发(8)-模型部署与推理(DEMO验证)
一文探秘LLM应用开发(9)-模型部署与推理(模型适配优化之GPU面面观-1)
一文探秘LLM应用开发(10)-模型部署与推理(模型适配优化之GPU面面观-2)
一文探秘LLM应用开发(11)-模型部署与推理(模型大小与推理性能的关系)