NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

当我想要构建一款 LLM 应用时:关于技术栈、省钱和游戏规则

  • 2023-09-20
    北京
  • 本文字数:5015 字

    阅读完需:约 16 分钟

当我想要构建一款 LLM 应用时:关于技术栈、省钱和游戏规则

“虽然在 2012 年到 2015 年间,深度学习在图像识别领域获得了巨大成功,但要达到通用人工智能,还需要时间。”这是读研究生时刘小洋的老教授告诉他的。


自然语言理解是走向通用人工智能的关键,但当时整个行业没能迈出这一步。机器学习框架 TensorFlow 曾一度名声大噪,“当年很多人都学习 Tensorflow,但是我从头到尾没有学过,因为我的一些朋友特别是学术圈的朋友认为,它已经是过去式了,不会再有什么前途。”


如今,刘小洋已经是哥伦比亚大学电子工程系研究员。这么多年过去,时间终于给出如何走向通用人工智能的答案:ChatGPT。ChatGPT 的意外突破让包括刘小洋在内的学者们和企业里的研发人员看到了希望。“我不想落后,”刘小洋随后便投入了自己的开源模型创建中,而他的这句话也道出了众人的心声:是的,没人想在这场竞赛中落后。

让人感受到了“温度”


真正影响深远的技术突破并不出现在 ChatGPT 引领的这次浪潮中,而是在五年前。2017 年,谷歌发表了划时代的论文:Attention Is All You Need,创新性地提出了神经网络架构 Transformer,Transformer 后来成了许多模型的主导架构,包括我们熟知的 GPT。


OpenAI 基于 Transformer 从 GPT-1 开始做起,但直到 GPT-3,普通大众才看到了 GPT 的强大能力。OpenAI 的关键突破在于 GPT-3 让人机对话变得更有“温度”,人们开始将人工智能应用看作有情感、有理解能力的“生命体”。


具体来看,ChatGPT 的学习流程主要分三个步骤:第一步,训练监督调优模型,主要收集数据、训练有监督的策略模型;第二步,训练奖励模型,人类标注者对监督调优模型的输出打分,这个分数反映了被选定人类标注者的偏好,这个偏好多数情况下是符合人类共同认知的;第三步,使用近端策略优化模型微调监督调优模型。这其中的关键在于用人类反馈来强化学习不断提升效果,最后让用户感觉“就像在跟人对话”。


这种优化后的对话体验促进了人与计算机交互方式的发展,即从 GUI(Graphical User Interface,图形用户界面)变为了 LUI(Language User Interface,语言用户界面),用户可以用自然语言表达需要,而不需要记住特定的命令或点击特定的图标。


交互方式的改变意味着用户习惯的改变,进而可能导致与 IT 有关的各行各业都或多或少受到冲击。对开发技术栈的一个显著影响就是,应用将以某个庞大的通用模型为基础设施。就如李彦宏所说,人工智能时代,IT 技术栈发生的根本性改变是从原来的芯片、操作系统和应用三层架构,变成了芯片、框架、模型、应用四层架构。LLM(Large Language Model,大型语言模型)成为了人工智能时代的操作系统,所有应用都将基于 LLM 开发。


具体来看,之前的 NLP(Natural Language Processing,自然语言处理) 技术栈相对较浅,假设需要对一段文本进行词向量表示,要先将这段文本转化为词向量,然后将向量数据输入到模型中处理,最后模型输出结果。整个过程可以看作是由输入端到输出端的多个阶段组成,一个小团队就可以完成架构搭建。虽然这种技术栈有助于保持一致性,但对于 LLM 来说,这种方式能力差强人意,还不够“性感”。


对于新的 LLM 应用技术栈,目前流传较广、也较为全面的是硅谷风投公司 Andreessen Horowitz 发布的下面这张图,图中涵盖了数据管道、API 插件、存储、LLMOps、日志等方方面面。



而 LLM 应用理念的基本组件有四个:数据源、数据工程、LLM 和应用程序。其中,数据源层是管道的起点,负责协调从各种来源获取大量数据;数据工程层专注 NLP 数据的实时处理;LLM 层是核心,包括各种微调方法等;应用层则面向个人用户,提供咨询、程序开发等不同的服务。

LLM 应用开发,更简单


目前,业内将 LLM 分为两类:通用模型和行业模型。通用模型面向各种通用功能设计,通常由资源丰富的大公司主导,如 OpenAI、Google 和 Meta。但在电商、客服和辅助教学等特定行业场景下,通用模型并不完全适用,同时个人或小型企业在业务规模较小时也没有足够的资源支撑通用模型,这时的另一个可选项就是用特定场景数据对通用模型微调得到的行业模型。


在这种分类影响下,LLM 应用主要有两种:基于通用模型构建的应用和基于特定行业模型的应用。


对于前者,开发者在通用模型的支持下,直接调用 API(Application Programming Interface,应用程序编程接口)就能够构建很多应用。许多企业会选择直接购买通用模型提供商发布的 API,如 OpenAI 提供的 GPT-4 接口,并在上面进行 UI(User Interface,用户界面)开发。开发过程中,开发者输入自然语言就可以实现开发操作,这个过程更像是一种交流,而不是僵硬的执行。


与此同时,企业还会开发很多功能不同的插件集成到应用中,让应用变得更加丰富和灵活。插件模式在国内得到了广泛应用,无论是要开发一个新的应用,还是嵌入到现有的像 Slack、微信等平台,插件模式都具有极强的渗透力。


这种使用 API 的开发模式会让 LLM 应用在未来很长一段时间里趋于标准化。不过,这种模式主要依赖大公司发布通用模型进行更新和迭代,企业用户虽然可以更方便地使用通用模型,但很容易跟不上大公司的迭代速度。


对于后者,企业可以通过微调拥有自己的行业模型,进而构建相应的应用。模型微调具备少数据、少参数、强任务的泛化能力,具体实现方法很多,不少企业开发者都在尝试。


据悉,30B 参数以上规模的 LLM 比较适合用来构建应用:能力足够强,显存需求最低但还有扩展空间。开发者可以根据场景特点做取舍,比如金融领域的量化表达应用不必是 32 位或 64 位浮点数,8 位就足够好,但不能再降低否则性能会大幅下降。内存方面,8 位浮点数至少要 10G 左右,移动端还可以考虑用通信换存储。


目前,中美 LLM 应用的软件技术栈存在一些区别。美国更倾向于水平分层的结构,即某些公司如 OpenAI 位于通用模型的层级上方,并给下游公司提供接口,下游公司再将服务提供给最终用户。


相比之下,国内更多采用垂直分层的结构。国内企业目前在生成式人工智能技术上处于相对劣势的位置,如果做不出高度先进的通用模型,那就会将精力放在寻找大量合适的应用场景上,这些企业能够自行训练开源的通用模型得到自己的行业模型,并直接服务于特定的垂直领域。


事实上,业内人士普遍认为,国内的机会就在于行业模型。行业模型拥有行业数据优势,只需要修改开源通用模型代码、投喂特定的行业数据,并服务于已有的用户来优化体验,就可以达到降本增效的目的。因此,紧密贴合具体应用场景的行业模型,像金融、医疗、教育等在数据方面有独特优势的 LLM 项目备受风投们青睐。


“当前比较流行的通用模型 ChatGPT 和 Llama2 已经做得很好,OpenAI、Meta 早期投入了巨额 GPU 算力成本、训练了海量数据,也提供了比较好的产品体验,如今大量用户涌入又提供了新的数据帮助企业优化模型,已经形成了‘强者恒强’的趋势。”Chainfir Capital CEO 田大超表示。另外,基于通用模型的应用还存在大量技术不成熟的地方,风投们认为过早投入这一领域的风险太高,很难形成规模效应。

构建 LLM 应用的省钱之道


都知道做 LLM“烧钱”,但到底能“烧”多少?我们可以姑且看下 Bloomberg 训练出来的金融大语言模型 BloombergGPT。


BloombergGPT 参数规模高达 500 亿,使用了包含 3630 亿 token 的金融领域数据集以及 3450 亿 token 的通用数据集。虽然测试中这个模型在金融方面表现不俗,但 BloombergGPT 有着密集的计算需求,使用了大约 130 万 GPU 小时进行训练,以亚马逊云科技 2.3 美元的费率计算,每次训练成本已经接近惊人的 300 万美元了。可以说,一般企业承担不起这样的费用。


开源是现在大家降本的基本解法。比如与 BloombergGPT 相比,同为开源金融模型的 FinGPT 通过专注于顶级开源 LLMs 的轻量级改编,提供更容易访问的解决方案,可以让训练成本大幅下降,每次训练费用不到 300 美元,成本下降了 1 万倍。


在训练 LLM 的时候,业内也会通过给 LLM“瘦身”的方式降低成本。比如对于 7B、13B 的 Llama 2,开发者首先可以做一定的限制,如将其调整为 Int8 类型以减小模型尺寸。接下来,开发者可以对模型进行低复杂度微调,具体做法是将原本线性的 QKV(Query,Key,Value)层设计简化成更为精简的结构,即将权重矩阵分解成多个小矩阵,从而大幅减小 LLM 的规模。



示意图,来源:https://arxiv.org/pdf/2205.05638.pdf


刘小洋团队研发的开源金融模型 FinGPT 就是通过使用 LoRA(Low-Rank Adaptation of Large Language Models),将可训练参数数量从 61.7 亿减少到仅有 367 万。整体下来,该模型在显存方面的需求从 38G 降低到了大约 13G,而且微调所需的时间也被显著缩短,通常在 8 个 GPU 小时内就可以完成,有时甚至只需要 6 个小时,而费用则保持在 1000 元以下,甚至低至 600 元。与此同时,FinGPT 的性能提升了 30%。


以上数据显示出了企业在利用开源大型模型进行微调时可以拥有的强大成本优势。在进行 LLM 微调时,通常需要直接调整模型的权重,而那些提供基础模型 API 的企业则更多是提供接口服务,如果购买模型的权重,费用将会高得多,并且可能需要签署保密协议,预计花费可达在 2000 万人民币左右。


另外一项不可忽视的成本就是人力。田大超以这段时间爆火的妙鸭相机为例道,这样一款产品的开发周期实际上很短,起初团队也就 7 个人左右,就是他们内部被称为“AIGC 破壁行动小组”的一个以张月光为 leader 的小团队,也就用了 6 个月左右的时间就做出来了。这样一款 LLM 应用总投入成本大概是小几百万人民币,其中人工成本占大头,其次是租用算力的成本和调用 API 的成本。

LLM 应用,终归还是生态游戏


目前生成式人工智能领域的上下游关系已经逐渐建立起来了:上游是芯片厂商,如英伟达;中游是通用级别的大模型公司,如 OpenAI;中下游是细分领域的大模型厂商,如 Bloomberg;下游就是一些 LLM 应用,如 Midjourney。普通用户最能感知到的就是面向 C 端的各种 LLM 应用,比如 AI 绘画工具 Midjourney、Stable Diffusion,AI 音频生成工具 Forever Voice 等。


一方面,现在 LLM 应用的研发方式决定了“生态”的重要性。比如,使用 OpenAI GPT 模型的用户自成一个生态,使用开源 Llama 模型的用户又自成另一个生态,最后开发者选择哪一种研发方式本质上就是选择进入哪个生态。


另一方面,以搜索为例,将 ChatBot 整合到搜索引擎这样的大型平台中,需要足够庞大的搜索引擎用户基础,这样才能够迅速解决可能出现的问题。开发者必须具备全网范围内思考的能力,了解全球用户的搜索习惯,对信息检索有充分的理解。然而,并非所有人都能做到这一点。因此,“整合”游戏说到底还是生态游戏。


LLM 应用的本质还是商业产品,营收模式还是以用户付费购买服务为主,比如妙鸭相机要付费后才给用户改变形象后的照片,这与美图秀秀收会员费类似。这种模式与过去各种应用的商业逻辑是一样的,即用户流量为王。


用户在谁家,谁才能笑到最后。就像刘小洋说的,在 IT 行业,有许多第一批实践者最后成为炮灰的案例,能否走到最后取决于用户选择哪家公司、用户对什么产品感兴趣。广大用户构成最终市场,这个市场进而支撑起大模型的更新迭代。


当前,行业模型发展的关键已经不是模型本身的能力如何,而是它们在某一领域的专业知识、专业数据的积累,专业能力多强,它们未来的壁垒就有多高。


未来短期内,通用模型和各领域的行业模型赛道,最后可能分别只有一两家企业能够脱颖而出。而长期看,做得好的通用模型可能会创造巨头公司。同时,随着通用模型的专业度越来越高,通用模型会掌握大多数垂直领域的专业知识,不排除未来行业模型被通用模型替代的可能。

结束语


LLM 应用刚起步不久,如果要长期发展下去,每个环节都面临着不同的问题:在算力方面,电子芯片的能耗太高,70% 的能耗被用在散热上,这造成了巨大的能源浪费,行业急需出现效能更高的芯片;在算法方面,人工智能发展到一定阶段后可能会面临数学领域最高深问题,算法也需要不断提高和优化;在数据方面,隐私、数据所有权等问题亟待解决,尤其随着人工智能的快速发展,政府、机构、公司和个人都极其关心自己的敏感数据是否会泄露,数据处理变得十分重要。


可以看出,LLM 应用行业未来需要努力的地方还有很多,但这也是留给后来者的机会。现在处在技术前沿、风光无限的企业未来未必一定成功。如今竞赛才刚刚开始,入局的开发者们如何能在这条路上一直走下去,还需要时间给出答案。


采访嘉宾简介:


刘小洋,哥伦比亚大学电子工程系研究员,伦斯勒理工学院计算机系讲师,开源项目 FinGPT、FinRL 和 ElegantRL 的主创


田大超,Chainfir Capital CEO


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-09-20 17:235358

评论

发布
暂无评论
发现更多内容

Spring 测试运行的时候提示 Unable to find a @SpringBootConfiguration 错误

HoneyMoose

反转字符串

清风莫追

数据结构 字符串 10月月更

前端培训学习比较实用的方法

小谷哥

构建Java镜像的10个最佳实践

琦彦

Java应用 Docker 镜像 10月月更

慧嗨

kcnf

推荐一款工具,辅助估算线程池参数

xiaoxi666

线程池

大数据培训学习如何选择?

小谷哥

利用Vue自定义指令让你的开发变得更优雅

茶无味的一天

Vue 前端 vue指令

JavaScript——数据类型

胖虎不秃头

前端 js 10月月更

前端培训机构选择哪些建议

小谷哥

用纯CSS实现优惠券剪卡风格

茶无味的一天

CSS 前端

Qt|控件的事件过滤使用与总结

中国好公民st

c++ qt 10月月更

Docker可视化工具Portainer的安装和使用

琦彦

Docker Portainer 10月月更 可视化管理工具

大数据ELK(十三):Elasticsearch编程(添加职位数据)

Lansonli

10月月更

自学java培训之间学习方法有哪些

小谷哥

二分查找

掘金安东尼

算法 10月月更

2022 Kubernetes 批处理和HPC发展一览

琦彦

HPC 批处理 KubeCON 10月月更

vue快速入门---高速版

楠羽

笔记 VUE 3.0 源码 10月月更

如何零基础学习大数据培训

小谷哥

国庆perfetto学习

留白的艺术

JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量

胖虎不秃头

前端 js 10月月更

JavaScript——JS事件

胖虎不秃头

前端 js 10月月更

基于BuildKit优化Dockerfile的构建

琦彦

Dockerfile 10月月更

C++学习---cstdio的源码学习分析05-打开文件函数fopen

桑榆

c++ 源码分析 10月月更

不懂FAQ页面怎么设计?一些产品FAQ页面模板展示!

Baklib

产品 FAQ

第一个只出现一次的字符 (哈希表、队列两种解法)

清风莫追

数据结构 算法 遍历 字符 10月月更

Timestone: Netflix的高吞吐、低延迟优先级队列系统

俞凡

架构

浅谈前端工程化的发展以及相关工具介绍

茶无味的一天

Spring 项目启动测试的时候错误:Unable to acquire JDBC Connection

HoneyMoose

求平方根 (又是辛苦debug的一天)

清风莫追

数据结构 算法 函数 10月月更

docker-maven-plugin:自动构建Docker镜像,并推送到Docker Registry或阿里云

琦彦

Docker maven 10月月更 docker-maven-plugin

当我想要构建一款 LLM 应用时:关于技术栈、省钱和游戏规则_生成式 AI_褚杏娟_InfoQ精选文章