自学内容网 自学内容网

大模型学习起步的经验分享

我来聊聊这一年来的学习实践经验:

一、前期准备

首先就是显卡的问题,如果有条件,最好买一块,显卡的显存24GB起步,不要低于这个标准,这是目前不断演进的LLM流行版本的最低标准了。

显卡就是NVIDIA显卡,说白了就是为了cuda,有钱4090,没钱二手3090,不要对AMD显卡心存侥幸。

不要考虑耗电问题,绝大多数时间的耗电是空调引起的。

当然了,如果兜里没有那么多银两,也不必过于担心,就先从商用模型开始,首推智谱清言的开放平台,其次deepseek,通义千问,价格低,完全是补贴价,也非常不错。

如果有能耐,claude、gpt4的智力输出肯定效果是最好的。使用成本较高,20刀一个月(聊天和API分开算)。

但是,对于学习实验,这两个头牌模型也不是啥必须品。

二、模型与API

以上是前置条件,下来具体怎么做,我接着说:

如果有显卡,其实主要可以学到是本地大模型的部署体验和微调。

对于模型的API调用,对于学习者并不用担心是商用模型还是本地模型,其实大家都有自己的专有接口,同时也都支持OpenAI API接口为标准。用OpenAI API接口,对于以后的程序来说更通用,学习成本也更低。例如:

from openai import OpenAI
import json
import re

xinfernece_url="http://10.168.3.86:9997/v1"
xinference_api_key="EMPT"
xinfernece_model="glm4-chat"

zhipu_url="https://open.bigmodel.cn/api/paas/v4/"
zhipu_api_key="你的API-KEY"
zhipu_model="glm-4-0520"

client = OpenAI(base_url=zhipu_url, api_key=zhipu_api_key)

response = client.chat.completions.create(
    model=zhipu_model,
    max_tokens=4096,
    messages=[
        {"role": "system", "content": "你现在扮演奥特曼"},
        {"role": "user", "content": "讲一个关于赛罗奥特曼的故事"},
    ],
    response_format={"type": "json_object"}
)
print(response.choices[0].message.content)

上述这段代码就是一个很简单的调用OpenAI API接口的例子,但已经跟OpenAI的GPT4没有什么关系了。

如果我们使用xinfernece_这组参数,那么我们就是通过Xinference服务(一会儿讲)提供的OpenAI接口来调用本地部署的LLM——glm4-chat(90亿参数)开源模型。

默认我们使用了zhipu_这组参数,那么我们就是通过互联网访问智谱开放平台提供的glm-4-0520(千亿参数)商用模型。

看起来是不是很简单。

三、大模型技术栈

接着我们说说大模型学习的体系:

LLM(本地 & 商用)->(推理 & 微调 & 提示词 ) -> (RAG & Tools) -> (workflow & Agent)。

我们可以根据上述的技术栈一步步向上开始学习。也就是说从最底层的大模型本体,到推理服务、微调训练和提示词能力,再到RAG检索增强或工具集增强,最后是AI工作流和智能体。当然了知识图谱、AI搜索也在凑大模型的热闹。

说说LLM本地化部署,目前看,比较适合单卡(24GB)推理的本地大模型有GLM4-9B、Qwen2-7B、deepseek,首推还是GLM4-9B,可能未来会推出的Qwen2.5也不可小觑,LLama3 8B不是太建议使用,主要还是中文能力真的不咋地,如果用到生产,真不知道对齐的怎么样,会不会胡说。

LLM本地部署最好的方案是使用推理框架,基本上就是两个中选择一个,Ollama或者Xinference,Ollama部署简单,但让我推荐,我只会是Xinference,一方面是国内团队,交流很容易,更新速度很快,另一方面就是支持的模型特别丰富。

推理框架的好处就是统一化了API接口,就是上面例子中看到的OpenAI API接口,那么你部署什么模型都一样去调用。

提示词

我们在讨论一下微调还是提示词的问题。什么意思呢?本质上就是部署的模型,通用智力不咋地,但你又希望你的模型能在你希望的方面牛逼起来。

上面这段提示词是我在dify上构建了一个英语翻译,但我翻译的是技术文档为主,因此我不仅希望LLM能正常翻译,还希望它看到内容中有代码例子的时候就不要翻译了,给做个Markdown代码标记,方便阅读。那么提示词里你就得给LLM一点例子,因为AI模仿起来一点就会。

当然了,还有个前提,你得告诉AI,你是什么角色,上面的例子就说你是个翻译专家和程序技术专家,AI看到这个,马上就知道自己的身份应该输出什么内容了。

那么我们仔细去想想,如果把这些让他去模仿的提示例子多给一些,形成一个数据集,其实就可以让LLM做微调了。微调的本质就是让AI更多的去理解你想让他变成什么模样,更想让AI说什么话。

但是对于大多数人使用,其实选择通用智能更好的模型,自己学习如何给出更好的提示词,是更好的选择,可以更快得到想要的效果。

微调更多是因为必须使用的模型在自己希望的生产领域还是不给力,所以才要重塑AI最基本的底色,朝着领域的、专业的方面提升智力。然后在这基础上做提示词、RAG等等事情,会更有效率。

工具调用

最后我在说下RAG和Tools,本质上RAG就是建立自己的知识库,这样的好处是防止LLM乱说,这样就能把问题重心都放在知识库上面,这个比较适合的领域非常广泛。

但是RAG是文本分块,检索内容的输出很有限,因此长文本加载阅读也是一个好办法,另外就是基于知识图谱提出GraphRAG方案,抽象和全局理解提供的内容更好,但就是慢,用于生产,还需时日。

Tools是非常关键的一个环节,流程上,你提出问题,LLM判断得给出执行命令,然后你去执行命令。

上面这个例子是GLM4-9B提供的工具调用的演示例子,我们可以看到,我问了一句:用nvidia-smi命令查询一下,LLM根据预置的提示词就能明白需要返回get_shell方法名以及 {query: nvidia-smi}这句话了。

演示例子的程序根据LLM这句话就进行了本地shell命令调用,再返回调用的结果,让LLM再次组织语言。这个工具调用的过程其实就是智能体的基本形态了。

其实我们可以通过类似很多AI工作流中获得这方面的启发,我比较推荐Dify。

好了,有机会再给大家聊聊AI工作流和智能体。


原文地址:https://blog.csdn.net/u011457868/article/details/142352106

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!