我们将使用一个 CloudFormation 来部署 VPC、子网、安全组、IAM 角色、EFS、FSx for Lustre、自定义 PCS 和可视化 AMI,以及一个 LDAP 服务器。基于 static/cfn/pcs-workshop-infra.yaml 构建。由于它使用 EC2 Image Builder 构建两个自定义 AMI,因此部署需要 30 到 45 分钟。
该基础设施模板太大,无法内联传递给 CloudFormation(内联限制约为 50 KB)。因此,要将其上传到 S3 存储桶并通过 URL 引用它。
下载模板:
export AWS_DEFAULT_REGION=us-east-2
wget https://pingfan.s3.amazonaws.com/files/pcs-workshop-infra.yaml
ls -la pcs-workshop-infra.yaml
应该会看到一个大小非零的文件(模板约为 60 KB)。
现在创建一个存储桶,上传模板,并创建堆栈:
# 为 CloudFormation 模板创建一个私有 S3 存储桶。
# 存储桶名称必须全局唯一,因此我们用账户 ID 作为后缀。
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
export TEMPLATE_BUCKET="pcs-workshop-templates-${AWS_ACCOUNT_ID}"
aws s3 mb s3://${TEMPLATE_BUCKET} --region $AWS_DEFAULT_REGION
# 上传模板
aws s3 cp pcs-workshop-infra.yaml s3://${TEMPLATE_BUCKET}/pcs-workshop-infra.yaml
# 部署堆栈,指向已上传的模板
aws cloudformation create-stack \
--stack-name pcs-workshop-infra \
--template-url https://${TEMPLATE_BUCKET}.s3.${AWS_DEFAULT_REGION}.amazonaws.com/pcs-workshop-infra.yaml \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
该基础设施堆栈部署需要 30-45 分钟。其中大部分时间是 EC2 Image Builder 打 AMI。
为什么需要 S3 这一步? CloudFormation API 将 --template-body(内联)限制为约 50 KB。使用 --template-url 可以让 CloudFormation 从 S3 读取模板,那里的限制为 1 MB。
等待堆栈变成 CREATE_COMPLETE:
aws cloudformation wait stack-create-complete \
--stack-name pcs-workshop-infra
VPC 和网络 — 一个 VPC,在 2 个可用区中拥有公有和私有子网、一个 NAT 网关和路由表。该 VPC 满足所有 PCS 网络要求(启用了 DNS 主机名和解析,拥有足够的 IP 地址)。
安全组 — 针对不同流量模式预先配置:
IAM 实例配置文件 — 一个 EC2 实例配置文件,具有 PCS 节点注册(pcs:RegisterComputeNodeGroupInstance)、Systems Manager、S3 读取访问、CloudWatch agent、ECR 读取访问和 Secrets Manager 的权限。
Amazon EFS — 一个加密的文件系统,在两个私有子网中都有挂载目标。我们将把它用作所有集群节点上的共享主目录(/home)。
Amazon FSx for Lustre — 一个 PERSISTENT_2 文件系统(1200 GiB,LZ4 压缩),部署在与 hpc7a 实例相同的可用区中以获得最佳性能。我们将在计算节点上把它挂载到 /fsx。
PCS 兼容 AMI — 一个基于 Amazon Linux 2023 构建的自定义 x86_64 AMI,安装了 PCS agent、Slurm 、EFA 驱动程序、Lustre 客户端、CloudWatch agent、SSSD/LDAP 客户端(预先配置)以及开发工具(gcc、make、htop、vim、jq)。
LDAP 服务器 — 一个 OpenLDAP 目录服务器,预先配置了 2 个测试用户(user1、user2)和一个 hpcusers 组。AMI 上的 SSSD 已经配置为针对此服务器进行身份验证。
可视化 AMI — 一个基于 Amazon Linux 2023 构建的自定义 x86_64 AMI,包含上述 PCS AMI 中的所有内容,另外预装了 NVIDIA GPU 驱动程序和 Amazon DCV 服务器。GPU 驱动程序在非 GPU 实例上处于休眠状态,但在 g5/g6 硬件上会自动激活。用于远程可视化章节。
EC2 密钥对 — Workshop Studio 在我们的账户中创建了一个 ws-default-keypair。计算节点启动模板按名称引用它。本 workshop 通过 Systems Manager Session Manager 而非 SSH 访问节点,因此我们不会直接使用该密钥。
后面我们将从 CloudFormation 输出中检索资源 ID。基础设施stack名为 pcs-workshop-infra。
| 资源 | 堆栈输出键 | 描述 |
|---|---|---|
| VPC | VpcId |
VPC 标识符 |
| Private Subnet (AZ1) | PrivateSubnetId1 |
第一个私有子网 |
| Private Subnet (AZ2) | PrivateSubnetId2 |
第二个私有子网 |
| HPC Subnet | HpcSubnetId |
hpc7a 可用区中的私有子网 |
| HPC Availability Zone | HpcAvailabilityZone |
hpc7a 实例可用的 AZ |
| Public Subnet | PublicSubnetId1 |
用于 NAT 网关和登录节点的子网 |
| Public Security Group | PublicSecurityGroupId |
SSH + VPC 流量 |
| Private Security Group | PrivateSecurityGroupId |
VPC 内部流量 |
| EFA Security Group | EfaSecurityGroupId |
EFA 节点间通信 |
| Lustre Security Group | LustreSecurityGroupId |
FSx Lustre 客户端访问 |
| DCV Security Group | DcvSecurityGroupId |
DCV Web 访问(端口 8443) |
| IAM Instance Profile (ARN) | PcsInstanceProfileArn |
用于 PCS 计算节点组 |
| IAM Instance Profile (Name) | PcsInstanceProfileName |
用于 PCS 计算节点组 |
| EFS File System | EfsFileSystemId |
共享主目录 |
| FSx Lustre File System | FsxLustreFileSystemId |
高性能共享存储 |
| FSx Lustre Mount Name | FsxLustreMountName |
Lustre 挂载命令所需 |
| PCS AMI | PcsAmiId |
用于计算节点的预构建 x86_64 AMI |
| Visualization AMI | VizAmiId |
带有 GPU 驱动程序 + DCV 的可视化节点 AMI |
| LDAP Server URI | LdapServerUri |
LDAP 连接字符串 |
| LDAP Base DN | LdapBaseDn |
LDAP 目录基础 |
| LDAP Bind DN | LdapBindDn |
LDAP 管理员账户 |
| LDAP Bind Password | LdapBindPassword |
用于 LDAP 密码的 Secrets Manager ARN |
| Image Builder Profile | ImageBuilderInstanceProfileName |
用于构建自定义 AMI |
| Image Builder Log Bucket | ImageBuilderLogBucketName |
用于 AMI 构建日志的 S3 存储桶 |