当您在云中配置虚拟机时,它并非孤立存在。它位于您定义和管理的网络中,这为任何重要的AI工作负载提供了隔离和安全层。云的这个私人部分在AWS和Google Cloud Platform(GCP)上被称为虚拟私有云(VPC),在Azure上则被称为虚拟网络(VNet)。您可以把它看作是您自己的虚拟数据中心网络,让您全面管理其IP地址空间、子网、路由和安全。正确配置您的云网络是根本所在。设计不当的网络可能导致敏感数据和模型泄露,产生性能瓶颈,让您昂贵的GPU缺乏数据,或导致意料之外的数据传输费用。主要网络组件云网络主要包括一些协同运行以路由和保护流量的组件。弄清它们的作用是构建具有恢复力基础架构的第一步。虚拟私有云(VPC)和子网VPC是一种逻辑隔离的网络。创建VPC时,您会使用CIDR(无类别域间路由)表示法为其分配一个私有IP地址范围,例如10.0.0.0/16。此范围提供超过65,000个私有IP地址,您的资源可以使用这些地址相互通信,而无需将其暴露给公共互联网。在您的VPC中,您会创建子网,这些是VPC IP地址范围的更小分区。子网允许您根据功能和安全要求对资源进行分组。它们通常被指定为公共子网或私有子网。公共子网: 公共子网中的资源可以拥有公共IP地址,并可以直接与互联网通信。这通过**互联网网关(IGW)**实现,互联网网关是一个您附加到VPC的托管VPC组件。公共子网的路由表将包含一条规则,将面向互联网的流量(到0.0.0.0/0)定向到IGW。私有子网: 这些是您主要AI工作负载的标准配置。私有子网中的实例没有公共IP地址,无法直接从互联网访问。为允许这些实例发起出站连接,例如下载软件更新或从仓库中获取基础模型,您可以使用NAT(网络地址转换)网关。NAT网关位于公共子网中,代表私有子网将流量路由到互联网。这是单向通信;互联网无法向您的私有实例发起连接。路由表每个子网都关联一个路由表,其中包含确定网络流量去向的规则。这些表是VPC的流量控制器。例如:公共子网的路由表可能包含一条路由,将所有目标为10.0.0.0/16的流量发送到VPC内部,以及另一条路由,将所有其他流量(0.0.0.0/0)发送到互联网网关。私有子网的路由表将包含类似的本地路由,但其0.0.0.0/0流量将被定向到NAT网关。保护您的网络边界隔离只是安全措施的一部分。您还需要精确控制允许流入和流出实例的流量。安全组安全组充当您实例的虚拟防火墙,在实例级别控制入站和出站流量。安全组是有状态的,这意味着如果您允许入站连接,相应的出站流量会自动被允许,无论出站规则如何。对于典型的GPU训练实例,您可能配置安全组,包含以下入站规则:SSH(端口22): 仅允许来自您的公司网络或特定堡垒主机的IP地址的连接。这有助于防止未经授权的管理访问。自定义TCP(端口8888): 如果您在该实例上运行Jupyter服务器,您将打开此端口,同样将访问权限限制在受信任的IP地址。默认情况下,所有入站流量都被拒绝,所有出站流量都被允许。一种良好做法是也严格限制出站规则,仅允许连接到您需要的特定服务。网络访问控制列表(NACL)NACL是额外的安全层,在子网级别充当防火墙。与安全组不同,NACL是无状态的。这意味着您必须明确定义入站和出站流量的规则。例如,要允许端口80上的入站请求,您还必须创建一条出站规则以允许相应临时端口(1024-65535)上的流量。由于这种复杂性,大多数使用场景通过精心配置的安全组就能得到很好的满足,而NACL则保留其默认(全部允许)设置。AI工作负载的参考架构我们将这些组件组合起来,形成一个机器学习项目的常见架构。此设计通过将计算资源放置在私有子网中并严格控制访问来优先考虑安全性。digraph G { rankdir=TB; splines=ortho; node [shape=box, style="rounded,filled", fontname="sans-serif", fontsize=10]; edge [fontname="sans-serif", fontsize=9]; subgraph cluster_vpc { label="VPC (10.0.0.0/16)"; bgcolor="#e9ecef"; fontcolor="#495057"; subgraph cluster_public { label="公共子网 (10.0.1.0/24)"; bgcolor="#a5d8ff"; node [fillcolor="#d0bfff"]; Bastion [label="堡垒主机"]; NAT_GW [label="NAT网关", shape=cylinder, fillcolor="#ffc9c9"]; } subgraph cluster_private { label="私有子网 (10.0.2.0/24)"; bgcolor="#bac8ff"; node [fillcolor="#eebefa"]; TrainingGPU [label="GPU训练实例"]; InferenceCPU [label="CPU推理端点"]; } } subgraph cluster_external { label="外部服务"; bgcolor="#b2f2bb"; Internet [label="互联网", shape=cloud, fillcolor="#ced4da"]; S3 [label="对象存储 (S3/GCS)", shape=cylinder, fillcolor="#ffd8a8"]; VPC_Endpoint [label="VPC端点", shape=cds, fillcolor="#96f2d7"]; } User [shape=oval, label="机器学习工程师", fillcolor="#ffec99"]; IGW [label="互联网\n网关", shape=cylinder, fillcolor="#ff8787"]; User -> Bastion [label="1. SSH (端口22)"]; Bastion -> TrainingGPU [label="2. SSH (端口22)"]; TrainingGPU -> NAT_GW [label="3. 下载软件包/\n模型 (例如 PyPI)", style=dashed]; NAT_GW -> IGW [style=dashed]; IGW -> Internet [style=dashed]; TrainingGPU -> VPC_Endpoint [label="4. 访问训练数据"]; VPC_Endpoint -> S3; InferenceCPU -> VPC_Endpoint [label="5. 加载最终模型"]; Bastion -> IGW [label="互联网访问"]; {rank=same; Bastion; NAT_GW;} {rank=same; TrainingGPU; InferenceCPU;} }一种用于AI工作负载的安全网络架构。机器学习工程师通过堡垒主机访问私有资源。训练实例通过NAT网关从互联网获取代码,并通过安全的VPC端点访问对象存储中的数据集,避免数据通过公共互联网传输。此架构展现了安全高效的工作流程:访问: 工程师通过SSH连接到位于公共子网中的强化堡垒主机。这是从外部进入的唯一入口点。开发: 从堡垒主机,工程师可以进一步SSH连接到私有子网中的GPU训练实例。出站连接: 训练实例可以从互联网下载Python软件包或基础模型。此流量通过NAT网关路由,隐藏实例的私有IP。数据访问: 要加载大型数据集,实例会连接到Amazon S3等服务。我们没有通过互联网发送此流量,而是使用VPC端点。这在我们的VPC和存储服务之间创建了私密、安全的连接,提高了安全性并可能降低数据传输成本。部署: 模型训练完成后,它会保存到对象存储中。推理端点(可以是经济高效的CPU实例)随后可以从存储中加载模型以提供服务,同样使用安全的VPC端点。分布式性能的网络配置对于跨多个实例的大规模分布式训练任务,连接这些实例的网络与GPU本身同样重要。节点间梯度持续交换可能很快成为瓶颈。云服务提供商提供专门功能来处理此问题:高带宽实例: 主要云服务提供商提供网络带宽为100 Gbps、200 Gbps甚至更高的实例系列。运行分布式训练时,选择这些实例是获得良好性能的必要条件。放置组(AWS)/ 协同位置(GCP/Azure): 这些功能允许您请求将实例放置在数据中心内物理位置紧密靠近的地方。这大幅减少了节点间通信的延迟,这是影响分布式训练性能的重要因素。将高带宽实例与低延迟放置策略结合,您可以确保计算集群高效通信,让您昂贵的GPU得到充分使用。