入门指南#

前提条件#

  • 请参考 支持矩阵 以确保您拥有受支持的硬件和软件堆栈。

  • 一个 NGC 个人 API 密钥。NIM 微服务使用 API 密钥从 NVIDIA NGC 下载模型。有关更多信息,请参考《NVIDIA NGC 用户指南》中的 生成个人 API 密钥

    当您创建 NGC API 个人密钥时,请从“包含的服务”菜单中至少选择“NGC 目录”。您可以指定更多服务以将该密钥用于其他目的。

  • 模型凭据 获取从 Hive 下载模型的凭据。

启动 NIM 容器#

  1. 将您的个人 API 密钥和模型凭据导出为环境变量

    export NGC_API_KEY="..."
    
    export NIM_REPOSITORY_OVERRIDE="s3://..."
    export AWS_REGION="..."
    export AWS_ACCESS_KEY_ID="..."
    export AWS_SECRET_ACCESS_KEY="..."
    

    更安全的替代方案是使用密码管理器,例如 https://www.passwordstore.org

  2. 登录到 NVIDIA NGC 以便您可以拉取 NIM 容器

    $ echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin
    

    使用 $oauthtoken 作为用户名,并使用 $NGC_API_KEY 作为密码。$oauthtoken 用户名表示您使用 API 密钥而不是用户名和密码进行身份验证。

  3. 使用其中一个多模态安全模型启动 NIM 容器

    docker run -it --rm --name=nim-server \
       --runtime=nvidia \
       --gpus='"device=0"' \
       -e NIM_REPOSITORY_OVERRIDE \
       -e AWS_REGION \
       -e AWS_ACCESS_KEY_ID \
       -e AWS_SECRET_ACCESS_KEY \
       -e NIM_HTTP_API_PORT=8003 \
       -p 8003:8003 \
       -p 8002:8002 \
       nvcr.io/nim/hive/ai-generated-image-detection:1.0.0
    
    docker run -it --rm --name=nim-server \
       --runtime=nvidia \
       --gpus='"device=0"' \
       -e NIM_REPOSITORY_OVERRIDE \
       -e AWS_REGION \
       -e AWS_ACCESS_KEY_ID \
       -e AWS_SECRET_ACCESS_KEY \
       -e NIM_HTTP_API_PORT=8003 \
       -p 8003:8003 \
       -p 8002:8002 \
       nvcr.io/nim/hive/deepfake-image-detection:1.0.0
    
  4. 可选:确认服务已准备好响应推理请求

    $ curl -X GET http://127.0.0.1:8003/v1/health/ready
    

    示例输出

    {"status":"ready"}
    
  5. 发送推理请求

    invoke_url="http://127.0.0.1:8003/v1/infer"
    input_image_path="input.jpg"
    
    # download an example image
    curl https://assets.ngc.nvidia.com/products/api-catalog/sdxl/sdxl1.jpg > $input_image_path
    
    image_b64=$(base64 $input_image_path)
    length=${#image_b64}
    
    echo '{
        "input": ["data:image/png;base64,'${image_b64}'"]
    }' > payload.json
    
    curl $invoke_url \
    -H "Content-Type: application/json" \
    -d @payload.json
    

    预期输出

    is_ai_generated 表示介于 0 和 1.0 之间的概率值,指示输入图像是由生成式 AI 模型生成的可能性。
    possible_sources 提供关于图像来源的更多详细信息,并支持当前使用的最流行的 AI 艺术生成器。如果模型无法识别来源,它将返回 none 作为可能的来源。所有可能的来源分数都已归一化,总和为 1.0,每个分数的范围从 0 到 1.0。
    {
      "data": [
        {
          "index": 0,
          "is_ai_generated": 0.9994508624076843,
          "possible_sources": {
            "sora": 6.149838416291686e-9,
            "pika": 0.00003106551230303012,
            "haiper": 4.638551895423627e-15,
            "kling": 3.5930388438826233e-12,
            "luma": 0.0000019694166439876426,
            "hedra": 2.335490201232915e-8,
            "runway": 7.846174820969054e-10,
            "flux": 0.032329242676496506,
            "sdxlinpaint": 0.000004169243311480386,
            "stablediffusioninpaint": 8.627880077050065e-10,
            "otherimagegenerators": 0.0012155241565778852,
            "bingimagecreator": 0.000007865392944950145,
            "adobefirefly": 0.0060778092592954636,
            "lcm": 7.558705874544103e-7,
            "dalle": 0.05188118666410446,
            "pixart": 0.0000012418740880093537,
            "glide": 2.7829472060147964e-9,
            "stablediffusion": 0.003196755424141884,
            "imagen": 0.0016779577126726508,
            "amused": 1.1864609295031414e-10,
            "stablecascade": 0.0000036945552892575506,
            "midjourney": 0.013604957610368729,
            "deepfloyd": 1.6731604546293966e-8,
            "gan": 1.9364195225080039e-7,
            "stablediffusionxl": 0.8875080347061157,
            "vqdiffusion": 2.0054453653273185e-9,
            "kandinsky": 0.000013597166798717808,
            "wuerstchen": 0.0000017195044392792624,
            "titan": 0.0000012228841796968482,
            "ideogram": 0.001472753589041531,
            "none": 0.0009681681985966861
          },
          "status": "SUCCESS"
        }
      ]
    }
    

    所有 API 参数的描述都可以在 API 参考 中找到。

    invoke_url="http://127.0.0.1:8003/v1/infer"
    input_image_path="input.jpg"
    
    # download an example image
    curl https://assets.ngc.nvidia.com/products/api-catalog/deepfake-image-detection/input/deepfake.jpg > $input_image_path
    
    image_b64=$(base64 $input_image_path)
    length=${#image_b64}
    
    echo '{
        "input": ["data:image/png;base64,'${image_b64}'"],
         "return_image": false
    }' > payload.json
    
    curl $invoke_url \
    -H "Content-Type: application/json" \
    -d @payload.json
    

    预期输出

    输入图像中检测到的每个人脸都由一个边界框表示,其中包含
    bbox_confidence - 介于 0 和 1.0 之间的置信度值,指示模型在检测人脸时的置信度。
    vertices - 坐标数组,表示检测到的边界框的几何描述,包含左上角和右下角坐标。
    is_deepfake - 介于 0 和 1.0 之间的概率值,指示检测到的人脸是 deepfake 的可能性。
    image - base64 编码的字符串,表示输入图像,其中叠加了指示检测到的人脸的边界框。仅当有效负载中的 return_image 参数设置为 true 时,此字段才包含在响应中。
    {
      "data": [
        {
          "index": 0,
          "bounding_boxes": [
            {
              "vertices": [
                {
                  "x": 167.9155731201172,
                  "y": 105.52117919921875
                },
                {
                  "x": 327.764404296875,
                  "y": 327.6148376464844
                }
              ],
              "bbox_confidence": 0.9352303147315979,
              "is_deepfake": 0.9982458353042603
            }
          ],
          "status": "SUCCESS"
        }
      ]
    }
    

    所有 API 参数的描述都可以在 API 参考 中找到。

容器的运行时参数#

标志

描述

-it

--interactive + --tty (请参阅 Docker 文档)

--rm

在容器停止后删除容器 (请参阅 Docker 文档)。

--name=<容器名称

为 NIM 容器命名。使用任何首选值。

--runtime=nvidia

确保 NVIDIA 驱动程序在容器中可访问。

--gpus '"device=0"'

在容器内暴露 NVIDIA GPU 0。如果您在具有多个 GPU 的主机上运行,则需要指定要使用的 GPU。有关挂载特定 GPU 的更多信息,请参阅 GPU 枚举

-e NIM_MODEL_PROFILE=<profile>

指定要加载的配置文件。有关可用配置文件的信息,请参考 模型

NIM_HTTP_API_PORT=8003

指定 NIM 在容器内将使用的端口(默认为 8003)。

-p 8003:8003

转发 NIM HTTP 服务器在容器内发布的端口,以便从主机系统访问。: 的左侧是主机系统 ip:port (此处为 8003),而右侧是 NIM HTTP 服务器发布的容器端口。

缓存模型#

首次启动容器时,微服务会从 NGC 下载模型。您可以通过在本地缓存模型来避免在以后的运行中执行此下载步骤。

export LOCAL_NIM_CACHE=~/.cache/nim_sdxl
mkdir -p "$LOCAL_NIM_CACHE"
chmod 777 $LOCAL_NIM_CACHE

docker run -it --rm --name=nim-server \
   --runtime=nvidia \
   --gpus='"device=0"' \
   -e NIM_REPOSITORY_OVERRIDE \
   -e AWS_REGION \
   -e AWS_ACCESS_KEY_ID \
   -e AWS_SECRET_ACCESS_KEY \
   -e NIM_HTTP_API_PORT=8003 \
   -p 8003:8003 \
   -p 8002:8002 \
   -v "$LOCAL_NIM_CACHE:/opt/nim/.cache/" \
   nvcr.io/nim/hive/ai-generated-image-detection:1.0.0
export LOCAL_NIM_CACHE=~/.cache/nim_sdxl
mkdir -p "$LOCAL_NIM_CACHE"
chmod 777 $LOCAL_NIM_CACHE

docker run -it --rm --name=nim-server \
   --runtime=nvidia \
   --gpus='"device=0"' \
   -e NIM_REPOSITORY_OVERRIDE \
   -e AWS_REGION \
   -e AWS_ACCESS_KEY_ID \
   -e AWS_SECRET_ACCESS_KEY \
   -e NIM_HTTP_API_PORT=8003 \
   -p 8003:8003 \
   -p 8002:8002 \
   -v "$LOCAL_NIM_CACHE:/opt/nim/.cache/" \
   nvcr.io/nim/hive/deepfake-image-detection:1.0.0

当您使用模型缓存时,如果您更改了 NIM_MODEL_PROFILE 中的模型配置文件,请在启动容器之前删除主机上缓存目录的内容。删除目录内容可确保微服务仅加载指定的模型配置文件。

停止容器#

以下命令通过停止并删除正在运行的 docker 容器来停止容器。

docker stop nim-server
docker rm nim-server

后续步骤#

  • 有关环境变量和命令行参数的 配置