如何使用Terraform在AWS上设置Kubeflow
回到博客主页

如何使用Terraform在AWS上设置Kubeflow

MLOps 2023年5月22日

欢迎回来!在最后一篇文章,我们看到了如何在本地安装Kubeflow以进行实验和学习。现在您非常确定要在生产中使用它。你要怎么做呢?

在大多数情况下,这意味着在云平台(如AWS或GCP)上设置Kubeflow。这正是这篇文章将帮助你做的!

在AWS上设置Kubeflow的主要步骤如下:

  1. 启动一个AWS实例
  2. 安装工具
  3. 安装Python 3.8
  4. 克隆Kubeflow Git存储库
  5. 配置AWS凭证
  6. 更新Terraform配置文件
  7. 使用Terraform部署Kubeflow
  8. 设置Kubeflow Dashboard

这看起来很多,但我们将引导您完成每一步,简化过程。所有的错误都是我们犯的,所以你不必这么做!

你还在等什么?我们开始吧!

我应该使用哪种AWS实例?

归根结底,AWS是一个复杂的庞然大物。有几种方法可以启动AWS实例,有时不同的区域支持不同的方法。如果您需要帮助,请咨询AWS启动实例的文档

你应该知道的一件事是,你不需要一台带有强大GPU的机器。在本教程中,我使用了m5.xlarge运行Ubuntu 22.04的class机器。但是,您可以使用较小的机器类型。

本教程的其余部分假设您已经SSH到您的AWS实例并从那里运行命令,除非另有说明。

我需要哪些工具?

为了处理设置过程,我们需要安装一些标准工具,例如git旋度解压缩等……

首先,我们要确保我们的存储库和当前安装的软件包是最新的:

Sudo apt update Sudo apt upgrade

然后我们安装(大部分)我们需要使用的工具:

Sudo apt install git curl unzip tar make vim wget -y

如何安装Python 3.8?

AWS风格的Kubeflow需要Python 3.8! What is this, 2019?

要做到这一点,你需要先加上deadsnakes恰当的存储库。明白了吗?死蛇?无论如何,你可以这样做:

Sudo add-apt-repository ppa:deadsnakes/ppa -y Sudo apt update

然后就可以安装了Python 3.8distutils用这个命令打包:

安装python3.8-distutils

最后,为了确保AWS Kubeflow脚本能够正常工作,我们需要确保这个Python版本是默认使用的版本。要做到这一点,我们将别名命令:

别名python = python3.8

我需要克隆哪些Kubleflow库?

你需要克隆两个Git仓库:

  1. AWS的特殊Kubeflow清单回购,以及
  2. 标准的Kubeflow manifest repo

首先设置一些环境变量:

export KUBEFLOW_RELEASE_VERSION=v1.7.0 . export AWS_RELEASE_VERSION=v1.7.0-aws-b1.0.0 . export

接下来克隆AWS的Kubeflow清单存储库并签出相应的发布版本:

git clone  cd kubeflow-manifest git checkout ${AWS_RELEASE_VERSION}

然后在你刚刚克隆的AWS清单下克隆标准Kubeflow清单:

git clone——branch ${KUBEFLOW_RELEASE_VERSION}  upstream

最后,您将使用repo中的Makefile来安装安装Kubeflow所需的一系列工具,包括kubectlkustomize,起程拓殖

使安装工具

如何配置AWS凭据?

在解决了所有依赖项之后,是时候配置您的AWS凭据了。

首先,您将使用aws的配置文件下配置凭据kubeflow。你可以给你的个人资料起任何你想要的名字,但是描述性是很有帮助的!

Aws configure——profile=kubeflow

这将要求您提供四项信息:

  • AWS接入密钥ID
  • AWS秘密访问密钥
  • 默认地区名称
  • 默认输出格式

前两个可以从您的AWS控制台创建。如果你点击右上角的用户名,然后选择安全认证,您将能够创建这两个密钥。

截图2023-05-11,格式:16.29.55.png

默认地区名称,使用您想要启动Kubernetes节点的相同区域。这可能是您启动实例的同一区域。

默认输出格式json

接下来,我们将设置一些环境变量,使事情变得更简单:

export AWS_PROFILE=kubeflow export CLUSTER_NAME=awesome-kubeflow export CLUSTER_REGION=…

确保你设置好AWS_PROFILE到使用上一个命令创建的相同名称。

你可以设置CLUSTER_NAME任何你想要的,只要不超过19个字符。

最后,确保你的CLUSTER_REGION与你之前设置的匹配。

地形配置文件需要做哪些修改?

我们需要对两个默认的Terraform配置文件进行一些轻微的更新。

首先切换到正确的目录:

cd部署/香草/起程拓殖

然后,使用您最喜欢的编辑器(如vim)编辑variables.tf。您需要做的是找到默认值的定义node_instance_typenode_instance_type_gpu。将它们设置为项目所需的值。

变量"node_instance_type" {description = " EKS节点的实例类型" type = string default = "m5. "xlarge"} variable "node_instance_type_gpu" {description = " gpu EKS节点的实例类型。将导致创建一个单独的gpu节点组时不为空" type = string default = "g4dn。超大"}

在上面的例子中,我们已经离开了m5.xlarge作为默认值node_instance_type,但更改了默认值node_instance_type_gpu没有一个g4dn.xlarge。如果你把它放在没有一个,您的集群将不支持运行需要gpu的作业。

接下来,编辑main.tf设置的值min_sizedesired_sizemax_sizemanaged_node_group_cpumanaged_node_group_gpu。如果您对默认设置感到满意,那么您不需要更改任何内容。

下面是我们使用的一个例子:

Managed_node_group_cpu = {node_group_name = "managed-ondemand-cpu" instance_types = [var.node_instance_type] min_size = 2 desired_size = 2 max_size = 5 subnet_ids = module.vpc。Private_subnets} managed_node_group_gpu = local。using_gpu吗?{node_group_name = " managedondemand -gpu" instance_types = [var.node_instance_type_gpu] min_size = 1 desired_size = 1 max_size = 3 ami_type = "AL2_x86_64_GPU" subnet_ids = module.vpc。Private_subnets}:空

最后,我们需要用下面的命令创建一个新的配置文件:

cat < sample.auto.tfvars cluster_name="${cluster_name}" cluster_region="${cluster_region}" EOF

的值cluster_namecluster_region使用的变量main.tfvariables.tf

如何使用Terraform部署Kubeflow ?

现在我们已经准备好使用Terraform部署Kubeflow了。首先,我们要初始化一个包含Terraform配置文件的工作目录:

起程拓殖init

这是在编写新的Terraform配置后应该运行的第一个命令,可以安全地运行多次。

接下来我们运行:

起程拓殖计划

这将创建一个执行计划,它允许您预览Terraform计划对基础结构进行的更改。

最后,我们使用repo的Makefile进行部署:

使部署

这要花很多时间。所以现在是喝杯咖啡或茶的最佳时机。

如何设置Kubeflow仪表板?

如果部署时没有出现错误,就可以设置对Kubeflow Dashboard的访问了。

我们需要做的第一件事是运行:

$(terraform output -raw configure_kubectl)

此命令更新kubeconfig

接下来,我们需要改回存储库的根目录:

cd  ../../../

然后我们可以使用Makefile将适当的端口转发到入口网关:

让左前

最后,我们需要使用SSH隧道从本地机器到AWS上的Kubernetes集群:

ssh -i  -L 8080:localhost:8080 -N ubuntu@ -o ExitOnForwardFailure=yes

一旦你这样做,你就可以打开了http://localhost:8080在你最喜欢的浏览器中:

截图2023-05-05 .png

默认用户名为user@example.com密码是12341234。登录后,您将看到Kubeflow仪表板

截图2023-05-05 at 10.55.26.png

从这里你可以退房Kubeflow的组件文档以了解有关仪表板的更多信息以及如何开始使用它。

我怎样才能停止一切?

当你准备好停止一切时,回到部署/香草/起程拓殖文件夹并运行:

要删除

故障排除

因为AWS和Kubernetes都是非常复杂的系统,所以有时可能会出现问题。以下是我在启动Kubeflow集群时遇到的一些问题。

错误的区域

运行时地形初始化&&地形计划你看:

││错误:配置Terraform AWS提供程序:验证提供程序证书:从STS中检索调用者身份:操作错误STS: GetCallerIdentity, https响应错误StatusCode: 0, requesttid:,请求发送失败,Post "":拨号tcp:查找sts.us-east-2a.amazonaws.com在127.0.0.53:53:没有这样的主机││与提供程序["registry.terraform. htm "/hashicorp/aws"],│on main。│54:提供程序“aws”{│

在设置Terraform配置文件时,您可能有错误的区域。可以通过编辑sample.auto.tfvars文件。

确保这个区域不是以字母结尾的。也就是说,即使你的机器说它在里面us-east-2a,使用us-east-2作为所有配置文件的区域。

群集名称错误

如果出现以下错误:

││错误:变量的值无效。│├──────────────────││var.cluster_name is "kubeflow-minimagen-3"││集群名称必须在[1,19]个字符之间。││这是由variables.tf:6,3-13的验证规则检查的。╵

这意味着您选择的群集名称太长。长度不超过19个字符。

配额限制

如果,在部署时,您得到:

││错误:等待EKS节点组(kubeflow-minimagen3:managed-ondemand-gpu-2023050809570864240000000d)创建:意外状态“CREATE_FAILED”,目标为“ACTIVE”。│* ekks -managed-ondemand-gpu-2023050809570864240000000d-f4c3fd65-8fe7-40f7-ce85-85088124e3eb: AsgInstanceLaunchFailures:无法启动按需实例。VcpuLimitExceeded -您请求的vCPU容量超过了当前vCPU限制0,允许指定实例类型所属的实例桶。请访问请求调整此限制。启动EC2实例失败。模块。aws_eks_managed_node_groups["mg_gpu"].aws_eks_node_group。│on .terraform/modules/eks_blueprints/modules/aws-eks-managed-node-groups/main。在资源“aws_eks_node_group”“managed_ng”中的第一行:│1:资源“aws_eks_node_group”“managed_ng”{│

这意味着您已经超出了特定机器类型的配额限制。在这种情况下,它是基于gpu的机器。既然我们要求g4dn.xlarge,我们需要申请增加配额运行按需G和VT实例

增加你的配额是很重要的随需应变实例和现货实例或专用的主机。

???

如果你得到这个神秘的错误:

││与module.eks_blueprints_kubernetes_addons.module.aws_fsx_csi_driver[0].module.helm_addon.helm_release。Addon[0],│on .terraform/modules/eks_blueprints_kubernetes_addons/modules/kubernetes-addons/helm-addon/main。│1:资源“helm_release”“addon”{│

这似乎是一个间歇性的错误。试着换个地方。


恭喜你!现在您已经在AWS上设置了Kubeflow !为此,您已经安装并学习了:

  • 关于Kubeflow
  • 更多关于起程拓殖
  • 还有很多关于AWS

这是一个巨大的成就,也是了解更多Kubeflow(以及Kubernetes)的一个很好的开始。

在我们关于Kubeflow的下一篇文章中,我们将向您展示如何使用Kubeflow在大约87 GB的数据上训练文本到图像的模型。听起来很有趣,对吧?

如果你有任何问题,请随时联系我。你可以加入我们的不和在美国,我们建立了一个充满活力、乐于助人、友好的社区。

标签

太棒了!您已成功订阅。
太棒了!接下来,完成签出以获得完全访问权限。
欢迎回来!您已成功登录。
成功!您的帐户已完全激活,您现在可以访问所有内容。