在阿里云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

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

yum install bash-completion -y
echo "source <(arena completion bash)" >> ~/.bashrc
source <(arena completion bash)"

运行支持阿里云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

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"

这里针对弹性网卡的配置是添加了一行--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>

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。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
AI加速引擎PAI-TorchAcc:OLMo训练加速最佳实践
阿里云机器学习平台PAI开发的Pytorch训练加速框架PAI-TorchAcc已接入最新开源的大语言模型 OLMo。在保证模型效果和易用性的前提下,PAI-TorchAcc相对 PyTorch 性能在 OLMo 1B 上加速比达到 1.64X,在 OLMo 7B 上加速比达到 1.52X。本文分析了 PAI-TorchAcc 的性能收益来源。
|
2月前
|
机器学习/深度学习 人工智能 Java
机器学习PAI报错问题之跑collective gpu分布式报错如何解决
人工智能平台PAI是是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务;本合集将收录PAI常见的报错信息和解决策略,帮助用户迅速定位问题并采取相应措施,确保机器学习项目的顺利推进。
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
在阿里云机器学习平台上布置一个PyTorch模型
在阿里云机器学习平台上布置一个PyTorch模型【1月更文挑战第21天】【1月更文挑战第105篇】
164 1
|
3月前
|
机器学习/深度学习 数据采集 自然语言处理
机器学习模型的部署与上线:从训练到实际应用
在机器学习中,模型训练只是整个过程的一部分。将训练好的模型部署到实际应用中,并使其稳定运行,也是非常重要的。本文将介绍机器学习模型的部署与上线过程,包括数据处理、模型选择、部署环境搭建、模型调优等方面。同时,我们也会介绍一些实际应用场景,并分享一些经验和技巧。
|
3月前
|
Cloud Native Java 开发工具
云原生 阿里云分布式文件系统 对象存储OSS 服务配置
【1月更文挑战第8天】云原生 阿里云分布式文件系统 对象存储OSS 服务配置
|
23天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
16 0
|
28天前
|
机器学习/深度学习 人工智能 分布式计算
机器学习PAI常见问题之配了exporter_type: "final",训练完却没有如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
30天前
|
机器学习/深度学习 SQL 人工智能
机器学习PAI常见问题之训练模型报错如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
1月前
|
机器学习/深度学习 算法 数据可视化
机器学习-生存分析:如何基于随机生存森林训练乳腺癌风险评估模型?
机器学习-生存分析:如何基于随机生存森林训练乳腺癌风险评估模型?
32 1
|
2月前
|
机器学习/深度学习 人工智能 开发工具
机器学习PAI报错问题之配了tf_config开启训练报错如何解决
人工智能平台PAI是是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务;本合集将收录PAI常见的报错信息和解决策略,帮助用户迅速定位问题并采取相应措施,确保机器学习项目的顺利推进。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多