188建站系统源码,国家最新政策解读,512内存做网站,抖音推广运营公司简介#xff1a; JindoFS提供了一个计算侧的分布式缓存系统#xff0c;可以有效利用计算集群上的本地存储资源#xff08;磁盘或者内存#xff09;缓存OSS上的热数据#xff0c;从而减少对OSS上数据的反复拉取#xff0c;消耗网络带宽。
背景介绍
近些年#xff0c;机…简介 JindoFS提供了一个计算侧的分布式缓存系统可以有效利用计算集群上的本地存储资源磁盘或者内存缓存OSS上的热数据从而减少对OSS上数据的反复拉取消耗网络带宽。
背景介绍
近些年机器学习领域快速发展广泛应用于各行各业。对于机器学习领域的从业人员来说充满了大量的机遇和挑战。Tensorflow、PyTorch等深度学习框架的出现使开发者能够轻松地构建和部署机器学习应用。随着近些年云计算技术的不断成熟越来越多的人接受将他们的开发、生产服务搬到云上平台因为云环境在计算成本、规模扩展上比传统平台有显著的优势。云上平台为了达到弹性、节约成本通常采用计算存储分离的解决方案。使用对象存储构建数据湖可以降低成本、存储海量数据。在机器学习这个场景下尤其适合将训练数据存储在数据湖上。
将训练数据存储在数据湖上具有以下优势
1.不需要将数据提前同步到训练节点。传统方式我们需要将数据提前导入到计算节点的本地磁盘。而如果将数据存储在对象存储上我们可以直接读取数据进行训练减少准备工作。
2.可以存储更大的训练数据不再受限于计算节点本地磁盘大小。对于深度学习拥有更多的数据往往能取得更好的训练效果。
3.计算资源可以弹性扩缩容节约成本。机器学习通常使用使用更多核数的CPU或高端GPU较为昂贵对象存储的成本就相对较低。将训练数据存储在数据湖上可以与计算资源解耦。计算资源可以按需付费随时释放达到节省成本的目的。
然而这种方式同时存在着一些问题和挑战
1.远端拉取数据的延迟和带宽无法随着计算资源线性扩展。硬件计算能力在不断发展利用GPU进行计算可以取得更快的训练速度。使用云上弹性计算ECS、容器服务可以快速调度起大规模的计算资源。访问对象存储需要走网络得益于网络技术的发展我们访问对象存储有一个高速网络即便如此对象存储的网络延时和带宽无法随着集群规模线性扩展可能会成为瓶颈限制了训练速度。在计算存储分离架构下如何高效地访问到这些数据成为了一个巨大的挑战。
2.需要更加便捷的通用的数据访问方式。深度学习框架如TensorFlow对于GCS、HDFS支持较为友好而对于诸多第三方对象存储的支持上较为滞后。而POSIX接口是一种更自然友好的方式使用类似于本地磁盘一样的方式访问数据大大简化了开发者对存储系统的适配工作。
为了解决数据湖上机器学习训练常规方案存在的上述问题JindoFS 针对这种场景提供了缓存加速优化方案。
基于JindoFS缓存加速的训练架构方案
JindoFS提供了一个计算侧的分布式缓存系统可以有效利用计算集群上的本地存储资源磁盘或者内存缓存OSS上的热数据从而减少对OSS上数据的反复拉取消耗网络带宽。 内存缓存
对于深度学习我们可以选择计算能力更强的GPU机型来获取更快的训练速度。此时需要高速的内存吞吐才能让GPU充分跑满。此时我们可以使用JindoFS基于内存搭建分布式高速缓存。当整个集群的所有内存加起来足以支撑整个数据集时除去任务本身所需内存量我们就可以利用内存缓存以及本地高速网络来提供高的数据吞吐加快计算速度。
磁盘缓存
对于一些机器学习场景训练数据的规模超过了内存所能承载的大小以及训练所需的CPU/GPU能力要求没有那么高而要求数据访问有较高的吞吐。此时计算的瓶颈会受限于网络带宽压力。因此我们可以搭建使用本地SSD作为缓存介质的JindoFS分布式缓存服务利用本地存储资源缓存热数据来达到提高训练速度的效果。
FUSE接口
JindoFS包含了FUSE客户端提供了简便的、熟悉的数据访问方式。通过FUSE程序将JindoFS集群实例映射到本地文件系统就可以像访问本地磁盘文件一样享受到JindoFS带来的加速效果。
实战搭建Kubernetes JindoFS Tensorflow训练集群
1、创建kubernetes集群
我们前往阿里云-容器服务创建一个Kubernetes集群。 2、安装JindoFS服务
2.1 前往容器服务-应用目录进入“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 安装服务 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.安装kubeflowarena
**Kubeflow 是开源的基于Kubernetes云原生AI平台用于开发、编排、部署和运行可扩展的便携式机器学习工作负载。Kubeflow支持两种TensorFlow框架分布式训练分别是参数服务器模式和AllReduce模式。基于阿里云容器服务团队开发的Arena,用户可以提交这两种类型的分布式训练框架。 我们参照github repo上的使用文档进行安装。 **
4. 启动TF作业
arena submit mpi \
--name job-jindofs\--gpus8 \--workers4 \--working-dir/perseus-demo/tensorflow-demo/ \--data-dir /mnt/jfs/test:/data/imagenet \-e DATA_DIR/data/imagenet -e num_batch1000 \-e datasets_num_private_threads8 \--imageregistry.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的缓存加速服务只需要读取一遍数据大部分的热数据将缓存到本地内存或磁盘深度学习的训练速度可以得到显著提高。对于大部分训练我们还可以使用预加载的方式先将数据加载到缓存中来加快下一次训练的速度。 原文链接 本文为阿里云原创内容未经允许不得转载。