数据中心/云端

利用 NVIDIA NIM 实现 AI 模型微调部署

对于使用特定领域数据调整 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 密钥。

  1. 前往 NVIDIA API Catalog 中的 Meta Llama 3 8B Instruct 模型列表。
  2. 选择右上角的“ Login ”并按照说明操作。
  3. 登录后,在 模型页面 选择“ 使用此 NIM 构建 ”。
  4. 选择自托管 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="")
视频 1、如何部署微调的 AI 模型

使用自定义性能配置文件构建经过优化的 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 开发者论坛

 

 

标签