論文紹介 part5 :"The Ultimate Guide to Fine-Tuning LLMs from Basics to Breakthroughs: An Exhaustive Review of Technologies, Research, Best Practices, Applied Research Challenges and Opportunities"を読む
はじめに
今回も同様に以下の論文を読んでいきます。
論文名:The Ultimate Guide to Fine-Tuning LLMs from Basics to Breakthroughs: An Exhaustive Review of Technologies, Research, Best Practices, Applied Research Challenges and Opportunities
著者:Venkatesh Balavadhani Parthasarathy, Ahtsham Zafar, Aafaq Khan, and Arsalan Shahid
今回はステージ2:データ初期化についてみていきます。普段、huggingfaceとかを使い慣れている人にとっては当たり前の内容かもしれませんが、順を追ってみていこうと思います。流れとしては以下に示す7ステップを順に行っていきます。
4.1 モデル初期化における手順
環境設定: モデルの読み込みや推論を大幅に高速化するために、GPU/TPUの使用を設定する。
依存関係のインストール: 必要なソフトウェアやライブラリをすべてインストールする。これには、pipなどのパッケージマネージャやPyTorchやTensorFlowなどのフレームワークが含まれる。
ライブラリのインポート: スクリプトやノートブックに必要なライブラリをインポートする。一般的なライブラリにはHugging Faceのtransformers、PyTorchのtorch、その他のユーティリティライブラリが含まれる。
言語モデルの選択: タスクの要件に基づいて適切な事前学習済み言語モデルを選ぶ。BERTやGPT-3などのモデルがHugging Face’s Model Hubで利用できる。
リポジトリからモデルをダウンロード: 選択したフレームワークの関数を使用して、オンラインリポジトリから事前学習済みモデルをダウンロードする。たとえば、transformersライブラリを使用する場合、`AutoModel.from_pretrained(’model_name’)`を使う。
メモリにモデルを読み込む: 推論やさらなるファインチューニングのためにモデルをメモリに読み込む。このステップにより、モデルの重みが初期化され、使用準備が整う。
タスクの実行: 読み込んだモデルを使用して、予測、テキスト生成、新しいデータセットでのファインチューニングなどを行う。
4.2 モデル初期化のためのツールとライブラリ
Pythonは、大規模言語モデルを初期化するための幅広いライブラリを提供しており、オープンソースおよびクローズドソースのモデルにアクセスできる。注目すべきライブラリは以下の通り:
Pythonライブラリ: Hugging Face
説明: Hugging Faceは、Phi-3 miniやLlama-3 70Bを含む多数の事前学習済み大規模言語モデルをサポートしていることで知られている。transformersライブラリは、`AutoModelForCausalLM`などのクラスを通じてこれらのモデルへのアクセスを可能にする。このライブラリは、ファインチューニング済みモデルや4ビット量子化モデルの読み込みもサポートしている。さらに、transformersライブラリは、事前学習済みモデルをさまざまなタスクで簡単に使用できる”pipeline”機能を含んでいる[35]。Pythonフレームワーク: PyTorch
説明: PyTorchは、大規模言語モデルの初期化およびファインチューニングのための包括的なツールとライブラリを提供する。柔軟で効率的なプラットフォームを提供し、深層学習モデルの構築とデプロイを容易にする。Hugging Faceのtransformersライブラリは、PyTorchと他のフレームワークの間を橋渡しし、最先端の言語モデルの使いやすさを向上させる[36]。Pythonフレームワーク: TensorFlow
説明: TensorFlowもまた、大規模言語モデルの初期化およびファインチューニングのための幅広いツールとライブラリを提供する。PyTorchと同様に、Hugging Faceのtransformersライブラリが提供する多用途で使いやすいAPIとインターフェースを利用でき、最新の大規模言語モデルを扱うのに役立つ[37]。
4.3 モデル初期化の課題
タスクとの整合性
事前学習済みモデルが特定のタスクやドメインに密接に一致することが重要であり、これによりファインチューニングの効率が向上し、結果が改善される[38]。事前学習済みモデルの理解
モデル選択前に、アーキテクチャや機能、限界、トレーニング対象タスクを十分に理解することが不可欠である。理解不足はファインチューニングの成果に悪影響を及ぼす可能性がある[23]。利用可能性と互換性
モデルのドキュメント、ライセンス、メンテナンス、更新頻度を慎重に考慮し、潜在的な問題を回避し、スムーズな統合を確保する必要がある。モデルアーキテクチャ
すべてのモデルがあらゆるタスクに最適であるとは限らないため、特定のタスクに適したアーキテクチャを選択することが好結果を得るために重要である[39]。リソース制約
事前学習済みLLMの読み込みは多くのリソースを消費し、高性能CPUやGPU、大量のディスクスペースが必要である(例: Llama 3 8Bモデルには16GB以上のメモリが必要)。プライバシー
プライバシーと機密性はLLMを選択する際の重要な要素であり、多くの企業は、データを外部LLMプロバイダと共有することを避け、ローカルサーバーやプライベートクラウドでホスティングすることを選択する。コストとメンテナンス
ローカルサーバーでのLLMのホスティングには、セットアップや継続的なメンテナンスに多大な時間と費用がかかる。一方、クラウドベンダーの利用はリソース管理の負担を軽減するが、モデルサイズやリクエスト数に基づいた月額料金が発生する。モデルサイズと量子化
高いメモリ消費量を伴う事前学習済みモデルでも、量子化バージョンを使用することで対応が可能である。量子化により、重みを低精度(通常4ビットまたは8ビット浮動小数点)で読み込み、パラメータ量を削減しつつ高い精度を維持できる[40]。事前学習データセット
モデルの言語理解を評価するために、事前学習に使用されたデータセットを確認することが重要である。特定用途(例: 金融テキスト分類)には、その用途に適したデータセットが必要である[41]。バイアスの認識
事前学習済みモデルに潜在するバイアスに留意することが重要であり、公平な予測が求められる場合にはさらに重要である。異なるモデルをテストし、事前学習データセットを追跡することでバイアスの評価が可能である[42]。
4.4チュートリアル
経験談など
Google Colabを使用すれば環境設定は簡単で、GPU/TPUを対象のLLMに応じて選ぶことができます。自身でjupyter notebookを使ってGPUを使う設定もできますが、CUDAの設定やら複数のGPUを使用する設定などが面倒であれば、初手Google Colabはアリだと思います。
モデルによって使用するメモリの量が異なり、まずは小さいモデルから試すのが良いと思います。マルチモーダルのモデルを使用したりすると結構GPU、RAMの容量が喰われます。
4.2で紹介されたツールやライブラリは必須で、pytorchやtensorflowなどはLLM以外でも使用します。pythonのまま推論させると遅いのでモデルをGPUに最適化してデプロイしたり、最近では(Language Processing Unit)LPUというLLM向けのプロセッサー?を提供しているGroqという会社も出てきています。高速らしいです。今後試してみます。
ローカルにモデルをダウンロードして学習させる場合に量子化は非常に役に立ちます。必ずしも自前のPCが高性能なGPUを積んでいるとは限らないと思いますので。
GPUをクラウドに借りてデプロイすれば月額費用が嵩みますし、ローカルにデプロイするには効果なGPUを購入し、それなりの設定を実施する必要があります。その辺のコストと性能のトレードオフを設計してプロダクトに反映したいところです。
4.4ではだいぶわかりやすいチュートリアルが紹介されています。私はLlamaを中心に実装などしておりますが、今後、他のケースも試せればと思います。
次はステージ3のトレーニングのセットアップについてみていきます。