Arctic
高品质数据关于言语模型的有效预训练至关关键。但是,“高品质”的准确定义仍未失掉充沛探求。
聚焦于代码畛域,论文引入了Arctic-SnowCoder-1.3B,这是一个数据高效的基础代码模型,经过三个阶段的逐渐精炼数据启动预训练,共处置了555B token:(1) 经常使用500B个规范品质代码token启动通用预训练,经过基本过滤、去重和去污染预处置;(2) 经常使用50B个高品质token启动继续预训练,这些token从第一阶段中经过BERT格调的品质注释器选出,该注释器经过训练以区分优质代码与随机数据,经常使用从高品质代码文件中提取的正例,以及来自Magicoder和StarCoder2-Instruct的指令数据;(3) 经常使用5B个分解数据启动增强预训练,这些数据由Llama-3.1-70B经常使用第二阶段数据作为种子生成,驳回Magicoder的预训练方法。
仅仅训练有限数据集,Arctic-SnowCoder-1.3B在BigCodeBench上取得了SOTA的结果,这是一个专一于实践和具备应战性的编程义务的编码基准,在训练了小于等于 1T tokens的相似大小的模型中。特意是,它比Phi-1.5-1.3B [20]高出36%。虽然训练数据量为555B tokens,与其余在万亿tokens上训练的最先进的小型代码模型相比,Arctic-SnowCoder在多个基准测试中到达了或超越了这些模型的功能。
例如,Arctic-SnowCoder-1.3B在一切评价的基准测试中击败了StarCoderBase-3B,后者训练数据超越1T tokens。Arctic-SnowCoder-1.3B在HumanEval+ (28.0 vs. 27.4)上优于StarCoder2-3B,后者训练数据超越3T tokens,这是一个评价函数级代码生成的基准,同时在BigCodeBench(19.4 vs. 21.4)上坚持竞争力。论文启动了片面的消融钻研,以验证训练Arctic-SnowCoder面前的设计决策:
•首先,论文的钻研结果标明,在普通预训练中,将文件级数据按编程言语划分红仓库后,清楚优于仅按仓库称号分组数据的方法。
•此外,论文确定了最佳的学习率方案,包括从新预热阶段后启动线性衰减,以及在继续预训练时期高品质数据的理想重复次数,论文发现是四次。
•更关键的是,论文对基于模型的品质注释器的比拟,这些注释器在各种数据组合上启动训练,强调了预训练数据与下游义务的对齐关于成功出色功能至关关键。
图1:Arctic-SnowCoder-1.3B的三阶段预训练,逐渐经常使用更高品质的数据。
预训练LLMs理论依赖于少量数据。在代码等专业畛域,这种对数据量的注重尤为清楚,钻研人员经过抓取GitHub等平台失掉少量代码预训练数据集。但是,最近的钻研越来越标明,高品质的数据关于有效的预训练至关关键, 包括代码畛域。
在通用畛域,钻研人员探求了多种技术来筹划高品质的言语模型预训练数据。FineWeb-Edu经常使用基于Snowflake-arctic-embed-m嵌入构建的线性回归器来评价网页的教育价值并选用高品质内容,而DCLM办规律驳回基于fastText的过滤器,该过滤器在高品质在线资源和指令数据的正例以及随机负例网页上启动训练,以识别高品质文本。与经常使用未过滤的大规模数据集相比,这些基于模型的品质过滤器清楚提高了言语模型在下游义务中的功能。
雷同,钻研人员也意识到高品质代码数据关于预训练的关键性,Phi-1经常使用随机森林分类器在Code-Gen嵌入上选用教育性代码样本,DeepSeek-Coder-V2驳回多阶段fastText管道来召回与网络相关的代码数据和GitHub上的高品质代码,成功了最先进的编码功能。
在本文中,论文引见了Arctic-SnowCoder-1.3B,这是一个高功能的小型代码模型,经过一种陈腐的三步训练方法创立,专一于数据品质的逐渐优化。得益于这种方法,Arctic-SnowCoder-1.3B在一切评价的基准测试中均优于StarCoderBase-3B [19],并在复杂且适用的BigCodeBench基准测试 [46] 上逾越Phi-1.5-1.3B [20] 36%,该基准对实践编程至关关键。
这里论文将详细解释Arctic-SnowCoder-1.3B的训练方法,如图1所示。论文首先探讨原始训练数据的组成(见图1),而后概述通用预训练阶段。接上去,论文形容经常使用高品质数据的协同预训练环节,最后,论文详细论述经常使用分解数据的增强预训练。模型架构基于Llama-2,详细细节见表1。
在通用预训练阶段,模型经常使用Adam启动训练,训练500B token,序列长度为8192,批量大小为512。学习率在600次迭代后启动线性预热,随后遵照余弦衰减。论文设置最大学习率为5.3x 10^{-4},最小学习率为5.3 x 10^{-5},这一设置参考了DeepSeek-Coder。在此阶段,论文经常使用了所有B原始数据,未启动额外的品质过滤。论文首先按编程言语对代码文件启动分区,按仓库启动分组,而后以随机顺序衔接它们,相似于StarCoder2的方法。论文展现了首先按编程言语对代码文件启动分区的长处。论文将此阶段生成的模型命名为Arctic-SnowCoder-alpha。
2.2.3 高品质数据继续预训练(Continued pretraining)
在通用预训练之后,论文经常使用从相反原始预训练语料库中提取的50B高品质token继续预训练Arctic-SnowCoder-alpha。这50B高品质token是经过将12.5B个由论文的代码品质注释器评分的前百分位代码文件token重复4次构成的。
受FineWeb-Edu和DCLM的启示,论文在基于BERT的先进嵌入模型Snowflake-arctic-embed-m之上训练了一个线性分类头。训练数据包括30万个正样本,采样自22万个高品质开源代码文件、8万个来自Magicoder和StarCoder2-Instruct的高品质指令数据,以及从预训练语料库中随机选用的300个代码文档。
关于代码品质的先前钻研,如Phi-1,往往过火强调代码的“教育价值”,使模型倾向于像HumanEva这样的便捷基准。论文展现了论文的注释方法能够带来更平衡的模型才干优化。
此外,鉴于这些代码文档理论超越1000个token,超越了BERT的512个token的高低文窗口大小,论文改良了FineWeb-Edu的流程,经过平均品质注释器发生的顶部、中部和底部局部的分数来计算每个文件的分数。在此阶段,论文从0到最大预训练学习率5.3x 10^{-4}启动1000次迭代的学习率预热,随后启动线性衰减至0。此阶段生成的模型称为Arctic-SnowCoder-beta。
2.2.4 经常使用分解数据增强预训练
在增强预训练阶段,论文应用Llama-3.1-70B-Instruct 生成比继续预训练阶段更高品质的数据,并将Python混合比例提高到约50%,同时坚持其余言语的比例不变。Phi-1 [13]标明,相似教科书的分解预训练数据可以清楚优化模型功能。
但是,适度依赖此类数据或者会造成模型散布偏斜,从而或者侵害其在实践编码义务中的有效性。例如,论文前面展现的,Phi-1.5在HumanEvalt和MBPP+上体现出色,这些义务相似于教科书练习,但在BigCodeBench [46]中更复杂和适用的编码义务上体现较差。为了处置这个疑问,论文改编了Magicoder的OSS-Instruct方法用于预训练。最后,OSS-Instruct旨在经过揭示模型创立受开源代码片段启示的问答对来生成事实的指令调优数据。
相比之下,论文经过经常使用Llama-3.1-70B-Instruct生成高品质和面向疑问处置的代码文件来生成高品质的分解预训练数据,这些代码文件以继续预训练阶段中评分最高的代码文档为种子。前面论文展现了每个预训练阶段都清楚优于前一个阶段,突显了逐渐提高数据品质的有效性。
这里论文将Arctic-SnowCoder与最先进的小型言语模型启动比拟,并展现了每个预训练阶段的功能优化,评价了两种构成通用预训练中仓库级别数据的战略,并对继续预训练中的设计选用启动了详细的消融剖析。
论文思考以下四个多样化的编程基准,以片面评价不同代码模型的代码生成才干:
•HumanEval+和MBPP+ 。HumanEval和MBPP是用于函数级代码生成的两个最宽泛经常使用的基准。论文驳回了EvalPlus增强的版本,提供了80倍/35倍的更多测试用例以启动严厉评价。HumanEvalt和MBPP+区分蕴含164和378个编码疑问。
•EvoEval 是一个程序分解基准测试套件,经过将现有基准测试演变为不同的目的畛域而创立。论文驳回了其五个自动的转换类别,即艰巨、发明性、巧妙、组合和工具经常使用,总计500个义务。
•BigCodeBench 经过实践且具备应战性的编程义务评价言语模型。它蕴含1140个编程义务,每个义务都是经过人类与言语模型的单干创立的,义务品质由人类专家保障。
2.3.2 基线比拟与三阶段预训练的有效性
表 2 :将Arctic-SnowCoder与最先进的小型言语模型 ( \mathrm{< 3 B} ) 启动比拟,按训练计算量 > 1T 标志启动划分。Arctic-SnowCoder-alpha和Arctic-SnowCoder-beta区分是通用预训练和继续经常使用高品质数据预训练后的审核点。Arctic-SnowCoder是经常使用分解数据增强预训练后的最终审核点。
表2展现了多种小型言语模型(参数少于3B)在多个编码基准上的综合比拟,按其训练计算能否超越1T tokens启动分类。值得留意的是,Arctic-SnowCoder体现出色,特意是在其有限的训练数据下。Arctic-SnowCoder-1.3B在BigCodeBench上到达了与训练数据不超越1T token的同类模型相比的最新功能,清楚优于StarCoderBase-3B、SmolLM-1.7B和Phi-1.5-1.3B。特意是,虽然Phi-1.5-1.3B在“教科书式”基准测试如HumanEval+、MBPP+和EvoEval上具备长处,但Arctic-SnowCoder-1.3B在更复杂和适用的Big-CodeBench上以36%的长处逾越了Phi-1.5-1.3B。
此外,Arctic-SnowCoder-1.3B在一切评价基准上均击败了StarCoderBase-3B,后者是StarCoder2-3B的前身,训练数据为1T tokens。虽然仅训练了555B tokens,Arctic-SnowCoder-1.3B在HumanEvalt上与经过更宽泛训练的模型如StarCoder2-3B、StableCode-3B、CodeGemma-2B-v1.0和Qwen1.5-1.8B相媲美甚至逾越。在EvoEval和BigCodeBench上,Arctic-SnowCoder依然具备竞争力。
此外,该表还突显了Arctic-SnowCoder在其训练阶段的继续改良:Arctic-SnowCoder-alpha、Arctic-SnowCoder-beta和最终的Arctic-SnowCoder。每个阶段都建设在前一阶段的基础上,Arctic-SnowCoder在一切基准测试中均取得了最高分数。这种稳步优化强调了高品质和分解数据在最终阶段的关键作用。虽然从相反的数据开局,Arctic-SnowCoder的每次迭代都增加了与最先进模型的差距,展现了全体训练方法的有效性。
2.3.3 通用预训练中的仓库级数据
在通用预训练阶段,论文驳回了StarCoder2的方法,经过随机拼接文件内容将文件级数据随机分组到仓库中。在表3中,论文钻研了两种方法:(1)仅按仓库称号对文件启动分组,这象征着每个训练文档可以是多言语代码文件的混合,假设仓库是用不同言语编写的;(2)在将文件分组到仓库之前,先按编程言语对文件启动分区,这象征着每个训练文档仅关注一种繁多言语。
表3:两种预训练方法对仓库级别数据分组的比拟。(1)“按仓库分组”将每个仓库视为一个或者混合多种言语的繁多训练单元,以及(2)“按言语和仓库分组”在按仓库分组之前先按编程言语对数据启动分区。
论文可以观察到,第二种方法,即论文在普通预训练中最终驳回的方法,清楚优于第一种方法。
2.3.4继续预训练中的设计选用
在继续预训练中,论文从预训练语料库中提取高品质的token,并训练一个改良的基础模型。为了取得高品质的token,论文驳回了基于模型的品质标注器。在本节中,论文试验了各种设计选用,包括标注器的训练数据、继续预训练中经常使用的学习率以及高品质token的最佳重复次数。
基于模型的品质标注器 相似于FineWeb-Edu ,论文在Snowf lake-arctic-embed-m嵌入模型之上训练一个线性头来为每个代码文件评分。在表4中,论文试验了4种变体:
•ANN-EDU:论文揭示Mixtral-8x7B-Instruct标注每个代码文件的教育价值(1到5)。经常使用k标注数据训练一个线性回归头。关于以下变体,相似于DCLM ,论文随机采样负文档并仅更矫正局部。经常使用线性分类头。
•ANN-INs:正样本是来自ANN-EDU的100k教育数据(3.5+)和来自Magicoder [41]和StarCoder2-Instruct [40]的100k高品质指令数据的混合。
•ANN-HQ: 正样本为220k开源、分解、高品质代码文件。
•ANN-HQINs: 正样本为220k ANN-HQ训练数据与80k来自Magicoder[41]和StarCoder2-Instruct[40]的指令数据的混合。
表4: 经过运行基于模型的品质标注器(经常使用不同配方训练)启动10B继续预训练的下游功能比拟
训练标注器后,论文首先将每个标注器运行于整个预训练语料库,为每个文件失掉一个分数。与仅扫描前2k字符的FineWeb-Edu不同,论文扫描代码文件的顶部、中部和底部局部,并平均这些分数。而后,论文依据这些分数按言语对代码文件启动排名,并选用前百分位的文档,直抵到达大概10 B token。论文坚持与预训练中经常使用的相反混合比例。表中显示,结合高品质文件和指令数据的ANN-HQINS成功了最佳的下游功能。
论文在图2中启动了额外的剖析。关于每个标注者,论文创立了一个验证数据集,其中正样原本自代码处置方案基准,负样原本自训练时期未见过的随机预训练数据。论文经常使用ROC-AUC [6](受试者上班特色曲线上方积)分数来评价标注者在基准数据排名中的体现。该图展现了每个基准的ROC-AUC分数与基准经过率之间的相关性。简直分歧的趋向是:较高的ROC-AUC分数造成更好的基准功能。良好的ROC-AUC分数标明标注者有效地塑造了下游义务的散布。因此,高品质的关键在于与下游运行散布的对齐。
图2:注释者ROC-AUC评分与基准测试pass@1之间的相关性。
学习率调度 论文还在表5中钻研了不同的学习率调度战略,包括(1)从最小预训练学习率线性退火至零,(2)经常使用最小预训练学习率的恒定调度,以及(3)从新预热至最大预训练学习率后线性衰减至零。依据阅历,论文发现从新预热方法体现最佳,并在一切其余关于继续预训练的试验中一以至用。
高品质数据重复次数 最后,论文将预训练的token范围从10 B裁减到50 B。剩下的一个疑问是如何确定高品质token的最佳重复次数。论文经过选用由ANN-HQINS排名的前百分位token启动试验,重复次数从1到5,如表6所示。在这种状况下,前百分位token是最高品质的token。例如,1 x 50B示意前50B token的一次性重复,而4 X12.5B示意前12.5B token的四次重复,确保所选token的品质最佳。
依据表中的结果,重复高品质token四次(4 x 12.5B)在下游多个评价目的中义务中体现最佳,四次重复(4 x 12.5B)在HumanEval和EvoEval中得分最高。两次重复( 2 X25.0B )和三次重复( 3 X16.7B )也体现出微弱的功能,特意是在mbpp中。五次重复( 5 x10.0B )在MBPP中得分最高,但在总体目的上未超越四次重复。一次性重复( 1 x50.0B )与屡次重复相比,改良最小。
表6:经常使用ANN-HQINS在50B继续预训练中不同高品质数据重复次数的下游功能。