在阿里云Kubernetes上使用ENI进行分布式机器学习训练

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 当云原生技术拥抱高性能计算领域的时候,一个重要的问题是如何在确保性能不受损失的前提下,更加灵活和安全进行运算。容器服务推出支持Terway网络支持弹性网卡,帮助用户保证安全隔离的前提下,享受着和主机网络一样的高性能。

概述

模型训练是机器学习最主要的实践场景,尤其以使用机器学习框架TensorFlow进行模型训练最为流行,但是随着机器学习的平台由单机变成集群,这个问题变得复杂了。利用KubeFlow社区的自定义资源TFJob/MPIJob/MxNetJob可以在Kubernetes集群方便的运行其不同的分布式训练框架,解决了易用性和训练生命周期管理的问题。而阿里云容器服务开源的Arena能让这一个操作更加简单直观。

但是在实践会中发现如果是以GPU为计算设备,在多机场景下,网络带宽和延迟会成为拖累训练速度的主要瓶颈。所以在实践中,多数人会选择放弃使用overlay网络,直接选用HostNetwork,避免vxlan带来的性能开销。但是HostNetwork的缺点也显而易见,一个是端口的管理复杂度,另外一个是主机网络的安全性隐患。

那么有没有一个方案能同时兼顾隔离性和性能?阿里云上的弹性网卡是一个很好的选择,而阿里云Kubernetes容器服务自研的网络插件Terway支持将阿里云的弹性网卡分配给Pod,用户可以很简单的可以使用到阿里云的ENI能力。

在本文中,将向您介绍如何利用Arena进行分布式模型训练

准备Kubernetes集群

阿里云容器服务Kubernetes 1.11.2目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群,在选择网络插件是一定要选择Terway。具体过程请参考创建Kubernetes集群

terway

安装Arena

安装Arena的过程可以参考安装文档。另外也可以直接在Kubernetes的Master节点运行下面的docker run命令

docker run -itd --name arena -v /:/host -v /root/.kube/config:/root/.kube/config -e KUBECONFIG=/root/.kube/config cheyang/arena:0.1.0-20181101121817-81ac1e3
AI 代码解读

另外arena命令支持auto complete,可以运行以下命令增加这种能力

yum install bash-completion -y
echo "source <(arena completion bash)" >> ~/.bashrc
source <(arena completion bash)"
AI 代码解读

运行支持阿里云ENI的Arena命令

  1. 在提交任务前,可以查询节点的ip列表,它们是在192.168.0.0/16网段
kubectl get no -o=yaml |grep -i address:
    - address: 192.168.0.116
    - address: 192.168.0.115
    - address: 192.168.0.118
    - address: 192.168.0.117
    - address: 192.168.0.114
AI 代码解读

2. 下面运行命令的目的是两机八卡的ResNet-50分布式模型训练ImageNet,在这种带宽密集型的网络模型训练,使用mpijob的分布式训练模式+Uber的Horovod框架的效果较好。这里会使用TensorFlow的Benchmark程序进行测试。

arena submit mpijob --name=tf-eni \
            --annotation=k8s.aliyun.com/eni=true \
            --workers=2 \
            --syncMode=git \
            --syncSource=https://github.com/tensorflow/benchmarks.git \
            --gpus=8 \
            --cpu=50 \
            --memory=200Gi \
            --env=GIT_SYNC_BRANCH=cnn_tf_v1.9_compatible \
            --image=uber/horovod:0.13.10-tf1.9.0-torch0.4.0-py3.5 \
            "mpirun --allow-run-as-root -np 16 -oversubscribe --bind-to none -x NCCL_SOCKET_IFNAME=eth0 python code/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --num_gpus=1 --data_name=imagenet --model=resnet50 --variable_update=horovod --horovod_device=gpu --num_batches=300 --batch_size=128 --optimizer=momentum"
AI 代码解读

这里针对弹性网卡的配置是添加了一行--annotation=k8s.aliyun.com/eni=true

3. 任务提交后,查询到部署任务的Pod也是同在192.168.0.0/16网段, 实际上它们使用的就是弹性网卡

kubectl get po -o=wide -l=release=tf-eni
NAME                           READY     STATUS    RESTARTS   AGE       IP              NODE                                  NOMINATED NODE
tf-eni-mpijob-launcher-c9px7   1/1       Running   0          16s       192.168.0.136   cn-huhehaote.i-09790vg0alb65q1e9   <none>
tf-eni-mpijob-worker-0         1/1       Running   0          30s       192.168.0.134   cn-huhehaote.i-b4qysu7phen3sah9r   <none>
tf-eni-mpijob-worker-1         1/1       Running   0          32s       192.168.0.135   cn-huhehaote.i-b4qysu7phen3sah9s   <none>
AI 代码解读

4. 运行结束查看日志

以下日志为ENI网络配置下性能数据,

----------------------------------------------------------------
300    images/sec: 189.6 +/- 0.8 (jitter = 12.8)    7.843
----------------------------------------------------------------
total images/sec: 3033.57
----------------------------------------------------------------
300    images/sec: 189.6 +/- 0.8 (jitter = 12.7)    7.836
----------------------------------------------------------------
total images/sec: 3033.57
----------------------------------------------------------------
AI 代码解读

以下为HostNetwork网络的性能数据

----------------------------------------------------------------
300    images/sec: 187.7 +/- 0.8 (jitter = 12.5)    7.807
----------------------------------------------------------------
total images/sec: 3001.91
----------------------------------------------------------------
300    images/sec: 187.6 +/- 0.8 (jitter = 12.9)    7.804
----------------------------------------------------------------
total images/sec: 3001.91
----------------------------------------------------------------
AI 代码解读

通过对比发现ENI和Host网络配置相比性能上相差无几。

总结

当云原生技术拥抱高性能计算领域的时候,一个重要的问题是如何在确保性能不受损失的前提下,更加灵活和安全进行运算。容器服务推出支持Terway网络支持弹性网卡,帮助用户保证安全隔离的前提下,享受着和主机网络一样的高性能。而利用Arena可以方便的在分布式训练的场景下享受到这个红利,欢迎大家阿里云上的容器服务以及开源机器学习工具Arena。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
必嘫
+关注
目录
打赏
0
0
0
1
78493
分享
相关文章
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
32 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
MT-MegatronLM:国产训练框架逆袭!三合一并行+FP8黑科技,大模型训练效率暴涨200%
MT-MegatronLM 是摩尔线程推出的面向全功能 GPU 的开源混合并行训练框架,支持多种模型架构和高效混合并行训练,显著提升 GPU 集群的算力利用率。
79 18
DistilQwen2.5蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen2.5 是阿里云人工智能平台 PAI 推出的全新蒸馏大语言模型系列。通过黑盒化和白盒化蒸馏结合的自研蒸馏链路,DistilQwen2.5各个尺寸的模型在多个基准测试数据集上比原始 Qwen2.5 模型有明显效果提升。这一系列模型在移动设备、边缘计算等资源受限的环境中具有更高的性能,在较小参数规模下,显著降低了所需的计算资源和推理时长。阿里云的人工智能平台 PAI,作为一站式的机器学习和深度学习平台,对 DistilQwen2.5 模型系列提供了全面的技术支持。本文详细介绍在 PAI 平台使用 DistilQwen2.5 蒸馏小模型的全链路最佳实践。
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
DeepRec Extension 打造稳定高效的分布式训练
DeepRec Extension 打造稳定高效的分布式训练
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
DeepSeek进阶开发与应用4:DeepSeek中的分布式训练技术
随着深度学习模型和数据集规模的扩大,单机训练已无法满足需求,分布式训练技术应运而生。DeepSeek框架支持数据并行和模型并行两种模式,通过将计算任务分配到多个节点上并行执行,显著提高训练效率。本文介绍DeepSeek中的分布式训练技术,包括配置与启动方法,帮助用户轻松实现大规模模型训练。数据并行通过`MirroredStrategy`同步梯度,适用于大多数模型;模型并行则通过`ParameterServerStrategy`异步处理大模型。DeepSeek简化了分布式环境配置,支持单机多卡和多机多卡等场景。
|
2月前
如何看PAI产品下训练(train)模型任务的费用细节
PAI产品下训练(train)模型任务的费用细节
106 6
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。

相关产品

  • 容器服务Kubernetes版