1. 程式人生 > >在阿里雲Kubernetes上使用ENI進行分散式機器學習訓練

在阿里雲Kubernetes上使用ENI進行分散式機器學習訓練

概述

模型訓練是機器學習最主要的實踐場景,尤其以使用機器學習框架TensorFlow進行模型訓練最為流行,但是隨著機器學習的平臺由單機變成叢集,這個問題變得複雜了。利用KubeFlow社群的自定義資源TFJob/MPIJob/MxNetJob可以在Kubernetes叢集方便的執行其不同的分散式訓練框架,解決了易用性和訓練生命週期管理的問題。而阿里雲容器服務開源的Arena能讓這一個操作更加簡單直觀。

但是在實踐會中發現如果是以GPU為計算裝置,在多機場景下,網路頻寬和延遲會成為拖累訓練速度的主要瓶頸。所以在實踐中,多數人會選擇放棄使用overlay網路,直接選用HostNetwork,避免vxlan帶來的效能開銷。但是HostNetwork的缺點也顯而易見,一個是埠的管理複雜度,另外一個是主機網路的安全性隱患。

那麼有沒有一個方案能同時兼顧隔離性和效能?阿里雲上的彈性網絡卡是一個很好的選擇,而阿里雲Kubernetes容器服務自研的網路外掛Terway支援將阿里雲的彈性網絡卡分配給Pod,使用者可以很簡單的可以使用到阿里雲的ENI能力。

elastic_netdev.png

在本文中,將向您介紹如何利用Arena進行分散式模型訓練

準備Kubernetes叢集

阿里雲容器服務Kubernetes 1.11.2目前已經上線,可以通過容器服務管理控制檯非常方便地快速建立 Kubernetes 叢集,在選擇網路外掛是一定要選擇Terway。具體過程請參考建立Kubernetes叢集

terway.jpg

安裝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。