关卡名称 | |
第1关 | 书生大模型全链路开源体系 |
第2关 | 8G 显存玩转书生大模型 Demo |
第3关 | 浦语提示词工程实践 |
第4关 | InternLM + LlamaIndex RAG 实践 |
第5关 | XTuner 微调个人小助手认知 |
第6关 | OpenCompass 评测 InternLM-1.8B 实践 |
第1关 书生·浦语大模型全链路开源体系
前言:
InternLM2技术报告:arxiv.org/pdf/2403.17297.pdf
第一次课视频链接:书生·浦语大模型全链路开源体系哔哩哔哩bilibili
书生浦语各平台开源地址:
GitHub:github.com/InternLM/InternLM
HuggingFace:huggingface.co/internlm
OpenXLab:openxlab.org.cn/models/InternLM
ModelScope:modelscope.cn/organization/Shanghai_AI_Laboratory
课程笔记:
1. 大模型的发展背景:
大模型已成为发展通用人工智能的重要途径。从本世纪初至2021-2022年,研究主要集中在专用模型上,针对特定任务采用特定模型。然而,近两年趋势转向发展通用大模型,即一个模型应对多种任务和模态。
2. 开源历程:
2023年6月份,书生浦语大模型正式发布,参数规模达到千亿级别,后续迭代支持8K语境、推出全免费商用的7B开源模型和全链条工具体系、发布多模态预训练语料库、升级对话模型等。2024年初,书生浦语2.0发布,并采用开源的方式公布,让所有开发者都可以参与其中,共建生态。在所有表现上超越1.0模型,遥遥领先于以前的自己。优势不是一点点。
3. 书生浦语大模型的特点:
书生浦语大模型是一个全链条全流程的开源体系。支持长达20万token上下文的输入,是全球大模型产品中支持的最长上下文输入长度。模型具备超长上下文能力、推理数学代码能力、对话和创作体验,以及工具调用能力。
书生浦语 2.0 性能亮点展示,比肩 GPT3.5 等
书生浦语 2.0 达同量级开源模型领先水平
升级工具调用能力,完成复杂任务
测试模型对微积分等题目的运算能力
4. 从模型到应用及全链条工具体系:
开发全链条工具体系并开源
数据方面有书生万卷等开源数据集
微调方面有XTune框架
5. 司南大模型评测体系
发布 open compass 2.0 司南大模型评测体系
支持超 100 数据集评测,功能丰富且开源
分析模型评测趋势,采用循环评测策略,循环评测确保更准确性能评估
6. 大模型部署及智能体框架:
介绍全链路开源体系中的部署环节及 MDEPLOYE
MDEPLOYE 有多种服务模块及接口,推进引擎优化
MDEPLOYE 推理效率优于 VRM
智能体框架可实现代码解题等,有工具集支持
InternLM2技术报告笔记
论文地址
https://arxiv.org/pdf/2403.17297.pdf
中文翻译参考
InternLM/InternVL系列多模态大模型核心技术解析
论文摘要
大型语言模型(LLMs)的发展,如ChatGPT和GPT-4,引发了人们对人工通用智能(AGI)的到来的讨论。然而,在开源模型中复制这种进展是具有挑战性的。本文介绍了InternLM2,一个开源的LLM,在6个维度和30个基准测试中胜过其前任,在长文本建模和开放式主观评估方面通过创新的预训练和优化技术。InternLM2的预训练过程被详细介绍,重点突出了对多种数据类型(文本、代码和长文本数据)的准备。InternLM2有效地捕捉长期依赖性,在预训练和微调阶段最初训练了4k个Token,然后提升到32k个Token,展现出在200k“大海捞针”测试中出色的表现。InternLM2进一步通过监督微调(SFT)和新颖的基于人类反馈的条件在线强化学习(COOL RLHF)策略进行了调整,解决了冲突的人类偏好和奖励欺骗问题。通过在不同训练阶段和模型大小释放InternLM2模型,我们向社区提供了关于该模型演变的见解。
大型语言模型(LLMs)的发展包括几个主要阶段:预训练、监督微调(SFT)和从人类反馈中进行强化学习(RLHF)(Ouyang等,2022)。 预训练主要依赖于利用大量自然文本语料库,积累数万亿的Token。 这个阶段旨在为LLMs提供广泛的知识库和基本技能。 数据的质量被认为是在预训练期间最关键的因素。
预训练方法 Pre-train
Transformer由于其出色的并行化能力,已经成为过去大语言模型(LLMs)的主流选择,这充分利用了GPU的威力; 。LLaMA在Transformer架构基础上进行了改进,将LayerNorm替换为RMSNorm,并采用SwiGLU作为激活函数,从而提高了训练效率和性能。
自从LLaMA发布以来,社区积极地扩展了基于LLaMA架构的生态系统,包括高效推理的提升和运算符优化等。为了确保我们的模型InternLM2能无缝融入这个成熟的生态系统,与Falcon、Qwen、Baichuan、Mistral等知名LLMs保持一致,我们选择遵循LLaMA的结构设计原则。
预训练数据、预训练设置以及三个预训练阶段
预训练数据
搜集的数据包括文本、代码、长文本数据,文本数据来源包括网络页面、论文、专利和书籍。
文本数据预处理部分包括:所有来源的数据都被转换为特定的格式,如json或jsonl格式,便于后续处理。这部分使用自动语言检测工具对数据进行分类,使用局部敏感哈希(LSH)等算法对数据进行去重,减少预训练中的冗余信息。数据清洗、过滤等部分包括:通过设计的规则对数据进行过滤,移除解析错误、格式错误和非自然语言文本等。使用基于规则的过滤器和机器学习模型去除有害内容,包括色情和有毒内容。对数据进行人工注释,使用机器学习模型去除广告内容。对数据的一致性、噪声、信息含量和语法进行评分,再根据评分过滤低质量内容。
代码数据预处理部分包括:从GitHub等平台爬取代码仓库,以及其他与编程相关的在线资源如编程相关的Q&A论坛、教程网站和API文档。将所有代码数据转换为统一的markdown格式,并处理格式破损问题。针对代码数据应用了特定的tokenization方法,并使用了去重策略。通过使用规则和模型驱动的评分器对代码质量进行评分,然后根据评分过滤数据。最后对代码仓库中的文件进行依赖排序,以正确顺序连接文件,保持代码的完整性和上下文。
长文本数据预处理部分包括:从预训练语料库中选择长度超过32k tokens的长文本数据。使用词汇和语言特征构建统计过滤器,过滤掉不符合规则的样本。利用困惑度差异评估文本片段之间的关联性,移除上下文不相关的样本。为每个域和语言单独设定阈值,以调整过滤器的灵敏度。
文本数据
我们的预训练数据集中的文本数据可以根据来源分为网页、论文、专利和图书。为了将这些来源转化为一个预训练数据集,我们首先将所有数据标准化为指定的格式,按类型和语言分类,并以 JSON Lines(jsonl)格式存储。然后,对于所有数据,我们应用了几个处理步骤,包括基于规则的过滤、数据去重、安全过滤和质量过滤。这样就得到了一个丰富、安全且高质量的文本数据集。
数据源分布我们根据它们的来源对预训练数据集中的文档数量、数据存储大小和数据字节比例进行了统计分析,如表1所示。其中,来自网页的中文和英文数据占总量的86.46%,是主要的数据来源。尽管来自其他来源的数据量相对较小,比如书籍和技术文献(简称为techlit),但平均文档长度更长,内容质量相对较高,使它们同样重要。
数据处理管道本工作中使用的数据处理流水线如图3所示。
-
数据标准化
-
基于规则的过滤
-
数据去重
-
安全过滤
-
质量过滤
整个数据处理流程首先对来自不同来源的数据进行标准化,以获得格式化的数据。然后,使用启发式统计规则对数据进行过滤,以获取清洁的数据。
接下来,将使用局部敏感哈希(Locality-Sensitive Hashing,LSH)方法进行数据去重。
然后我们应用一个复合安全策略来过滤数据,得到安全数据。我们针对来自不同来源的数据采用了不同的质量过滤策略,最终获得了高质量的预训练数据。
表1:来自不同来源的预训练数据总结
图3:数据处理流程流水线
-
数据标准化
以网页数据为例,我们将详细介绍数据处理流程。我们的网页数据主要来自Common Crawl。首先,我们需要解压原始Warc格式的文件,并使用Trafilatura(Barbaresi, 2021)进行HTML解析和主文本提取。然后,我们使用pycld2库进行语言检测和主文本的分类。最后,我们为数据分配一个唯一标识符,并以jsonl(JSON lines)格式存储获得的格式化数据。
-
基于规则的阶段
网页数据在互联网上随机提取通常包含大量低质量数据,如解析错误、格式错误和非自然语言文本。一种常见做法是设计基于规则的规范化和过滤方法来修改和过滤数据,如在Gopher(Rae等,2021)、C4(Dodge等,2021)和RefinedWeb(Penedo等,2023)中所见。根据我们对数据的观察,我们设计了一系列启发式过滤规则,重点关注分隔和换行的异常情况、异常字符的频率和标点符号的分布。通过应用这些过滤器,我们获得了干净的数据。
-
数据去重
存在大量重复文本在互联网上,这可能会对模型训练造成负面影响。因此,我们采用了基于局部敏感哈希(LSH)的方法来对数据进行模糊去重。更具体地说,我们使用了MinHash方法(Broder,1997年),在文档的5-gram上建立了包含128个哈希函数的签名,并将去重的阈值设为0.7。我们的目标是保留最新的数据,即优先考虑具有较大CC转储号码的数据。在LSH去重后,我们获得了去重数据。
-
安全过滤
互联网充斥着有毒和色情内容,使用这些内容进行模型训练可能会对性能产生负面影响,并增加生成不安全内容的可能性。因此,我们采用了综合的安全策略,结合“域名阻止”、“文字阻止”、“色情分类器”和“毒性分类器”来过滤数据。具体来说,我们构建了一个包含约13M个不安全域名的阻止域名列表,以及一个包含36,289个不安全词汇的阻止词列表用于初步数据过滤。考虑到文字阻止可能会意外地排除大量数据,我们选择了一种谨慎的方式来编制阻止词列表。
为了进一步提高不安全内容的检测率,我们使用了来自Kaggle的“有毒评论分类挑战”数据集对BERT模型进行微调,得到了一个有毒性分类器。我们从Dedup数据中抽样了一些数据,并使用Perspective进行了注释。
使用API创建色情分类数据集。然后我们使用这个数据集对BERT模型进行微调,得到一个色情分类器。最后,我们将这两个分类器用于对数据进行二次过滤,过滤掉得分低于阈值的数据,从而得到安全数据。
-
质量过滤
与书籍、论文和专利等信息源相比,互联网数据包含大量低质量内容。根据我们的观察,造成这种低质量内容的主要原因有两个:1. 互联网充斥着营销广告,往往重复且信息贫乏。2. 许多网页包含文章摘要或产品描述的列表,导致提取的文本难以阅读并且缺乏逻辑连贯性。
为了过滤掉这些低质量内容,我们首先进行了手动数据注释组织。对于广告分类任务,标注者被要求确定一条数据是否包含广告内容(整体和局部广告都Token为低质量)。对于流畅度分类任务,标注者被要求从一致性、噪音、信息内容和语法四个维度对数据进行评分,得出综合流畅度分数。然后我们使用手动注释的数据微调了BERT模型,得到了一个广告分类器和一个流畅度分类器。最后,我们使用这两个分类器对数据进行二次过滤,过滤掉得分低于阈值的数据,得出高质量的预训练数据。
代码数据
编程是LLM的关键技能,为各种下游应用提供支持,如编码辅助、软件开发和构建工具使用代理。此外,Groeneveld等人(2024年)指出,通过在代码数据上进行训练可以增强推理能力,因为代码通常比自然语言更有结构化、严谨和可预测性。
数据来源分布:我们从各种来源收集数据,包括直接从GitHub爬取、公共数据集,以及与编码和编程相关的在线资源,如问答论坛、教程网站和API文档,统计数据如图4所示。
表2反映了我们训练的评分模型所基于的数据质量评估情况。
高质量数据将拥有更高的采样权重,并可以在预训练阶段进行多次训练迭代。中等质量数据具有正常的采样权重,通常只进行一次训练。低质量数据将被排除在外,因为我们的实证结果证实,尽管它们的比例相对较小,但删除它们对于优化模型性能并确保训练稳定性至关重要。
-
格式统一
所有数据都转换为统一的Markdown格式。然而,一小部分数据仍然表现出损坏的HTML或XML格式。我们应用了一组启发式规则来减少这些情况,虽然我们没有投入太多精力来净化格式。Markdown被选择是因为它的简单性——最大程度地减少格式化的Token开销——以及它与代码和自然语言的交错兼容性。
表2:基于可学习分类器的代码数据质量统计
图4:我们预训练语料库中的代码数据统计。
用于预训练的实际格式更为复杂,涉及基于依赖关系的多个代码文件的串联。主要思想是利用交错数据,这对于教授模型编程至关重要。
-
数据去重
编码数据去重类似于处理自然语言,区别在于分词,这会影响超参数的选择。例如,Python示例使用两个空格、四个空格或一个制表符来表示缩进。传统的空白符分词器,或者专为自然语言设计的分词器,可能会错误地将这些样本视为不同的数据,这是不准确的。我们的见解是,有效的分词器对于应用通用去重策略至关重要。尽管最近的研究探讨了段落或行级别的精细去重,我们的方法仍然保持在文件级别,以保持语境完整性。
-
质量过滤
质量是LLM研究中关键但模糊的一个方面,主要是由于难以量化其对模型性能的规模影响。我们采用了混合的、多阶段的过滤过程,包括基于规则和基于模型的评分器。基于规则的评分器是启发式的且各不相同,但我们发现代码风格不是一个可靠的质量度量标准,可能会将太多代码误分类为低质量。对于基于模型的评分,我们评估了几个骨干模型,并使用大约5万个带标签的样本对它们进行训练。然而,我们观察到评分器评估与人类判断之间的相关性在不同语言之间变化,并且扩大训练集并不能显著提高评分器准确性。因此,我们只在模型预测与人类在人工验证集上的评价基本一致的语言中采用基于模型的评分。
长文本数据
处理非常长的上下文(> 32KToken)的能力是LLM研究中日益流行的话题,扩展和促进了诸如书籍摘要、支持长期对话和实现处理涉及复杂推理步骤的任务等应用。预训练数据是扩展模型上下文窗口的一个至关重要因素。
数据过滤管道:我们的数据处理管道旨在过滤低质量的长文本数据。它包括三个阶段:a) 长度选择,这是一个基于规则的过滤器,选择超过32K字节的数据样本;b) 统计过滤器,利用统计特征识别和移除异常数据;c) 困惑度过滤器,利用困惑度的差异来评估文本段落之间的连贯性,过滤掉具有干扰性上下文的样本。请注意,用于长上下文训练的所有数据都是标准预训练语料库的子集,这意味着在预训练期间将至少两次学习长上下文数据。
-
统计过滤器
一个显著的过滤器是存在连词和其他暗示话语结构的词语,比如“尤其”,“正式”等。设计这些过滤器的总体指导是过滤掉没有意义的数据,而不是选择最高质量的数据。统计过滤器对于长文本数据尤其有效,因为统计特征比短文本数据更一致。
-
困惑过滤器
困惑度通常被视为对文本序列概率P(X)的估计器,并且我们稍微改变其用法来估计两个文本片段之间的条件概率P(S2|S1),其中S1是S2的前导。当S1和S2强相关时,条件概率应该高于仅估计S2的概率,这也意味着困惑度差异为负。相反,如果概率朝相反方向变化,意味着S1是一个干扰上下文,则应该从预训练语料库中删除。理想情况下,增加更多上下文不应该对后续文本的可预测性产生负面影响。请注意,我们仅根据困惑度差异而不是困惑度本身来过滤数据,这在很大程度上可以减少估计器本身引入的偏差(使用哪个模型来计算困惑度)。
-
选取阈值
关于设定阈值,我们有两个方案:
针对每个领域定制阈值,而不是寻求一种通用解决方案。例如,对于连词词汇的统计过滤器并不适用于长代码数据,长代码数据通常不含有任何连词。同样,教科书、研究论文、小说和专利各自展示出独特的特征。一个通用的阈值可能会错误分类大量数据。相同的逻辑也适用于在不同语言之间设置阈值;因此,我们为每个领域单独调整阈值。
利用验证集来简化流程,只专注于边界情况。与基于学习的特征提取器或得分器不同,我们的统计和困惑度过滤器在同一领域内产生平滑结果。它使我们能够专注于接近阈值的样本,简化了阈值的调整,因为我们只需要确定是要降低还是提高它们。
预训练设置
分词(Tokenization)使用了针对中英文混合语料优化的分词器,以提高压缩率并保持词汇表大小在10万以下。分词器基于GPT-4的词汇表,包含针对中文数据的特别优化,以适应中英文混合的语料库。
预训练超参数部分包括层数、维度、头数、每个头的查询数。给出了不同尺寸模型的学习率和批量大小的设定,这些参数对模型训练的稳定性和收敛速度有重要影响。优化器通常使用的是AdamW优化器,具体的超参数如β1、β2、ϵ和权重衰减的值也在论文中给出。
预训练阶段主要是4k上下文训练、长上下文训练以及能力特定增强训练三个阶段:
4k上下文训练在大部分训练步骤中使用不超过4096 tokens长度的数据进行训练,这有助于模型掌握基本的文本理解和生成能力。
随后的长上下文训练阶段引入了长度不超过32k tokens的数据,这使得模型能够处理更长的文本,从而提高对长期依赖关系的捕捉能力。长上下文训练的比重和对Rotary Positional Embedding(RoPE)基数的调整也在文档中说明。
能力特定增强训练收集了与特定能力相关的高质量数据集,如编程、推理、问答和考试等方面,通过能力特定增强训练进一步提升了模型在这些领域的性能。为了让模型更好地适应这些数据,使用了更小的学习率和batch size。
对齐 Alignment
预训练阶段为大型语言模型(LLMs)赋予了解决各种任务所需的基础能力和知识。我们进一步微调LLMs,以充分激发其能力,并指导LLMs作为有益和无害的AI助手。
这一阶段,也常被称为“对齐”(Alignment),通常包含两个阶段:
监督微调(SFT) 基于人类反馈的强化学习(RLHF)。
在SFT阶段,我们通过高质量指令数据微调模型,使其遵循多种人类指令。然后我们提出了带人类反馈的条件在线强化学习(COnditionalOnLine Reinforcement Learning with Human Feedback,COOL RLHF),它应用了一种新颖的条件奖励模型,可以调和不同的人类偏好(例如,多步推理准确性、有益性、无害性),并进行三轮在线RLHF以减少奖励黑客攻击。
在对齐阶段,我们通过在SFT和RLHF阶段利用长上下文预训练数据来保持LLMs的长上下文能力
评价与分析 Evaluation and analysis
评测主要分为两种类别:
(a)下游任务 (b)对齐性。
对于每个类别,我们进一步将评测任务细分为具体的子任务,以详细了解模型的优点和缺点。
最后,我们讨论了语言模型中潜在的数据污染问题及其对模型性能和可靠性的影响。除非另有明确说明,所有评测都使用OpenCompass进行。
我们首先详细介绍了多个自然语言处理任务的评估标准和性能指标。 我们引入了数据集,解释了实验设置,然后展示了实验结果并进行深入分析,并将我们的模型与最先进(SOTA)的方法进行了比较,以展示我们模型的有效性。语言模型在下游任务上的表现评测将通过六个关键维度进行深入剖析:
(1) 综合考试 (2) 语言和知识 (3) 推理和数学 (4) 多编程语言编程 (5) 长文本建模 (6) 工具使用
综合测评
MMLU (Hendrycks等人,2020年):包含57个子任务的多项选择题数据集,涵盖人文学科、社会科学、STEM等主题。我们报告了5-shot结果。
CMMLU(Li等,2023a):一个特定于中国的多项选择题数据集,包含67个子任务。除了人文学科、社会科学、STEM和其他领域外,它还包括许多中国特定的任务。我们报告了5次试验结果。
C-Eval(黄等人,2023年):一个包含52个子任务和4个难度级别的多项选择题数据集,涵盖人文学科、社会科学、STEM等主题。我们报告了5次试验结果。
AGIEval(钟等人,2023年):一个以人为中心的基准测试,包括多项选择题和开放式问题。这些问题来自于20个官方、公开和高标准的入学和资格考试,旨在测试一般人的情况,并报告零射结果。
GAOKAO-Bench(张等人,2023年):这是一个包含2010年至2022年中国高考题目的数据集,包括主观题和客观题。我们只评估客观题的数据集,并报告零样本结果。
语言和知识
TriviaQA(Joshi等,2017年):一个包含阅读理解和开放域QA的数据集。平均每个问题有6个可能的答案。我们利用了数据集中的开放域QA子集,并报告了0-shot的结果。
NaturalQuestions(Kwiatkowski等,2019年):一个包含用户提出问题并由专家验证答案的问答数据集。我们报告了0-shot结果。
C3(孙等,2020):一个自由形式的多项选择的中文机器阅读理解数据集。我们报告了零照射结果。
RACE(Lai等人,2017年):这是一个阅读理解数据集,包括了针对12至18岁中国中学生的英语阅读理解考试题目。我们使用了高中学生的子集并报告了零摄取结果。
FLORES (Team等,2022年):这是一个从维基百科提取的翻译数据集,涵盖101种语言。我们评估了从英语到其他100种语言以及反之的翻译结果。对于每一对翻译任务,我们选择了100个样本并使用BLEU进行评估。我们报告了8-样本的结果。
推理与数学
思维推理数据集:
1.WinoGrande(Sakaguchi等,2020):一个包含44,000个多项选择题的常识推理数据集,每个问题有两个选项。它要求模型根据情景从描述性文本中选择适当的实体词来替代代词。
2.HellaSwag(Zellers等,2019年):一个具有挑战性的数据集,用于评估常识自然语言推理,包括70,000道多项选择题。每个问题呈现一个场景和四个可能的结果,要求选择最合理的结论。
3.BigBench Hard (BBH) (Suzgun等,2023年):一个针对大型语言模型的测试集,BBH从BIG-Bench中提取了23个具有挑战性的任务,在当时当代语言模型尚未超越人类表现。
数学数据集:
4.GSM8K-Test(Cobbe等,2021年):一个包含大约1,300个初级水平情境数学问题的数据集。这些问题的解决涉及2到8个步骤,主要使用基本算术运算(加法、减法、乘法和除法)进行一系列基本计算,以达到最终答案。
5.MATH(Hendrycks等,2021年):这是一个包括12,500道具有挑战性的高中竞赛数学问题的数据集,涵盖从代数到微积分的多个领域。每个问题都包含完整的一步一步的解决方案。
6.TheoremQA(陈等,2023a):一个 STEM 定理驱动的问题与答案数据集,包含 800 个问答对,涵盖了数学、电子工程与计算机科学、物理和金融领域的 350 多个定理。它测试了大型语言模型在将定理应用于解决具有挑战性的大学水平问题时的局限性。
7.MathBench (Anonymous, 2024b):MathBench包含3709个问题,其中包含多个阶段,挑战逐渐增加。每个阶段包括双语理论性和应用性问题,每个问题都精准地Token有一个三级标签,以表明其细粒度知识点。
多语言编程
Python编程任务
1.HumanEval(Chen等,2021年)是一个被广泛认可的数据集,用于评估代码生成模型的性能基准。该数据集包含164个精心设计的编程任务,每个任务由一个Python函数和一个附带的文档字符串组成,以提供上下文和规范。这个数据集以人为编写的代码为特色,在评估大型语言模型(LLMs)生成或完成程序的能力方面发挥着关键作用。
2.MBPP MBPP(Austin等,2021年)由974个编程任务组成,这些任务可以由入门级程序员解决。这些任务范围从简单的数字操作到需要外部知识的更复杂问题,例如定义特定的整数序列。我们使用的是MBPP的经过清理的版本,其中仅包括作者手动验证过的数据子集。
多种编程语言编码任务
3.HumanEval-X(Zheng等,2023b)数据集是原始HumanEval基准的多语言扩展,旨在评估代码生成模型在多种编程语言中的能力。它包含164个手工编写的编程问题,每个问题都翻译成五种主要语言:C ++、Java、JavaScript、Go和Python。这导致总共820个问题-解决方案对,支持代码生成和代码翻译任务。HumanEval-X允许评估模型生成功能性正确代码和在不同语言之间翻译代码的能力,使用测试用例验证生成代码的正确性。这个基准有助于更全面地了解预训练的多语言代码生成模型及其在实际编程任务中的潜在应用。
长文本建模
L-Eval. L-Eval是一个长文本基准,包括18个子任务,涵盖法律、经济和技术等各个领域的文本。L-Eval包含411个文档和超过2000个测试用例,平均文档长度为7217个单词。该数据集中的任务可分为两大类:5个选择性任务和13个开放式任务。选择性任务使用基于准确匹配的精度进行评估,而开放式任务则采用Rouge分数作为度量标准。
LongBench. LongBench是一个长篇文本基准,包括21个子任务,共4750个测试案例。这是第一个双语长篇文本基准,平均英文文本长度为6711个单词,平均中文文本长度为13386个字符。这21个子任务分为6种类型,提供了对模型在各个方面能力的更全面评估。
评估结果。我们在表15中报告了InternLM2在长文本上的评估结果。InternLM2的所有变体在两个基准测试中都展现出了强大的长文本建模性能。InternLM2-Chat-20B-SFT在L-Eval上表现最佳,并且明显优于其对手。
工具使用
外部工具和API被广泛认可为可以显著增强LLMs处理复杂实际问题的能力(Qin等,2023a;b;Schick等,2023)。为了分析InternLM2在工具利用方面的熟练程度,我们在几个基准数据集上进行了实验:GSM8K(Cobbe等,2021)、Math(Hendrycks等,2021)、最近推出的MathBench(匿名,2024b)、T-Eval(Chen等,2023b)以及CIBench的模板子集(匿名,2024a),全部采用ReAct协议(Yao等,2023),其中LLMs在生成思考过程和执行操作之间交替。值得注意的是,MathBench包含了3709道涵盖从初中到高中数学概念的问题。这一数据集能够全面评估LLM解决数学问题的能力。T-Eval(Chen等,2023b)具有经过人工验证的高质量问题说明及相应的逐步解决方案。它衡量了LLM在日常工具(如Google搜索和高德地图)上的熟练程度,涵盖了六个不同的维度。由我们团队开发的CIBench使用交互式Jupyter笔记本模拟真实数据分析场景。它涵盖多个连续任务,并涵盖数据分析中最常用的Python模块,包括Pandas、Numpy和Pytorch。这一定制的基准测试允许全面评估LLM在数据分析方面的能力。
第2关 8G 显存玩转书生大模型 Demo
基础任务
-
使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署,并生成 300 字小故事,记录复现过程并截图。
进阶任务
-
Streamlit Web Demo 部署 InternLM2-Chat-1.8B 模型
启动模型
本地端口映射
成功访问
-
使用 LMDeploy 完成 InternLM-XComposer2-VL-1.8B 的部署,并完成一次图文理解对话,记录复现过程并截图。
conda activate demo pip install lmdeploy[all]==0.5.1 pip install timm==1.0.7
-
使用 LMDeploy 完成 InternVL2-2B 的部署,并完成一次图文理解对话,记录复现过程并截图。
可以看到描述的细节更多
第3关 浦语提示词工程实践
基础任务
-
背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为
13.8<13.11
。 -
任务要求:利用LangGPT优化提示词,使LLM输出正确结果。完成一次并提交截图即可
使用LMDeploy进行部署 internlm2-chat-1_8b
利用如下脚本调用部署的InternLM2-chat-1_8b模型并测试是否部署成功
测试已部署成功
利用提供的chat_ui.py
创建图形化界面,在本地终端中输入映射命令,启动后界面如下:
左侧边栏为对话的部分设置,其中最大token长度设置为0时表示不限制生成的最大token长度。API Key和Base URL是部署InternLM时的设置,必须填写。
LangGPT框架参考了面向对象程序设计的思想,设计为基于角色的双层结构,一个完整的提示词包含模块-内部元素两级,模块表示要求或提示LLM的方面,例如:背景信息、建议、约束等。内部元素为模块的组成部分,是归属某一方面的具体要求或辅助信息,分为赋值型和方法型。
一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链:
💡 Role (角色) -> Profile(角色简介)—> Profile 下的 skill (角色技能) -> Rules (角色要遵守的规则) -> Workflow (满足上述条件的角色的工作流程) -> Initialization (进行正式开始工作的初始化准备) -> 开始实际使用
比较0.991和0.1123,回答错误
使用提示工程
提示词
Role: Floating Point Comparison Expert Profile author: OpenAI version: 0.1 language: {English} Skills Proficient in floating point arithmetic Expertise in numerical precision and rounding Ability to identify common comparison errors Commands User input: A = <float>; B = <float> Normalize the values of A and B to the same precision. Compare the normalized values. If A is less than B, print A < B. If A is greater than B, print A > B. If A is equal to B, print A = B. Example Usage User input: A = 13.8; B = 13.11 Expected output: A > B and explanation: "13.8 is greater than 13.11."
提示词实践之后,可正确回答问题
进阶任务
建议完成OpenCompass评测课程后选做本任务
-
从ARC Challenge、Hellaswag、MMLU、TruthfulQA、Winogrande和GSM8k这6个任务中任选1个任务。
-
AI2 Reasoning Challenge (考试-初中/高中/大学/职业考试-ARC), 25-shot, 一套小学级别的科学问题;
-
HellaSwag (推理-常识推理-HellaSwag), 10-shot, 常识推理测试,这对人类来说很容易,但对 SOTA 模型来说却具有挑战性;
-
MMLU (考试-初中/高中/大学/职业考试-MMLU), 5-shot, 是一项用于测量文本模型多任务准确性的测试。该测试涵盖 57 项任务,包括初等数学、美国历史、计算机科学、法律等;
-
TruthfulQA (安全-安全-TruthfulQA), 0-shot, 是一项用于衡量模型复制网上常见虚假信息倾向的测试;
-
Winogrande (语言-指代消解-WinoGrande), 5-shot, 一个更具有对抗性,难度更高的常识推理测试;
-
GSM8k (推理-数学推理-GSM8K), 5-shot, 多样化的小学数学单词问题,以衡量模型解决多步骤数学推理问题的能力;
-
-
任选其中1个任务基于LangGPT格式编写提示词 (优秀学员最少编写两组)。
-
使用OpenCompass进行评测,用lmdeploy部署LLM为internlm2.5-chat-7b,编写的提示词作为系统提示。
-
达标要求:将不使用系统提示的internlm2.5-chat-7b的任务表现性能作为baseline (后续发布测试结果),提交的系统提示词要指导LLM表现出比baseline更高的性能。
第4关 InternLM + LlamaIndex RAG 实践
基础任务
-
任务要求:基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存。
问题:xtuner是什么?
运行结果:回答的效果并不好,并不是我们想要的xtuner。
#从指定目录读取所有文档,并加载数据到内存中 documents = SimpleDirectoryReader("/root/llamaindex_demo/data").load_data() #创建一个VectorStoreIndex,并使用之前加载的文档来构建索引。 # 此索引将文档转换为向量,并存储这些向量以便于快速检索。 index = VectorStoreIndex.from_documents(documents) # 创建一个查询引擎,这个引擎可以接收查询并返回相关文档的响应。 query_engine = index.as_query_engine()
获取xtuner知识库,借助RAG技术后,就能获得我们想要的答案了。
作为测试,新建了一个知识库
问题:易速鲜花集团的宣言?
发现docx文件,需要下载一个包,转成txt
再次回答
效果不错,下面是pdf文件内容
第5关 XTuner 微调个人小助手认知
基础任务
-
使用 XTuner 微调 InternLM2-Chat-1.8B 实现自己的小助手认知,记录复现过程并截图。
安装 xtuner
问题准备:
-
请介绍一下你自己
-
你在实战营做什么
-
世界上最帅的男人是谁
微调前的模型对话
通过脚本生成的方式来准备数据
准备配置文件,为了训练过程中能够实时观察到模型的变化情况,XTuner 贴心的推出了一个 evaluation_inputs
的参数来让我们能够设置多个问题来确保模型在训练过程中的变化是朝着我们想要的方向前进的。我们可以添加自己的输入。
启动微调
在训练完后,进行模型格式转换、模型合并,完成后,我们的目录结构如下
微调后的模型对话,可以看到已经调教的很好了
进阶任务
-
用自己感兴趣的知识对基座模型进行增量预训练微调
-
在资源允许的情况下,尝试实现多卡微调与分布式微调
-
将自我认知的模型上传到 OpenXLab,并将应用部署到 OpenXLab
OpenXLab 部署教程:Tutorial/tools/openxlab-deploy at camp2 · InternLM/Tutorial · GitHub
第6关 OpenCompass 评测 InternLM-1.8B 实践
基础任务
-
使用 OpenCompass 评测 internlm2-chat-1.8b 模型在 ceval 数据集上的性能,记录复现过程并截图。
列出所有跟 InternLM 及 C-Eval 相关的配置
安装 OpenCompass 并准备好数据集后,可以通过以下命令评测 InternLM2-Chat-1.8B 模型在 C-Eval 数据集上的性能。
python run.py --datasets ceval_gen --models hf_internlm2_chat_1_8b --debug
训练过程:
训练结果: