hfai python | 控制代码萤火运行

High-Flyer    July 19, 2022

最近,幻方 AI 发布了其沉淀多年的深度学习套件 hfai ,吸引了众多同行研究员和开发者们咨询试用。其中,不少用户朋友对 hfai 中一些功能不太熟悉,使用上存在疑惑,或者仅仅使用了其中非常少的一部分功能。如果说我们把 hfai 深度学习套件认为是一部武功秘籍,而您作为使用者若是习得了当中的心法要义,那么您将带着 hfai 这套“神功”游刃有余的应对深度学习作业的各项挑战,举重若轻、例不虚发。

为此,我们专门创建了 “hfai 使用心法” 系列专辑,从本期文章开始,我们会陆续为大家介绍 hfai 一些功能的设计思路和原理,帮助大家更好更快地习得心法。

前几次文章为大家介绍了 hfai workspacehfai venv,其可以帮助用户快速同步本地(个人电脑、个人集群等)工程目录(代码、数据),环境到远程萤火超算中。本次文章为大家介绍 hfai python,通过本地提交任务,让远程集群中的代码运行起来。

使用场景

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

就这些问题,hfai python 应运而生。

基本概念

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

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

01.png

一万张A100在时间维度上进行切分,将算力分配到不同的任务上。每个任务占据一段GPU时进行训练,不同任务之间彼此交替使用。这种方式既提升了集群整体的利用率,也方便了用户大规模使用算力的需求。

在萤火集群上,训练任务分优先级,高优先级的任务可以抢占低优先级的算力资源。同等优先级内的任务以“先到先服务”的原则提供算力资源。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,如果您的任务不需要这么多A100,可以在代码中进行设定。--name 表示当前任务的命名。

需要注意的是,外部免费用户不用设置优先级 --priority,集群会自动将闲置算力分配出来调度任务。

任务管理

任务提交成功之后,您可以在 https://studio.yinghuo.high-flyer.cn 中查看你任务的运行情况:

02.png

hfai studio 界面里展示了所提交的任务,任务的GPU、CPU使用率,还有集群整体的繁忙程度。

您也可以获取到任务每时的训练状态,如下所示:

03.png

该曲线展现了任务资源利用情况。您可以依据此更好地调优您地深度学习模型。

除了在studio页面上可以控制任务的启停、日志查看,您也可以在本地电脑中,通过 hfai 一系列套件工具进行操作。

此外,与 hfai python 类似,幻方AI提供了 hfai bash 套件,可以满足用户用bash脚本精细化管理训练任务的需求。有关更多内容可以查阅官方文档:https://doc.hfai.high-flyer.cn/cli/task.html


本文作者: High-Flyer


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