如何选择开源大模型:写给小白看5条黄金法则

原则1:选择开源技术主要看社区和支持

与其他开源技术一样,我们应该最关注的两个指标是社区活跃度(星级数)和其背后的组织。

对比核心的几个开源模型:

模型参数规模(B)星星数(k)组织国家
LLama27,13,34,7052.1Meta美国
Mistral 7B78.5Mistral AI法国
通义千问Qwen1.8,7,14,7210.5阿里巴巴中国
ChatGLM-6B611.6智谱AI中国

以上数据截止至2024年04月10日,仅代表个人使用经验。后续我会进行一些简单的评测,如果有其他模型你们想了解的,也可以私信我。

通过以上的比较,我认为LLama2和通义千问Qwen绝对是开源模型界的领导者。无论是社区活跃度,参数规模支持程度,还是更新频率,这两个模型都领先于其他的开源模型。我建议大家在学习和研究的时候选择这两个模型。

参考资料:

https://github.com/wgwang/awesome-LLMs-In-China?tab=readme-ov-file

https://github.com/eugeneyan/open-llms

https://chat.lmsys.org/?leaderboard

原则2:选7B还是70B?参数越大,效果越好

  • 不同参数规模模型效果对比

    我们来看一下,对于同一个问题,在同一个模型下不同参数规模的回答效果如何。

    我们选择了通义千问模型,从左到右依次是4B模型,7B模型,72B模型。

    在这里插入图片描述

    比较可以看出,4B模型未能给出答案,而7B模型提供了步骤说明和代码。72B模型不仅给出了步骤说明和代码,而且其步骤更具结构化,标题加粗,使用分号等,使人更容易理解。它给出的代码也更优秀,首先在数据部分采用了类似占位符的形式,便于我们填充。其次,它在饼图上提供了标题和数据格式化。

    通过比较,我们可以得出这样的结论:对于同一个模型,参数越大,模型的效果通常越好。

    那么,对于不同模型呢?会出现越级的情况吗?文章结尾有彩蛋

    当然,越大规模的参数,对内存需求越大。

  • 内存不够怎么办

    模型参数的规模与内存(实际上指的是显存)强烈相关,模型的参数需全部加载到内存中才能进行推理。简单地说,1B参数大约需要4GB,那么7B的模型需要28G的内存,70B的模型则需要280G的内存。算下来,24G内存的4090显卡都甚至无法运行7B的模型,这还如何玩!

    先别急,内存问题可以通过模型量化来解决。量化是通过降低参数的精度来减少对内存的需求。量化后的7B模型仅需3.8G,足以轻松在任何一台PC上运行。

    从Ollama支持的模型库中可以看出,大型模型在量化后对内存的需求,如下表:

    模型参数对内存需求
    LLama2 7B7B3.8G
    LLama2 13B13B7.3G
    LLama2 70B70B39G

    但是,量化也会带来新的问题,不同程度的参数精度损失会增加模型的困惑度(俗称:变傻)。因此,我们需要找到一个平衡,选择最经济且最可用的量化后的模型。

    我们可以在HuggingFace上找到量化模型,一般开源模型都会说明量化后的困惑度,并推荐大家选择合适的量化模型。如果你对此感兴趣,可以跳到附录查看

  • 没有显卡怎么办

    感谢万能的Docker,借助Ollama的Docker镜像,我们可以轻松地在CPU上运行应用程序,无需进行任何复杂的配置。即使没有高端显卡,我们也无需担心。

    亲测,在Macbook Air M1上使用docker运行,如下图:
    在这里插入图片描述
    参考地址:https://ollama.com/blog/ollama-is-now-available-as-an-official-docker-image

原则3:在推理速度可用的情况下,优先考虑参数规模

  • 推理速度达到多少算可用

    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/

  • 使用llama.cpp测试模型的推理速度

    笔者用两台电脑测试,配置如下:

    • MacBook Air:16G内存,M1芯片
    • Mac Studio:128G内存,M1 ultra芯片,性能≈英伟达3090

    测试结果如下:

    电脑模型参数Token
    MacBook Air4B19.9 T/s
    MacBook Air7B12.5 T/s
    Mac Studio4B83.6 T/s
    Mac Studio7B71.2 T/s
    Mac Studio70B13.7 T/s

从测试结果来看,16G内存的MacBook Air能够轻松运行7B模型。而对于Mac Studio,它足以应对市场上的任何一个开源模型

原则4:模型专用,不同需求选择不同类别的模型

  • 选择对应语种的模型

    在中文环境下,建议选择国内的模型,而不是国外的中文版本。目前,支持中文的模型较少。如果对应的模型不支持中文,一种建议的方法是把问题翻译成英文进行提问,获取答案后再将答案翻译成中文。当然,如果你的英文能力强,可以忽略这个建议。从目前的情况来看,中文大模型的整体效果不如英文模型,这一方面是因为训练语料相对较少;另一方面,中文的复杂性较高,想要取的更好的效果比较困难。

  • 选择专用模型

    一般用途选择通用模型,聊天用途选择Chat模型,编码等用途选择专用模型。不同的模型训练的语料是不同的,各有其优势。根据用途选择对应的模型,可以达到最好的效果。

原则5:要考虑模型的可扩展性

在考虑扩展性时,我们需要考虑两个方面:运行环境的适应性和有没有优秀的应用框架。

  • 运行环境的适配性

    Ollama是一个优秀的开源项目,提供模型基座,屏蔽环境差异,可以在Windows、MacOS、Linux上运行,甚至可以在无GPU的情况下,仅用CPU运行。

    Ollama支持服务器端,通过使用Rest API接口,向外部提供统一的大模型服务。这些接口使上层应用可以轻松接入,极大地提高了系统的可用性。

    目前,Ollama支持的模型众多,主流的开源模型都可以在Ollama库中找到。此外,Ollama还支持自定义模型。你可以从HuggingFace上下载更多模型,然后加载到Ollama中,这使得Ollama的应用更加丰富。

    !https://prod-files-secure.s3.us-west-2.amazonaws.com/6cdb6123-fe4f-4c2d-888c-dcc64931d8b1/dbdfb663-a517-4f2c-a691-9a9372a11397/Untitled.png

    Ollama模型库:https://ollama.com/library

  • 是否支持优秀的应用框架

    目前最优秀的应用框架就是Langchain,后面我们会单独介绍Langchain。好消息是Langchain支持了Ollama,这意味着只要Ollama提供支持的模型,Langchain就可以支持。以下是Langchain集成Ollama的示例

    # LangChain supports many other chat models. Here, we're using Ollama
    from langchain_community.chat_models import ChatOllama
    from langchain_core.output_parsers import StrOutputParser
    from langchain_core.prompts import ChatPromptTemplate
    
    # supports many more optional parameters. Hover on your `ChatOllama(...)`
    # class to view the latest available supported parameters
    llm = ChatOllama(model="llama2")
    prompt = ChatPromptTemplate.from_template("Tell me a short joke about {topic}")
    
    # using LangChain Expressive Language chain syntax
    # learn more about the LCEL on
    # /docs/expression_language/why
    chain = prompt | llm | StrOutputParser()
    
    # for brevity, response is printed in terminal
    # You can use LangServe to deploy your application for
    # production
    print(chain.invoke({"topic": "Space travel"}))
    

    从代码中,我们可以看出,Langchain支持Ollama的调用。

    参考地址:https://python.langchain.com/docs/integrations/chat/ollama/

    在这里插入图片描述
    关注我,一起AI转型之旅~

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值