记得今年2月Qwen1.5开源,这才过去4个月,新版本QWen2今天就重磅出击了,这开源的速度实在太快了。
发布后两小时,Hugging Face联合创始人兼首席执行官克莱门特·德朗格(Clément Delangue)就发推宣布:HF开源大模型榜单新的第一名来了,Qwen2-72B全球排名最高!
之前的Qwen1.5-110B已经领先文心4.0等一众中国闭源模型。而刚刚开源的Qwen2-72B,整体性能相比Qwen1.5-110B又取得了大幅提升。简直为开闭源之争画下了休止符!
Qwen2系列模型大幅提升了代码、数学、推理、指令遵循、多语言理解等能力。在MMLU、GPQA、HumanEval、GSM8K、BBH、MT-Bench、Arena Hard、LiveCodeBench等国际权威测评中,Qwen2-72B一举斩获十几项世界冠军,超过美国的Llama3。
作为程序员,我也非常关注大模型的发展,我深知它对软件开发领域的巨大冲击。
在现阶段,大模型虽然没办法作为一个独立的个体来像人那样,从客户沟通、需求分析到架构设计、详细设计、编码、测试、部署,从头到尾实现一个完整的系统,但是它在详细设计、编码、测试等领域展示出的强大能力,完全可以成为程序员编程的好助手。
QWen2在编程领域实战效果到底如何呢?
0、QWen2实战测评
我手头有一个非常经典的素材:薪水支付案例。
这个案例的需求是这样的:
该系统由一个公司数据库以及和员工相关的数据组成,系统需要准时地按照规则给员工支付薪水
员工有三种类型
1.钟点工,每个小时有固定报酬,他们每天提交工作时间卡,其中记录了日期以及工作小时数,如果每天工作超过8小时,按1.5倍进行支付。每周五对他们进行支付。
2.月薪员工,工资固定,每个月的最后一个工作日对他们进行支付
3.销售人员,有固定工资,但会根据他们的销售情况,支付给他们一定数量的佣金,他们会提交销售凭条,其中记录了销售的日期和数量。每隔一周的周五对他们进行支付。
员工可以选择支付方式,可以把支票邮寄到他们指定的邮政地址,也可以保存在财务那里随时支取,或者要求直接存入他们指定的银行账户。
看了这个需求以后,程序员第一次设计一般是这样的:
Employee 作为基类,不同类型的雇员类来继承。
但是这个需求会有变更,客户要求员工类型可以变更,例如从钟点工变成月薪雇员,这样上面的设计就不行了。
这个时候应该做个抽象,,用一个类PaymentClassification来表达支付分类,然后让Employee类持有这个实例,简单说就是用组合代替继承。
这个案例主要看程序员能不能应用面向对象的设计原则,把那些变化的东西抽象成稳定的接口,非常考验人。
去年,我用这个案例实验过国内一些闭源的大模型,结果惨不忍睹,只有国外的GPT-4能基本达到设计目标,差距非常明显。
我决定拿这个案例考验下QWen2,看看它能不能避开我给它挖的坑。
QWen2的第一次设计是这样的:
Qwen2还特别提到:这个设计考虑到了不同类型的员工及其支付规则,同时允许灵活的支付方式选择。通过使用继承,我们能够避免重复代码,并且清晰地表示出不同类型的员工之间的共性和差异。
还真是不错,它“理解”了需求,从中抽取出了名词进行类的设计,它设计出来的Employee,HourlyEmployee,SalariedEmployee,SalesPerson和第一个UML图几乎是一样的。
已经达到了面向对象设计的初级水平。
接下来开始挖坑:
刘欣:上面的类设计得很好,但是如果一个人刚开始是钟点工,后来变成了月薪员工,上面的设计就无法支持这种变更了,这该怎么办呢?
Qwen2:
对于员工类型的变化,我们可以通过引入状态模式或策略模式来解决这一问题。在这里,我将采用策略模式,因为这种模式允许对象在其行为中嵌入可互换的算法族,非常适合处理员工类型的变化。
1. PaymentStrategy (支付策略接口) …略…
2. HourlyPaymentStrategy (钟点工支付策略) 继承自: PaymentStrategy …略…
3. SalariedPaymentStrategy (月薪支付策略) 继承自: PaymentStrategy …略…
4. SalesPaymentStrategy (销售人员支付策略) 继承自: PaymentStrategy …略…
5. Employee (员工类更新)
属性:
payment_strategy: 当前支付策略
…略…
方法:
set_payment_strategy(self, new_strategy): 更改支付策略
…略…
通过这样的设计,我们可以在运行时动态更改员工的支付策略,从而支持员工类型的变化。这不仅增加了系统的灵活性,也简化了维护和扩展的工作。
不得不说,QWen2 非常厉害,它一下子就抓住了问题的关键,把薪水计算策略PaymentStrategy给抽象了出来。
和第二个UML图相比,除了名称不同,基本上一样了。
可以说,能做到这一步,就可以超越很多程序员了。
我注意到,它一直没有处理支付周期的问题。我开始继续发问:
刘欣:原来的需求中还有支付的时间,例如钟点工每周五支付,这个该怎么设计?
QWen2:
我们可以通过定义一个PaymentSchedule接口,然后让具体的支付周期策略实现这个接口。这样,无论支付周期的规则如何变化,我们只需要关注PaymentSchedule接口的实现,而不需要修改其他部分的代码。
PaymentSchedule 接口 …略…
WeeklyPaymentSchedule (周支付策略) 继承自: PaymentSchedule …略…
MonthlyPaymentSchedule (月支付策略) 继承自: PaymentSchedule …略…
BiweeklyPaymentSchedule (双周支付策略) 继承自: PaymentSchedule …略…
Employee 类更新
属性:
salary_strategy: 当前薪资计算策略
payment_schedule: 当前支付周期策略
这种设计使我们可以独立地管理薪资计算逻辑和支付周期逻辑,同时保持代码的清晰和模块化。当需要添加新的支付周期策略或修改现有策略时,我们只需要在PaymentSchedule接口下实现新的类,而无需修改Employee类或其他部分的代码。这正是面向接口编程的好处:提高代码的复用性和扩展性。
是不是非常惊艳?
在程序员的提示下,它已经学会了分离关注点。应用了“优先使用组合而不是继承”的思想,实现了一个非常好的设计。
这个能力,只有原来GPT-4才具备,现在QWen2也具备了,甚至做得更好。
可以说,在详细设计这一层面,程序员可以充分相信QWen2了。
02、QWen2本地部署
程序员都喜欢折腾属于自己的东西,大模型也不例外,我就喜欢用Ollama做本地部署。
这次Qwen2开源系列包含5个尺寸的预训练和指令微调模型,Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B和Qwen2-72B,其中Qwen2-57B-A14B为混合专家模型(MoE)
我这机器恐怕跑不了太大的模型,就选个7B的吧,本地部署非常简单,一条命令搞定:ollama run qwen2:7b
马上实验一下。
刘欣:用Python写个函数,输入是个4位数(如1876),返回这个4位数的千位,百位,十位,个位
结果QWen2-7b 给我返回了这个函数:
竟然是用字符串处理的,让我着实没想到!
刘欣:不要用字符串处理的办法!
这次它给出了我想要的结果:
03、总结
一年前,人们普遍认为开源模型和最领先的闭源模型之前存在一两年的代差,如今,以QWen2为代表开源阵营用实力证明,开源模型正在加速追赶头部闭源模型。
自2023年8月开源以来,通义千问在全球开源社区生态中已形成重要影响力。6月7日,Qwen2系列模型的API第一时间登陆阿里云百炼平台。TensorRT-LLM、OpenVINO、OpenCompass、XTuner、LLaMA-Factory、Firefly、OpenBuddy、vLLM、Ollama等众多全球开源平台和工具,也第一时间宣布支持Qwen2最新款模型。除了美国Llama开源生态之外,通义千问已成为全球开发者的另一主流选项。
有了开源大模型,海量的中小企业和开发者再也不用从头训练大模型,可以直接站在前沿技术成果的肩膀上做创新,当越来越多的开发者、企业能结合自己的需求,来促进大模型的发展和应用,必将带来翻天覆地的变化。
未来一定是开源大模型的天下,强烈建议大家也去感受一下Qwen2,可以到魔搭社区去下载,然后训练自己模型。
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。