资产管理#

注意

资产仅适用于“基于容器”的函数。

对于基于图像到图像或图像修复的生成或推理,必须从一个或多个现有图像开始,作为诸如 Stable Diffusion 等模型的输入。使用 NVCF 的资产端点,客户可以为每个输入图像创建一个资产 ID 和相应的预签名上传 URL。然后,客户可以使用其相应的预签名 URL 上传现有图像,并在调用函数时指定资产 ID。当使用一个或多个资产 ID 调用函数时,NVCF 会创建预签名的下载 URL,并将它们提供给 Worker。Worker 使用这些预签名的下载 URL 下载先前上传的输入图像,并将它们复制到文件系统上的固定位置。然后,客户的容器可以从该固定位置加载这些输入图像,并在推理期间使用它们。

NVCF 资产端点提供的预签名 URL 的 TTL 为 1 小时。因此,客户应在 TTL 过期前使用它来上传其输入图像。这些图像或资产在 24 小时后会被删除。每个资产上传的大小上限为 5GB。

除了图像,可以想象资产可以是特定函数调用请求期间需要使用的任何东西。例如,存档/zip 可以是一个资产。

../_images/papi-assets.png

创建资产 ID 和预签名上传 URL#

对于每个输入文件/图像,可以创建一个相应的资产 ID 和预签名上传 URL,如下所示

curl -X POST https://api.nvcf.nvidia.com/v2/nvcf/assets \
     -H 'Authorization: Bearer <JWT Token>' \
     -H 'accept: application/json' \
     -H 'Content-Type: application/json' \
     -d '{
            "contentType": "image/png",
            "description": "red-cat-photo"
         }'

这应产生如下所示的响应

{
   "assetId":"b5b841c3-11c2-4c34-b057-9475e82c5369",
   "uploadUrl":"<pre-signed-upload-url>",
   "contentType":"image/png",
   "description":"red-cat-photo"
}

将资产上传到云存储#

获得预签名上传 URL 后,即可使用它上传输入文件/图像,如下所示

curl -X PUT -T my-image-file.png <pre-signed-URL> -H "Content-Type: image/png" -H "x-amz-meta-nvcf-asset-description: red-cat-photo"

注意

确保 POST /v2/nvcf/assets 请求负载中的 contentType 与用于上传资产的 curl 命令中的 Content-Type 标头匹配。

同样,请确保 POST /v2/nvcf/assets 请求负载中的 description 与用于上传资产的 curl 命令中的 x-amz-meta-nvcf-asset-description 标头匹配。否则,您将看到状态代码为 400 的错误。

列出资产#

您可以获取 NVIDIA 云账户的资产 ID 列表。

curl -X GET https://api.nvcf.nvidia.com/v2/nvcf/assets -H "Authorization: Bearer <JWT Token>"

目前,这仅返回 1000 个资产 ID。如果您的 NVIDIA 云账户有超过 1000 个资产,您将看不到所有资产。

删除资产#

资产的默认 TTL 为 24 小时。您可以更快地使用删除资产 API 删除资产。

curl -X DELETE https://api.nvcf.nvidia.com/v2/nvcf/assets/{assetId} -H "Authorization: Bearer <JWT Token>"

在调用函数时指定资产#

您可以在调用函数时使用 NVCF-INPUT-ASSET-REFERENCES HTTP 标头指定一个或多个资产 ID,如下所示

 curl -X https://api.nvcf.nvidia.com0/v2/nvcf/pexec/functions/<function-id> \
     -H "Content-Type: application/json" \
     -H "NVCF-INPUT-ASSET-REFERENCES: uuid-asset-id1, .." \  # Optional
     -H "Authorization: Bearer $JWT" \
     -d @- <<EOF
{
    "opaque": "object"   // Your inference payload
}
EOF

将资产与自定义容器一起使用#

当客户容器在函数调用期间被调用时,它可以使用以下 HTTP 标头来获取特定调用的资产

NVCF-REQID: “<reqId from the message>”
NVCF-FUNCTION-ASSET-IDS: “<comma separated list of asset IDs>”
NVCF-ASSET-DIR: “<absolute path to the directory where all assets will be for the specific invocation request>”

资产的路径将在请求标头中:“NVCF-ASSET-DIR”。

标头“NVCF-FUNCTION-ASSET-IDS”包含以逗号分隔的资产 ID 列表,与资产文件名相同。使用这些 ID 构建资产的完整路径。

示例

NVCF-REQID: b9223090-b7da-11ed-afa1-0242ac120002
NVCF-ASSET-DIR=/var/inf/inputAssets/b9223090-b7da-11ed-afa1-0242ac120002
NVCF-FUNCTION-ASSET-IDS=38652fac-b7ee-11ed-afa1-0242ac120002,386531f0-b7ee-11ed-afa1-0242ac120003

两个资产文件将是

/var/inf/inputAssets/b9223090-b7da-11ed-afa1-0242ac120002/38652fac-b7ee-11ed-afa1-0242ac120002
/var/inf/inputAssets/b9223090-b7da-11ed-afa1-0242ac120002/386531f0-b7ee-11ed-afa1-0242ac120003

在 Triton Python 后端检索资产目录和资产 ID#

本节提供有关在使用 Triton Python 后端时如何检索资产目录和资产 ID 的指南。这在处理自定义容器和函数中的资产管理时尤其有用。

步骤

  1. 导入助手模块:

    使用可用的容器 helpers 模块。该模块提供了检索资产路径的基本方法。

    from nvcf_container import helpers
    
  2. 获取资产路径:

    使用 helpers.get_input_path()helpers.get_output_path() 方法分别获取输入和输出资产的路径。

    input_path = helpers.get_input_path()
    output_path = helpers.get_output_path()
    
  3. 访问资产 ID:

    资产 ID 可以从环境变量 NVCF_ASSET_ID 中检索。此 ID 对于引用特定资产非常重要。

    import os
    asset_id = os.environ.get('NVCF_ASSET_ID')
    
  4. 服务器配置:

    确保 Triton 服务器以 –http-header-forward-pattern NVCF-.* 选项启动。此配置对于将资产相关的 HTTP 标头转发到后端是必要的。

    tritonserver --http-header-forward-pattern NVCF-.*