导读
加入我们,一起探索大模型应用的精彩世界,精通开源模型、掌握Prompt的巧妙运用、熟悉Agent、深入Langchain框架,Spring AI框架,逐步打造属于你的AI智能体。
大模型应用从入门到精通(一)选择开源大模型
大模型应用从入门到精通(二)大模型实操:部署和运行
大模型应用从入门到精通(三)云上部署:如何将大模型搬到云端
大模型应用从入门到精通(四)Langchain:大模型时代的Spring
大模型应用从入门到精通(五)Prompt Engineering:让模型理解你的意图
大模型应用从入门到精通(六)记忆的艺术:构建有记忆力的AI
大模型应用从入门到精通(七)Agent:大模型与世界的链接
大模型应用从入门到精通(八)智能信息小助手:基于大模型的实时信息整合系统
引言:为什么选择开源大模型?
开源大模型让每一个人都能参与到这次浪潮中
LLama2 率先开源,掀起了大模型开源的热潮,这让我们每个人都可以拥有自己的大模型。现在,不仅每个人都有机会构建自己的模型,还可以对这些模型进行微调,这让我们每个人都参能参与其中。在接下来的课程中,我们将详细讲解如何有效地利用这些开源资源,让每一个热爱技术的你,都能在这场浪潮中乘风破浪。
开源模型已经达到了ChatGPT3.5的水准
GPT3.5 Turbo是一个可以进行商业应用的级别,许多国外的商业产品底层也使用该级别的模型。目前来看,GPT3.5仍然是一个优秀的解决方案,它在推理成本、速度以及可用性三者之间取得了平衡。下面,我们做一个不严谨的对比测试,让大家对开源大模型的能力有一个体感。
问:根据提供的数据,让大模型按国家分组统计订单金额占比,并且用饼状图展示
The following is the order data, which is a collection of orders. Each element includes three fields, namely country, price, and user_id.
{
"orders": [
{"country": "USA", "price": 120.5, "user_id": 1},
{"country": "Canada", "price": 90.0, "user_id": 2},
{"country": "USA", "price": 110.75, "user_id": 3},
{"country": "Canada", "price": 85.55, "user_id": 4},
{"country": "USA", "price": 200.0, "user_id": 5},
{"country": "Japan", "price": 150.0, "user_id": 6},
{"country": "Japan", "price": 130.2, "user_id": 7},
{"country": "Japan", "price": 70.0, "user_id": 8},
{"country": "Italy", "price": 95.0, "user_id": 9},
{"country": "Canada", "price": 105.0, "user_id": 10}
]
}
Please statistics on the proportion of order amount grouped by country, displayed in a pie chart
答:从左到右,依次是通义千问,LLama2,ChatGPT3.5。从答案来看,通义千问和GPT3.5都提供了Python的实现代码,而LLama2的理解有些偏差,它直接用JavaScript编写了一个饼状图组件。尽管LLama2理解错了,但其实现仍然令人印象深刻。总体上,通义千问和LLama2的表现都非常出色,与ChatGPT3.5相当。
开源社区迸发出惊人的创新能力
自从LLama2率先开源以来,大模型社区的发展势头很猛,新的技术层出不穷。我相信,开源会继续为大模型注入新的生命力,推动其不断进步。对于吾辈来说,要做的就是躬身入局,参与到这股洪流之中。
选择什么大模型
英文选择LLama2,中文选择通义千问
与其他开源技术一样,我们应该最关注的两个指标是社区活跃度(星级数)和其背后的组织。
对比核心的几个开源模型:
模型 | 参数规模(B) | 星星数(k) | 组织 | 国家 |
---|---|---|---|---|
LLama2 | 7,13,34,70 | 52.1 | Meta | 美国 |
Mistral 7B | 7 | 8.5 | Mistral AI | 法国 |
通义千问Qwen | 1.8,7,14,72 | 10.5 | 阿里巴巴 | 中国 |
ChatGLM-6B | 6 | 11.6 | 智谱AI | 中国 |
以上数据截止至2024年04月10日
通过以上的比较,我认为LLama2和通义千问Qwen绝对是开源模型界的领导者。无论是社区活跃度,参数规模支持程度,还是更新频率,这两个模型都领先于其他的开源模型。我建议大家在学习和研究的时候选择这两个模型。
参考资料:
GitHub - wgwang/awesome-LLMs-In-China: 中国大模型
GitHub - eugeneyan/open-llms: 📋 A list of open LLMs available for commercial use.
https://chat.lmsys.org/?leaderboard
在PC跑大模型遇到的一些问题
-
内存不够怎么办
模型参数的规模与内存(实际上指的是显存)强烈相关,模型的参数需全部加载到内存中才能进行推理。简单地说,1B参数大约需要4GB,那么7B的模型需要28G的内存,70B的模型则需要280G的内存。算下来,24G内存的4090显卡都甚至无法运行7B的模型,这还如何玩!
先别急,内存问题可以通过模型量化来解决。量化是通过降低参数的精度来减少对内存的需求。量化后的7B模型仅需3.8G,足以轻松在任何一台PC上运行。
从Ollama支持的模型库中可以看出,大型模型在量化后对内存的需求,如下表:
模型 参数 对内存需求 LLama2 7B 7B 3.8G LLama2 13B 13B 7.3G LLama2 70B 70B 39G -
没有显卡怎么办
感谢万能的Docker,借助Ollama的Docker镜像,我们可以轻松地在CPU上运行应用程序,无需进行任何复杂的配置。即使没有高端显卡,我们也无需担心。
亲测,在Macbook Air M1上使用docker运行,如下图:
-
参考地址:Ollama is now available as an official Docker image · Ollama Blog
一般电脑的速度怎么样
-
推理速度达到多少算可用
Reddit上的一项调研。多数人认为7-10 Token/s是一种可用的速度。这个速度大概等于每秒5-7.5个单词,因为一般来说,1个单词等于1.3个Token。我认为10 Token/s是一个可用的临界点。然而,也有一些人持极端观点,他们认为每秒1个Token也是可以接受的。这个讨论非常有趣,有兴趣的人可以去看看。
-
Reddit关于Token速度的讨论:https://www.reddit.com/r/LocalLLaMA/comments/162pgx9/what_do_yall_consider_acceptable_tokens_per/
https://www.reddit.com/r/LocalLLaMA/comments/162pgx9/what_do_yall_consider_acceptable_tokens_per/ -
使用llama.cpp测试模型的推理速度
笔者用两台电脑测试,配置如下:
- MacBook Air:16G内存,M1芯片
- Mac Studio:128G内存,M1 ultra芯片,性能≈英伟达3090
测试结果如下:
电脑 模型参数 Token MacBook Air 4B 19.9 T/s MacBook Air 7B 12.5 T/s Mac Studio 4B 83.6 T/s Mac Studio 7B 71.2 T/s Mac Studio 70B 13.7 T/s
从测试结果来看,16G内存的MacBook Air能够轻松运行7B模型。而对于Mac Studio,它足以应对市场上的任何一个开源模型
不同需求选择不同类别的模型
-
选择对应语种的模型
在中文环境下,建议选择国内的模型,而不是国外的中文版本。目前,支持中文的模型较少。如果对应的模型不支持中文,一种建议的方法是把问题翻译成英文进行提问,获取答案后再将答案翻译成中文。当然,如果你的英文能力强,可以忽略这个建议。从目前的情况来看,中文大模型的整体效果不如英文模型,这一方面是因为训练语料相对较少;另一方面,中文的复杂性较高,想要取的更好的效果比较困难。
-
选择专用模型
一般用途选择通用模型,聊天用途选择Chat模型,编码等用途选择专用模型。不同的模型训练的语料是不同的,各有其优势。根据用途选择对应的模型,可以达到最好的效果。
彩蛋:存在越级打怪的可能性吗,7B的Mistral能不能打败70B的LLama 2?
如题,我们用一道题测试下
问题:给出数据,找到订单金额最高的用户,并且返回用户id
The following is the order data, which is a collection of orders. Each element includes three fields, namely country, price, and user_id.
{
"orders": [
{"country": "USA", "price": 120.5, "user_id": 1},
{"country": "Canada", "price": 90.0, "user_id": 2},
{"country": "Germany", "price": 110.75, "user_id": 3},
{"country": "France", "price": 85.55, "user_id": 4},
{"country": "Australia", "price": 200.0, "user_id": 5},
{"country": "Japan", "price": 150.0, "user_id": 6},
{"country": "South Korea", "price": 130.2, "user_id": 7},
{"country": "Brazil", "price": 70.0, "user_id": 8},
{"country": "Italy", "price": 95.0, "user_id": 9},
{"country": "Spain", "price": 105.0, "user_id": 10}
]
}
Please calculate the user_id with the highest price and output user_id
答:
虽然两者都能正确地给出答案,但是解法上有所不同。Mistral采用了遍历的方式,而LLama2则充分利用了DataFrame的特性,尽可能地简化了代码。显然,拥有更大规模参数的LLama2表现的更“聪明”一些