logo

LLM 概览

Large Language Model

wangzf / 2024-03-24


目录

LLM 学习

学习路径

  1. 试用不同的大语言模型(LLM)
    • OpenAI GPT-3.5, GPT-4.0, GPT-4o
    • Meta LlaMA 3.1-8B-Instruct
  2. 创建一个 AI 智能体(Agent)
  3. 了解目前 LLM 和 AI 的局限性
  4. 创建一个简单的 RAG 系统
  5. 微调一个 LLM
  6. 应用开发
    • 基于不同操作系统的开源 LLM 环境配置指南;
    • 针对不同模型要求提供的详细环境配置步骤;
    • 国内外主流开源 LLM 的部署使用教程;
    • 开源 LLM 的部署应用指导,包括命令行调用、在线部署(StreamLit)、LangChain 框架集成等;
    • 开源 LLM 的全量微调、高效微调方法,包括
      • 分布式全量微调
      • LoRA
      • ptuning

学习教程

LLM 介绍

LLM 简介

大语言模型(LLM,Large Language Model),也称大型语言模型, 是一种旨在理解和生成人类语言的人工智能模型。

LLM 通常指包含数百亿(或更多)参数的语言模型,它们在海量的文本数据上进行训练, 从而获得对语言深层次的理解。目前,国外的知名 LLM 有 GPT-3.5、GPT-4、PaLM、Claude 和 LLaMA 等, 国内的有文心一言、讯飞星火、通义千问、ChatGLM、百川等。

为了探索性能的极限,许多研究人员开始训练越来越庞大的语言模型, 例如拥有 1750 亿参数的 GPT-3 和 5400 亿参数的 PaLM 。 尽管这些大型语言模型与小型语言模型(例如 3.3 亿参数的 BERT 和 15 亿参数的 GPT-2)使用相似的架构和预训练任务, 但它们展现出截然不同的能力,尤其在解决复杂任务时表现出了惊人的潜力,这被称为“涌现能力”。 以 GPT-3 和 GPT-2 为例,GPT-3 可以通过学习上下文来解决少样本任务,而 GPT-2 在这方面表现较差。 因此,科研界给这些庞大的语言模型起了个名字,称之为 “大语言模型(LLM)”。 LLM 的一个杰出应用就是 ChatGPT ,它是 GPT 系列 LLM 用于与人类对话式应用的大胆尝试, 展现出了非常流畅和自然的表现。

LLM 发展

2022 年 ChatGPT 的出现标志着人工智能正式进入大模型时代,但在此之前大模型已经走过了很长的发展历程。 自从图灵测试提出以来,如何通过机器智能理解人类语言一直是重要的研究问题, 逐渐发展成为独立的研究领域,即 自然语言处理(Natural Language Processing, NLP)。 而在自然语言处理领域,过去几十年里,统计语言建模一直是主要的研究方法,随着深度学习的进步, 逐渐从统计语言建模发展为 神经网络建模

语言建模的研究可以追溯到 20 世纪 90 年代,当时的研究主要集中在采用统计学习方法来预测词汇, 通过分析前面的词汇来预测下一个词汇。但在理解复杂语言规则方面存在一定局限性。

随后,研究人员不断尝试改进, 2003 年深度学习先驱 Bengio 在他的经典论文 《A Neural Probabilistic Language Model》 中, 首次将深度学习的思想融入到语言模型中。强大的神经网络模型, 相当于为计算机提供了强大的 “大脑” 来理解语言,让模型可以更好地捕捉和理解语言中的复杂关系。

2018 年左右,Transformer 架构的神经网络模型 开始崭露头角。通过大量文本数据训练这些模型, 使它们能够通过阅读大量文本来深入理解语言规则和模式,就像让计算机阅读整个互联网一样, 对语言有了更深刻的理解,极大地提升了模型在各种自然语言处理任务上的表现。

近几年,随着 BERT 等模型在 NLP 的各种任务上表现出优异的性能, 预训练模型(Pre-trained Language Models, PLM) 被广泛认为是提高机器文本处理能力的有效方法。 预训练 + 微调 这一 “组合技”,即:首先在大规模通用数据集上进行预训练, 再用具体任务的少量数据进行微调的方法,在各种应用场景中广泛应用并达到了很好的效果。

在预训练模型被证明有效之后,有研究发现 将模型“扩大”有助于提高性能, 其中“扩大”包含两层含义:一方面是将模型加深结构、增加参数另一方面是提高训练的数据量。顺着这一方向,一系列模型被提出, 其中比较有名的有谷歌的 T5(参数量 11B)和 Open AI 的 GPT-2(参数量 1.5B)。 人们惊讶地发现模型变大的同时,不仅在原有能力上表现更优异,而且涌现出强悍的理解能力, 在原先表现很差的许多复杂任务上都有巨大的突破。为了将这些模型与以前的加以区分, 大语言模型(Large Language Model, LLM) 概念被提出,通常用来指代参数量在数十亿、 百亿甚至千亿以上的模型。大家都意识到这是一条潜力巨大的发展道路, 许多机构都着手于大模型的工作,大模型时代正式开始。

大语言模型及其背后技术的发展:

img

LLM 能力

涌现能力

涌现能力,emergent abilities

区分 大语言模型(LLM) 与以前的 预训练语言模型(PLM) 最显著的特征之一是它们的 涌现能力。 涌现能力是一种令人惊讶的能力,它在小型模型中不明显,但在大型模型中特别突出。 类似物理学中的相变现象,涌现能力就像是模型性能随着规模增大而迅速提升,超过了随机水平, 也就是我们常说的量变引起质变。

涌现能力可以与某些复杂任务有关,但我们更关注的是其通用能力。 接下来,我们简要介绍三个 LLM 典型的涌现能力:

这些涌现能力让 LLM 在处理各种任务时表现出色,使它们成为了解决复杂问题和应用于多领域的强大工具。

作为基座模型支持多元应用的能力

在 2021 年,斯坦福大学等多所高校的研究人员提出了 基座模型(foundation model) 的概念, 清晰了预训练模型的作用。这是一种全新的 AI 技术范式,借助于海量无标注数据的训练, 获得可以适用于大量下游任务的大模型(单模态或者多模态)。 这样,多个应用可以只依赖于一个或少数几个大模型进行统一建设。

大语言模型是这个新模式的典型例子,使用统一的大模型可以极大地提高研发效率。 相比于每次开发单个模型的方式,这是一项本质上的进步。大型模型不仅可以缩短每个具体应用的开发周期, 减少所需人力投入,也可以基于大模型的推理、常识和写作能力,获得更好的应用效果。 因此,大模型可以成为 AI 应用开发的大一统基座模型,这是一个一举多得、全新的范式,值得大力推广。

支持对话作为统一入口的能力

让大语言模型真正火爆的契机,是基于对话聊天的 ChatGPT。 业界很早就发现了用户对于对话交互的特殊偏好, 陆奇在微软期间就于 2016 年推进过 “对话即平台(conversation as a platform)” 的战略。 此外,苹果 Siri 、亚马逊 Echo 等基于语音对话的产品也非常受欢迎, 反映出互联网用户对于聊天和对话这种交互模式的偏好。虽然之前的聊天机器人存在各种问题, 但大型语言模型的出现再次让聊天机器人这种交互模式可以重新涌现。 用户愈发期待像钢铁侠中“贾维斯”一样的人工智能,无所不能、无所不知。 这引发我们对于智能体(Agent)类型应用前景的思考,Auto-GPT、微软 Jarvis 等项目已经出现并受到关注, 相信未来会涌现出很多类似的以对话形态让助手完成各种具体工作的项目。

LLM 特点

大语言模型具有多种显著特点,这些特点使它们在自然语言处理和其他领域中引起了广泛的兴趣和研究。 以下是大语言模型的一些主要特点:

大语言模型是一种具有强大语言处理能力的技术,已经在多个领域展示了潜力。 它们为自然语言理解和生成任务提供了强大的工具,同时也引发了对其伦理和风险问题的关注。 这些特点使 LLM 成为了当今计算机科学和人工智能领域的重要研究和应用方向。

LLM 应用与影响

LLM 已经在许多领域产生了深远的影响:

总之,LLM 是一种令人兴奋的技术,它让计算机更好地理解和使用语言, 正在改变着我们与技术互动的方式,同时也引发了对未来人工智能的无限探索。

LLM 模型

未开源 LLM

GPT 系列

OpenAI 在 2018 年提出的 GPT(Generative Pre-Training) 模型是典型的生成式预训练语言模型之一。 GPT 模型的基本原则是通过语言建模将世界知识压缩到仅解码器(decoder-only) 的 Transformer 模型中, 这样它就可以恢复(或记忆)世界知识的语义,并充当通用任务求解器。它能够成功的两个关键点:

OpenAI 在 LLM 上的研究大致可以分为以下几个阶段:

img

2022 年 11 月,OpenAI 发布了基于 GPT 模型(GPT-3.5 和 GPT-4) 的会话应用 ChatGPT。 由于与人类交流的出色能力,ChatGPT 自发布以来就引发了人工智能社区的兴奋。 ChatGPT 是基于强大的 GPT 模型开发的,具有特别优化的会话能力。 ChatGPT 从本质上来说是一个 LLM 应用,是基于基座模型开发出来的,与基座模型有本质的区别。 其支持 GPT-3.5 和 GPT-4 两个版本。 现在的 ChatGPT 支持最长达 32,000 个字符,知识截止日期是 2021 年 9 月,它可以执行各种任务, 包括代码编写、数学问题求解、写作建议等。ChatGPT 在与人类交流方面表现出了卓越的能力: 拥有丰富的知识储备,对数学问题进行推理的技能,在多回合对话中准确追踪上下文, 并且与人类安全使用的价值观非常一致。后来,ChatGPT 支持插件机制, 这进一步扩展了 ChatGPT 与现有工具或应用程序的能力。到目前为止, 它似乎是人工智能历史上最强大的聊天机器人。ChatGPT 的推出对未来的人工智能研究具有重大影响, 它为探索类人人工智能系统提供了启示。

2023 年 3 月发布的 GPT-4,它将文本输入扩展到多模态信号。GPT-3.5 拥有 1750 亿 个参数, 而 GPT4 的参数量官方并没有公布,但有相关人员猜测,GPT-4 在 120 层中总共包含了 1.8 万亿参数, 也就是说,GPT-4 的规模是 GPT-3 的 10 倍以上。因此,GPT-4 比 GPT-3.5 解决复杂任务的能力更强, 在许多评估任务上表现出较大的性能提升。 最近的一项研究通过对人为生成的问题进行定性测试来研究 GPT-4 的能力, 这些问题包含了各种各样的困难任务,并表明 GPT-4 可以比之前的 GPT 模型(如 GPT-3.5 )实现更优越的性能。 此外,由于六个月的迭代校准(在 RLHF 训练中有额外的安全奖励信号),GPT-4 对恶意或挑衅性查询的响应更安全, 并应用了一些干预策略来缓解 LLM 可能出现的问题,如幻觉、隐私和过度依赖。

GPT-3.5 是免费的,而 GPT-4 是收费的。需要开通 plus 会员 20 美元/月。 通常我们可以调用模型 API 来开发自己的应用,主流模型 API 如下,具体价格见官网介绍:

Claude 系列

Claude 系列模型是由 OpenAI 离职人员创建的 Anthropic 公司开发的闭源语言大模型。 最早的 Claude 于 2023 年 3 月 15 日发布,在 2023 年 7 月 11 日,更新至 Claude-2, 并在 2024 年 3 月 4 日更新至 Claude-3。 Claude 3 系列包括三个不同的模型,分别是 Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus, 它们的能力依次递增,旨在满足不同用户和应用场景的需求。

PaLM 和 Gemini 系列

PaLM 系列语言大模型由 Google 开发。其初始版本于 2022 年 4 月发布,并在 2023 年 3 月公开了 API。 2023 年 5 月,Google 发布了 PaLM 2,2024 年 2 月 1 日, Google 将 Bard(之前发布的对话应用)的底层大模型驱动由 PaLM2 更改为 Gemini, 同时也将原先的 Bard 更名为 Gemini。 目前的 Gemini 是第一个版本,即 Gemini 1.0,根据参数量不同分为 Ultra, Pro 和 Nano 三个版本。

百度文心一言

文心一言是基于百度文心大模型的知识增强语言大模型,于 2023 年 3 月在国内率先开启邀测。 文心一言的基础模型文心大模型于 2019 年发布 1.0 版。 更进一步划分,文心大模型包括 NLP 大模型、CV 大模型、跨模态大模型、生物计算大模型、行业大模型。 中文能力相对来说非常不错的闭源模型。文心一言网页版分为免费版和专业版,同时也可以使用 API 进行调用。

科大讯飞星火

讯飞星火认知大模型是科大讯飞发布的语言大模型,支持多种自然语言处理任务。 该模型于 2023 年 5 月首次发布,后续经过多次升级。2023 年 10 月, 讯飞发布了讯飞星火认知大模型 V3.0。2024 年 1 月,讯飞发布了讯飞星火认知大模型 V3.5, 在语言理解,文本生成,知识问答等七个方面进行了升级,并且支持 system 指令,插件调用等多项功能。

开源 LLM

LLaMa 系列

LLaMA 系列模型是 Meta 开源的一组参数规模 从 7B 到 70B 的基础语言模型。 LLaMA 于 2023 年 2 月发布,2023 年 7 月发布了 LLaMA2 模型, 并于 2024 年 4 月 18 日发布了 LLaMA3 模型。它们都是在数万亿个字符上训练的, 展示了如何仅使用公开可用的数据集来训练最先进的模型,而不需要依赖专有或不可访问的数据集。 这些数据集包括 Common Crawl、Wikipedia、OpenWebText2、RealNews、Books 等。 LLaMA 模型使用了大规模的数据过滤和清洗技术,以提高数据质量和多样性,减少噪声和偏见。 LLaMA 模型还使用了高效的数据并行和流水线并行技术,以加速模型的训练和扩展。 特别地,LLaMA 13B 在 CommonsenseQA 等 9 个基准测试中超过了 GPT-3 (175B), 而 LLaMA 65B 与最优秀的模型 Chinchilla-70B 和 PaLM-540B 相媲美。 LLaMA 通过使用更少的字符来达到最佳性能,从而在各种推理预算下具有优势。

与 GPT 系列相同,LLaMA 模型也采用了 decoder-only 架构,同时结合了一些前人工作的改进:

LLaMA3 在 LLaMA 系列模型的基础上进行了改进,提高了模型的性能和效率:

通义千问

通义千问由阿里巴巴基于 “通义” 大模型研发,于 2023 年 4 月正式发布。 2023 年 9 月,阿里云开源了 Qwen(通义千问)系列工作。2024 年 2 月 5 日, 开源了 Qwen1.5(Qwen2 的测试版)。并于 2024 年 6 月 6 日正式开源了 Qwen2。 Qwen2 是一个 decoder-Only 的模型,采用 SwiGLU 激活、RoPE、GQA 的架构。 中文能力相对来说非常不错的开源模型。

目前,已经开源了 5 种模型大小:0.5B、1.5B、7B、72B 的 Dense 模型和 57B (A14B)的 MoE 模型; 所有模型均支持长度为 32768 token 的上下文。 并将 Qwen2-7B-Instruct 和 Qwen2-72B-Instruct 的上下文长度扩展至 128K token。

GLM 系列

GLM 系列模型是清华大学和智谱 AI 等合作研发的语言大模型。2023 年 3 月 发布了 ChatGLM。 6 月发布了 ChatGLM 2。10 月推出了 ChatGLM 3。2024 年 1 月 16 日 发布了 GLM4, 并于 2024 年 6 月 6 日正式开源。

GLM-4-9B-Chat 支持多轮对话的同时,还具备网页浏览、代码执行、 自定义工具调用(Function Call)和长文本推理(支持最大 128K 上下文)等功能。

开源了对话模型 GLM-4-9B-Chat、基础模型 GLM-4-9B、 长文本对话模型 GLM-4-9B-Chat-1M(支持 1M 上下文长度)、 多模态模型 GLM-4V-9B 等全面对标 OpenAI。

Baichuan 系列

Baichuan 是由百川智能开发的开源可商用的语言大模型。其基于 Transformer 解码器架构(decoder-only)。

2023 年 6 月 15 日发布了 Baichuan-7B 和 Baichuan-13B。百川同时开源了 预训练对齐模型预训练模型是面向开发者的 “基座”,而 对齐模型则面向广大需要对话功能的普通用户。 Baichuan2 于 2023年 9 月 6 日推出。发布了 7B、13B 的 Base 和 Chat 版本, 并提供了 Chat 版本的 4bits 量化。2024 年 1 月 29 日 发布了 Baichuan 3。但是目前还没有开源。

LLM 应用开发

LLM 开发简介

将开发以大语言模型为功能核心,通过大语言模型的强大理解能力和生成能力, 结合特殊的数据或业务逻辑来提供独特功能的应用称为 大模型开发

开发大模型相关应用,其技术核心点虽然在大语言模型上, 但一般通过调用 API 或开源模型来实现核心的语言理解与生成, 通过 Prompt Enginnering 来实现大语言模型的 控制, 因此,虽然大模型是深度学习领域的集大成之作,大模型开发却更多是一个工程问题。

在大模型开发中,一般不会去大幅度改动模型,而是将 大语言模型 作为一个调用工具, 通过 Prompt Engineering数据工程业务逻辑分解等手段来充分发挥大模型能力, 适配应用任务,而不会将精力聚焦在优化模型本身上。因此,作为大模型开发的初学者, 并不需要深研大模型内部原理,而更需要掌握使用大模型的实践技巧。

以调用、发挥大模型为核心的大模型开发与传统的 AI 开发在整体思路上有着较大的不同。 大语言模型的两个核心能力 指令遵循文本生成,提供了复杂业务逻辑的简单替代方案。

在评估思路上,大模型开发与传统 AI 开发也有质的差异:

LLM 开发流程

img

  1. 确定目标
    • 在进行开发前,首先需要确定开发的目标,即 要开发的应用的应用场景、目标人群、核心价值。 对于个体开发者或小型开发团队而言,一般应先设定最小化目标,从构建一个 MVP(最小可行性产品)开始, 逐步进行完善和优化。
  2. 设计功能
    • 在确定开发目标后,需要设计 应用所要提供的功能,以及每一个功能的大体实现逻辑
    • 虽然通过使用大模型来简化了业务逻辑的拆解,但是越清晰、深入的业务逻辑理解往往也能带来更好的 Prompt 效果。 同样,对于个体开发者或小型开发团队来说,首先要确定应用的核心功能,然后延展设计核心功能的上下游功能。 例如,想打造一款个人知识库助手,那么核心功能就是结合个人知识库内容进行问题的回答, 那么其上游功能的用户上传知识库、下游功能的用户手动纠正模型回答就是也必须要设计实现的子功能。
  3. 搭建整体架构
    • 目前,绝大部分大模型应用都是采用的 特定数据库 + Prompt + 通用大模型 的架构。 需要针对所设计的功能,搭建项目的整体架构,实现从用户输入到应用输出的全流程贯通。
    • 一般来说,推荐基于 LangChain 框架 进行开发。LangChain 提供了 Chain、Tool 等架构的实现, 可以基于 LangChain 进行个性化定制,实现从用户输入到数据库再到大模型最后输出的整体架构连接。
  4. 搭建数据库
    • 个性化大模型应用需要有个性化数据库进行支撑。由于大模型应用需要进行向量语义检索, 一般使用诸如 Chroma 的向量数据库
    • 在该步骤中,需要收集数据并进行预处理,再 向量化 存储到数据库中。
    • 数据预处理 一般包括 从多种格式向纯文本的转化,例如 PDF、MarkDown、HTML、音视频等, 以及对错误数据、异常数据、脏数据进行清洗。
    • 完成预处理后,需要进行 切片向量化 构建出个性化数据库。
  5. Prompt Engineering
    • 优质的 Prompt 对大模型能力具有极大影响,需要逐步迭代构建优质的 Prompt Engineering 来提升应用性能。
    • 在该步中,首先应该明确 Prompt 设计的一般原则及技巧,构建出一个来源于实际业务的 小型验证集, 基于小型验证集设计满足基本要求、具备基本能力的 Prompt。
  6. 验证迭代
    • 验证迭代在大模型开发中是极其重要的一步, 一般指通过不断发现 Bad Case 并针对性改进 Prompt Engineering 来提升系统效果、应对边界情况。
    • 在完成上一步的初始化 Prompt 设计后,应该进行实际业务测试,探讨边界情况,找到 Bad Case, 并针对性分析 Prompt 存在的问题,从而不断迭代优化,直到达到一个较为稳定、可以基本实现目标的 Prompt 版本。
  7. 前后端搭建
    • 完成 Prompt Engineering 及其迭代优化之后,就完成了应用的核心功能, 可以充分发挥大语言模型的强大能力。接下来需要搭建 前后端, 设计产品页面,让应用能够上线成为产品。
    • 前后端开发是非常经典且成熟的领域,此处就不再赘述,采用 GradioStreamlit, 可以帮助个体开发者迅速搭建可视化页面实现 Demo 上线。
  8. 体验优化
    • 在完成前后端搭建之后,应用就可以上线体验了。接下来就需要进行长期的用户体验跟踪, 记录 Bad Case用户负反馈,再针对性进行优化即可。

LLM 项目流程

以知识库助手为例,搭建 LLM 项目的流程解析

项目规划与需求分析

  1. 项目目标:基于个人知识库的问答助手
  2. 核心功能
    • 2.1 将爬取并总结的 Markdown 文件及用户上传文档向量化,并创建知识库
    • 2.2 选择知识库,检索用户提问的知识片段
    • 2.3 提供知识片段与提问,获取大模型回答
    • 2.4 流式回复
    • 2.5 历史对话记录
  3. 确定技术架构和工具
    • 框架:LangChain
    • Embedding 模型:GPT、智谱、M3E
    • 数据库:Chroma
    • 大模型:GPT、星火大模型、文心一言、GLM 等
    • 前后端:Gradio 和 Streamlit

数据准备与向量知识库构建

  1. 收集和整理用户提供的文档
    • 用户常用文档格式有 PDF、TXT、MD 等。 首先,我们可以使用 LangChain 的文档加载器模块方便地加载用户提供的文档, 或者使用一些成熟的 Python 包进行读取。
    • 由于目前大模型使用 token 的限制,我们需要对读取的文本进行切分, 将较长的文本切分为较小的文本,这时一段文本就是一个单位的知识。
  2. 将文档词向量化
    • 首先,使用文本嵌入(Embeddings)技术对分割后的文档进行向量化, 使语义相似的文本片段具有接近的向量表示;
    • 然后,存入向量数据库,完成索引(index) 的创建;
    • 最后,利用向量数据库对各文档片段进行索引,可以实现快速检索。
  3. 将向量化后的文档导入 Chroma 知识库,建立知识库索引
    • Langchain 集成了超过 30 个不同的向量数据库。 Chroma 数据库轻量级且数据存储在内存中, 这使得它非常容易启动和开始使用。
    • 将用户知识库内容经过 Embedding 存入向量数据库, 然后用户每一次提问也会经过 Embedding, 利用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段, 将这些知识库片段作为上下文,与用户问题一起作为 Prompt 提交给 LLM 回答。

大模型集成与 API 连接

核心功能实现

  1. 构建 Prompt Engineering,实现大模型回答功能,根据用户提问和知识库内容生成回答。
  2. 实现流式回复,允许用户进行多轮对话。
  3. 添加历史对话记录功能,保存用户与助手的交互历史。

核心功能迭代优化

  1. 进行验证评估,收集 Bad Case。
  2. 根据 Bad Case 迭代优化核心功能实现。

前端与用户交互界面开发

  1. 使用 Gradio 和 Streamlit 搭建前端界面。
  2. 实现用户上传文档、创建知识库的功能。
  3. 设计用户界面,包括问题输入、知识库选择、历史记录展示等。

部署测试与上线

  1. 部署问答助手到服务器或云平台,确保可在互联网上访问。
  2. 进行生产环境测试,确保系统稳定。
  3. 上线并向用户发布。

维护与持续改进

  1. 监测系统性能和用户反馈,及时处理问题。
  2. 定期更新知识库,添加新的文档和信息。
  3. 收集用户需求,进行系统改进和功能扩展。

参考和资料