深度学习却越来越受欢迎对于许多AI用例,如计算机视觉、语音识别、自然语言处理、推荐引擎等等。
不足为奇的是,云计算是一个深度学习模型的主要推动者。云提供商如AWS,提供一个广泛的EC2实例类型不同GPU和CPU的规格,你可以管理自己的一切。他们还提供全面管理Sagemaker等人工智能平台,您可以在部署您的机器学习模型没有处理底层基础设施。
然而在我们的文章中,我们将关注的diy方法部署深度学习模型在EC2实例,所以你可以控制底层基础设施与戏剧性的成本优化。
EC2这一切。但代价是什么呢?
一般来说,发展和培训深度学习神经网络模型不需要太多努力AWS。只需选择您的首选和最佳的GPU实例或者为你的工作负载,CPU相关平台,AWS定制毫升AMI,克隆代码实例并开始运行。
然而,训练神经网络可能需要数小时甚至数天根据复杂性和数据集的大小。如果你检查EC2定价,你会发现支持GPU实例可能会非常昂贵。这个小财务细节,如果处理不当,可以把你的机器学习项目变成一个巨大的行项目在你的下一个AWS法案。
解决这个问题可以通过使用实例。点是一个AWS实例定价模型,提供高达90%的折扣按需定价相比,相同的实例。
唯一的警告是,AWS可以拔掉插头现货实例只有2分钟的警告。这显然不是理想的深度学习的模型,但我们会看到,有现货,你可以有你的蛋糕和吃它。
开始使用训练神经网络现场实例
正如我们前面所提到的,现货实例提供价格折扣90%相同的实例类型。然而,也有一些非常重要的挑战,现货处理:
- 现货实例并不像AWS持久随时可以打断他们。因此,他们不建议对时间敏感的工作负载。
- 计划外实例终止可能会导致数据丢失,如果训练进步是不能正常保存。
解决这些问题点管理实例,解决现场实例的工作负载运行状态。这可以训练你的深度学习模型完整持久化根和现场实例数据量以及私人和公共ip和自动实例恢复。
原则:训练神经网络在现货实例
现在我们已经介绍了基本的实例,让我们专注于一些特定的原则要牢记为机器学习项目在现场实例。
- 解耦计算、存储和代码。通过分离不同的组件,我们可以控制训练过程的每个部分。计算实例将是无状态的,而数据将被持续的培训过程。
- 为数据集,使用专用卷检查点,保存模型和日志。这确保数据将是持久的,中断不会影响训练过程。
让我们这个机器学习项目开始的地方
这是我们需要做的要现货。
先决条件:
- 活跃的现货账户连接到AWS。(https://help.www.drvrless.com/managed-instances/)
- Github库代码与你的培训。
从基础设施:
- 去你的现货账户并开始新的管理实例。在我们的例子中,我们将只保存数据量,因为我们不会做任何特殊的改变对我们的操作系统。
- 启动配置管理的实例
配置管理实例时你应该注意以下字段:
- 地区:如果您想使用gpu你应该注意,并非所有AWS地区支持gpu。https://docs.aws.amazon.com/dlami/latest/devguide/gpu.html
- 图像:深度学习AMI(ami - 0027 dfad6168539c7)是一个Amazon machine image预装了深度学习框架。
- 密钥对:为了通过SSH连接到实例必须配置密钥对
- 选择你的市场:Recommended实例类型:g2.2xlarge(基本GPU实例类型)
- 作为讨论之前,我们应该维护数据持久性,以防止不必要的中断数据丢失。重新政策将保证同样的EBS卷将中断发生时重新连接到新的现货实例。
- 配置用户数据如下:data_persistency_userdata.sh
- 将创建新实例没有任何卷。为了保持持久性我们应该创建和附加新卷。这应该只发生在第一次。让现场自动化过程的其余部分。
aws ec2带来成交量\,大小20 \——地区<地区> \可用性区域< AZ > \——卷类型gp2 aws ec2 attach-volume \——卷id <卷id > \——实例id < instanceid > \ /dev/xvdb——设备
- 现在您应该看到您的实例与体积(SSH您的机器和验证实例已经正确安装体积)。
- 附加体积后,回收您的实例(用户和数据的ml-actions)。
深度学习的例子:
我们的示例代表mnist使用卷积神经网络数据集。MNIST数据集是手写数字的图像数据集。它有60000 10000训练图像和测试图像,每个灰度28 x 28大小的图像。
(99.17%的准确率)
(训练模型文件在/ dl /模型目录)
在这里,我们将主要关注代码的基础设施。正如我们之前看到的现场使用深度学习不能运行的实例。一些代码格式化代码运行之前应该做。
完整的培训脚本可以在这里找到:train_network.py
- 准备环境:当使用keras在AWS首先我们需要使用conda ENV。所以我们需要下面的脚本添加到我们的用户数据。
sudo bash - c - h - u ubuntu”源/home/ubuntu/anaconda3/bin/activate tensorflow_p27;python train_network.py
- 使用检查点和回调
当使用深度学习在现货情况下,为了保持持续的训练没有任何数据丢失,我们应保持连续检查站和回调。
检查点和回调是什么
回调函数:
一个回调函数是一组应用在特定阶段的训练过程。
的相关方法在每个阶段都会调用回调或时代的培训过程。
最重要的回调函数时,建议在现货实例训练神经网络,是检查点功能:
检查点:
检查点是训练的快照值在一个特定的时间点。
检查点被配置为回调函数的一部分,发生在每一个时代。
检查点文件中的参数将被保存的所有训练包括当前培训价值和重量。
检查点应该保存在主卷。在“音量再植模型”应该从最近的检查点,加载是在检查站文件夹中创建的。
创建检查点回调函数:
检查点目录中间的培训:
检查点期间帮助维持持久性如何中断:
正如上面提到的,现货实例的主要挑战在于AWS可以中断和终止他们只有很短的通知。为了克服这个问题,在每个时代检查点的回调函数将发生,节约网络具体数据和持久的体积重量检查点目录(在这个例子中/ dl /检查站文件夹)。
这样我们永远知道我们停了下来,我们就可以继续从这一点。
在下面的截图中你可以看到,当检查点存在体积,数量模型和时代将从那里。否则,模型将从零开始。
可以在这里找到完整的例子:
https://github.com/Spot/mnist-ec2-spot/blob/master/scripts/train_network.py
我希望你发现这篇文章可以帮助保持你的机器学习项目在预算之内。随时联系现场团队你可能有任何问题或反馈。
*Github是一个开源库和代码提供的这个博客的作者。代码是受变化和仅仅是一个例子为一个简单的用例作为基准深度学习项目。