

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

# 使用 vLLM 运行批处理 LLM 推理
<a name="tutorial-vllm-batch"></a>

本教程将引导您使用[开启的 vLLM 推理引擎在 JSONL 提示文件上运行高吞吐量大语言模型 (LLM) 推理。 GitHub ](https://github.com/vllm-project/vllm)你在提交 [ vLLM 批量推理任务包时 GitHub](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/vllm_batch)附带一个文件，其中每行都有一个提示，选择一个模型，然后任务分布在 GPU 队列中。每个提示都会获得 LLM 响应，汇总步骤将所有内容打包到一个 JSONL 文件中，外加一个可以在任何浏览器中打开的独立的 HTML 查看器。

该套装可处理离线、令人尴尬的并行工作负载：内容生成、评估数据集、翻译、提取和分类。它适合任何需要模型来回答许多独立提示而无需实时API服务器的地方。在幕后，它使用 Deadline Cloud 任务分块功能将提示分组为批处理任务，这使您可以通过单个参数来降低并行性以抵消调度开销。`ChunkSize`有关更多信息，请参阅 [作业模板的任务分块](build-job-bundle-chunking.md)。

加载 7 B-parameter LLM 需要 30 秒或更长时间，因此为每项任务支付这笔费用将在批处理运行时占据主导地位。Open Job Description 步骤环境解决了这个问题：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[部署 ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm) 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 GPU 和至少 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` Per-prompt字段仅覆盖该行的作业级别默认值，任何其他字段都将不变地传递到输出。

该软件包包括一个用于构建输入文件的零依赖性 HTML 工具。`tools/prompt_builder.html`在浏览器中打开以添加提示、设置每个提示符选项并导出为 JSONL。

## 提交批量推理作业
<a name="tutorial-vllm-batch-submit"></a>

**与 GUI 提交者一起提交**

1. 从 `vllm_batch` bundle 目录中，打开提交者：

   ```
   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 秒），调度器在未来的任务中增加或缩小区块大小以达到目标。有关完整的参数列表，请参阅[示例 README 中的参数表。 GitHub ](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`文件是文本到图像批处理包的现成输入。使用此包生成文本（口号、字幕、场景描述），然后将输出文件提交到图像生成包，图像生成包会自动使用每行`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-评估工具对 LLM 进行基准测试](tutorial-vllm-leaderboard.md)
+ [打开职位描述环境规范 GitHub ](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)