Databricks ❤️ Hugging Face

[Databricks ❤️ Hugging Face \- The Databricks Blog](https://www.databricks.com/blog/contributing-spark-loader-for-hugging-face-datasets)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

# 大規模言語モデルのトレーニングとチューニングを最大40%高速に

生成型AIは世界中で嵐を引き起こしています。データ&AIカンパニーとして、我々はオープンソース大規模言語モデル[Dolly](https://huggingface.co/databricks/dolly-v2-12b)や、内部でクラウドソースして作成し、ファインチューニングで活用している、研究・商用にライセンスされたデータセットである[databricks\-dolly\-15k](https://huggingface.co/datasets/databricks/databricks-dolly-15k)のリリースなどを通じてこのジャーニーの途上にいます。モデルとデータセットの両方はHugging Faceで利用可能です。このプロセスを通じて我々は多くのことを学び、本日、Apache Spark™データフレームから容易にHugging Faceデータセットを作成できるように、初となるHugging Faceコードベースへの数多くの公式のコミットを発表できることを嬉しく思っています。

> 「Databricksがモデルとデータセットをコミュニティにリリースすることを目撃し、Hugging Faceへの直接のオープンソースのコミットメントを通じて彼らの取り組みを拡大していることを知って嬉しく思っています。Sparkは大規模データを操作する際に非常に効率的なエンジンの一つであり、ユーザーがHugging Faceのモデルをより効率的にファインチューンするためにこの技術からのメリットを享受できることを嬉しく思っています。」— Clem Delange, Hugging Face CEO

# Hugging FaceのファーストクラスSparkサポート

過去数週間を通じて、多くのユーザーからモデルのトレーニングやチューニングに活用できるように、自分たちのSparkデータフレームをHugging Faceデータセットに容易にロードする方法がないかというリクエストを受け取っています。本日のリリース以前は、SparkデータフレームをHugging Faceデータセットに変換するためには、ユーザーはデータをParquetファイルに書き出し、リロードするためにHugging Faceデータセットをそのファイルにポイントする必要がありました。例えば:

```py:Python
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
```

これは面倒なだけではなく、データをディスクに書き出して再度読み込まなくてはいけないことを意味します。さらに、データがデータセットにロードされ直す際に再度マテリアライズされることになり、より多くのリソースを必要とし、時間とコストが増加することになります。この方法を用いると、比較的小さいデータセット(16G)をSparkデータフレームからParquetに書き出し、Hugging Faceデータセットに戻すのに約22分要することを知りました。

最新のHugging Faceリリースにおいては、データセットで新たな`from_spark`関数をシンプルに呼び出すだけで同じタスクを達成できるようになります。

```py:Python
from datasets import Dataset

df = [some Spark dataframe or Delta table loaded into df]

dataset = Dataset.from_spark(df)

#16GB == 12min
```

これによって、ユーザはトレーニングやファインチューニングのために効率的にデータをロード、変換するためにSparkを活用できるようになり、自分たちのトレーニングパイプラインに対する非常にシンプルなインテグレーションによって容易にSparkデータフレームをHugging Faceデータセットにマッピングできるようになります。これは、Sparkによるコスト削減とスピードと、Hugging Faeデータセットによるメモリーマッピングやスマートなキャッシングのような最適化を組み合わせることになります。これらの改善によって、サンプルの16GBデータセットの処理時間は40%以上削減され、22分からたった12分になりました。

# これがなぜ重要なのか？

我々は新たなAIパラダイムに突入しており、企業は自分たちの固有のドメインにおいてベストなパフォーマンスを達成したいのであれば、自分たちのAIモデルを拡張するために自分たちの価値のあるデータを活用する必要があります。これには間違いなく、ある種のデータ変換における取り組みや、Sparkが活用できるような大規模データセットに対する効率的な作業が必要となります。SparkとHugging Faceをインテグレーションすることで、Hugging Faceが提供するパイプラインインテグレーションを維持しつつも、Sparkによるコスト効率性やパフォーマンスを手に入れることができます。

# 継続的なオープンソースのサポート

我々はこのリリースを、オープンソースのモデルやデータセットのデファクトリポジトリとなったHugging Faceが非常にうまく行っているような何か、つまり、オープンソースコミュニティに対するさらなる貢献の新たな道筋と考えています。これは数多くの貢献の第一歩です。我々はすでにデータセットのローディングをさらに高速にするために、Sparkを通じたストリーミングのサポートを追加することを計画しています。

AIの世界に飛び込むユーザーにとってのベストなプラットフォームになるために、モデルのトレーニング、チューニング、デプロイをうまく行えるベストなツールを提供するために懸命に取り組みを続けています。Hugging Faceへの貢献を継続するだけではなく、我々の他のオープンソースプロジェクトにおける改善のリリースもスタートしています。最近の[MLflowリリース](https://qiita.com/taka_yayoi/items/431fa69430c5c6a5e741)では、transformersライブラリ、OpenAIインテグレーション、Langchainサポートを追加しています。また、SQLクエリーにOpenAI(将来的にはデプロイした自分のモデルも)を容易にインテグレーションできるDatabricks SQLにおける[AI Functions](https://qiita.com/taka_yayoi/items/fd4d4ba4cd9b01572a38)を発表しました。さらに、Databricksにおける分散PyTorchトレーニングをシンプルにするSpark向け[PyTorch distributor](https://www.databricks.com/blog/2023/04/20/pytorch-databricks-introducing-spark-pytorch-distributor.html)もリリースしました。

また我々はData + AIサミットで、ご自身でモデルを構築、トレーニング、デプロイできるのかといったことを含み、LLMの世界を探索します。是非、バーチャルあるいはインパーソンで[ご登録](https://www.databricks.com/dataaisummit/jp/japan)ください！

生成型AIや自分自身によるLLMの活用方法を学ぶには、[こちら](https://www.databricks.com/resources/webinar/build-your-own-large-language-model-dolly)のオンデマンドのウェビナーをご覧ください。

:::note
**訳者コメント**
[日本語でのウェビナー](https://pages.databricks.com/202305-APJ-VE-Dolly-LLM-JP-Registration.html)も5/18に開催予定です。
:::

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)