Databricks ❤️ Hugging Face 大型语言模型的训练和调优速度提高了高达40%

Databricks ❤️ Hugging Face 大型语言模型训练和调优速度提高40%

生成式人工智能已经风靡全球。作为数据和人工智能公司,我们随着开源大型语言模型Dolly的发布以及用于优化该模型的内部众包数据集(databricks-dolly-15k),一直在这个旅程中。模型和数据集都可以在Hugging Face上获得。在这个过程中,我们学到了很多东西,今天我们很高兴地宣布我们对Hugging Face代码库的第一个官方提交,使用户可以轻松地从Apache Spark™ dataframe创建Hugging Face数据集。

<h4 id="databricks发布模型和数据集给社区是一件很棒的事情,现在我们看到他们通过对Hugging Face的直接开源承诺来扩展这项工作。Spark是处理大规模数据的最高效引擎之一,现在用户可以从这项技术中受益,更有效地优化Hugging Face的模型。

—— Clem Delange,Hugging Face CEO

Hugging Face获得一流的Spark支持

在过去的几周里,我们收到了许多用户的请求,希望有一种更简单的方法将他们的Spark dataframe加载到可以用于模型训练或调整的Hugging Face数据集中。在今天的发布之前,要将Spark dataframe中的数据加载到Hugging Face数据集中,用户必须将数据写入Parquet文件,然后将Hugging Face数据集指向这些文件以重新加载它们。例如:

from datasets import load_dataset

train_df = train.write.parquet(train_dbfs_path, mode="overwrite")

train_test = load_dataset("parquet", data_files={"train":f"/dbfs{train_dbfs_path}/*.parquet", "test":f"/dbfs{test_dbfs_path}/*.parquet"})

#16GB == 22min

这不仅繁琐,还意味着数据必须写入磁盘,然后再次读取。除此之外,一旦加载到数据集中,数据将重新材料化,这会消耗更多资源,因此需要更多时间和成本。使用这种方法,我们发现相对较小(16GB)的数据集从Spark dataframe到Parquet需要约22分钟,然后再回到Hugging Face数据集中。

通过最新的Hugging Face发布,用户可以更简单地通过在Datasets中调用新的“from_spark”函数来完成相同的任务:

from datasets import Dataset

df = [某个Spark dataframe或Delta表加载到df中]

dataset = Dataset.from_spark(df)

#16GB == 12min

这使用户可以使用Spark高效地加载和转换用于训练或微调模型的数据,然后轻松地将他们的Spark dataframe映射到Hugging Face数据集中,以便在训练流程中进行简单的集成。这结合了Spark的成本节省和速度以及Hugging Face数据集的内存映射和智能缓存等优化。这些改进将我们的示例16GB数据集的处理时间缩短了40%以上,从22分钟减少到仅12分钟。

这为什么重要?

随着我们向这种新的人工智能范式过渡,组织需要使用他们非常有价值的数据来增强他们的AI模型,以便在特定领域内获得最佳性能。这几乎肯定需要进行数据转换工作,而在大型数据集上高效地进行这项工作是Spark的设计目标之一。将Spark与Hugging Face集成,您可以同时获得Spark的成本效益和性能,以及Hugging Face提供的流水线集成。

持续的开源支持

我们认为这个发布是进一步为开源社区做出贡献的新途径,我们相信Hugging Face在这方面做得非常出色,它已经成为事实上的开源模型和数据集存储库。这只是众多贡献中的第一个。我们已经计划通过Spark添加流媒体支持,以使数据集加载更快。

为了成为用户进入人工智能世界的最佳平台,我们正在努力提供最好的工具来成功训练、调优和部署模型。我们不仅将继续为Hugging Face做出贡献,还开始发布我们其他开源项目的改进。最近的MLflow发布版增加了对transformers库、OpenAI集成和Langchain支持的支持。我们还宣布在Databricks SQL中推出了AI函数,使用户可以轻松地将OpenAI(或将来部署的自己的模型)集成到查询中。最重要的是,我们还发布了一个用于Spark的PyTorch分发器,以简化在Databricks上的分布式PyTorch训练。

本文最初发布于2023年4月26日Databricks的博客。