

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

# 使用 vLLM 和 lm-evaluation-harness 為 LLMs 建立基準
<a name="tutorial-vllm-leaderboard"></a>

本教學課程將逐步引導您針對單一截止日期雲端任務中的多個基準評估多個大型語言模型 (LLMs)。每個模型會在參數掃描中成為一個任務，而任務會跨工作者平行執行。最後一步會以 CSV 和 Markdown 格式，將每個模型的結果彙總成排名排行榜。

本教學課程的原始程式碼可在 GitHub 的 [deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_lm_eval_leaderboard) 儲存庫中取得。

下列影片示範在截止日期雲端上的 vLLM LLM 排行榜工作流程。

[![AWS Videos](http://img.youtube.com/vi/Hh_s65lEalU/0.jpg)](http://www.youtube.com/watch?v=Hh_s65lEalU)


**預估時間：**20–40 分鐘 （取決於模型和基準的數量）。

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

`EvalModels` 步驟中的每個任務都會啟動本機 [vLLM](https://github.com/vllm-project/vllm) 伺服器，針對本機端點使用 [EleutherAI 的 lm-evaluation-harness](https://github.com/EleutherAI/lm-evaluation-harness) 執行每個基準測試，然後停止 vLLM。模型直接從 Hugging Face Hub 載入，因此不需要任務連接。

若要完成本教學課程，請遵循下列步驟：

1. 完成先決條件。

1. 設定您的陣列。

1. 提交評估任務。

1. 下載並檢閱結果。

1. 清除資源。

## 先決條件
<a name="tutorial-vllm-prerequisites"></a>

開始之前，建議您進行下列設定：
+ 具有 NVIDIA GPU 服務受管機群 (A10G 或 L4，至少 32 GB RAM，至少 4 個 vCPUs的截止日期雲端陣列。
+ 連接 conda 佇列環境的佇列，讀取`CondaPackages`和`CondaChannels`任務參數。
+ 工作站上安裝[的截止日期雲端 CLI](https://github.com/aws-deadline/deadline-cloud)。
+ GPU 執行個體的 Amazon Elastic Compute Cloud (Amazon EC2) vCPU 服務配額足夠。預設的 3 模型在 上執行 `g5.xlarge`（每個 4 vCPUs)，在*執行隨需 G 和 VT 執行個體*下至少需要 12 vCPUs。

**注意**  
Hugging Face 字符僅適用於門控模型 （例如 Llama)。預設模型清單使用非門控模型。

## 設定您的陣列
<a name="tutorial-vllm-setup-farm"></a>

取得相容陣列的最快方法是部署 [CUDA 陣列 CloudFormation 範本](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)。範本會佈建 NVIDIA GPU 服務受管機群 (A10G 或 L4) 和具有 conda 佇列環境的佇列，此套件無須修改即可使用。

**為您的陣列設定 CLI**
+  CloudFormation 堆疊到達 後`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 和至少 4 個 vCPUs SMF 機群。
+ 具有讀取`CondaPackages`和`CondaChannels`任務參數之 conda 佇列環境的佇列。

## 提交評估任務
<a name="tutorial-vllm-submit"></a>

**提交評估任務**

1. 複製範例儲存庫並導覽至任務套件目錄：

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   cd deadline-cloud-samples/job_bundles/vllm_lm_eval_leaderboard
   ```

1. 使用預設模型和基準提交任務：

   ```
   deadline bundle submit . \
     --parameter MaxModelLen=2048
   ```

   預設模型清單會評估三個小型、非門控模型：`Qwen/Qwen2.5-0.5B`、 `Qwen/Qwen2.5-1.5B`和 `EleutherAI/pythia-1.4b`。預設基準是通用推理套件：`hellaswag,arc_easy,arc_challenge,winogrande`。

1. 在截止日期雲端主控台或使用 `deadline job get`命令來監控任務狀態。

### 變更模型清單
<a name="tutorial-vllm-custom-models"></a>

模型在 中的`EvalModels`步驟上定義為 STRING 參數空間`template.yaml`：

```
parameterSpace:
  taskParameterDefinitions:
  - name: ModelName
    type: STRING
    range:
    - "Qwen/Qwen2.5-0.5B"
    - "Qwen/Qwen2.5-1.5B"
    - "EleutherAI/pythia-1.4b"
```

若要新增或移除模型，請編輯`range`清單。每個項目都會成為在截止日期雲端監視器中可見的任務。vLLM 必須支援模型 IDs（請參閱 [vLLM 支援的模型清單](https://docs.vllm.ai/en/latest/models/supported_models.html))。

### 選擇基準
<a name="tutorial-vllm-custom-benchmarks"></a>

`Benchmarks` 任務參數是以逗號分隔的 lm-evaluation-harness 任務名稱清單。在提交時覆寫預設基準：

```
deadline bundle submit . \
  --parameter Benchmarks="hellaswag,mmlu,gsm8k"
```

清單中的所有基準都會針對每個模型的 vLLM 伺服器依序執行。保持`MaxModelLen`小於或等於最小模型的內容視窗。如需可用基準的完整清單，請參閱 GitHub 上的 [lm-evaluation-harness 任務](https://github.com/EleutherAI/lm-evaluation-harness/tree/main/lm_eval/tasks)。

## 下載並檢閱結果
<a name="tutorial-vllm-results"></a>

**下載排行榜結果**

1. 任務完成後，下載輸出：

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

1. 檢視排行榜：

   ```
   cat leaderboard_results/leaderboard.md
   ```

下列範例顯示典型排行榜輸出：

```
# LLM Leaderboard

Models: 3 | Benchmarks: arc_challenge, arc_easy, hellaswag, winogrande

| Rank | Model                  | arc_challenge | arc_easy | hellaswag | winogrande | Mean   |
|------|------------------------|---------------|----------|-----------|------------|--------|
| 1    | Qwen/Qwen2.5-1.5B      | 0.4497        | 0.7176   | 0.6775    | 0.6322     | 0.6192 |
| 2    | Qwen/Qwen2.5-0.5B      | 0.3200        | 0.5816   | 0.5223    | 0.5691     | 0.4982 |
| 3    | EleutherAI/pythia-1.4b | 0.2833        | 0.5387   | 0.5201    | 0.5730     | 0.4788 |
```

## 清除
<a name="tutorial-vllm-cleanup"></a>

為了避免持續收費，請清除您為此教學課程建立的資源：

**清除教學課程資源**

1. 如果您已部署 CUDA 陣列 CloudFormation 範本，請從 CloudFormation 主控台刪除 CloudFormation 堆疊。

1. 如果您使用現有的陣列，請停止或刪除您用於本教學課程的 GPU 機群。

1. 如果不再需要本機輸出檔案，請將其移除：

   ```
   rm -rf leaderboard_results/
   ```

## 疑難排解
<a name="tutorial-vllm-troubleshooting"></a>

**機群不會擴展工作者**

最常見的原因是 Amazon EC2 vCPU 服務配額。開啟 **EC2** 下的 [Service Quotas 主控台](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas)，確認您有*執行隨需 G 和 VT 執行個體*的前端空間。配額增加可能需要幾分鐘到幾天的時間。

## 相關資源
<a name="tutorial-vllm-related"></a>

下列資源提供其他資訊：
+ [GitHub 上的範例原始程式碼](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_lm_eval_leaderboard)
+ [GitHub 上的 vLLM](https://github.com/vllm-project/vllm)
+ [GitHub 上的 lm-evaluation-harness ](https://github.com/EleutherAI/lm-evaluation-harness)
+ [CUDA 陣列 CloudFormation 範本](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)
+ [vLLM 支援的模型](https://docs.vllm.ai/en/latest/models/supported_models.html)