一、核心问题
这节课着重探讨 Model I/O 中的 LLM 子模块。课程伊始提出关键问题:若不想仅使用 OpenAI 的 API,而想调用其他模型(如开源的 Llama2 或 ChatGLM),甚至在本机从头训练新模型并应用于 LangChain,该如何操作?
二、大语言模型发展史
-
Transformer 架构的诞生:2018 年 Google 的论文《Attention is all you need》提出 Transformer 架构,成为几乎所有预训练模型的核心底层架构,基于此预训练所得的大规模语言模型被称为 “基础模型”。
-
预训练模型的发展历程:早期 BERT 是最具代表性和影响力的预训练模型,它通过学习文本的前向和后向上下文信息深入理解句子结构。此后众多大型预训练模型涌现,推动自然语言处理领域进入新时代,在翻译、文本总结、聊天对话等任务中发挥重要作用。
-
预训练模型的现状与挑战:如今预训练模型参数增多、规模变大,训练成本高昂,多由世界顶级大厂承担,普通学术组织和高校较难在该领域引领科技突破。
三、预训练 + 微调的模式
-
预训练:在大规模无标注文本数据上训练模型,使其学习自然语言的基础表达、上下文信息和语义知识,为下游任务提供通用且丰富的语言表示基础。
-
微调:基于预训练模型,依据特定下游任务对模型头部或部分参数进行适应性调整,通常在相对小的有标注数据集上进行有监督学习,以满足特定任务需求。此过程相比从头训练模型更快,数据量需求更少,利于工程师高效开发和部署 NLP 解决方案。预训练 + 微调模式优势显著,可迁移通用语言知识、快速优化特定任务、简化模型部署难度且具有强可扩展性,提升了 NLP 技术在实际应用中的可用性与普及性。
四、使用开源模型步骤
-
用 HuggingFace 跑开源模型
- 注册并安装 HuggingFace:登录网站获取 Token,用
pip install transformers安装库,在命令行运行huggingface-cli login设置 Token(也可在程序中设置但安全性稍逊)。 - 申请使用 Meta 的 Llama2 模型:在 HuggingFace 的 Model 中找到
meta-llama/Llama-2-7b,选择后若首次使用需申请 Access,获批较快。 - 通过 HuggingFace 调用 Llama:导入
AutoTokenizer和AutoModelForCausalLM,使用from_pretrained方法加载预训练的分词器和模型(通过device_map = 'auto'自动加载到可用硬件设备如 GPU)。给定提示,经分词器转换格式后输入模型,用generate方法生成文本,再用decode方法将生成的令牌解码成文本并跳过特殊令牌。该过程典型,但因在本地推理,耗时较久,且生成结果可能不尽人意,如对玫瑰爱情故事的理解有误(课程中的例子,把玫瑰理解成了人名),表明开源小模型与 OpenAI 的 ChatGPT 存在差距。
- 注册并安装 HuggingFace:登录网站获取 Token,用
-
LangChain 和 HuggingFace 的接口
- 通过 HuggingFace Hub:HuggingFace Hub 是开源模型中心化存储库。集成过程简单,在
HuggingFaceHub类的repo_id中指定模型名称即可下载使用,模型自动下载到 HuggingFace 的 Cache 目录。初始化 LLM、创建提示模板等过程熟悉,通过llm_chain调用 LLM,测试google/flan-t5-small模型时,对玫瑰所属花种的回答较简单,体现出不同时期模型能力的差异。 - 通过 HuggingFace Pipeline:HuggingFace 的 Pipeline 简化 NLP 任务使用流程。指定预训练模型名称,加载词汇器,创建文本生成管道并配置参数(如
torch_dtype、device_map、max_length),创建HuggingFacePipeline实例并传入管道和模型参数(如temperature)。定义输入模板创建提示,通过LLMChain实例运行生成花束描述,结果不太理想,可能因模型较小(如 7B)能力有限。
- 通过 HuggingFace Hub:HuggingFace Hub 是开源模型中心化存储库。集成过程简单,在
五、用 LangChain 调用自定义语言模型
若要训练自己的模型且在本机运行,可创建LLM的衍生类。LLM基类位于langchain.llms.base,自定义类需实现_call方法(接收输入字符串并返回响应字符串)和可选的_identifying_params方法(帮助打印类属性)。以从 HuggingFace 下载的llama-2-7b-chat.ggmlv3.q4_K_S.bin模型为例(该模型已被量化,量化可优化模型大小和性能,使其能在 CPU 或特定硬件上运行),安装llama-cpp-python包后构建自定义LLM类,类内部通过Llama类实现模型推理功能并返回回答。测试发现 Llama2 量化版虽中文表现欠佳,但英文表现出色,在本机 CPU 环境下推理速度可接受,考虑到其为开源免费且最小版本(7B 量化版)能有此效果,综合评价较高。
六、总结
本节课让我们了解到:大模型训练需大量数据和计算资源,训练后常需微调以适配特定任务,还可通过量化减小模型大小、加快推理速度。若深入学习大模型,PyTorch、HuggingFace 和 LangChain 是关键工具,它们在 AI 模型全生命周期中起关键作用,助力研究者和开发者开发部署高效 AI 系统。课程为我们打开大模型开发新世界的大门,其中众多新知识等待进一步探索与挖掘。