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)。
- 啟動例項後,請按照連線到您的例項中的說明連線到例項
- 進入例項後,透過執行以下命令啟用預裝的推理虛擬環境
請參閱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 物件)提供。例如,要停用自動分桶,請包含
或者從 CLI 啟動 vLLM 時,傳遞
或者,使用者可以直接呼叫 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
後端)。