Llama 3.1 NemoGuard 8B 主题控制部署#

TopicControl 模型将通过 HuggingFace 作为 LoRA 适配器模块提供下载,并作为 NVIDIA NIM 提供,以便使用 NVIDIA TensorRT-LLM 实现低延迟优化推理。

本指南介绍了如何将 TopicControl 模型部署为 NIM,以及如何在 NeMo Guardrails 配置中使用已部署的 NIM。

NIM 部署#

访问#

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

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

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

export NIM_IMAGE=<Path to latest NIM docker container>
export MODEL_NAME="llama-3.1-nemoguard-8b-topic-control"
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 接口。对于本地部署的 NIM,您需要使用 nim 引擎。

因此,您的 Guardrails 配置文件可能看起来像这样

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

  - type: "topic_control"
    engine: nim
    parameters:
      base_url: "https://:8123/v1"
      model_name: "llama-3.1-nemoguard-8b-topic-control"

rails:
  input:
    flows:
      - topic safety check input $model=topic_control

需要注意的几点

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

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

  • rails 定义应将 topic_control 列为模型。

附加功能:缓存优化的 TRTLLM 推理引擎#

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

为此,您只需在运行 docker 容器时使用 -v $LOCAL_NIM_CACHE:/opt/nim/.cache 将包含缓存的 TRTLLM 资产的文件夹挂载到 docker 容器上。有关完整命令,请参阅下面的说明。重要提示:确保 docker 对缓存文件夹具有写入权限 (sudo chmod 666 $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

TopicControl 模型更多详情#

有关 TopicControl 模型的更多详情,请查看其他资源