

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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)，其中每一行都是一個提示、挑選模型，以及 GPU 機群中的任務粉絲。每個提示都會取得 LLM 回應，而彙總步驟會將所有內容封裝到 JSONL 檔案，加上您可以在任何瀏覽器中開啟的獨立 HTML 檢視器。

套件可處理離線、尷尬且平行的工作負載：內容產生、評估資料集、翻譯、擷取和分類。它適合您需要模型來回應許多獨立提示，而不需要即時 API 伺服器的任何位置。在幕後，它會使用截止日期雲端任務區塊功能，將提示分組為批次任務，這可讓您使用單一`ChunkSize`參數來平行處理排程額外負荷。如需詳細資訊，請參閱[任務範本的任務區塊](build-job-bundle-chunking.md)。

載入 7B-parameter LLM 需要 30 秒或更多，因此支付每個任務的成本將主導批次執行時間。開啟任務描述步驟環境解決此問題：vLLM 伺服器會在工作者取得任務時啟動，並在工作者執行的每個任務中保持載入狀態，然後使用工作階段關閉。4 個工作者機群上的 24 個提示批次會支付 4 個模型負載，而不是 24 個模型負載。

**預估時間：**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`，設定截止日期雲端 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>

輸入是 JSONL 檔案，每行一個 JSON 物件。每一行都必須有 `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. 設定**提示範圍** （例如，`1-10`針對 檔案的前 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` 參數接受完整的 Open Job Description 整數範圍語法，例如`2,5,8-9`用於特定行或僅`4,7`重新執行失敗行。您也可以讓 Deadline Cloud 自動調整區塊大小，而不是修正區塊大小：`TargetRuntimeSeconds`將 設定為您希望每個區塊採取的時間長度 （預設 120 秒），而排程器會在未來的任務上擴展或縮減區塊大小以達成目標。如需完整參數清單，請參閱 [ 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`中為視覺效果結果檢視器開啟 ，或`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)
+ [使用 vLLM 和 lm-evaluation-harness 為 LLMs 建立基準](tutorial-vllm-leaderboard.md)
+ [GitHub 上的開啟任務描述環境規格](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)