View a markdown version of this page

使用 vLLM 运行批处理 LLM 推理 - 截止日期云

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

使用 vLLM 运行批处理 LLM 推理

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

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

加载 7 B-parameter LLM 需要 30 秒或更长时间,因此为每项任务支付这笔费用将在批处理运行时占据主导地位。Open Job Description 步骤环境解决了这个问题:vLLM 服务器在工作人员接手任务时启动,并在工作人员运行的每项任务中保持负载状态,然后随着会话而关闭。在 4 名工作人员的车队中按照 24 个即时批量支付 4 个模型的装载,而不是 24 个。

预计时间:30—60 分钟,包括农场设置。

运行本教程会产生处理任务的 GPU 工作实例的费用。

概述

要完成本教程,请按照以下步骤操作:

  1. 设置你的农场。

  2. 准备输入文件。

  3. 提交批量推理作业。

  4. 下载并查看结果。

  5. 清理资源。

设置你的农场

获得兼容农场的最快方法是在上 GitHub部署 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 的服务管理队列,以及一个附加了用于读取CondaPackagesCondaChannels作业参数的 conda 队列环境的队列。

准备输入文件

输入是一个 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。

提交批量推理作业

与 GUI 提交者一起提交
  1. vllm_batch bundle 目录中,打开提交者:

    deadline bundle gui-submit .
  2. 选择您的输入 JSONL 文件。

  3. 设置提示范围1-10例如,文件中的前 10 个提示音)。

  4. 设置区块大小,即每个任务处理的提示数(默认5)。

  5. 选择一个输出目录,然后选择提交

或者,使用 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

下载并查看结果

下载并查看结果
  1. 任务完成后,下载输出:

    deadline job download-output --job-id job-id
  2. 所有输出都位于您选择的目录内的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}

将输出链接到批量图像生成中

output.jsonl文件是文本到图像批处理包的现成输入。使用此包生成文本(口号、字幕、场景描述),然后将输出文件提交到图像生成包,图像生成包会自动使用每行generated_text作为在生成的图像上合成的标题。有关完整演练,请参阅使用扩散模型批量生成图像

清理

为避免持续收费,请清理您为本教程创建的资源:

清理教程资源
  1. 如果您部署了 CUDA 农场 CloudFormation 模板,请从 CloudFormation 控制台中删除 CloudFormation 堆栈。

  2. 如果您使用现有农场并专门为本教程创建了 GPU 队列,请停止或删除该队列。如果您使用的是预先存在的共享队列,请将其保留在原处。

  3. 如果您不再需要本地输出文件,请将其删除。

以下资源提供了其他信息: