
1. 引言
随着大型语言模型(Large Language Models,LLMs)的迅速发展,越来越多的企业开始考虑将LLM应用于实际业务中。然而,在落地LLM的过程中,数据成本往往是一个不可忽视的重要因素。作为决策者,了解LLM训练各阶段的数据需求及其相关成本,对于项目的成功实施至关重要。
整数智能将带您深入探讨LLM训练的三个关键阶段:预训练(Pre-training)、监督微调(Supervised Fine-tuning,SFT)和基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF),分析每个阶段的数据需求特点及其对成本的影响。整数将从数据量、数据质量、数据多样性等多个维度,为您详细解读LLM数据成本的构成,以及如何在保证模型性能的同时优化数据投入。
无论您是刚开始探索LLM应用的企业高管,还是已经在AI领域有所建树的技术领导,我们都将为您提供一个全面而实用的LLM数据成本评估框架,助您在AI落地决策中游刃有余,用我们的过往经验帮您整理出一套计算成本的框架。
2. 预训练阶段
2.1. 数据集规模估算
在给定计算预算C的情况下,估算所需的预训练数据集大小是落地LLM项目的第一步。这个过程涉及到不同的Scaling Laws,其中最著名的是OpenAI的Scaling Law和DeepMind的Chinchilla Law。
OpenAI在2020年发布的研究提出了最初的Scaling Laws,表明模型性能与模型参数数量、数据集大小和计算量之间存在幂律关系。然而,2022年DeepMind提出的Chinchilla Law对此进行了修正,认为最优的数据量应与模型参数量相当。
公式表示了模型性能(L或L_hat)与模型参数数量(N)和数据集大小(D)之间的关系。
这两个公式代表了对LLM scaling behavior的不同理解和建模方法。在实际应用中,我们常常需要在模型大小和数据量之间进行权衡。例如,为了降低推理成本,可以考虑使用较小的模型配合更多的数据。Hoffmann等人[1]的研究表明,在固定的计算预算下,一个训练充分的小模型可能比训练不足的大模型表现更好。具体来说,如果我们原本计划训练一个8B参数的模型,但希望降低推理成本,可以考虑将其替换为一个参数更少的模型(如7B),同时增加训练数据量。这种做法不仅可能维持或甚至提高模型性能,还能显著降低部署和运行成本。
数据预算的第一步至关重要,要确定模型的大小和需要的pre-train数据集的大小,整数智能可以为您构建高质量的数据集,同时拥有跟多的存量数据,可以根据您的需求精准匹配更合适的数据。
整数智能高质量数据集构建服务
2.2. 多领域数据配比
预训练语料库可包含各种类型的文本数据,如网页、学术资料、书籍,以及来自不同领域的相关文本,例如法律文件、年度财务报告、医学教科书等特定领域数据。在预训练阶段,LLM从海量未标记的文本数据中学习广泛知识,并将其存储在模型参数中,从而具备一定水平的语言理解和生成能力。
通用预训练语料库是由来自不同领域和来源的大量文本组成的大规模数据集。Liu,Yang等人[2]的研究将通用数据划分为八个大类,分别为:网页、语言文本、书籍、学术材料、代码、平行语料库、社交媒体和百科全书,在模型的预训练过程中,数据的多样性和质量至关重要,所以在构建预训练数据集时,这些不同类别数据的配比需要精心设计。
-
网页数据:网页数据是最广泛使用的预训练数据来源之一。数据通常以超文本标记语言(HTML)格式存在,展现出一定的结构特征,且主题丰富,涵盖了来自不同领域和学科的内容。然而,网页数据也可能包含噪声和低质量内容,因此需要仔细筛选和清洗。
-
语言文本:语言文本数据主要由两部分组成。第一部分是基于广泛来源的书面和口头语言构建的电子文本数据,通常以特定语言的大型语料库形式呈现;第二部分是基于各个领域或主题的相关书面材料构建的电子文本数据。例如,FinGLM涵盖了2019年至2021年间部分上市公司的年度报告。该数据类型属于金融领域的语言文本材料。
-
书籍:书籍数据也是预训练语料库中常见的数据类型之一。与网页相比,书籍具有更长的文本内容和更高的数据质量,这两点都有助于提高大型语言模型的性能。书籍数据提供了深度和广度兼具的知识,让模型提高理解能力和知识储备的同时学习更深层次的上下文信息。
-
学术材料:学术资料数据指的是与学术领域相关的文本数据,包括但不限于学术论文、期刊文章、会议论文、研究报告、专利等。这些数据由学术界的专家学者撰写和发表,具有较高的专业性和学术严谨性,将其纳入预训练语料可以提供更准确和专业的信息,有助于模型理解学术领域内的术语和知识。学术文献、论文和教科书等学术材料为模型提供了专业和技术性的语言使用示例,以及最新的科研发现。这类数据对于提升模型在专业领域的表现尤为重要。
-
代码:代码数据类别指的是包含编程语言的文本信息,如Python、Java、C++和其他代码片段。其目的是帮助模型更好地理解编程语言和代码结构,代码数据集对于训练除了能提升编程方面的能力外,可能还能提高逻辑推理能力。这类数据使LLM能够理解和生成各种编程语言的代码,为软件开发和代码分析任务提供支持。
-
平行语料:平行语料库数据指的是不同语言的文本或句子对的集合。这些文本对是彼此的翻译,其中一个文本是源语言(例如英语),相应的文本是目标语言(例如中文)。平行语料库数据的引入对于提升大型语言模型的机器翻译能力和跨语言任务表现至关重要。
-
社交媒体:社交媒体数据指的是从各种媒体平台收集的文本内容,主要包括用户生成的帖子、评论和用户之间的对话数据,反映了非正式的、口语化的语言使用。它包含了大量的俚语、新词和多样的表达方式。尽管社交媒体数据中可能存在偏见、歧视和暴力等有害信息,但它仍然对大语言模型的预训练至关重要。这是因为社交媒体数据有利于模型学习对话交流中的表达能力,并捕捉社会趋势、用户行为模式等。
-
百科全书:百科全书数据指的是从百科全书、在线百科网站或其他知识数据库中提取的文本信息。在线百科网站的数据由专家、志愿者或社区贡献者编写和编辑,具有一定的权威性和可靠性。由于其易于获取的特点,它在预训练语料库中被更高频率地包含,成为增强大型语言模型知识库的基石。
合理配置这预训练数据,可以显著提升LLM的性能和适用性。数据的质量和多样性往往比单纯的数据量更重要。基于高质量、多领域数据配比的需求,整数智能在设计预训练数据集时,会仔细考虑每类数据的特点和价值,根据您的具体需求调整配比,助您实现高质精准的预训练数据集配比,降低模型训练成本。
这张图片展示了不同模型在预训练过程中所使用的语料库的数据类型分布,每个饼状图代表一个的模型,并标出了各类型数据所占的比例。不同的数据类型使用了不同的颜色进行区分,包括网页、代码、百科全书、书籍、学术材料、社交媒体、语言文本和多样数据。
2.3. 训练数据获取
虽然开源数据集为模型训练提供了基础,但许多真正珍贵和独特的数据往往不会出现在公开渠道中。因此,定向抓取特定领域或来源的数据成为了提升模型性能和竞争力的关键策略。这部分数据的获取是非常必要的。在高质量训练数据抓取方面,整数智能可以为您在定向获取的数据提供更深的insight、时效性更高,更独特的数据,帮助您提升模型在垂直领域的表现和准确性、增强模型对最新信息和趋势的理解。
定向获取数据的渠道通常包括数据爬取、商业数据库订阅、数据合作与交换等几个渠道,除了网络爬虫外其他渠道都过于定制化,故本章节只讨论数据爬取的相关内容,数据爬取对基础设施的要求并不高,所以下文的计算我们只考虑开发成本。
在开发之前,更重要的是选择合适的合适的数据来源,合适的数据来源抓取的能够显著提升模型在特定领域的表现,在确定数据来源后,开发与抓取的成本主要来自以下几个方面:
-
开发成本:
其中,D_initial与 D_update分别是初次开发的时间和网站更新后抓取代码更新的时间。网站的复杂度、验证机制、请求复杂度等都会影响开发的时间。
-
运维成本:
运维成本可能不是全时间的,可以引入一个系数α (0 < α ≤ 1) 来表示实际需要的运维时间比。如果数据需要持续更新或爬取周期很长,那么就需要考虑运维人员介入,用于保持爬虫的正常运行和应对网站变化,如果爬虫系统使用了分布式策略,则可能需要运维更多的支持。
-
IP代理池:
其中,N_req是总请求数, N_req_per_ip是每个IP能处理的请求数,C_ip是每个IP的单价。网站的IP限制策略、总的数据量、IP质量、IP地理位置要求、代理类型等因素会影响到价格。
-
爬取物料成本:
其中,C_mem与 N_mem是所需的会员数量和会员个数,D_mem_validity是会员有效期(天数)。会员等级、并发策略等因素会影响最终预算。如果目标网站需要注册账号或会员才能下载,那么就需要考虑这项成本。
所以总的来说:
一般来说,一个垂域网站按照困难程度需要1-10万元不等,大型社交网站成本更高。整数智能可以为您提供更深的insight,更高的时效性,更独特,更高质量的数据,并将获取总成本降低70%,在各个维度帮助您训练优秀的大语言模型。
整数智能数据抓取能力
2.4. 文档信息抽取
大量高质量的LLM预训练数据以PDF或扫描图像的形式存在。由于排版和格式的多样性与扫描图像的质量参差不齐,利用这些数据构建数据集是一个充满挑战的任务,需要将这些内容转换为markdown这样的数据才可以使用。核心问题主要集中在两个方面:提取内容信息和版面信息(包括正文、标题、图注、图片、表格、公式)以及处理版面元素之间的相互关系。
整数智能在处理多个开源数据集时,观察到多个出色的开源解决方案,如PP-StructureV2、Marker、Vary和Nougat,但它们各有不足。PP-StructureV2不能识别LaTeX格式内容,且缺乏必要的后处理环节;Marker覆盖的语言较少,figure没有很好的进行处理;Nougat对多栏数据的支持比较有限,能识别的语言有限,Vary / Vary-toy的计算资源消耗较大。
基于这些情况,整数智能作为Multimodal Art Projection(M-A-P)团队的一员,全程参与构建的完全开源的大语言模型MAP-Neo
也开源了Document Covert Pipeline,能比较好的平衡性能和计算开销,同时各个模块之间解耦带来了更好的可解释性且能更容易升级、添加和替换各个不同的模块,提供了一条个更灵活、高效、CPU友善的方案。
除了使用模型进行Convert的方案之外,还有很多的厂家提供了类似的服务,例如mathpix、Doc2x、庖丁PDFlux、pix2text、X信息、X讯云大模型知识引擎文档解析等,所以下文我们提供了两种方式计算成本:
-
自建转换服务成本:
其中,N_pages总文档数,R_process单节点每天处理的文档量,C_node每天节点价格,F_complexity文档复杂度因子(0 ≤ F_complexity ≤ 1),通常来说,杂志和报纸的排版与字体会更复杂,而文献、专利的图片和表格会更丰富,在指定预算需要考虑相关因素,C_integration是部署、更新策略/模型与维护的成本,根据任务的不同这部分成本会差别非常大。
-
第三方服务成本:
其中,n是价格阶梯的数量,C_tier,i是第i个阶梯的单页价格,N_pages,i是在第i个阶梯中的页数,C_integration是API集成和维护成本。
选择哪种方法取决于多个因素,包括文档的数量和类型、所需的转换质量、内部资源的可用性、以及预算限制等,事实上大多数情况是容易的数据使用自己的服务器做convert,难的使用商业级服务。
2.5. 训练数据清洗
虽然通过爬虫、文档转换和开源数据集获取的原始数据为模型训练提供了基础,但这些数据通常包含噪声、错误、偏见和虚假信息,会降低模型的训练效果。因此,数据清洗成为了提升模型性能和可靠性的关键环节。为获取高质量的数据,整数智能可以为您提供更干净、更精细的数据清洗,显著提高数据的质量,从而提升模型在特定任务上的表现,增强模型对复杂模式的理解能力,并减少因数据问题导致的误导性学习。
Fineweb数据清洗的pipeline
在开始清洗之前,更重要的是制定合适的清洗策略。这需要充分了解数据的特性、模型的需求以及潜在的数据质量问题。清洗策略的制定应考虑数据的规模、复杂度、领域特性等因素。在成本估算方面,以整数智能共同参与的和Ge Zhang等人[3]的MAP-Neo
大模型的Matrix数据集为例,Matrix数据集Release了4.7T tokens的数据,可以说是质量最好、规模最大的双语数据集之一。Matrix数据集的数据清洗的一般思路遵循”由粗到细”、”由简单到复杂”的原则,我们可以将清洗步骤分为以下几个主要阶段:
-
启发式过滤:启发式规则过滤是第一道防线,旨在快速识别和删除质量较差的数据。这一步骤计算成本低,但能显著减少后续处理的数据量。过滤标准包括:URL;黑名单词表;乱码文本过滤器;文档长度;特殊符号比例;短小、连续或不完整行的比例;重复单词;n-gram或段落,过滤阈值基于对大型文档样本的统计分析。启发式规则能够有效识别和删除低质量数据,防止低质量预训练语料库影响模型性能表现。由于团队采用了多种来源的复合数据,基于数据多元性,团队专门设计了清理方法,并为每种方法量身制定规则,以保持数据质量的一致性。
数据去重:许多研究表明重复性文本可能导致模型性能下降,这使得去重成为语料处理中的一个关键步骤(当然这点稍有争议,重复越多的数据可能恰恰说明这部分数据质量是高的,这是一个重要的Feature,例如Fineweb的观点是并不是去重越多性能越好,如果在跨dumps进行去重处理,性能反而不好)。
-
完全重复:精确文档去重是一种用于评估整个文本是否与另一个文本完全相同的方法。如果发现完全相同,则会删除重复项。由于数据量庞大,必须使用集群来处理,还可能会出现内存不足的问题。实践中我们将文本数据分批存储到不同的存储桶中。然后依次处理每个存储桶的数据以删除重复项。
-
近似重复:对于近似重复,我们使用MinHash LSH去重方法尽可能地移除它们,特别适用于网页数据,在大型数据集的相似性搜索和重复检测中被广泛使用,它可以处理非常常见的场景,即文本内容基本相同,但网页的分散模板块不同。MinHash的原理是用较小的哈希值表示一个集合,然后可以用这些哈希值来估计两个集合之间的Jaccard相似度。这一步的计算成本还是相当高昂的。
-
Similar Line:为了解决文本中相同内容多次出现的情况,一种直接的方法是使用特定的分隔符将文本分 成多行,然后比较每行之间的相似度。如果它们相似,则删除后续行。
-
此外还做了段落去重和子字符串去重,以达到更好的效果。
-
质量筛选:Fineweb-edu在清洗数据之后利用LLama3-70B-Instruct模型对数据进行评分并训练了一个Bert-like的分类模型,使用分类模型筛选数据,这个步骤极大的提高了数据的质量。除了使用模型筛选数据质量外,很多开发者在清洗CC数据集的时候会使用fasttext模型进行语言识别。
左图是处理英文数据的保留率 右侧是中文的保留率
去重操作在这一实验中并未表现出预期的性能提升
原创文章,作者:整数智能,如若转载,请注明出处:https://www.agent-universe.cn/2024/08/8555.html