启动 UCS Studio

本节提供指针和指南,帮助您开始使用 UCS Studio 构建 UCS 应用程序。首先介绍如何使用语音技能和对话管理器服务构建和部署简单的基于文本的聊天机器人应用程序。接下来,它将解释如何将同一应用程序升级为基于语音的聊天机器人。本节应提供使用 UCS Studio 的良好概述。

  1. 在终端中运行以下命令

    $ ucf_studio
    

注意

如果通过 SSH 远程运行,请确保在运行命令之前导出正确的 DISPLAY 变量。

UCS Studio 也可以使用其他方法远程运行 - 远程访问

  1. Studio 启动后,您应该看到以下主屏幕

UCS Studio Home

仓库设置

让我们从仓库设置开始。需要设置 NGC API 密钥才能访问 NGC 仓库。

  1. 获取 NGC API 密钥 - 请参阅 生成您的 NGC API 密钥

  2. 从顶部菜单栏中单击 Registry(注册表),然后单击 Repo Setup(仓库设置)

UCS Studio - Repo Setup Menu
  1. 这将打开 Repo Setup(仓库设置) 对话框弹出窗口。输入您的 NGC API 密钥,然后单击 Ok(确定)

UCS Studio - Repo Setup Dialog

操作完成需要几秒钟。如果输入的 API 密钥有效,则会填充 NGC 仓库列表,并显示成功消息弹出窗口。

同步微服务

接下来,我们将从 NGC 仓库同步微服务,以列出可用的微服务并查看其信息。

  1. 从顶部菜单栏中单击 Registry(注册表),然后单击 Fast Repo Setup(快速仓库设置)

UCS Studio - Fast Repo Sync Menu
  1. 这将打开 Repo Sync(仓库同步) 弹出对话框。从下拉列表中选择 UCS

UCS Studio - Repo Sync Dialog
  1. 单击 Sync(同步)。将弹出一个进度对话框。此过程可能需要几秒钟。同步完成后,将显示成功确认对话框,并且左侧的微服务列表将被填充。

UCS Studio - Microservice List

创建参考应用程序

本节演示如何使用 UCS Studio 和 NVIDIA 提供的微服务创建基于文本的聊天机器人。此页面上的一些说明特定于正在创建的应用程序,有关创建应用程序的更多详细信息,请参阅 创建应用程序

先决条件

有关设置开发和部署系统的要求和说明,请参阅 开发系统部署系统

获取以下服务的 API 密钥,因为此参考应用程序中使用的微服务依赖于它们

创建新图

我们现在可以开始创建应用程序图。

  1. 单击应用程序中心的 Create Graph(创建图)

UCS Studio - Create Graph
  1. 这将显示 Graph Name(图名称)的弹出对话框。输入一个名称,例如 ucf-text-bot,然后单击 Ok(确定)

UCS Studio - Create Graph Name
  1. 单击 Ok(确定) 以打开一个空白画布,可以在其上添加微服务。

搜索微服务及其详细信息

  1. 您可以使用左侧的列表浏览可用的微服务

UCS Studio - Microservice List
  1. 可以更改微服务分类以方便浏览

UCS Studio - Microservice categorization
  1. 可以使用文本过滤和搜索微服务

UCS Studio - Microservice Filtering
  1. 从列表中选择一个微服务以在右侧面板上显示其详细信息

UCS Studio - Microservice Details

添加微服务

1. 可以通过从左侧列表中选择微服务并将其拖放到画布上,将微服务添加到应用程序。

UCS Studio - Adding Microservices
  1. 对于此参考应用程序,将需要以下微服务

  • Riva 语音技能

  • BotMaker 对话管理器

  • BotMaker NLP 服务器

  • BotMaker Fulfillment 服务器

  • BotMaker 编辑器

  • BotMaker 文本 Web 应用程序

  1. 添加上述微服务后,该图现在如下所示

UCS Studio - Adding Microservices

连接微服务

可以通过连接微服务的端点来连接微服务。从出口端点(微服务右侧的端口)拖动到入口端点(微服务左侧的端口)。

UCS Studio - Connecting Microservices

配置微服务

  1. 可以通过在画布上选择微服务并从右侧的 “Properties(属性)” 窗口设置参数来设置参数。

UCS Studio - Setting Microservice Parameters
  1. 为方便起见,也可以从文件加载参数。将以下内容保存到文件(例如 params.yaml。)

'BotMaker Dialog Manager':
  configNgcPath: eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea
  botConfigName: bots/misty/misty_bot_config.yaml
  imagePullSecrets:
    - name: ngc-docker-reg-secret

'Riva Speech Skills':
  ucfVisibleGpus: [0]
  modelRepoGenerator:
    clearAllRMIRSAndModels: false
    #> description: Flag to clear artifacts and models before downloading and deploying
    ngcModelConfigs:
      tritonGroup0:
        models:
        #> description: List of NGC models for deployment
        - nvidia/riva/rmir_nlp_named_entity_recognition_bert_base:2.13.0
        - eevaigoeixww/conversational-ai/rmir_nlp_weather_intent_slot_bert_base:2.0.0-ea
  persistentVolumeClaim:
    keepPVC: True
  imagePullSecrets:
    - name: ngc-docker-reg-secret

'BotMaker NLP Server':
  ucfVisibleGpus: [0]
  configNgcPath: "eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea"
  modelConfigPath: "bots/misty/model_config.yaml"
  imagePullSecrets:
    - name: ngc-docker-reg-secret

'BotMaker Fulfillment Server':
  configNgcPath: "eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea"
  fmconfigPath: "bots/misty/fulfillment_config.yaml"
  imagePullSecrets:
    - name: ngc-docker-reg-secret

'BotMaker Text Web App':
  imagePullSecrets:
    - name: ngc-docker-reg-secret

'BotMaker Editor':
  imagePullSecrets:
    - name: ngc-docker-reg-secret
  1. API 密钥可以从以下位置获取

  1. 要加载上述参数文件,请使用操作栏中的 Load Parameters(加载参数) 按钮。

UCS Studio - Load Parameters
  1. 这将打开一个文件浏览器,导航到参数文件并加载它。

UCS Studio - Load Parameters File
  1. 在微服务上设置密钥。首先单击操作栏中的 Graph Configuration(图配置) 按钮以打开图配置。

UCS Studio - Open Graph Configuration

接下来,选择 Secrets(密钥) 窗口,单击 Add(添加) 以添加新密钥。输入如下所示的详细信息

UCS Studio - Add Secret

现在在画布上选择 Riva Speech Skills(Riva 语音技能) 微服务,这将在右侧的 Property(属性) 窗口中显示 Secrets(密钥) 部分。对于 ngc-api-key-secret,从下拉列表中选择 ngc-api-key-secret

UCS Studio - Set Secret

BotMaker Dialog Manager(BotMaker 对话管理器)BotMaker NLP Server(BotMaker NLP 服务器)BotMaker Fulfillment Server(BotMaker Fulfillment 服务器) 执行相同的操作。

保存图

  1. 单击操作栏中的 Save Graph(保存图) 图标

UCS Studio - Save Graph
  1. 这将打开一个文件浏览器。导航到选择的目录并保存图。

构建参考应用程序

  1. 单击操作栏中的 Build the current Graph(构建当前图) 图标。

UCS Studio - Build Graph
  1. 这将打开一个文件浏览器。导航到选择的目录并单击 Okay(确定)

  2. 构建应用程序可能需要几分钟。完成后,将显示一个成功弹出对话框,其中包含为应用程序生成的部署 helm chart 的路径。

UCS Studio - Build Graph
  1. 有关部署 helm chart 的说明,请参阅 部署参考应用程序

更新参考应用程序

本节演示如何使用 UCS Studio 和 NVIDIA 提供的微服务创建基于语音的聊天机器人。这些是在创建 创建参考应用程序 后要遵循的增量说明。这演示了如何通过仅使用 UCS Studio 更改应用程序中的一些内容来添加越来越复杂的功能。

此页面上的一些说明特定于正在创建的应用程序,有关创建应用程序的更多详细信息,请参阅 创建应用程序

打开现有图

  1. 如果 UCS Text Bot Application(UCS 文本机器人应用程序) 应用程序图尚未打开,请单击应用程序中心的 Open Graph(打开图) 按钮或操作栏上的 Open Graph(打开图) 按钮将其打开。

UCS Studio - Open Graph
  1. 这将打开一个文件浏览器,导航到 UCS Text Bot Application(UCS 文本机器人应用程序) 应用程序图并打开它。这将在画布中加载应用程序图。如果某些微服务超出视图范围,请右键单击画布以打开上下文菜单,然后单击 Focus on All(聚焦所有) 以自动平移和缩放画布,以便所有微服务都可见。

UCS Studio - Graph Focus All

添加 / 替换微服务

对于此应用程序

  • BotMaker Text Web App(BotMaker 文本 Web 应用程序) 应替换为 BotMaker Speech Web App(BotMaker 语音 Web 应用程序)

  • 将需要额外的 BotMaker Bot Controller(BotMaker 机器人控制器) 微服务

  1. 为此,请在画布上选择 BotMaker Text Web App 微服务实例,然后右键单击它以打开上下文菜单,然后单击 Delete Selection(删除所选内容) 以删除该微服务。

UCS Studio - Delete Microservice
  1. 接下来,通过在左侧的微服务列表中搜索 BotMaker Speech Web App(BotMaker 语音 Web 应用程序)BotMaker Bot Controller(BotMaker 机器人控制器) 微服务,并将它们拖放到画布上,来添加它们。这是该图现在应有的样子

UCS Studio - Add Speech Microservices

连接微服务

  • BotMaker Speech Web Appbot-controller 出口端点需要连接到 BotMaker Bot Controllergrpc-api 入口端点

  • BotMaker Speech Web Appbot-editor 出口端点需要连接到 BotMaker Editorhttp-api 入口端点

  • BotMaker Bot Controllerdialog-manager 出口端点需要连接到 BotMaker Dialog Managerdialog-manager 入口端点

  • BotMaker Bot Controllerriva 出口端点需要连接到 Riva Speech Skillsriva-speech-api 入口端点

通过从出口端点拖动到入口端点来执行此操作,如 连接微服务 中所示。该图现在应如下所示

UCS Studio - Connect Speech Microservices

加载参数

  1. 将以下内容保存到文件(例如 params.yaml

'BotMaker Dialog Manager':
   configNgcPath: eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea
   botConfigName: bots/misty/misty_bot_config.yaml
   imagePullSecrets:
     - name: ngc-docker-reg-secret

 'Riva Speech Skills':
   ucfVisibleGpus: [0]
   modelRepoGenerator:
     clearAllRMIRSAndModels: false
     #> description: Flag to clear artifacts and models before downloading and deploying
     ngcModelConfigs:
       tritonGroup0:
         models:
         #> description: List of NGC models for deployment
         - nvidia/riva/rmir_nlp_named_entity_recognition_bert_base:2.13.0
         - eevaigoeixww/conversational-ai/rmir_nlp_weather_intent_slot_bert_base:2.0.0-ea
         - eevaigoeixww/staging/asr_conformer_en_us_streaming_throughput_flashlight_vad:2.13.0-tokkio #english
         - nvidia/riva/rmir_tts_fastpitch_hifigan_en_us:2.13.0
   persistentVolumeClaim:
     keepPVC: True
   imagePullSecrets:
     - name: ngc-docker-reg-secret

 'BotMaker NLP Server':
   ucfVisibleGpus: [0]
   configNgcPath: "eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea"
   modelConfigPath: "bots/misty/model_config.yaml"
   imagePullSecrets:
     - name: ngc-docker-reg-secret

 'BotMaker Fulfillment Server':
   configNgcPath: "eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea"
   fmconfigPath: "bots/misty/fulfillment_config.yaml"
   imagePullSecrets:
       - name: ngc-docker-reg-secret

 'BotMaker Speech Web App':
   imagePullSecrets:
     - name: ngc-docker-reg-secret

 'BotMaker Editor':
   imagePullSecrets:
     - name: ngc-docker-reg-secret

 'BotMaker Bot Controller':
   pipeline: speech_lite
   configNgcPath: "eevaigoeixww/staging/botmaker-quickstart:23.10.2-ea"
   speechConfigPath: "bots/misty/speech_config.yaml"
   imagePullSecrets:
     - name: ngc-docker-reg-secret
  1. 接下来,按照 获取 API 密钥并加载参数 中的说明进行操作,如 UCS 文本机器人应用程序 部分所示。

  2. BotMaker Bot Controller(BotMaker 机器人控制器) 微服务上设置密钥,如 UCS 文本机器人应用程序 - 设置密钥 中所示。

更新应用程序信息

  1. 单击操作栏中的 Graph Configuration(图配置) 按钮以打开图配置。

UCS Studio - Open Graph Configuration
  1. 这将在底部打开 Graph Configuration(图配置)部分。

UCS Studio - Graph Configuration Window
  1. 将应用程序名称更改为 ucf-speech-bot,并可选择更新描述。

保存并构建应用程序

  1. 从顶部的 File(文件) 菜单中,选择 Save Graph As(另存为图) 以将图保存到新文件。

UCS Studio - Graph Save As
  1. 这将打开一个文件浏览器,导航到选择的目录并保存图。

  2. 按照 UCS 文本机器人应用程序 应用程序部分中 构建参考应用程序 中的说明构建应用程序。

部署参考应用程序

在本地 MicroK8S 集群上部署

  1. 创建拉取镜像所需的 Kubernetes 密钥

$ microk8s kubectl create secret docker-registry ngc-docker-reg-secret --docker-server=nvcr.io --docker-username='$oauthtoken' --docker-password=<NGC_API_KEY>

如果为密钥使用了另一个名称而不是 ngc-docker-reg-secret,则应在应用程序中更新相同的名称,并且应重建应用程序。

  1. 为 NGC API 密钥创建 Kubernetes 密钥

$ microk8s kubectl create secret generic ngc-api-key-secret --from-literal=NGC_API_KEY=<NGC_API_KEY>

如果使用了另一个密钥名称而不是 ngc-api-key-secret,或者使用了另一个密钥而不是 NGC_API_KEY,则应在应用程序中更新相同的名称,并且应重建应用程序。

  1. 如果尚未安装,请安装 Local Path Provisioner

$ curl https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.23/deploy/local-path-storage.yaml | sed 's/^  name: local-path$/  name: mdx-local-path/g' | microk8s kubectl apply -f -
  1. 部署应用程序 helm chart

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

在 AWS 上部署应用程序

  1. 将 helm chart 复制到 AWS 实例

scp -r -i /path/to/<your_key>.pem /path/to/<app-output-helm-chart>/   ubuntu@<aws_instance_ip>:
  1. 安装 Local Path Provisioner(在 AWS 实例上)

$ curl https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.23/deploy/local-path-storage.yaml | sed 's/^  name: local-path$/  name: mdx-local-path/g' | kubectl apply -f -
  1. 创建拉取镜像所需的 Kubernetes 密钥(在 AWS 实例上)

$ kubectl create secret docker-registry ngc-docker-reg-secret --docker-server=nvcr.io --docker-username='$oauthtoken' --docker-password=<NGC_API_KEY>

如果为密钥使用了另一个名称而不是 ngc-docker-reg-secret,则应在应用程序中更新相同的名称,并且应重建应用程序。

  1. 为 NGC API 密钥创建 Kubernetes 密钥(在 AWS 实例上)

$ kubectl create secret generic ngc-api-key-secret --from-literal=NGC_API_KEY=<NGC_API_KEY>
  1. 如果使用了另一个密钥名称而不是 ngc-api-key-secret,或者使用了另一个密钥而不是 NGC_API_KEY,则应在应用程序中更新相同的名称,并且应重建应用程序。

  2. 部署应用程序 helm chart(在 AWS 实例上)

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

与参考应用程序交互

UCS 文本机器人应用程序

监视 Pod

等待所有应用程序微服务 pod 进入运行状态

MicroK8s

$ microk8s kubectl get pod
NAME                                                  READY   STATUS    RESTARTS     AGE
botmaker-dialog-manager-deployment-6d9d6fd949-88f7f   1/1     Running   0            28m
botmaker-text-web-app-deployment-8499c4b857-xjwcg     1/1     Running   0            28m
riva-speech-skills-deployment-74cc4c9457-mfm98        1/1     Running   0            28m

AWS

$ kubectl get pods
NAME                                                  READY   STATUS    RESTARTS   AGE
botmaker-dialog-manager-deployment-ffdd98965-49rbk    1/1     Running   0          48m
botmaker-text-web-app-deployment-ddccf454-wsxh6       1/1     Running   0          48m
riva-speech-skills-deployment-7856cc499f-9bnkf        1/1     Running   0          48m

服务列表

获取与应用程序关联的服务列表

MicroK8s

$ microk8s kubectl get svc
NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
botmaker-dialog-manager-deployment-svc     ClusterIP   10.152.183.47    <none>        5000/TCP             32m
botmaker-text-web-app-deployment-service   NodePort    10.152.183.132   <none>        5001:31842/TCP       32m
kubernetes                                 ClusterIP   10.152.183.1     <none>        443/TCP              67d
riva-speech-skills-deployment-svc          ClusterIP   10.152.183.21    <none>        50051/TCP,8001/TCP   32m   29m

AWS

$ kubectl get svc
NAME                                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
botmaker-dialog-manager-deployment-svc      ClusterIP   10.102.53.150    <none>        5000/TCP             49m
botmaker-text-web-app-deployment-service    NodePort    10.96.23.19      <none>        5001:31666/TCP       49m
kubernetes                                  ClusterIP   10.96.0.1        <none>        443/TCP              151m
riva-speech-skills-deployment-svc           ClusterIP   10.101.176.114   <none>        50051/TCP,8001/TCP   49m

访问 WebApp

感兴趣的服务是 botmaker-text-web-app-deployment-service。我们将需要与该服务关联的节点端口。此端口号对于每次部署都会更改。

MicroK8s

NodePort: 31842

在浏览器中打开 http://<MicroK8s-Host-IP>:<Botmaker-Text-Web-App-NodePort>/bot 以开始与机器人交互。

AWS

NodePort: 31666

我们将必须将此端口对外开放,以便我们可以访问它。

  1. 转到实例的 Security(安全) 选项卡,然后导航到安全组。编辑入站规则以接受来自 Anywhere-IPv4(任何位置 IPv4) (0.0.0.0/0) 的到节点端口(在本例中为 31666)的连接。

  2. 保存后,在浏览器中打开 https://<aws_instance_ip>:<NodePort>/bot 以开始与机器人交互。

应用程序 WebUI

打开 URL 后,您应该看到以下 UI

UCS Text Bot App User Interface
  • 您可以在文本框中输入问题/陈述,然后单击 Submit(提交)。

  • 机器人会回答诸如 “Hello(你好)”“How are you?(你好吗?)”“How is the weather in New York?(纽约的天气怎么样?)” 之类的问题/陈述

UCS 语音机器人

按照 UCS 文本机器人应用程序 中的步骤操作,等待所有 pod 运行并获取服务列表。

访问 WebApp

感兴趣的服务是 botmaker-speech-webapp-deployment-service。我们将需要与该服务关联的节点端口。此端口号对于每次部署都会更改。

MicroK8s

NodePort: 31746

在浏览器中打开 https://<MicroK8s-Host-IP>:<Botmaker-Speech-WebApp-NodePort>/bot 以开始与机器人交互。

AWS

NodePort: 31666

我们将必须将此端口对外开放,以便我们可以访问它。

  1. 转到实例的 Security(安全) 选项卡,然后导航到安全组。编辑入站规则以接受来自 Anywhere-IPv4(任何位置 IPv4) (0.0.0.0/0) 的到节点端口(在本例中为 31666)的连接。

  2. 保存后,在浏览器中打开 https://<aws_instance_ip>:<NodePort>/bot 以开始与机器人交互。

应用程序 WebUI

打开 URL 后,您应该看到以下 UI

UCS Speech Bot App User Interface
  • 在授予麦克风权限后,您应该能够在 WebApp 中提供语音输入。

  • 单击绿色麦克风按钮与机器人交谈。

  • 单击黄色 “Unmute Speech(取消静音语音)” 按钮以收听来自机器人的音频回复。

  • 或者,您可以在文本框中输入问题/陈述,然后单击 Submit(提交)和/或以文本格式查看回复

  • 机器人会回答诸如 “Hello(你好)”、“How are you?(你好吗?)”、“How is the weather in New York?(纽约的天气怎么样?)” 之类的问题/陈述