大模型I/O的实现过程及原理(2)调用模型青训营X豆包MarsCode 技术训练营AI| 豆包MarsCode AI 刷题

140 阅读4分钟

一、大语言模型的发展与重要性

image.png

语言模型的发展在自然语言处理领域起着关键作用。Google 在 2018 年提出的 Transformer 架构成为众多预训练模型的核心底层架构,基于此架构预训练所得的大规模语言模型被称为 “基础模型”。早期的 BERT 极具代表性,推动了 NLP 领域进入新时代,使得解决翻译、文本总结、聊天对话等复杂问题成为可能。如今预训练模型的趋势是参数越来越多、规模越来越大

二、预训练 + 微调的模式

  1. 预训练:在大规模无标注文本数据上进行训练,让模型学习自然语言的基础表达、上下文信息和语义知识,为后续任务提供通用丰富的语言表示基础。
  2. 微调:在预训练模型基础上,根据特定下游任务对模型进行微调,例如在特定领域数据上进行微调以创建垂类模型。这种模式优势明显,一方面能将大量通用语言知识迁移到下游任务,减少训练时间和数据需求;另一方面可快速根据特定任务优化,简化模型部署难度,且具有很强的可扩展性,提高了 NLP 技术在实际应用中的可用性和普及程度。

2. ## 用 HuggingFace 跑开源模型

(这里用huggingface用vpn连接打开,p:一个月十几块/酷似为啥没免费的pc端)

Snipaste_2024-11-09_19-56-06.png 搜索框里搜自己想要的模型,然后申请(很多不用申请的,但是meta家的必须要求了) image.png ///这里强烈推荐要了解大模型且自己打算深入大模型应用开发的看看这个博主视频,讲了ai系列的视频{p:重点是手把手教}(链接:【Huggingface小白AI入门,你必须了解的免费开源模型大超市】www.bilibili.com/video/BV1Mr…)

一、通过 HuggingFace 调用 Llama

  1. 使用 HuggingFace 的 Transformers 库调用 Llama:

    • 导入必要的库,包括AutoTokenizerAutoModelForCausalLM

    • 加载预训练模型的分词器和模型,可通过设置device_map = 'auto'自动将模型加载到可用硬件设备上。

    • 给定提示,将其转化为模型可理解的格式并在模型上生成文本,最后解码输出为可读文本。但在本地推理耗时较久,且开源小模型与商业模型如 OpenAI 的 ChatGPT 有一定差距。

二、LangChain 和 HuggingFace 的接口

  1. 通过 HuggingFace Hub 集成:

    • 通过在HuggingFaceHub类的repo_id中指定模型名称,可直接下载并使用模型,集成过程简单。初始化 LLM,创建提示模板和生成提示的过程与之前类似,还引入了LLMChain的概念,用于调用 LLM。但在测试中,部分模型可能出现错误。
  2. 通过 HuggingFace Pipeline 集成:

    • 使用 HuggingFace 的 Pipeline 工具,它简化了多种 NLP 任务的使用流程。通过指定预训练模型名称,加载词汇器,创建文本生成管道,再创建HuggingFacePipeline实例并与 LangChain 结合使用。但对于某些模型可能因规模较小等原因生成的结果不够理想。

三、用 LangChain 调用自定义语言模型

  1. 自定义 LLM 类:

    • 为了在 LangChain 中调用自定义模型,创建一个继承自LLM基类的自定义类。该类需实现_call方法用于接收输入并返回响应,以及可选的_identifying_params方法用于打印类的属性。
    • 以使用量化后的 Llama 模型为例,安装llama-cpp-python包,通过Llama库在_call方法中调用模型生成回复。自定义类还定义了模型的标识参数和类型属性。

通过以上方法,可以实现从不同途径在 LangChain 中调用各种模型,包括开源模型和自定义模型,为自然语言处理任务提供了更多的选择和灵活性。但不同方法在使用过程中可能会遇到各种问题,需要根据实际情况进行调整和优化。 //这里就不说自己训练和微调了,本人也没试过啊(doge) 总结:调用模型篇的原文内容大都还是对原有模型的调用细则讲说,比如前面一节提示模板讲了很多都是一小方面提示词的改进,可以说为单领域的精通训练(自己套壳)。现在国内的模型也不比国外差多少,字节的,智谱的等等都可以用,一般也满足使用了。