创建应用程序

使用文本表示和 CLI 工具

设置 NGC API 密钥

设置 NGC API 密钥以同步来自 NGC 的微服务:请确保您已首先按照先决条件生成您的 NGC 个人密钥

$ ucf_app_builder_cli registry repo set-api-key -a <API-KEY>
  Checking which NGC UCS teams you have access to
  Adding NGC Catalog team ace
  Repository 'catalog-ace' added
  Adding NGC Catalog team ucs-ms

以 “catalog-” 开头的存储库名称表示它们存在于 NGC 统一目录中,而不是 NGC 私有注册表中。NGC 统一目录包含完全公开的工件,或需要某些产品启用(订阅)才能访问某些工件(如 ace-ea 或 nvaie)的工件。

该命令将打印使用 API 密钥可以访问的存储库。

列出可用的微服务

要获取可用微服务的列表

$ ucf_app_builder_cli service list
List of available services in local repository:
==============================================
ucf.svc.myservice

List of available services in UCF repository:
================================================
ucf.svc.botmaker.dialog-manager
ucf.svc.botmaker.speech-controller
ucf.svc.botmaker.speech-web-app
ucf.svc.botmaker.text-web-app
ucf.svc.riva.speech-skills

该命令列出本地构建的以及 NGC 存储库中可用的微服务。

查看微服务的信息

要查看有关微服务的信息,请运行

$ ucf_app_builder_cli service info -n ucf.svc.botmaker.speech-web-app
name: ucf.svc.botmaker.speech-web-app
specVersion: 2.5.0
chart: https://helm.ngc.nvidia.com/eevaigoeixww/ucf-11-ea-release/charts/botmaker-speech-web-app-2.0.0.tgz
description: BotMaker Speech Web App
type: msapplication
tags: []
keywords: []
publish: false
ciTrigger: false
egress:
-   name: speech-controller
    description: Speech Controller gRCPC endpoint
    protocol: TCP
    scheme: grpc
    mandatory: true
    data-flow: in-out
ingress:
-   name: webapp-ui
    description: Web App UI Endpoint
    scheme: http
    data-flow: in-out
    service: botmaker-speech-web-app-deployment-service
    port: 5001
    protocol: TCP
metadata: {}
version: 2.0.0
displayName: BotMaker Speech Web App
category:
    functional: Speech AI
    industry: General
secrets: []
buildToolVersion: 1.1.1

Parameters:
-------------
               debug: (boolean), Start bot in debug mode [Mandatory:False]
            feedback: (boolean), Enables feedback buttons in web mode [Mandatory:False]
     gunicornWorkers: (string ), Number of Gunicorn Workers for FM Server [Mandatory:False]
     gunicornTimeout: (string ), Gunicorn Timeout for FM Server [Mandatory:False]

Compliance Info:
---------------------
Report Generated on 2022-11-22 18:24:51 (UTC) using MSBuilder v1.1.1
Development compliance (Mandatory) 100.0%
Development compliance (Optional) 66.66%

根据此信息,用户可以选择要使用的微服务以及如何在应用程序中使用它们 - 设置参数、连接端点等。

在上述命令中添加 --show-docs 将打印微服务的详细文档。

 $ ucf_app_builder_cli service info -n ucf.svc.botmaker.speech-web-app --show-docs
...
Documentation:
--------------
╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                                              ucf.svc.botmaker.speech-web-app                                              ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝


                                                         Description

BotMaker Speech Web App

Sample web application that communicates with Speech Controller and can be used to interact with speech based bot using web
browser.


                                                            Usage

                                                           Params:

┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ botmaker-webapp:                                                                                                          │
│   debug: false                                                                                                            │
│   # Show debug info for bot in Web App                                                                                    │
│   feedback: true                                                                                                          │
│   # Enables feedback buttons in web mode                                                                                  │
│   gunicornWorkers: "1"                                                                                                    │
│   # Number of Gunicorn Workers for Web App                                                                                │
│   gunicornTimeout: "120"                                                                                                  │
│   # Gunicorn Timeout for Web App                                                                                          │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

                                                        Connections:

┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ connections:                                                                                                              │
│   botmaker-webapp/speech-controller: speech-controller/grpc-api                                                           │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘


                                                         Performance

NA


                                                     Supported Platforms

x86 dGPU


                                                   Deployment requirements

 1 Make sure k8s foundational services are running


                                                           License

NVIDIA Proprietary License


                                                 Known Issues / Limitations

NA


                                                         References

NA

创建应用程序样板

现在已经选择了所需的微服务,我们可以开始创建应用程序了。

我们将首先创建一个样板,然后开始更新它以匹配参考应用程序 更新参考应用程序

运行以下命令以生成应用程序样板

$ ucf_app_builder_cli app create my-application
UCF Application graph boilerplate generated at my-application.yaml (Doc: README.md)

这将生成一个新的文件 my-application.yaml 以及应用程序文档的 README.md

该文件是一个包含以下内容的模板

specVersion: 2.5.0

version: 0.0.1

doc: README.md

name: my-application

description: Description for my-application

dependencies:
- ucf.svc.microserviceA:0.0.1
- ucf.svc.microserviceB:0.0.1

components:
- name: microserviceA
  type: ucf.service.microserviceA
  parameters:
    paramA1: 100
    paramA2:
    - name: test
  secrets:
    some-secret-name: some-secret
- name: microserviceB
  type: ucf.service.microserviceB
  parameters:
    paramB1: false
    paramB2:
    - name: test

connections:
  microserviceA/http: microserviceB/http

vaultAgent:
  auth:
    path: auth/jwt/authMountPath
    type: jwt
    jwt:
      audience: https://vault-service:443
      role: auth-role
  role: auth-role
  namespace: vault-namespace
  service: https://vault-service/

# certificates:
#   devCerts:
#     file: certificates.yaml
#     addToHelmChart: false

secrets:
  some-secret:
    vaultAgent:
      path: secret/mount/path
      template:
        type: kv
        key: KEY_IN_SECRET

  # some-secret:
  #   k8sSecret:
  #     secretName: <k8sSecretName>
  #     key: <keyInK8sSecret>

  # some-secret:
  #   secretsStoreCsi:
  #     providerClassName: <providerClassName>
  #     objectName: <objectName>

  # some-secret:
  #   certificate:
  #     certName: <certificateName>
  #     type: <certificate/privateKey/issuingCA>

注意

应用程序名称不应包含空格

更新应用程序信息

更新应用程序的基本信息,如名称、简短描述等。有关字段的更多信息,请参阅 基本信息

更新后,该部分将如下所示

specVersion: 2.5.0

version: 1.13.1

doc: README.md

name: ucf-bot-app

description: UCF application for a bot

更新依赖项

将要在应用程序中使用的微服务添加到 dependencies 部分。此信息是构建应用程序时获取所需版本的微服务所必需的。

必须在此部分添加微服务列表及其所需的版本。格式是字符串列表 <microservice-type>:<microservice-version>。微服务版本可以从上面描述的 service info 命令中获得。

要查看微服务的所有可用版本,请运行

$ ucf_app_builder_cli service versions -n ucf.svc.botmaker.speech-web-app
List of versions for service in UCF repository:
===============================================
2.0.0

<microservice-version> 可以是固定版本,也可以是 NPM 版本范围规范的格式 https://github.com/npm/node-semver#ranges

更新后,该部分将如下所示

dependencies:
- ucf.svc.riva.speech-skills:2.0.0
- ucf.svc.botmaker.speech-web-app:>=2.0.0 && < 3.0.0
- ucf.svc.botmaker.speech-controller:2.0.x
- ucf.svc.botmaker.dialog-manager:2.0.0

在上面的示例中,当构建应用程序时,工具将获取与该微服务的版本规范匹配的最高版本。

  • 对于 ucf.svc.riva.speech-skillsucf.svc.botmaker.dialog-manager,将选择版本 2.0.0

  • 对于 ucf.svc.botmaker.speech-web-app,如果可用版本为 1.0.02.0.03.0.0,则将选择版本 3.0.0

  • 对于 ucf.svc.botmaker.speech-controller,如果可用版本为 1.0.02.0.02.1.0,则将选择版本 2.0.0

这允许在构建应用程序时选择最新兼容版本的微服务,而无需更新应用程序图文件。

UCS 微服务遵循语义版本控制 - <MAJOR>.<MINOR>.<PATCH>。预发布版本也受支持,如 semver.org (例如 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7 等) 所述。以下是在使用语义版本控制时需要记住的一些重要概念

  • 版本 <MAJOR> 部分的更改表示重大更改,可能破坏向后兼容性。

  • 版本 <MINOR> 部分的更改表示对微服务进行的增强,并保留了向后兼容性。

  • 版本 <PATCH> 部分的更改表示对微服务进行的次要更改,例如错误修复,并保留了向后兼容性。

添加和配置微服务

接下来,我们将微服务添加到应用程序并配置它们,即设置它们的参数和密钥。这是通过将微服务添加到 components 部分来完成的。

例如,可以使用以下方法将 ucf.svc.botmaker.speech-web-app 添加到应用程序中

- name: botmaker-webapp
  type: ucf.svc.botmaker.speech-web-app
  parameters:
    debug: false
    gunicornTimeout: "60"
    imagePullSecrets:
    - name: ngc-docker-reg-secret

必须根据微服务的参数模式设置参数,参数模式可以从 service info 命令输出中获得。例如,对于 ucf.svc.botmaker.speech-web-app

$ ucf_app_builder_cli service info -n ucf.svc.botmaker.speech-web-app
...
Parameters:
-------------
              speech: (boolean), Speech Web App or Text Web App [Mandatory:False]
               debug: (boolean), Start bot in debug mode [Mandatory:False]
            feedback: (boolean), Disables feedback buttons in web mode [Mandatory:False]
     gunicornWorkers: (string ), Number of Gunicorn Workers for FM Server [Mandatory:False]
     gunicornTimeout: (string ), Gunicorn Timeout for FM Server [Mandatory:False]
...

这里,debug 是一个 boolean 参数,gunicornTimeout 是一个 string 参数。必须指定标记为强制性的参数。一些微服务具有嵌套参数,如下例所示。

UCS 应用程序构建工具将验证这些参数。在应用程序构建期间,如果未设置强制参数或它们与参数模式不匹配,则构建工具将抛出错误。例如,如果 debug 设置为 "123"

Validating application ...
debug:'123' is not of type 'boolean'
Warning!!! parameter validation failed for microservice instance botmaker-webapp
Application validation failed

对于使用 UCS MS Builder Tool 构建 Helm Chart 的微服务,会隐式添加一些参数。这些参数不会显示在 service info 输出中。例如,imagePullSecrets 是一个隐式参数。隐式添加的参数在下一节中描述。

隐式添加的参数

如上一节所述,使用 UCS MS Builder Tool 生成 Helm Chart 的微服务会隐式添加一些参数。

以下是如何设置这些参数及其详细信息的示例

- name: <svc-name>
  type: <svc-ucf-type>
  parameters:
    imagePullSecrets:        # List of K8S secrets to be used for pulling images required by the MS (Since 1.0 EA)
    - name: ngc-docker-reg-secret

    ucfVisibleGpus: [1, 2]   # List of GPUs that should be made visible to the containers in the MS. Internally sets NVIDIA_VISIBLE_GPUS env var (Since 1.0 EA)

    resources:               # Resource requests and limits to set on the containers in the MS. (Since 1.0 EA)
      requests:              # Refer to - https://kubernetes.ac.cn/docs/reference/generated/kubernetes-api/v1.22/#resourcerequirements-v1-core
        cpu: 1
      limits:
        nvidia.com/gpu: 1

    podAnnotations:          # Annotations to set on the pods belonging to the MS (Since 1.1 EA)
        annotation-name: annotation-value

    podLabels:               # Labels to set on the pods belonging to the MS (Since 1.1 EA)
        label-name: label-value

    extraPodVolumes:         # List of extra volumes to add to all the pods belonging to the MS (Since 1.1 EA)
    - name: extra-vol1       # Refer to https://kubernetes.ac.cn/docs/reference/generated/kubernetes-api/v1.22/#volume-v1-core
      emptyDir: {}

    extraPodVolumeMounts:    # List of extra volume mounts to add to all the containers of all the pods belonging to the MS (Since 1.1 EA)
    - name: extra-vol1:
      mountPath: /tmp/extra-vol-dir

    svcAnnotations:          # Annotations to set on the services belonging to the MS (Since 1.1 EA)
        annotation-name: annotation-value

    svcLabels:               # Labels to set on the services belonging to the MS (Since 1.1 EA)
        label-name: label-value

    global:
        ucfGlobalEnv:        # List of environment variables to set in all containers of all the pods belonging to the MS (Since 1.1 EA)
        - name: SOME_ENV_VAR_NAME
          value: someEnvVarValue

配置密钥

必须为每个微服务指定所有强制性密钥。可以使用 service info 命令查看密钥要求。

有关密钥在 UCS 工具中如何工作以及如何配置它们的更多信息,请参阅 密钥管理

连接微服务端点

接下来,我们将微服务连接在一起。具有强制性 Egress 端点的微服务必须连接到另一个有意义的微服务,该微服务具有相应的和兼容的 Ingress 端点,以提供所需的功能。

微服务的端点可以从 service info 命令输出中获得。

连接被指定为应用程序 yaml 中具有顶级键 connections 的对象。连接格式如下

connections:
  <egress-endpoint-component-name1>/<egress-endpoint-name1>: <ingress-endpoint-component-name1>/<ingress-endpoint-name1>
  <egress-endpoint-component-name2>/<egress-endpoint-name2>: <ingress-endpoint-component-name2>/<ingress-endpoint-name2>

如果出口端点支持多个连接 (multi: true),则可以使用数组样式格式将多个入口端点连接到它

connections:
  <egress-endpoint-component-name>/<egress-endpoint-name>: [
      <ingress-endpoint-component-name1>/<ingress-endpoint-name1>,
      <ingress-endpoint-component-name2>/<ingress-endpoint-name2>
  ]

UCS 应用程序构建工具将验证端点和连接。如果未连接强制性 Egress 端点或发生无效连接,则工具将抛出错误。

添加详细文档

将构建应用程序所需的任何详细文档以及然后将构建的 Helm Chart 部署到应用程序图文件的 README 文件中。

部署的值规范文件

应用程序开发人员可以选择值规范文件作为构建应用程序时的可选输入,该文件指定如何覆盖部署的值。该文件采用多文档 YAML 格式,每个文档定义一个值规范,该规范应用于应用程序中的某些微服务实例。

以下是值规范文件的简单示例

spec:
  namespace: my-application
---
spec:
  serviceAccount:
    name: my-sa
    create: True
usedBy: ["dialog-manager", "speech-controller"]

“usedBy” 对于值规范是可选的,当 “usedBy” 不存在时,应用程序中的所有服务实例都适用。

下表列出了值规范中支持的所有值。

字段

描述

命名空间

服务预期部署到的命名空间

服务帐户

微服务的服务帐户信息

nodeSelector

节点标签,用于选择可以在其上调度 Pod 的节点,更多信息请参见 <https://kubernetes.ac.cn/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling>

tolerations

用于允许 Pod 在具有匹配污点的节点上调度的规则,更多信息请参见 <https://kubernetes.ac.cn/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling>

affinity

用于约束 Pod 可以调度到哪些节点的规则,更多信息请参见 <https://kubernetes.ac.cn/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling>

storageClassName

用于持久卷声明的存储类名称

使用 UCS Studio

有关使用 UCS Studio 创建应用程序的示例,请参阅 创建参考应用程序

构建应用程序

可以使用 UCS Application Builder CLI 工具或 UCS Studio GUI 构建 UCS 应用程序。

使用 CLI 工具

可以使用以下命令构建现有的应用程序图文件

$ ucf_app_builder_cli app build app.yaml
2022-12-05 14:44:52,464 - AppBuilder - INFO - Syncing any missing service versions to cache...
2022-12-05 14:44:52,507 - AppBuilder - INFO - Validating application ...
2022-12-05 14:44:52,517 - AppBuilder - INFO - Building application ucf-bot-app-1.13.1 ...
2022-12-05 14:45:00,122 - AppBuilder - INFO - Application Information written to ucf-bot-app-1.13.1/app_info.yaml
2022-12-05 14:45:00,122 - AppBuilder - INFO - Application compliance report generated at ucf-bot-app-1.13.1/compliance_report.json
2022-12-05 14:45:00,123 - AppBuilder - INFO - Application Helm Chart generated in ucf-bot-app-1.13.1
2022-12-05 14:45:00,123 - AppBuilder - INFO - App built

应用程序构建执行多项验证,包括任何语法错误、不正确的参数、无效的连接,并在出现任何问题时失败

$ ucf_app_builder_cli app build app.yaml
2022-12-05 14:46:16,846 - AppBuilder - INFO - Syncing any missing service versions to cache...
2022-12-05 14:46:16,888 - AppBuilder - INFO - Validating application ...
2022-12-05 14:46:16,891 - AppBuilder - ERROR - Mandatory endpoint 'speech-controller' not set for microservice instance speech-web-app
2022-12-05 14:46:16,899 - AppBuilder - ERROR - Application validation failed

参数文件

与其在应用程序 yaml 中指定参数,不如通过参数(params)文件提供给定应用程序组件的某些或所有参数。例如,给定名为 创建应用程序样板 部分中的应用程序示例,我们可以将参数放在 params.yaml 文件中,而不是在应用程序 YAML 中提供参数,如下所示

microserviceA:
  paramA1: 100
  paramA2:
  - name: test
microserviceB:
  paramB1: false
  paramB2:
  - name: test

可以使用以下命令应用参数文件

$ ucf_app_builder_cli app build app.yaml params1.yaml params2.yaml

您还可以混合和匹配,以便应用程序 YAML 包含一些定义的参数,而其他参数在参数文件中提供。如果参数在两个位置都定义了,则参数文件中的参数将优先。此外,可以指定多个参数文件以提供级联方式来覆盖参数。最右侧位置定义的参数将优先。例如,如果您使用以下命令行构建应用程序

ucf_app_builder_cli app build app.yaml params1.yaml params2.yaml

并且某些应用程序组件 C 的某些参数 P 在 app.yaml 以及 params1.yaml 和 params2.yaml 中指定,则将使用 params2.yaml 中的 P 值。

从 2.8.1 版本开始,参数文件也支持应用程序组件参数块中内置的 “files” 参数。

值规范文件

可以使用 ‘-v’ 指定值规范文件

$ ucf_app_builder_cli app build app.yaml params1.yaml params2.yaml -v value_spec.yaml

使用 UCS Studio

有关使用 UCS Studio 构建应用程序的示例,请参阅 创建参考应用程序

构建输出

构建应用程序会生成以下内容

  • 命令输出中提到的位置的可部署 Helm Chart,例如 ucf-bot-app-1.13.1

  • 应用程序信息文件,其中包含一些对部署应用程序有用的信息,例如 ucf-bot-app-1.13.1/app_info.yaml。目前包括

    • 应用程序中使用的密钥列表及其详细信息。这可以用于在部署应用程序之前设置所有密钥。

    • 应用程序中使用的微服务公开的指标列表及其详细信息。这可以用于创建任何 Prometheus 规则或警报或 HPA 配置。

    • 此文件的示例

      metrics:
      - name: nv_inference_count
        description: No. of inference requests executed by the server
        labels: [ model, version ]
        microservice: ucf.svc.riva.speech-skills v2.0.0
      
      secrets:
      - name: my-ngc-api-key
        description: Secret for NGC API key
        type: Kubernetes Secret
        secretName: ngc-api-key-secret
        secretKey: NGC_API_KEY
        usedBy:
        - ucf.svc.riva.speech-skills v2.0.0
        - ucf.svc.botmaker.speech-controller v2.0.0
        - ucf.svc.botmaker.dialog-manager v2.0.0
      
  • 值覆盖 yaml 文件,其中包含适用于应用程序 Helm Chart 的值子集,可用于在安装期间覆盖值

  • 添加到应用程序的所有微服务的组合合规性报告,例如 ucf-bot-app-1.13.1/compliance_report.json。此文件的示例

    {
        "name": "ucf-bot-app",
        "version": "1.13.1",
        "time-utc": "2023-03-13 13:21:33",
        "appbuilder-version": "2.0.0",
        "compliance-development-mandatory-overall": 100.0,
        "compliance-development-optional-overall": 49.99,
        "compliance-ms": [
            {
                "name": "ucf.svc.riva.speech-skills",
                "version": "2.0.0",
                "compliance-development-mandatory": 100.0,
                "compliance-development-optional": 66.66
            },
            {
                "name": "ucf.svc.botmaker.speech-web-app",
                "version": "2.0.0",
                "compliance-development-mandatory": 100.0,
                "compliance-development-optional": 66.66
            },
            {
                "name": "ucf.svc.botmaker.speech-controller",
                "version": "2.0.0",
                "compliance-development-mandatory": 100.0,
                "compliance-development-optional": 33.33
            },
            {
                "name": "ucf.svc.botmaker.dialog-manager",
                "version": "2.0.0",
                "compliance-development-mandatory": 100.0,
                "compliance-development-optional": 33.33
            }
        ]
    }
    

使用 Helm 部署应用程序

构建 UCS 应用程序会生成可部署的 Helm Chart。部署它的一个简单方法是使用 helm install 命令

$ helm install <release-name> <app-output-helm-chart>

一些微服务使用 NodePort 服务类型将其功能公开给外部用户。在某些云服务提供商提供的 Kubernetes 中,公开 NodePort 服务可能不可行或可能很棘手。在这种情况下,可以使用 global.useLoadBalancerInsteadOfNodePort 参数将 NodePort 服务类型覆盖为 LoadBalancer。这仅适用于使用 UCS 1.5 或更高版本构建的微服务。以下是使用该选项的示例

$ helm install <release-name> <app-output-helm-chart> –set=global.useLoadBalancerInsteadOfNodePort=true

用户也可以有自己的部署应用程序图表的方法。

复制到输出 Helm Chart 的应用程序 README 可能包含部署应用程序所需的其他先决条件/步骤。

某些应用程序依赖于核心服务,如 Vault Agent InjectorSecrets Store CSI Driver。用户必须在部署应用程序之前部署这些服务。在应用程序构建期间生成的 应用程序信息 可能会有所帮助。

将应用程序部署到 NVCF

UCS 工具允许您构建应用程序并直接在 NVCF 上部署为云函数。以下示例演示了将现有的 UCS 微服务 ucf.svc.nvcf.image-segmentation:1.3.0 部署到 NVCF。

创建应用程序清单

将以下内容保存到名为 app.yaml 的文件中

specVersion: '2.5.0'
version: 0.0.2
doc: README.md
name: image-segmentation-app
description: Performs segmentation of a given image and is based on Deepstream 6.2 triton docker
dependencies:
- ucf.svc.nvcf.image-segmentation:1.3.0
components:
- name: image-segmentation
  type: ucf.svc.nvcf.image-segmentation
  parameters:
    imagePullSecrets:
    - name: ngc-docker-reg-secret

为 UCS 工具创建 NVCF 配置文件

将以下内容保存到名为 nvcf.yaml 的文件中,并将 “DockerRegSecrets” 中的 “Password” 字段设置为您的 NGC API 密钥

FunctionName: "image-segmentation-service"  # NVCF function name
InferenceUrl: "/grpc"  # NVCF function interface URL. Use '/grpc' for gRPC functions
InferencePort: "50000"  # NVCF function port
HelmChartServiceName: "image-seg-nvcf-segmentation-deployment-segmentation-service"  # K8s service name exposed as function
GpuType: "A10G"  # Type of GPU
Backend: "GFN"  # Backend type
MaxInstance: "1"  # Maximum number of instances
MinInstance: "1"  # Minimum number of instances
InstanceType: "ga10g_1.br20_2xlarge"  # Type of instance
DockerRegSecrets:
 - Name: "ngc-docker-reg-secret"
   Username: "NGC_CLI_API_KEY"
   Password: "<KEY>"
#AdditionalSecrets:
# - Name: ""
#   Key: ""
#   Value: ""
#StorageProvisioner:
# - Name: ""
#   Namespace: ""

将 UCS 应用程序部署到 NVCF

首先,构建应用程序

ucf_app_builder_cli app build app.yaml

然后运行 nvcf-deploy 子命令。这将把您的应用程序 Helm Chart 上传到 nv-ucf/staging,除非您正在构建的版本已存在。然后,它将创建 NVCF 函数并部署它

> ucf_app_builder_cli app nvcf-deploy app.yaml nvcf.yaml
{'version': False, 'version_all': False, 'parser_name': 'app', 'help': 'Create a microservice from the application', 'app': 'app.yaml', 'nvcf': 'nvcf.yaml', 'subparser_name': 'nvcf-deploy'}
2024-03-27 14:52:01,668 - AppBuilder - INFO - Syncing any missing service versions to cache...
2024-03-27 14:52:01,674 - AppBuilder - INFO - Deploying application image-segmentation-app-0.0.2 on NVCF
2024-03-27 14:52:01,675 - AppBuilder - INFO - nvcf metadata: {'FunctionName': 'image-segmentation-service', 'InferenceUrl': '/grpc', 'InferencePort': '50000', 'HelmChartServiceName': 'image-seg-nvcf-segmentation-deployment-segmentation-service', 'GpuType': 'A10G', 'Backend': 'GFN', 'MaxInstance': '1', 'MinInstance': '1', 'InstanceType': 'ga10g_1.br20_2xlarge', 'DockerRegSecrets': [
{'Name': 'ngc-docker-reg-secret', 'Username': 'NGC_CLI_API_KEY', 'Password': '<KEY>'}
]}
2024-03-27 14:52:04,687 - MsBuilder - INFO - App started deploying on NVCF
Deployed UCS App on NVCF

另请查看 UCS A2F 演示