View a markdown version of this page

vLLM を使用してバッチ LLM 推論を実行する - Deadline クラウド

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

vLLM を使用してバッチ LLM 推論を実行する

このチュートリアルでは、GitHub の vLLM 推論エンジンを使用して、プロンプトの JSONL ファイルで高スループットの大規模言語モデル (LLM) 推論を実行する方法について説明します。GitHub の vLLM バッチ推論ジョブバンドルは、すべての行が 1 つのプロンプトで、モデルを選択し、ジョブが GPU フリート全体でファンアウトするファイルとともに送信します。すべてのプロンプトは LLM レスポンスを取得し、集計ステップはすべてを JSONL ファイルと任意のブラウザで開くことができる自己完結型の HTML ビューワーにパッケージ化します。

バンドルは、コンテンツ生成、評価データセット、翻訳、抽出、分類など、オフラインで恥ずかしいほど並列なワークロードを処理します。これは、ライブ API サーバーなしで多くの独立したプロンプトに応答するためにモデルが必要な場所に適しています。内部では、Deadline Cloud タスクチャンキング機能を使用してプロンプトをバッチタスクにグループ化します。これにより、1 つのChunkSizeパラメータでスケジューリングオーバーヘッドに対して並列処理をダイヤルできます。詳細については、「ジョブテンプレートのタスクチャンキング」を参照してください。

7B-parameter LLM のロードには 30 秒以上かかるため、タスクあたりのコストを支払うとバッチランタイムが優先されます。Open Job Description ステップ環境はこの問題を解決します。vLLM サーバーは、ワーカーがジョブをピックアップしたときに起動し、ワーカーが実行するすべてのタスクにわたってロードされたままになり、セッションでシャットダウンします。4 ワーカーフリートの 24 プロンプトバッチは、24 ではなく 4 つのモデルロードに対して課金されます。

推定時間: ファームのセットアップを含めて 30~60 分。

このチュートリアルを実行すると、ジョブを処理する GPU ワーカーインスタンスに対して料金が発生します。

概要

このチュートリアルを完了するには、次の手順に従います。

  1. ファームをセットアップします。

  2. 入力ファイルを準備します。

  3. バッチ推論ジョブを送信します。

  4. 結果をダウンロードして表示します。

  5. リソースをクリーンアップします。

ファームをセットアップする

互換性のあるファームを取得する最も簡単な方法は、GitHub に CUDA ファーム CloudFormation テンプレートをデプロイすることです。スタックが に達したらCREATE_COMPLETE、新しいファームを使用するように Deadline Cloud CLI を設定します。

deadline config set defaults.farm_id FarmId-from-stack-outputs deadline config set defaults.queue_id CUDAQueueId-from-stack-outputs

ファームがすでにある場合は、NVIDIA GPUs と 32 GB 以上の RAM を備えたサービスマネージドフリートと、 CondaPackages および CondaChannelsジョブパラメータを読み取る conda キュー環境がアタッチされたキューが必要です。

入力ファイルを準備する

入力は、行ごとに 1 つの JSON オブジェクトを持つ JSONL ファイルです。各行には promptフィールドが必要です。

{"prompt": "What is photosynthesis?", "id": "001"} {"prompt": "Write a haiku about clouds.", "id": "002"} {"prompt": "Explain gravity to a 5 year old.", "id": "003", "max_tokens": 256, "temperature": 0.9}

プロンプトごとのオプションフィールドには、追跡id、レスポンスの長さmax_tokensの制限、サンプリングのランダム性の制御temperatureが含まれます。プロンプトごとのフィールドは、その行のジョブレベルのデフォルトのみを上書きし、追加のフィールドは変更されずに出力に渡されます。

バンドルには、入力ファイルを構築するためのゼロ依存 HTML ツールが含まれています。ブラウザtools/prompt_builder.htmlで を開き、プロンプトの追加、プロンプトごとのオプションの設定、JSONL としてのエクスポートを行います。

バッチ推論ジョブを送信する

GUI 送信者を使用して送信するには
  1. vllm_batch バンドルディレクトリから、送信者を開きます。

    deadline bundle gui-submit .
  2. 入力 JSONL ファイルを選択します。

  3. プロンプト範囲を設定します (たとえば、 ファイル内の最初の 10 個のプロンプト1-10の場合)。

  4. チャンクサイズを設定します。これは、各タスクプロセスが実行するプロンプトの数です (デフォルトは 5)。

  5. 出力ディレクトリを選択し、送信を選択します。

または、CLI を使用して を送信します。

deadline bundle submit . \ --parameter InputFile=prompts.jsonl \ --parameter Prompts=1-10 \ --parameter ChunkSize=5 \ --parameter OutputDir=$PWD/results

ModelName パラメータはデフォルトで に設定Qwen/Qwen2.5-7B-Instructされ、Hugging Face モデル ID を受け入れます。Prompts パラメータは、特定の行2,5,8-9の場合や失敗した行のみを再実行4,7する場合など、完全な Open Job Description 整数範囲構文を受け入れます。チャンクサイズを修正するのではなく、Deadline Cloud で自動チューニングすることもできます。各チャンクにかかる時間 (デフォルトは 120 秒) TargetRuntimeSecondsに設定すると、スケジューラは将来のタスクでチャンクサイズを増減してターゲットに到達させます。完全なパラメータリストについては、GitHub のサンプル README のパラメータ表を参照してください。

結果をダウンロードして表示する

結果をダウンロードして表示するには
  1. ジョブが完了したら、出力をダウンロードします。

    deadline job download-output --job-id job-id
  2. すべての出力は、選択したディレクトリ内のoutput/サブフォルダに配置されます。ブラウザresults/output/results.htmlで を開いてビジュアル結果ビューワーを表示するか、raw 複合出力results/output/output.jsonlを読み取ります。

各出力行には、元のプロンプトとそのパススルーフィールドに加えて、generated_textレスポンス、終了理由、トークン数が含まれます。

{"prompt": "What is photosynthesis?", "id": "001", "generated_text": "Photosynthesis is...", "finish_reason": "stop", "prompt_tokens": 7, "completion_tokens": 42}

出力をバッチイメージ生成に連鎖させる

output.jsonl ファイルは、text-to-imageバッチバンドル用の既製の入力です。このバンドル (スローガン、字幕、シーンの説明) を使用してテキストを生成し、出力ファイルをイメージ生成バンドルに送信します。これにより、生成されたイメージ上で複合されたキャプションgenerated_textとして各行の が自動的に使用されます。詳細なチュートリアルについては、「」を参照してください拡散モデルを使用してイメージをバッチで生成する

クリーンアップ

継続的な課金を回避するには、このチュートリアル用に作成したリソースをクリーンアップします。

チュートリアルリソースをクリーンアップするには
  1. CUDA ファーム CloudFormation テンプレートをデプロイした場合は、 CloudFormation コンソールから CloudFormation スタックを削除します。

  2. 既存のファームを使用し、このチュートリアル専用の GPU フリートを作成した場合は、そのフリートを停止または削除します。既存の共有フリートを使用した場合は、そのままにします。

  3. 不要になったローカル出力ファイルを削除します。

以下のリソースは追加情報を提供します。