

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 vLLM 和 lm-评估工具对 LLM 进行基准测试
<a name="tutorial-vllm-leaderboard"></a>

本教程将引导你在单个 Deadline Cloud 作业中根据多个基准评估多个大型语言模型 (LLM)。在参数扫描中，每个模型都变成一个任务，任务在工作人员之间并行运行。最后一步将每个模型的结果汇总到CSV和Markdown格式的排名排行榜中。

本教程的源代码可在上的 de [adline-cloud-samples 存储库中找到。](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_lm_eval_leaderboard) GitHub

以下视频演示了 Deadline Cloud 上的 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 服务器，使用 eLe](https://github.com/vllm-project/vllm) [utherai 的 lm-评估工具对本地端点运行每个基准测试，然后停止 vLLM](https://github.com/EleutherAI/lm-evaluation-harness)。模型直接从 Hugging Face Hub 加载，因此不需要作业附件。

要完成本教程，请按照以下步骤操作：

1. 完成先决条件。

1. 建立你的农场。

1. 提交评估任务。

1. 下载并查看结果。

1. 清理资源。

## 先决条件
<a name="tutorial-vllm-prerequisites"></a>

在开始之前，建议进行以下设置：
+ 具有 NVIDIA GPU 服务托管队列的 Deadline 云场（A10G 或 L4、至少 32 GB 内存、至少 4 个 vCPU）。
+ 附加了 conda 队列环境的队列，用于读取`CondaPackages`和`CondaChannels`作业参数。
+ 您的工作站上安装了 De [adline Cloud CLI](https://github.com/aws-deadline/deadline-cloud)。
+ GPU 实例的亚马逊弹性计算云 (Amazon EC2) Elastic Compute vCPU 服务配额充足。*在运行 G 和 VT 实例下运行的默认 3 个模型`g5.xlarge`（每个 4 个 vCPU）需要至少 12 个 vCPU。 On-Demand *

**注意**  
只有门控模型（例如 Llama）才需要 Hugging Face 代币。默认模型列表使用非门控模型。

## 设置你的农场
<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`，将 Deadline Cloud CLI 配置为使用新场：

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

如果您已经有服务器场，则建议使用以下配置：
+ 一支装有 NVIDIA GPU、至少 32 GB 内存和至少 4 个 vCPU 的 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 Cloud 控制台中或使用`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`列表。每个条目都变成了在 Deadline Cloud 监控器中可见的任务。vLLM 必须支持型号（请参阅 vl [LM 支持的](https://docs.vllm.ai/en/latest/models/supported_models.html)型号列表）。

### 选择基准
<a name="tutorial-vllm-custom-benchmarks"></a>

`Benchmarks`作业参数是以逗号分隔的 lm-评估工具任务名称列表。在提交时覆盖默认基准：

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

列表中的所有基准测试都针对每个型号的 vLLM 服务器按顺序运行。保持`MaxModelLen`小于或等于最小模型的上下文窗口。有关可用基准测试的完整列表，请参阅上的 [lm-evaluation-harness 任务](https://github.com/EleutherAI/lm-evaluation-harness/tree/main/lm_eval/tasks)。 GitHub

## 下载并查看结果
<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>

**Fleet 无法扩大员工规模**

最常见的原因是 Amazon EC2 vCPU 服务配额。打开 **EC2 下的** [Service Quotas 控制台](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas)，确认您有足够的空间*来运行 On-Demand 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)
+ [vllM 开启 GitHub](https://github.com/vllm-project/vllm)
+ [lm 评估线束已开启 GitHub](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)