天天看點

JindoFS緩存加速資料湖上的機器學習訓練

背景介紹

近些年,機器學習領域快速發展,廣泛應用于各行各業。對于機器學習領域的從業人員來說,充滿了大量的機遇和挑戰。Tensorflow、PyTorch等深度學習架構的出現,使開發者能夠輕松地建構和部署機器學習應用。随着近些年雲計算技術的不斷成熟,越來越多的人接受将他們的開發、生産服務搬到雲上平台,因為雲環境在計算成本、規模擴充上比傳統平台有顯著的優勢。雲上平台為了達到彈性、節約成本,通常采用計算存儲分離的解決方案。使用對象存儲建構資料湖,可以降低成本、存儲海量資料。在機器學習這個場景下,尤其适合将訓練資料存儲在資料湖上。

将訓練資料存儲在資料湖上具有以下優勢:

1.不需要将資料提前同步到訓練節點。傳統方式,我們需要将資料提前導入到計算節點的本地磁盤。而如果将資料存儲在對象存儲上,我們可以直接讀取資料進行訓練,減少準備工作。

2.可以存儲更大的訓練資料,不再受限于計算節點本地磁盤大小。對于深度學習,擁有更多的資料,往往能取得更好的訓練效果。

3.計算資源可以彈性擴縮容,節約成本。機器學習通常使用使用更多核數的CPU或高端GPU,較為昂貴,對象存儲的成本就相對較低。将訓練資料存儲在資料湖上,可以與計算資源解耦。計算資源可以按需付費,随時釋放,達到節省成本的目的。

然而,這種方式同時存在着一些問題和挑戰:

1.遠端拉取資料的延遲和帶寬無法随着計算資源線性擴充。硬體計算能力在不斷發展,利用GPU進行計算可以取得更快的訓練速度。使用雲上彈性計算ECS、容器服務可以快速排程起大規模的計算資源。通路對象存儲需要走網絡,得益于網絡技術的發展,我們通路對象存儲有一個高速網絡,即便如此,對象存儲的網絡延時和帶寬無法随着叢集規模線性擴充,可能會成為瓶頸,限制了訓練速度。在計算存儲分離架構下,如何高效地通路到這些資料,成為了一個巨大的挑戰。

2.需要更加便捷的通用的資料通路方式。深度學習架構如TensorFlow對于GCS、HDFS支援較為友好,而對于諸多第三方對象存儲的支援上較為滞後。而POSIX接口是一種更自然友好的方式,使用類似于本地磁盤一樣的方式通路資料,大大簡化了開發者對存儲系統的适配工作。

為了解決資料湖上機器學習訓練正常方案存在的上述問題,JindoFS 針對這種場景提供了緩存加速優化方案。

基于JindoFS緩存加速的訓練架構方案

JindoFS提供了一個計算側的分布式緩存系統,可以有效利用計算叢集上的本地存儲資源(磁盤或者記憶體)緩存OSS上的熱資料,進而減少對OSS上資料的反複拉取,消耗網絡帶寬。

JindoFS緩存加速資料湖上的機器學習訓練

記憶體緩存

對于深度學習,我們可以選擇計算能力更強的GPU機型,來擷取更快的訓練速度。此時需要高速的記憶體吞吐,才能讓GPU充分跑滿。此時我們可以使用JindoFS基于記憶體搭建分布式高速緩存。當整個叢集的所有記憶體加起來足以支撐整個資料集時(除去任務本身所需記憶體量),我們就可以利用記憶體緩存以及本地高速網絡,來提供高的資料吞吐,加快計算速度。

磁盤緩存

對于一些機器學習場景,訓練資料的規模超過了記憶體所能承載的大小,以及訓練所需的CPU/GPU能力要求沒有那麼高,而要求資料通路有較高的吞吐。此時計算的瓶頸會受限于網絡帶寬壓力。是以我們可以搭建使用本地SSD作為緩存媒體的JindoFS分布式緩存服務,利用本地存儲資源緩存熱資料,來達到提高訓練速度的效果。

FUSE接口

JindoFS包含了FUSE用戶端,提供了簡便的、熟悉的資料通路方式。通過FUSE程式将JindoFS叢集執行個體映射到本地檔案系統,就可以像通路本地磁盤檔案一樣,享受到JindoFS帶來的加速效果。

實戰:搭建Kubernetes + JindoFS + Tensorflow訓練叢集

1、建立kubernetes叢集

我們前往阿裡雲-容器服務,建立一個Kubernetes叢集。

JindoFS緩存加速資料湖上的機器學習訓練

2、安裝JindoFS服務

2.1 前往容器服務->應用目錄,進入“JindoFS”安裝配置頁面。

JindoFS緩存加速資料湖上的機器學習訓練

2.2 配置參數

完整的配置模闆可以參考

容器服務-應用目錄-jindofs安裝說明

配置OSS Bucket和AK,參考文檔使用JFS Scheme的部署方式。我們需要修改以下配置項:

jfs.namespaces: test
jfs.namespaces.test.mode :  cache
jfs.namespaces.test.oss.uri :  oss://xxx-sh-test.oss-cn-shanghai-internal.aliyuncs.com/xxx/k8s_c1
jfs.namespaces.test.oss.access.key :  xx
jfs.namespaces.test.oss.access.secret :  xx           

通過這些配置項,我們建立了一個名為test的命名空間,指向了chengli-sh-test這個OSS bucket的xxx/k8s_c1目錄。後續我們通過JindoFS操作test命名空間的時候,就等同于操作該OSS目錄。

2.3 安裝服務

JindoFS緩存加速資料湖上的機器學習訓練

1.驗證安裝成功

# kubectl get pods
NAME                               READY   STATUS      RESTARTS   AGE
jindofs-fuse-267vq                 1/1     Running     0          143m
jindofs-fuse-8qwdv                 1/1     Running     0          143m
jindofs-fuse-v6q7r                 1/1     Running     0          143m
jindofs-master-0                   1/1     Running     0          143m
jindofs-worker-mncqd               1/1     Running     0          143m
jindofs-worker-pk7j4               1/1     Running     0          143m
jindofs-worker-r2k99               1/1     Running     0          143m           

2.在主控端上通路/mnt/jfs/目錄,即等同于通路JindoFS的檔案

ls /mnt/jfs/test/
15885689452274647042-0  17820745254765068290-0  entrypoint.sh           

3.安裝kubeflow(arena)

**Kubeflow 是開源的基于Kubernetes雲原生AI平台,用于開發、編排、部署和運作可擴充的便攜式機器學習工作負載。Kubeflow支援兩種TensorFlow架構分布式訓練,分别是參數伺服器模式和AllReduce模式。基于阿裡雲容器服務團隊開發的

Arena

,使用者可以送出這兩種類型的分布式訓練架構。

我們參照

github repo

上的使用文檔進行安裝。

**

4. 啟動TF作業

arena submit mpi \
--name job-jindofs\
 --gpus=8 \
 --workers=4 \
 --working-dir=/perseus-demo/tensorflow-demo/ \
 --data-dir /mnt/jfs/test:/data/imagenet \
 -e DATA_DIR=/data/imagenet -e num_batch=1000 \
 -e datasets_num_private_threads=8  \
 --image=registry.cn-hangzhou.aliyuncs.com/tensorflow-samples/perseus-benchmark-dawnbench-v2:centos7-cuda10.0-1.2.2-1.14-py36 \
 ./launch-example.sh 4 8           

本文中,我們送出了一個ResNet-50模型作業,使用的是大小144GB的ImageNet資料集。資料以TFRecord格式存儲,每個TFRecord大小約130MB。模型作業和ImageNet資料集都可以在網上輕松找到。這些參數中,/mnt/jfs/是通過JindoFS FUSE挂載到主控端的一個目錄,test是一個namespace,對應一個oss bucket。我們使用--data-dir将這個目錄映射到容器内的/data/imagenet目錄,這樣作業就可以讀取到OSS的資料了,對于讀取過的資料,會自動緩存到JindoFS叢集本地。

總結

通過JindoFS的緩存加速服務,隻需要讀取一遍資料,大部分的熱資料将緩存到本地記憶體或磁盤,深度學習的訓練速度可以得到顯著提高。對于大部分訓練,我們還可以使用預加載的方式先将資料加載到緩存中,來加快下一次訓練的速度。

更多資料湖技術相關的文章請點選:[阿裡雲重磅釋出雲原生資料湖體系

](

https://developer.aliyun.com/article/772298?spm=a2c6h.12873581.0.dArticle772298.28042b0fFZNGve&groupCode=datalakeformation)

更多資料湖相關資訊交流請加入阿裡巴巴資料湖技術釘釘群

JindoFS緩存加速資料湖上的機器學習訓練

繼續閱讀