Databricks ❤️ Hugging Face:大型语言模型训练和调优速度提升高达 40%
生成式 AI 正席卷全球。作为一家数据和 AI 公司,我们通过发布开源大型语言模型 Dolly 以及用于微调该模型的内部众包数据集 databricks-dolly-15k(该数据集已授权用于研究和商业用途),一直走在这趟旅程的前沿。模型和数据集都可以在 Hugging Face 上找到。在整个过程中我们学到了很多,今天我们很高兴地宣布,我们对 Hugging Face 代码库进行了首次正式提交(未来还会有更多),允许用户轻松地从 Apache Spark™ dataframe 创建 Hugging Face Dataset。
“很高兴看到 Databricks 向社区发布模型和数据集,现在我们又看到他们通过对 Hugging Face 的直接开源贡献来扩展这项工作。Spark 是大规模处理数据的最高效引擎之一,很高兴看到用户现在可以从这项技术中受益,从而更有效地微调 Hugging Face 的模型。”
— Clem Delange,Hugging Face 首席执行官
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,再回到 Hugging Face 数据集,大约需要 22 分钟。
随着 Hugging Face 的最新发布,我们通过在 Datasets 中简单地调用新的 “from_spark” 函数,让用户更轻松地完成同样的任务
from datasets import Dataset
df = [some Spark dataframe or Delta table loaded into 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 增加流式处理支持,以使数据集加载速度更快。
为了成为用户进入 AI 世界的最佳平台,我们正在努力提供最好的工具来成功训练、调优和部署模型。我们不仅将继续为 Hugging Face 做贡献,还开始对我们其他的开源项目发布改进。最近的 MLflow 版本增加了对 transformers 库、OpenAI 集成以及 Langchain 的支持。我们还宣布了 Databricks SQL 中的 AI Functions,让用户可以轻松地将 OpenAI(或未来自己部署的模型)集成到他们的查询中。最重要的是,我们还发布了一个用于 Spark 的 PyTorch 分发器,以简化在 Databricks 上的分布式 PyTorch 训练。
本文最初于 2023 年 4 月 26 日发表在 Databricks 博客上。