Llama 3.1 NemoGuard 8B 内容安全部署#

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

本指南介绍如何部署 NemoGuard NIMs,以及如何在 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 App 中使用正在运行的 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: "https://: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 运行命令中指定的隧道转发端口匹配。

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

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

额外提示:缓存优化的 TRTLLM 推理引擎#

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

要实现这一点,只需在运行 docker 容器时使用 -v $LOCAL_NIM_CACHE:/opt/nim/.cache 将包含缓存的 TRTLLM 资产的文件夹挂载到容器中。完整命令请参见下面的说明。重要提示:确保 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