跳到正文
非凡资本

访谈与对话 / UNIQUERESEARCH

Hugging Face:开源机器学习 - 从预训练模型到生产环境运行最先进的开源LLMs

   背景介绍

亚马逊云科技近日联合非凡资本在上海举办了「AI全球化专项加速计划」线下活动,多家国内、外一线AI头部创业公司到现场与超百位AI创业者进行交流。

本期内容整理自活动圆桌讨论。

活动系列内容回顾:

《Babel CEO 张海龙:构建复杂LLM应用应注意的误区和要点》

   嘉宾介绍

王铁震  Hugging Face工程师

Hugging Face:开源机器学习 - 从预训练模型到生产环境运行最先进的开源LLMs · 原文图片 1

Hugging Face是当今全球最领先的大模型开源社区之一,也是全球最具影响力的AI公司之一,目前估值超45亿美元是除OpenAI之外估值最高的AI独角兽。包括谷歌、亚马逊英伟达、英特尔、Salesforce等多家科技巨头纷纷参与投资。


大部分人谈到大模型时,往往只看到表面,模型训练的具体过程并未受到广泛关注。我希望通过具体场景的介绍,重新审视整个完整链路,尽管这是一个复杂而重要的任务。这里,我以一个代码生成模型为例,希望能为大家业务开发提供帮助。

Hugging Face主要提供模型数据集和大型Demo的托管服务。去年Hugging Face经历了快速增长,模型数量翻了一番多。在众多模型中,我将以代码组成模型为例,分享统计训练和整个链路的故事。以及解释我们做出一些决策背后的思考,借此给大家一些启示。

代码生成是一个很好的例子,比如,我们写一个workspace,只要上面写一个函数的名字,然后给它写一个修饰,它就可以帮你把这个函数实现,这可以很大程度上极提高生产力。

从商业场景的角度来看,ChatGPT等产品在商业上的转化一直备受关注,代码生成对于工程师的价值也得到了验证。有研究报告指出,使用代码生成功能后,工程师的创造价值增加了20%,这对企业来说是一笔可观的投资。

我们的产品设计注重用户友好性,使企业更容易愿意付费。通过提高工程师的创造力,我们的产品改善了工程师编写代码的体验。工程师可能会更愿意去写代码,比如我用了一些Code AI 之后,觉得写代码变成了一件非常愉快的事情。随着代码生成模型技术的发展,我们对整个思考和工作范式的看法也将发生变化。

从整个行业的角度来看,我认为更关键的是用户如何使用这些工具。未来,随着代码生成模型变得更强大、更智能,我们可能会看到用户更加主导工具的发展,用代码生成工具开发符合他们需求的自定义工具,从而解决服务上遇到的问题。我们将不再担心代码的重复,也不再担心代码难以维护。每次需要做某事时,只需清晰地说明需求,系统就会生成相应的代码,让整个过程变得简单直接。

代码生成不论是在当下还是在未来的商业环境,都是一个非常值得投入的点,同时我并不建议大家只追随市场趋势,而是鼓励大家从创造者的角度出发,思考这些技术如何为自己的团队带来帮助。

在我们着手打造代码生成模型时,首先进行了一场关于是选择开源还是闭源的灵魂探讨,考虑到不同的场景,每种选择都有其独特的优势和劣势。特别是在代码生成领域,我们对根本需求进行了思考。对于软件公司来说,代码敏感且重要,安全性和竞争对手是值得关注的问题。开源环境提供了一些好处,可以在受控的环境中运行,减轻了安全和竞争方面的顾虑。此外,对于不同公司的模型可能需要一些调整,而开源代码提供了灵活性,可以根据自己的需求进行调整和定制。

Hugging Face:开源机器学习 - 从预训练模型到生产环境运行最先进的开源LLMs · 原文图片 2

另一个优势是在开源模型中,公司可以更好地掌控逻辑,应对内部流程和定制需求。相比之下,封闭的API可能受到限制,无法满足企业的特殊需求。我们认为,对于解决公司问题,开源模型提供了更灵活的解决方案。

接下来,我简单介绍一下我们的模型背景以及具体的应用场景。我们将整个流程划分为四个部分:数据集(Dataset)、模型训练体验(Training)、模型评估(Evaluation)和部署上线(Deployment)。

首先,我们构建了一个包含6.4TB数据的公开数据集,并且大部分数据是在平台内部生成的。这里要强调了数据集的重要性,因为即使是生成的代码,也有可能在交互中互相传染。另外还包含 358 种编程语言和数据检查工具和退出机制,让用户可以自主选择是否允许他们的代码被用于训练数据集。

我们一开始在GitHub上拿到了220 million repo的名字,分别对他们做了补充了,最终得到了102TB级别的数据,根据文件后缀进行了筛选,剩下69TB基础数据。然后,我们根据一些标准化步骤,去除了没有许可证或帮助不大的数据,最终保留了6.4TB的数据。

之后我们发现,如果代码不能通过训练系统使用,会存在大量重复的账号,将严重影响性能,因此对数据做了deduplication。通过去重之后,我们得到了2.9TB的宝贵数据。数据在整个流程中非常关键,而我们实际应用的数据可能只有其中一小部分。数据清洗流程是开源协作的重要过程,每个人都需要投入到清洗和抓取的过程中。

另外,我们还进行了一些额外的工作,包括进行数据迭代。我们考虑到模型评测中可能存在的问题,特别是为了保护用户的个人隐私,自己训练了一个code model,名为StarEncoder,用于标注并替换所有涉及到人的名字、邮件、Passport、IP等敏感信息。那这种方式比传统的 rejects 正则表达式,效果会好很多。

除此以外,Hugging Face还建立了 Opt-out机制,如果用户不希望自己的代码被用来做训练,就可以进行Opt-out申请,下一个迭代中就会把相关代码从代码库里拿掉。

拿到数据之后,Hugging Face就用 tokenizers文本数据转换成机器可以理解的二进制数字,并且很多代码是用 rust 实现,比纯 Python 快很多。

准备好数据后,就开始进行模型训练。考虑到代码生成场景,我们选择了延迟较低、能力较强的15B代码优化参数模型。并使用Multi-Query Attention提高效率,降低成本。然后也支撑Long context,最多可以扩展到8,192 tokens context。最后我们用了Fill-in-the-middle 技术,(一般我们训练大语言模型,其实都是预测下一个词,意味着不会去考虑远处的词,比如我们要改一个文件的中间,不会去理解文件光标后面这些字符的影响),Fill-in-the-middle 技术可以整个理解文件在中间做什么样的股权逻辑。

在选定模型架构后,我们进行了模型训练,在512个GPU花费了大约24天的时间,虽然成本很昂贵,但为了训练基础能力是值得的。大家如果想要在自己具体的场景上训练,不用这么大的成本,大家可以用 PEFT(Parameter Efficient Fine-Tuning) 技术训练一个defer,可以用 千分之一甚至 1% 的成本,训练一个在自己领域上可以用,能够理解公司内部代码库的模型。

拥有了模型之后,我们需要进行评测,评测的规则是根据给定的输入,包括函数定义等进行测试。如果代码生成模型和补全代码能通过Unit tests,意味着模型生成case至少有一次通过评测。

当我们已经拥有了模型,Hugging Face希望能把它部署在生产环境去解决现实中的问题。Hugging Face提供了Inference endpoints功能,选中模型之后可以直接将它移动部署在 AWS 上,无需用户进行复杂的操作。我们也提供类似如此的非常多面向生产环境的功能,可以让模型在多个GPU上面更好地支持。

如果企业希望在自己的环境下去部署,可以使用Text-generation-inference (TGI )库,TGI提供了非常多面向生产环境的功能,包括:

  • 张量并行(Tensor Parallelism):用于在多个GPU上加速推理,将张量切片分配给不同的GPU处理

  • 令牌流(Token streaming):用于降低延迟,不需要等待完整的生成,服务器可以开始回答,提供快速的用户体验

  • 量化(Quantization):用了我们之前提到的bitsandbytes等工具,将数据压缩为更小的位数,减少内存占用和计算时间

  • 优化(Optimizations):用于加速推理,如闪电注意力(flash attention),一种快速的注意力机制

最后我想说,大模型训练不仅仅是有卡就行,还需要做很多数据训练和infra 相关的工作,最终才能打造出一个产品。

- END -

来源:非凡产研 · 腾讯新闻。文章中的“非凡产研”是原始发布账号署名,不代表已核实个人执笔作者。引用访谈或圆桌观点时,应按正文标明具体发言人及当时身份;无法确认时不要推断。日期为原始发表日期,历史信息以发布时点为准。

阅读原始发布版本 ↗
← 返回研究文章库