转型AI工程师:一起来听听AI 开发者的一天

“这是一个典型 AI 星期天的叙述,我决定使用一些已经可用的示例代码和来自康奈尔电影数据库的数据基于聊天机器人建立一个序列(seq2seq)模型。”

From Titash Neogi, kontikilabs, 首席架构师和企业家


1 简介


作为Kontiki实验室的首席设计师,我有两个角色:第一个是作为关注人工智能的新发展的AI研究人员,并根据需要将其发展到公司的主要能力中;第二个角色是AI推销员/产品管理角色,通过与企业合作了解需求或问题,为他们提供正确的AI驱动解决方案。


无需多言,我经常在开发人员和业务角色之间切换,并寻找工作流来优化我可用的开发时间。在商务旅行期间,我倾向于利用我的周日来进行一些关于ML或AI的锁定研究和开发。


这是一个典型的AI星期天的叙述,我决定使用一些已经可用的示例代码和来自康奈尔电影数据库的数据基于聊天机器人建立一个序列(seq2seq)模型。Seq2seq模型是一种非常适合聊天机器人和机器翻译等问题的递归神经网络。


在这个特定的实例中,我的目标是通过启动RNN上的训练来使seq2seq模型正常工作。更大的目标是找出seq2seq模型的最佳工作流程(具有成本效益和时间训练)。当我开始的时候,我有三个选择:使用我们自己的GPU供电的桌面,使用谷歌云端平台GPU或亚马逊的EC2 GPU实例。


这是一个阴云密布的星期天,云层越积越厚,待在室内并且对你的RNN进行训练将会是完美的一天。


10:30 AM


数据集的下载,清理并转化为seq2seq模型训练时所需要的格式,所有这些操作在我的Anaconda开发环境中都执行的相当顺利,到目前为止没有出现小故障。时间花费了45分钟。


11:30 AM


接下来训练seq2seq模型。我们把所有的都运行起来。我从GCP获得了300美元的贷款,所以我想我会使用这些贷款并利用Google的GPU功能。我前往Google云端平台的仪表盘页面。我需要做的第一件事是将我的账户从试用版升级到付费并提交信用卡。Google不允许在试用帐户中使用GPU。


下一步是选择一个带有vCPU和GPU配额的GCP实例。在我启动GPU之前,我很好奇地想去知道该模型需要多少时间才能在具有多个vCPU和大容量内存的高端vCPU实例上进行训练。


我的模型建立在tensorflow1.0.0上,所以我转向tensorflow.org并在python 27上下载正确的版本。在下载完成后,我将代码上传到我的GCP实例上面并开始训练。虽然我有几个需要解决的venv问题,但过了10分钟后,模型就开始训练了。


12:00 PM


我已经创建了一个batchsize为4000的可以训练100个epoch的模型。从日志中的平均步骤时间注意到,这可能需要超过18天的时间才能去训练。这并不是一个好主意,而且很显然在大型多核CPU实例中没有好处。我杀死了这个进程,并决定将GPU加入混合模式中。


GCP关于GPU的过程有点迂回,你必须确保你在正确的区域创建实例(区域列表可以在这里的文档中找到),并且经过多次尝试在正确的区域选择正确的vCPU/GPU 组合后,我终于意识到,你不能马上启动一个支持GPU的实例。你必须从仪表盘页面向Google申请配额,并证明需要使用GPU的原因,然后等待它们启用配额。


此时,我已经花了一个小时的时间在GCP上,并且一共花费了这个昏昏欲睡的周末的2.5个小时,而在训练模型方面并没有取得很大进展。我决定前往AWS,看看亚马逊是如何做的——尽管我没有信用值,但我有一种预感,AWS可能会让我更快地设置GPU。


1:30 PM


Amazon确实让启动一个GPU支持的实例变得非常简单——他们称之为拥 有各种组合和预先安装了CUDA的深度学习实例,并且大量其他ML库预先插入到实例中。


亚马逊的定价也更简单,并且可以明确的做数学计算和预测成本。我非常兴奋,因为看起来我很快就能启动支持GPU的训练。


我推出了最便宜的GPU后端实例,我在这个阶段注意到的一件奇怪事情是,ML与下一层的Amazones基础实例之间存在巨大差距,差不多每小时7美元,这是很多差异。


随着我的实例启动,我通过ssh进入终端,上传我的数据和代码,并尝试从它的二进制URL中为我想要的版本安装tf。在这个阶段,我意识到在我的代码中存在一个冲突,这是由于默认安装在实例3.6上的python版本以及我想安装的python和tf版本引起的。我又花费了20分钟时间设置venv,然后找出在venv中导入模块的正确方法。


一旦排序完毕,我的tensorflow代码就开始执行了。我确实收到了关于不为GPU和CPU优化的tensorflow的警告,但我暂时忽略了这一点。我的目标是让事情以一种相当快的方式进行。关于机器学习,我学到的一件事是(事实上这对所有编程都有好处),在早期阶段,不要试图同时解决或实现太多的事情,而是专注于让一件事在一段时间内顺利完成,


并且知道完成它的最好的方法。在这种情况下,我关注的是最佳云GPU选择去运行基于RNN的tensorflow,所以我忽略了优化的小方面。


2:30 PM


在这个阶段,我的tensorflow星期天已经花费了将近4小时,我意识到我对tensorflow的工作做了很少的工作,而在数据预处理、云GPU选择和环境故障排除方面做了很多工作。我在这个过程中发现了大量有趣的信息,包括讨论如何使 用 Radeon GPU在Mac上运行RNN模型,并且发现了这样一个事实:就 Mac系统而言,从正确的指令开始建立tensorflow是一个糟糕的主意。


好吧,最后在星期天结束时,我的模型正在以快速的速度进行训练,这要归功于AWS GPU支持的实例——每个步骤时间都在1分钟以内,训练的总时间看起来似乎是在一天之内,这对于一百万行内容基础来说不错。


当傍晚的灯光亮起来,今天到此为止,这一天最终留给我的是很快看到seq2seq模型运行的兴奋,同时我也认识到一个事实:当涉及到简化基础设施和直接工作的时候,亚马逊AWS仍然击败谷歌。


简介:Titash Neogi是一位经验丰富的技术专家,在技术产品管理、消费者互联网用户行为、工程和研究技能以及用户体验设计和创业团队建设方面拥有10的经验。他是居住在kontikilabs的首席建筑师和企业家。


如果对本文有自己的见解,欢迎在评论区留言,   或者扫码关注公众号交流。



此为贪心科技编译,转载请联系本公众号获得授权。



加入贪心科技、广告&商务合作:[email protected]


猜你喜欢

转载自blog.csdn.net/mlooker/article/details/80360482