Hugging Face Inference Endpoints を介した MusicGen のデプロイ

Inference Endpoints による MusicGen のデプロイ

Hugging Face は、テキストプロンプトやオプションのメロディ・コンディショニングから音楽を生成できるモデルである MusicGen を、Inference Endpoints を使用してスケーラブルな API としてデプロイする方法に関するガイドを提供しています。このプロセスでは、カスタムハンドラーを使用することで、transformers のハイレベルな pipeline 抽象化ではデフォルトでサポートされていないモデルのデプロイが可能になります。

Pipeline 非対応モデルのためのカスタムハンドラーの使用

Inference Endpoints は通常、ワンクリックでのデプロイのために transformers の pipeline API を活用します。しかし、MusicGen のように特定の推論ロジックが必要となる可能性のあるモデルの場合、Hugging Face は「カスタムハンドラー」を利用します。カスタムハンドラーとは、ユーザーが非 transformer モデルや、定義済みの pipeline がない transformer モデルをデプロイできるようにするためのカスタム推論関数です。

この方法を使用して MusicGen をデプロイするには、以下のワークフローが必要になります:

  1. リポジトリの複製: 対象となる MusicGen リポジトリ(例:facebook/musicgen-large)を個人のプロファイルに複製します。
  2. ハンドラーの実装: カスタムの EndpointHandler クラスを含む handler.py ファイルと、必要な依存関係(transformers==4.31.0accelerate>=0.20.3 など)を指定する requirements.txt ファイルを追加します。
  3. エンドポイントの作成: 複製したリポジトリを選択し、ハードウェア要件を指定して Inference Endpoint を作成します。

MusicGen ハンドラーの技術的実装

MusicGen のカスタムハンドラーは、EndpointHandler クラスの __init__ および __call__ メソッドをオーバーライドして、モデルのロードとリクエスト処理を管理します:

  • 初期化 (__init__): 指定されたパスから AutoProcessorMusicgenForConditionalGeneration モデルをロードします。モデルは torch_dtype=torch.float16 でロードされ、GPU (.to("cuda")) に転送されます。
  • 実行 (__call__):
    • 入力データからテキストプロンプトを抽出します。
    • プロセッサを使用してテキストを前処理し、テンソルを GPU に転送します。
    • torch.autocast("cuda") ブロック内で model.generate メソッドを実行し、オーディオシーケンスを生成します。
    • 出力を後処理し、API レスポンス用にテンソルを CPU ベースの NumPy リストに変換します。

ハードウェアと API の利用

musicgen-large モデルの場合、Hugging Face は最低 16 GB の RAM を持つインスタンスを推奨しています。

エンドポイントがアクティブになると、curl または huggingface-hub Python ライブラリの InferenceClient クラスを使用して、標準的な HTTP POST リクエストでクエリを送信できます。API は浮動小数点のリストとして波形シーケンスを返し、これは scipy などのライブラリを使用して 32,000 Hz のサンプリングレートで .wav ファイルに変換できます。

MusicGen の機能

MusicGen は、主に 2 つの生成モードをサポートしています:

  • Text-to-Music: テキストによる説明(例:「重低音のドラムとシンセが入った 80 年代のポップトラック」)のみに基づいてオーディオを生成します。
  • Melody-Conditioned Generation: テキストプロンプトと既存のオーディオスニペットを組み合わせて、補完的な楽曲を作成します。

Sources