Llama 3.1 NemoGuard 8B ContentSafety 部署#

Llama 3.1 NemoGuard 8B ContentSafety 模型将可以通过 HuggingFace 下载为 LoRA 适配器模块,并作为 NVIDIA NIM 提供,以便使用 NVIDIA TensorRT-LLM 进行低延迟优化推理。

本指南介绍如何部署 NemoGuard NIM,以及如何在 NeMo Guardrails 配置中使用已部署的 NIM。

NIM 部署#

访问权限#

第一步是确保通过 NGC 使用 NVAIE 许可证访问 NVIDIA NIM 资产。获得具有必要权限的 NGC API 密钥后,设置以下环境变量

export NGC_API_KEY=<your NGC API key>
docker login nvcr.io -u "$oauthtoken" -p <<< <your NGC API key>

通过拉取最新的 NemoGuard 容器,测试您是否能够使用 NVIDIA NIM 资产。

export NIM_IMAGE=<Path to latest NIM docker container>
export MODEL_NAME="llama-3.1-nemoguard-8b-content-safety"
docker pull $NIM_IMAGE

开始吧!

docker run -it --name=$MODEL_NAME \
    --gpus=all --runtime=nvidia \
    -e NGC_API_KEY="$NGC_API_KEY" \
    -e NIM_SERVED_MODEL_NAME=$MODEL_NAME \
    -e NIM_CUSTOM_MODEL_NAME=$MODEL_NAME \
    -u $(id -u) \
    -p 8123:8000 \
    $NIM_IMAGE

在您的 Guardrails 应用程序中使用正在运行的 NIM#

任何本地运行的 NIM 都在 v1/completionsv1/chat/completions 端点上公开标准的 OpenAI 接口。NeMo Guardrails 提供了开箱即用的支持引擎,这些引擎支持标准的 LLM 接口。其中一个引擎是 LangChain 的 vllm_openai

因此,您的 Guardrails 配置文件可能如下所示

models:
  - type: main
    engine: openai
    model: gpt-3.5-turbo-instruct

  - type: "content_safety"
    engine: nim
    parameters:
      base_url: "http://127.0.0.1:8123/v1"
      model_name: "llama-3.1-nemoguard-8b-content-safety"

rails:
  input:
    flows:
      - content safety check input $model=content_safety
  output:
    flows:
      - content safety check output $model=content_safety

需要注意的几点

  • parameters.base_url 应该包含托管 NIM 的机器的 IP 地址,端口应该与 docker run 命令中指定的隧道转发端口匹配。

  • Guardrails 配置中的 parameters.model_name 需要与运行 NIM 容器时使用的 $MODEL_NAME 匹配。

  • rails 定义应将 llama-3.1-nemoguard-8b-content-safety 列为模型。

奖励:缓存优化的 TRTLLM 推理引擎#

如果您不想在每次运行 NIM 容器时都从头开始构建 TRTLLM 引擎,您可以在第一次运行时缓存它,只需添加一个标志来挂载 docker 内部的本地目录以存储模型缓存。

要实现这一点,您只需在使用 -v $LOCAL_NIM_CACHE:/opt/nim/.cache 运行时,将包含缓存的 TRTLLM 资产的文件夹挂载到 docker 容器上。有关完整命令,请参见以下说明。重要提示:确保 docker 具有写入缓存文件夹的权限 (sudo chmod 777 $LOCAL_NIM_CACHE)。

### To bind a $LOCAL_NIM_CACHE folder to "/opt/nim/.cache"
export LOCAL_NIM_CACHE=<PATH TO DIRECTORY WHERE YOU WANT TO SAVE TRTLLM ENGINE ASSETS>
mkdir -p $LOCAL_NIM_CACHE
sudo chmod 666 $LOCAL_NIM_CACHE

现在在运行 docker 容器时挂载此目录,以将缓存的资产存储在此目录中,以便后续挂载它将导致容器读取缓存的资产而不是重建它们。

docker run -it --name=$MODEL_NAME \
    --gpus=all --runtime=nvidia \
    -e NGC_API_KEY="$NGC_API_KEY" \
    -e NIM_SERVED_MODEL_NAME=$MODEL_NAME \
    -e NIM_CUSTOM_MODEL_NAME=$MODEL_NAME \
    -v $LOCAL_NIM_CACHE:"/opt/nim/.cache/" \
    -u $(id -u) \
    -p 8123:8000 \
    $NIM_IMAGE