对于使用特定领域数据调整 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(
base_url = "http://localhost:8000/v1",
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(
base_url = "http://localhost:8000/v1",
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 开发者论坛 。