hfai python | 任务提交任意所至,萤火训练行云流水

High-Flyer    August 19, 2022

幻方 AI 发布了其沉淀多年的深度学习套件 hfai ,吸引了众多同行研究员和开发者们咨询试用。整个套件的功能较多,而熟悉掌握了这套规则,是能够轻松地调用起平台的算力资源,从而高效完成训练任务的。

为此,我们专门创建了 “hfai 使用心法” 系列专辑,分集陆续为大家介绍 hfai 一些功能的设计思路和原理,帮助大家更好更快地习得心法,带着 hfai 这套“神功”游刃有余的应对深度学习作业的各项挑战,举重若轻、例不虚发。

上两个招式为大家介绍了 hfai workspacehaienv,其可以帮助用户快速同步本地(个人电脑、个人集群等)工程目录(代码、数据),环境到远程集群中。而这套组合拳下来,其实我们可以认为是“蓄力”和“提气”的过程,接下来就是“神功”最核心的部分,本次文章将为大家介绍 hfai python,其可以帮助大家方便快捷地发起、管理训练任务

使用场景

之前文章所介绍的,用户将本地的数据、代码、环境传到远程萤火集群之后,接下来就可以提交任务训练模型了。然而,如何将萤火集群的算力均匀合理的分配给不同任务,用户又如何查看管理自己的任务呢?

这些功能都可以通过 hfai python 来实现。

基本概念

在使用之前,一些基本概念先介绍一下。

幻方AI提出了任务级分时调度的概念来管理萤火集群,算力的分配以任务为单位而不是用户。用户可以自由地提交任务,自由地申请算力规模,由集群调度系统统一分配资源。如下图所示:

01.png

计算资源在时间维度上进行切分,将算力分配到不同的任务上。这种方式既提升了集群整体的利用率,也方便了用户对于不同任务弹性伸缩用卡规模,人人都有机会调用大规模的算力进行 AI 科研。

04.png

在萤火集群上,训练任务分优先级,高优先级的任务可以抢占低优先级的算力资源。同等优先级内的任务以“先到先服务”的原则提供算力资源。hfai 提供了很多便利的工具(如:hfai.clienthfai.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 使用率,还有集群整体的繁忙程度等。

02.png

您也可以获取到任务每时的训练状态,如下所示,方便您更好的管理,调优深度学习模型。

03.png

除了在studio页面上可以控制任务的启停、日志查看,您也可以在本地电脑 terminal 当中,通过 hfai 一系列套件工具进行操作。此外,与 hfai python 类似,幻方AI提供了 hfai bash 套件,可以满足用户用bash脚本精细化管理训练任务的需求。有关更多内容可以查阅官方文档


本文作者: High-Flyer


您可以转载、不违背作品原意地摘录及引用本技术博客的内容,但必须遵守以下条款: 署名 — 您应当署名原作者,但不得以任何方式暗示幻方为您背书,亦不会对幻方的权利造成任何负面影响。 非商业性使用 — 您不得将本技术博客内容用于商业目的。 禁止演绎 — 如果基于该内容改编、转换、或者再创作,您不得公开或分发被修改内容,该内容仅可供个人使用。