幻方 AI 发布了其沉淀多年的深度学习套件 hfai ,吸引了众多同行研究员和开发者们咨询试用。整个套件的功能较多,而熟悉掌握了这套规则,是能够轻松地调用起平台的算力资源,从而高效完成训练任务的。
为此,我们专门创建了 “hfai 使用心法” 系列专辑,分集陆续为大家介绍 hfai 一些功能的设计思路和原理,帮助大家更好更快地习得心法,带着 hfai 这套“神功”游刃有余的应对深度学习作业的各项挑战,举重若轻、例不虚发。
上两个招式为大家介绍了 hfai workspace 和 haienv,其可以帮助用户快速同步本地(个人电脑、个人集群等)工程目录(代码、数据),环境到远程集群中。而这套组合拳下来,其实我们可以认为是“蓄力”和“提气”的过程,接下来就是“神功”最核心的部分,本次文章将为大家介绍 hfai python
,其可以帮助大家方便快捷地发起、管理训练任务。
使用场景
如之前文章所介绍的,用户将本地的数据、代码、环境传到远程萤火集群之后,接下来就可以提交任务训练模型了。然而,如何将萤火集群的算力均匀合理的分配给不同任务,用户又如何查看管理自己的任务呢?
这些功能都可以通过 hfai python
来实现。
基本概念
在使用之前,一些基本概念先介绍一下。
幻方AI提出了任务级分时调度的概念来管理萤火集群,算力的分配以任务为单位而不是用户。用户可以自由地提交任务,自由地申请算力规模,由集群调度系统统一分配资源。如下图所示:
计算资源在时间维度上进行切分,将算力分配到不同的任务上。这种方式既提升了集群整体的利用率,也方便了用户对于不同任务弹性伸缩用卡规模,人人都有机会调用大规模的算力进行 AI 科研。
在萤火集群上,训练任务分优先级,高优先级的任务可以抢占低优先级的算力资源。同等优先级内的任务以“先到先服务”的原则提供算力资源。hfai 提供了很多便利的工具(如:hfai.client,hfai.checkpoint),方便您的代码在训练过程中接收集群调度信息,设置断点保存。
本地代码调试
一般的,我们平常执行深度学习训练,例如训练 Bert:
python bert.py -c large.yml
当您需要使用幻方萤火训练模型时,您可以在本地调试修复问题,再提交集群运行。hfai 提供了模拟打断的信号帮助您测试集群运行方式的适配性,如下面例子:
hfai python bert.py -c large.yml ++ --suspend_seconds 100 --life_state 1
这里
++
标志了当前任务是在本地进行模拟调试--suspend_seconds
表示每隔多少秒发送一个模拟打断信号--life_state
表示任务记录的训练位置,这个数值用户可以自己在代码里设置,详情参考这里。
通过如上方式,您可以测试您的训练代码是否可以准确接收集群的打断信号,做好模型的断点保存,同时在下一次任务拉起时,是否可以就当前断点继续往下执行。
提交任务
完成了本地调试之后,您就可以向萤火提交任务了,命令如下:
hfai python bert.py -c large.yml -- --nodes 1 --name train_bert
这里
--
标志了当前是要提交任务--nodes
表示使用多少个节点进行训练,这里任务最少分配一个节点8张A100,如果您的任务不需要这么多显卡,可以在代码中进行设定--name
表示当前任务的命名。
需要注意的是,外部免费用户不用设置优先级 --priority
,集群会自动将闲置算力分配出来调度任务。当然,如果您需要不被打断的高优先级训练任务,可以联系幻方洽谈商用。
任务管理
任务提交成功之后,您可以在 studio 页面中查看你任务的运行情况。如下图所示,界面里展示了所提交的任务,任务的 GPU、CPU 使用率,还有集群整体的繁忙程度等。
您也可以获取到任务每时的训练状态,如下所示,方便您更好的管理,调优深度学习模型。
除了在studio页面上可以控制任务的启停、日志查看,您也可以在本地电脑 terminal 当中,通过 hfai 一系列套件工具进行操作。此外,与 hfai python
类似,幻方AI提供了 hfai bash
套件,可以满足用户用bash脚本精细化管理训练任务的需求。有关更多内容可以查阅官方文档。