设置指南#

本文档提供了在亚马逊云服务 (AWS) 上部署 Tokkio Workflow 的综合指南。虽然有多种方法可以在 AWS 云环境中实施 Tokkio Workflow,但本指南侧重于使用 Tokkio 约定式部署脚本的特定部署方法。这些脚本自动化了设置 Tokkio Workflow 及其所需基础设施组件的过程。

先决条件#

AWS 先决条件#

  1. 创建一个具有管理员访问权限的 IAM 用户,并获取访问密钥 ID 和秘密访问密钥

  2. 创建一个 S3 存储桶用于存储部署状态

  3. 创建一个 DynamoDB 表用于管理对部署状态的并发访问

  4. 设置一个域名和 Route53 托管区域以支持 HTTPS

如果您在设置这些方面需要帮助,您可以参考 AWS 文档。另请参阅环境变量和先决条件设置部分,了解有关设置此项的更多信息。

硬件#

控制器实例#

  • Ubuntu 22.04 操作系统

  • 生成 SSH 密钥对

  • 确保无密码 sudo 访问

访问#

  • 访问在启动 Tokkio Pipeline 应用程序期间使用的所有工件。例如,NGC 上的 Tokkio 应用程序 Helm chart。

基础设施布局#

在 AWS 上设置 Tokkio Workflow 需要创建多个 AWS 资源,例如 EC2 实例、安全组、应用程序负载均衡器、用于托管 UI 内容的 CloudFront、S3 存储桶等。下图显示了在 AWS 上启动的组件的总体布局。

Tokkio AWS Infrastructure

安装步骤#

  1. 克隆 NVIDIA/ACE.git 存储库并导航到 aws 部署脚本目录。

git clone https://github.com/NVIDIA/ACE.git
cd ACE/workflows/tokkio/scripts/one-click/aws
  1. 准备一个配置文件,可以通过复制基本 config-template.yml 或复制 config-template-examples 文件夹下的示例配置文件之一。

复制您选择的配置模板作为此安装的基本配置模板。

cp config-template-examples/llm-ov-3d-rp-6x-streams/config-template.yml ./my-config.yml
  1. 使用您的特定设置修改 my-config.yml

vi my-config.yml
  1. 设置环境变量。

  • 与 config-template 文件类似,您可以从 config-template-examples 文件夹复制示例 env 文件。

  • 使用您的特定设置修改环境变量文件。

cp config-template-examples/llm-ov-3d-rp-6x-streams/my-config.env my-env-file.env
vi my-env-file.env
  1. 加载环境变量文件。

source my-env-file.env
  1. 运行安装命令。

./envbuild.sh install --component all --config-file ./my-config.yml
  1. 在日志末尾捕获安装结果。输出将如下面的示例所示

access_urls:
  api_endpoint: "https://<api_sub_domain>.<base_domain>"
  elasticsearch_endpoint: "https://elastic-<project_name>.<base_domain>"
  grafana_endpoint: "https://grafana-<project_name>..<base_domain>"
  kibana_endpoint: "https://kibana-<project_name>..<base_domain>"
  ui_endpoint: "https://<ui_sub_domain>.<base_domain>"
ssh_command:
app:
  bastion: ssh -i /home/my-user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <username>@<bastion-instance-ip-address>
  master: ssh -i /home/my-user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ProxyCommand="ssh -i /home/my-user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p <username>@<bastion-instance-ip-address>" <username>@<app-instance-ip-address>
turn:
  master: ssh -i /home/my-user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <username>@<turn-instance-ip-address>
  1. 验证安装。

  • 检查 pod 状态:kubectl get pods -n <application-namespace>

  • 等待所有 pod 达到 Ready 状态(可能需要长达 60 分钟)

  • 一旦所有 pod 都处于健康状态,您可以使用安装输出中的 URL 访问 UI access_urls.ui_endpoint

  • 首次使用时,浏览器应提示 UI 运行所需的麦克风、扬声器或摄像头等权限。接受权限后,UI 应加载。

Verify AWS Deployment

卸载步骤#

仅卸载应用程序#

  • 加载正确的环境变量文件

source my-env-file.env
  • 运行以下命令仅卸载应用程序组件

./envbuild.sh uninstall --component app --config-file ./my-config.yml
  • 通过以下命令清除先前安装中的任何 persistent-volumes

kubectl delete pv -n <application-namespace>

卸载整个设置#

  • 加载正确的环境变量文件

source my-env-file.env
  • 运行以下卸载命令

./envbuild.sh uninstall --component all --config-file ./my-config.yml

注意

此步骤将卸载整个 Kubernetes 集群,以及在安装步骤中启动的 AWS 基础设施。因此请谨慎使用。

其他注意事项#

成本#

此设置中的许多资源可能不属于免费套餐,您可以查看 AWS 计费参考页面以了解成本影响。

安全#

在生产环境中部署 Tokkio 的安全性是最终用户的责任。在生产环境中部署时,请让安全专家审查任何潜在的风险和威胁;定义信任边界,保护通信通道,集成 AuthNAuthZ 以及适当的访问控制,保持部署(包括容器)为最新状态,并确保容器安全且没有漏洞。

必备技能和背景#

熟悉 Amazon Web Services (AWS)#

用户应基本了解 Amazon Web Services,包括其核心服务和计费模式。以下是用户应熟悉的一些关键领域

  • AWS 全球基础设施:了解 AWS 区域、可用区。

  • 身份和访问管理 (IAM):熟悉 IAM 用户、组、角色和策略,以实现安全的访问控制。

  • 核心服务:了解基本的 AWS 服务,例如 EC2、S3 和 DynamoDB,用于计算、存储和数据库。

  • 网络:了解 VPC、子网、安全组和路由表,以实现安全高效的网络设计。

  • 管理工具:熟悉 AWS 管理控制台,用于设置一次性先决条件。

  • 其他包括 Route53 用于 DNS 服务,负载均衡器用于流量分配。

熟悉命令行界面 (CLI)#

  • 基本命令:用户应熟悉基本命令行操作,例如导航目录、执行脚本和管理文件。

  • 环境配置:了解环境变量以及 PATH 设置在 Linux 上的工作方式将极大地帮助操作 OneClick 脚本。

  • 脚本编写基础知识:基本的脚本编写知识(例如,shell 脚本)有助于了解 OneClick 脚本的运行方式,以及排查可能出现的任何问题。

熟悉 YAML#

  • YAML 语法和结构:YAML 因其可读性和灵活性而常用于云原生应用程序中的配置文件。OneClick 脚本中使用的配置模板使用 YAML 格式。用户应熟悉 YAML 语法和结构。

熟悉 Kubernetes 生态系统#

Tokkio pipeline 是一个云原生应用程序,并使用容器化、Kubernetes、helm 等概念。用户需要熟悉这些概念,才能从使用部署脚本和应用程序中获得最佳结果。

  • Kubernetes 基础知识:用户应基本了解 Kubernetes 核心概念,例如 pod、服务和部署

  • kubectl:熟悉 kubectl 命令行工具,该工具用于与 Kubernetes 集群交互,包括查询正在运行的应用程序 pod 的状态或日志等。

  • Helm:了解 Kubernetes 的 Helm 包管理器,它通过管理 chart(预配置 Kubernetes 资源定义的集合)来简化应用程序部署。以及如何将 helm 与覆盖值一起使用将有助于正确配置模板。