Amazon SageMaker AIでの量子化モデルのデプロイメント
サマリー
Amazon SageMaker AIでの量子化モデルのデプロイメントに関する記事です。Unslothを使用して、モデルのメモリ使用量を削減しつつ精度を維持する方法を解説しています。AWSインフラストラクチャにおけるデプロイメントパターンや運用プラクティスも紹介されています。
本文
この投稿は、UnslothのDaniel HanとMichael Hanと共同執筆されました。大規模な基盤モデル(FM)を元の16ビット浮動小数点精度(BF16またはFP16)でデプロイすることは高コストです。これらのモデルは大きなGPUインスタンスを必要とし、サービスコストを押し上げ、反復サイクルを遅くします。量子化は、モデルの重みの数値精度を減少させることでこれに対処します(例えば、16ビットから4ビットへ)。これによりメモリ使用量が大幅に縮小されますが、量子化の欠点はモデルの精度が低下する可能性があることです。ここで動的量子化が魅力的になります。正しく行われれば、動的量子化はメモリ使用量を減少させながら精度を維持できます。インスタンスコスト、ストレージ、起動時間の節約は、スケールで急速に累積することがあります。
この投稿では、Unslothで既に量子化されたモデルをAWSインフラストラクチャにデプロイするための4つのデプロイメントパターンを学びます。これらのパターンは、直接インスタンスアクセスのためのAmazon Elastic Compute Cloud(Amazon EC2)、管理されたサービスのためのAmazon SageMaker AI推論エンドポイント、既存のコンテナフレームワークにフィットする必要がある場合のためのAmazon Elastic Kubernetes Service(Amazon EKS)またはAmazon Elastic Container Service(Amazon ECS)を使用します。また、プロダクションデプロイメントのための運用プラクティスも学びます。
Unslothの動的量子化とは何か?Unslothの共同創設者であるDaniel Hanは次のように説明します。「強力なモデルの最大の問題は、そのサイズが非常に大きく、モデルを実行するために1.5TBが必要です。しかし、いくつかのトリックを使うことで、モデルのサイズを217GBにすることができます。86%小さくなったからといって、精度が86%低下するわけではなく、実際には14%の精度低下にとどまります。この方法論を動的量子化と呼び、すべての重みを4ビットに量子化するのではなく、重要な層は高精度(例えば16ビット)を維持し、感度の低い層は積極的に量子化することを示しています。」
実際には、量子化は各重みを保存するために使用されるビット数を減少させます。標準のBF16モデルはパラメータごとに16ビットを使用します。4ビットに量子化すると、サイズが75%縮小されますが、実際のファイルサイズは量子化メタデータのために若干大きくなります。8億パラメータのモデルでは、メモリフットプリントが約16GBから約5GBに減少します。これは、マルチGPUインスタンスが必要な場合と、単一のGPUに快適に収まる場合の違いです。
Unslothは基盤モデルのファインチューニングと量子化のためのツールです。Unsloth Dynamicは、均一な圧縮を超えた量子化手法です。すべての層に同じビット削減を適用するのではなく、次の3つのステップで機能します:
1. 層ごとの分析 - Unslothは各層が精度損失にどれだけ敏感かを測定します。
2. 動的ビット割り当て - 重要な層(精度損失が意味のある出力劣化を引き起こす層)は高精度(例えば16ビット)を維持し、感度の低い層は積極的に量子化されます(4ビットまたはそれ以下)。
3. 精度調整 - 量子化は、結合出力品質が元のモデルにできるだけ近くなるように調整され、ディスクスペース使用量をできるだけ小さく保ちます。
このプロセスの最終目標は、量子化モデルと標準モデルの間の精度の違いをできるだけ小さくしながら、モデルサイズを意味のある量だけ圧縮することです。オープンソースのUnslothパッケージを使用すると、ファインチューニング、実行、エクスポート、デプロイを一つの統一されたワークフローで行うことができます。
AWSでデプロイする際、量子化は同時に3つのことを変えます。まず、インスタンスの決定:大きなモデルは通常より大きなGPUを必要とするかもしれませんが、小さなものやCPUでも実用的になる可能性があります。次に、起動およびストレージプロファイル:小さなモデルファイルは、環境間でより迅速に移動、保存、プロモートされます。最後に、デプロイメントの柔軟性:コストに敏感な推論のために小さなモデルファイルを選択したり、品質に敏感な推論のために高忠実度のエクスポートを選択したり、より高いスループットのGPUサービスのために統合された表現を選択したりできます。この柔軟性が、AWS環境でUnslothを有用にしています。これにより、すべてのデプロイメントを同じランタイムおよびハードウェアの仮定に強制するのではなく、サービスパスにモデルを適応させることができます。
この投稿では、Unslothで既に量子化されたモデルをAWSインフラストラクチャにデプロイするための4つのデプロイメントパターンを学びます。これらのパターンは、直接インスタンスアクセスのためのAmazon Elastic Compute Cloud(Amazon EC2)、管理されたサービスのためのAmazon SageMaker AI推論エンドポイント、既存のコンテナフレームワークにフィットする必要がある場合のためのAmazon Elastic Kubernetes Service(Amazon EKS)またはAmazon Elastic Container Service(Amazon ECS)を使用します。また、プロダクションデプロイメントのための運用プラクティスも学びます。
Unslothの動的量子化とは何か?Unslothの共同創設者であるDaniel Hanは次のように説明します。「強力なモデルの最大の問題は、そのサイズが非常に大きく、モデルを実行するために1.5TBが必要です。しかし、いくつかのトリックを使うことで、モデルのサイズを217GBにすることができます。86%小さくなったからといって、精度が86%低下するわけではなく、実際には14%の精度低下にとどまります。この方法論を動的量子化と呼び、すべての重みを4ビットに量子化するのではなく、重要な層は高精度(例えば16ビット)を維持し、感度の低い層は積極的に量子化することを示しています。」
実際には、量子化は各重みを保存するために使用されるビット数を減少させます。標準のBF16モデルはパラメータごとに16ビットを使用します。4ビットに量子化すると、サイズが75%縮小されますが、実際のファイルサイズは量子化メタデータのために若干大きくなります。8億パラメータのモデルでは、メモリフットプリントが約16GBから約5GBに減少します。これは、マルチGPUインスタンスが必要な場合と、単一のGPUに快適に収まる場合の違いです。
Unslothは基盤モデルのファインチューニングと量子化のためのツールです。Unsloth Dynamicは、均一な圧縮を超えた量子化手法です。すべての層に同じビット削減を適用するのではなく、次の3つのステップで機能します:
1. 層ごとの分析 - Unslothは各層が精度損失にどれだけ敏感かを測定します。
2. 動的ビット割り当て - 重要な層(精度損失が意味のある出力劣化を引き起こす層)は高精度(例えば16ビット)を維持し、感度の低い層は積極的に量子化されます(4ビットまたはそれ以下)。
3. 精度調整 - 量子化は、結合出力品質が元のモデルにできるだけ近くなるように調整され、ディスクスペース使用量をできるだけ小さく保ちます。
このプロセスの最終目標は、量子化モデルと標準モデルの間の精度の違いをできるだけ小さくしながら、モデルサイズを意味のある量だけ圧縮することです。オープンソースのUnslothパッケージを使用すると、ファインチューニング、実行、エクスポート、デプロイを一つの統一されたワークフローで行うことができます。
AWSでデプロイする際、量子化は同時に3つのことを変えます。まず、インスタンスの決定:大きなモデルは通常より大きなGPUを必要とするかもしれませんが、小さなものやCPUでも実用的になる可能性があります。次に、起動およびストレージプロファイル:小さなモデルファイルは、環境間でより迅速に移動、保存、プロモートされます。最後に、デプロイメントの柔軟性:コストに敏感な推論のために小さなモデルファイルを選択したり、品質に敏感な推論のために高忠実度のエクスポートを選択したり、より高いスループットのGPUサービスのために統合された表現を選択したりできます。この柔軟性が、AWS環境でUnslothを有用にしています。これにより、すべてのデプロイメントを同じランタイムおよびハードウェアの仮定に強制するのではなく、サービスパスにモデルを適応させることができます。