2. 集群加入指南#
2.1. 简介#
恭喜您获得新的 DGX Cloud 集群!
以下部分将指导您完成加入流程,并概述 DGX Cloud 的功能。有关详细信息,请参阅 DGX Cloud 文档。
DGX Cloud 包括以下各项的访问权限
NVIDIA DGX Cloud 集群
集群上安装的 Run:ai
NVIDIA AI Enterprise
NVIDIA GPU Cloud (NGC) 私有注册表
NVIDIA 企业支持门户
您的技术客户经理 (TAM) 将安排一次加入会议,以审查这些组件,包括如何访问和使用它们。在会议期间,请使用本指南作为参考。
2.1.1. DGX Cloud 中的角色#
要与 DGX Cloud 交互,通常涉及两种不同的角色
管理员角色:管理用户、资源访问和集群利用率。
用户角色:包括研究人员、ML 工程师以及其他利用 DGX Cloud 组件进行工作的人员。
有关用户角色的更多信息,请参阅 集群用户范围和用户角色。
在加入过程中,会议的前半部分将重点介绍管理员级别的任务,以准备集群和资源以供使用,然后是基本用户示例,以开始在集群上运行作业。
2.2. 管理员步骤#
在加入之前,将指定集群管理员来管理 DGX Cloud 中提供的资源。集群管理员具有以下角色
集群和 Run:ai 的应用程序管理员
NGC 的 组织所有者(用于私有注册表和 AI Enterprise)
集群管理员和 TAM 在加入之前完成以下步骤
向 NVIDIA 提供公司网络的无类别域间路由 (CIDR) 范围,以确保集群访问
配置到集群和 Run:ai 的单点登录 (SSO)
2.2.1. 访问 DGX Cloud Run:ai 集群#
在集群设置期间,NVIDIA 与您指定的集群管理员一起使用您的 OIDC 提供程序配置 SSO。此设置将允许您的组织使用标准凭据登录到集群。
在加入期间,您的 TAM 将提供以下信息以访问集群
用于访问 Run:ai 云控制平面的 URL
包含集群 DNS/URL 的 kubeconfig 文件
要登录,请导航到 Run:ai URL,输入您的电子邮件,然后选择使用 SSO 继续。
我们将在 设置 CLI 部分稍后使用 kubeconfig 文件。
2.2.2. 访问 NGC#
DGX Cloud 包括对 NGC 私有注册表和 NVIDIA AI Enterprise 的访问权限。
组织所有者将收到一封电子邮件邀请,其中包含完成其个人资料并登录 NGC 的说明。
按照电子邮件说明登录 NGC。然后,组织所有者可以邀请用户访问私有注册表和 AI Enterprise。
更多详细信息请参见 NGC 用户指南。
2.2.3. 访问 NVIDIA 企业支持门户#
您的 TAM 将帮助启用 NVIDIA 企业支持门户的授权。
启用授权后,使用您的 NGC 凭据登录 NVIDIA 企业支持门户。
2.2.4. 在 Run:ai 中创建部门#
接下来,您需要在 Run:ai 中创建一个部门以供使用。可能已经提供了默认部门。
但是,如果需要其他部门,或者需要修改默认部门的配额,请按照 部门 中的说明进行适当的更改。
2.2.5. 在 Run:ai 中创建项目#
设置好部门后,您现在可以创建一个项目来运行用户工作负载。此项目在您刚创建的部门的可用配额内分配了更精细的配额。
应用程序管理员和部门管理员都可以在 Run:ai 中创建项目。
有关创建项目的说明,请参阅 创建项目。
创建部门和项目后,您可以根据需要将用户分配到特定项目或部门。
2.2.6. 在 Run:ai 中分配用户角色#
注意
此步骤在加入期间是可选的。您可以继续执行后续部分,以在您刚刚创建的部门或项目内运行工作负载。
登录 Run:ai 并设置部门和项目后,您可以授予其他用户访问权限。有关更多信息,请参阅 管理用户。
2.3. 用户步骤#
2.3.1. 创建环境#
环境是 Run:ai 的一种构造,用于配置要使用的容器镜像。要运行以下各节中的示例工作负载,请使用 nvcr.io/nvidia/nemo:24.12
基础镜像创建这些环境。
标准 NeMo 环境
分布式 NeMo 环境
有关详细说明,请参阅 创建新环境。
2.3.2. 创建数据源#
数据源为数据提供持久挂载点,以便在集群上下载和保存数据。您将需要创建一个数据源来运行后续部分中的示例工作负载。
请按照此处的说明创建 数据源。
2.3.3. 运行示例工作负载#
注意
以下说明描述了如何在 DGX Cloud 上运行单节点和多节点 NCCL 测试,这些测试旨在测量 GPU 之间直接通信的总体总线带宽。重要的是要注意,存在理论带宽速度,然后是测试测量的有效速率。有效速率将因每个 CSP 提供的<强>高速网络互连而异。此外,NCCL 可能会根据测试中使用的等级(GPU 进程)数量,在 all-reduce 测试中以不同方式应用树和环算法。在某些情况下,2 节点 H100(总共 16 个 GPU)NCCL all-reduce 测试可能会显示比 4 节点、8 节点或更高节点测试高两倍的 GB/s 性能,因为 NCCL 可以单独应用树算法。有关 NCCL 如何在其测试中计算总线带宽性能的更多信息,请参阅 这些注释。如果您对从 DGX Cloud 集群观察到的性能指标有疑问,请联系您的 TAM。
2.3.3.1. 运行单节点 NCCL 测试#
以下是运行单节点 NCCL 测试的先决条件和步骤。
2.3.3.1.1. 先决条件#
具有 8 个 GPU 配额的部门
上述部门中具有 8 个 GPU 配额的项目
具有运行工作负载角色的用户
8-GPU 计算资源
具有镜像基础
nvcr.io/nvidia/nemo:24.12
的标准环境
2.3.3.1.2. 说明#
导航到“工作负载”菜单。
单击+新建工作负载,然后选择训练。
选择正确的项目。
选择标准工作负载架构。
将您的训练命名为“nccl-test”。
选择使用上述镜像的环境。
在运行时设置下,单击+命令和参数。
按如下方式设置变量
命令:
all_reduce_perf_mpi
参数:
-b 1G -e 16G -f 2 -g 8
选择正确的计算资源(可能是 h100-8g)。
单击创建训练。
查看日志以查看输出
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1073741824 268435456 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 2147483648 536870912 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 4294967296 1073741824 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 8589934592 2147483648 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 17179869184 4294967296 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A # Out of bounds values : 0 OK # Avg bus bandwidth : XXX.XX
2.3.3.2. 运行多节点 NCCL 测试#
2.3.3.2.1. 先决条件#
具有 32 个 GPU 配额的部门
上述部门中具有 32 个 GPU 配额的项目
具有运行工作负载角色的用户
8-GPU 计算资源
具有镜像基础
nvcr.io/nvidia/nemo:24.12
的分布式环境
2.3.3.2.2. 说明#
导航到“工作负载”菜单。
单击+新建工作负载,然后选择训练。
选择正确的项目。
选择分布式工作负载架构。
为工作负载选择 MPI 框架。
将您的训练命名为“nccl-test”。
单击继续。
选择您已配置的分布式环境。
确保工作进程的运行时设置为
命令:
/usr/sbin/sshd
参数:
-De
配置为使用四个工作进程。
为工作进程选择正确的环境(8 GPU H100 配置)。
选择继续。
确保允许主节点的不同设置已切换为开启状态。
选择与工作进程使用的环境相同的环境。
在运行时设置下,单击+命令和参数。在与您的集群所在的 CSP 对应的选项卡中设置值(即,如果在 AWS 上运行,请选择 AWS 选项卡)
命令:
/opt/amazon-efa-ofi/openmpi/bin/mpirun
参数
--allow-run-as-root -np 32 -x LD_LIBRARY_PATH -x OPAL_PREFIX -x FI_EFA_USE_DEVICE_RDMA -x NCCL_PROTO=simple all_reduce_perf_mpi -b 1g -e 16g -f2 -g1
命令:
mpirun
参数
--allow-run-as-root -np 32 -x LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib64" -x NCCL_ALGO="Ring,Tree" -x NCCL_BUFFSIZE="8388608" -x NCCL_CROSS_NIC="0" -x NCCL_DYNAMIC_CHUNK_SIZE="524288" -x NCCL_FASTRAK_CTRL_DEV="eth0" -x NCCL_FASTRAK_ENABLE_CONTROL_CHANNEL="0" -x NCCL_FASTRAK_ENABLE_HOTPATH_LOGGING="0" -x NCCL_FASTRAK_IFNAME="eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8" -x NCCL_FASTRAK_LLCM_DEVICE_DIRECTORY="/dev/aperture_devices" -x NCCL_FASTRAK_NUM_FLOWS="2" -x NCCL_FASTRAK_PLUGIN_ACCEPT_TIMEOUT_MS="600000" -x NCCL_FASTRAK_USE_LLCM="1" -x NCCL_FASTRAK_USE_SNAP="1" -x NCCL_MIN_NCHANNELS="4" -x NCCL_NET_GDR_LEVEL="PIX" -x NCCL_NVLS_ENABLE="0" -x NCCL_P2P_NET_CHUNKSIZE="524288" -x NCCL_P2P_NVL_CHUNKSIZE="1048576" -x NCCL_P2P_PCI_CHUNKSIZE="524288" -x NCCL_PROTO="Simple" -x NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE="/usr/local/nvidia/lib64/a3plus_guest_config.textproto" -x NCCL_SOCKET_IFNAME="eth0" -x NCCL_TUNER_CONFIG_PATH="/usr/local/nvidia/lib64/a3plus_tuner_config.textproto" -x NCCL_TUNER_PLUGIN="libnccl-tuner.so" all_reduce_perf_mpi -b 1G -e 16G -f 2 -g 1
选择正确的计算资源(为启动器选择 cpu 或备用仅 cpu 计算资源)。
单击创建训练。
查看日志以查看输出。
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1073741824 268435456 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 2147483648 536870912 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 4294967296 1073741824 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 8589934592 2147483648 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A 17179869184 4294967296 float sum -1 XXXXX XXX.XX XXX.XX N/A XXXXXX XXX.XX XXX.XX N/A # Out of bounds values : 0 OK # Avg bus bandwidth : XXX.XX
2.3.3.3. (可选)运行单节点 NeMo 交互式工作负载#
如果需要,您现在还可以按照说明设置和运行 使用 NeMo 的交互式工作负载。
2.3.3.4. (可选)将数据下载到数据源中#
您还可以使用相同的交互式 Jupyter 环境在容器中安装其他 CLI 工具,并将数据从对象存储下载到已创建并挂载的数据源中。
2.3.4. 设置 CLI#
您的 DGX Cloud Run:ai 集群包括对 Run:ai CLI 和 Kubernetes 集群和 CLI 的访问权限。
您的 TAM 将提供 kubeconfig 文件以设置 CLI。
使用此 kubeconfig 并按照 访问 Run:ai CLI 说明设置您的 CLI。
2.4. (可选)私有访问#
2.4.1. AWS PrivateLink#
2.4.1.1. 简介#
本文档提供了有关使用 AWS PrivateLink 手动配置 Run:ai 私有访问的说明,方法是使用 AWS CLI。NVIDIA 还提供了此配置的 Terraform 启动。有关更多信息,请联系您的 NVIDIA DGX Cloud 技术客户管理 (TAM) 团队。
Run:ai 私有访问允许访问 NVIDIA DGX Cloud Run:ai 部署,而无需遍历公共互联网。在此配置中,用户对专用集群和 Run:ai 控制平面的访问通过永不离开 AWS 网络的私有连接进行路由。
2.4.1.2. 假设#
在 AWS 上 DGX Cloud Run:ai 部署中启用私有访问需要在 NVIDIA 和客户 AWS 账户之间协调网络配置。本节列出了私有访问的先决条件
2.4.1.3. 配置#
在开始 Run:ai 私有访问配置过程之前,请确保您拥有所有必需的信息和资产。如有必要,请联系 NVIDIA TAM 团队。
NVIDIA DGX Cloud Run:ai 集群已预置的 AWS 区域
$RUNAI_REGION
(例如us-east-1
)
AWS PrivateLink 端点服务名称、完全限定域名 (FQDN) 以及每个所需服务的支持 AWS 可用区 (AZ) 列表
Kubernetes 端点
$RUNAI_K8S_SERVICE_NAME
$RUNAI_K8S_SERVICE_FQDN
$RUNAI_K8S_SERVICE_AZ
Run:ai Ingress
$RUNAI_INGRESS_SERVICE_NAME
$RUNAI_INGRESS_SERVICE_FQDN
$RUNAI_INGRESS_SERVICE_AZ
Run:AI 控制平面
$RUNAI_CONTROLPLANE_SERVICE_NAME
$RUNAI_CONTROLPLANE_SERVICE_FQDN
$RUNAI_CONTROLPLANE_SERVICE_AZ
研究人员配置文件(又名
kubeconfig
)
您还需要以下关于您将在其中创建私有访问连接的 AWS 账户的信息。
AWS 账户 ID (
$ACCOUNT_ID
)为该 AWS 账户配置的 AWS CLI
VPC ID (
$VPC_ID
)子网 ID (
$SUBNET_ID
)必须在同一 VPC 中
跨越 NVIDIA TAM 团队提供的每个 AWS PrivateLink 端点服务支持的物理 AZ
已启用 DNS 主机名
具有允许端口 TCP/443 上出口的安全组
$RUNAI_SG_ID
2.4.1.3.1. 验证#
首先验证您的 AWS 账户 ID 是否已添加到每个 AWS PrivateLink 端点服务。
aws ec2 describe-vpc-endpoint-services \
--service-names \
$RUNAI_CONTROLPLANE_SERVICE_NAME \
$RUNAI_K8S_SERVICE_NAME \
$RUNAI_INGRESS_SERVICE_NAME \
--region $RUNAI_REGION \
--query "ServiceDetails[].[
ServiceName,
join(',', ServiceType[].ServiceType),
join(',', AvailabilityZones)
]"
示例输出
[
{
"ServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-0a1e071742f609eee",
"ServiceType": "Interface",
"AZs": "us-east-1a,us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f"
},
{
"ServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-0b7351ed12fc0463b",
"ServiceType": "Interface",
"AZs": "us-east-1a,us-east-1d"
},
{
"ServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-07c82355c0854a8da",
"ServiceType": "Interface",
"AZs": "us-east-1a,us-east-1b,us-east-1c,us-east-1d"
}
]
如果响应有错误,请在继续下一步之前解决它。
2.4.1.3.2. PrivateLink 端点#
注意
要创建 AWS PrivateLink 端点,您将需要一个 VPC,其中包含满足 配置 部分中概述要求的子网。有关更多信息,请参阅 创建 AWS VPC 和 创建 AWS 子网。
要创建 AWS PrivateLink 端点,请为每个提供的 PrivateLink 端点服务运行以下命令。为了说明,让我们使用 Run:ai Kubernetes 端点服务 ($RUNAI_K8S_SERVICE
)
aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--vpc-endpoint-type Interface \
--service-name $RUNAI_K8S_SERVICE_NAME \
--subnet-ids $SUBNET_ID1 $SUBNET_ID2 \
--security-group-ids $RUNAI_SG_ID \
--tag-specifications 'ResourceType=vpc-endpoint,Tags=[{Key=Name,Value=<VPCE_NAME>}]'
上述命令的输出将包括 vpc-endpoint-id
。您可以使用该 ID 来验证创建的 VPC 端点
aws ec2 describe-vpc-endpoints \
--vpc-endpoint-ids $VPC_ENDPOINT_ID \
--query 'VpcEndpoints[0].{State: State, DNS: DnsEntries[*].DnsName}'
上述命令的输出应具有端点状态 available
和 DNS 条目列表。捕获 DNS 条目以在部署的后续部分中使用
{
"State": "available",
"DNS": [
"vpce-02b6d592bc0bf3956-av79pfkj.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com",
"vpce-02b6d592bc0bf3956-av79pfkj-us-east-1a.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com",
"vpce-02b6d592bc0bf3956-av79pfkj-us-east-1b.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com"
]
}
为每个 PrivateLink 端点服务重复此过程
$RUNAI_INGRESS_SERVICE
$RUNAI_CONTROLPLANE_SERVICE
2.4.1.3.3. DNS#
由于通过 PrivateLink 路由的流量不会遍历公共互联网,因此您在其中部署 PrivateLink 端点的 VPC 需要将 FQDN 解析为 PrivateLink 端点 DNS 名称。
例如,NVIDIA TAM 团队为 RUNAI_K8S_SERVICE_FQDN
提供的 FQDN 需要解析为 PrivateLink 端点 部分中返回的每个 DNS 条目。
在 VPC 内部管理 DNS 的一种方法是使用 AWS Route53 服务。如果您选择以这种方式配置 DNS,则必须为每个提供的 FQDN 执行以下步骤。为了在此处进行演示,我们将使用 app.run.ai
在 AWS Route53 中管理 DNS。
创建 Route53 托管区域
使用您选择的 VPC 的 ID,使用以下命令创建私有 DNS 区域
aws route53 create-hosted-zone --name run.ai \ --caller-reference runai \ --hosted-zone-config PrivateZone=true \ --vpc VPCRegion=us-east-1,VPCId=vpc-0de96abdd45763f49
在 Route53 托管区域中创建私有 DNS 记录
使用
$HOSTED_ZONE_ID
,为 PrivateLink 端点 部分中aws ec2 escribe-vpc-endpoints
命令返回的每个 CNAME 创建 DNS 条目aws route53 change-resource-record-sets \ --hosted-zone-id $HOSTED_ZONE_ID \ --change-batch '{ "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "app", "Type": "CNAME", "TTL": 60, "ResourceRecords": [ { "Value": "vpce-02b6d592bc0bf3956-av79pfkj.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com" }, { "Value": "vpce-02b6d592bc0bf3956-av79pfkj-us-east-1a.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com" }, { "Value": "vpce-02b6d592bc0bf3956-av79pfkj-us-east-1b.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com" } ] } } ] }'
验证 DNS 记录
DNS 条目将需要几分钟才能传播。完成后,您应该能够从 VPC 内部挖掘记录并将其解析为创建的 CNAME
dig app.run.ai +short CNAME
结果应包括您在上面定义的相同 DNS 条目
vpce-02b6d592bc0bf3956-av79pfkj.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com. vpce-02b6d592bc0bf3956-av79pfkj-us-east-1a.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com. vpce-02b6d592bc0bf3956-av79pfkj-us-east-1b.vpce-svc-0a1e071742f609eee.us-east-1.vpce.amazonaws.com.
2.4.1.4. 用法#
在您可以通过私有访问使用 Run:ai 之前,有一些假设
通过按照 访问 Run:AI CLI 中的步骤验证 Run:AI 和 kubectl CLI 是否已安装。
Run:ai 是从您的 AWS 账户内部访问的。
AWS 账户已成功配置 PrivateLink 端点。
DNS 已配置,指向所有 PrivateLink FQDN 端点。
在按照 设置 Kubernetes 配置文件 后,您应该能够通过私有安全连接对集群使用 runai
和 kubectl
命令,而无需遍历公共网络。
注意
虽然本文档未涵盖,但如果通过同一 VPC 代理,您的浏览器连接也将通过 AWS PrivateLink 路由。
2.4.1.5. 资源#
2.4.1.5.1. 所需权限#
以下策略文档捕获了在您的 AWS 账户中配置 Run:ai 私有访问所需的关键权限
{
"Version": "2024-08-28",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateSubnet",
"ec2:DescribeSubnets",
"ec2:CreateVpc",
"ec2:DescribeVpc",
"ec2:DescribeVpcAttribute",
"ec2:ModifyVpcAttribute",
"ec2:DescribeVpcEndpoints",
"ec2:DescribeVpcEndpointConnectionNotifications",
"ec2:DescribeVpcEndpointConnections",
"ec2:DescribeVpcEndpointServiceConfigurations",
"ec2:DescribeVpcEndpointServicePermissions",
"ec2:DescribeVpcEndpointServices",
"route53:CreateHostedZone",
"route53:ChangeResourceRecordSetsNormalizedRecordNames",
"route53:ChangeResourceRecordSetsRecordTypes",
"route53:ChangeResourceRecordSetsActions"
],
"Resource": "*"
}
]
}
2.5. 结论#
就是这样!您现在可以访问 DGX Cloud 并成功在集群上运行工作负载。
您可以继续自定义和配置您的集群,将您的数据下载到集群上,并开始运行您的工作负载。
如有任何问题或需要帮助,请联系您的 NVIDIA TAM。