深度学习AMI开发人员指南深度学习AMI开发人员指南深度学习AMI:开发人员指南深度学习AMI开发人员指南TableofContents什么是AWSDeepLearningAMI1关于本指南1Prerequisites1示例用法1功能1预装框架1预装GPU软件2ElasticInference支持2模型处理和可视化2入门3如何开始使用DLAMI3DLAMI选择3Conda3Base5CUDA5OS6AMI选项6Conda7Base8CUDA10.
2:8CUDA10.
1:9CUDA109Ubuntu18.
0410Ubuntu16.
0410AmazonLinux11AmazonLinux212Windows13实例选择14定价14区域可用性14GPU15CPU15启动DLAMI16步骤1:启动DLAMI16EC2控制台16步骤2:连接到DLAMI17步骤3:保护DLAMI实例17步骤4:测试您的DLAMI17清除18Jupyter设置18保护Jupyter18启动服务器19配置客户端19登录JupyterNotebook服务器20使用DLAMI24CondaDLAMI24Introductiontothe采用Conda的DeepLearningAMI24LogintoYourDLAMI24StarttheTensorFlowEnvironment26SwitchtothePyTorchPython3Environment26SwitchtotheMXNetPython3Environment27RemovingEnvironments28基础DLAMI28使用DeepLearningBaseAMI28iii深度学习AMI开发人员指南配置CUDA版本28Jupyter笔记本电脑29导航已安装的教程29通过Jupyter切换环境29教程3010分钟教程30激活框架30调试和可视化43分布式训练46ElasticFabricAdapter62GPU监控和优化74AWSInferentia79推理97将框架用于ONNX100模型处理108升级DLAMI114DLAMI升级114软件更新114安全性115数据保护115IdentityandAccessManagement116使用身份进行身份验证116使用策略管理访问117IAM替换为AmazonEMR119日志记录和监控119合规性验证119恢复功能119基础设施安全120相关信息121论坛121博客121常见问题121的发行说明DLAMI124DLAMI的弃用功能125文档历史记录126AWS词汇表129cxxxiv深度学习AMI开发人员指南关于本指南什么是AWSDeepLearningAMI欢迎阅读AWSDeepLearningAMI用户指南.
AWSDeepLearningAMI(DLAMI)是在云中进行深度学习的一站式商店.
此自定义计算机实例可用于大多数AmazonEC2区域中的各种实例类型,从仅包含CPU的小型实例到最新的高性能多GPU实例.
它预配置了NVIDIACUDA和NVIDIAcuDNN以及最常用的深度学习框架的最新版本.
关于本指南本指南将帮助您启动并使用DLAMI.
它介绍了用于培训和推导的深度学习的几种常见使用案例.
本指南还介绍了如何针对您的用途选择合适的AMI和您喜欢的实例类型.
DLAMI针对每个框架提供多个教程.
它还提供有关分布式训练、调试、使用AWSInferentia和其他关键概念的教程.
您将找到关于如何配置Jupyter以在浏览器中运行教程的说明.
Prerequisites您应该熟悉命令行工具和基本Python才能成功运行DLAMI.
框架自身提供有关如何使用每个框架的教程,但是本指南可以向您展示如何激活每个框架并找到适当的入门教程.
示例DLAMI用法了解深度学习:的DLAMI是学习或教学机器学习和深度学习框架的绝佳选择.
它不需要对每个框架的安装进行故障排除,并在同一台计算机上运行框架.
DLAMI附带JupyterNotebook,可以轻松地向不熟悉机器学习和深度学习的人运行框架提供的教程.
应用程序开发:如果您是应用程序开发人员,并且有兴趣使用深度学习来让您的应用程序利用AI的最新进展,DLAMI是最适合您的测试床.
每个框架都附带了关于如何开始使用深度学习的教程,其中许多教程都有模型动物园,可以让您轻松试用深度学习,您不需要自己创建神经网络或进行模型训练.
一些示例向您展示如何在几分钟内构建映像检测应用程序,或如何为您自己的聊天自动程序构建语音识别应用程序.
机器学习和数据分析:如果您是数据科学家或有兴趣通过深度学习处理您的数据,您会发现许多框架都支持R和Spark.
您将找到关于进行简单回归的教程,以及为个性化和预测系统构建可扩展的数据处理系统的教程.
研究:如果您是研究员,想要尝试新框架、测试新模型或训练新模型,DLAMI和AWS的扩展功能可以减轻繁琐的安装和管理多个训练节点的麻烦.
您可以使用EMR和AWSCloudFormation模板轻松启动完整的实例集群,它们随时可以用于可扩展的培训.
Note虽然您的初始选择可能是将实例类型升级到大型实例,但GPUs(最多8个),您也可以通过创建一组DLAMI实例.
要快速设置集群,您可以使用预定义的AWSCloudFormation模板.
有关集群构建的更多信息,请参阅相关信息(p.
121).
DLAMI的功能预装框架目前有两种主要的DLAMI版本,均包含与操作系统(OS)和软件版本相关的其他变体:1深度学习AMI开发人员指南预装GPU软件采用Conda的DeepLearningAMI(p.
3)-在单独的Python环境中使用conda程序包单独安装的框架DeepLearningBaseAMI(p.
5)-不安装任何框架;只有NVIDIACUDA和其他依赖项采用Conda的DeepLearningAMI使用Anaconda环境来隔离每个框架,以便您可以随意切换框架,而不用担心其依赖项发生冲突.
有关选择最佳DLAMI的更多信息,请查看入门(p.
3).
这是采用Conda的DeepLearningAMI支持的框架的完整列表:Apache(ApaMXNet(孵育)ChainerKerasPyTorchTensorFlowTensorFlow2Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本的AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
预装GPU软件即使您使用仅包含CPU的实例,DLAMI也将具有NVIDIACUDA和NVIDIAcuDNN.
无论实例类型是什么,安装的软件都是相同的.
请记住,GPU特定工具只适用于至少包含一个GPU的实例.
选择的实例类型DLAMI(p.
14)中包含有关此内容的更多信息.
最新版本的NVIDIACUDA最新版本的NVIDIAcuDNN旧版本的CUDA也可用.
有关更多信息,请参阅CUDA安装和框架绑定(p.
5).
ElasticInference支持采用Conda的DeepLearningAMI附带支持AWSDeepLearningAMI,Ubuntu16.
04选项(p.
10)和AWSDeepLearningAMIAmazonLinux选项(p.
11)ElasticInference的环境.
AWSDeepLearningAMI,Ubuntu18.
04选项(p.
10)和AWSDeepLearningAMIAmazonLinux2选项(p.
12)目前不支持ElasticInference环境.
有关ElasticInference的教程和更多信息,请参阅ElasticInference文档.
模型处理和可视化采用Conda的DeepLearningAMI预装两种型号服务器,一种用于MXNet一个用于TensorFlow,以及TensorBoard,适用于模型可视化效果.
适用于ApacheMXNet的模型服务器(MMS)(p.
108)TensorFlowServing(p.
110)TensorBoard(p.
45)2深度学习AMI开发人员指南如何开始使用DLAMI入门如何开始使用DLAMI入门很简单.
本指南包括了关于选择适合您的DLAMI、选择适合您的使用案例和预算的实例类型的技巧,以及介绍您可能感兴趣的自定义设置的相关信息(p.
121).
如果您刚开始使用AWS或AmazonEC2,请先从采用Conda的DeepLearningAMI(p.
3)开始.
如果您熟悉AmazonEC2和其他AWS服务(如AmazonEMR、AmazonEFS或AmazonS3),并且有兴趣集成这些服务以用于需要分布式培训或推导的项目,则在相关信息(p.
121)中查看是否有符合您的使用案例的服务.
我们建议您查看选择DLAMI(p.
3),以了解最适合您的应用程序的实例类型.
另一个选项是此快速教程:启动AWSDeepLearningAMI(在10分钟内).
下一步选择DLAMI(p.
3)选择DLAMI您可能会发现DLAMI有很多选项,并且不清楚哪个选项最适合您的使用案例.
本部分可以帮助您做出决定.
当我们提及DLAMI时,通常这实际上是围绕某个常见类型或功能的一组AMI.
有三种变量定义了这些类型和/或功能:Conda与BaseCUDA8、CUDA9与CUDA10AmazonLinux、Ubuntu与Windows本指南中的其他主题有助于进一步给您提供信息和进一步让您了解详情.
主题采用Conda的DeepLearningAMI(p.
3)DeepLearningBaseAMI(p.
5)CUDA安装和框架绑定(p.
5)DLAMI操作系统选项(p.
6)后续步骤采用Conda的DeepLearningAMI(p.
3)采用Conda的DeepLearningAMICondaDLAMI使用Anaconda虚拟环境.
这些环境配置为单独安装不同的框架.
它还可以让您轻松切换框架.
这对了解和体验DLAMI必须提供的所有框架很有好处.
大多数用户会发现新的采用Conda的DeepLearningAMI非常适合他们.
3深度学习AMI开发人员指南Conda这些"Conda"AMIs将成为DLAMI.
它将经常使用框架中的最新版本进行更新,并拥有最新的GPU驱动程序和软件.
在大多数文档中,它通常被称为AWSDeepLearningAMI.
乌布图18.
04DLAMI具有以下框架:Apache(ApaMXNet(孵育)、Chineer、PyTorch,TensorFlow,和TensorFlow2间Ubuntu16.
04和AmazonLinuxDLAMI具有以下框架:Apache(ApaMXNet(孵育)、Chiner、Keras、PyTorch,TensorFlow,和TensorFlow2间亚马逊Linux2DLAMI具有以下框架:Apache(ApaMXNet(孵育)、Chineer、PyTorch,TensorFlow,TensorFlow2和KerasNote从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本的AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
稳定性与候选版本悦游AMIs使用每个框架中最新正式版本的优化二进制文件.
不会有候选版本和实验性功能.
优化取决于框架对Intel的MKLDNN等加速技术的支持,这些技术可加快在C5和C4CPU实例类型上的训练和推理速度.
二进制文件也将被编译以支持高级Intel指令集,包括但不限于AVX、AVX-2、SSE4.
1和SSE4.
2.
这些指令将加快IntelCPU架构上向量和浮点运算的速度.
另外,对于GPU实例类型,CUDA和cuDNN将更新至最新版本支持.
采用Conda的DeepLearningAMI会在框架首次激活时自动为您的EC2实例安装框架的最优化版本.
有关更多信息,请参阅Usingthe采用Conda的DeepLearningAMI(p.
24).
如果要使用自定义或优化的版本选项从源安装,DeepLearningBaseAMI(p.
5)可能是更好的选择.
Python2弃用Python开源社区已于2020年1月1日正式结束对Python2的支持.
的TensorFlow和PyTorch社区已宣布TensorFlow2.
1和PyTorch1.
4版本将是支持Python2的最后版本.
包含Python2Conda环境的DLAMI先前版本(v26、v25等)将继续可用.
但是,我们将在之前发布的DLAMI版本,只有在这些版本的开源社区发布了安全修复程序时.
DLAMI下一版本的发布TensorFlow和PyTorch框架将不包含Python2Conda环境.
ElasticInference支持采用Conda的DeepLearningAMI附带支持AWSDeepLearningAMI,Ubuntu16.
04选项(p.
10)和AWSDeepLearningAMIAmazonLinux选项(p.
11)ElasticInference的环境.
AWSDeepLearningAMI,Ubuntu18.
04选项(p.
10)和AWSDeepLearningAMIAmazonLinux2选项(p.
12)目前不支持ElasticInference环境.
有关ElasticInference的教程和更多信息,请参阅ElasticInference文档.
CUDA支持采用Conda的DeepLearningAMI的CUDA版本以及每个所支持的框架:CUDA10.
1配cuDNN七:Apache(ApaMXNetCUDA10配cuDNN七:PyTorch,TensorFlow,TensorFlow2,Apache(ApacheMXNet,链器可以在的发行说明DLAMI(p.
124)中找到特定的框架版本号选择这个DLAMI类型,或通过"后续步骤"选项了解有关其他DLAMI的更多信息.
采用Conda的DeepLearningAMI选项(p.
7)4深度学习AMI开发人员指南Base后续步骤DeepLearningBaseAMI(p.
5)相关主题有关使用采用Conda的DeepLearningAMI的教程,请参阅Usingthe采用Conda的DeepLearningAMI(p.
24)教程.
DeepLearningBaseAMIDeepLearningBaseAMI就像是一个用于深度学习的空白画布.
它包含您需要的一切,直到安装特定的框架.
它将拥有您选择的CUDA版本.
为什么选择BaseDLAMI该AMI团队对于那些想要分享深度学习项目和建立最新版本的项目贡献者非常有用.
适用于那些希望推出自己环境且有信心安装和使用最新NVIDIA软件的人员,从而他们可以专注于选择要安装的框架和版本.
选择这个DLAMI类型,或通过"后续步骤"选项了解有关其他DLAMI的更多信息.
DeepLearningBaseAMI选项(p.
8)后续步骤CUDA安装和框架绑定(p.
5)相关主题使用DeepLearningBaseAMI(p.
28)CUDA安装和框架绑定深度学习都非常一流,但每个框架都提供"稳定"版本.
这些稳定版本可能无法与最新的CUDA或cuDNN实施和功能.
您决定怎么做这最终取决于您的使用案例和您需要的功能.
如果您不确定,则使用最新的采用Conda的DeepLearningAMI.
它具有所有框架的正式pip二进制文件,CUDA10使用每个框架支持的最新版本.
如果您需要最新版本,并要自定义深度学习环境,请使用DeepLearningBaseAMI.
如需进一步指导,请在稳定性与候选版本(p.
4)上查看我们的指南.
选择具有CUDA的DLAMI的DeepLearningBaseAMI(p.
5)有CUDA10、10.
1和10.
2.
的采用Conda的DeepLearningAMI(p.
3)有CUDA10、10.
1和10.
2.
CUDA10.
1配cuDNN七:Apache(ApaMXNet(孵育),PyTorch,和TensorFlow2间CUDA10配cuDNN七:TensorFlow和链工Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本的AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
5深度学习AMI开发人员指南OS有关DLAMI类型和操作系统的安装选项,请参阅每个CUDA版本和选项页面:采用CUDA10.
2的深度学习AMI选项(p.
8)采用CUDA10.
1的深度学习AMI选项(p.
9)采用CUDA10的DeepLearningAMI选项(p.
9)采用Conda的DeepLearningAMI选项(p.
7)DeepLearningBaseAMI选项(p.
8)可以在的发行说明DLAMI(p.
124)中找到特定的框架版本号选择这个DLAMI类型,或通过"后续步骤"选项了解有关其他DLAMI的更多信息.
选择一个CUDA版本并在附录中查看具有该版本的完整DLAMI列表,或者使用"后续步骤"选项了解不同DLAMI的更多信息.
后续步骤DLAMI操作系统选项(p.
6)相关主题有关在CUDA版本之间切换的说明,请参阅使用DeepLearningBaseAMI(p.
28)教程.
DLAMI操作系统选项DLAMI针对以下列出的操作系统提供.
如果您更熟悉CentOS或RedHat,您将更能适应AWSDeepLearningAMIAmazonLinux选项(p.
11)或AWSDeepLearningAMIAmazonLinux2选项(p.
12).
否则,您可能更喜欢AWSDeepLearningAMI,Ubuntu18.
04选项(p.
10)或AWSDeepLearningAMI,Ubuntu16.
04选项(p.
10).
选择其中一个操作系统并在附录中查看完整列表,或继续后续步骤,选择您的AMI和实例类型.
AWSDeepLearningAMIAmazonLinux选项(p.
11)AWSDeepLearningAMIAmazonLinux2选项(p.
12)AWSDeepLearningAMI,Ubuntu18.
04选项(p.
10)AWSDeepLearningAMI,Ubuntu16.
04选项(p.
10)如入门概述中所述,您有几个访问DLAMI的选项,但首先您应评估您所需的实例类型.
您还应该确定您打算使用的AWS区域.
后续步骤选择的实例类型DLAMI(p.
14)AMI选项以下主题介绍了AWSDeepLearningAMI的类别.
主题采用Conda的DeepLearningAMI选项(p.
7)DeepLearningBaseAMI选项(p.
8)6深度学习AMI开发人员指南Conda采用CUDA10.
2的深度学习AMI选项(p.
8)采用CUDA10.
1的深度学习AMI选项(p.
9)采用CUDA10的DeepLearningAMI选项(p.
9)AWSDeepLearningAMI,Ubuntu18.
04选项(p.
10)AWSDeepLearningAMI,Ubuntu16.
04选项(p.
10)AWSDeepLearningAMIAmazonLinux选项(p.
11)AWSDeepLearningAMIAmazonLinux2选项(p.
12)AWSDeepLearningAMI,Windows选项(p.
13)采用Conda的DeepLearningAMI选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
DeepLearningAMI(AmazonLinux)DeepLearningAMI(AmazonLinux2)在以下区域提供这些DLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1宁夏(中国)cn-northwest-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-17深度学习AMI开发人员指南BaseDeepLearningBaseAMI选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
DeepLearningBaseAMI(AmazonLinux)DeepLearningBaseAMI(AmazonLinux2)在以下区域提供这些DLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1宁夏(中国)cn-northwest-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1采用CUDA10.
2的深度学习AMI选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
DeepLearningAMI(AmazonLinux)8深度学习AMI开发人员指南CUDA10.
1:DeepLearningBaseAMI(AmazonLinux)DeepLearningAMI(AmazonLinux2)DeepLearningBaseAMI(AmazonLinux2)Note的采用Conda的DeepLearningAMICUDA10、CUDA10.
1和CUDA10.
2.
框架将使用他们支持的最新的CUDA.
的DeepLearningBaseAMICUDA10、CUDA10.
1和CUDA10.
2.
要在它们之间切换,请按照使用DeepLearningBaseAMI(p.
28)中的说明操作.
采用CUDA10.
1的深度学习AMI选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
DeepLearningAMI(AmazonLinux)DeepLearningBaseAMI(AmazonLinux)DeepLearningAMI(AmazonLinux2)DeepLearningBaseAMI(AmazonLinux2)Note的采用Conda的DeepLearningAMICUDA10、CUDA10.
1和CUDA10.
2.
框架将使用他们支持的最新的CUDA.
的DeepLearningBaseAMICUDA10、CUDA10.
1和CUDA10.
2.
要在它们之间切换,请按照使用DeepLearningBaseAMI(p.
28)中的说明操作.
采用CUDA10的DeepLearningAMI选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
DeepLearningAMI(AmazonLinux)DeepLearningAMI(AmazonLinux2)DeepLearningBaseAMI(AmazonLinux)DeepLearningBaseAMI(AmazonLinux2)Note的采用Conda的DeepLearningAMICUDA10、CUDA10.
1和CUDA10.
2.
框架将使用他们支持的最新的CUDA.
9深度学习AMI开发人员指南Ubuntu18.
04的DeepLearningBaseAMICUDA10、CUDA10.
1和CUDA10.
2.
要在它们之间切换,请按照使用DeepLearningBaseAMI(p.
28)中的说明操作.
AWSDeepLearningAMI,Ubuntu18.
04选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
采用Conda的DeepLearningAMI不支持Ubuntu18.
04ElasticInference.
在以下区域提供这些DLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1宁夏(中国)cn-northwest-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1AWSDeepLearningAMI,Ubuntu16.
04选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
采用Conda的DeepLearningAMI附带支持Ubuntu16.
04ElasticInference的环境.
有关ElasticInference的教程和更多信息,请参阅ElasticInference文档.
10深度学习AMI开发人员指南AmazonLinux在以下区域提供这些DLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1宁夏(中国)cn-northwest-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1AWSDeepLearningAMIAmazonLinux选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
采用Conda的DeepLearningAMI附带支持AmazonLinuxElasticInference的环境.
有关ElasticInference的教程和更多信息,请参阅ElasticInference文档.
DeepLearningAMI(AmazonLinux)DeepLearningBaseAMI(AmazonLinux)在以下区域提供这些DLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-211深度学习AMI开发人员指南AmazonLinux2区域代码北京(中国)cn-north-1宁夏(中国)cn-northwest-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1AWSDeepLearningAMIAmazonLinux2选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
采用Conda的DeepLearningAMI不支持AmazonLinux2ElasticInference.
DeepLearningAMI(AmazonLinux2)DeepLearningBaseAMI(AmazonLinux2)在以下区域提供这些DLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(大阪)ap-northeast-3亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-112深度学习AMI开发人员指南Windows区域代码加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1AmazonLinux2发行说明AWSDeepLearningAMI,Windows选项使用启动和配置DLAMI(p.
16)指南继续这些DLAMI中的其中一个.
DeepLearningAMI(Windows2016)DeepLearningAMI(Windows2012R2)在以下区域提供WindowsDLAMI:区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-113深度学习AMI开发人员指南实例选择选择的实例类型DLAMI为选择实例类型时,请考虑以下事项DLAMI.
如果您是首次使用深度学习,则具有单个GPU的实例可能适合您的需求.
如果您注重预算,则可以使用仅限CPU的实例.
对于大量推理服务,具有大量内存的单个CPU实例或此类实例的集群可能是更好的解决方案.
如果您使用的是包含大量数据或大量批处理的大型模型,则需要一个具有更多内存的大型实例.
您还可以将模型分发到集群GPUs.
您可能会发现,如果您减小批处理大小,则使用内存较少的实例是更好的解决方案.
这可能会影响您的准确性和训练速度.
如果您有兴趣使用NVIDIA集体通信库(NCCL)运行机器学习应用程序,且需要大规模的节点间通信,那么您可能需要使用弹性结构适配器(EFA).
有关实例的更多详细信息,请参阅EC2实例类型.
以下主题提供有关实例类型注意事项的信息.
Important深度学习AMIs包括由NVIDIACorporation开发、拥有或提供的驱动程序、软件或工具包.
您同意仅在包含NVIDIA硬件的AmazonEC2实例上使用这些NVIDIA驱动程序、软件或工具包.
主题的定价DLAMI(p.
14)DLAMI区域可用性(p.
14)推荐的GPU实例(p.
15)推荐的CPU实例(p.
15)的定价DLAMI中包含的深度学习框架DLAMI是免费的,并且每个都有自己的开源许可证.
虽然中包含的软件DLAMI是免费的,但您仍需为底层AmazonEC2实例硬件付费.
某些AmazonEC2实例类型标记为免费.
可以在这些免费实例之一DLAMI上运行.
这意味着,当您只使用该实例的容量时,使用DLAMI是完全免费的.
如果您需要一个具有更多CPU核心、更多磁盘空间、更多RAM或一个或多个的更强大的实例GPUs,则需要一个不在免费套餐实例类中的实例.
有关实例选择和定价的更多信息,请参阅AmazonEC2定价.
DLAMI区域可用性每个区域支持不同范围的实例类型,并且某个实例类型在不同区域中的成本通常略有不同.
DLAMI并非在每个区域中都可用,但可以将DLAMI复制到您选择的区域.
参阅复制AMI了解更多信息.
请注意区域选择列表,并确保您选择一个靠近您或您的客户的区域.
如果您打算使用多个DLAMI且可能创建一个集群,请确保为集群中的所有节点使用相同的区域.
有关区域的更多信息,请访问EC2区域.
后续步骤推荐的GPU实例(p.
15)14深度学习AMI开发人员指南GPU推荐的GPU实例GPU实例被推荐用于最深度的学习目的.
在GPU实例上训练新模型比CPU实例更快.
当您拥有多GPU实例时,或者当您使用在多个实例上使用分布式训练时,您可以进行子线性扩展GPUs.
要设置分布式训练,请参阅分布式训练(p.
46).
以下实例类型支持DLAMI.
有关GPU实例类型选项及其用法的信息,请参阅EC2实例类型并选择加速计算.
Note应将模型大小作为选择实例的一个考虑因素.
如果模型超出了实例的可用RAM,请为应用程序选择其他具有足够内存的实例类型.
DLAMI实例提供用于监控和优化GPU流程的工具.
有关监控GPU进程的更多信息,请参阅GPU监控和优化(p.
74).
后续步骤推荐的CPU实例(p.
15)推荐的CPU实例无论您是在关注预算,了解深度学习,还是只是想运行一项预测服务,您在CPU类别中都有许多经济实惠的选项.
一些框架利用Intel的MKLDNN,从而加快C5并非在所有区域都可用C4和C3CPU实例类型上的训练和推理速度.
有关CPU实例类型的信息,请参阅EC2实例类型并选择计算优化.
Note应将模型大小作为选择实例的一个考虑因素.
如果模型超出了实例的可用RAM,请为应用程序选择其他具有足够内存的实例类型.
AmazonEC2C4实例具有多达36个IntelvCPUs.
15深度学习AMI开发人员指南步骤1:启动DLAMI启动和配置DLAMI如果您在这里,您应该已经有了想要启动哪个AMI的想法.
如果没有,请使用从整个入门(p.
3)中找到的AMI选择指南选择一个DLAMI,或使用附录部分AMI选项(p.
6)中的完整AMI列表.
您还应该知道您要选择哪个实例类型和区域.
否则,请浏览选择的实例类型DLAMI(p.
14).
Note我们将在示例中使用p2.
xlarge作为默认实例类型.
只需将此替换为您心中的任何实例类型.
主题步骤1:启动DLAMI(p.
16)EC2控制台(p.
16)步骤2:连接到DLAMI(p.
17)步骤3:保护DLAMI实例(p.
17)步骤4:测试您的DLAMI(p.
17)清除(p.
18)设置JupyterNotebook服务器(p.
18)步骤1:启动DLAMINote对于本演练,我们可能会针对DeepLearningAMI(Ubuntu16.
04)进行引用.
即使您选择其他DLAMI,您也应能按照本指南进行操作.
启动实例1.
您可使用EC2控制台启动一个DLAMI.
单击下方的链接可获得详细指导:EC2控制台(p.
16)TipCLI选项:如果您选择使用AWSCLI启动DLAMI,您将需要AMI的ID、区域和实例类型、以及您的安全令牌信息.
请确保您已拥有AMI和实例ID.
如果您尚未设置AWSCLI,请首先按照安装AWS命令行接口指南进行设置.
2.
如果您已经完成了上述某个选项的步骤,请等待实例准备好.
这通常仅需要几分钟时间.
您可以在EC2控制台中验证实例的状态.
EC2控制台Note要使用弹性结构适配器(EFA)启动实例,请参阅以下步骤.
16深度学习AMI开发人员指南步骤2:连接到DLAMI1.
打开EC2控制台.
2.
请注意最顶层的导航中的当前区域.
如果这不是您所需的AWS区域,请更改此选项,然后再继续.
有关更多信息,请参阅EC2区域.
3.
选择LaunchInstance.
4.
根据名称搜索所需的实例:1.
选择QuickStart.
此处将列出所有可用的DLAMI.
2.
搜索DeepLearningAMI.
只查找子类型,例如所需的操作系统,或基础、Conda、源等.
3.
浏览这些选项,并在选择时单击Select.
5.
检查详细信息,然后选择Continue.
6.
选择一个实例类型.
7.
选择ReviewandLaunch.
8.
检查详细信息和定价.
选择Launch.
下一步步骤2:连接到DLAMI(p.
17)步骤2:连接到DLAMI从客户端(Windows、MacOS或Linux)连接到您启动的DLAMI.
有关更多信息,请参阅AmazonEC2用户指南(适用于Linux实例)中的连接到您的Linux实例.
如果在登录后您希望执行Jupyter设置,请在手边保留一份SSH登录命令.
您将使用这个命令的各种变体连接到Jupyter网页.
下一步步骤3:保护DLAMI实例(p.
17)步骤3:保护DLAMI实例一旦有修补程序和更新推出便立即应用,从而始终保持操作系统和其他已安装软件为最新.
如果您使用的是AmazonLinux或Ubuntu,则当您登录到您DLAMI时,便会收到更新通知(如果有)并且会看到更新说明.
有关AmazonLinux维护的更多信息,请参阅更新实例软件.
对于Ubuntu实例,请参阅官方Ubuntu文档.
在Windows上,定期检查WindowsUpdate有无软件和安全更新.
如果您愿意,可以自动应用更新.
Important有关Meltdown和Spectre漏洞以及如何修补操作系统解决以这些问题的信息,请参阅安全公告AWS-2018-013.
步骤4:测试您的DLAMI根据您的DLAMI版本不同,您的测试选项也会不同:17深度学习AMI开发人员指南清除采用Conda的DeepLearningAMI(p.
3)–转到Usingthe采用Conda的DeepLearningAMI(p.
24).
DeepLearningBaseAMI(p.
5)–引用所需框架的安装文档.
您还可以创建Jupyter笔记本电脑,试用教程,或开始使用Python编码.
有关更多信息,请参阅设置JupyterNotebook服务器(p.
18).
清除当您不再需要DLAMI时,您可以将其停止或终止,以避免产生持续的费用.
停止的实例会保留,以便您可以稍后再继续.
您的配置、文件和其他非易失性信息都存储在AmazonS3上的卷中.
在实例停止的情况下,将收取您小额S3费用来保留该卷,但在计算资源处于停止状态时将不再对其收取费用.
当您重新启动实例时,它将挂载该卷,且您的数据会重新恢复.
如果您终止实例,它将消失,且您将无法重新启动它.
您的数据实际仍驻留在S3中,因此,为了防止任何进一步的费用,您还需要删除该卷.
有关更多说明,请参阅AmazonEC2用户指南(适用于Linux实例)中的终止您的实例.
设置JupyterNotebook服务器JupyterNotebook是一个Web应用程序,可以让您使用Web浏览器管理笔记本文档.
要设置JupyterNotebook,您需要完成以下操作:在您的AmazonEC2实例上配置JupyterNotebook服务器.
配置您的客户端,以便您可以连接到JupyterNotebook服务器.
我们提供适用于Windows、macOS和Linux客户端的配置说明.
登录JupyterNotebook服务器,测试设置.
有关JupyterNotebook的更多信息,请参阅Jupyter.
主题保护您的Jupyter服务器(p.
18)启动JupyterNotebook服务器(p.
19)配置客户端以连接到Jupyter服务器(p.
19)登录JupyterNotebook服务器进行测试(p.
20)保护您的Jupyter服务器下面我们使用SSL和自定义密码来设置Jupyter.
连接到AmazonEC2实例,然后完成以下步骤.
配置Jupyter服务器1.
Jupyter提供了一个密码实用工具.
运行以下命令,在命令提示符处输入您的首选密码.
$jupyternotebookpassword18深度学习AMI开发人员指南启动服务器输出类似如下:Enterpassword:Verifypassword:[NotebookPasswordApp]Wrotehashedpasswordto/home/ubuntu/.
jupyter/jupyter_notebook_config.
json2.
创建自签名SSL证书.
按照提示填写您认为适当的区域.
如果要将提示留空,则必须输入.
.
您的答案将不会影响证书的功能性.
$cd~$mkdirssl$cdssl$opensslreq-x509-nodes-days365-newkeyrsa:2048-keyoutmykey.
key-outmycert.
pemNote您可能希望创建一个常规的SSL证书,该证书为第三方签名,且不会导致浏览器向您发出安全警告.
此过程涉及内容较多.
访问Jupyter的文档以了解更多信息.
下一步启动JupyterNotebook服务器(p.
19)启动JupyterNotebook服务器现在,您可以通过登录实例,然后运行以下命令来启动Jupyter服务器,该命令将使用您在上一步中创建的SSL证书.
$jupyternotebook--certfile=~/ssl/mycert.
pem--keyfile~/ssl/mykey.
key启动服务器后,即可通过SSH隧道从您的客户端计算机连接到服务器.
当服务器运行时,您将看到来自Jupyter的一些输出,这些输出证实服务器正在运行.
此时,请忽略称您可以通过本地主机URL访问服务器的标注,因为这其实不可以,直到您创建了隧道为止.
Note当您使用JupyterWeb界面切换框架时,Jupyter将处理切换环境.
更多有关信息见于通过Jupyter切换环境(p.
29).
下一步配置客户端以连接到Jupyter服务器(p.
19)配置客户端以连接到Jupyter服务器配置您的客户端连接到JupyterNotebook服务器后,您可以在您的工作区中的服务器上创建和访问笔记本,并在服务器上运行深度学习代码.
有关配置信息,请选择以下链接之一.
主题配置Windows客户端(p.
20)19深度学习AMI开发人员指南登录JupyterNotebook服务器配置Linux或macOS客户端(p.
20)配置Windows客户端准备请确保您拥有设置SSH隧道所需的以下信息:AmazonEC2实例的公有DNS名称.
您可以在EC2控制台中找到公有DNS名称.
私有密钥文件的密钥对.
有关访问密钥对的更多信息,请参阅AmazonEC2用户指南(适用于Linux实例)中的AmazonEC2密钥对.
从Windows客户端使用Jupyter笔记本请参阅这些关于从Windows客户端连接到您的AmazonEC2实例的指南.
1.
排查实例的连接问题2.
使用PuTTY从Windows连接到Linux实例要创建连接Jupyter服务器的隧道,建议先在您的Windows客户端上安装GitBash,然后按照Linux/macOS客户端说明操作.
不过,您可以使用任何方法打开包含端口映射的SSH隧道.
请参阅Jupyter的文档了解更多信息.
下一步配置Linux或macOS客户端(p.
20)配置Linux或macOS客户端1.
打开终端.
2.
运行以下命令,将本地端口8888上的所有请求转发到远程AmazonEC2实例上的端口8888.
通过替换密钥位置来更新命令,以访问AmazonEC2实例和您的AmazonEC2实例的公有DNS名称.
注意,对于AmazonLinuxAMI,用户名是ec2-user而非ubuntu.
$ssh-i~/mykeypair.
pem-N-f-L8888:localhost:8888ubuntu@ec2-###.
compute-1.
amazonaws.
com该命令在您的客户端与运行JupyterNotebook服务器的远程AmazonEC2实例之间打开一个隧道.
下一步登录JupyterNotebook服务器进行测试(p.
20)登录JupyterNotebook服务器进行测试现在,您已准备就绪,可登录到JupyterNotebook服务器.
接下来,通过浏览器测试与服务器的连接.
1.
在浏览器的地址栏中,键入以下URL,或单击此链接:https://localhost:88882.
借助自签名SSL证书,您的浏览器会警告和提示您避免继续访问网站.
20深度学习AMI开发人员指南登录JupyterNotebook服务器由于这是您自己设置的,所以可以安全地继续.
根据您的浏览器情况,有可能出现"高级"、"显示详细信息"等类似按钮.
21深度学习AMI开发人员指南登录JupyterNotebook服务器单击此消息,然后单击"proceedtolocalhost"(前进到本地主机)链接.
如果连接成功,则会看到JupyterNotebook服务器网页.
此时,系统将要求您提供先前设置的密码.
22深度学习AMI开发人员指南登录JupyterNotebook服务器现在,您可以访问DLAMI上运行的JupyterNotebook服务器了.
您可以创建新的笔记本或运行提供的Tutorials(p.
30).
23深度学习AMI开发人员指南CondaDLAMI使用DLAMI主题Usingthe采用Conda的DeepLearningAMI(p.
24)使用DeepLearningBaseAMI(p.
28)运行Jupyter笔记本电脑教程(p.
29)Tutorials(p.
30)以下部分介绍如何使用采用Conda的DeepLearningAMI切换环境、从每个框架运行示例代码以及运行Jupyter,以便您可以尝试不同的笔记本教程.
Usingthe采用Conda的DeepLearningAMI主题Introductiontothe采用Conda的DeepLearningAMI(p.
24)LogintoYourDLAMI(p.
24)StarttheTensorFlowEnvironment(p.
26)SwitchtothePyTorchPython3Environment(p.
26)SwitchtotheMXNetPython3Environment(p.
27)RemovingEnvironments(p.
28)Introductiontothe采用Conda的DeepLearningAMIConda是一个开源程序包管理系统和环境管理系统,在Windows、macOS和Linux上运行.
Conda快速安装、运行和更新程序包及其依赖项.
Conda可轻松创建、保存、加载和切换本地计算机上的环境.
采用Conda的DeepLearningAMI已完成配置,以便让您轻松切换深度学习环境.
以下说明指导您使用conda.
它们还帮助您验证框架的基本导入是否正常,并且您可以使用框架运行简单的操作.
然后,您可以继续查看随DLAMI提供的更全面的教程,或者每个框架的项目站点上提供的框架示例.
LogintoYourDLAMI登录服务器后,您会看到服务器的"每日消息"(MOTD),它介绍了可以用来切换不同深度学习框架的各种Conda命令.
以下是示例MOTD.
由于新版本DLAMI的发布,您的特定MOTD可能不同.
Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本的AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
_|(/DeepLearningAMI(Ubuntu16.
04)Version31.
024深度学习AMI开发人员指南LogintoYourDLAMIWelcometoUbuntu16.
04.
6LTS(GNU/Linux4.
4.
0-1111-awsx86_64v)Pleaseuseoneofthefollowingcommandstostarttherequiredenvironmentwiththeframeworkofyourchoice:forMXNet(+Keras2)withPython3(CUDA10.
1andIntelMKL-DNN)sourceactivatemxnet_p36forMXNet(+Keras2)withPython2(CUDA10.
1andIntelMKL-DNN)sourceactivatemxnet_p27forMXNet(+AmazonElasticInference)withPython3sourceactivateamazonei_mxnet_p36forMXNet(+AmazonElasticInference)withPython2sourceactivateamazonei_mxnet_p27forMXNet(+AWSNeuron)withPython3sourceactivateaws_neuron_mxnet_p36forTensorFlow(+Keras2)withPython3(CUDA10.
0andIntelMKL-DNN)sourceactivatetensorflow_p36forTensorFlow(+Keras2)withPython2(CUDA10.
0andIntelMKL-DNN)sourceactivatetensorflow_p27forTensorFlow2(+Keras2)withPython3(CUDA10.
1andIntelMKL-DNN)sourceactivatetensorflow2_p36forTensorFlow2(+Keras2)withPython2(CUDA10.
1andIntelMKL-DNN)sourceactivatetensorflow2_p27forTensorFlow2.
2withPython3(CUDA10.
2andIntelMKL-DNN)sourceactivatetensorflow2_latest_p37forTensorflow(+AmazonElasticInference)withPython2sourceactivateamazonei_tensorflow_p27forTensorflow(+AmazonElasticInference)withPython3sourceactivateamazonei_tensorflow_p36forTensorflow2(+AmazonElasticInference)withPython2sourceactivateamazonei_tensorflow2_p27forTensorflow2(+AmazonElasticInference)withPython3sourceactivateamazonei_tensorflow2_p36forTensorflow(+AWSNeuron)withPython3sourceactivateaws_neuron_tensorflow_p36forPyTorch1.
4withPython3(CUDA10.
1andIntelMKL)sourceactivatepytorch_p36forPyTorch1.
4withPython2(CUDA10.
1andIntelMKL)sourceactivatepytorch_p27forPyTorch1.
6withPython3(CUDA10.
1andIntelMKL)sourceactivatepytorch_latest_p36forPyTorch(+AWSNeuron)withPython3sourceactivateaws_neuron_pytorch_p36forPyTorchwith(+AmazonElasticInference)withPython3sourceactivateamazonei_pytorch_p36forChainerwithPython2(CUDA10.
0andInteliDeep)sourceactivatechainer_p27forChainerwithPython3(CUDA10.
0andInteliDeep)sourceactivatechainer_p36forbasePython2(CUDA10.
0)sourceactivatepython2forbasePython3(CUDA10.
0)sourceactivatepython3每个Conda命令具有以下模式:sourceactivateframework_python-version例如,您可能会看到forMXNet(+Keras1)withPython3(CUDA9)sourceactivatemxnet_p36,这意味着该环境具有MXNet、Keras1、Python3和CUDA9.
要激活此环境,您可以使用以下命令:$sourceactivatemxnet_p3625深度学习AMI开发人员指南StarttheTensorFlowEnvironment此命令的另一个变体是:$sourceactivatemxnet_p27这意味着该环境具有MXNet和Python2(使用Keras1和CUDA9).
StarttheTensorFlowEnvironmentNote在启动您的第一个Conda环境时,请在其加载期间耐心等待.
采用Conda的DeepLearningAMI会在框架首次激活时自动为您的EC2实例安装框架的最优化版本.
您不应期望后续的延迟.
1.
激活适用于Python3的TensorFlow虚拟环境.
$sourceactivatetensorflow_p362.
启动iPython终端.
(tensorflow_36)$ipython3.
运行快速TensorFlow程序.
importtensorflowastfhello=tf.
constant('Hello,TensorFlow!
')sess=tf.
Session()print(sess.
run(hello))您应该会看到"Hello,Tensorflow!
"后续步骤运行Jupyter笔记本电脑教程(p.
29)SwitchtothePyTorchPython3Environment如果您仍然处于iPython控制台中,则使用quit(),然后准备切换环境.
激活Python3的Pytorch虚拟环境.
$sourceactivatepytorch_p36这可激活Python3的Pytorch环境.
或者,您可能已经激活了Pytorch_p27,以获得使用Python2的环境.
TestSomePyTorchCode要测试安装,请使用Python写入创建和打印阵列的Pytorch代码.
1.
启动iPython终端.
(pytorch_p36)$ipython26深度学习AMI开发人员指南SwitchtotheMXNetPython3Environment2.
导入Pytorch.
importtorch您可能会看到一条关于第三方软件包的警告消息.
您可以忽略它.
3.
创建一个5x3矩阵,其中元素随机初始化.
打印数组.
x=torch.
rand(5,3)print(x)验证结果.
tensor([[0.
3105,0.
5983,0.
5410],[0.
0234,0.
0934,0.
0371],[0.
9740,0.
1439,0.
3107],[0.
6461,0.
9035,0.
5715],[0.
4401,0.
7990,0.
8913]])SwitchtotheMXNetPython3Environment如果您仍然处于iPython控制台中,则使用quit(),然后准备切换环境.
激活适用于Python3的MXNet虚拟环境.
$sourceactivatemxnet_p36这将激活使用Python3的MXNet环境.
或者,您也可以激活mxnet_p27,以构建使用Python2的环境.
TestSomeMXNetCode要测试您的安装,请使用Python编写MXNet代码,以使用NDArrayAPI创建并打印数组.
有关更多信息,请参阅NDArrayAPI.
1.
启动iPython终端.
(mxnet_p36)$ipython2.
导入MXNet.
importmxnetasmx您可能会看到一条关于第三方软件包的警告消息.
您可以忽略它.
3.
创建一个5x5矩阵、一个NDArray实例,将元素初始化为0.
打印数组.
mx.
ndarray.
zeros((5,5)).
asnumpy()验证结果.
array([[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
],27深度学习AMI开发人员指南RemovingEnvironments[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
]],dtype=float32)您可以在MXNet教程部分找到MXNet的更多示例.
RemovingEnvironments注意:如果您用尽了DLAMI上的空间,则可以选择卸载不用的Conda软件包:condaenvlistcondaenvremove–-name使用DeepLearningBaseAMI使用DeepLearningBaseAMIBaseAMI附带GPU驱动程序基础平台,以及可用来部署您自己的自定义深度学习环境的加速库.
默认情况下,该AMI配置有NVIDIACUDA10.
0环境.
您还可以在不同版本的CUDA之间切换.
有关如何执行此操作,请参阅以下说明.
配置CUDA版本您可以使用以下bash命令选择并验证特定CUDA版本.
Tip您可以通过运行NVIDIA的nvcc程序来验证CUDA版本.
$nvcc--versionCUDA11.
0:$sudorm/usr/local/cuda$sudoln-s/usr/local/cuda-11.
0/usr/local/cudaCUDA10.
2:$sudorm/usr/local/cuda$sudoln-s/usr/local/cuda-10.
2/usr/local/cudaCUDA10.
1:$sudorm/usr/local/cuda$sudoln-s/usr/local/cuda-10.
1/usr/local/cudaCUDA10.
0:$sudorm/usr/local/cuda$sudoln-s/usr/local/cuda-10.
0/usr/local/cuda28深度学习AMI开发人员指南Jupyter笔记本电脑运行Jupyter笔记本电脑教程每个深度学习项目的源代码都附带了教程和示例,大多数情况下,它们可以在任何DLAMI上运行.
如果您选择了采用Conda的DeepLearningAMI(p.
3),那么您将获得一些已经建立并准备好尝试的精选教程的额外好处.
Important要运行安装在DLAMI上的Jupyter笔记本电脑教程,您需要设置JupyterNotebook服务器(p.
18).
Jupyter服务器运行后,您可以通过Web浏览器运行这些教程.
如果您正在运行采用Conda的DeepLearningAMI或者如果您已经建立了Python环境,则可以从Jupyter笔记本界面切换Python内核.
在尝试运行特定于框架的教程之前,请选择合适的内核.
我们为采用Conda的DeepLearningAMI用户提供了更多这方面的示例.
Note许多教程需要一些额外Python模块,它们在您的DLAMI上可能尚未设置.
如果您收到类似"xyzmodulenotfound"的错误,请登录到DLAMI,激活环境(如上所述),然后安装必要的模块.
Tip深度学习教程和示例通常依赖于一个或多个GPU.
如果您的实例类型没有GPU,您可能需要更改一些示例代码才能使其运行.
导航已安装的教程一旦您登录到Jupyter服务器且可以看到教程目录(仅限采用Conda的DeepLearningAMI上)时,也会看到按每个框架名称排列的教程文件夹.
如果您没有看到某个框架,则表明在您当前DLAMI上该框架的教程不可用.
单击框架名称以查看列出的教程,然后单击一个教程,将其启动.
在采用Conda的DeepLearningAMI上第一次运行笔记本电脑时,它会想知道您想使用哪个环境.
它会提示您从列表中进行选择.
每个环境都根据以下模式命名:Environment(conda_framework_python-version)例如,您可能会看到Environment(conda_mxnet_p36),这意味着该环境具有MXNet和Python3.
您也可能会看到Environment(conda_mxnet_p27),这意味着该环境具有MXNet和Python2.
Tip如果您想知道哪个版本的CUDA处于活动状态,一种查看方法是在首次登录到DLAMI时在MOTD中查看.
通过Jupyter切换环境如果您决定尝试一个不同框架的教程,一定要验证当前正在运行的内核.
此信息可以在Jupyter界面的右上方看到,就在注销按钮的下方.
您可以在任何打开的笔记本电脑上更改内核,方法是依次单击Kernel、ChangeKernel菜单项,然后单击正运行的笔记本电脑适合的环境.
此时您需要重新运行任何单元,因为内核中的更改将会擦除之前运行的任何内容的状态.
Tip在框架之间进行切换可能很有趣而且很有教育意义,但是可能导致耗尽内存.
如果您开始遇到错误,请查看运行Jupyter服务器的终端窗口.
这里包含有用的消息和错误记录,您可能会看到内存29深度学习AMI开发人员指南教程不足的错误.
要解决这一问题,您可以转到Jupyter服务器的主页中,单击Running选项卡,然后为每个教程单击Shutdown,因为这些教程可能仍然在后台运行,导致耗尽了所有内存.
后续步骤有关每个框架的更多示例和示例代码,请单击Next或继续Apache(ApaMXNet(孵育)(p.
31).
Tutorials以下是有关如何使用采用Conda的DeepLearningAMI的软件的教程.
主题10分钟教程(p.
30)激活框架(p.
30)调试和可视化(p.
43)分布式训练(p.
46)ElasticFabricAdapter(p.
62)GPU监控和优化(p.
74)带有DLAMI的AWSInferentia芯片(p.
79)推理(p.
97)将框架用于ONNX(p.
100)模型处理(p.
108)10分钟教程启动AWSDeepLearningAMI(在10分钟内)在AmazonEC2上使用AWSDeepLearningContainers训练深度学习模型(10分钟)激活框架以下是采用Conda的DeepLearningAMI上安装的深度学习框架.
单击某个框架即可了解如何将其激活.
主题Apache(ApaMXNet(孵育)(p.
31)Caffe2(p.
32)Chainer(p.
33)CNTK(p.
33)Keras(p.
35)PyTorch(p.
36)TensorFlow(p.
38)TensorFlow2(p.
39)TensorFlowwithHorovod(p.
40)TensorFlow2withHorovod(p.
41)Theano(p.
43)30深度学习AMI开发人员指南激活框架Apache(ApaMXNet(孵育)激活ApacheMXNet(孵育)本教程将展示如何激活MXNet运行采用Conda的DeepLearningAMI(人DLAMI在Conda上)并运行MXNet程序.
当框架的稳定的Conda程序包发布时,它会在DLAMI上进行测试并预安装.
如果您希望运行最新的、未经测试的每日构建版本,您可以手动正在安装MXNet的夜间构建(实验)(p.
31).
要运行MXNet在DLAMI有Conda1.
要激活该框架,请打开DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
对于MXNet和带有CUDA9.
0和MKL-DNN的Python3上的Keras2,运行以下命令:$sourceactivatemxnet_p36对于MXNet和Python2上带有CUDA9.
0和MKL-DNN的Keras2,运行以下命令:$sourceactivatemxnet_p272.
开始iPython终端.
(mxnet_p36)$ipython3.
快速运行MXNet程序.
创建一个5x5矩阵、一个NDArray实例,将元素初始化为0.
打印数组.
importmxnetasmxmx.
ndarray.
zeros((5,5)).
asnumpy()4.
验证结果.
array([[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
],[0.
,0.
,0.
,0.
,0.
]],dtype=float32)正在安装MXNet的夜间构建(实验)您可以安装最新的MXNet融入到MXNet您身上的Conda环境采用Conda的DeepLearningAMI.
要安装MXNet打造1.
对于Python3MXNet环境,请运行此命令:$sourceactivatemxnet_p36对于Python2MXNet环境,请运行此命令:$sourceactivatemxnet_p272.
移除当前安装的MXNet.
Note其余步骤假定您使用的是mxnet_p36环境.
31深度学习AMI开发人员指南激活框架(mxnet_p36)$pipuninstallmxnet-cu90mkl3.
安装最新的夜间版本MXNet.
(mxnet_p36)$pipinstall--premxnet-cu90mkl4.
要验证您是否已成功安装最新的夜间版本,请启动IPython终端并检查的版本MXNet.
(mxnet_p36)$ipythonimportmxnetprint(mxnet.
__version__)输出应打印最新版本的稳定版本MXNet.
更多教程您可以在DLAMI主目录的采用Conda的DeepLearningAMI教程文件夹中找到更多教程.
1.
使用ApacheMXNet(孵育)ResNet50款(p.
98)2.
使用ApacheMXNet(孵育)使用ONNX模型进行推断(p.
97)3.
适用于ApacheMXNet的模型服务器(MMS)(p.
108)有关更多教程和示例,请参阅框架的官方Python文档,的PythonAPIMXNet,或ApacheMXNet网站.
Caffe2Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
Caffe2教程要激活框架,请按照您的采用Conda的DeepLearningAMI上的这些说明进行操作.
只有使用CUDA9和cuDNN7的Python2选项:$sourceactivatecaffe2_p27启动iPython终端.
(caffe2_p27)$ipython运行快速Caffe2程序.
fromcaffe2.
pythonimportworkspace,model_helperimportnumpyasnp#Createrandomtensorofthreedimensionsx=np.
random.
rand(4,3,2)32深度学习AMI开发人员指南激活框架print(x)print(x.
shape)workspace.
FeedBlob("my_x",x)x2=workspace.
FetchBlob("my_x")print(x2)您应该会看到系统输出初始numpy随机数组,然后这些数组加载到了Caffe2blob中.
请注意,加载之后,它们是相同的.
更多教程如需查看更多教程和示例,请参阅该框架的官方Python文档、PythonAPIforCaffe2和Caffe2网站.
ChainerChainer是一种基于Python的灵活框架,用于轻松直观地编写复杂的神经网络架构.
利用Chainer,您可以轻松使用多GPU实例进行训练.
Chainer还会自动记录结果、图表损失和精度并生成用于使用计算图来可视化神经网络的输出.
Chainer包含在采用Conda的DeepLearningAMI(DLAMIwithConda)中.
激活Chainer1.
连接到正在运行采用Conda的DeepLearningAMI的实例.
有关如何选择或连接到实例,请参阅thesectioncalled"实例选择"(p.
14)或AmazonEC2文档.
2.
激活Python3Chainer环境:$sourceactivatechainer_p36激活Python2Chainer环境:$sourceactivatechainer_p273.
启动iPython终端:(chainer_p36)$ipython4.
测试导入Chainer以验证其是否运行正常:importchainer您可能会看到几条警告消息,但没有错误.
更多信息请尝试有关Chainer(p.
47)的教程.
您之前下载的位于源内的Chainer示例文件夹包含更多示例.
请试用这些示例以了解其性能.
要了解有关Chainer的更多信息,请参阅Chainer文档网站.
CNTKNote从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
33深度学习AMI开发人员指南激活框架激活CNTK本教程介绍如何在运行采用Conda的DeepLearningAMI(DLAMIonConda)的实例上激活CNTK并运行CNTK程序.
当框架的稳定的Conda程序包发布时,它会在DLAMI上进行测试并预安装.
如果您希望运行最新的、未经测试的每日构建版本,您可以手动安装CNTK的每日构建版本(试验)(p.
34).
在DLAMIwithConda上运行CNTK1.
要激活CNTK,请打开DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
对于使用CUDA9和cuDNN7的Python3:$sourceactivatecntk_p36对于使用CUDA9和cuDNN7的Python2:$sourceactivatecntk_p272.
启动iPython终端.
(cntk_p36)$ipython3.
如果您具有CPU实例,请运行此快速CNTK程序.
importcntkasCC.
__version__c=C.
constant(3,shape=(2,3))c.
asarray()您应该看到CNTK版本,然后输出一个2x3的3数组.
如果您有GPU实例,可以使用以下代码示例对其进行测试.
如果CNTK可以访问GPU,则True的结果就是您所期望的.
fromcntk.
deviceimporttry_set_default_device,gputry_set_default_device(gpu(0))安装CNTK的每日构建版本(试验)您可以将最新的CNTK版本安装到采用Conda的DeepLearningAMI上的任一或两个CNTKConda环境.
从每日构建安装CNTK1.
对于使用CUDA9.
0和MKL-DNN的Python3上的CNTK和Keras2,运行以下命令:$sourceactivatecntk_p36对于使用CUDA9.
0和MKL-DNN的Python2上的CNTK和Keras2,运行以下命令:$sourceactivatecntk_p272.
其余步骤假定您使用的是cntk_p36环境.
删除当前安装的CNTK.
(cntk_p36)$pipuninstallcntk34深度学习AMI开发人员指南激活框架3.
要安装CNTK每日构建,您首先需要从CNTK每日构建网站查找您要安装的版本.
4.
(适用于GPU实例的选项)-要安装每日构建版本,您将使用以下内容,从而在所需的构建版本中进行替换:(cntk_p36)$pipinstallhttps://cntk.
ai/PythonWheel/GPU/latest-nightly-build将上一条命令中的URL替换为您的当前Python环境的GPU版本.
(适用于CPU实例的选项)-要安装每日构建版本,您将使用以下内容,从而在所需的构建版本中进行替换:(cntk_p36)$pipinstallhttps://cntk.
ai/PythonWheel/CPU-Only/latest-nightly-build将上一条命令中的URL替换为您的当前Python环境的CPU版本.
5.
要验证您已成功安装最新的每日构建版本,请启动IPython终端并检查CNTK的版本.
(cntk_p36)$ipythonimportcntkprint(cntk.
__version__)输出应类似于以下内容:2.
6-rc0.
dev20181015更多教程有关更多教程和示例,请参阅该框架的官方Python文档、PythonAPIforCNTK或CNTK网站.
KerasKeras教程1.
要激活此框架,请在您的thesectioncalled"CondaDLAMI"(p.
24)CLI上使用这些命令.
对于使用CUDA9和cuDNN7的Python3上的具有MXNet后端的Keras2:$sourceactivatemxnet_p36对于使用CUDA9和cuDNN7的Python2上的具有MXNet后端的Keras2:$sourceactivatemxnet_p27对于使用CUDA9和cuDNN7的Python3上具有TensorFlow后端的Keras2:$sourceactivatetensorflow_p36对于在使用CUDA9和cuDNN7的Python2上具有TensorFlow后端的Keras2:$sourceactivatetensorflow_p272.
要测试导入Keras以验证激活哪些后端,请使用这些命令:$ipythonimportkerasask35深度学习AMI开发人员指南激活框架以下内容应显示您的屏幕上:UsingMXNetbackend如果Keras使用的是TensorFlow,则会显示以下内容:UsingTensorFlowbackendNote如果您收到错误,或如果仍在使用错误的后端,则可以手动更新您的Keras配置.
编辑~/.
keras/keras.
json文件并将后端设置更改为mxnet或tensorflow.
更多教程有关使用具有MXNet后端的Keras的多GPU教程,请尝试Keras-MXNetMulti-GPU训练教程(p.
55).
您可以在采用Conda的DeepLearningAMI~/examples/keras-mxnet目录中查找有关具有MXNet后端的Keras的示例.
您可以在采用Conda的DeepLearningAMI~/examples/keras目录中查找有关具有TensorFlow后端的Keras的示例.
有关其他教程和示例,请参阅Keras网站.
PyTorch激活PyTorch当框架的稳定的Conda程序包发布时,它会在DLAMI上进行测试并预安装.
如果您希望运行最新的、未经测试的每日构建版本,您可以手动安装PyTorch的每日构建版本(试验)(p.
37).
要激活当前安装的框架,请按照您的采用Conda的DeepLearningAMI上的这些说明进行操作.
对于具有CUDA10和MKL-DNN的Python3上的PyTorch,运行以下命令:$sourceactivatepytorch_p36对于具有CUDA10和MKL-DNN的Python2上的PyTorch,运行以下命令:$sourceactivatepytorch_p27启动iPython终端.
(pytorch_p36)$ipython运行快速PyTorch程序.
importtorchx=torch.
rand(5,3)print(x)print(x.
size())y=torch.
rand(5,3)print(torch.
add(x,y))36深度学习AMI开发人员指南激活框架您应该会看到系统输出初始随机数组,然后输出大小,然后添加另一个随机数组.
安装PyTorch的每日构建版本(试验)如何从每日构建安装PyTorch您可以将最新的PyTorch工作版本安装到您的采用Conda的DeepLearningAMI上的任一或两个PyTorchConda环境.
1.
(适用于Python3的选项)-激活Python3PyTorch环境:$sourceactivatepytorch_p36(适用于Python2的选项)-激活Python2PyTorch环境:$sourceactivatepytorch_p272.
其余步骤假定您使用的是pytorch_p36环境.
删除当前安装的PyTorch:(pytorch_p36)$pipuninstalltorch3.
(适用于GPU实例的选项)-使用CUDA10.
0安装最新的PyTorch每日构建版本:(pytorch_p36)$pipinstalltorch_nightly-fhttps://download.
pytorch.
org/whl/nightly/cu100/torch_nightly.
html(适用于CPU实例的选项)-对于不使用GPU的实例,安装最新的PyTorch每日构建版本:(pytorch_p36)$pipinstalltorch_nightly-fhttps://download.
pytorch.
org/whl/nightly/cpu/torch_nightly.
html4.
要验证您已成功安装最新的每日构建版本,请启动IPython终端并检查PyTorch版本.
(pytorch_p36)$ipythonimporttorchprint(torch.
__version__)输出应类似于以下内容:1.
0.
0.
dev201809225.
要验证PyTorch每日构建版本是否适用于MNIST示例,您可以从PyTorch的示例存储库运行测试脚本:(pytorch_p36)$cd~(pytorch_p36)$gitclonehttps://github.
com/pytorch/examples.
gitpytorch_examples(pytorch_p36)$cdpytorch_examples/mnist(pytorch_p36)$pythonmain.
py||exit1更多教程您可以在DLAMI主目录的采用Conda的DeepLearningAMI教程文件夹中找到更多教程.
如需查看更多教程和示例,请参阅该框架的官方文档、PyTorch文档和PyTorch网站.
有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)37深度学习AMI开发人员指南激活框架TensorFlow激活TensorFlow本教程介绍如何在运行采用Conda的DeepLearningAMI(DLAMIonConda)的实例上激活TensorFlow并运行TensorFlow程序.
当框架的稳定的Conda程序包发布时,它会在DLAMI上进行测试并预安装.
如果您希望运行最新的、未经测试的每日构建版本,您可以手动安装TensorFlow的每日构建版本(试验)(p.
38).
在DLAMIwithConda上运行TensorFlow1.
为了激活TensorFlow,打开DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
对于具有CUDA9.
0和MKL-DNN的Python3上的TensorFlow和Keras2,运行以下命令:$sourceactivatetensorflow_p36对于具有CUDA9.
0和MKL-DNN的Python2上的TensorFlow和Keras2,运行以下命令:$sourceactivatetensorflow_p272.
启动iPython终端:(tensorflow_p36)$ipython3.
运行TensorFlow程序以验证其是否正常运行:importtensorflowastfhello=tf.
constant('Hello,TensorFlow!
')sess=tf.
Session()print(sess.
run(hello))Hello,TensorFlow!
应显示在您的屏幕上.
安装TensorFlow的每日构建版本(试验)您可以将最新的TensorFlow版本安装到您的采用Conda的DeepLearningAMI上的任一或两个TensorFlowConda环境.
从每日构建版本安装TensorFlow1.
对于Python3TensorFlow环境,运行以下命令:$sourceactivatetensorflow_p36对于Python2TensorFlow环境,运行以下命令:$sourceactivatetensorflow_p272.
删除当前安装的TensorFlow.
Note其余步骤假定您使用的是tensorflow_p36环境.
38深度学习AMI开发人员指南激活框架(tensorflow_p36)$pipuninstalltensorflow3.
安装TensorFlow的最新每日构建版本.
(tensorflow_p36)$pipinstalltf-nightly4.
要验证您是否已成功安装最新的每日构建版本,请启动IPython终端并检查TensorFlow版本.
(tensorflow_p36)$ipythonimporttensorflowprint(tensorflow.
__version__)输出应类似于以下内容:1.
12.
0-dev20181012更多教程使用Horovod的TensorFlow(p.
56)TensorBoard(p.
45)TensorFlowServing(p.
110)有关教程,请参阅DLAMI的主目录中名为##Conda#DeepLearningAMItutorials的文件夹.
有关更多教程和示例,请参阅TensorFlowPythonAPI的TensorFlow文档或访问TensorFlow网站.
TensorFlow2本教程介绍如何在运行采用Conda的DeepLearningAMI(DLAMIonConda)的实例上激活TensorFlow2并运行TensorFlow2程序.
当框架的稳定的Conda程序包发布时,它会在DLAMI上进行测试并预安装.
如果您希望运行最新的、未经测试的每日构建版本,您可以手动安装TensorFlow2的每日构建版本(试验)(p.
40).
激活TensorFlow2在DLAMIwithConda上运行TensorFlow1.
要激活TensorFlow2,请打开带有Conda的DLAMI的AmazonElasticComputeCloud(AmazonEC2)实例.
对于具有CUDA10.
0和MKL-DNN的Python3上的TensorFlow2和Keras2,运行以下命令:$sourceactivatetensorflow2_p36对于具有CUDA10.
0和MKL-DNN的Python2上的TensorFlow2和Keras2,运行以下命令:$sourceactivatetensorflow2_p272.
启动iPython终端:(tensorflow2_p36)$ipython3.
运行TensorFlow2程序以验证其是否正常运行:39深度学习AMI开发人员指南激活框架importtensorflowastfhello=tf.
constant('Hello,TensorFlow!
')tf.
print(hello)Hello,TensorFlow!
应显示在您的屏幕上.
安装TensorFlow2的每日构建版本(试验)您可以将最新的TensorFlow2版本安装到您的采用Conda的DeepLearningAMI上的任一或两个TensorFlow2Conda环境.
从每日构建版本安装TensorFlow1.
对于Python3TensorFlow2环境,运行以下命令:$sourceactivatetensorflow2_p36对于Python2TensorFlow2环境,运行以下命令:$sourceactivatetensorflow2_p272.
删除当前安装的TensorFlow.
Note其余步骤假定您使用的是tensorflow2_p36环境.
(tensorflow2_p36)$pipuninstalltensorflow3.
安装TensorFlow的最新每日构建版本.
(tensorflow2_p36)$pipinstalltf-nightly4.
要验证您是否已成功安装最新的每日构建版本,请启动IPython终端并检查TensorFlow版本.
(tensorflow2_p36)$ipythonimporttensorflowprint(tensorflow.
__version__)输出应类似于以下内容:2.
1.
0-dev20191122更多教程有关教程,请参阅DLAMI的主目录中名为##Conda#DeepLearningAMItutorials的文件夹.
有关更多教程和示例,请参阅TensorFlowPythonAPI的TensorFlow文档或访问TensorFlow网站.
TensorFlowwithHorovod本教程介绍如何在AWSDeepLearningAMI(DLAMI)withConda上激活TensorFlowwithHorovod.
Horovod已为TensorFlow预安装在Conda环境中.
推荐使用Python3环境.
40深度学习AMI开发人员指南激活框架Note仅支持P3.
*、P2.
*和G3.
*实例类型.
在DLAMIwithConda上激活TensorFlow并测试Horovod1.
打开DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
有关DLAMI入门帮助,请参阅thesectioncalled"如何开始使用DLAMI"(p.
3).
(推荐)对于使用CUDA9的Python3上的TensorFlowwithHorovod,请运行此命令:$sourceactivatetensorflow_p36对于使用CUDA9的Python2上的TensorFlowwithHorovod,请运行此命令:$sourceactivatetensorflow_p272.
启动iPython终端:(tensorflow_p36)$ipython3.
测试导入TensorFlowwithHorovod以验证其是否运行正常:importhorovod.
tensorflowashvdhvd.
init()以下内容可能显示在您的屏幕上(您可能会忽略任何警告消息).
[[55425,1],0]:Ahigh-performanceOpenMPIpoint-to-pointmessagingmodulewasunabletofindanyrelevantnetworkinterfaces:Module:OpenFabrics(openib)Host:ip-172-31-72-4Anothertransportwillbeusedinstead,althoughthismayresultinlowerperformance.
更多信息使用Horovod的TensorFlow(p.
56)有关教程,请参阅DLAMI的主目录中的examples/horovod文件夹.
有关更多教程和示例,请参阅HorovodGitHub项目.
TensorFlow2withHorovod本教程介绍如何在AWSDeepLearningAMI(DLAMI)withConda上激活TensorFlow2withHorovod.
Horovod已为TensorFlow2预安装在Conda环境中.
推荐使用Python3环境.
41深度学习AMI开发人员指南激活框架Note仅支持P3.
*、P2.
*和G3.
*实例类型.
在DLAMIwithConda上激活TensorFlow2并测试Horovod1.
打开DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
有关DLAMI入门帮助,请参阅thesectioncalled"如何开始使用DLAMI"(p.
3).
(推荐)对于使用CUDA10的Python3上的TensorFlow2withHorovod,请运行此命令:$sourceactivatetensorflow2_p36对于使用CUDA10的Python2上的TensorFlow2withHorovod,请运行此命令:$sourceactivatetensorflow2_p272.
启动iPython终端:(tensorflow2_p36)$ipython3.
测试导入TensorFlow2withHorovod以验证其是否运行正常:importhorovod.
tensorflowashvdhvd.
init()如果没有收到任何输出,表示Horovod工作正常.
以下内容可能显示在您的屏幕上(您可能会忽略任何警告消息).
[[55425,1],0]:Ahigh-performanceOpenMPIpoint-to-pointmessagingmodulewasunabletofindanyrelevantnetworkinterfaces:Module:OpenFabrics(openib)Host:ip-172-31-72-4Anothertransportwillbeusedinstead,althoughthismayresultinlowerperformance.
更多信息有关教程,请参阅DLAMI的主目录中的examples/horovod文件夹.
有关更多教程和示例,请参阅HorovodGitHub项目.
42深度学习AMI开发人员指南调试和可视化TheanoTheano教程Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
要激活框架,请按照您的采用Conda的DeepLearningAMI上的这些说明进行操作.
对于使用CUDA9和cuDNN7的Python3中的Theano+Keras:$sourceactivatetheano_p36对于使用CUDA9和cuDNN7的Python2中的Theano+Keras:$sourceactivatetheano_p27启动iPython终端.
(theano_p36)$ipython运行快速Theano程序.
importnumpyimporttheanoimporttheano.
tensorasTfromtheanoimportppx=T.
dscalar('x')y=x**2gy=T.
grad(y,x)pp(gy)您应该会看到Theano计算符号梯度.
更多教程如需查看更多教程和示例,请参阅该框架的官方文档、TheanoPythonAPI和Theano网站.
调试和可视化了解适用于DLAMI的调试和可视化选项.
单击其中一个选项可了解如何使用该选项.
主题MXBoard(p.
43)TensorBoard(p.
45)MXBoardMXBoard可让您使用TensorBoard软件目视检查和解释您的MXNet运行和图表.
它运行了一个Web服务器,该服务器提供了一个用于查看MXBoard可视化并与之交互的网页.
43深度学习AMI开发人员指南调试和可视化MXNet、TensorBoard和MXBoard随采用Conda的DeepLearningAMI(DLAMIwithConda)一起预安装.
在本教程中,您使用MXBoard功能生成与TensorBoard兼容的日志.
主题UsingMXNetwithMXBoard(p.
44)MoreInfo(p.
45)UsingMXNetwithMXBoard生成与TensorBoard兼容的MXBoard日志数据1.
连接到DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
2.
激活Python3MXNet环境.
$sourceactivatemxnet_p363.
准备Python脚本以将一般运算符生成的数据写入事件文件中.
数据生成10次,标准偏差减小,然后每次将写入到事件文件中.
您将看到数据分布逐渐以平均值为中心.
请注意,您将在日志文件夹中指定事件文件.
您将此文件夹路径传递到TensorBoard二进制文件.
$vimxboard_normal.
py4.
将以下内容粘贴到文件中并保存它:importmxnetasmxfrommxboardimportSummaryWriterwithSummaryWriter(logdir='.
/logs')assw:foriinrange(10):#createanormaldistributionwithfixedmeananddecreasingstddata=mx.
nd.
normal(loc=0,scale=10.
0/(i+1),shape=(10,3,8,8))sw.
add_histogram(tag='norml_dist',values=data,bins=200,global_step=i)5.
运行脚本.
这将在logs文件夹中生成可用于可视化的日志.
$pythonmxboard_normal.
py6.
现在,您必须切换到TensorFlow环境以使用TensorBoard和MXBoard可视化日志.
这是MXBoard和TensorBoard所需的依赖项.
$sourceactivatetensorflow_p367.
将日志的位置传递到tensorboard:$tensorboard--logdir=.
/logs--host=127.
0.
0.
1--port=8888TensorBoard在端口8888上启动了可视化Web服务器.
8.
为了方便从您的本地浏览器进行访问,您可以将Web服务器端口更改为端口80或其他端口.
无论您使用哪个端口,都需要在EC2安全组中为您的DLAMI打开此端口.
您还可以使用端口转发.
有关更改安全组设置和端口转发的说明,请参阅设置JupyterNotebook服务器(p.
18).
默认设置如下一步中所述.
44深度学习AMI开发人员指南调试和可视化Note如果您需要同时运行Jupyter服务器和MXBoard服务器,请对每个服务器使用不同的端口.
9.
在您的EC2实例上打开端口8888(或您分配给可视化Web服务器的端口).
a.
在https://console.
amazonaws.
cn/ec2/上的AmazonEC2控制台中打开您的EC2实例.
b.
在AmazonEC2控制台中,选择Network&Security(网络与安全),然后选择SecurityGroups(安全组).
c.
对于SecurityGroup(安全组),选择最近创建的一个安全组(请参阅描述中的时间戳).
d.
选择Inbound(入站)选项卡,然后选择Edit(编辑).
e.
选择AddRule.
f.
在新行中,键入以下内容:类型.
自定义TCPRule协议:TCP端口范围8888(或您分配给可视化效果服务器的端口)源:CustomIP(specifyaddress/range)10.
如果您需要从本地浏览器可视化数据,请键入以下命令以将EC2实例上渲染的数据转发到本地计算机.
$ssh-Y-Llocalhost:8888:localhost:8888user_id@ec2_instance_ip11.
使用运行DLAMIwithConda的EC2实例的公有IP或DNS地址以及您为MXBoard打开的端口打开用于MXBoard可视化的网页:http://127.
0.
0.
1:8888MoreInfo要了解有关MXBoard的更多信息,请参阅MXBoard网站.
TensorBoardTensorBoard可让您以视觉方式检查和解释您的TensorFlow运行和图表.
它运行了一个Web服务器,该服务器提供了一个用于查看TensorBoard可视化并与之交互的网页.
TensorFlow和TensorBoard随采用Conda的DeepLearningAMI(DLAMIwithConda)一起预安装.
DLAMIwithConda还包含一个示例脚本,该脚本使用TensorFlow通过启用额外的日志记录功能训练MNIST模型.
MNIST是通常用于训练图像识别模型的手写编号的数据库.
在本教程中,您将使用该脚本来训练MNIST模型、TensorBoard和日志,以创建可视化.
主题训练MNIST模型并使用TensorBoard将训练可视化(p.
45)更多信息(p.
46)训练MNIST模型并使用TensorBoard将训练可视化使用TensorBoard将MNIST模型训练可视化1.
连接到DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
2.
激活Python2.
7TensorFlow环境并导航到包含带TensorBoard示例脚本的文件夹所在的目录:45深度学习AMI开发人员指南分布式训练$sourceactivatetensorflow_p27$cd~/examples/tensorboard/3.
运行训练启用了延长日志记录的MNIST模型的脚本:$pythonmnist_with_summaries.
py该脚本将日志写入/tmp/tensorflow/mnist.
4.
将日志的位置传递到tensorboard:$tensorboard--logdir=/tmp/tensorflow/mnistTensorBoard在端口6006上启动了可视化Web服务器.
5.
为了方便从您的本地浏览器进行访问,您可以将Web服务器端口更改为端口80或其他端口.
无论您使用哪个端口,都需要在EC2安全组中为您的DLAMI打开此端口.
您还可以使用端口转发.
有关更改安全组设置和端口转发的说明,请参阅设置JupyterNotebook服务器(p.
18).
默认设置如下一步中所述.
Note如果您需要同时运行Jupyter服务器和TensorBoard服务器,请对每个服务器使用不同的端口.
6.
在您的EC2实例上打开端口6006(或您分配给可视化Web服务器的端口).
a.
在https://console.
amazonaws.
cn/ec2/上的AmazonEC2控制台中打开您的EC2实例.
b.
在AmazonEC2控制台中,选择Network&Security(网络与安全),然后选择SecurityGroups(安全组).
c.
对于SecurityGroup(安全组),选择最近创建的一个安全组(请参阅描述中的时间戳).
d.
选择Inbound(入站)选项卡,然后选择Edit(编辑).
e.
选择AddRule.
f.
在新行中,键入以下内容:类型:自定义TCPRule协议:TCP端口范围:6006(或您分配给可视化服务器的端口)源:CustomIP(specifyaddress/range)7.
使用运行DLAMIwithConda的EC2实例的公有IP或DNS地址以及您为TensorBoard打开的端口打开用于TensorBoard可视化的网页:http://YourInstancePublicDNS:6006更多信息要了解有关TensorBoard的更多信息,请参阅TensorBoard网站.
分布式训练了解DLAMI用于训练多个GPUs的选项.
要提高性能,请参阅ElasticFabricAdapter(p.
62)单击其中一个选项可了解如何使用该选项.
主题46深度学习AMI开发人员指南分布式训练Chainer(p.
47)带MXNet的Keras(p.
55)使用Horovod的TensorFlow(p.
56)ChainerChainer是一种基于Python的灵活框架,用于轻松直观地编写复杂的神经网络架构.
利用Chainer,您可以轻松使用多GPU实例进行训练.
Chainer还会自动记录结果、图表损失和精度并生成用于使用计算图来可视化神经网络的输出.
Chainer包含在采用Conda的DeepLearningAMI(DLAMIwithConda)中.
以下主题介绍如何在多个GPU、单个GPU和一个CPU上进行训练,如何创建可视化以及如何测试您的Chainer安装.
主题使用Chainer训练模型(p.
47)使用Chainer在多个GPU上训练(p.
47)使用Chainer在单个GPU上训练(p.
49)使用Chainer在CPU上训练(p.
50)绘制结果(p.
51)测试Chainer(p.
55)更多信息(p.
55)使用Chainer训练模型本教程介绍如何使用示例Chainer脚本来通过MNIST数据集训练模型.
MNIST是通常用于训练图像识别模型的手写编号的数据库.
本教程还将介绍在一个CPU上训练与在一个或多个GPU上训练之间的训练速度差异.
使用Chainer在多个GPU上训练在多个GPU上训练1.
连接到正在运行采用Conda的DeepLearningAMI的实例.
有关如何选择或连接到实例,请参阅thesectioncalled"实例选择"(p.
14)或AmazonEC2文档.
要运行此教程,您将需要使用带至少两个GPU的实例.
2.
激活Python3Chainer环境:$sourceactivatechainer_p363.
要获取最新教程,请克隆Chainer存储库并导航到示例文件夹:(chainer_p36):~$cd~/src(chainer_p36):~/src$CHAINER_VERSION=v$(python-c"importchainer;print(chainer.
__version__)")(chainer_p36):~/src$gitclone-b$CHAINER_VERSIONhttps://github.
com/chainer/chainer.
git(chainer_p36):~/src$cdchainer/examples/mnist4.
在train_mnist_data_parallel.
py脚本中运行示例.
默认情况下,该脚本使用在采用Conda的DeepLearningAMI的实例上运行的GPU.
该脚本最多可在两个GPU上运行.
它将忽略前两个GPU之后的所有GPU.
它会自动检测其中一个GPU或检测到这两个GPU.
如果您运行的是不带GPU的实例,请跳到本教程后面的使用Chainer在CPU上训练(p.
50).
(chainer_p36):~/src/chainer/examples/mnist$pythontrain_mnist_data_parallel.
py47深度学习AMI开发人员指南分布式训练Note由于包含未在DLAMI中包含beta功能,此示例将返回以下错误.
chainerxModuleNotFoundError:Nomodulenamed'chainerx'当Chainer脚本使用MNIST数据库训练模型时,您会看到每个纪元的结果.
然后,您会在脚本运行时看到示例输出.
以下示例输出是在p3.
8xlarge实例上运行的.
该脚本的输出显示"GPU:0,1",这表示它正在使用4个可用GPU中的前两个.
这些脚本通常使用的是以零开头而不是以总计数开头的GPU索引.
GPU:0,1#unit:1000#Minibatch-size:400#epoch:20epochmain/lossvalidation/main/lossmain/accuracyvalidation/main/accuracyelapsed_time10.
2775610.
1147090.
9199330.
96546.
5926120.
08823520.
07992040.
9733340.
97528.
2516230.
05206740.
06970550.
9839670.
97869.
9166140.
03263290.
06380360.
9898340.
980511.
576750.
02721910.
06718590.
99170.
979613.
234160.
01510080.
06638980.
99530.
981314.
906870.
01377650.
06644150.
9954340.
98216.
564980.
01169090.
07375970.
9960.
980118.
217690.
007738580.
07952160.
9973670.
97919.
8797100.
007050760.
08256390.
9976340.
978521.
5388110.
007730190.
08582560.
99780.
978723.
2003120.
01203710.
09402250.
9960340.
977624.
8587130.
009065670.
07534520.
9970330.
982426.
5167140.
008522530.
0829960.
9969670.
981228.
1777150.
006709280.
1023620.
9978670.
977429.
8308160.
008735650.
06915770.
9968670.
983231.
498170.
007171770.
0942680.
9977670.
980233.
152180.
005853930.
07787390.
9982670.
982734.
8268190.
007647730.
1077570.
99750.
977336.
4819200.
006205080.
08343090.
9981670.
983438.
13895.
当您的训练正在运行时,查看您的GPU利用率会很有用.
您可以验证哪些GPU处于活动状态并查看它们的负载.
NVIDIA为此提供了一种工具,可使用命令nvidia-smi运行该工具.
但是,它只会为您48深度学习AMI开发人员指南分布式训练提供利用率的快照,因此,将该工具与Linux命令watch结合使用更具参考性.
以下命令将watch与nvidia-smi结合使用,以便以十分之一秒的时间间隔刷新当前GPU利用率.
打开指向您的DLAMI的另一个终端会话,然后运行以下命令:(chainer_p36):~$watch-n0.
1nvidia-smi您将看到一个类似于以下结果的输出.
使用ctrl-c关闭该工具,或者在您在第一个终端会话中试用其他示例的同时保持其运行.
Every0.
1s:nvidia-smiWedFeb2800:28:502018WedFeb2800:28:502018|NVIDIA-SMI384.
111DriverVersion:384.
111||GPUNamePersistence-M|Bus-IdDisp.
A|VolatileUncorr.
ECC||FanTempPerfPwr:Usage/Cap|Memory-Usage|GPU-UtilComputeM.
||0TeslaV100-SXM2.
.
.
On|00000000:00:1B.
0Off|0||N/A46CP056W/300W|728MiB/16152MiB|10%Default||1TeslaV100-SXM2.
.
.
On|00000000:00:1C.
0Off|0||N/A44CP053W/300W|696MiB/16152MiB|4%Default||2TeslaV100-SXM2.
.
.
On|00000000:00:1D.
0Off|0||N/A42CP038W/300W|10MiB/16152MiB|0%Default||3TeslaV100-SXM2.
.
.
On|00000000:00:1E.
0Off|0||N/A46CP040W/300W|10MiB/16152MiB|0%Default||Processes:GPUMemory||GPUPIDTypeProcessnameUsage||054418Cpython718MiB||154418Cpython686MiB|在本示例中,GPU0和GPU1处于活动状态,而GPU2和3不处于活动状态.
您还可以查看每个GPU的内存利用率.
6.
在训练完成后,记下您的第一个终端会话的已用时间.
在本示例中,已用时间为38.
1389秒.
使用Chainer在单个GPU上训练本示例介绍如何在单个GPU上训练.
如果您只有一个GPU可用或者只是想了解多GPU训练如何利用Chainer进行扩展,则可以执行此操作.
使用Chainer在单个GPU上训练在本示例中,您使用另一个脚本train_mnist.
py,并指示它仅使用带--gpu=0参数的GPU0.
要查看不同的GPU如何在nvidia-smi控制台中激活,您可以通过使用--gpu=1来指示脚本使用GPU编号1.
(chainer_p36):~/src/chainer/examples/mnist$pythontrain_mnist.
py--gpu=0GPU:049深度学习AMI开发人员指南分布式训练#unit:1000#Minibatch-size:100#epoch:20epochmain/lossvalidation/main/lossmain/accuracyvalidation/main/accuracyelapsed_time10.
1923480.
09092350.
9409340.
97195.
386120.
07467670.
0698540.
9765660.
97858.
9714630.
04771520.
07808360.
9849820.
97612.
559640.
03470920.
07010980.
9884980.
978316.
157750.
02638070.
088510.
9915150.
979319.
793960.
02534180.
09458210.
9915990.
976123.
464370.
02099540.
06831930.
9933980.
98127.
031780.
01790360.
0802850.
9941490.
981930.
632590.
01831840.
06904740.
9941980.
982334.
2469100.
01276160.
07763280.
9961650.
981437.
8693110.
01454210.
09701570.
9953650.
980141.
4629120.
01290530.
09226710.
9958990.
98145.
0233130.
01359880.
07171950.
9957490.
985748.
6271140.
008982150.
08407770.
9972160.
983952.
2269150.
01039090.
1235060.
9968320.
977155.
8667160.
0120990.
08264340.
9966160.
984759.
5001170.
00661830.
1019690.
9979990.
982663.
1294180.
009898640.
08777130.
9971160.
982966.
7449190.
01018160.
09726720.
9969660.
982270.
3686200.
008338620.
08993270.
9976490.
983574.
0063在本示例中,在单个GPU上运行花费了将近两倍的时间!
训练较大的模型或较大的数据集将产生不同于本示例的结果,因此,请通过试验来进一步评估GPU性能.
使用Chainer在CPU上训练现在尝试在仅CPU模式下训练.
运行相同的脚本pythontrain_mnist.
py(不带参数):(chainer_p36):~/src/chainer/examples/mnist$pythontrain_mnist.
py在输出中,GPU:-1表示未使用任何GPU:GPU:-1#unit:1000#Minibatch-size:100#epoch:2050深度学习AMI开发人员指南分布式训练epochmain/lossvalidation/main/lossmain/accuracyvalidation/main/accuracyelapsed_time10.
1920830.
09186630.
941950.
971211.
266120.
07323660.
07900550.
9772670.
974723.
982330.
04859480.
07237660.
98440.
978737.
527540.
03527310.
08179550.
9879670.
977251.
639450.
0295660.
08077740.
9902170.
976465.
265760.
0255170.
06787030.
99150.
981479.
127670.
01941850.
07165760.
993550.
980893.
808580.
01745530.
07867680.
9942170.
9809108.
64890.
01489240.
09233960.
9949830.
9791123.
737100.
0180510.
0999240.
994450.
9791139.
483110.
0142410.
08601330.
9957830.
9806156.
132120.
01242220.
08293030.
9959670.
9822173.
173130.
008463360.
1223460.
9971330.
9769190.
365140.
0113920.
09823240.
9963830.
9803207.
746150.
01131110.
09859070.
9965330.
9813225.
764160.
01143280.
09057780.
9964830.
9811244.
258170.
009009450.
09075040.
99740.
9825263.
379180.
01300280.
09170990.
9962170.
9831282.
887190.
009504120.
08506640.
9971330.
9839303.
113200.
008085730.
1123670.
9980670.
9778323.
852在本示例中,MNIST在323秒内完成了训练,这比使用两个GPU时的训练的时间多11倍以上.
如果您曾怀疑过GPU的能力,本示例将展示它们的效率高多少.
绘制结果Chainer还会自动记录结果、图表损失和精度并生成用于绘制计算图的输出.
生成计算图1.
在任何训练运行完成之后,您可导航到result目录并查看运行的精度和损失(以两个自动生成的图像形式显示).
现在,导航到该处,然后列出内容:(chainer_p36):~/src/chainer/examples/mnist$cdresult(chainer_p36):~/src/chainer/examples/mnist/result$lsresult目录包含两个.
png格式的文件:accuracy.
png和loss.
png.
2.
要查看这些图表,请使用scp命令将它们复制到您的本地计算机.
51深度学习AMI开发人员指南分布式训练在macOS终端中,运行以下scp命令会将这三个文件全部下载到您的Downloads文件夹.
将密钥文件的位置和服务器地址的占位符替换为您的信息.
对于其他操作系统,请使用合适的scp命令格式.
注意,对于AmazonLinuxAMI,用户名是ec2-user.
(chainer_p36):~/src/chainer/examples/mnist/result$scp-i"your-key-file.
pem"ubuntu@your-dlami-address.
compute-1.
amazonaws.
com:~/src/chainer/examples/mnist/result/*.
png~/Downloads下图分别是精度图、损失图和计算图的示例.
52深度学习AMI开发人员指南分布式训练53深度学习AMI开发人员指南分布式训练54深度学习AMI开发人员指南分布式训练测试Chainer要使用预安装的测试脚本测试Chainer和验证GPU支持,请运行以下命令:(chainer_p36):~/src/chainer/examples/mnist/result$cd~/src/bin(chainer_p36):~/src/bin$.
/testChainer这将下载Chainer源代码并运行Chainer多GPUMNIST示例.
更多信息要了解有关Chainer的更多信息,请参阅Chainer文档网站.
Chainer示例文件夹包含多个示例.
请试用这些示例以了解其性能.
带MXNet的Keras本教程介绍如何在采用Conda的DeepLearningAMI上激活和使用带MXNet后端的Keras2.
激活带MXNet后端的Keras,并在DLAMIwithConda上测试它1.
要激活带MXNet后端的Keras,请打开DLAMIwithConda的AmazonElasticComputeCloud(AmazonEC2)实例.
对于Python3,运行以下命令:$sourceactivatemxnet_p36对于Python2,运行以下命令:$sourceactivatemxnet_p272.
启动iPython终端:(mxnet_p36)$ipython3.
测试导入带MXNet的Keras以验证其是否运行正常:importkerasask以下内容应显示在您的屏幕上(可能出现在一些警告消息之后).
UsingMXNetbackendNote如果您收到错误,或如果仍在使用TensorFlow后端,则您需要手动更新您的Keras配置.
编辑~/.
keras/keras.
json文件并将后端设置更改为mxnet.
Keras-MXNetMulti-GPU训练教程训练卷积神经网络(CNN)1.
在DLAMI中打开终端和SSH.
55深度学习AMI开发人员指南分布式训练2.
导航到~/examples/keras-mxnet/文件夹.
3.
在终端窗口中运行nvidia-smi以确定DLAMI上的可用GPU数.
在下一步骤中,您将按原样运行脚本(如果您有四个GPU).
4.
(可选)运行以下命令可打开脚本以进行编辑.
(mxnet_p36)$vicifar10_resnet_multi_gpu.
py5.
(可选)脚本具有定义GPU数的以下行.
如果需要,请更新它.
model=multi_gpu_model(model,gpus=4)6.
现在,运行训练.
(mxnet_p36)$pythoncifar10_resnet_multi_gpu.
pyNote利用channels_firstimage_data_format设置,Keras-MXNet的运行速度可以加快2倍.
要更改为channels_first,请编辑Keras配置文件(~/.
keras/keras.
json)并设置以下内容:"image_data_format":"channels_first".
有关更多的性能优化方法,请参阅Keras-MXNet性能优化指南.
更多信息您可以在采用Conda的DeepLearningAMI~/examples/keras-mxnet目录中查找有关具有MXNet后端的Keras的示例.
有关更多教程和示例,请参阅Keras-MXNetGitHub项目.
使用Horovod的TensorFlow本教程介绍如何在TensorFlow上使用采用Conda的DeepLearningAMIwithHorovod.
Horovod已针对TensorFlow预安装在Conda环境中.
推荐使用Python3环境.
此处的说明假定您有一个正在运行的DLAMI实例,其中包含一个或多个GPUs.
有关更多信息,请参阅如何开始使用DLAMI(p.
3).
Note仅支持P3.
*、P2.
*和G3.
*实例类型.
Note在两个位置有mpirun(通过OpenMPI)可用.
它在/usr/bin和/home/ubuntu/anaconda3/envs//bin中可用.
env是与框架对应的环境,例如Tensorflow和ApacheMXNet.
更新的OpenMPI版本在Conda环境中可用.
我们建议使用mpirun二进制文件的绝对路径或--前缀标志来运行mpi工作负载.
例如,对于Tensorflowpython36环境,请使用以下任一方式:/home/ubuntu/anaconda3/envs/tensorflow_p36/bin/mpirunormpirun--prefix/home/ubuntu/anaconda3/envs/tensorflow_p36/bin使用Horovod激活和测试TensorFlow1.
验证您的实例是否具有活动GPUs.
NVIDIA为此提供了一个工具:56深度学习AMI开发人员指南分布式训练$nvidia-smi2.
激活Python3TensorFlow环境:$sourceactivatetensorflow_p363.
启动iPython终端:(tensorflow_p36)$ipython4.
测试导入TensorFlowwithHorovod以验证其是否正常运行:importhorovod.
tensorflowashvdhvd.
init()以下内容可能显示在您的屏幕上(可能出现在一些警告消息之后).
[[55425,1],0]:Ahigh-performanceOpenMPIpoint-to-pointmessagingmodulewasunabletofindanyrelevantnetworkinterfaces:Module:OpenFabrics(openib)Host:ip-172-31-72-4Anothertransportwillbeusedinstead,althoughthismayresultinlowerperformance.
配置您的Horovod主机文件您可以将Horovod用于单节点多GPU训练或多节点多GPU训练.
如果您打算使用多个节点进行分布式训练,则必须向主机文件添加每个DLAMI的私有IP地址.
您当前登录的DLAMI称为领导.
作为集群的一部分的其他DLAMI实例称为成员.
在开始本节之前,请启动一个或多个DLAMI,然后等待它们进入准备就绪状态.
示例脚本需要一个主机文件,即使您计划只使用一个DLAMI,也请创建仅具有一个条目的主机文件.
如果您在训练开始后编辑主机文件,则必须重新启动训练以使已添加或删除的主机生效.
针对训练配置Horovod1.
将目录更改为训练脚本所在的目录.
cd~/examples/horovod/tensorflow2.
使用vim编辑领导的主目录中的文件.
vimhosts3.
在AmazonElasticComputeCloud控制台中选择其中一个成员,控制台的说明窗格将出现.
找到PrivateIPs(私有IAM)字段,复制IP并将其粘贴到文本文件中.
在新行上复制每个成员的私有IP.
然后,在每个IP的旁边添加一个空格,然后添加文本slots=8,如下所示.
这表示每个实例具有的GPUs数.
p3.
16xlarge实例具有8个GPUs,因此,如果您选择了不同的实例类型,您将为每个实例提供实际的GPUs数.
对于领导,您可以使用localhost.
对于包含4个节点的集群,它应类似于以下内容:172.
100.
1.
200slots=857深度学习AMI开发人员指南分布式训练172.
200.
8.
99slots=8172.
48.
3.
124slots=8localhostslots=8保存文件并退回到领导的终端.
4.
将成员实例使用的SSH密钥添加到ssh-agent.
eval`ssh-agent-s`ssh-add.
pem5.
现在,您的领导知道如何联系每个成员.
这一切都将在专用网络接口上发生.
接下来,使用简短的bash函数来帮助将命令发送到每个成员.
functionrunclust(){whileread-u10host;dohost=${host%%slots*};ssh-o"StrictHostKeyCheckingno"$host""$2"";done10in()---->1importhorovod.
tensorflowashvd~/anaconda3/envs/tensorflow_p36/lib/python3.
6/site-packages/horovod/tensorflow/__init__.
pyin()***34*check_extension('horovod.
tensorflow','HOROVOD_WITH_TENSORFLOW',__file__,'mpi_lib')***35*--->36fromhorovod.
tensorflow.
mpi_opsimportallgather,broadcast,_allreduce***37*fromhorovod.
tensorflow.
mpi_opsimportinit,shutdown***38*fromhorovod.
tensorflow.
mpi_opsimportsize,local_size,rank,local_rank~/anaconda3/envs/tensorflow_p36/lib/python3.
6/site-packages/horovod/tensorflow/mpi_ops.
pyin()***56****57*MPI_LIB=_load_library('mpi_lib'+get_ext_suffix(),--->58['HorovodAllgather','HorovodAllreduce'])***59****60*_basics=_HorovodBasics(__file__,'mpi_lib')~/anaconda3/envs/tensorflow_p36/lib/python3.
6/site-packages/horovod/tensorflow/mpi_ops.
pyin_load_library(name,op_list)***43*"""***44*filename=resource_loader.
get_path_to_datafile(name)--->45library=load_library.
load_op_library(filename)***46*forexpected_opin(op_listor[]):***47*forlib_opinlibrary.
OP_LIST.
op:~/anaconda3/envs/tensorflow_p36/lib/python3.
6/site-packages/tensorflow/python/framework/load_library.
pyinload_op_library(library_filename)***59*RuntimeError:whenunabletoloadthelibraryorgetthepythonwrappers.
***60*"""--->61lib_handle=py_tf.
TF_LoadLibrary(library_filename)***62****63*op_list_str=py_tf.
TF_GetOpList(lib_handle)NotFoundError:/home/ubuntu/anaconda3/envs/tensorflow_p36/lib/python3.
6/site-packages/horovod/tensorflow/mpi_lib.
cpython-36m-x86_64-linux-gnu.
so:undefinedsymbol:_ZN10tensorflow14kernel_factory17OpKernelRegistrar12InitInternalEPKNS_9KernelDefEN4absl11string_viewEP更多信息有关实用工具和示例,请参阅DLAMI的主目录中的~/examples/horovod文件夹.
有关更多教程和示例,请参阅HorovodGitHub项目.
ElasticFabricAdapterElasticFabricAdapter(EFA)是一种网络设备,可以将其附加到DLAMI实例以加速高性能计算(HPC)应用程序.
通过使用EFA,您可以实现本地HPC集群的应用程序性能,并具有AWS云提供的可扩展性、灵活性和弹性.
62深度学习AMI开发人员指南ElasticFabricAdapter以下主题将向您展示如何开始将EFA与DLAMI结合使用.
主题使用EFA启动AWSDeepLearningAMI实例(p.
63)在DLAMI上使用EFA(p.
66)使用EFA启动AWSDeepLearningAMI实例最新DLAMI可随时与EFA结合使用,并随附所需的驱动程序、内核模块、libfabric、openmpi和适用于GPU实例的NCCLOFI插件.
支持的CUDA版本:具有EFA的NCCL应用程序仅在CUDA-10.
0、CUDA-10.
1、CUDA-10.
2和CUDA-11.
0上受支持,因为NCCLOFI插件需要NCCL版本>2.
4.
2.
注意:在EFA上使用mpirun运行NCCL应用程序时,必须将EFA支持的安装的完整路径指定为:/opt/amazon/openmpi/bin/mpirun要使您的应用程序能够使用EFA,请将FI_PROVIDER="efa"添加到mpirun命令,如在DLAMI上使用EFA(p.
66)中所示.
主题准备启用EFA的安全组(p.
63)启动实例(p.
64)验证EFA(p.
64)准备启用EFA的安全组EFA需要允许进出安全组本身的所有入站和出站流量的安全组.
有关更多信息,请参阅EFA文档.
1.
通过https://console.
aws.
amazon.
com/ec2/打开AmazonEC2控制台.
2.
在导航窗格中,选择SecurityGroups,然后选择CreateSecurityGroup.
3.
在CreateSecurityGroup窗口中,执行以下操作:对于Securitygroupname(安全组名称),输入安全组的描述性名称,例如EFA-enabledsecuritygroup.
(可选)对于Description(描述),输入安全组的简要描述.
对于VPC,选择要在其中启动启用了EFA的实例的VPC.
选择创建.
4.
选择您创建的安全组,然后在Description(描述)选项卡上复制GroupID(组ID).
5.
在Inbound(入站)和Outbound(出站)选项卡上,执行以下操作:选择Edit.
对于Type(类型),请选择Alltraffic(所有流量).
对于Source,选择Custom.
将您复制的安全组ID粘贴到该字段中.
选择Save.
6.
启用入站流量,请参考授权您Linux实例的入站流量.
如果您跳过此步骤,您将无法与您的DLAMI实例进行通信.
63深度学习AMI开发人员指南ElasticFabricAdapter启动实例上的EFA目前支持以下实例类型和操作系统:AWSDeepLearningAMIP3dn.
24xlarge:AmazonLinux、AmazonLinux2、Ubuntu16.
04和Ubuntu18.
04P4d.
24xlarge:AmazonLinux2、Ubuntu16.
04和Ubuntu18.
04以下部分说明如何启动启用了EFA的DLAMI实例.
有关启动启用了EFA的实例的更多信息,请参阅在集群置放群组中启动启用了EFA的实例.
1.
通过https://console.
aws.
amazon.
com/ec2/打开AmazonEC2控制台.
2.
选择LaunchInstance.
3.
在选择一个AMI页面上,选择"深度学习AMI(Ubuntu18.
04)版本25.
0"4.
在ChooseanInstanceType页面上,选择以下支持的实例类型之一,然后选择Next:配置实例详细信息.
有关支持的实例列表,请参阅此链接:https://docs.
aws.
amazon.
com/AWSEC2/latest/UserGuide/efa-start.
html5.
在ConfigureInstanceDetails(配置实例详细信息)页面中,执行以下操作:对于Numberofinstances(实例的数量),请输入要启动的启用了EFA的实例数量.
对于Network(网络)和Subnet(子网),请选择要在其中启动实例的VPC和子网.
[可选]对于Placementgroup(置放群组),选择Addinstancetoplacementgroup(将实例添加到置放群组).
为获得最佳性能,请在置放群组中启动实例.
[可选]对于Placementgroupname(置放群组名称),选择Addtoanewplacementgroup(添加到新置放群组),输入置放群组的描述性名称,然后对于Placementgroupstrategy(置放群组策略),选择cluster(集群).
请确保在此页面上启用"ElasticFabricAdapter".
如果禁用此选项,请将子网更改为支持所选实例类型的子网.
在NetworkInterfaces(网络接口)部分中,为设备eth0选择Newnetworkinterface(新网络接口).
您可以选择指定一个主要IPv4地址以及一个或多个辅助IPv4地址.
如果您在具有关联的IPv6CIDR块的子网中启动实例,则可以选择指定主IPv6地址以及一个或多个辅助IPv6地址.
选择Next:(下一步:).
添加存储.
6.
在AddStorage(添加存储)页面上,除了AMI指定的卷(如根设备卷)以外,还要指定要附加到实例的卷,然后选择Next:(下一步:).
添加标签.
7.
在AddTags页面上,为实例指定标签(如用户友好型名称),然后选择Next:配置安全组.
8.
在ConfigureSecurityGroup页面上,对于Assignasecuritygroup,选择Selectanexistingsecuritygroup,然后选择您之前创建的安全组.
9.
选择ReviewandLaunch.
10.
在ReviewInstanceLaunch(核查实例启动)页面上,检查这些设置,然后选择Launch(启动)以选择一个密钥对并启动您的实例.
验证EFA通过控制台启动实例后,在AWS控制台中查看实例详细信息.
为此,请在EC2控制台中选择实例,然后查看页面下部窗格中的Description(描述)选项卡.
找到参数"NetworkInterfaces:eth0",然后单击eth0,这将弹出一个弹出窗口.
确保"ElasticFabricAdapter"已启用.
如果未启用EFA,您可以通过以下任一方式解决此问题:终止EC2实例并使用相同步骤启动新实例.
确保已附加EFA.
将EFA附加到现有实例.
64深度学习AMI开发人员指南ElasticFabricAdapter1.
在EC2控制台中,转到NetworkInterfaces(网络接口).
2.
单击CreateaNetworkInterface(创建虚拟网络接口).
3.
选择您的实例所在的相同子网.
4.
确保启用"ElasticFabricAdapter"并点击Create(创建).
5.
返回EC2Instances(EC2实例)选项卡并选择您的实例.
6.
转到操作:实例状态并在附加EFA之前停止实例.
7.
从Actions(操作)中,选择Networking(联网):附加网络接口.
8.
选择您刚刚创建的界面,然后点击"附加".
9.
重新启动您的实例.
通过实例以下测试脚本已存在于DLAMI中.
运行它以确保内核模块正确加载.
$fi_info-pefa您的输出应类似于以下内容.
provider:efafabric:EFA-fe80::e5:56ff:fe34:56a8domain:efa_0-rdmversion:2.
0type:FI_EP_RDMprotocol:FI_PROTO_EFAprovider:efafabric:EFA-fe80::e5:56ff:fe34:56a8domain:efa_0-dgrmversion:2.
0type:FI_EP_DGRAMprotocol:FI_PROTO_EFAprovider:efa;ofi_rxdfabric:EFA-fe80::e5:56ff:fe34:56a8domain:efa_0-dgrmversion:1.
0type:FI_EP_RDMprotocol:FI_PROTO_RXD验证安全组配置以下测试脚本已存在于DLAMI中.
运行它以确保您创建的安全组配置正确.
$cd~/src/bin/efa-tests/$.
/efa_test.
sh您的输出应类似于以下内容.
Startingserver.
.
.
Startingclient.
.
.
bytes#sent#acktotaltimeMB/secusec/xferMxfers/sec6410=101.
2k0.
02s0.
061123.
550.
0025610=105k0.
00s17.
6614.
500.
071k10=1020k0.
00s67.
8115.
100.
074k10=1080k0.
00s237.
4517.
250.
0664k10=101.
2m0.
00s921.
1071.
150.
011m10=1020m0.
01s2122.
41494.
050.
0065深度学习AMI开发人员指南ElasticFabricAdapter如果它停止响应或未完成,请确保您的安全组具有正确的入站/出站规则.
在DLAMI上使用EFA以下部分描述如何使用EFA在AWSDeepLearningAMI上运行多节点应用程序.
主题使用EFA运行多节点应用程序(p.
66)使用EFA运行多节点应用程序要跨节点集群运行应用程序,需要进行某些配置.
启用无密码SSH选择集群中的一个节点作为领导节点.
其余节点称为成员节点.
1.
在领导节点上,生成RSA密钥对.
ssh-keygen-trsa-N""-f~/.
ssh/id_rsa2.
更改领导节点上私有密钥的权限.
chmod600~/.
ssh/id_rsa3.
复制公有密钥~/.
ssh/id_rsa.
pub并将其附加到集群中成员节点的~/.
ssh/authorized_keys.
4.
现在,您应该能够使用私有ip从领导节点直接登录到成员节点.
ssh5.
将以下内容添加到领导节点上的~/.
ssh/config文件,禁用strictHostKeyChecking并在领导节点上启用代理转发:Host*ForwardAgentyesHost*StrictHostKeyCheckingno6.
在AmazonLinux和AmazonLinux2实例上,在主节点上运行以下命令,为配置文件提供正确的权限:chmod600~/.
ssh/config创建主机文件在领导节点上,创建主机文件以标识集群中的节点.
主机文件必须针对集群中的每个节点都有一个条目.
创建文件~/hosts并使用私有IP添加每个节点,如下所示:localhostslots=8slots=8slots=82节点NCCL插件检查nccl_message_transfer是一项简单的测试,可确保NCCLOFI插件按预期工作.
测试验证NCCL的连接建立和数据传输APIs的功能.
在使用EFA运行NCCL应用程序时,请确保按照示例所示使用到mpirun的完整路径.
根据集群中的实例数和np更改参数N和GPUs.
有关更多信息,请参阅AWSOFINCCL文档.
66深度学习AMI开发人员指南ElasticFabricAdapterP3dn.
24xlarge检查以下nccl_message_transfer测试适用于CUDA10.
0.
您可以通过替换CUDA版本来为CUDA10.
1和10.
2运行命令.
$/opt/amazon/openmpi/bin/mpirun\-n2-N1--hostfilehosts\-xLD_LIBRARY_PATH=/usr/local/cuda-10.
0/efa/lib:/usr/local/cuda-10.
0/lib:/usr/local/cuda-10.
0/lib64:/usr/local/cuda-10.
0:$LD_LIBRARY_PATH\-xFI_PROVIDER="efa"--mcabtltcp,self--mcabtl_tcp_if_excludelo,docker0--bind-tonone\~/src/bin/efa-tests/efa-cuda-10.
0/nccl_message_transfer您的输出应与以下内容类似.
您可以检查输出以查看EFA是否正在将其用作OFI提供程序.
INFO:Function:ofi_initLine:702:NET/OFIForcingAWSOFIndev4INFO:Function:ofi_initLine:714:NET/OFISelectedProviderisefaINFO:Function:mainLine:49:NET/OFIProcessrank1started.
NCCLNetdeviceusedonip-172-31-15-30isAWSLibfabric.
INFO:Function:mainLine:53:NET/OFIReceived4networkdevicesINFO:Function:mainLine:57:NET/OFIServer:Listeningondev0INFO:Function:ofi_initLine:702:NET/OFIForcingAWSOFIndev4INFO:Function:ofi_initLine:714:NET/OFISelectedProviderisefaINFO:Function:mainLine:49:NET/OFIProcessrank0started.
NCCLNetdeviceusedonip-172-31-15-30isAWSLibfabric.
INFO:Function:mainLine:53:NET/OFIReceived4networkdevicesINFO:Function:mainLine:57:NET/OFIServer:Listeningondev0INFO:Function:mainLine:96:NET/OFISendconnectionrequesttorank0INFO:Function:mainLine:69:NET/OFISendconnectionrequesttorank1INFO:Function:mainLine:100:NET/OFIServer:StartacceptingrequestsINFO:Function:mainLine:73:NET/OFIServer:StartacceptingrequestsINFO:Function:mainLine:103:NET/OFISuccessfullyacceptedconnectionfromrank0INFO:Function:mainLine:107:NET/OFIRank1posting255receivebuffersINFO:Function:mainLine:76:NET/OFISuccessfullyacceptedconnectionfromrank1INFO:Function:mainLine:80:NET/OFISent255requeststorank1INFO:Function:mainLine:131:NET/OFIGotcompletionsfor255requestsforrank0INFO:Function:mainLine:131:NET/OFIGotcompletionsfor255requestsforrank1P3dn.
24xlarge上的多节点NCCL性能测试要使用EFA检查NCCL性能,请运行官方NCCL测试存储库上提供的标准NCCL性能测试.
DLAMI随附了已针对CUDA10.
0、10.
1和10.
2构建的这一测试.
您也可以使用EFA运行自己的脚本.
构建您自己的脚本时,请参阅以下指南:提供FI_PROVIDER="efa"标志以启用EFA.
当使用EFA来运行NCCL应用程序时,按照示例所示使用到mpirun的完整路径.
根据集群中实例的数量和GPUs更改参数np和N.
添加NCCL_DEBUG=INFO标志,并确保日志将EFA用法指示为"所选提供程序是EFA".
在任何成员节点上使用watchnvidia-smi命令来监视GPU使用情况.
以下watchnvidia-smi命令适用于CUDA10.
0,并且依赖于您的实例的操作系统.
您可以通过替换CUDA版本来为CUDA10.
1和10.
2运行命令.
AmazonLinux和AmazonLinux2:$/opt/amazon/openmpi/bin/mpirun\-xFI_PROVIDER="efa"-n16-N8\-xNCCL_DEBUG=INFO\67深度学习AMI开发人员指南ElasticFabricAdapter-xNCCL_TREE_THRESHOLD=0\-xLD_LIBRARY_PATH=/usr/local/cuda-10.
0/efa/lib:/usr/local/cuda-10.
0/lib:/usr/local/cuda-10.
0/lib64:/usr/local/cuda-10.
0:/opt/amazon/efa/lib64:/opt/amazon/openmpi/lib64:$LD_LIBRARY_PATH\--hostfilehosts--mcabtltcp,self--mcabtl_tcp_if_excludelo,docker0--bind-tonone\$HOME/src/bin/efa-tests/efa-cuda-10.
0/all_reduce_perf-b8-e1G-f2-g1-c1-n100Ubuntu16.
04和Ubuntu18.
04:$/opt/amazon/openmpi/bin/mpirun\-xFI_PROVIDER="efa"-n16-N8\-xNCCL_DEBUG=INFO\-xNCCL_TREE_THRESHOLD=0\-xLD_LIBRARY_PATH=/usr/local/cuda-10.
0/efa/lib:/usr/local/cuda-10.
0/lib:/usr/local/cuda-10.
0/lib64:/usr/local/cuda-10.
0:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:$LD_LIBRARY_PATH\--hostfilehosts--mcabtltcp,self--mcabtl_tcp_if_excludelo,docker0--bind-tonone\$HOME/src/bin/efa-tests/efa-cuda-10.
0/all_reduce_perf-b8-e1G-f2-g1-c1-n100您的输出应与以下内容类似.
#nThread1nGpus1minBytes8maxBytes1073741824step:2(factor)warmupiters:5iters:100validation:1##Usingdevices#Rank0Pid3801onip-172-31-41-105device0[0x00]TeslaV100-SXM2-32GB#Rank1Pid3802onip-172-31-41-105device1[0x00]TeslaV100-SXM2-32GB#Rank2Pid3803onip-172-31-41-105device2[0x00]TeslaV100-SXM2-32GB#Rank3Pid3804onip-172-31-41-105device3[0x00]TeslaV100-SXM2-32GB#Rank4Pid3805onip-172-31-41-105device4[0x00]TeslaV100-SXM2-32GB#Rank5Pid3807onip-172-31-41-105device5[0x00]TeslaV100-SXM2-32GB#Rank6Pid3810onip-172-31-41-105device6[0x00]TeslaV100-SXM2-32GB#Rank7Pid3813onip-172-31-41-105device7[0x00]TeslaV100-SXM2-32GB#Rank8Pid4124onip-172-31-41-36device0[0x00]TeslaV100-SXM2-32GB#Rank9Pid4125onip-172-31-41-36device1[0x00]TeslaV100-SXM2-32GB#Rank10Pid4126onip-172-31-41-36device2[0x00]TeslaV100-SXM2-32GB#Rank11Pid4127onip-172-31-41-36device3[0x00]TeslaV100-SXM2-32GB#Rank12Pid4128onip-172-31-41-36device4[0x00]TeslaV100-SXM2-32GB#Rank13Pid4130onip-172-31-41-36device5[0x00]TeslaV100-SXM2-32GB#Rank14Pid4132onip-172-31-41-36device6[0x00]TeslaV100-SXM2-32GB#Rank15Pid4134onip-172-31-41-36device7[0x00]TeslaV100-SXM2-32GBip-172-31-41-105:3801:3801[0]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3801:3801[0]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3801:3801[0]NCCLINFONET/OFISelectedProviderisefaNCCLversion2.
4.
8+cuda10.
0ip-172-31-41-105:3810:3810[6]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3810:3810[6]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3810:3810[6]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3805:3805[4]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3805:3805[4]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3805:3805[4]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3807:3807[5]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3807:3807[5]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3807:3807[5]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3803:3803[2]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3803:3803[2]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3803:3803[2]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3813:3813[7]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3802:3802[1]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
10568深度学习AMI开发人员指南ElasticFabricAdapterip-172-31-41-105:3813:3813[7]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3813:3813[7]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3802:3802[1]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3802:3802[1]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3804:3804[3]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
105ip-172-31-41-105:3804:3804[3]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-105:3804:3804[3]NCCLINFONET/OFISelectedProviderisefaip-172-31-41-105:3801:3862[0]NCCLINFOSettingaffinityforGPU0toffffffff,ffffffff,ffffffffip-172-31-41-105:3801:3862[0]NCCLINFONCCL_TREE_THRESHOLDsetbyenvironmentto0.
ip-172-31-41-36:4128:4128[4]NCCLINFOBootstrap:Using[0]ens5:172.
31.
41.
36ip-172-31-41-36:4128:4128[4]NCCLINFONET/OFIForcingAWSOFIndev4ip-172-31-41-36:4128:4128[4]NCCLINFONET/OFISelectedProviderisefasomeoutputtruncated-ip-172-31-41-105:3804:3869[3]NCCLINFOcomm0x7f8c5c0025b0rank3nranks16cudaDev3nvmlDev3-InitCOMPLETE##out-of-placein-place#sizecounttyperedoptimealgbwbusbwerrortimealgbwbusbwerror#(B)(elements)(us)(GB/s)(GB/s)(us)(GB/s)(GB/s)ip-172-31-41-105:3801:3801[0]NCCLINFOLaunchmodeParallelip-172-31-41-36:4124:4191[0]NCCLINFOcomm0x7f28400025b0rank8nranks16cudaDev0nvmlDev0-InitCOMPLETEip-172-31-41-36:4126:4192[2]NCCLINFOcomm0x7f62240025b0rank10nranks16cudaDev2nvmlDev2-InitCOMPLETEip-172-31-41-105:3802:3867[1]NCCLINFOcomm0x7f5ff00025b0rank1nranks16cudaDev1nvmlDev1-InitCOMPLETEip-172-31-41-36:4132:4193[6]NCCLINFOcomm0x7ffa0c0025b0rank14nranks16cudaDev6nvmlDev6-InitCOMPLETEip-172-31-41-105:3803:3866[2]NCCLINFOcomm0x7fe9600025b0rank2nranks16cudaDev2nvmlDev2-InitCOMPLETEip-172-31-41-36:4127:4188[3]NCCLINFOcomm0x7f6ad00025b0rank11nranks16cudaDev3nvmlDev3-InitCOMPLETEip-172-31-41-105:3813:3868[7]NCCLINFOcomm0x7f341c0025b0rank7nranks16cudaDev7nvmlDev7-InitCOMPLETEip-172-31-41-105:3810:3864[6]NCCLINFOcomm0x7f5f980025b0rank6nranks16cudaDev6nvmlDev6-InitCOMPLETEip-172-31-41-36:4128:4187[4]NCCLINFOcomm0x7f234c0025b0rank12nranks16cudaDev4nvmlDev4-InitCOMPLETEip-172-31-41-36:4125:4194[1]NCCLINFOcomm0x7f2ca00025b0rank9nranks16cudaDev1nvmlDev1-InitCOMPLETEip-172-31-41-36:4134:4190[7]NCCLINFOcomm0x7f0ca40025b0rank15nranks16cudaDev7nvmlDev7-InitCOMPLETEip-172-31-41-105:3807:3865[5]NCCLINFOcomm0x7f3b280025b0rank5nranks16cudaDev5nvmlDev5-InitCOMPLETEip-172-31-41-36:4130:4189[5]NCCLINFOcomm0x7f62080025b0rank13nranks16cudaDev5nvmlDev5-InitCOMPLETEip-172-31-41-105:3805:3863[4]NCCLINFOcomm0x7fec100025b0rank4nranks16cudaDev4nvmlDev4-InitCOMPLETE82floatsum145.
40.
000.
002e-07152.
80.
000.
001e-07164floatsum137.
30.
000.
001e-07137.
20.
000.
001e-07328floatsum137.
00.
000.
001e-07137.
40.
000.
001e-076416floatsum137.
70.
000.
001e-07137.
50.
000.
001e-0712832floatsum136.
20.
000.
001e-07135.
30.
000.
001e-0725664floatsum136.
40.
000.
001e-07137.
40.
000.
001e-0769深度学习AMI开发人员指南ElasticFabricAdapter512128floatsum135.
50.
000.
011e-07151.
00.
000.
011e-071024256floatsum151.
00.
010.
012e-07137.
70.
010.
012e-072048512floatsum138.
10.
010.
035e-07138.
10.
010.
035e-0740961024floatsum140.
50.
030.
055e-07140.
30.
030.
055e-0781922048floatsum144.
60.
060.
115e-07144.
70.
060.
115e-07163844096floatsum149.
40.
110.
215e-07149.
30.
110.
215e-07327688192floatsum156.
70.
210.
395e-07183.
90.
180.
335e-076553616384floatsum167.
70.
390.
735e-07183.
60.
360.
675e-0713107232768floatsum193.
80.
681.
275e-07193.
00.
681.
275e-0726214465536floatsum243.
91.
072.
025e-07258.
31.
021.
905e-07524288131072floatsum309.
01.
703.
185e-07309.
01.
703.
185e-071048576262144floatsum709.
31.
482.
775e-07693.
21.
512.
845e-072097152524288floatsum1116.
41.
883.
525e-071105.
71.
903.
565e-0741943041048576floatsum2088.
92.
013.
765e-072157.
31.
943.
655e-0783886082097152floatsum2869.
72.
925.
485e-072847.
22.
955.
525e-07167772164194304floatsum4631.
73.
626.
795e-074643.
93.
616.
775e-07335544328388608floatsum8769.
23.
837.
175e-078743.
53.
847.
205e-076710886416777216floatsum169643.
967.
425e-07168463.
987.
475e-0713421772833554432floatsum334034.
027.
535e-07330584.
067.
615e-0726843545667108864floatsum590454.
558.
525e-07586254.
588.
595e-07536870912134217728floatsum1158424.
638.
695e-071155904.
648.
715e-071073741824268435456floatsum2281784.
718.
825e-072249974.
778.
955e-07#Outofboundsvalues:0OK#Avgbusbandwidth:2.
80613#P4d.
24xlarge检查以下nccl_message_transfer测试适用于CUDA11.
0.
$/opt/amazon/openmpi/bin/mpirun\-n2-N1--hostfilehosts\-xLD_LIBRARY_PATH=/usr/local/cuda-11.
0/efa/lib:/usr/local/cuda-11.
0/lib:/usr/local/cuda-11.
0/lib64:/usr/local/cuda-11.
0:$LD_LIBRARY_PATH\-xFI_EFA_USE_DEVICE_RDMA=1-xNCCL_ALGO=ring-xRDMAV_FORK_SAFE=1--mcapml^cm\-xFI_PROVIDER="efa"--mcabtltcp,self--mcabtl_tcp_if_excludelo,docker0--bind-tonone\~/src/bin/efa-tests/efa-cuda-11.
0/nccl_message_transfer您的输出应与以下内容类似.
您可以检查输出以查看EFA是否正在将其用作OFI提供程序.
70深度学习AMI开发人员指南ElasticFabricAdapterINFO:Function:ofi_initLine:1078:NET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlINFO:Function:ofi_initLine:1078:NET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlINFO:Function:ofi_initLine:1152:NET/OFISelectedProviderisefaINFO:Function:mainLine:68:NET/OFIProcessrank1started.
NCCLNetdeviceusedonip-172-31-79-191isAWSLibfabric.
INFO:Function:mainLine:72:NET/OFIReceived4networkdevicesINFO:Function:mainLine:107:NET/OFINetworksupportscommunicationusingCUDAbuffers.
Dev:3INFO:Function:mainLine:113:NET/OFIServer:Listeningondev3INFO:Function:ofi_initLine:1152:NET/OFISelectedProviderisefaINFO:Function:mainLine:68:NET/OFIProcessrank0started.
NCCLNetdeviceusedonip-172-31-70-99isAWSLibfabric.
INFO:Function:mainLine:72:NET/OFIReceived4networkdevicesINFO:Function:mainLine:107:NET/OFINetworksupportscommunicationusingCUDAbuffers.
Dev:3INFO:Function:mainLine:113:NET/OFIServer:Listeningondev3INFO:Function:mainLine:126:NET/OFISendconnectionrequesttorank1INFO:Function:mainLine:160:NET/OFISendconnectionrequesttorank0INFO:Function:mainLine:164:NET/OFIServer:StartacceptingrequestsINFO:Function:mainLine:167:NET/OFISuccessfullyacceptedconnectionfromrank0INFO:Function:mainLine:171:NET/OFIRank1posting255receivebuffersINFO:Function:mainLine:130:NET/OFIServer:StartacceptingrequestsINFO:Function:mainLine:133:NET/OFISuccessfullyacceptedconnectionfromrank1INFO:Function:mainLine:137:NET/OFISent255requeststorank1INFO:Function:mainLine:223:NET/OFIGotcompletionsfor255requestsforrank1INFO:Function:mainLine:223:NET/OFIGotcompletionsfor255requestsforrank0P4d.
24xlarge上的多节点NCCL性能测试要使用EFA检查NCCL性能,请运行官方NCCL测试存储库上提供的标准NCCL性能测试.
随附了已为CUDA11.
0构建的此测试.
DLAMI您也可以使用EFA运行自己的脚本.
构建您自己的脚本时,请参阅以下指南:提供FI_PROVIDER="efa"标志以启用EFA.
当使用EFA来运行NCCL应用程序时,按照示例所示使用到mpirun的完整路径.
根据集群中实例的数量和GPUs更改参数np和N.
添加NCCL_DEBUG=INFO标志,并确保日志将EFA用法指示为"所选提供程序是EFA".
添加FI_EFA_USE_DEVICE_RDMA=1标志以将EFA的RDM功能用于单向和双向传输.
在任何成员节点上使用watchnvidia-smi命令来监视GPU使用情况.
以下watchnvidia-smi命令适用于CUDA11.
0,并且取决于您的实例的操作系统.
AmazonLinux2:$/opt/amazon/openmpi/bin/mpirun\-xFI_PROVIDER="efa"-n16-N8\-xNCCL_DEBUG=INFO\-xFI_EFA_USE_DEVICE_RDMA=1-xNCCL_ALGO=ring-xRDMAV_FORK_SAFE=1--mcapml^cm\-xLD_LIBRARY_PATH=/usr/local/cuda-11.
0/efa/lib:/usr/local/cuda-11.
0/lib:/usr/local/cuda-11.
0/lib64:/usr/local/cuda-11.
0:/opt/amazon/efa/lib64:/opt/amazon/openmpi/lib64:$LD_LIBRARY_PATH\--hostfilehosts--mcabtltcp,self--mcabtl_tcp_if_excludelo,docker0--bind-tonone\71深度学习AMI开发人员指南ElasticFabricAdapter$HOME/src/bin/efa-tests/efa-cuda-11.
0/all_reduce_perf-b8-e1G-f2-g1-c1-n100Ubuntu16.
04和Ubuntu18.
04:$/opt/amazon/openmpi/bin/mpirun\-xFI_PROVIDER="efa"-n16-N8\-xNCCL_DEBUG=INFO\-xFI_EFA_USE_DEVICE_RDMA=1-xNCCL_ALGO=ring-xRDMAV_FORK_SAFE=1--mcapml^cm\-xLD_LIBRARY_PATH=/usr/local/cuda-11.
0/efa/lib:/usr/local/cuda-11.
0/lib:/usr/local/cuda-11.
0/lib64:/usr/local/cuda-11.
0:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:$LD_LIBRARY_PATH\--hostfilehosts--mcabtltcp,self--mcabtl_tcp_if_excludelo,docker0--bind-tonone\$HOME/src/bin/efa-tests/efa-cuda-11.
0/all_reduce_perf-b8-e1G-f2-g1-c1-n100您的输出应与以下内容类似.
#nThread1nGpus1minBytes8maxBytes1073741824step:2(factor)warmupiters:5iters:100validation:1##Usingdevices#Rank0Pid18546onip-172-31-70-88device0[0x10]A100-SXM4-40GB#Rank1Pid18547onip-172-31-70-88device1[0x10]A100-SXM4-40GB#Rank2Pid18548onip-172-31-70-88device2[0x20]A100-SXM4-40GB#Rank3Pid18549onip-172-31-70-88device3[0x20]A100-SXM4-40GB#Rank4Pid18550onip-172-31-70-88device4[0x90]A100-SXM4-40GB#Rank5Pid18551onip-172-31-70-88device5[0x90]A100-SXM4-40GB#Rank6Pid18552onip-172-31-70-88device6[0xa0]A100-SXM4-40GB#Rank7Pid18556onip-172-31-70-88device7[0xa0]A100-SXM4-40GB#Rank8Pid19502onip-172-31-78-249device0[0x10]A100-SXM4-40GB#Rank9Pid19503onip-172-31-78-249device1[0x10]A100-SXM4-40GB#Rank10Pid19504onip-172-31-78-249device2[0x20]A100-SXM4-40GB#Rank11Pid19505onip-172-31-78-249device3[0x20]A100-SXM4-40GB#Rank12Pid19506onip-172-31-78-249device4[0x90]A100-SXM4-40GB#Rank13Pid19507onip-172-31-78-249device5[0x90]A100-SXM4-40GB#Rank14Pid19508onip-172-31-78-249device6[0xa0]A100-SXM4-40GB#Rank15Pid19509onip-172-31-78-249device7[0xa0]A100-SXM4-40GBip-172-31-70-88:18546:18546[0]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18546:18546[0]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18546:18546[0]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18546:18546[0]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18546:18546[0]NCCLINFOUsingnetworkAWSLibfabricNCCLversion2.
7.
8+cuda11.
0ip-172-31-70-88:18552:18552[6]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18552:18552[6]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18551:18551[5]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18556:18556[7]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18548:18548[2]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18550:18550[4]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
22672深度学习AMI开发人员指南ElasticFabricAdapterip-172-31-70-88:18552:18552[6]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18552:18552[6]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18552:18552[6]NCCLINFOUsingnetworkAWSLibfabricip-172-31-70-88:18556:18556[7]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18548:18548[2]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18550:18550[4]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18551:18551[5]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18547:18547[1]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18549:18549[3]NCCLINFOBootstrap:Using[0]eth0:172.
31.
71.
137[1]eth1:172.
31.
70.
88[2]eth2:172.
31.
78.
243[3]eth3:172.
31.
77.
226ip-172-31-70-88:18547:18547[1]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18549:18549[3]NCCLINFONET/OFIRunningonP4dplatform,SettingNCCL_TOPO_FILEenvironmentvariableto/usr/local/cuda-11.
0/efa/share/aws-ofi-nccl/xml/p4d-24xl-topo.
xmlip-172-31-70-88:18547:18547[1]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18547:18547[1]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18547:18547[1]NCCLINFOUsingnetworkAWSLibfabricip-172-31-70-88:18549:18549[3]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18549:18549[3]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18549:18549[3]NCCLINFOUsingnetworkAWSLibfabricip-172-31-70-88:18551:18551[5]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18551:18551[5]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18551:18551[5]NCCLINFOUsingnetworkAWSLibfabricip-172-31-70-88:18556:18556[7]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18556:18556[7]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18556:18556[7]NCCLINFOUsingnetworkAWSLibfabricip-172-31-70-88:18548:18548[2]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18548:18548[2]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18548:18548[2]NCCLINFOUsingnetworkAWSLibfabricip-172-31-70-88:18550:18550[4]NCCLINFONET/OFISelectedProviderisefaip-172-31-70-88:18550:18550[4]NCCLINFONET/Plugin:FailedtofindncclCollNetPlugin_v3symbol.
ip-172-31-70-88:18550:18550[4]NCCLINFOUsingnetworkAWSLibfabricsomeoutputtruncated-##out-of-placein-place#sizecounttyperedoptimealgbwbusbwerrortimealgbwbusbwerror#(B)(elements)(us)(GB/s)(GB/s)(us)(GB/s)(GB/s)ip-172-31-70-88:18546:18546[0]NCCLINFOLaunchmodeParallel82floatsum158.
90.
000.
002e-07158.
10.
000.
001e-07164floatsum158.
30.
000.
001e-07159.
30.
000.
001e-07328floatsum157.
80.
000.
001e-07158.
10.
000.
001e-0773深度学习AMI开发人员指南GPU监控和优化6416floatsum158.
70.
000.
001e-07158.
40.
000.
006e-0812832floatsum160.
20.
000.
006e-08158.
80.
000.
006e-0825664floatsum159.
80.
000.
006e-08159.
80.
000.
006e-08512128floatsum161.
70.
000.
016e-08161.
70.
000.
016e-081024256floatsum177.
80.
010.
015e-07177.
40.
010.
015e-072048512floatsum198.
10.
010.
025e-07198.
10.
010.
025e-0740961024floatsum226.
20.
020.
035e-07225.
80.
020.
035e-0781922048floatsum249.
30.
030.
065e-07249.
40.
030.
065e-07163844096floatsum250.
40.
070.
125e-07251.
00.
070.
125e-07327688192floatsum256.
70.
130.
245e-07257.
20.
130.
245e-076553616384floatsum269.
80.
240.
465e-07271.
20.
240.
455e-0713107232768floatsum288.
30.
450.
855e-07286.
80.
460.
865e-0726214465536floatsum296.
10.
891.
665e-07295.
60.
891.
665e-07524288131072floatsum376.
71.
392.
615e-07382.
01.
372.
575e-071048576262144floatsum448.
62.
344.
385e-07451.
12.
324.
365e-072097152524288floatsum620.
23.
386.
345e-07615.
93.
416.
385e-0741943041048576floatsum768.
25.
4610.
245e-07759.
85.
5210.
355e-0783886082097152floatsum1228.
56.
8312.
805e-071223.
36.
8612.
865e-07167772164194304floatsum2002.
78.
3815.
715e-072004.
58.
3715.
695e-07335544328388608floatsum2988.
811.
2321.
055e-073012.
011.
1420.
895e-076710886416777216floatsum8072.
18.
3115.
595e-078102.
48.
2815.
535e-0713421772833554432floatsum1143111.
7422.
015e-071147411.
7021.
935e-0726843545667108864floatsum1760315.
2528.
595e-071764115.
2228.
535e-07536870912134217728floatsum3511015.
2928.
675e-073510215.
2928.
685e-071073741824268435456floatsum7023115.
2928.
675e-077011015.
3228.
725e-07#Outofboundsvalues:0OK#Avgbusbandwidth:7.
14456GPU监控和优化以下部分将指导您完成GPU优化和监控选项.
本部分的组织方式如同一个典型工作流程一样,其中包含监控监督预处理和训练.
Monitoring(p.
75)GPUs使用监控CloudWatch(p.
75)Optimization(p.
77)Preprocessing(p.
78)74深度学习AMI开发人员指南GPU监控和优化Training(p.
79)Monitoring您的DLAMI已预安装多个GPU监控工具.
本指南还将介绍可用于下载和安装的工具.
GPUs使用监控CloudWatch(p.
75)-一个预安装的实用程序,可向报告GPU使用情况统计数据AmazonCloudWatch.
nvidia-smiCLI-一个监控总体GPU计算和内存利用率的实用工具.
此项已预安装在您的AWSDeepLearningAMI((DLAMI).
)上.
NVMLC库-一个基于C的API,可直接访问GPU监控和管理功能.
此项已在后台由nvidia-smiCLI所使用且已预安装在您的上.
DLAMI.
它还具有Python和Perl绑定以方便采用这些请求进行开发.
已预安装在您的DLAMI上的gpumon.
py实用工具使用nvidia-ml-py.
中的pynvml程序包.
NVIDIADCGM-一个集群管理工具.
请访问开发人员页面,了解如何安装和配置此工具.
Tip请查看NVIDIA的开发人员博客,了解有关使用已安装在您的上的CUDA工具的最新信息.
DLAMI:使用NsightIDE和nvprofTensorCore监控利用率.
GPUs使用监控CloudWatch当您将DLAMI与GPU结合使用时,您可能会发现,您要寻找在训练或推理期间跟踪其使用率的方式.
这对于优化您的数据管道以及调整深度学习网络非常有用.
一个名为gpumon.
py的实用工具已预安装在您的上.
DLAMI.
它与集成CloudWatch并支持监控每GPU使用情况:GPU内存、GPU温度和GPU功率.
该脚本会定期将受监控的数据发送到CloudWatch.
您可以通过更改脚本中的几个设置CloudWatch来配置要发送到的数据的粒度级别.
但是,在启动脚本之前,您需要设置CloudWatch以接收指标.
如何使用设置和运行GPU监控CloudWatch1.
创建一个IAM用户,或修改现有IAM用户以具有用于将指标发布到的策略CloudWatch.
如果您创建新的用户,请记下凭证,因为下一步中将需要这些凭证.
要搜索的IAM策略是"cloudwatch:PutMetricData".
要添加的策略如下所示:{"Version":"2012-10-17","Statement":[{"Action":["cloudwatch:PutMetricData"],"Effect":"Allow","Resource":"*"}]}Tip有关为创建IAM用户和添加策略的更多信息CloudWatch,请参阅CloudWatch文档.
75深度学习AMI开发人员指南GPU监控和优化2.
在您的上DLAMI,运行AWS配置并指定IAM用户凭证.
$awsconfigure3.
您可能需要先对gpumon实用工具进行一些修改,然后再运行该工具.
您可以在以下位置中找到gpumon实用工具和README.
Folder:~/tools/GPUCloudWatchMonitorFiles:~/tools/GPUCloudWatchMonitor/gpumon.
py~/tools/GPUCloudWatchMonitor/README选项:如果您的实例不在us-east-1中,请在gpumon.
py中更改区域.
使用更改其他参数,例如CloudWatchnamespace或报告周期store_resolution.
4.
目前,该脚本仅支持Python3.
激活您的首选框架的Python3环境或激活DLAMI的一般Python3环境.
$sourceactivatepython35.
在后台中运行gpumon实用工具.
(python3)$pythongpumon.
py&6.
打开您的浏览器前往https://console.
amazonaws.
cn/cloudwatch/,然后选择指标.
它将有一个命名空间"DeepLearningTrain".
Tip您可以修改gpumon.
py来更改该命名空间.
您也可以通过调整来修改报告间隔.
store_resolution.
以下是报告在p28xlarge实例上运行gpumon.
py监控训练作业的示例CloudWatch图表.
76深度学习AMI开发人员指南GPU监控和优化您可能对有关GPU监控和优化的以下其他主题感兴趣:Monitoring(p.
75)GPUs使用监控CloudWatch(p.
75)Optimization(p.
77)Preprocessing(p.
78)Training(p.
79)Optimization要充分利用您的GPUs,您可以优化数据管道并优化深度学习网络.
如以下图表所述,神经网络的简单或基本实施对GPU的使用可能会不一致且不充分.
当您优化预处理和数据加载时,您可以从您的CPU到GPU减少瓶颈.
您可以通过使用混合化(该框架支持时)、调整批大小并同步调用来调整神经网络本身.
您也可以在大多数框架中使用多精度(float16或int8)训练,从而可以显著提高吞吐量.
77深度学习AMI开发人员指南GPU监控和优化以下图表显示应用不同优化时的累积性能提升.
您的结果将取决于要处理的数据和要优化的网络.
示例GPU性能优化.
图表源:GluonMXNet的性能技巧以下指南介绍将适用于您的DLAMI并帮助您提升GPU性能的选项.
主题Preprocessing(p.
78)Training(p.
79)Preprocessing通过转换或扩增的数据预处理通常可以是一个绑定CPU的流程,而且这可以是您的整体管道中的瓶颈.
框架具有用于图像处理的内置运算符,但DALI(数据扩增库)通过框架的内置选项展示了改进的性能.
NVIDIA数据扩增库(DALI):DALI将数据扩增卸载到GPU.
该项未预安装在DLAMI上,但您可以通过安装它或在您的DLAMI或其他AmazonElasticComputeCloud实例上加载支持的框架容器来访问它.
有关详细信息,请参阅NVIDIA网站上的DALI项目页面.
nvJPEG:适用于C编程人员的GPU加速JPEG解码器库.
它支持解码单个图像或批处理以及深度学习中常见的后续转换操作.
nvJPEG内置了DALI,您也可以从NVIDIA网站的nvjpeg页面下载并单独使用它.
78深度学习AMI开发人员指南AWSInferentia您可能对有关GPU监控和优化的以下其他主题感兴趣:Monitoring(p.
75)GPUs使用监控CloudWatch(p.
75)Optimization(p.
77)Preprocessing(p.
78)Training(p.
79)Training利用混合精度训练,您可以使用相同的内存量部署更大的网络,或者减少内存使用量(与您的单精度或双精度网络相比),并且您将看到计算性能增加.
您还将受益于更小且更快的数据传输,这在多节点分布式训练中是一个重要因素.
要利用混合精度训练,您需要调整数据转换和损失比例.
以下是介绍如何针对支持混合精度的框架执行此操作的指南.
NVIDIA深度学习开发工具包-NVIDIA网站上的文档MXNet,介绍了PyTorch、和的混合精度实施TensorFlow.
Tip请务必针对您选择的框架检查网站,并且搜索"混合精度"或"fp16",了解最新的优化方法.
下面是可能对您有帮助的一些混合精度指南:使用TensorFlow(视频)进行混合精度训练-在NVIDIA博客网站上.
将float16与结合使用的混合精度训练MXNet-MXNet网站上的常见问题解答文章.
NVIDIAApex:用于通过轻松进行混合精度训练的工具PyTorch-NVIDIA网站上的博客文章.
您可能对有关GPU监控和优化的以下其他主题感兴趣:Monitoring(p.
75)GPUs使用监控CloudWatch(p.
75)Optimization(p.
77)Preprocessing(p.
78)Training(p.
79)带有DLAMI的AWSInferentia芯片AWSInferentia是AWS设计的自定义机器学习芯片,您可以使用该芯片执行高性能推理预测.
要使用该芯片,请设置一个AmazonElasticComputeCloud实例,并使用AWSNeuron开发工具包(SDK)调用Inferentia芯片.
为了向客户提供最佳Inferentia体验,Neuron已内置在AWSDeepLearningAMI(DLAMI)中.
以下主题将向您展示如何开始将Inferentia与DLAMI结合使用.
内容启动带有DLAMI的AWSNeuron实例(p.
80)将DLAMI与AWSNeuron结合使用(p.
83)79深度学习AMI开发人员指南AWSInferentia启动带有DLAMI的AWSNeuron实例最新的DLAMI已可与AWSInferentia结合使用,并且附带了AWSNeuronAPI程序包.
要启动DLAMI实例,请参阅启动和配置DLAMI.
准备好DLAMI后,按照此处的步骤操作,确保您的AWSInferentia芯片和AWSNeuron资源处于活动状态.
目录升级Neuron程序包(p.
80)验证您的实例(p.
80)确定AWSInferentia设备(p.
80)Neuron运行时守护程序(neuron-rtd)(p.
81)NeuronCore组(p.
82)列出模型(p.
82)查看资源使用量(p.
83)使用Neuron监视器(神经监视器)(p.
83)升级Neuron程序包连接到您的Inf1实例后,使用以下命令升级您的Neuron程序包.
对于AmazonLinux2,运行:sudoyuminstallaws-neuron-dkmssudoyuminstallaws-neuron-runtime-basesudoyuminstallaws-neuron-runtimesudoyuminstallaws-neuron-toolssudoyuminstalltensorflow-model-server-neuron对于UbuntuLinux,运行:sudoapt-getupdatesudoapt-getinstallaws-neuron-dkmssudoapt-getinstallaws-neuron-runtime-basesudoapt-getinstallaws-neuron-runtimesudoapt-getinstallaws-neuron-toolssudoapt-getinstalltensorflow-model-server-neuron验证您的实例在使用您的实例之前,验证该实例是否已针对进行正确的设置和配置.
Neuron.
确定AWSInferentia设备要确定实例上的Inferentia设备数量,请使用以下命令:neuron-ls如果您的实例已附加了Inferentia设备,则输出将如下所示:|NEURON|NEURON|NEURON|CONNECTED|PCI|RUNTIME|RUNTIME|RUNTIME||DEVICE|CORES|MEMORY|DEVICES|BDF|ADDRESS|PID|VERSION|80深度学习AMI开发人员指南AWSInferentia|0|4|8GB|1|0000:00:1c.
0|NA|12410|NA||1|4|8GB|2,0|0000:00:1d.
0|NA|12410|NA||2|4|8GB|3,1|0000:00:1e.
0|NA|12410|NA||3|4|8GB|2|0000:00:1f.
0|NA|12410|NA|提供的输出从Inf16xlarge实例获取并包含以下列:NEURONDEVICE:分配给的逻辑NeuronDeviceID.
此ID在配置多个运行时以使用不同的时使用NeuronDevices.
NEURONCORES:NeuronCores中存在的数NeuronDevice.
NEURON内存:中的DRAM内存量NeuronDevice.
CONNECTEDNeuronDevicesDEVICES:连接到的其他设备NeuronDevice.
PCIBDF:的PCI总线设备函数(BDF)NeuronDeviceID.
RUNTIMEADDRESS:使用的运行时进程的地址NeuronDevice.
RUNTIMEPID:使用的运行时进程的进程NeuronDeviceID.
RUNTIMEVERSION:使用的运行时进程的版本NeuronDevice.
Neuron运行时守护程序(neuron-rtd)当您启动任何Inf1实例时,Neuron运行时守护程序(neuron-rtd)将自动启动.
您可以使用以下命令验证neuron-rtd是否处于活动状态:sudosystemctlstatusneuron-rtd您的输出应类似于以下内容:#neuron-rtd.
service-NeuronRuntimeDaemonLoaded:loaded(/usr/lib/systemd/system/neuron-rtd.
service;enabled;vendorpreset:disabled)Active:active(running)sinceThu2019-11-1409:53:47UTC;3min0sagoMainPID:3351(neuron-rtd)Tasks:14Memory:11.
6MCGroup:/system.
slice/neuron-rtd.
service3351/opt/aws/neuron/bin/neuron-rtd-c/opt/aws/neuron/config/neuron-rtd.
configNov1409:53:16ip-172-31-23-213.
ec2.
internalsystemd[1]:StartingNeuronRuntimeDaemon.
.
.
Nov1409:53:18ip-172-31-23-213.
ec2.
internalneuron-rtd[3351]:[NRTD:ParseArguments]UsingalltheBDFsinthe.
.
.
on!
Nov1409:53:18ip-172-31-23-213.
ec2.
internalnrtd[3351]:[NRTD:krtd_main]krtbuildusing:1.
0.
3952.
0Nov1409:53:18ip-172-31-23-213.
ec2.
internalnrtd[3351]:[TDRV:reset_mla]Resetting0000:00:1f.
0Nov1409:53:47ip-172-31-16-98.
ec2.
internalnrtd[3351]:[TDRV:tdrv_init_one_mla_phase2]InitializedInNov1409:53:47ip-172-31-16-98.
ec2.
internalneuron-rtd[3351]:E111409:53:47.
5118526633351socket_utils_com.
.
.
65}Nov1409:53:47ip-172-31-16-98.
ec2.
internalsystemd[1]:StartedNeuronRuntimeDaemon.
Nov1409:53:47ip-172-31-16-98.
ec2.
internalnrtd[3351]:[NRTD:RunServer]Serverlisteningonunix:/run/neuron.
sock有时,您可能需要启动和停止neuron-rtd.
要启动neuron-rtd,请使用以下命令:81深度学习AMI开发人员指南AWSInferentiasudosystemctlrestartneuron-rtd要停止neuron-rtd,请使用以下命令:sudosystemctlstopneuron-rtdNeuronCore组NeuronCores(NC)是Inferentia设备中的四个执行单元.
NCs可将多个组合以形成NeuronCore组(NCG).
Neuron框架层会自动创建一个默认NeuronCore组.
要查看可用的列表NCGs,请使用以下命令:neuron-clilist-ncg您的活动NCGs将显示在输出中,如下所示:Device1NCcount4|NCGID|NCCOUNT|DEVICESTARTINDEX|NCSTARTINDEX||1100||2101||3202|如果尚未配置NCG,则该命令将返回以下输出:NoNCGFound如果您需要卸载所有模型并删除框架NCGs创建的所有,请使用以下命令:neuron-clireset列出模型可以将模型加载到NCG中.
可以将多个模型加载到单个NCG中,但只有一个模型可以处于STARTED状态.
只能对处于STARTED状态的模型运行推理操作.
要查看已加载到NCG中的所有模型,请使用以下命令:$neuron-clilist-model输出中将显示已加载到NCG中的模型,如下所示:Found3model10003MODEL_STATUS_LOADED110001MODEL_STATUS_STARTED110002MODEL_STATUS_STARTED182深度学习AMI开发人员指南AWSInferentia输出中的10001和10002是NCG中已加载的模型的唯一标识符.
如果尚未将任何模型加载到NCG中,将会看到以下输出:Found0models查看资源使用量加载到NCG中的每个模型都会占用主机和设备上的内存量,并且可以通过运行以下命令来查看占一定百分比的NeuronCore.
TheNCG使用量:neuron-top输出中将显示NCG使用量,如下所示:neuron-top-2019-11-1323:57:08NNModels:3total,2runningNumberofVNCstracked:20000:00:1f.
0Utilizations:Neuroncore00.
00,Neuroncore10.
00,Neuroncore20,Neuroncore30,DLRModelNodeIDSubgraphExec.
UnitHostMemMLAMemNeuroncore%10003100000:00:1f.
0:03841356605440.
0010001300000:00:1f.
0:0384676331520.
0010002100000:00:1f.
0:13841356605440.
00如果尚未加载任何模型,则输出将如下所示:NNModels:0total,0runningNumberofVNCstracked:0DLRModelNodeIDSubgraphExec.
UnitHostMemMLAMemNeuroncore%使用Neuron监视器(神经监视器)NeuronMonitor从系统上运行的Neuron运行时收集指标,并以JSON格式将收集的数据流式传输到stdout.
这些指标分为指标组,您通过提供配置文件来配置这些指标组.
有关NeuronMonitor的更多信息,请参阅NeuronMonitor用户指南.
下一步将DLAMI与AWSNeuron结合使用(p.
83)将DLAMI与AWSNeuron结合使用AWSNeuron开发工具包的一个典型工作流程是,在编译服务器上编译以前经过训练的机器学习模型.
接下来,将构件分发到Inf1实例以执行.
AWSDeepLearningAMI(DLAMI)已预安装了在使用Inferentia的Inf1实例中编译和运行推理所需的全部内容.
以下部分说明如何将DLAMI与Inferentia结合使用.
内容使用TensorFlow-Neuron和AWSNeuron编译器(p.
84)使用AWSNeuronTensorFlow服务(p.
86)使用MXNet-Neuron和AWSNeuron编译器(p.
89)使用MXNet-NeuronModelServing(p.
91)83深度学习AMI开发人员指南AWSInferentia使用PyTorch-Neuron和AWSNeuron编译器(p.
94)使用TensorFlow-Neuron和AWSNeuron编译器本教程介绍如何使用AWSNeuron编译器编译KerasResNet-50模型并以SavedModel格式将其导出为保存的模型.
此格式是典型的TensorFlow模型可互换格式.
您还可以学习如何使用示例输入,在Inf1实例上运行推理过程.
有关Neuron开发工具包的更多信息,请参阅AWSNeuron开发工具包文档.
目录Prerequisites(p.
84)激活Conda环境(p.
84)Resnet50编译(p.
84)ResNet50推理(p.
85)Prerequisites使用本教程之前,您应已完成中的设置步骤.
将DLAMI与AWSNeuron结合使用(p.
83).
您还应该熟悉深度学习知识以及如何使用DLAMI.
激活Conda环境使用以下命令激活TensorFlow-NeuronConda环境:sourceactivateaws_neuron_tensorflow_p36使用以下命令更新Neuron程序包:condaupdatetensorflow-neuron要退出当前Conda环境,请运行以下命令:sourcedeactivateResnet50编译创建一个名为tensorflow_compile_resnet50.
py的Python脚本,其中包含以下内容.
此Python脚本编译KerasResNet50模型并将其导出为保存的模型.
importosimporttimeimportshutilimporttensorflowastfimporttensorflow.
neuronastfnimporttensorflow.
compat.
v1.
kerasaskerasfromtensorflow.
keras.
applications.
resnet50importResNet50fromtensorflow.
keras.
applications.
resnet50importpreprocess_input#CreateaworkspaceWORKSPACE='.
/ws_resnet50'os.
makedirs(WORKSPACE,exist_ok=True)84深度学习AMI开发人员指南AWSInferentia#Prepareexportdirectory(oldoneremoved)model_dir=os.
path.
join(WORKSPACE,'resnet50')compiled_model_dir=os.
path.
join(WORKSPACE,'resnet50_neuron')shutil.
rmtree(model_dir,ignore_errors=True)shutil.
rmtree(compiled_model_dir,ignore_errors=True)#InstantiateKerasResNet50modelkeras.
backend.
set_learning_phase(0)model=ResNet50(weights='imagenet')#ExportSavedModeltf.
saved_model.
simple_save(sessionkeras.
backend.
get_session(),export_dirmodel_dir,inputsinput':model.
inputs[0]},outputsoutput':model.
outputs[0]})#CompileusingNeurontfn.
saved_model.
compile(model_dir,compiled_model_dir)#PrepareSavedModelforuploadingtoInf1instanceshutil.
make_archive(compiled_model_dir,'zip',WORKSPACE,'resnet50_neuron')使用以下命令编译该模型:pythontensorflow_compile_resnet50.
py编译过程将需要几分钟时间.
完成后,您的输出应与以下内容类似:.
.
.
INFO:tensorflow:fusingsubgraphneuron_op_d6f098c01c780733withneuron-ccINFO:tensorflow:NumberofoperationsinTensorFlowsession:4638INFO:tensorflow:Numberofoperationsaftertf.
neuronoptimizations:556INFO:tensorflow:NumberofoperationsplacedonNeuronruntime:554INFO:tensorflow:Successfullyconverted.
/ws_resnet50/resnet50to.
/ws_resnet50/resnet50_neuron.
.
.
编译完成后,将压缩ws_resnet50/resnet50_neuron.
zip保存的模型.
使用以下命令解压缩模型并下载示例图像以进行推理:unzipws_resnet50/resnet50_neuron.
zip-d.
curl-Ohttps://raw.
githubusercontent.
com/awslabs/mxnet-model-server/master/docs/images/kitten_small.
jpgResNet50推理创建一个名为tensorflow_infer_resnet50.
py的Python脚本,其中包含以下内容.
此脚本使用先前编译的推理模型,对下载的模型运行推理过程.
importosimportnumpyasnpimporttensorflowastffromtensorflow.
keras.
preprocessingimportimagefromtensorflow.
keras.
applicationsimportresnet5085深度学习AMI开发人员指南AWSInferentia#Createinputfromimageimg_sgl=image.
load_img('kitten_small.
jpg',target_size=(224,224))img_arr=image.
img_to_array(img_sgl)img_arr2=np.
expand_dims(img_arr,axis=0)img_arr3=resnet50.
preprocess_input(img_arr2)#LoadmodelCOMPILED_MODEL_DIR='.
/ws_resnet50/resnet50_neuron/'predictor_inferentia=tf.
contrib.
predictor.
from_saved_model(COMPILED_MODEL_DIR)#Runinferencemodel_feed_dict={'input':img_arr3}infa_rslts=predictor_inferentia(model_feed_dict);#Displayresultsprint(resnet50.
decode_predictions(infa_rslts["output"],top=5)[0])使用以下命令对模型运行推理过程:pythontensorflow_infer_resnet50.
py您的输出应与以下内容类似:.
.
.
[('n02123045','tabby',0.
6918919),('n02127052','lynx',0.
12770271),('n02123159','tiger_cat',0.
08277027),('n02124075','Egyptian_cat',0.
06418919),('n02128757','snow_leopard',0.
009290541)]下一步使用AWSNeuronTensorFlow服务(p.
86)使用AWSNeuronTensorFlow服务本教程介绍如何在导出已保存的模型以与AWSNeuronServing一起使用之前构造图表并添加TensorFlow编译步骤.
TensorFlowServing是一个服务系统,可让您跨网络扩展推理.
NeuronTensorFlowServing使用与普通TensorFlowServing相同的API.
唯一的区别是,必须为编译保存的模型AWSInferentia,并且入口点是名为tensorflow_model_server_neuron的不同二进制文件.
二进制文件位于/usr/local/bin/tensorflow_model_server_neuron,并在中预安装DLAMI.
有关Neuron开发工具包的更多信息,请参阅AWSNeuron开发工具包文档.
目录Prerequisites(p.
86)激活Conda环境(p.
86)编译和导出保存的模型(p.
87)处理保存的模型(p.
87)生成发送给模型服务器的推理请求(p.
88)Prerequisites使用本教程之前,您应已完成中的设置步骤.
将DLAMI与AWSNeuron结合使用(p.
83).
您还应该熟悉深度学习知识以及如何使用DLAMI.
激活Conda环境使用以下命令激活TensorFlow-NeuronConda环境:86深度学习AMI开发人员指南AWSInferentiasourceactivateaws_neuron_tensorflow_p36使用以下命令更新Neuron程序包:condaupdatetensorflow-neuron如果需要退出当前Conda环境,请运行:sourcedeactivate编译和导出保存的模型创建一个名为tensorflow-model-server-compile.
py的Python脚本,其中包含以下内容.
此脚本构建一个图形并使用编译它Neuron.
然后,它将编译的图形导出为保存的模型.
importtensorflowastfimporttensorflow.
neuronimportostf.
keras.
backend.
set_learning_phase(0)model=tf.
keras.
applications.
ResNet50(weights='imagenet')sess=tf.
keras.
backend.
get_session()inputs={'input':model.
inputs[0]}outputs={'output':model.
outputs[0]}#savethemodelusingtf.
saved_model.
simple_savemodeldir=".
/resnet50/1"tf.
saved_model.
simple_save(sess,modeldir,inputs,outputs)#compilethemodelforInferentianeuron_modeldir=os.
path.
join(os.
path.
expanduser('~'),'resnet50_inf1','1')tf.
neuron.
saved_model.
compile(modeldir,neuron_modeldir,batch_size=1)使用以下命令编译该模型:pythontensorflow-model-server-compile.
py您的输出应与以下内容类似:.
.
.
INFO:tensorflow:fusingsubgraphneuron_op_d6f098c01c780733withneuron-ccINFO:tensorflow:NumberofoperationsinTensorFlowsession:4638INFO:tensorflow:Numberofoperationsaftertf.
neuronoptimizations:556INFO:tensorflow:NumberofoperationsplacedonNeuronruntime:554INFO:tensorflow:Successfullyconverted.
/resnet50/1to/home/ubuntu/resnet50_inf1/1处理保存的模型当模型编译完成后,您可以使用以下命令,通过tensorflow_model_server_neuron二进制文件处理保存的模型:87深度学习AMI开发人员指南AWSInferentiatensorflow_model_server_neuron--model_name=resnet50_inf1\--model_base_path=$HOME/resnet50_inf1/--port=8500&您的输出应与以下内容类似.
编译的模型由服务器暂存在Inferentia设备的DRAM中,以准备好执行推理过程.
.
.
.
2019-11-2201:20:32.
075856:Iexternal/org_tensorflow/tensorflow/cc/saved_model/loader.
cc:311]SavedModelloadfortags{serve};Status:success.
Took40764microseconds.
2019-11-2201:20:32.
075888:Itensorflow_serving/servables/tensorflow/saved_model_warmup.
cc:105]Nowarmupdatafilefoundat/home/ubuntu/resnet50_inf1/1/assets.
extra/tf_serving_warmup_requests2019-11-2201:20:32.
075950:Itensorflow_serving/core/loader_harness.
cc:87]Successfullyloadedservableversion{name:resnet50_inf1version:1}2019-11-2201:20:32.
077859:Itensorflow_serving/model_servers/server.
cc:353]RunninggRPCModelServerat0.
0.
0.
0:8500.
.
.
生成发送给模型服务器的推理请求创建一个名为tensorflow-model-server-infer.
py的Python脚本,其中包含以下内容.
该脚本通过GRPC(这是一个服务框架)运行推理过程.
importnumpyasnpimportgrpcimporttensorflowastffromtensorflow.
keras.
preprocessingimportimagefromtensorflow.
keras.
applications.
resnet50importpreprocess_inputfromtensorflow_serving.
apisimportpredict_pb2fromtensorflow_serving.
apisimportprediction_service_pb2_grpcfromtensorflow.
keras.
applications.
resnet50importdecode_predictionsif__name_main__':channel=grpc.
insecure_channel('localhost:8500')stub=prediction_service_pb2_grpc.
PredictionServiceStub(channel)img_file=tf.
keras.
utils.
get_file(kitten_small.
jpg",https://raw.
githubusercontent.
com/awslabs/mxnet-model-server/master/docs/images/kitten_small.
jpg")img=image.
load_img(img_file,target_size=(224,224))img_array=preprocess_input(image.
img_to_array(img)[None,.
.
.
])request=predict_pb2.
PredictRequest()request.
model_spec.
name='resnet50_inf1'request.
inputs['input'].
CopyFrom(tf.
contrib.
util.
make_tensor_proto(img_array,shape=img_array.
shape))result=stub.
Predict(request)prediction=tf.
make_ndarray(result.
outputs['output'])print(decode_predictions(prediction))通过使用GRPC以及以下命令,在模型上运行推理过程:pythontensorflow-model-server-infer.
py您的输出应与以下内容类似:88深度学习AMI开发人员指南AWSInferentia[[('n02123045','tabby',0.
6918919),('n02127052','lynx',0.
12770271),('n02123159','tiger_cat',0.
08277027),('n02124075','Egyptian_cat',0.
06418919),('n02128757','snow_leopard',0.
009290541)]]使用MXNet-Neuron和AWSNeuron编译器MXNet-Neuron编译API提供了一种方法,用于编译可以在AWSInferentia设备上运行的模型图.
在本示例中,您使用API编译-50ResNet模型并使用它运行推理.
有关Neuron开发工具包的更多信息,请参阅AWSNeuron开发工具包文档.
目录Prerequisites(p.
89)激活Conda环境(p.
89)Resnet50编译(p.
89)ResNet50推理(p.
90)Prerequisites使用本教程之前,您应已完成中的设置步骤.
将DLAMI与AWSNeuron结合使用(p.
83).
您还应该熟悉深度学习知识以及如何使用DLAMI.
激活Conda环境使用以下命令激活MXNet-NeuronConda环境:sourceactivateaws_neuron_mxnet_p36使用以下命令更新Neuron程序包:condaupdatemxnet-neuron要退出当前Conda环境,请运行:sourcedeactivateResnet50编译创建一个名为mxnet_compile_resnet50.
py的Python脚本,其中包含以下内容.
此脚本使用MXNet编译PythonAPI编译-50ResNet模型.
importmxnetasmximportnumpyasnpprint("downloading.
.
.
")path='http://data.
mxnet.
io/models/imagenet/'mx.
test_utils.
download(path+'resnet/50-layers/resnet-50-0000.
params')mx.
test_utils.
download(path+'resnet/50-layers/resnet-50-symbol.
json')print("downloadfinished.
")sym,args,aux=mx.
model.
load_checkpoint('resnet-50',0)89深度学习AMI开发人员指南AWSInferentiaprint("compileforinferentiausingneuron.
.
.
thiswilltakeafewminutes.
.
.
")inputs={"data":mx.
nd.
ones([1,3,224,224],name='data',dtype='float32')}sym,args,aux=mx.
contrib.
neuron.
compile(sym,args,aux,inputs)print("savecompiledmodel.
.
.
")mx.
model.
save_checkpoint("compiled_resnet50",0,sym,args,aux)使用以下命令编译该模型:pythonmxnet_compile_resnet50.
py编译需要几分钟时间.
编译完成后,以下文件将位于您的当前目录中:resnet-50-0000.
paramsresnet-50-symbol.
jsoncompiled_resnet50-0000.
paramscompiled_resnet50-symbol.
jsonResNet50推理创建一个名为mxnet_infer_resnet50.
py的Python脚本,其中包含以下内容.
此脚本会下载一个示例映像,然后使用该映像对已编译的模型运行推理过程.
importmxnetasmximportnumpyasnppath='http://data.
mxnet.
io/models/imagenet/'mx.
test_utils.
download(path+'synset.
txt')fname=mx.
test_utils.
download('https://raw.
githubusercontent.
com/awslabs/mxnet-model-server/master/docs/images/kitten_small.
jpg')img=mx.
image.
imread(fname)#convertintoformat(batch,RGB,width,height)img=mx.
image.
imresize(img,224,224)#resizeimg=img.
transpose((2,0,1))#Channelfirstimg=img.
expand_dims(axis=0)#batchifyimg=img.
astype(dtype='float32')sym,args,aux=mx.
model.
load_checkpoint('compiled_resnet50',0)softmax=mx.
nd.
random_normal(shape=(1,))args['softmax_label']=softmaxargs['data']=img#Inferentiacontextctx=mx.
neuron()exe=sym.
bind(ctx=ctx,args=args,aux_states=aux,grad_req='null')withopen('synset.
txt','r')asf:labels=[l.
rstrip()forlinf]exe.
forward(data=img)prob=exe.
outputs[0].
asnumpy()#printthetop-5prob=np.
squeeze(prob)a=np.
argsort(prob)[::-1]90深度学习AMI开发人员指南AWSInferentiaforiina[0:5]:print('probability=%f,class=%s'%(prob[i],labels[i]))使用以下命令对已编译模型运行推理过程:pythonmxnet_infer_resnet50.
py您的输出应与以下内容类似:probability=0.
642454,class=n02123045tabby,tabbycatprobability=0.
189407,class=n02123159tigercatprobability=0.
100798,class=n02124075Egyptiancatprobability=0.
030649,class=n02127052lynx,catamountprobability=0.
016278,class=n02129604tiger,Pantheratigris下一步使用MXNet-NeuronModelServing(p.
91)使用MXNet-NeuronModelServing在本教程中,您将学习如何使用预训练MXNet模型通过多模型服务器(MMS)执行实时图像分类.
MMS是一款灵活且易于使用的工具,可提供使用任何机器学习或深度学习框架训练的深度学习模型.
本教程包括使用的编译步骤AWSNeuron和使用的MMS实施MXNet.
有关Neuron开发工具包的更多信息,请参阅AWSNeuron开发工具包文档.
目录Prerequisites(p.
91)激活Conda环境(p.
91)下载示例代码(p.
92)编译模型(p.
92)运行推理(p.
93)Prerequisites使用本教程之前,您应已完成中的设置步骤.
将DLAMI与AWSNeuron结合使用(p.
83).
您还应该熟悉深度学习知识以及如何使用DLAMI.
激活Conda环境使用以下命令激活MXNet-NeuronConda环境:sourceactivateaws_neuron_mxnet_p36使用以下命令更新Neuron程序包:condaupdatemxnet-neuron要退出当前Conda环境,请运行:91深度学习AMI开发人员指南AWSInferentiasourcedeactivate下载示例代码要运行本示例,请使用以下命令下载示例代码:gitclonehttps://github.
com/awslabs/multi-model-servercdmulti-model-server/examples/mxnet_vision编译模型创建一个名为multi-model-server-compile.
py的Python脚本,其中包含以下内容.
此脚本将ResNet50模型编译为Inferentia设备目标.
importmxnetasmxfrommxnet.
contribimportneuronimportnumpyasnppath='http://data.
mxnet.
io/models/imagenet/'mx.
test_utils.
download(path+'resnet/50-layers/resnet-50-0000.
params')mx.
test_utils.
download(path+'resnet/50-layers/resnet-50-symbol.
json')mx.
test_utils.
download(path+'synset.
txt')nn_name="resnet-50"#Loadamodelsym,args,auxs=mx.
model.
load_checkpoint(nn_name,0)#Definecompilationparameters#-inputshapeanddtypeinputs={'data':mx.
nd.
zeros([1,3,224,224],dtype='float32')}#compilegraphtoinferentiatargetcsym,cargs,cauxs=neuron.
compile(sym,args,auxs,inputs)#savecompiledmodelmx.
model.
save_checkpoint(nn_name+"_compiled",0,csym,cargs,cauxs)要编译模型,请使用以下命令:pythonmulti-model-server-compile.
py您的输出应与以下内容类似:.
.
.
[21:18:40]src/nnvm/legacy_json_util.
cc:209:Loadingsymbolsavedbypreviousversionv0.
8.
0.
Attemptingtoupgrade.
.
.
[21:18:40]src/nnvm/legacy_json_util.
cc:217:Symbolsuccessfullyupgraded!
[21:19:00]src/operator/subgraph/build_subgraph.
cc:698:starttoexecutepartitiongraph.
[21:19:00]src/nnvm/legacy_json_util.
cc:209:Loadingsymbolsavedbypreviousversionv0.
8.
0.
Attemptingtoupgrade.
.
.
[21:19:00]src/nnvm/legacy_json_util.
cc:217:Symbolsuccessfullyupgraded!
创建一个名为signature.
json的文件,其中包含以下内容,以便配置输入名称和形状:{"inputs":[92深度学习AMI开发人员指南AWSInferentia{"data_name":"data","data_shape":[1,3,224,224]}]}使用以下命令下载synset.
txt文件.
此文件是ImageNet预测类的名称列表.
curl-Ohttps://s3.
amazonaws.
com/model-server/model_archive_1.
0/examples/squeezenet_v1.
1/synset.
txt基于model_server_template文件夹中的模板,创建自定义服务类.
使用以下命令,将模板复制到您的当前工作目录中:cp-r.
.
/model_service_template/*.
编辑mxnet_model_service.
py模块,将mx.
cpu()上下文替换为mx.
neuron()上下文,如下所示.
您还需要注释掉不必要的数据副本model_input,因为MXNet-Neuron不支持NDArray和GluonAPIs.
.
.
.
self.
mxnet_ctx=mx.
neuron()ifgpu_idisNoneelsemx.
gpu(gpu_id).
.
.
#model_input=[item.
as_in_context(self.
mxnet_ctx)foriteminmodel_input]使用以下命令,通过模型归档程序对模型进行打包:cd~/multi-model-server/examplesmodel-archiver--force--model-nameresnet-50_compiled--model-pathmxnet_vision--handlermxnet_vision_service:handle运行推理启动多模型服务器并使用以下命令加载使用RESTfulAPI的模型.
确保neuron-rtd正在使用默认设置运行.
cd~/multi-model-server/multi-model-server--start--model-storeexamples>/dev/null#PipetologfileifyouwanttokeepalogofMMScurl-v-XPOST"http://localhost:8081/modelsinitial_workers=1&max_workers=4&synchronous=true&url=resnet-50_compiled.
mar"sleep10#allowsufficienttimetoloadmodel通过以下命令,使用示例图像运行推理:curl-Ohttps://raw.
githubusercontent.
com/awslabs/multi-model-server/master/docs/images/kitten_small.
jpgcurl-XPOSThttp://127.
0.
0.
1:8080/predictions/resnet-50_compiled-Tkitten_small.
jpg93深度学习AMI开发人员指南AWSInferentia您的输出应与以下内容类似:[{"probability":0.
6388034820556641,"class":"n02123045tabby,tabbycat"},{"probability":0.
16900072991847992,"class":"n02123159tigercat"},{"probability":0.
12221276015043259,"class":"n02124075Egyptiancat"},{"probability":0.
028706775978207588,"class":"n02127052lynx,catamount"},{"probability":0.
01915954425930977,"class":"n02129604tiger,Pantheratigris"}]要在测试后清理,请通过RESTfulAPI发出删除命令,并使用以下命令停止模型服务器:curl-XDELETEhttp://127.
0.
0.
1:8081/models/resnet-50_compiledmulti-model-server--stopneuron-clireset您应看到以下输出:{"status":"Model\"resnet-50_compiled\"unregistered"}Modelserverstopped.
Found1modelsand1NCGs.
Unloading10001(MODEL_STATUS_STARTED)::successDestroyingNCG1::success使用PyTorch-Neuron和AWSNeuron编译器PyTorch-Neuron编译API提供了一种方法,用于编译可以在AWSInferentia设备上运行的模型图.
经过训练的模型必须先编译为Inferentia目标,才能部署在Inf1实例上.
以下教程编译torchvisionResNet50模型并将其导出为保存的TorchScript模块.
此模型随后将用于运行推理.
为方便起见,本教程使用Inf1实例进行编译和推理.
在实际操作中,您也可以使用其他实例类型来编译模型,例如c5实例系列.
然后,您必须将已编译的模型部署到Inf1推理服务器中.
有关更多信息,请参阅AWSNeuronPyTorch开发工具包文档.
目录Prerequisites(p.
95)激活Conda环境(p.
95)94深度学习AMI开发人员指南AWSInferentiaResnet50编译(p.
95)ResNet50推理(p.
95)Prerequisites使用本教程之前,您应已完成中的设置步骤.
将DLAMI与AWSNeuron结合使用(p.
83).
您还应该熟悉深度学习知识以及如何使用DLAMI.
激活Conda环境使用以下命令激活PyTorch-NeuronConda环境:sourceactivateaws_neuron_pytorch_p36要退出当前Conda环境,请运行:sourcedeactivateResnet50编译创建一个名为pytorch_trace_resnet50.
py的Python脚本,其中包含以下内容.
此脚本使用PyTorch编译PythonAPI编译-50ResNet模型.
importtorchimportnumpyasnpimportosimporttorch_neuronfromtorchvisionimportmodelsimage=torch.
zeros([1,3,224,224],dtype=torch.
float32)##LoadapretrainedResNet50modelmodel=models.
resnet50(pretrained=True)##Tellthemodelweareusingitforevaluation(nottraining)model.
eval()model_neuron=torch.
neuron.
trace(model,example_inputs=[image])##Exporttosavedmodelmodel_neuron.
save("resnet50_neuron.
pt")运行编译脚本.
pythonpytorch_trace_resnet50.
py编译需要几分钟时间.
编译完成后,编译后的模型将作为resnet50_neuron.
pt保存在本地目录中.
ResNet50推理创建一个名为pytorch_infer_resnet50.
py的Python脚本,其中包含以下内容.
此脚本会下载一个示例映像,然后使用该映像对已编译的模型运行推理过程.
importosimporttimeimporttorch95深度学习AMI开发人员指南AWSInferentiaimporttorch_neuronimportjsonimportnumpyasnpfromurllibimportrequestfromtorchvisionimportmodels,transforms,datasets##Createanimagedirectorycontainingasmallkittenos.
makedirs(".
/torch_neuron_test/images",exist_ok=True)request.
urlretrieve("https://raw.
githubusercontent.
com/awslabs/mxnet-model-server/master/docs/images/kitten_small.
jpg",".
/torch_neuron_test/images/kitten_small.
jpg")##Fetchlabelstooutputthetopclassificationsrequest.
urlretrieve("https://s3.
amazonaws.
com/deep-learning-models/image-models/imagenet_class_index.
json","imagenet_class_index.
json")idx2label=[]withopen("imagenet_class_index.
json","r")asread_file:class_idx=json.
load(read_file)idx2label=[class_idx[str(k)][1]forkinrange(len(class_idx))]##Importasampleimageandnormalizeitintoatensornormalize=transforms.
Normalize(mean=[0.
485,0.
456,0.
406],std=[0.
229,0.
224,0.
225])eval_dataset=datasets.
ImageFolder(os.
path.
dirname(".
/torch_neuron_test/"),transforms.
Compose([transforms.
Resize([224,224]),transforms.
ToTensor(),normalize,]))image,_=eval_dataset[0]image=torch.
tensor(image.
numpy()[np.
newaxis,.
.
.
])##Loadmodelmodel_neuron=torch.
jit.
load('resnet50_neuron.
pt')##Predictresults=model_neuron(image)#Getthetop5resultstop5_idx=results[0].
sort()[1][-5:]#Lookupandprintthetop5labelstop5_labels=[idx2label[idx]foridxintop5_idx]print("Top5labels:\n{}".
format(top5_labels))使用以下命令对已编译模型运行推理过程:pythonpytorch_infer_resnet50.
py您的输出应与以下内容类似:Top5labels:96深度学习AMI开发人员指南推理['tiger','lynx','tiger_cat','Egyptian_cat','tabby']推理此部分提供了有关如何使用DLAMI的框架和工具运行推理的教程.
有关使用ElasticInference的教程,请参阅使用AmazonElasticInference带框架的推理使用ApacheMXNet(孵育)使用ONNX模型进行推断(p.
97)使用ApacheMXNet(孵育)ResNet50款(p.
98)在推理中将CNTK与ONNX模型配合使用(p.
99)推理工具适用于ApacheMXNet的模型服务器(MMS)(p.
108)TensorFlowServing(p.
110)使用ApacheMXNet(孵育)使用ONNX模型进行推断如何将ONNX模型用于Apache中的图像推断MXNet(孵育)1.
(Python3选项)-激活Python3ApacheMXNet(孵育)环境:$sourceactivatemxnet_p36(Python2选项)-激活Python2ApacheMXNet(孵育)环境:$sourceactivatemxnet_p272.
其余步骤假定您使用的是mxnet_p36环境.
3.
下载一张哈士奇的照片.
$curl-Ohttps://upload.
wikimedia.
org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.
jpg4.
下载使用此模型的类的列表.
$curl-Ohttps://gist.
githubusercontent.
com/yrevar/6135f1bd8dcf2e0cc683/raw/d133d61a09d7e5a3b36b8c111a8dd5c4b5d560ee/imagenet1000_clsid_to_human.
pkl5.
下载ONNX格式的预训练的VGG16模型.
$wget-Ovgg16.
onnxhttps://github.
com/onnx/models/raw/master/vision/classification/vgg/model/vgg16-7.
onnx6.
使用您的首选文本编辑器来创建具有以下内容的脚本.
此脚本将使用哈士奇的图片,从预训练模型中获得预测结果,然后在类文件中查找,并返回一个图片分类结果.
importmxnetasmximportmxnet.
contrib.
onnxasonnx_mxnetimportnumpyasnp97深度学习AMI开发人员指南推理fromcollectionsimportnamedtuplefromPILimportImageimportpickle#Preprocesstheimageimg=Image.
open("Siberian_Husky_bi-eyed_Flickr.
jpg")img=img.
resize((224,224))rgb_img=np.
asarray(img,dtype=np.
float32)-128bgr_img=rgb_img[.
.
.
,[2,1,0]]img_data=np.
ascontiguousarray(np.
rollaxis(bgr_img,2))img_data=img_data[np.
newaxis,astype(np.
float32)#Definethemodel'sinputdata_names=['data']Batch=namedtuple('Batch',data_names)#Setthecontexttocpuorgpuctx=mx.
cpu()#Loadthemodelsym,arg,aux=onnx_mxnet.
import_model("vgg16.
onnx")mod=mx.
mod.
Module(symbol=sym,data_names=data_names,context=ctx,label_names=None)mod.
bind(for_training=False,data_shapes=[(data_names[0],img_data.
shape)],label_shapes=None)mod.
set_params(arg_params=arg,aux_params=aux,allow_missing=True,allow_extra=True)#Runinferenceontheimagemod.
forward(Batch([mx.
nd.
array(img_data)]))predictions=mod.
get_outputs()[0].
asnumpy()top_class=np.
argmax(predictions)print(top_class)labels_dict=pickle.
load(open("imagenet1000_clsid_to_human.
pkl","rb"))print(labels_dict[top_class])7.
然后运行脚本,您应看到一个如下所示的结果:248Eskimodog,husky使用ApacheMXNet(孵育)ResNet50款如何使用预先培训的ApacheMXNet(与符号API一起孵育)模型,用于图像推断MXNet1.
(Python3选项)-激活Python3ApacheMXNet(孵育)环境:$sourceactivatemxnet_p36(Python2选项)-激活Python2ApacheMXNet(孵育)环境:$sourceactivatemxnet_p272.
其余步骤假定您使用的是mxnet_p36环境.
3.
使用您的首选文本编辑器来创建具有以下内容的脚本.
此脚本将下载ResNet-50个模型文件(resnet-50-0000.
params和resnet-50-symbol.
json)和标签列表(synset.
txt),下载一个cat图像从预训练的模型得到预测结果,然后在标签列表中查找结果,返回预测结果.
importmxnetasmximportnumpyasnppath='http://data.
mxnet.
io/models/imagenet/'98深度学习AMI开发人员指南推理[mx.
test_utils.
download(path+'resnet/50-layers/resnet-50-0000.
params'),mx.
test_utils.
download(path+'resnet/50-layers/resnet-50-symbol.
json'),mx.
test_utils.
download(path+'synset.
txt')]ctx=mx.
cpu()withopen('synset.
txt','r')asf:labels=[l.
rstrip()forlinf]sym,args,aux=mx.
model.
load_checkpoint('resnet-50',0)fname=mx.
test_utils.
download('https://github.
com/dmlc/web-data/blob/master/mxnet/doc/tutorials/python/predict_image/cat.
jpgraw=true')img=mx.
image.
imread(fname)#convertintoformat(batch,RGB,width,height)img=mx.
image.
imresize(img,224,224)#resizeimg=img.
transpose((2,0,1))#Channelfirstimg=img.
expand_dims(axis=0)#batchifyimg=img.
astype(dtype='float32')args['data']=imgsoftmax=mx.
nd.
random_normal(shape=(1,))args['softmax_label']=softmaxexe=sym.
bind(ctx=ctx,args=args,aux_states=aux,grad_req='null')exe.
forward()prob=exe.
outputs[0].
asnumpy()#printthetop-5prob=np.
squeeze(prob)a=np.
argsort(prob)[::-1]foriina[0:5]:print('probability=%f,class=%s'%(prob[i],labels[i]))4.
然后运行脚本,您应看到一个如下所示的结果:probability=0.
418679,class=n02119789kitfox,Vulpesmacrotisprobability=0.
293495,class=n02119022redfox,Vulpesvulpesprobability=0.
029321,class=n02120505greyfox,grayfox,Urocyoncinereoargenteusprobability=0.
026230,class=n02124075Egyptiancatprobability=0.
022557,class=n02085620Chihuahua在推理中将CNTK与ONNX模型配合使用Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
Note本教程中使用的VGG-16模型会占用大量内存.
选择实例时,您可能需要选择具有超过30GBRAM的实例.
如何在推理中将ONNX模型与CNTK配合使用1.
(适用于Python3的选项)-激活Python3CNTK环境:$sourceactivatecntk_p36(适用于Python2的选项)-激活Python2CNTK环境:99深度学习AMI开发人员指南将框架用于ONNX$sourceactivatecntk_p272.
其余步骤假定您使用的是cntk_p36环境.
3.
使用文本编辑器创建一个新文件,并在脚本中使用以下程序以在CNTK中打开ONNX格式文件.
importcntkasC#ImporttheChainermodelintoCNTKviatheCNTKimportAPIz=C.
Function.
load("vgg16.
onnx",device=C.
device.
cpu(),format=C.
ModelFormat.
ONNX)print("Loadedvgg16.
onnx!
")在运行此脚本后,CNTK将加载模型.
4.
您还可以尝试使用CNTK运行推理.
首先,下载一张哈士奇的照片.
$curl-Ohttps://upload.
wikimedia.
org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.
jpg5.
接下来,下载将使用此模型的类的列表.
$curl-Ohttps://gist.
githubusercontent.
com/yrevar/6135f1bd8dcf2e0cc683/raw/d133d61a09d7e5a3b36b8c111a8dd5c4b5d560ee/imagenet1000_clsid_to_human.
pkl6.
编辑先前创建的脚本以包含以下内容.
此新版本将使用哈士奇的图片,得到一个预测结果,然后在类文件中查找,返回一个预测结果.
importcntkasCimportnumpyasnpfromPILimportImagefromIPython.
core.
displayimportdisplayimportpickle#ImportthemodelintoCNTKviatheCNTKimportAPIz=C.
Function.
load("vgg16.
onnx",device=C.
device.
cpu(),format=C.
ModelFormat.
ONNX)print("Loadedvgg16.
onnx!
")img=Image.
open("Siberian_Husky_bi-eyed_Flickr.
jpg")img=img.
resize((224,224))rgb_img=np.
asarray(img,dtype=np.
float32)-128bgr_img=rgb_img[.
.
.
,[2,1,0]]img_data=np.
ascontiguousarray(np.
rollaxis(bgr_img,2))predictions=np.
squeeze(z.
eval({z.
arguments[0]:[img_data]}))top_class=np.
argmax(predictions)print(top_class)labels_dict=pickle.
load(open("imagenet1000_clsid_to_human.
pkl","rb"))print(labels_dict[top_class])7.
然后运行脚本,您应看到一个如下所示的结果:248Eskimodog,husky将框架用于ONNX采用Conda的DeepLearningAMI现在对于部分框架支持开放神经网络交换(ONNX)模型.
选择下方列出的主题之一,以了解如何在采用Conda的DeepLearningAMI上使用ONNX.
如果要在DLAMI上使用现有ONNX模型,请参阅使用ApacheMXNet(孵育)使用ONNX模型进行推断(p.
97).
100深度学习AMI开发人员指南将框架用于ONNX关于ONNX开放神经网络交换(ONNX)是一种用于表示深度学习模型的开放格式.
ONNX受到AmazonWebServices、Microsoft、Facebook和其他多个合作伙伴的支持.
您可以使用任何选定的框架来设计、训练和部署深度学习模型.
ONNX模型的好处是,它们可以在框架之间轻松移动.
采用Conda的DeepLearningAMI当前的特色是支持以下教程集中的一些ONNX功能.
有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程(p.
101)有关将Chainer转换为ONNX,然后加载到CNTK的教程(p.
102)有关将Chainer转换为ONNX,然后加载到MXNet的教程(p.
104)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)您可能还需要参考ONNX项目文档和教程:上的ONNX项目GitHubONNX教程有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
ONNX概述开放神经网络交换(ONNX)是一种用于表示深度学习模型的开放格式.
ONNX受到AmazonWebServices、Microsoft、Facebook和其他多个合作伙伴的支持.
您可以使用任何选定的框架来设计、训练和部署深度学习模型.
ONNX模型的好处是,它们可以在框架之间轻松移动.
本教程介绍如何将采用Conda的DeepLearningAMI与ONNX结合使用.
通过执行以下步骤,您可以训练模型或从一个框架中加载预先训练的模型,将此模型导出为ONNX,然后将此模型导入到另一个框架中.
ONNX先决条件要使用此ONNX教程,您必须有权访问采用Conda的DeepLearningAMI版本12或更高版本.
有关如何开始使用采用Conda的DeepLearningAMI的更多信息,请参阅采用Conda的DeepLearningAMI(p.
3).
Important这些示例使用可能需要多达8GB内存(或更多)的函数.
请务必选择具有足量内存的实例类型.
使用采用Conda的DeepLearningAMI启动终端会话以开始以下教程.
将ApacheMXNet(孵化)模型转换为ONNX,然后将模型加载到CNTK中如何从ApacheMXNet(孵化)中导出模型您可以将最新的MXNet工作版本安装到您的采用Conda的DeepLearningAMI上的任一或两个MXNetConda环境.
1.
(适用于Python3的选项)-激活Python3MXNet环境:$sourceactivatemxnet_p36101深度学习AMI开发人员指南将框架用于ONNX(适用于Python2的选项)-激活Python2MXNet环境:$sourceactivatemxnet_p272.
其余步骤假定您使用的是mxnet_p36环境.
3.
下载模型文件.
curl-Ohttps://s3.
amazonaws.
com/onnx-mxnet/model-zoo/vgg16/vgg16-symbol.
jsoncurl-Ohttps://s3.
amazonaws.
com/onnx-mxnet/model-zoo/vgg16/vgg16-0000.
params4.
要将模型文件从MXNet导出为ONNX格式,使用文本编辑器创建一个新文件,并在脚本中使用以下程序.
importnumpyasnpimportmxnetasmxfrommxnet.
contribimportonnxasonnx_mxnetconverted_onnx_filename='vgg16.
onnx'#ExportMXNetmodeltoONNXformatviaMXNet'sexport_modelAPIconverted_onnx_filename=onnx_mxnet.
export_model('vgg16-symbol.
json','vgg16-0000.
params',[(1,3,224,224)],np.
float32,converted_onnx_filename)#CheckthatthenewlycreatedmodelisvalidandmeetsONNXspecification.
importonnxmodel_proto=onnx.
load(converted_onnx_filename)onnx.
checker.
check_model(model_proto)您可能会看到一些警告消息,不过您目前可以安全地忽略它们.
在您运行此脚本后,您将在同一目录中看到新创建的.
onnx文件.
5.
现在您有一个ONNX文件,可以将其与以下示例结合使用来尝试运行推理:在推理中将CNTK与ONNX模型配合使用(p.
99)ONNX教程有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程(p.
101)有关将Chainer转换为ONNX,然后加载到CNTK的教程(p.
102)有关将Chainer转换为ONNX,然后加载到MXNet的教程(p.
104)有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)有关将Chainer转换为ONNX,然后加载到CNTK的教程Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
ONNX概述开放神经网络交换(ONNX)是一种用于表示深度学习模型的开放格式.
ONNX受到AmazonWebServices、Microsoft、Facebook和其他多个合作伙伴的支持.
您可以使用任何选定的框架来设计、训练和部署深度学习模型.
ONNX模型的好处是,它们可以在框架之间轻松移动.
102深度学习AMI开发人员指南将框架用于ONNX本教程介绍如何将采用Conda的DeepLearningAMI与ONNX结合使用.
通过执行以下步骤,您可以训练模型或从一个框架中加载预先训练的模型,将此模型导出为ONNX,然后将此模型导入到另一个框架中.
ONNX先决条件要使用此ONNX教程,您必须有权访问采用Conda的DeepLearningAMI版本12或更高版本.
有关如何开始使用采用Conda的DeepLearningAMI的更多信息,请参阅采用Conda的DeepLearningAMI(p.
3).
Important这些示例使用可能需要多达8GB内存(或更多)的函数.
请务必选择具有足量内存的实例类型.
使用采用Conda的DeepLearningAMI启动终端会话以开始以下教程.
将Chainer模型转换为ONNX,然后将模型加载到CNTK中首先,激活Chainer环境:$sourceactivatechainer_p36使用文本编辑器创建一个新文件,并在脚本中使用以下程序来从ChainerModelZoo中提取模型,然后将它导出为ONNX格式.
importnumpyasnpimportchainerimportchainercv.
linksasLimportonnx_chainer#Fetchavgg16modelmodel=L.
VGG16(pretrained_model='imagenet')#Prepareaninputtensorx=np.
random.
rand(1,3,224,224).
astype(np.
float32)*255#Runthemodelonthedatawithchainer.
using_config('train',False):chainer_out=model(x).
array#Exportthemodeltoa.
onnxfileout=onnx_chainer.
export(model,x,filename='vgg16.
onnx')#CheckthatthenewlycreatedmodelisvalidandmeetsONNXspecification.
importonnxmodel_proto=onnx.
load("vgg16.
onnx")onnx.
checker.
check_model(model_proto)在您运行此脚本后,您将在同一目录中看到新创建的.
onnx文件.
现在您有一个ONNX文件,可以将其与以下示例结合使用来尝试运行推理:在推理中将CNTK与ONNX模型配合使用(p.
99)ONNX教程有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程(p.
101)有关将Chainer转换为ONNX,然后加载到CNTK的教程(p.
102)有关将Chainer转换为ONNX,然后加载到MXNet的教程(p.
104)103深度学习AMI开发人员指南将框架用于ONNX有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)有关将Chainer转换为ONNX,然后加载到MXNet的教程ONNX概述开放神经网络交换(ONNX)是一种用于表示深度学习模型的开放格式.
ONNX受到AmazonWebServices、Microsoft、Facebook和其他多个合作伙伴的支持.
您可以使用任何选定的框架来设计、训练和部署深度学习模型.
ONNX模型的好处是,它们可以在框架之间轻松移动.
本教程介绍如何将采用Conda的DeepLearningAMI与ONNX结合使用.
通过执行以下步骤,您可以训练模型或从一个框架中加载预先训练的模型,将此模型导出为ONNX,然后将此模型导入到另一个框架中.
ONNX先决条件要使用此ONNX教程,您必须有权访问采用Conda的DeepLearningAMI版本12或更高版本.
有关如何开始使用采用Conda的DeepLearningAMI的更多信息,请参阅采用Conda的DeepLearningAMI(p.
3).
Important这些示例使用可能需要多达8GB内存(或更多)的函数.
请务必选择具有足量内存的实例类型.
使用采用Conda的DeepLearningAMI启动终端会话以开始以下教程.
将Chainer模型转换为ONNX,然后将模型加载到MXNet中首先,激活Chainer环境:$sourceactivatechainer_p36使用文本编辑器创建一个新文件,并在脚本中使用以下程序来从ChainerModelZoo中提取模型,然后将它导出为ONNX格式.
importnumpyasnpimportchainerimportchainercv.
linksasLimportonnx_chainer#Fetchavgg16modelmodel=L.
VGG16(pretrained_model='imagenet')#Prepareaninputtensorx=np.
random.
rand(1,3,224,224).
astype(np.
float32)*255#Runthemodelonthedatawithchainer.
using_config('train',False):chainer_out=model(x).
array#Exportthemodeltoa.
onnxfileout=onnx_chainer.
export(model,x,filename='vgg16.
onnx')#CheckthatthenewlycreatedmodelisvalidandmeetsONNXspecification.
importonnxmodel_proto=onnx.
load("vgg16.
onnx")onnx.
checker.
check_model(model_proto)104深度学习AMI开发人员指南将框架用于ONNX在您运行此脚本后,您将在同一目录中看到新创建的.
onnx文件.
现在您有一个ONNX文件,可以将其与以下示例结合使用来尝试运行推理:使用ApacheMXNet(孵育)使用ONNX模型进行推断(p.
97)ONNX教程有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程(p.
101)有关将Chainer转换为ONNX,然后加载到CNTK的教程(p.
102)有关将Chainer转换为ONNX,然后加载到MXNet的教程(p.
104)有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)有关将PyTorch转换为ONNX,然后加载到CNTK的教程Note从v28版本开始,AWSDeepLearningAMI中将不再包含CNTK、Caffe、Caffe2和TheanoConda环境.
包含这些环境的先前版本AWSDeepLearningAMI将继续可用.
但是,只有在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
ONNX概述开放神经网络交换(ONNX)是一种用于表示深度学习模型的开放格式.
ONNX受到AmazonWebServices、Microsoft、Facebook和其他多个合作伙伴的支持.
您可以使用任何选定的框架来设计、训练和部署深度学习模型.
ONNX模型的好处是,它们可以在框架之间轻松移动.
本教程介绍如何将采用Conda的DeepLearningAMI与ONNX结合使用.
通过执行以下步骤,您可以训练模型或从一个框架中加载预先训练的模型,将此模型导出为ONNX,然后将此模型导入到另一个框架中.
ONNX先决条件要使用此ONNX教程,您必须有权访问采用Conda的DeepLearningAMI版本12或更高版本.
有关如何开始使用采用Conda的DeepLearningAMI的更多信息,请参阅采用Conda的DeepLearningAMI(p.
3).
Important这些示例使用可能需要多达8GB内存(或更多)的函数.
请务必选择具有足量内存的实例类型.
使用采用Conda的DeepLearningAMI启动终端会话以开始以下教程.
将PyTorch模型转换为ONNX,然后将模型加载到CNTK中首先,激活PyTorch环境:$sourceactivatepytorch_p36使用文本编辑器创建一个新文件,并在脚本中使用以下程序来训练PyTorch中的模拟模型,然后将它导出为ONNX格式.
#BuildaMockModelinPytorchwithaconvolutionandareduceMeanlayer\importtorch105深度学习AMI开发人员指南将框架用于ONNXimporttorch.
nnasnnimporttorch.
nn.
functionalasFimporttorch.
optimasoptimfromtorchvisionimportdatasets,transformsfromtorch.
autogradimportVariableimporttorch.
onnxastorch_onnxclassModel(nn.
Module):def__init__(self):super(Model,self).
__init__()self.
conv=nn.
Conv2d(in_channels=3,out_channels=32,kernel_size=(3,3),stride=1,padding=0,bias=False)defforward(self,inputs):x=self.
conv(inputs)#x=x.
view(x.
size()[0],x.
size()[1],-1)returntorch.
mean(x,dim=2)#Usethisaninputtracetoserializethemodelinput_shape=(3,100,100)model_onnx_path="torch_model.
onnx"model=Model()model.
train(False)#ExportthemodeltoanONNXfiledummy_input=Variable(torch.
randn(1,*input_shape))output=torch_onnx.
export(model,dummy_input,model_onnx_path,verbose=False)在您运行此脚本后,您将在同一目录中看到新创建的.
onnx文件.
现在,切换到CNTKConda环境以使用CNTK加载模型.
接下来,激活CNTK环境:$sourcedeactivate$sourceactivatecntk_p36使用文本编辑器创建一个新文件,并在脚本中使用以下程序以在CNTK中打开ONNX格式文件.
importcntkasC#ImportthePyTorchmodelintoCNTKviatheCNTKimportAPIz=C.
Function.
load("torch_model.
onnx",device=C.
device.
cpu(),format=C.
ModelFormat.
ONNX)在运行此脚本后,CNTK将加载模型.
您也可以通过以下方式使用CNTK导出为ONNX:将以下内容追加到上一脚本,然后运行它.
#ExportthemodeltoONNXviatheCNTKexportAPIz.
save("cntk_model.
onnx",format=C.
ModelFormat.
ONNX)ONNX教程有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程(p.
101)有关将Chainer转换为ONNX,然后加载到CNTK的教程(p.
102)有关将Chainer转换为ONNX,然后加载到MXNet的教程(p.
104)有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)106深度学习AMI开发人员指南将框架用于ONNX有关将PyTorch转换为ONNX,然后加载到MXNet的教程ONNX概述开放神经网络交换(ONNX)是一种用于表示深度学习模型的开放格式.
ONNX受到AmazonWebServices、Microsoft、Facebook和其他多个合作伙伴的支持.
您可以使用任何选定的框架来设计、训练和部署深度学习模型.
ONNX模型的好处是,它们可以在框架之间轻松移动.
本教程介绍如何将采用Conda的DeepLearningAMI与ONNX结合使用.
通过执行以下步骤,您可以训练模型或从一个框架中加载预先训练的模型,将此模型导出为ONNX,然后将此模型导入到另一个框架中.
ONNX先决条件要使用此ONNX教程,您必须有权访问采用Conda的DeepLearningAMI版本12或更高版本.
有关如何开始使用采用Conda的DeepLearningAMI的更多信息,请参阅采用Conda的DeepLearningAMI(p.
3).
Important这些示例使用可能需要多达8GB内存(或更多)的函数.
请务必选择具有足量内存的实例类型.
使用采用Conda的DeepLearningAMI启动终端会话以开始以下教程.
将PyTorch模型转换为ONNX,然后将模型加载到MXNet中首先,激活PyTorch环境:$sourceactivatepytorch_p36使用文本编辑器创建一个新文件,并在脚本中使用以下程序来训练PyTorch中的模拟模型,然后将它导出为ONNX格式.
#BuildaMockModelinPyTorchwithaconvolutionandareduceMeanlayerimporttorchimporttorch.
nnasnnimporttorch.
nn.
functionalasFimporttorch.
optimasoptimfromtorchvisionimportdatasets,transformsfromtorch.
autogradimportVariableimporttorch.
onnxastorch_onnxclassModel(nn.
Module):def__init__(self):super(Model,self).
__init__()self.
conv=nn.
Conv2d(in_channels=3,out_channels=32,kernel_size=(3,3),stride=1,padding=0,bias=False)defforward(self,inputs):x=self.
conv(inputs)#x=x.
view(x.
size()[0],x.
size()[1],-1)returntorch.
mean(x,dim=2)#Usethisaninputtracetoserializethemodelinput_shape=(3,100,100)model_onnx_path="torch_model.
onnx"model=Model()model.
train(False)#ExportthemodeltoanONNXfiledummy_input=Variable(torch.
randn(1,*input_shape))107深度学习AMI开发人员指南模型处理output=torch_onnx.
export(model,dummy_input,model_onnx_path,verbose=False)print("Exportoftorch_model.
onnxcomplete!
")在您运行此脚本后,您将在同一目录中看到新创建的.
onnx文件.
现在,切换到MXNetConda环境以使用MXNet加载模型.
接下来,激活MXNet环境:$sourcedeactivate$sourceactivatemxnet_p36使用文本编辑器创建一个新文件,并在脚本中使用以下程序以在MXNet中打开ONNX格式文件.
importmxnetasmxfrommxnet.
contribimportonnxasonnx_mxnetimportnumpyasnp#ImporttheONNXmodelintoMXNet'ssymbolicinterfacesym,arg,aux=onnx_mxnet.
import_model("torch_model.
onnx")print("Loadedtorch_model.
onnx!
")print(sym.
get_internals())运行此脚本后,MXNet将拥有加载的模型,并打印一些基本模型信息.
ONNX教程有关将ApacheMXNet转换为ONNX,然后加载到CNTK的教程(p.
101)有关将Chainer转换为ONNX,然后加载到CNTK的教程(p.
102)有关将Chainer转换为ONNX,然后加载到MXNet的教程(p.
104)有关将PyTorch转换为ONNX,然后加载到MXNet的教程(p.
107)有关将PyTorch转换为ONNX,然后加载到CNTK的教程(p.
105)模型处理以下是已在采用Conda的DeepLearningAMI上安装的模型处理选项.
单击其中一个选项可了解如何使用该选项.
主题适用于ApacheMXNet的模型服务器(MMS)(p.
108)TensorFlowServing(p.
110)TorchServe(p.
112)适用于ApacheMXNet的模型服务器(MMS)适用于ApacheMXNet的模型服务器(MMS)是一个灵活的工具,用于处理从ApacheMXNet(孵化)导出或导出为开放神经网络交换(ONNX)模型格式的深度学习模型.
MMS随DLAMIwithConda一起预安装.
本MMS教程将演示如何处理图像分类模型.
主题在MMS上处理图像分类模型(p.
109)108深度学习AMI开发人员指南模型处理其他示例(p.
110)更多信息(p.
110)在MMS上处理图像分类模型本教程介绍如何利用MMS处理图像分类模型.
该模型通过MMSModelZoo提供,在您启动MMS时自动进行下载.
在服务器开始运行后,它会立即侦听预测请求.
在这种情况下,如果您上传图像(一个小猫的图像),服务器会返回在其上训练该模型的1,000类中匹配的前5个类的预测.
有关模型、模型的训练方式以及模型的测试方式的更多信息可在MMSModelZoo中找到.
在MMS上处理示例图像分类模型1.
连接到采用Conda的DeepLearningAMI的AmazonElasticComputeCloud(AmazonEC2)实例.
2.
激活MXNet环境:对于使用CUDA9.
0和MKL-DNN的Python3上的MXNet和Keras2,运行以下命令:$sourceactivatemxnet_p36对于使用CUDA9.
0和MKL-DNN的Python2上的MXNet和Keras2,运行以下命令:$sourceactivatemxnet_p273.
使用以下命令运行MMS.
添加>/dev/null将在您运行其他测试时生成无提示日志输出.
$mxnet-model-server--start>/dev/nullMMS现在正在您的主机上运行并且正在侦听推理请求.
4.
接下来,使用curl命令管理MMS的管理终端节点,并告知它您希望它处理的模型.
$curl-XPOST"http://localhost:8081/modelsurl=https%3A%2F%2Fs3.
amazonaws.
com%2Fmodel-server%2Fmodels%2Fsqueezenet_v1.
1%2Fsqueezenet_v1.
1.
model"5.
MMS需要知道您要使用的工作线程的数量.
对于此测试,您可以尝试3.
$curl-v-XPUT"http://localhost:8081/models/squeezenet_v1.
1min_worker=3"6.
下载一个小猫图像并将其发送到MMS预测终端节点:$curl-Ohttps://s3.
amazonaws.
com/model-server/inputs/kitten.
jpg$curl-XPOSThttp://127.
0.
0.
1:8080/predictions/squeezenet_v1.
1-Tkitten.
jpg该预测终端节点将返回一个JSON格式的预测(类似于下面的前5个预测),其中,图像具有94%的可能性为埃及猫,然后有5.
5%的可能性为猞猁或山猫:{"prediction":[[{"class":"n02124075Egyptiancat","probability":0.
940},{"class":"n02127052lynx,catamount","probability":0.
055},{109深度学习AMI开发人员指南模型处理"class":"n02123045tabby,tabbycat","probability":0.
002},{"class":"n02123159tigercat","probability":0.
0003},{"class":"n02123394Persiancat","probability":0.
0002}]]}7.
测试更多映像,或者如果您已完成测试,请停止服务器:$mxnet-model-server--stop本教程重点介绍基本模型处理.
MMS还支持将ElasticInference与模型服务一起使用.
有关更多信息,请参阅模型服务与AmazonElasticInference当您准备好了解有关其他MMS功能的更多信息时,请参阅GitHub上的MMS文档.
其他示例MMS具有可在DLAMI上运行的各种示例.
您可以在MMS项目存储库上查看它们.
更多信息有关更多MMS文档,包括如何使用Docker设置MMS—或要利用最新的MMS功能,请在GitHub上启动MMS项目页面.
TensorFlowServingTensorFlowServing是一个用于机器学习模型的灵活、高性能的服务系统.
tensorflow-serving-api会随采用Conda的DeepLearningAMI一起预安装!
您将在~/examples/tensorflow-serving/中找到一个用于训练、导出和处理MNIST模型的示例脚本.
要运行这些示例中的任一示例,请先连接到采用Conda的DeepLearningAMI并激活TensorFlow环境.
$sourceactivatetensorflow_p37现在,将目录更改至服务示例脚本文件夹.
$cd~/examples/tensorflow-serving/处理预训练的Inception模型以下是您可尝试为不同的模型(如Inception)提供服务的示例.
作为一般规则,您需要将可维护模型和客户端脚本下载到您的DLAMI.
使用Inception模型处理和测试推理1.
下载该模型.
110深度学习AMI开发人员指南模型处理$curl-Ohttps://s3-us-west-2.
amazonaws.
com/tf-test-models/INCEPTION.
zip2.
解压缩模型.
$unzipINCEPTION.
zip3.
下载一张哈士奇的照片.
$curl-Ohttps://upload.
wikimedia.
org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.
jpg4.
启动服务器.
请注意,对于AmazonLinux,您必须将用于model_base_path的目录从/home/ubuntu更改为/home/ec2-user.
$tensorflow_model_server--model_name=INCEPTION--model_base_path=/home/ubuntu/examples/tensorflow-serving/INCEPTION/INCEPTION--port=90005.
对于在前台运行的服务器,您需要启动另一个终端会话才能继续.
打开新的终端并使用sourceactivatetensorflow_p37激活TensorFlow.
然后,使用您的首选文本编辑器创建具有以下内容的脚本.
将它命名为inception_client.
py.
此脚本将映像文件名用作参数,并从预训练模型中获得预测结果.
from__future__importprint_functionimportgrpcimporttensorflowastfimportargparsefromtensorflow_serving.
apisimportpredict_pb2fromtensorflow_serving.
apisimportprediction_service_pb2_grpcparser=argparse.
ArgumentParser(description='TFServingTest',formatter_class=argparse.
ArgumentDefaultsHelpFormatter)parser.
add_argument('--server_address',default='localhost:9000',help='TenforflowModelServerAddress')parser.
add_argument('--image',default='Siberian_Husky_bi-eyed_Flickr.
jpg',help='Pathtotheimage')args=parser.
parse_args()defmain():channel=grpc.
insecure_channel(args.
server_address)stub=prediction_service_pb2_grpc.
PredictionServiceStub(channel)#Sendrequestwithopen(args.
image,'rb')asf:#Seeprediction_service.
protoforgRPCrequest/responsedetails.
request=predict_pb2.
PredictRequest()request.
model_spec.
name='INCEPTION'request.
model_spec.
signature_name='predict_images'input_name='images'input_shape=[1]input_data=f.
read()request.
inputs[input_name].
CopyFrom(tf.
make_tensor_proto(input_data,shape=input_shape))result=stub.
Predict(request,10.
0)#10secstimeoutprint(result)111深度学习AMI开发人员指南模型处理print("InceptionClientPassed")if__name_main__':main()6.
现在,运行将服务器位置和端口以及哈士奇照片的文件名作为参数传递的脚本.
$python3inception_client.
py--server=localhost:9000--imageSiberian_Husky_bi-eyed_Flickr.
jpg训练和处理MNIST模型对于本教程,我们将导出模型并随后通过tensorflow_model_server应用程序处理它.
最后,您可以使用示例客户端脚本测试模型服务器.
运行将训练和导出MNIST模型的脚本.
作为脚本的唯一参数,您需要为其提供一个文件夹位置以保存该模型.
现在,我们可以把它放入mnist_model中.
该脚本将会为您创建此文件夹.
$pythonmnist_saved_model.
py/tmp/mnist_model请耐心等待,因为此脚本可能需要一段时间才能提供输出.
当训练完成并最终导出模型后,您应该看到以下内容:Donetraining!
Exportingtrainedmodeltomnist_model/1Doneexporting!
下一步是运行tensorflow_model_server以处理导出的模型.
$tensorflow_model_server--port=9000--model_name=mnist--model_base_path=/tmp/mnist_model为您提供了一个客户端脚本来测试服务器.
要对其进行测试,您将需要打开一个新的终端窗口.
$pythonmnist_client.
py--num_tests=1000--server=localhost:9000更多功能和示例如果您有兴趣了解有关TensorFlowServing的更多信息,请查看TensorFlow网站.
TorchServeTorchServe是一个灵活的工具,用于处理已从PyTorch导出的深度学习模型.
TorchServe从v34开始预先安装有采用Conda的DeepLearningAMI.
有关使用TorchServe的更多信息,请参阅适用于PyTorch的模型服务器.
主题在TorchServe上处理图像分类模型本教程介绍如何使用TorchServe处理图像分类模型.
它使用DenseNet提供的PyTorch-161模型.
一旦服务器运行,它会侦听预测请求.
上传图像时(在这种情况下为小猫的图像),服务器将返回模型训练时所在的类中的前5个匹配类的预测.
112深度学习AMI开发人员指南模型处理在TorchServe上处理示例图像分类模型1.
使用AmazonElasticComputeCloudv34或更高版本连接到AmazonEC2(采用Conda的DeepLearningAMI)实例.
2.
激活pytorch_latest_p36环境.
sourceactivatepytorch_latest_p363.
克隆TorchServe存储库,然后创建一个目录以存储您的模型.
gitclonehttps://github.
com/pytorch/serve.
gitmkdirmodel_store4.
使用模型存档器存档模型.
参数使用extra-files存储库中的文件,因此,请根据需要更新路径.
有关模型存档程序的更多信息,请参阅TorchServe的Torch模型存档程序.
TorchServewgethttps://download.
pytorch.
org/models/densenet161-8d451a50.
pthtorch-model-archiver--model-namedensenet161--version1.
0--model-file.
/serve/examples/image_classifier/densenet_161/model.
py--serialized-filedensenet161-8d451a50.
pth--export-pathmodel_store--extra-files.
/serve/examples/image_classifier/index_to_name.
json--handlerimage_classifier5.
运行TorchServe以启动终端节点.
添加>/dev/null会关闭日志输出.
torchserve--start--ncs--model-storemodel_store--modelsdensenet161.
mar>/dev/null6.
下载一个小猫图像并将其发送到TorchServe预测终端节点:curl-Ohttps://s3.
amazonaws.
com/model-server/inputs/kitten.
jpgcurlhttp://127.
0.
0.
1:8080/predictions/densenet161-Tkitten.
jpg预测终端节点返回一个JSON格式的预测(类似于下面的前5个预测),其中,图像有一个包含一个芬兰猫的{"tiger_cat":0.
46933576464653015,"tabby":0.
463387668132782,"Egyptian_cat":0.
0645613968372345,"lynx":0.
0012828196631744504,"plastic_bag":0.
00023323058849200606}7.
完成测试后,停止服务器:torchserve--stop其他示例TorchServe具有可在DLAMI实例上运行的各种示例.
您可以在项目存储库示例页面TorchServe上查看它们.
更多信息有关更多TorchServe文档,包括如何使用Docker设置TorchServe和最新的TorchServe功能,请参阅上的TorchServe项目页面.
GitHub113深度学习AMI开发人员指南DLAMI升级升级DLAMI在此处,您将找到有关升级DLAMI的信息以及有关在DLAMI上更新软件的提示.
主题升级到新版DLAMI(p.
114)有关软件更新的提示(p.
114)升级到新版DLAMIDLAMI的系统映像定期更新,以利用新的深度学习框架版本、CUDA、其他软件更新和性能优化.
如果您已使用DLAMI一段时间并想要利用更新,则需要启动新实例.
您还必须手动传输任何数据集、检查点或其他宝贵的数据.
或者,您可以使用AmazonEBS保留您的数据,并将其附加到新的DLAMI.
通过这种方法,您可以经常升级,同时最大限度地减少转换数据所需的时间.
Note在DLAMI之间附加和移动AmazonEBS卷时,必须在同一个可用区同时具有DLAMI和新卷.
1.
使用AmazonEC2控制台创建新的AmazonEBS卷.
有关详细指导,请参阅创建AmazonEBS卷.
2.
将新创建的AmazonEBS卷附加到现有的DLAMI.
有关详细指导,请参阅附加AmazonEBS卷.
3.
传输您的数据,如数据集、检查点和配置文件.
4.
启动DLAMI.
有关详细指导,请参阅启动和配置DLAMI(p.
16).
5.
从旧DLAMI中分离AmazonEBS卷.
有关详细指导,请参阅分离AmazonEBS卷.
6.
将AmazonEBS卷连接到新的DLAMI.
请按照步骤2中的相关说明附加卷.
7.
在确认数据可用于新的DLAMI上时,停止并终止旧的DLAMI.
有关更详细的清理说明,请参阅清除(p.
18).
有关软件更新的提示有时,您可能想要在DLAMI上手动更新软件.
通常建议您使用pip来更新Python软件包.
您还应在采用Conda的DeepLearningAMI上的Conda环境内使用pip以更新软件包.
有关升级和安装说明,请参阅特定框架或软件的网站.
如果您有兴趣运行特定程序包的最新主分支,请激活相应的环境,然后将--pre添加到pipinstall--upgrade命令的末尾.
例如:sourceactivatemxnet_p36pipinstall--upgrademxnet--pre114深度学习AMI开发人员指南数据保护AWSDeepLearningAMI中的安全性AWS的云安全性的优先级最高.
作为AWS客户,您将从专为满足大多数安全敏感型组织的要求而打造的数据中心和网络架构中受益.
安全性是AWS和您的共同责任.
责任共担模型将其描述为云的安全性和云中的安全性:云的安全性–AWS负责保护在AWS云中运行AWS服务的基础设施.
AWS还向您提供可安全使用的服务.
作为AWS合规性计划的一部分,第三方审计人员将定期测试和验证安全性的有效性.
要了解适用于DLAMI的合规性计划,请参阅合规性计划范围内的AWS服务.
云中的安全性–您的责任由您使用的AWS服务决定.
您还需要对其他因素负责,包括您的数据的敏感性、您公司的要求以及适用的法律法规.
此文档将帮助您了解如何在使用DLAMI时应用责任共担模型.
以下主题说明如何配置DLAMI以实现您的安全性和合规性目标.
您还将了解如何使用其他AWS服务来帮助您监控和保护您的DLAMI资源.
有关更多信息,请参阅AmazonEC2中的安全性.
主题AWSDeepLearningAMI中的数据保护(p.
115)AWSDeepLearningAMI中的IdentityandAccessManagement(p.
116)AWSDeepLearningAMI中的日志记录和监控(p.
119)AWSDeepLearningAMI的合规性验证(p.
119)AWSDeepLearningAMI中的弹性(p.
119)AWSDeepLearningAMI中的基础设施安全性(p.
120)AWSDeepLearningAMI中的数据保护AWS责任共担模式适用于AWSDeepLearningAMI中的数据保护.
如该模式中所述,AWS负责保护运行所有AWS云的全球基础设施.
您负责维护对托管在此基础设施上的内容的控制.
此内容包括您所使用的AWS服务的安全配置和管理任务.
有关数据隐私的更多信息,请参阅数据隐私常见问题.
出于数据保护目的,我们建议您保护AWS账户凭证并使用AWSIdentityandAccessManagement(IAM)设置单独的用户账户.
这仅向每个用户授予履行其工作职责所需的权限.
我们还建议您通过以下方式保护您的数据:对每个账户使用Multi-FactorAuthentication(MFA).
使用SSL/TLS与AWS资源进行通信.
建议使用TLS1.
2或更高版本.
使用AWSCloudTrail设置API和用户活动日志记录.
使用AWS加密解决方案以及AWS服务中的所有默认安全控制.
使用高级托管安全服务(例如AmazonMacie),它有助于发现和保护存储在AmazonS3中的个人数据.
如果在通过命令行界面或API访问AWS时需要经过FIPS140-2验证的加密模块,请使用FIPS终端节点.
有关可用的FIPS终端节点的更多信息,请参阅美国联邦信息处理标准(FIPS)第140-2版.
我们强烈建议您切勿将敏感的可识别信息(例如您客户的账号)放入自由格式字段(例如Name(名称)字段).
这包括使用控制台、API、AWSCLI或AWS开发工具包处理DLAMI或其他AWS服务时.
您输入到115深度学习AMI开发人员指南IdentityandAccessManagementDLAMI或其他服务中的任何数据都可能被选取以包含在诊断日志中.
当您向外部服务器提供URL时,请勿在URL中包含凭证信息来验证您对该服务器的请求.
AWSDeepLearningAMI中的IdentityandAccessManagementAWSIdentityandAccessManagement(IAM)是一项AWS服务,可帮助管理员安全地控制对AWS资源的访问.
IAM管理员控制谁可以通过身份验证(登录)和授权(具有权限)以使用DLAMI资源.
IAM是一项无需额外费用即可使用的AWS服务.
有关IdentityandAccessManagement的更多信息,请参阅AmazonEC2的IdentityandAccessManagement.
主题使用身份进行身份验证(p.
116)使用策略管理访问(p.
117)IAM替换为AmazonEMR(p.
119)使用身份进行身份验证身份验证是您使用身份凭证登录AWS的方法.
有关使用AWS管理控制台登录的更多信息,请参阅IAM用户指南中的以IAM用户或根用户身份登录AWS管理控制台.
您必须以AWS账户根用户、IAM用户身份或通过代入IAM角色进行身份验证(登录到AWS).
您还可以使用公司的单一登录身份验证方法,甚至使用Google或Facebook登录.
在这些案例中,您的管理员以前使用IAM角色设置了联合身份验证.
在您使用来自其他公司的凭证访问AWS时,您间接地代入了角色.
要直接登录到AWS管理控制台,请使用您的密码和根用户电子邮件地址或IAM用户名.
您可以使用根用户或IAM用户访问密钥以编程方式访问AWS.
AWS提供了开发工具包和命令行工具,可使用您的凭证对您的请求进行加密签名.
如果您不使用AWS工具,则必须自行对请求签名.
使用签名版本4(用于对入站API请求进行验证的协议)完成此操作.
有关身份验证请求的更多信息,请参阅AWSGeneralReference中的签名版本4签名流程.
无论使用何种身份验证方法,您可能还需要提供其他安全信息.
例如,AWS建议您使用多重身份验证(MFA)来提高账户的安全性.
要了解更多信息,请参阅IAM用户指南中的在AWS中使用Multi-FactorAuthentication(MFA).
AWS账户根用户当您首次创建AWS账户时,最初使用的是一个对账户中所有AWS服务和资源有完全访问权限的单点登录身份.
此身份称为AWS账户根用户,可使用您创建账户时所用的电子邮件地址和密码登录来获得此身份.
强烈建议您不使用根用户执行日常任务,即使是管理任务.
请遵守仅将根用户用于创建首个IAM用户的最佳实践.
然后请妥善保存根用户凭证,仅用它们执行少数账户和服务管理任务.
IAM用户和群组IAM用户是AWS账户内对某个人员或应用程序具有特定权限的一个身份.
IAM用户可以拥有长期凭证,例如用户名和密码或一组访问密钥.
要了解如何生成访问密钥,请参阅IAM用户指南中的管理IAM用户的访问密钥.
为IAM用户生成访问密钥时,请确保查看并安全保存密钥对.
您以后无法找回秘密访问密钥,而是必须生成新的访问密钥对.
IAM组是指定一个IAM用户集合的身份.
您不能使用组的身份登录.
您可以使用组来一次性为多个用户指定权限.
如果有大量用户,使用组可以更轻松地管理用户权限.
例如,您有一个名为IAMAdmins的组并为该组授予管理IAM资源的权限.
116深度学习AMI开发人员指南使用策略管理访问用户与角色不同.
用户唯一地与某个人员或应用程序关联,而角色旨在让需要它的任何人代入.
用户具有永久的长期凭证,而角色提供临时凭证.
要了解更多信息,请参阅IAM用户指南中的何时创建IAM用户(而不是角色).
IAM角色IAM角色是AWS账户中具有特定权限的实体.
它类似于IAM用户,但未与特定人员关联.
您可以通过切换角色,在AWS管理控制台中暂时代入IAM角色.
您可以调用AWSCLI或AWSAPI操作或使用自定义URL以代入角色.
有关使用角色方法的更多信息,请参阅IAM用户指南中的使用IAM角色.
具有临时凭证的IAM角色在以下情况下很有用:临时IAM用户权限–IAM用户可代入IAM角色,暂时获得针对特定任务的不同权限.
联合身份用户访问–您也可以不创建IAM用户,而是使用来自AWSDirectoryService、您的企业用户目录或Web身份提供商的现有身份.
这些用户被称为联合身份用户.
在通过身份提供商请求访问权限时,AWS将为联合身份用户分配角色.
有关联合身份用户的更多信息,请参阅IAM用户指南中的联合身份用户和角色.
跨账户访问–您可以使用IAM角色允许其他账户中的某个人(可信任委托人)访问您账户中的资源.
角色是授予跨账户访问权限的主要方式.
但是,对于某些AWS服务,您可以将策略直接附加到资源(而不是使用角色作为代理).
要了解用于跨账户访问的角色和基于资源的策略之间的差别,请参阅IAM用户指南中的IAM角色与基于资源的策略有何不同.
跨服务访问–SomeAWSservicesusefeaturesinotherAWSservices.
Forexample,whenyoumakeacallinaservice,it'scommonforthatservicetorunapplicationsinAmazonEC2orstoreobjectsinAmazonS3.
Aservicemightdothisusingthecallingprincipal'spermissions,usingaservicerole,orusingaservice-linkedrole.
委托人权限–WhenyouuseanIAMuserorroletoperformactionsinAWS,youareconsideredaprincipal.
Policiesgrantpermissionstoaprincipal.
Whenyouusesomeservices,youmightperformanactionthatthentriggersanotheractioninadifferentservice.
Inthiscase,youmusthavepermissionstoperformbothactions.
Toseewhetheranactionrequiresadditionaldependentactionsinapolicy,seeintheServiceAuthorizationReference.
服务角色–服务角色是服务代入以代表您执行操作的IAM角色.
服务角色只在您的账户内提供访问权限,不能用于为访问其他账户中的服务授权.
IAM管理员可以在IAM中创建、修改和删除服务角色.
有关更多信息,请参阅IAM用户指南中的创建角色以向AWS服务委派权限.
服务相关角色–Aservice-linkedroleisatypeofservicerolethatislinkedtoanAWSservice.
Theservicecanassumetheroletoperformanactiononyourbehalf.
Service-linkedrolesappearinyourIAMaccountandareownedbytheservice.
AnIAMadministratorcanview,butnoteditthepermissionsforservice-linkedroles.
在AmazonEC2上运行的应用程序–对于在EC2实例上运行、并发出AWSCLI或AWSAPI请求的应用程序,您可以使用IAM角色管理它们的临时凭证.
这优先于在EC2实例中存储访问密钥.
要将AWS角色分配给EC2实例并使其对该实例的所有应用程序可用,您可以创建一个附加到实例的实例配置文件.
实例配置文件包含角色,并使EC2实例上运行的程序能够获得临时凭证.
有关更多信息,请参阅IAM用户指南中的使用IAM角色向在AmazonEC2实例上运行的应用程序授予权限.
要了解是否使用IAM角色或IAM用户,请参阅IAM用户指南中的何时创建IAM角色(而不是用户).
使用策略管理访问您将创建策略并将其附加到IAM身份或AWS资源,以便控制AWS中的访问.
策略是AWS中的对象;在与标识或资源相关联时,策略定义它们的权限.
您可以通过根用户用户或IAM用户身份登录,也可以代入IAM角色.
随后,当您提出请求时,AWS会评估相关的基于身份或基于资源的策略.
策略中的权限确定是允许还是拒绝请求.
大多数策略在AWS中存储为JSON文档.
有关JSON策略文档的结构和内容的更多信息,请参阅IAM用户指南中的JSON策略概述.
AdministratorscanuseAWSJSONpoliciestospecifywhohasaccesstowhat.
Thatis,whichprincipalcanperformactionsonwhatresources,andunderwhatconditions.
117深度学习AMI开发人员指南使用策略管理访问每个IAM实体(用户或角色)在一开始都没有权限.
换言之,默认情况下,用户什么都不能做,甚至不能更改他们自己的密码.
要为用户授予执行某些操作的权限,管理员必须将权限策略附加到用户.
或者,管理员可以将用户添加到具有预期权限的组中.
当管理员为某个组授予访问权限时,该组内的全部用户都会获得这些访问权限.
IAM策略定义操作的权限,无论您使用哪种方法执行操作.
例如,假设您有一个允许iam:GetRole操作的策略.
具有该策略的用户可以从AWS管理控制台、AWSCLI或AWSAPI获取角色信息.
基于身份的策略Identity-basedpoliciesareJSONpermissionspolicydocumentsthatyoucanattachtoanidentity,suchasanIAMuser,groupofusers,orrole.
Thesepoliciescontrolwhatactionsusersandrolescanperform,onwhichresources,andunderwhatconditions.
Tolearnhowtocreateanidentity-basedpolicy,seeCreatingIAMpoliciesintheIAM用户指南.
基于身份的策略可以进一步归类为内联策略或托管策略.
内联策略直接嵌入单个用户、组或角色中.
托管策略是可以附加到AWS账户中的多个用户、组和角色的独立策略.
托管策略包括AWS托管策略和客户托管策略.
要了解如何在托管策略或内联策略之间进行选择,请参阅IAM用户指南中的在托管策略与内联策略之间进行选择.
基于资源的策略Resource-basedpoliciesareJSONpolicydocumentsthatyouattachtoaresource.
Examplesofresource-basedpoliciesareIAMroletrustpoliciesandAmazonS3bucketpolicies.
Inservicesthatsupportresource-basedpolicies,serviceadministratorscanusethemtocontrolaccesstoaspecificresource.
Fortheresourcewherethepolicyisattached,thepolicydefineswhatactionsaspecifiedprincipalcanperformonthatresourceandunderwhatconditions.
Youmustspecifyaprincipalinaresource-basedpolicy.
Principalscanincludeaccounts,users,roles,federatedusers,orAWSservices.
基于资源的策略是位于该服务中的内联策略.
您不能在基于资源的策略中使用来自IAM的AWS托管策略.
访问控制列表(ACL)Accesscontrollists(ACLs)controlwhichprincipals(accountmembers,users,orroles)havepermissionstoaccessaresource.
ACLsaresimilartoresource-basedpolicies,althoughtheydonotusetheJSONpolicydocumentformat.
AmazonS3、AWSWAF和AmazonVPC是支持ACL的服务示例.
要了解有关ACL的更多信息,请参阅AmazonSimpleStorageService开发人员指南中的访问控制列表(ACL)概述.
其他策略类型AWS支持额外的、不太常用的策略类型.
这些策略类型可以设置更常用的策略类型向您授予的最大权限.
权限边界–权限边界是一项高级功能,借助该功能,您可以设置基于身份的策略可以授予IAM实体的最大权限(IAM用户或角色).
您可为实体设置权限边界.
这些结果权限是实体的基于身份的策略及其权限边界的交集.
在Principal中指定用户或角色的基于资源的策略不受权限边界限制.
任一项策略中的显式拒绝将覆盖允许.
有关权限边界的更多信息,请参阅IAM用户指南中的IAM实体的权限边界.
服务控制策略(SCP)–SCP是JSON策略,指定了组织或组织单位(OU)在AWSOrganizations中的最大权限.
AWSOrganizations是一项服务,用于分组和集中管理您的企业拥有的多个AWS账户.
如果在组织内启用了所有功能,则可对任意或全部账户应用服务控制策略(SCP).
SCP限制成员账户中实体(包括每个AWS账户根用户)的权限.
有关组织和SCP的更多信息,请参阅AWSOrganizations用户指南中的SCP工作原理.
会话策略–会话策略是当您以编程方式为角色或联合身份用户创建临时会话时作为参数传递的高级策略.
结果会话的权限是用户或角色的基于身份的策略和会话策略的交集.
权限也可以来自基于资源的策略.
任一项策略中的显式拒绝将覆盖允许.
有关更多信息,请参阅IAM用户指南中的会话策略.
118深度学习AMI开发人员指南IAM替换为AmazonEMR多个策略类型当多个类型的策略应用于一个请求时,生成的权限更加复杂和难以理解.
要了解AWS如何确定在涉及多个策略类型时是否允许请求,请参阅IAM用户指南中的策略评估逻辑.
IAM替换为AmazonEMR您可以将AWSIdentityandAccessManagement与AmazonEMR一起使用来定义用户、AWS资源、组、角色和策略.
您还可以控制这些用户和角色可以访问哪些AWS服务.
有关将IAM与AmazonEMR结合使用的更多信息,请参阅AmazonEMR的AWSIdentityandAccessManagement.
AWSDeepLearningAMI中的日志记录和监控您的AWSDeepLearningAMI实例附带多个GPU监控工具,包括向AmazonCloudWatch报告GPU使用情况统计数据的实用程序.
有关更多信息,请参阅GPU监控和优化以及监控AmazonEC2.
AWSDeepLearningAMI的合规性验证作为多个AWS合规性计划的一部分,第三方审计员将评估AWSDeepLearningAMI的安全性和合规性.
有关支持的合规性计划的信息,请参阅AmazonEC2的合规性验证.
有关特定合规性计划范围内的AWS服务列表,请参阅合规性计划范围内的AWS服务.
有关常规信息,请参阅AWS合规性计划.
您可以使用AWSArtifact下载第三方审计报告.
有关更多信息,请参阅下载AWS构件中的报告.
您在使用DLAMI时的合规性责任由您数据的敏感性、贵公司的合规性目标以及适用的法律法规决定.
AWS提供以下资源来帮助满足合规性:安全性与合规性快速入门指南安全性与合规性快速入门指南–这些部署指南讨论了架构注意事项,并提供了在AWS上部署基于安全性和合规性的基准环境的步骤.
AWS合规性资源–此业务手册和指南集合可能适用于您的行业和位置.
AWSConfig开发人员指南中的使用规则评估资源–此AWSConfig服务评估您的资源配置对内部实践、行业指南和法规的遵循情况.
AWSSecurityHub–此AWS服务提供了AWS中安全状态的全面视图,可帮助您检查是否符合安全行业标准和最佳实践.
AWSDeepLearningAMI中的弹性AWS全球基础设施围绕AWS区域和可用区构建.
AWS区域提供多个在物理上独立且隔离的可用区,这些可用区通过延迟低、吞吐量高且冗余性高的网络连接在一起.
利用可用区,您可以设计和操作在可用区之间无中断地自动实现故障转移的应用程序和数据库.
与传统的单个或多个数据中心基础设施相比,可用区具有更高的可用性、容错性和可扩展性.
有关AWS区域和可用区的更多信息,请参阅AWS全球基础设施.
有关帮助支持数据弹性和备份需求的功能的信息,请参阅AmazonEC2中的弹性.
119深度学习AMI开发人员指南基础设施安全AWSDeepLearningAMI中的基础设施安全性AWSDeepLearningAMI的基础架构安全性受AmazonEC2支持.
有关更多信息,请参阅AmazonEC2中的基础设施安全性.
120深度学习AMI开发人员指南论坛相关信息主题论坛(p.
121)相关博客文章(p.
121)常见问题(p.
121)论坛论坛:AWSDeepLearningAMI相关博客文章与DeepLearningAMI相关的最新文章列表启动AWSDeepLearningAMI(在10分钟内)在AmazonEC2C5和P3实例上使用优化的TensorFlow1.
6加快训练面向机器学习从业人员的新AWSDeepLearningAMI新的可用培训课程:AWS机器学习和深度学习介绍AWS深度学习之旅常见问题问:如何跟踪与DLAMI相关的产品发布信息以下是两个建议:为此博客类别添加书签:"AWSDeepLearningAMIs",网址为:与DeepLearningAMI相关的最新文章列表.
观看论坛:AWSDeepLearningAMI问:是否安装了NVIDIA驱动程序和CUDA是的.
某些DLAMI具有不同的版本.
采用Conda的DeepLearningAMI(p.
3)包含任何DLAMI的最新版本.
CUDA安装和框架绑定(p.
5)中进行了详细介绍.
您也可以参阅市场上的特定AMI的详细信息页面,以确认安装的版本.
问:是否安装了cuDNN是的.
问:如何查看检测到的GPU及其当前状态运行nvidia-smi.
根据实例类型,将会显示一个或多个GPU,及其当前的内存消耗.
问:是否为我设置了虚拟环境是的,但只在采用Conda的DeepLearningAMI(p.
3)上.
121深度学习AMI开发人员指南常见问题问:安装了Python的哪个版本每个DLAMI都具有Python2和3.
采用Conda的DeepLearningAMI(p.
3)具有适用于每个框架的两个版本的环境.
问:是否安装了Keras视AMI而定.
采用Conda的DeepLearningAMI(p.
3)在每个框架的前端提供Keras.
Keras的版本取决于框架的支持.
问:是否免费所有DLAMI都是免费的.
但是,具体取决于您所选择的实例类型,实例可能不免费.
有关更多信息,请参阅的定价DLAMI(p.
14).
问:我收到了关于我的框架的CUDA错误或GPU相关消息.
这是怎么回事检查您使用的实例类型.
很多示例和教程需要有GPU才能正常运行.
如果运行nvidia-smi后没有显示任何GPU,则您需要使用带有一个或多个GPU的实例加速另一个DLAMI.
有关更多信息,请参阅选择的实例类型DLAMI(p.
14).
问:是否可以使用Docker从采用Conda的DeepLearningAMI版本14开始,Docker已预先安装.
请注意,您需要在GPU实例上使用nvidia-docker才能使用GPU.
问:哪些区域提供LinuxDLAMI区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1宁夏(中国)cn-northwest-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1问:哪些区域提供WindowsDLAMI122深度学习AMI开发人员指南常见问题区域代码美国东部(俄亥俄)us-east-2美国东部(弗吉尼亚北部)us-east-1美国西部(加利福尼亚北部)us-west-1美国西部(俄勒冈)us-west-2北京(中国)cn-north-1亚太地区(孟买)ap-south-1亚太地区(首尔)ap-northeast-2亚太地区(新加坡)ap-southeast-1亚太地区(悉尼)ap-southeast-2亚太地区(东京)ap-northeast-1加拿大(中部)ca-central-1欧洲(法兰克福)eu-central-1欧洲(爱尔兰)eu-west-1欧洲(伦敦)eu-west-2欧洲(巴黎)eu-west-3SA(圣保罗)sa-east-1123深度学习AMI开发人员指南的发行说明DLAMI有关当前和历史DLAMI发布说明,请参阅:AWS深度学习AMI(AmazonLinux2)AWS深度学习AMI(AmazonLinux)AWS深度学习AMI(Ubuntu18.
04)AWS深度学习AMI(Ubuntu16.
04)AWS深度学习基础AMI(AmazonLinux2)AWS深度学习基础AMI(AmazonLinux)AWS深度学习基础AMI(Ubuntu18.
04)AWS深度学习基础AMI(Ubuntu16.
04)124深度学习AMI开发人员指南DLAMI的弃用功能下表列出了AWSDeepLearningAMI中的已弃用功能的相关信息.
已弃用的功能弃用日期弃用通知Python22020年1月1日Python开源社区已正式结束对Python2的支持.
TensorFlow、PyTorch和MXNet社区还宣布TensorFlow1.
15、TensorFlow2.
1、PyTorch1.
4和MXNet1.
6.
0版本将是最后支持Python2的版本.
AmazonLinux2020年12月31日自2020年12月起,AmazonLinux将停用.
从2021年1月起,新版本不再对DeepLearningAMI(AmazonLinux)进行更新,但在AmazonLinux存储库中发布安全修补程序时对DeepLearningAMI(AmazonLinux)进行的修补除外.
先前的DeepLearningAMI(AmazonLinux)版本将继续可用.
Chainer2020年7月1日Chainer宣布自2019年12月起停用主要版本.
因此,从2020年7月起,我们将不再在DLAMI中包含ChainerConda环境.
包含这些环境的先前版本的DLAMI将继续可用.
仅在开源社区针对这些框架发布安全修补程序时,我们才会为这些环境提供更新.
Python3.
62020年6月15日根据客户的要求,我们将为新版本的TF/MX/PT迁移到Python3.
7.
125深度学习AMI开发人员指南AWSDeepLearningAMI开发人员指南文档历史记录update-history-changeupdate-history-descriptionupdate-history-date删除了对CUDA8和9的支持(p.
5)的DeepLearningBaseAMI和采用Conda的DeepLearningAMI不再支持CUDA8或9.
August19,2020TensorFlow2(p.
39)在带有Conda的深度学习AMI中,现在提供了附带CUDA10的TensorFlow2.
December3,2019AWSInferentia(p.
79)深度学习AMI现在支持AWSInferentia硬件以及AWSNeuron开发工具包.
December3,2019具有CUDA10的PyTorch1.
0(p.
4)的采用Conda的DeepLearningAMI现在PyTorch1.
0和CUDA10.
December13,2018CUDA10在DeepLearningBaseAMI上可用(p.
5)CUDA10已作为DeepLearningBaseAMI的选项添加.
有关如何更改和测试CUDA版本的说明.
December11,2018将TensorFlowServing与Inception模型一起使用(p.
110)为TensorFlowServing添加了使用Inception模型进行推理的示例(对于有和没有ElasticInference的情况).
November28,2018使用256进行GPUs和Horovod训练TensorFlow(p.
56)更新了TensorFlowwithHorovod教程以添加多节点训练的示例.
November28,2018ElasticInference(p.
16)弹性推理先决条件和相关信息已添加到设置指南中.
November28,2018在DLAMI上发布的MMSv1.
0.
(p.
108)此MMS教程已更新为使用新的模型存档格式(.
mar)并演示新的启动和停止功能.
November15,2018正在安装ApacheMXNet(孵育)从夜间构建(p.
31)已添加教程,介绍如何卸载MXNet,然后安装每晚的MXNet您的采用Conda的DeepLearningAMI.
October16,2018从每日构建版本安装TensorFlow(p.
38)增加了一个教程,其中讲述如何在您的采用Conda的DeepLearningAMI上卸载TensorFlow,然后安装TensorFlow的每日构建版本.
October16,2018从每日构建安装CNTK(p.
33)增加了一个教程,其中讲述如何在您的采用Conda的DeepLearningAMI上卸载CNTK,然后安装CNTK的每日构建版本.
October16,2018126深度学习AMI开发人员指南现在,Docker预先安装在您的DLAMI上(p.
121)从采用Conda的DeepLearningAMI版本14开始,Docker和DockerforGPU的NVIDIA版本已预先安装.
September25,2018从每日构建安装PyTorch(p.
36)增加了一个教程,其中讲述如何在您的采用Conda的DeepLearningAMI上卸载PyTorch,然后安装PyTorch的每日构建版本.
September25,2018分布式训练教程(p.
46)增加了有关如何将Keras-MXNet用于多GPU训练的教程.
针对v4.
2.
0更新了Chainer的教程.
July23,2018TensorBoard教程(p.
45)示例已移至~/examples/tensorboard.
更新了教程路径.
July23,2018MXBoard教程(p.
43)增加了有关如何使用MXBoard可视化MXNet模型的教程.
July23,2018Conda教程(p.
24)已更新示例MOTD以反映更新的版本.
July23,2018Chainer教程(p.
47)此教程已更新为使用来自Chainer源的最新示例.
July23,2018早期更新:下表描述了2018年7月之前每个AWSDeepLearningAMI发行版中的重要更改.
变更描述日期TensorFlowwithHorovod增加了有关利用TensorFlow和Horovod训练ImageNet的教程.
2018年6月6日升级指南添加了升级指南.
2018年5月15日新区域和新的10分钟教程添加的新区域:美国西部(加利福利亚北部)、南美洲、加拿大(中部)、欧洲(伦敦)和欧洲(巴黎).
此外,第一版10分钟教程名为:"AWSDeepLearningAMI入门".
2018年4月26日Chainer教程添加了有关在多GPU、单个GPU和CPU中使用Chainer的教程.
CUDA集成已针对多个框架从CUDA8升级到CUDA9.
2018年2月28日LinuxAMIsv3.
0,以及MXNetModelServer、TensorFlowServing和TensorBoard的引入添加了适用于CondaAMI的教程(使用新模型)以及可视化服务功能(使用MXNetModelServerv0.
1.
5、TensorFlowServingv1.
4.
0和TensorBoardv0.
4.
0.
AMI)和框架CUDA功能(在Conda和CUDA概述中描述).
最新发行说明迁移2018年1月25日127深度学习AMI开发人员指南变更描述日期到https://aws.
amazon.
com/releasenotes/LinuxAMIv2.
0基础、源和CondaAMI均已更新,涵盖了NCCL2.
1.
源和CondaAMI的更新还涵盖了MXNetv1.
0、PyTorch0.
3.
0和Keras2.
0.
9.
2017年12月11日添加了两个WindowsAMI选项发布了Windows2012R2和2016AMI:添加到AMI选择指南中并添加到发行说明中.
2017年11月30日初始文档版本更改的详细说明,带有指向所更改主题/章节的链接.
2017年11月15日128深度学习AMI开发人员指南AWS词汇表有关最新AWS术语,请参阅AWSGeneralReference中的AWS词汇表.
129深度学习AMI开发人员指南本文属于机器翻译版本.
若本译文内容与英语原文存在差异,则一律以英文原文为准.
cxxx
DiyVM是一家比较低调的国人主机商,成立于2009年,提供VPS主机和独立服务器租用等产品,其中VPS基于XEN(HVM)架构,数据中心包括香港沙田、美国洛杉矶和日本大阪等,CN2或者直连线路,支持异地备份与自定义镜像,可提供内网IP。本月商家最高提供5折优惠码,优惠后香港沙田CN2线路VPS最低2GB内存套餐每月仅50元起。香港(CN2)VPSCPU:2cores内存:2GB硬盘:50GB/R...
我们很多老用户对于BuyVM商家还是相当熟悉的,也有翻看BuyVM相关的文章可以追溯到2014年的时候有介绍过,不过那时候介绍这个商家并不是很多,主要是因为这个商家很是刁钻。比如我们注册账户的信息是否完整,以及我们使用是否规范,甚至有其他各种问题导致我们是不能购买他们家机器的。以前你嚣张是很多人没有办法购买到其他商家的机器,那时候其他商家的机器不多。而如今,我们可选的商家比较多,你再也嚣张不起来。...
CloudCone在月初发了个邮件,表示上新了一个系列VPS主机,采用SSD缓存磁盘,支持下单购买额外的CPU、内存和硬盘资源,最低年付17.99美元起。CloudCone成立于2017年,提供VPS和独立服务器租用,深耕洛杉矶MC机房,最初提供按小时计费随时退回,给自己弄回一大堆中国不能访问的IP,现在已经取消了随时删除了,不过他的VPS主机价格不贵,支持购买额外IP,还支持购买高防IP。下面列...
xiaav.info为你推荐
渣渣辉商标渣渣辉传奇哪个职业好Baby被问婚变绯闻小s在黄晓明婚礼上问了什么问题中老铁路中长铁路的铁路的新中国历史关键字编程中,什么是关键字xyq.163.cbg.com『梦幻西游』那藏宝阁怎么登录?百度关键词工具如何利用百度关键词推荐工具选取关键词www.yahoo.com.hk香港的常用网站www.gegeshe.com《我的电台fm》 she网址是多少?javmoo.comjavbus上不去.怎么办www.sesehu.comwww.121gao.com 是谁的网站啊
我的世界服务器租用 提供香港vps 域名服务器的作用 com域名抢注 hostmaster 美国主机评测 cve-2014-6271 腾讯云数据库 lamp配置 商务主机 有益网络 lol台服官网 中国电信宽带测速器 华为云服务登录 starry 德讯 杭州电信 免费主页空间 脚本大全 西部数码主机 更多