使用TensorFlow,GPU和Docker容器进行深度学习

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 数据科学家使用GPU来提高TensorFlow的计算速度,但GPU价格昂贵,也需要对其所占用的资源进行认真的管理。本文将带你来一起解决这一问题。

在过去的几个月中,我和多个企业的数据科学团队进行了多次合作,也看到越来越多的机器学习和深度学习框架被广泛应用到实际生活中。

与大数据分析和数据科学中的其他用例一样,这些团队希望在BlueData EPIC软件平台上的Docker容器中运行他们最喜欢的深度学习框架和工具。因此,我的一部分工作就是尝试使用这些新工具,确保在我们的平台上能够运行,并且能够帮助这些团队开发出可以解决一些问题的新的功能。

TensorFlow是深度学习和机器学习最流行的开源框架之一。TensorFlow最初是由Google研究团队开发的并致力于解决深度神经网络的机器学习研究。另外,TensorFlow也适用于许多其他应用场景:图像识别,自由文本数据的自然语言处理以及威胁检测和监视等。

TensorFlow是一个用于对一系列任务进行机器学习的开源软件库,它是一个构建和训练神经网络来检测、解读模式和相关性的系统,它与人类学习和推理相似(但不一样)。”——维基百科

TensorFlow可以在各种异构系统(包括CPUGPU)上对计算资源进行合理分配。与我合作过的几个数据科学团队使用GPU来提高TensorFlow的计算速度,但GPU价格昂贵,他们需要对TensorFlow所占用的资源进行认真的管理

部署TensorFlow的注意事项

以下是部署数据科学应用程序和TensorFlow时的一些注意事项(尤其是在企业大规模部署时更应该注意):

1.如何对部署的复杂性进行管理,例如在OS,内核库和TensorFlow不同版本之间进行部署。

2.如何在作业期间支持创建临时集群。

3.如何隔离正在使用的资源并阻止同时队同一资源的访问请求。

4.如何在共享的多租户环境中对GPUCPU资源进行管理和分配。

BlueData EPIC软件平台就可以解决这些问题,它能够按照数据科学团队的需要访问各种不同的大数据分析、数据科学、机器学习和深度学习工具。在一个灵活、弹性和安全的多租户架构中使用Docker容器,BDaaSBig-Data-as-a-Service)软件平台可以支持大规模分布式数据科学和深度学习用例。

BlueData的最新版本可以支持启动采用GPU加速的集群,并且支持TensorFlowGPUIntel架构的CPU上进行深度学习。数据科学家可以在BlueData EPIC软件平台上启动即时TensorFlow集群在Docker容器上进行深度学习。BlueData支持在Intel Xeon硬件和Intel MKL上运行基于CPUTensorFlow,也支持采用NVIDIA CUDA库、CUDA扩展以及用于Docker容器的字符设备映射的基于GPUTensorFlow

BlueData EPIC软件平台可以为TensorFlow提供自助服务、弹性和安全环境,无论是在本地、公共云还是在二者的混合结构中都拥有同样的界面,不管其底层架构多么不同,用户都会有相同的用户体验。

如下图所示,用户可以像用于其他大数据分析、数据科学和机器学习环境一样,能够很容易地将带有BigDL的即时TensorFlow集群在BlueData软件平台上进行深度学习。并且,用户可以指定在TensorFlow运行的Docker容器放置在有GPU还是CPU配置的基础架构,以及在公共云还是在本地。

2ef860179a07986d0e3d0889092c9470ec13c7f6 

按需创建TensorFlow集群

BlueData EPIC软件平台上,用户只需点击几下鼠标即可根据自己的需求创建TensorFlow群集。BlueData的最新版本引入主机标签,用户可以创建具有主机标记的基于GPUCPUTensorFlow集群,这些主机标记为特定工作负载指定所需要的硬件,如下图所示。

6dd552a4cced89508d596c51aa2bdf640d832562

一旦创建完成,TensorFlow集群将拥有一个或多个Docker容器节点,这些Docker容器使用TensorFlow软件和相应的GPU/CPU加速库进行部署。例如,基于GPUTensorFlow群集将在Docker容器内具有NVIDIA CUDACUDA扩展;而基于CPUTensorFlow群集则在Docker容器中具有Intel MKLJupyter Notebook扩展。

高效的GPU资源管理

GPU和特定的CPU通常不会作为Docker容器的独立资源。BlueData EPIC软件平台通过在所有主机上管理GPU的共享池并在群集创建期间将GPU所请求的数量分配给群集来处理此问题。这种排他性(或隔离性)保证了对深度学习作业的服务质量,并防止多个处理作业尝试同时访问同一资源。

对于今天的大多数企业来说,GPU是一种需要有效利用的高端资源。当一个集群没有在使用或完成一项作业时,BlueData EPIC软件平台可以停止该集群使用并将GPU分配给其他正在使用的集群。 这允许用户在不同的租户环境中创建多个集群,并且仅仅在集群需要时才使用GPU,而不需要删除或重新创建群集群。还有一种机制,即在作业期间创建一个群集作为暂时性集群。

提高用户生产力

一旦TensorFlow集群创建完成,用户可以使用AD / LDAP控制的SSH启用容器并保护Jupyter Notebook

为了进行验证和测试,TensorFlow集群默认包含Jupyter Notebook,用例如下图所示。

d5a42ece222be19abe5d3dbeb459f20eafe25fcc

上图来自于GitHub回购。这些源码和教程可供用户使用,并可以立即投入应用中去。

BlueData EPIC软件平台上使用TensorFlow库和图表绘制的MNIST数据集的输入数字图像的重建示例如下图所示。

297d802aa7e385d557086c3fd567ad6726224fd9

根据输入图像和模型(使用TensorFlow GradientDescentOptimizer训练)提取数据集和模型预测如下图所示:

f9ae261457186d559797cd2947cc276b82a0163b

对输入图像和输出预测结果的对比如下图所示:

36db230163666fd77b0873d9ee08667b645c9b98

对运行的TensorFlow集群更新

随着新的库和软件包不断被推出,数据科学团队的需求也在不断的变化,因此BlueData EPIC软件平台提供了一种称为“操作脚本”的机制,该机制允许用户使用新的库和软件包对正在运行集群的所有节点进行更新。在长时间运行的交互或批处理作业中,用户还可以使用基于WebUIRESTful APIPython作业提交。

 

 以上为译文。

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《Deep Learning With TensorFlow, GPUs, and Docker Containers》,译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文 

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
9天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
134 55
|
14天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
151 77
|
23天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
1天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
16 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
7天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
22 3
实战~如何组织一个多容器项目docker-compose
|
16天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
59 3
|
23天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
56 7
|
23天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
30 5
|
23天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
53 4
|
23天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
52 3