更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front) 那么,这个工具可以对新入门 AI 的小伙伴有什么帮助呢?此开源工具的贡献者在 Reddit 留言中对这一问题做了详尽的回答: 长话短说,这个工具可以让您利用云资源(目前的版本只使用 AWS,但是未来的版本中将加入 GCP 、Azure 等),并且减少时间成本。考虑到我们在机器学习相关的工作上把太多的时间浪费在与算法无关的事情上,比如架构分配和设置、数据收集、数据清理和标记,日志记录等,我们创建了这个工具,只需点击按钮即可以开始训练算法的全过程。 详细来说,当您入门机器学习算法时,第一件引起您注意的事,将是您究竟花费了多长时间来完成算法的运行。在运行监督式学习算法时,我们至少需要一个经过整理的标签数据集、训练数据集的算法、运行训练的架构(可能需要数小时、数天,甚至数周,取决于具体工作),以及包括安装操作系统、GPU 驱动程序,和项目相关基础框架的设置。Parris 工具使用的是在 AWS 账户中的 CloudFormation 模板,因此我们仅需按下按钮,或运行一个 CLI 命令即可启动训练,包括所有服务器设置和相关项安装,并在完成训练之后自动终止。此外,还可以设置服务器自动停止的时间,无论训练是否完成。 另外,实际运行训练(工作中计算量最大的部分)花费的时间很大程度上取决于硬件设备(假设您的代码已经做过优化并可高效运行)。使用 GPU 时,许多实践者(无论是学生、业余爱好者还是专业人员)要么必须购买 NVIDIA Titan V 用来存储数据,要么只在 CPU 上进行训练。当然,这不是个二选一的问题,因为云就是为了这个目的而存在的。这种情况下,云服务提供商的计算能力可以很好地解决这个问题,只需要花钱买下服务时间,就可以获得满足需求的虚拟化服务器配置。当然,这并不是完美的解决方案,例如,GPU 支持的 AWS 云服务价格相当昂贵,p3.2xlarge 的服务每月的价格就在 2000 美元以上。当然,市面上也有一些较便宜的服务器(例如,不需要 GPU 时,我有时会使用 c5.4xlarge,这样成本会控制在每月 497 美元)。但这仅是云提供商的问题,在项目启动之前,您还需要未雨绸缪,了解所有需要的东西。 尽管使用云资源意味着您不需要为您的项目架设一个服务器,但设置仍然是一件让人头疼的事。这就是这个工具发挥作用的地方:它可以自动启动服务器,安装需要的相关项,加载算法和训练集,运行训练,并在完成时自动终止。由于训练脚本本身和训练配置文件取决于个人的工作需求,所以还需要做大量的工作才能启动训练。但是,如果您已经有了训练算法的脚本,那恭喜您,使用这个工具之前所需要做的大部分工作已经完成了,而您只需要将它输入,作为 trainer-script.sh 文件的一部分。 如果您是刚入门的新手,只有在完成第一个项目之后,此工具才会对您有所帮助,因为您无法在没有进行过任何训练的情况下使用这个工具。算法和数据集准备就绪后,入门指南会告诉您下一步怎么做。 请注意,我在示例中引用了一些昂贵的云服务费用数据,但实际上我并没有经常使用这些服务,这些成本意在于建立大家“在最坏的情况下”服务成本的意识,以提醒大家忘记关闭服务会导致什么样的后果。 Parris 是一个机器学习算法训练工具,具有以下功能:
此工具的主要目的是减少训练机器学习算法时重复设置的次数,可以更有效地利用服务器的计算时间,以节省成本(服务器一旦启动即开始训练,完成时自动停止)。 您需要一个准备好,带有数据集的机器学习算法,和一个启动训练所需的 Bash 脚本。 在设置完成之后,您主要要做的事是编辑 traing-config.json 配置文件,以及实际运行训练的 trainer-script.sh 脚本。由于是第一次设置,您需要设置 Lambda-config.json 配置文件。(这应该不难,因为只有两行,其中一行是可选的。) 我在示例中使用的是我在 Github 上的一个存储库来进行基本训练,可以让您对其有一个简单的了解。除了像 IAM role ARN 值和 S3 存储名称这样的具体事项之外,其他的无需更改。
在设置 IAM role 时,您需要将一个 policy(或多个 policy)添加到 role,以定义 Lambda 函数可以访问的所有内容。我使用以下示例,让 Lambda 函数可以启动新的 CloudFormation 堆栈,从 S3 存储中获取对象: { 'Version': '2012-10-17', 'Statement': [ { 'Sid': 'VisualEditor0', 'Effect': 'Allow', 'Action': [ 'cloudformation:CreateStack', 'cloudformation:UpdateStack', 'cloudformation:ValidateTemplate', 'ec2:DetachVolume', 'ec2:AttachVolume', 'ec2:ModifyVolume', 'ec2:ModifyVolumeAttribute', 'ec2:DescribeInstances', 'ec2:TerminateInstances', 'ec2:DescribeTags', 'ec2:CreateTags', 'ec2:DescribeVolumesModifications', 'ec2:RunInstances', 'ec2:StopInstances', 'ec2:DescribeVolumeAttribute', 'ec2:CreateVolume', 'ec2:DeleteVolume', 'ec2:DescribeVolumeStatus', 'ec2:StartInstances', 'ec2:DescribeVolumes', 'ec2:ModifyInstanceAttribute', 'ec2:DescribeInstanceStatus', 's3:GetObject' ], 'Resource': '*' } ]} 我强烈推荐(不是必须)制定一个允许 Lambda 写入 CloudWatch 日志的 policy,因为它可以让您在 Lambda 函数出现问题时读取日志,以了解发生的故障。以下是我在一个 policy 中的所有 CloudWatch 写入权限: { 'Version': '2012-10-17', 'Statement': [ { 'Sid': 'VisualEditor0', 'Effect': 'Allow', 'Action': [ 'logs:DeleteSubscriptionFilter', 'logs:DeleteLogStream', 'logs:CreateExportTask', 'logs:DeleteResourcePolicy', 'logs:CreateLogStream', 'logs:DeleteMetricFilter', 'logs:TagLogGroup', 'logs:CancelExportTask', 'logs:DeleteRetentionPolicy', 'logs:GetLogEvents', 'logs:AssociateKmsKey', 'logs:FilterLogEvents', 'logs:PutDestination', 'logs:DisassociateKmsKey', 'logs:UntagLogGroup', 'logs:DeleteLogGroup', 'logs:PutDestinationPolicy', 'logs:TestMetricFilter', 'logs:DeleteDestination', 'logs:PutLogEvents', 'logs:CreateLogGroup', 'logs:PutMetricFilter', 'logs:PutResourcePolicy', 'logs:PutSubscriptionFilter', 'logs:PutRetentionPolicy' ], 'Resource': '*' } ]} 最后,我们需要建立 trainer-script.sh,并开始运行训练。这部分最好全部由自己编写,因为各自算法的依赖性和推导出训练结果的方法总是不尽相同的。 滚动到编辑区,在该行下方添加完整的训练脚本。请记住,由于训练脚本是在新的服务器上启动,因此在启动训练工作之前,需要完成所有依赖关系、目录结构等设置。 这些完成之后,就差不多可以使用这个工具了!如果您在 lambda-config.json 中没有使用 s3-training-bucket 值,请继续下一步。如果您使用 S3 存储来加载您的配置,则需要将以下文件加载到您的 S3 存储中,结果如下(如无子目录或不同文件名): +---your-s3-bucket| \---trainer-script.sh| \---training-config.json| \---lambda-config.json 然后进入下一步。 在训练开始之前,需要 Lambda 配置来启动这个过程。在此步骤中,您需要创建一个 AWS Lambda 函数,用于同一算法的多次训练或多个不同算法的训练。
函数运行时,会得出“成功”的执行结果,并输出{}。 切换到 AWS 控制台的 CloudFormation 视图,观察新的 CloudFormation 堆栈启动。这个步骤应该只需要一两分钟,但取决于启动 instance 的类型。 切换到 AWS 控制台的 EC2 实例视图,查看最新结果。很快地,训练工作将开始启动。 得到训练结果 训练结果很大程度上取决于我们如何设置保存结果参数的算法。在大多数情况下,这些结果将被保存到本地目录(即服务器上的某个地方,可能与正在进行训练的位置相同)。但是,训练结束后,我们希望将这些内容导出到可以更长久保存的位置。 现在,您已经成功创建了 CloudFormation 堆栈,并确认其可以按预期运行。我们可以安全地终止这个过程以节省成本。
设置: 您需要一个 AWS 账户,一个 AWS 证书(通过 $ aws configure 进行设置),一个接受训练的机器学习算法,当然还要有一个可以训练的数据集。您可能还需要一个 S3 存储器或其他存储位置来存储算法的训练结果。 UNIX/ Linux: $ git clone https://github.com/jgreenemi/parris.git && cd parris$ virtualenv -p python3 env$ source env/bin/activate(env) $ pip --versionpip 9.0.1 from .../env/lib/python3.6/site-packages (python 3.6)(env) $ pip install -r requirements.txt Windows: $ git clone https://github.com/jgreenemi/parris.git && cd parris$ virtualenv -p python3.exe env$ env\Scripts\activate(env) $ pip --versionpip 9.0.1 from ...\python\python36\lib\site-packages (python 3.6)(env) $ pip install -r requirements.txt 如何使用? 按照“入门指南”中的说明进行设置,为进一步了解该工具,还可以查阅“配置指南”,配合“入门指南”使用。 常见问题 请参阅文档中的常见问题解答页面。 贡献者 此工具是在 Apache 2.0 许可下发布的开源项目。 联系方式 Joseph Greene, jgreenemi@gmail.com |
|