對于使用特定領域數據調整 AI 基礎模型的組織而言,快速創建和部署微調模型的能力是高效地通過企業生成式 AI 應用提供價值的關鍵。
NVIDIA NIM 為最新的 AI 基礎模型提供預構建、性能優化的推理微服務,包括使用參數高效微調 (PEFT) 自定義的模型的 無縫部署 。
在某些情況下,理想的做法是使用持續預訓練、DPO、監督微調(SFT)或模型合并等方法,這些方法直接在訓練或自定義過程中調整基礎模型權重,這與使用低階適應(LoRA)的 PEFT 不同。在這些情況下,必須更新模型的推理軟件配置,以便在給定新權重時獲得最佳性能。
NIM 可以自動構建針對本地環境中調整后的模型和 GPU 優化的 TensorRT-LLM 推理引擎性能,然后加載該引擎,以便在單步模型部署流程中運行推理,而無需承擔這一通常漫長的過程。
在本文中,我們將探討如何使用本地構建的性能優化型 TensorRT-LLM 推理引擎,為通過 SFT 自定義的模型快速部署 NIM 微服務。我們提供了所有必要的命令以及一些實用的選項,因此您可以立即自行試用。
預備知識?
要運行本教程,您需要一個可訪問 80 GB GPU 內存且已安裝 git-lfs
的 NVIDIA 加速計算環境。
在 NVIDIA 加速計算環境中拉取和部署 NIM 微服務之前,您還需要 NGC API 密鑰。
- 前往 NVIDIA API Catalog 中的 Meta Llama 3 8B Instruct 模型列表。
- 選擇右上角的“ Login ”并按照說明操作。
- 登錄后,在 模型頁面 選擇“ 使用此 NIM 構建 ”。
- 選擇自托管 API 并按照任一選項訪問 NIM 微服務:
- NVIDIA 開發者計劃會員可以免費訪問 NIM,僅用于研究、開發和測試。
- 90 天 NVIDIA AI Enterprise 許可證,包括對 NVIDIA 企業支持的訪問權限。
在為所選訪問方法提供必要的詳細信息后,請復制 NGC API 密鑰,并準備好繼續使用 NIM。有關更多信息,請參閱 為 LLMs 啟動 NVIDIA NIM 。
NIM 微服務入門?
將 NGC CLI API 密鑰作為計算環境中的環境變量提供:
export NGC_API_KEY=<<YOUR API KEY HERE>> |
在優化過程中,您還必須指向、創建和修改用作緩存的目錄的權限:
export NIM_CACHE_PATH= /tmp/nim/ .cache mkdir -p $NIM_CACHE_PATH chmod -R 777 $NIM_CACHE_PATH |
要演示在本地構建、優化的 TensorRT-LLM 推理引擎,以便使用 NIM 部署微調模型,您需要一個已通過 SFT 進行自定義的模型。在本教程中,請使用 NVIDIA OpenMath2-Llama3.1-8B 模型,這是使用 OpenMathInstruct-2 數據集對 Meta 的 Llama-3.1-8B 進行的自定義。
基礎模型必須作為可下載的 NIM 提供給 LLMs。有關可下載的 NIM 微服務的更多信息,請參閱 NVIDIA API Catalog 中的 NIM Type:Run Anywhere 過濾器 。
您只需獲得此模型的權重,即可通過多種方式獲得。為此,請使用以下命令克隆模型資源庫:
git lfs install git clone https: //huggingface .co /nvidia/Llama-3 .1-Nemotron-70B-Instruct-HF export MODEL_WEIGHT_PARENT_DIRECTORY=$PWD |
現在您已收集模型權重,請繼續下一步:啟動微服務(microservice)。
從可用性能配置文件中進行選擇?
系統會根據您選擇的模型和硬件配置,自動選擇最適用的可用推理性能配置文件。生成本地推理引擎有兩種可用的性能配置文件:
- 延遲: 專注于提供針對延遲進行優化的 NIM 微服務。
- 吞吐量: 專注于提供針對批量吞吐量優化的 NIM 微服務。
有關支持功能(包括可用精度)的更多信息,請參閱 NVIDIA NIM 文檔中的 支持矩陣 主題。
使用 SFT 模型的示例?
運行以下命令,為 OpenMath2-Llama3.1-8B 創建本地構建的 TensorRT-LLM 推理引擎:
docker run - it - - rm - - gpus all \ - - user $( id - u):$( id - g)\ - - network = host \ - - shm - size = 32GB \ - e NGC_API_KEY \ - e NIM_FT_MODEL = / opt / weights / hf / OpenMath2 - Llama3. 1 - 8B \ - e NIM_SERVED_MODEL_NAME = OpenMath2 - Llama3. 1 - 8B \ - v $NIM_CACHE_PATH: / opt / nim / .cache \ - v $MODEL_WEIGHT_PARENT_DIRECTORY: / opt / weights / hf \ nvcr.io / nim / meta / llama3_1 - 8b : 1.3 . 0 |
該命令與您用于部署 NIM 微服務的典型命令幾乎相同。在本例中,您已添加額外的 NIM_FT_MODEL
參數,該參數指向 OpenMath2-Llama3.1-8B 模型。
因此,NIM 可在本地構建經過優化的推理引擎。要使用此新 NIM 微服務執行推理,請運行以下 Python 代碼示例:
from openai import OpenAI client = OpenAI( api_key = "none" ) completion = client.chat.completions.create( model = "OpenMath2-Llama3.1-8B" , messages = [{ "role" : "user" , "content" : "What is your name?" }], temperature = 0.2 , top_p = 0.7 , max_tokens = 100 , stream = True ) for chunk in completion: if chunk.choices[ 0 ].delta.content is not None : print (chunk.choices[ 0 ].delta.content, end = "") |
使用自定義性能配置文件構建經過優化的 TensorRT-LLM 引擎
在 受支持的 GPU 上,您可以使用類似命令啟動 NIM 微服務。按照“ Model Profile ”說明啟動您的微服務,并確定可對其訪問的配置文件。
export IMG_NAME = "nvcr.io/nim/meta/llama-3.1-8b-instruct:1.3.0" docker run - - rm - - runtime = nvidia - - gpus = all $IMG_NAME list - model - profiles \ - e NGC_API_KEY = $NGC_API_KEY |
假設您使用的是 H100 GPU,您應該會看到以下可用配置文件:
tensorrt_llm-h100-fp8-tp1-throughput
tensorrt_llm-h100-fp8-tp2-latency
重新運行命令并提供額外的環境變量以指定所需的配置文件。
docker run - - rm - - runtime = nvidia - - gpus = all $IMG_NAME list - model - profiles \ - e NGC_API_KEY = $NGC_API_KEY \ - e NIM_MODEL_PROFILE = tensorrt_llm - h100 - fp8 - tp2 - latency |
現在,您已使用所需的配置文件重新啟動 NIM 微服務,請使用 Python 與模型進行交互:
from openai import OpenAI client = OpenAI( api_key = "none" ) completion = client.chat.completions.create( model = "llama-3.1-8b-instruct" , messages = [{ "role" : "user" , "content" : "What is your name?" }], temperature = 0.2 , top_p = 0.7 , max_tokens = 100 , stream = True ) for chunk in completion: if chunk.choices[ 0 ].delta.content is not None : print (chunk.choices[ 0 ].delta.content, end = "") |
結束語?
無論您是使用 PEFT 還是 SFT 方法進行模型自定義,NIM 都可以通過幾個簡單的步驟加速自定義模型部署,從而實現高性能的推理。借助在本地環境中自動構建的經過優化的 TensorRT-LLM 推理引擎,NIM 正在為快速部署加速 AI 推理提供新的可能性。
有關更多信息,請參閱以下資源:
要與 NVIDIA 和 NIM 微服務社區互動,請參閱 NVIDIA NIM 開發者論壇 。
?
?