

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

# vLLM を使用してバッチ LLM 推論を実行する
<a name="tutorial-vllm-batch"></a>

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

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

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

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

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

## 概要
<a name="tutorial-vllm-batch-overview"></a>

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

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

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

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

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

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

## ファームをセットアップする
<a name="tutorial-vllm-batch-setup"></a>

互換性のあるファームを取得する最も簡単な方法は、[GitHub に CUDA ファーム CloudFormation テンプレート](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)をデプロイすることです。スタックが に達したら`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 キュー環境がアタッチされたキューが必要です。

## 入力ファイルを準備する
<a name="tutorial-vllm-batch-input"></a>

入力は、行ごとに 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 としてのエクスポートを行います。

## バッチ推論ジョブを送信する
<a name="tutorial-vllm-batch-submit"></a>

**GUI 送信者を使用して送信するには**

1. `vllm_batch` バンドルディレクトリから、送信者を開きます。

   ```
   deadline bundle gui-submit .
   ```

1. 入力 JSONL ファイルを選択します。

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

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

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

または、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 のパラメータ表](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_batch#parameters)を参照してください。

## 結果をダウンロードして表示する
<a name="tutorial-vllm-batch-results"></a>

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

1. ジョブが完了したら、出力をダウンロードします。

   ```
   deadline job download-output --job-id {{job-id}}
   ```

1. すべての出力は、選択したディレクトリ内の`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}
```

## 出力をバッチイメージ生成に連鎖させる
<a name="tutorial-vllm-batch-chaining"></a>

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

## クリーンアップ
<a name="tutorial-vllm-batch-cleanup"></a>

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

**チュートリアルリソースをクリーンアップするには**

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

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

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

## 関連リソース
<a name="tutorial-vllm-batch-related"></a>

以下のリソースは追加情報を提供します。
+ [GitHub のサンプルソースコード](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_batch)
+ [拡散モデルを使用してイメージをバッチで生成する](tutorial-text-to-image-batch.md)
+ [ジョブテンプレートのタスクチャンキング](build-job-bundle-chunking.md)
+ [LLMsを使用して LLM をベンチマークする lm-evaluation-harness](tutorial-vllm-leaderboard.md)
+ [GitHub でジョブ記述環境仕様を開く](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)