跳到内容

AWS Neuron

AWS Neuron 是用于在由 AWS Inferentia 和 AWS Trainium 提供支持的 Amazon EC2 实例和 UltraServer(Inf1、Inf2、Trn1、Trn2 和 Trn2 UltraServer)上运行深度学习和生成式 AI 工作负载的软件开发工具包 (SDK)。Trainium 和 Inferentia 均由名为 NeuronCore 的完全独立的异构计算单元提供支持。本文档描述了如何在 Neuron 上设置运行 vLLM 的环境。

警告

此设备没有预构建的 wheel 或镜像,因此您必须从源代码构建 vLLM。

要求

  • 操作系统:Linux
  • Python:3.9 或更高版本
  • Pytorch 2.5/2.6
  • 加速器:NeuronCore-v2(在 trn1/inf2 芯片中)或 NeuronCore-v3(在 trn2 芯片中)
  • AWS Neuron SDK 2.23

配置新环境

启动 Trn1/Trn2/Inf2 实例并验证 Neuron 依赖项

启动预装 Neuron 依赖项的 Trainium 或 Inferentia 实例的最简单方法是按照此快速入门指南,使用 Neuron 深度学习 AMI (Amazon Machine Image)。

  • 启动实例后,请按照连接到您的实例中的说明连接到实例
  • 进入实例后,通过运行以下命令激活预装的推理虚拟环境
source /opt/aws_neuronx_venv_pytorch_2_6_nxd_inference/bin/activate

请参阅NxD Inference 设置指南,了解替代设置说明,包括使用 Docker 和手动安装依赖项。

注意

NxD Inference 是在 Neuron 上运行推理的默认推荐后端。如果您打算使用旧版 transformers-neuronx 库,请参阅 Transformers NeuronX 设置

使用 Python 进行设置

预构建的 Wheels

目前,没有预构建的 Neuron wheel。

从源代码构建 Wheel

要从源代码构建和安装 vLLM,请运行

git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -U -r requirements/neuron.txt
VLLM_TARGET_DEVICE="neuron" pip install -e .

AWS Neuron 在 https://github.com/aws-neuron/upstreaming-to-vllm/tree/neuron-2.23-vllm-v0.7.2 维护 vLLM 的一个 Github 分支,除了 vLLM V0 中已有的功能外,该分支还包含一些其他功能。请利用 AWS 分支来实现以下功能:

  • Llama-3.2 多模态支持
  • 多节点分布式推理

有关更多详细信息和使用示例,请参阅NxD Inference 的 vLLM 用户指南

要安装 AWS Neuron 分支,请运行以下命令

git clone -b neuron-2.23-vllm-v0.7.2 https://github.com/aws-neuron/upstreaming-to-vllm.git
cd upstreaming-to-vllm
pip install -r requirements/neuron.txt
VLLM_TARGET_DEVICE="neuron" pip install -e .

请注意,AWS Neuron 分支仅用于支持 Neuron 硬件;不测试与其他硬件的兼容性。

使用 Docker 进行设置

预构建的镜像

目前,没有预构建的 Neuron 镜像。

从源代码构建镜像

请参阅deployment-docker-build-image-from-source,了解构建 Docker 镜像的说明。

请务必使用 docker/Dockerfile.neuron 替换默认的 Dockerfile。

额外信息

通过 NxD Inference 后端支持的功能

当前的 vLLM 和 Neuron 集成依赖于 neuronx-distributed-inference(首选)或 transformers-neuronx 后端来执行大部分繁重工作,包括 PyTorch 模型初始化、编译和运行时执行。因此,Neuron 支持的大多数功能也可以通过 vLLM 集成使用。

要通过 vLLM 入口点配置 NxD Inference 功能,请使用 override_neuron_config 设置。将您要覆盖的配置作为字典(或从 CLI 启动 vLLM 时作为 JSON 对象)提供。例如,要禁用自动分桶,请包含

override_neuron_config={
    "enable_bucketing":False,
}

或者从 CLI 启动 vLLM 时,传递

--override-neuron-config "{\"enable_bucketing\":false}"

或者,用户可以直接调用 NxDI 库来追踪和编译您的模型,然后将预编译的工件(通过 NEURON_COMPILED_ARTIFACTS 环境变量)加载到 vLLM 中以运行推理工作负载。

已知限制

  • EAGLE 推测解码:NxD Inference 要求 EAGLE 草稿检查点包含来自目标模型的 LM 头权重。请参阅此指南,了解如何转换预训练的 EAGLE 模型检查点以使其与 NxDI 兼容。
  • 量化:vLLM 中的原生量化流程在 NxD Inference 上支持不佳。建议遵循此Neuron 量化指南,使用 NxD Inference 量化和编译您的模型,然后将编译后的工件加载到 vLLM 中。
  • 多 LoRA 服务:NxD Inference 仅支持在服务器启动时加载 LoRA 适配器。目前不支持在运行时动态加载 LoRA 适配器。请参阅多 LoRA 示例
  • 多模态支持:多模态支持仅通过 AWS Neuron 分支提供。此功能尚未上游到 vLLM 主分支,因为 NxD Inference 目前依赖于对 vLLM 核心逻辑的某些修改来支持此功能。
  • 多节点支持:跨多个 Trainium/Inferentia 实例的分布式推理仅在 AWS Neuron 分支上受支持。请参阅此多节点示例以运行。请注意,张量并行(跨 NeuronCore 的分布式推理)在 vLLM 主分支中可用。
  • 推测解码中的已知边缘情况错误:当序列长度接近最大模型长度时(例如,请求的最大token数达到最大模型长度并忽略 eos 时),推测解码中可能会发生边缘情况故障。在这种情况下,vLLM 可能会尝试分配一个额外的块,以确保有足够的内存用于前瞻槽的数量,但由于我们对分页注意力(paged attention)的支持不佳,vLLM 没有另一个 Neuron 块可供分配。AWS Neuron 分支中已实现一个临时修复(提前终止 1 次迭代),但尚未上游到 vLLM 主分支,因为它修改了 vLLM 的核心逻辑。

环境变量

  • NEURON_COMPILED_ARTIFACTS:设置此环境变量以指向您的预编译模型工件目录,以避免在服务器初始化时进行编译。如果未设置此变量,Neuron 模块将执行编译并将工件保存在模型路径下的 neuron-compiled-artifacts/{unique_hash}/ 子目录中。如果设置了此环境变量,但目录不存在或内容无效,Neuron 也将回退到新的编译并将工件存储在此指定路径下。
  • NEURON_CONTEXT_LENGTH_BUCKETS:上下文编码的分桶大小。(仅适用于 transformers-neuronx 后端)。
  • NEURON_TOKEN_GEN_BUCKETS:token 生成的分桶大小。(仅适用于 transformers-neuronx 后端)。