本文档介绍了如何将 Managed Lustre 与 GKE 集成,以创建优化的环境来处理要求严苛的数据密集型工作负载,例如人工智能 (AI)、机器学习 (ML) 和高性能计算 (HPC)。
在本文档中,您将使用 XPK 配置 GKE 集群,创建 Managed Lustre 实例,并将其附加到集群。如需测试此配置,您可以在灵活启动配置的节点上运行工作负载。
本文档适用于有兴趣探索由托管式 Lustre 实例提供支持的 Kubernetes 容器编排功能的机器学习 (ML) 工程师以及数据和 AI 专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
背景
本部分介绍本文档中使用的关键技术:
XPK
XPK 是一种工具,可简化 GKE 集群和工作负载的预配和管理,尤其适用于 AI/机器学习任务。XPK 有助于生成预配置的、经过训练优化的基础架构,因此非常适合概念验证和测试环境。
您可以使用 Google Cloud CLI 或加速处理套件 (XPK) 创建使用 TPU 的集群。
- 使用 gcloud CLI 手动创建 GKE 集群实例,以便精确自定义或扩展现有生产 GKE 环境。
- 使用 XPK 快速创建 GKE 集群并运行工作负载,以进行概念验证和测试。如需了解详情,请参阅 XPK 自述文件。
本文档专门使用 XPK 来预配和管理资源。
如需了解详情,请参阅加速处理套件 (XPK) 文档。
灵活启动
灵活启动可让您只需为所需的资源付费,从而优化 TPU 预配。如果您的工作负载需要根据需要动态配置资源(最多 7 天)且可经济高效地访问,建议使用灵活启动。
本文档以灵活启动为例来说明使用选项,但您也可以使用其他选项,例如预留或 Spot。如需了解详情,请参阅 GKE 中 AI/机器学习工作负载的加速器使用选项简介。
Managed Lustre
Managed Lustre 是一种高性能并行文件系统服务,专为要求严苛的工作负载而设计。借助 Managed Lustre CSI 驱动程序,您可以使用标准 Kubernetes 永久性卷声明 (PVC) 和永久性卷 (PV) 将 Managed Lustre 实例与 GKE 集成。此驱动程序尤其适合需要持久、可伸缩和高吞吐量存储的 AI、机器学习和 HPC 工作负载。
如需了解详情,请参阅 Managed Lustre CSI 驱动程序简介。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Cloud Managed Lustre API 和 Google Kubernetes Engine API。 启用 API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
准备环境
本部分将介绍如何准备集群环境。
在新终端窗口中,创建虚拟环境:
VENV_DIR=~/venvp4;python3 -m venv $VENV_DIR;source $VENV_DIR/bin/activate按照 XPK 安装文件中的步骤安装 XPK。使用
pip install,而不是从源克隆。设置默认环境变量:
gcloud config set project PROJECT_ID gcloud config set billing/quota_project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export LOCATION=LOCATION export CLUSTER_NAME=CLUSTER_NAME export GKE_VERSION=VERSION export NETWORK_NAME=NETWORK_NAME export IP_RANGE_NAME=IP_RANGE_NAME export FIREWALL_RULE_NAME=FIREWALL_RULE_NAME export ACCELERATOR_TYPE=v6e-16 export NUM_SLICES=1替换以下值:
- PROJECT_ID:您的 Google Cloud 项目 ID。
- LOCATION:GKE 集群的可用区。为弹性启动实例和 Managed Lustre 实例选择可用区。例如
us-west4-a。如需了解有效的吞吐量值,请参阅使用灵活启动预配模式进行 GPU 和 TPU 预配简介。 - CLUSTER_NAME:GKE 集群的名称。
- VERSION:GKE 版本。 确保此版本至少是支持 Managed Lustre 的最低版本。例如,1.33.2-gke.1111000。
- NETWORK_NAME:您创建的网络的名称。
- IP_RANGE_NAME:IP 地址范围的名称。
- FIREWALL_RULE_NAME:防火墙规则的名称。
上述命令配置了
v6e-16加速器类型。此配置包含以下变量:ACCELERATOR_TYPE=v6e-16:对应于采用4x4拓扑的 TPU Trillium。 此 TPU 版本会指示 GKE 预配多主机切片节点池。v6e-16映射到 GKE 中的ct6e-standard-4t机器类型。NUM_SLICES=1:XPK 为您选择的ACCELERATOR_TYPE创建的 TPU 切片节点池的数量。
如果您想自定义
ACCELERATOR_TYPE和NUM_SLICES变量,请参阅以下文档,了解可用的组合:- 如需确定要使用的 TPU 版本、GKE 的机器类型、拓扑和可用区,请参阅规划 GKE 中的 TPU。
- 如需将 GKE 机器类型与 Cloud TPU API 中的加速器类型相关联,请参阅 TPU Trillium (v6e) 文档。
准备 VPC 网络
为您的托管 Lustre 实例和 GKE 集群准备虚拟私有云网络。
启用 Service Networking API:
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}创建 VPC 网络:
gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896为 VPC 对等互连创建 IP 地址范围:
gcloud compute addresses create ${IP_RANGE_NAME} \ --global \ --purpose=VPC_PEERING \ --prefix-length=20 \ --description="Managed Lustre VPC Peering" \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID}获取 IP 地址范围的 CIDR 范围:
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )创建一条防火墙规则,以允许来自相应 IP 地址范围的 TCP 流量:
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}连接 VPC 对等互连。
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
创建 Managed Lustre 存储实例
创建 Managed Lustre 存储实例。
设置存储实例变量:
export STORAGE_NAME=STORAGE_NAME export STORAGE_THROUGHPUT=STORAGE_THROUGHPUT export STORAGE_CAPACITY=STORAGE_CAPACITY_GIB export STORAGE_FS=lfs替换以下值:
- STORAGE_NAME:您的 Managed Lustre 实例的名称。
- STORAGE_THROUGHPUT:Managed Lustre 实例的吞吐量,以 MiB/s 每 TiB 为单位。如需了解有效的吞吐量值,请参阅计算新容量。
- STORAGE_CAPACITY_GIB:Managed Lustre 实例的容量(以 GiB 为单位)。如需了解有效的容量值,请参阅允许的容量和吞吐量值。
创建 Managed Lustre 实例:
gcloud lustre instances create ${STORAGE_NAME} \ --per-unit-storage-throughput=${STORAGE_THROUGHPUT} \ --capacity-gib=${STORAGE_CAPACITY} \ --filesystem=${STORAGE_FS} \ --location=${LOCATION} \ --network=projects/${PROJECT_ID}/global/networks/${NETWORK_NAME} \ --project=${PROJECT_ID} \ --async # Creates the instance asynchronously--async标志会异步创建实例,并提供一个操作 ID 来跟踪其状态。检查操作的状态:
gcloud lustre operations describe OPERATION_ID \ --location=${LOCATION} \ --project=${PROJECT_ID}将
OPERATION_ID替换为上一个异步命令的输出中的 ID。如果您没有 ID,可以列出所有操作:gcloud lustre operations list \ --location=${LOCATION} \ --project=${PROJECT_ID}当命令输出显示
done: true时,表示实例已准备就绪。
使用 XPK 创建 GKE 集群
使用 XPK 创建具有节点池的 GKE 集群。
创建 GKE 集群:
xpk cluster create --cluster ${CLUSTER_NAME} \
--num-slices=${NUM_SLICES} \
--tpu-type=${ACCELERATOR_TYPE} \
--zone=${LOCATION} \
--project=${PROJECT_ID} \
--gke-version=${GKE_VERSION} \
--custom-cluster-arguments="--network=${NETWORK_NAME}" \
--enable-lustre-csi-driver \
--flex
此命令使用 XPK 创建 GKE 集群。集群已配置为使用灵活启动进行节点预配,并且已启用 Managed Lustre CSI 驱动程序。
将存储实例附加到集群
为了配置 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC),本部分将使用 XPK 存储空间附加命令 (xpk storage attach) 和清单文件。本部分使用 XPK 源代码中的示例清单。
完成以下步骤,将 Managed Lustre 存储实例附加到 GKE 集群:
将示例清单文件下载到当前工作目录,并将其另存为
lustre-manifest-attach.yaml。使用 Managed Lustre 实例的信息更新清单文件:
在
PersistentVolume部分中,替换以下值:- STORAGE_SIZE:Managed Lustre 实例的大小(以 GiB 为单位)。
- PROJECT_ID/ZONE/INSTANCE_NAME:Managed Lustre 实例的完整资源路径。
- IP_ADDRESS:Managed Lustre 实例的 IP 地址。
- FILE_SYSTEM:文件系统类型,即
lfs。
在
PersistentVolumeClaim部分中,替换以下值:- STORAGE_SIZE:PersistentVolumeClaim 的大小(以 GiB 为单位)。
将存储实例附加到集群:
xpk storage attach ${STORAGE_NAME} \ --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \ --type=lustre \ --mount-point='/lustre-data' \ --readonly=false \ --auto-mount=true \ --manifest='./lustre-manifest-attach.yaml'验证您是否已为集群关联存储空间:
xpk storage list \ --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION}
运行工作负载
运行附加了 Managed Lustre 实例的工作负载。以下示例命令会列出可用磁盘,并在 Managed Lustre 实例的目录中创建一个“hello”文件。
创建并运行工作负载:
xpk workload create --workload test-lustre \
--cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
--command="df -h && echo 'hello' > /lustre-data/hello.txt && cat /lustre-data/hello.txt" \
--tpu-type=${ACCELERATOR_TYPE} \
--num-slices=1 \
--flex
清理
完成本文档中的步骤后,为防止您的账号产生不必要的费用,请删除集群:
xpk cluster delete --cluster ${CLUSTER_NAME} \
--zone ${LOCATION} \
--project ${PROJECT_ID}
后续步骤
- 详细了解 Managed Lustre CSI 驱动程序。
- 探索 Google Cloud Managed Lustre CSI 驱动程序参考。
- 了解如何创建和使用 Lustre 支持的卷。
- 了解如何访问现有的 Lustre 实例。