概述
模型训练是机器学习最主要的实践场景,尤其以使用机器学习框架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集群

安装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另外arena命令支持auto complete,可以运行以下命令增加这种能力
yum install bash-completion -yecho "source <(arena completion bash)" >> ~/.bashrcsource <(arena completion bash)"运行支持阿里云ENI的Arena命令
- 在提交任务前,可以查询节点的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.1142. 下面运行命令的目的是两机八卡的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/ s/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"这里针对弹性网卡的配置是添加了一行
--annotation=k8s.aliyun.com/eni=true
3. 任务提交后,查询到部署任务的Pod也是同在192.168.0.0/16网段, 实际上它们使用的就是弹性网卡
kubectl get po -o=wide -l=release=tf-eniNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODEtf-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>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----------------------------------------------------------------以下为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----------------------------------------------------------------通过对比发现ENI和Host网络配置相比性能上相差无几。
总结
当云原生技术拥抱高性能计算领域的时候,一个重要的问题是如何在确保性能不受损失的前提下,更加灵活和安全进行运算。容器服务推出支持Terway网络支持弹性网卡,帮助用户保证安全隔离的前提下,享受着和主机网络一样的高性能。而利用Arena可以方便的在分布式训练的场景下享受到这个红利,欢迎大家阿里云上的容器服务以及开源机器学习工具Arena。
继续阅读与本文标签相同的文章
简单谈谈python基本数据类型
web页面和微信小程序页面实现瀑布流效果
-
阿里云数据库RDS通用型和独享型区别在哪?如何选择?
2026-05-18栏目: 教程
-
如何选购配置云数据库RDS MySQL 的流程 新手必看
2026-05-18栏目: 教程
-
跨境电商女装开发风向标
2026-05-18栏目: 教程
-
线上线下场景全方面打通,小程序成为家居行业的新卖点!
2026-05-18栏目: 教程
-
下载一款手机软件后,为何总是要让我们授权一些,看似毫无关联的权限?
2026-05-18栏目: 教程
