介绍
学习Bilibili课程(https://www.bilibili.com/video/BV1Rc411b7ns/
)并记录听课笔记和项目认识过程。
大模型发展过程
-
OpenAI GPT-1: 第一个生成式预训练变换器(Generative Pre-trained
Transformer),是自然语言处理的先驱模型。 -
GPT-2: GPT系列的第二代模型,以其生成文本的能力和规模著称,相较于GPT-1有显著的改进。
-
GPT-3: 第三代GPT模型,拥有更大的模型规模和更高的性能,能够生成更加连贯和复杂的文本。
-
Codex: 是基于GPT-3的一个变体,专门针对编程语言和代码生成进行了优化。
-
GPT-3.5: 是GPT-3的一个改进版本,具有更好的理解和生成能力。
-
GPT-4: 是最新的GPT系列模型,具有更强的推理能力、更大的模型规模和更复杂的语言处理能力。
-
Decoder-only Architecture: 指的是GPT模型采用的架构类型,只有解码器组件,专注于生成任务。
-
Unsupervised Multitask Learner: GPT模型能在未监督的情况下学习多种任务,而不需要针对特定任务的训练数据。
-
In-context Learning: GPT模型通过分析给定的上下文(如提示或示例)来学习和执行任务。
-
Strong Reasoning Ability: 高级GPT模型,如GPT-3和GPT-4,展现出强大的推理和问题解决能力。
-
Code Pre-training: 在模型训练阶段,使用大量代码数据来优化模型对编程语言的理解。
-
Generative Pre-training: 指的是在大规模数据集上预训练模型,以生成连贯和相关的文本。
-
Scaling the Model Size: 增加模型的大小(例如,参数数量),以提高其性能和能力。
-
Multi-modal Ability: 能够处理和生成多种类型的数据(例如文本、图像等)。
-
Exploring Scaling Limits: 研究模型规模增加到极限时的性能和效率。
-
Code-davinci-002+instruction: 是一个特定的GPT变体,专门优化了代码生成和遵循指令的能力。
-
-davinci-002: 可能是指一个特化于处理文本任务的GPT模型。
-
Capable Code Model: 强调模型在编程和代码生成方面的能力。
-
Instruction Following: 强调模型能够理解和遵循给定的指令或指导。
-
Excellent Comprehensive Ability: 表示模型在理解复杂文本和上下文方面的优秀能力。
-
Human Alignment: 指的是模型在生成响应时能够更好地符合人类的价值观和期望。
大模型成为发展通用人工智能的重要途径
-
“Switchboard” 在大规模语音识别领域通常指的是"Switchboard-1"和"Switchboard-2",它们是语音识别领域中常用的数据集之一。这两个数据集都是在电话对话中录制的,主要包含了来自不同说话者的电话对话的音频记录。
具体来说:
Switchboard-1: 这是一个包含人们通过电话进行的自然对话的英语语音数据集。它由来自美国的约240个说话者的约2,400个电话对话组成,总时长约约约300小时。Switchboard-1是由美国国家标准技术研究所(NIST)在20世纪90年代初创建的。
Switchboard-2: 这是Switchboard-1的扩展,包含更多的电话对话。Switchboard-2增加了来自非英语母语的说话者的数据,并提供了更广泛的说话者和语音情境的覆盖。总时长超过2,000小时。
在大规模语音识别任务中,使用Switchboard数据集进行训练和评估是常见的实践。 -
DeepMind Flamingo是DeepMind公司开发的一个用于强化学习和人工智能研究的软件平台。它提供了一套工具和算法,帮助研究人员和开发者进行复杂的强化学习实验和模型训练。
书生·浦语大模型
-
Lagent 是一个用于开发智能体的开源框架,它提供了丰富的功能和工具,可以帮助开发者快速构建和训练智能体模型。Lagent 支持多种类型的智能体,包括强化学习智能体、监督学习智能体等。
Lagent 提供了丰富的文档和示例代码,可以帮助开发者快速上手。此外,Lagent 还提供了强大的可视化工具,可以帮助开发者直观地了解智能体的训练和表现。
这些数据集通常用于测试和评估自然语言处理(NLP)模型、问答系统、语言生成等任务的性能。以下是一些可能的解释:
- MMLU (Mean Mean Length Utterance): 用于对话系统的评估,可能与模型生成的对话长度和质量有关。
- C-Eval (val) (Conversational Evaluation - validation): 对话系统评估的一部分,用于验证模型的性能。
- AGI-Eval (Artificial General Intelligence Evaluation): 评估通用人工智能算法的性能。
- BoolQ: 一个测试模型对于布尔问题回答的数据集。
- TriviaQA: 评估问答系统性能的数据集。
- NaturalQuestions: 另一个问答系统的数据集,用于评估对自然语言问题的理解和回答。
- CMRC (Chinese Machine Reading Comprehension): 一个中文机器阅读理解数据集。
- CSL (Chinese Semantic Language Understanding): 可能涉及中文语义理解。
- RACE (middle) and RACE (high): 英语学习和理解的评估数据集,分为中等难度和高难度任务。
- XSum: 用于文本摘要任务的数据集。
- WinoGrande: 包含逻辑推理问题的数据集,用于评估模型的推理能力。
- BBH (Big Bench): 大型基准测试集,用于评估各种机器学习模型。
- GSM8K: 包含多种语音情感的数据集,可能用于评估模型在语音情感识别方面的性能。
- PIQA: 用于评估模型对于视觉问题回答的数据集。
- HumanEval: 与人类评价相关的任务或研究。
- MBPP (Model-based Policy Prior): 可能涉及强化学习中的某种策略先验。
从模型到应用
- 大型模型在应用中判断场景复杂性通常涉及多个方面和策略。评估场景复杂性的方法可能包括以下几点:
1.特征多样性: 在处理文本或语音等自然语言数据时,场景的复杂性可能与输入数据的多样性和复杂性有关。模型可以通过分析词汇、句法结构和语义关系的丰富性来判断场景的复杂程度。例如,在文本数据中,长句子、复杂句式、专业术语或语义上有歧义的内容可能表明场景的复杂性较高。
2.任务难度: 评估大型模型在特定任务上的表现可以提供关于场景复杂性的线索。某些任务可能包含更多的语义推理、多步骤推断或需要跨多个领域的知识,这些任务往往被认为更为复杂。
3.数据分布的不均匀性: 数据集中不同类别或标签的分布不均匀可能表明场景的复杂性。处理各种类别之间的不平衡或不同类别之间的相互关系可能需要更高级别的模型能力。
4.逻辑推理的需要: 需要进行逻辑推理或对多个信息源进行联合推理的场景通常更为复杂。例如,涉及多个前提条件、逻辑连接或潜在假设的推理任务可能被认为更为复杂。
5.实时决策和反馈环境: 在需要即时决策和快速反馈的实时环境中,场景的复杂性可能更高。例如,机器人控制、自动驾驶和金融交易等领域的决策任务通常对模型提出更高要求。
6.外部噪音和变化: 处理噪声、不确定性和外部环境变化的场景可能更为复杂。模型需要具备鲁棒性,能够处理不完整、含糊或嘈杂的信息。 - 大型模型判断与环境是否有交互通常需要考虑多个因素,这些因素取决于模型所处的具体应用场景。以下是一些常见的方法和策略:
1.输入源: 模型的输入可以是来自外部环境的传感器数据、用户输入、实时流数据等。通过监测这些输入源的变化和更新,模型可以判断是否存在与外部环境的实时交互。例如,在自然语言处理应用中,模型可以不断接收用户输入,而在视觉应用中,模型可能通过摄像头捕捉到的图像进行交互。
2.实时性要求: 如果模型的应用需要实时响应或具有即时更新的特性,这可能是一个指示与环境交互的信号。对于需要及时决策的任务,模型通常需要不断地接收和处理来自环境的信息。
3.事件驱动: 一些应用是事件驱动的,模型可能通过监听特定的事件或触发条件来感知与环境的交互。例如,物联网设备可能通过感知到特定传感器触发的事件来与环境进行交互。
4.通信接口: 如果模型通过网络或其他通信接口与外部设备、服务或系统进行通信,那么检测通信活动就成为判断与环境是否有交互的一个线索。
5.用户交互: 如果模型是为用户服务的,用户的输入、反馈和请求可以被视为与环境的交互。模型可能需要实时响应用户的需求,并在用户与系统之间进行双向通信。
6.上下文感知: 模型是否能够感知当前环境的上下文也是一个关键因素。上下文感知可以包括理解当前任务、环境状态的变化以及与其他系统或实体的交互。
7.环境变化检测: 模型可以通过检测环境中的变化,例如状态的改变、新事件的发生等,来判断是否需要调整其行为或输出。
书生·浦语全链条开源开放体系
数据
训练大型语言模型(LLM,Large Language Model)所使用的数据源种类多样,它们的重要性直接影响到模型的性能和应用范围。以下是一些常见的训练大型语言模型时使用的数据源以及它们的重要性:
1.通用文本语料库:
重要性非常高,通用文本语料库涵盖广泛的主题,包括新闻文章、维基百科、网络论坛、书籍等。这样的语料库可以使模型学到更加通用和全面的知识,提高其泛化能力。
2.特定领域文本:
重要性取决于应用场景。针对特定领域的语料库,如医学、法律、科学等,有助于模型更深入地理解和生成领域特定的语言。这对于定制化的应用,如领域特定的问答系统或翻译模型,非常关键。
3.多语言数据:
重要性:取决于应用需求。包含多种语言的数据有助于模型处理多语言环境,提高其跨语言的性能。这对于全球化的应用、多语言翻译等场景非常重要。
4.社交媒体数据:
重要性中等,社交媒体数据反映了实时的、大规模的人类交流。这种数据源有助于模型学习时事和流行趋势,同时也挑战模型处理非正式和噪声性很强的文本。
5.代码库:
重要性: 取决于应用场景,包括软件代码的数据有助于模型理解编程语言和软件开发领域的术语和结构。这对于代码生成、自动化测试等应用非常有用。
6. 对话数据:
重要性高, 对话数据使模型能够理解和生成自然对话,有助于训练对话系统。这对于虚拟助手、聊天机器人等应用非常重要。
7. 图像描述数据:重要性中等, 结合图像和相应的文字描述,有助于模型理解语言与视觉的关联。这对于视觉问答、图像描述生成等任务很有帮助。
8. 面向任务的数据集:重要性高, 针对特定任务的数据集,如问答、文本分类、命名实体识别等,有助于模型在这些具体任务上表现更好。
9. 多模态数据:重要性中等,包括文本、图像、语音等多种模态的数据,有助于模型学习多模态信息的联合表示,提高其处理多模态任务的能力。
10. 自动生成数据:重要性 中等, 通过对已有数据进行一些变换或通过生成模型生成新的样本,有助于扩充训练数据,提高模型的泛化能力。
这些数据源的选择和使用需要根据具体应用场景和任务来确定。合理的数据选择和多样性有助于提升模型的鲁棒性和性能。同时,数据的质量和清洗也是确保模型训练效果的关键因素。
预训练
ZeRO提出的内存优化方案
Zero基于以下三个关键的观察,对深度学习的内存使用进行了优化:
- 数据并行比模型并行具有更好的伸缩效率,因为模型并行减少了计算的粒度,同时也增加了通信开销。
- 数据并行缺乏内存效率。
- 数据和模型并行都保持了整个训练过程中所需的所有模型状态,但并不是所有的时间都是必需的。例如,仅在某个层的正向传播和反向传播期间才需要与每个层对应的参数。
- 数据并行具有较好的通信和计算效率,但内存冗余严重。因此,ZeRO通过对参数(包括优化器状态、梯度和参数)进行分区来消除这种内存冗余,每个GPU仅保存部分参数及相关状态。
上图比较了参数、梯度和优化状态的每台设备的内存消耗,并启用各种内存优化(Baseline表示未优化的基线)。在内存消耗公式中,Ψ表示模型大小(参数个数),K表示优化器状态的内存乘数,Nd表示数据并行度。在这个例子中,我们假设模型大小为Ψ=75亿,基于Adam优化器的混合精度训练,数据并行度为Nd=64(即64个GPU),K=12。我们在数据并行的基础上,分三步对内存进行优化:
- Pos(优化器状态优化)
如图二中的Pos所示,我们在每个gpu中保存全部的参数和梯度,但是只保存1/Nd的优化器变量,这将导致总的内存消耗变为2Ψ+2Ψ+12Ψ/Nd ,在图示假设下为31.4GB - Pos+g(相对1增加梯度优化)
在1的基础上增加对梯度内存的优化,即每个gpu中只保存1/Nd的梯度,这将导致总的内存消耗变为2Ψ+(2Ψ+12Ψ)/Nd ,在图示假设下为16.6GB - Pos+g+p(相对2增加参数优化)
在2的基础上增加对参数内存的优化,即每个gpu中只保存1/Nd的参数,这将导致总的内存消耗变为(2Ψ+2Ψ+12Ψ)/Nd ,在图示假设下为1.9GB
Hugging Face是一个知名的人工智能公司,专注于自然语言处理(NLP)和人工智能模型的开发、研究和部署。该公司提供了许多开源工具和资源,旨在推动NLP领域的发展,并使开发者能够更轻松地使用和部署最新的NLP模型。
他们最著名的贡献之一是开发了名为"Transformers"的库,这是一个用于自然语言处理的Python库,提供了各种预训练模型(例如BERT、GPT、RoBERTa等)的接口和工具。这些预训练模型可以用于各种NLP任务,如文本分类、命名实体识别、问答系统等。Hugging Face的Transformers库极大地简化了使用和迁移最先进的NLP模型的过程。
微调
8GB 微调主要用到了 QLoRA 和 DeepSpeed ZeRO2 两种技术:https://zhuanlan.zhihu.com/p/653335118
评测
- 自动评估指标:
1.1 固定任务评估: 对于特定任务(例如文本生成、语言理解、图像识别等),使用预定义的指标进行评估,如BLEU、ROUGE、F1-score、准确率、召回率等。
1.2 多任务评估: 模型在多个任务上的表现,能够更全面地评估其通用性和泛化能力。 - 人类评估: 邀请人类评审员或受试者对模型的输出进行评价,以衡量模型生成的语言是否自然流畅、答案的准确性等。
- 基准测试:
与其他模型比较: 将模型与现有的其他模型或先前版本的模型进行比较,评估新模型在性能上的改进程度。 - 对抗性评估: 检测模型在面对对抗性样本时的稳健性,以了解模型在现实世界中可能遇到的挑战。
部署
“Continuous Batching” 是指在大型模型的部署方案中,持续不断地对输入数据进行批处理。这种方法有助于提高推理性能和系统效率,特别是在处理大规模数据时。以下是在大型模型部署中采用 Continuous Batching 的一般方案:
- 批处理优势:
减少计算开销: 批处理可以通过并行处理大量数据来减少计算的开销。在大型模型中,处理单个样本的开销相对较高,因此通过批处理可以更有效地利用硬件资源。
提高吞吐量: 持续批处理可以提高系统的吞吐量,允许同时处理多个输入,并减少推理时间。 - 输入数据的处理:
缓冲区管理: 为了实现 Continuous Batching,系统需要设置一个缓冲区,不断地接收和累积输入数据,然后按照一定的策略将数据批次化送入模型。
数据预处理: 在持续批处理中,数据可能会以不规则的时间间隔进入系统。因此,必须对输入数据进行预处理,以确保数据是模型可接受的格式。 - 动态调整批次大小:
根据负载调整: 根据系统当前的负载和性能需求,动态调整批次大小。例如,在负载较低时可以使用较小的批次,以减少推理延迟;而在负载较高时可以使用较大的批次以提高吞吐量。
自适应调整: 实施自适应的批次调整策略,根据模型的实时性能指标,例如推理延迟或GPU利用率,自动调整批次大小。 - 并行处理和异步推理:
模型并行化: 在某些情况下,可以使用模型并行化技术,将大型模型拆分为多个部分,使其能够并行处理不同批次的数据。
异步推理: 允许模型在处理当前批次的同时接受并开始处理下一个批次的数据,以最大程度地减少推理延迟。 - 性能监控和调优:
监控指标: 持续监控系统的性能指标,如延迟、吞吐量、资源利用率等,以及模型的准确性。
定期调优: 根据监控数据进行定期调优,可以是批次大小的调整、模型参数的优化等。 - 容错性设计:
错误处理: 实现容错性设计,处理输入数据中可能出现的错误或异常情况,以确保系统的稳定性。
智能体