幻方萤火AI算力平台使用笔记(4):hfai workspace命令详解

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

导语

在上一篇博客中,我们使用hfai workspace来进行了代码的上传同步和结果查询,本篇博客将更加深入的了解一下hfai workspace的功能函数。

workspace简介

使用场景

我们先来看看官方的博客所描述的使用场景:

萤火超算是一个远程的服务集群。对于 hfai 的用户,他们需要将本地的数据、代码传到这个远程集群中,才可以训练其模型。之前,幻方 AI 提供了 Jupyter 控制台,让用户通过网页手动上传下载,这种方式有诸多不便。

为了解决这个问题,hfai workspace 应运而生,其可以让用户摆脱 Jupyter 操作的不方便,直接连通本地工程目录和远程萤火集群。您可以在您自己环境,如个人电脑、个人集群等,编写代码,调试模型,然后通过一行命令直接将调试好的代码上传远程萤火集群,利用超算算力来训练您的模型。实现这个过程,只需要您在自己环境里安装 hfai 深度学习套件,通过 VPN 连通集群,即可开始使用。

可以看到,workspace主要用于本地工作目录和远程算力平台端的项目目录之间的同步。

整体架构

image.png

上图展示了hfai workspace命令的整体结构。其主要的核心功能还是通过同步服务(Sync)进行本地文件和远程文件的同步控制。

项目推送和拉取

可以使用hfai workspace push 命令,推送本地目录代码到远程端,在上一篇博客中,我们就是使用这个命令将Resnet-50的训练代码文件train.py和Readme.md文件所在的目录作为工作目录推送到了远程端。

hfai workspace diff

在继续修改之前,我们先讲解一下hfai workspace diff这个命令。该命令用于比较本地工作目录和远程工作目录之间的差异。

(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace diff                          
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+------+
| 本地未上传文件       | None |
+----------------------+------+
| 集群未下载文件       | None |
+----------------------+------+
| 本地与集群有差异文件 | None |
+----------------------+------+

可以看到,在没有修改时,远程端和本地保持一致。接下来,我们对train.py进行修改。

hfai workspace push

假设,我们修改了代码,我将原train.py的第64行由

epochs = 2

修改为

epochs = 3

我们看一下hfai workspace diff

(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace diff                          
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+---------------+
| 本地未上传文件       | None          |
+----------------------+---------------+
| 集群未下载文件       | None          |
+----------------------+---------------+
| 本地与集群有差异文件 | train.py(5KB) |
+----------------------+---------------+

可以看到,diff工具显示本地端文件发生了修改,与远程不一致。我们使用push命令将这个修改推送到远程端。

(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace push
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+---------------+
| 本地未上传文件       | None          |
+----------------------+---------------+
| 本地与集群有差异文件 | train.py(5KB) |
+----------------------+---------------+
集群中存在差异文件,请确认,可增加 --force 参数强制覆盖!
推送失败,请稍后重试,或者联系管理员...
(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace push --force
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+---------------+
| 本地未上传文件       | None          |
+----------------------+---------------+
| 本地与集群有差异文件 | train.py(5KB) |
+----------------------+---------------+
集群中存在差异文件,将被本次操作覆盖!
开始打包本地工作区目录...
(1/2) 开始同步本地目录 /Users/jiexing/Nextcloud/project/hfai/workspace_example_for_resnet 到远端,共2.07KB...
pushing ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
(2/2) 上传成功,开始同步到集群,请等待...
syncing ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
推送成功
(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace diff        
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+------+
| 本地未上传文件       | None |
+----------------------+------+
| 集群未下载文件       | None |
+----------------------+------+
| 本地与集群有差异文件 | None |
+----------------------+------+

可以看到,这次的修改需要使用--force参数来强制推送。 推送完成后,本地端和远程端已经继续保持一致。

我们再次进行运行

(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai python train.py -- -n 1                 
检测到是 [/Users/jiexing/Nextcloud/project/hfai/workspace_example_for_resnet] -> [group_linzhh/linzhh/workspaces/workspace_example_for_resnet] 中的代码,先推送到远端...
开始遍历本地工作区目录...
开始遍历集群工作区目录...
……
====================  fetching  log on rank 0... ====================
[2022-08-01 15:19:42.750823] [start training train.py on jd-j1506-dl for linzhh]
[2022-08-01 15:19:43.007820] [训练前检查] 检查[jd-j1506-dl] cpu memory 22.0 < 150G and total gpu memory 0 < 100M 通过
[2022-08-01 15:20:08.058469] Epoch: 0, Step: 0, Loss: 7.139220714569092
[2022-08-01 15:20:09.852673] Epoch: 0, Step: 20, Loss: 7.758307456970215
……

hfai workspace download

训练完成后,train.py的逻辑是将最好的模型checkpoint保存在workspace目录下的output/resnet/best.pt。我们可以通过hfai workspace download [filename]命令来进行下载。

(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace diff         
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+---------------------------------+
| 本地未上传文件       | None                            |
+----------------------+---------------------------------+
| 集群未下载文件       | output/resnet/best.pt(100141KB) |
+----------------------+---------------------------------+
| 本地与集群有差异文件 | None                            |
+----------------------+---------------------------------+
(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace download output/resnet/best.pt
开始遍历本地工作区目录...
开始遍历集群工作区目录...
(1/2) 开始同步集群数据,目录['output/resnet/best.pt']
共97.79MB, 请等待...
syncing ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
(2/2) 集群同步成功,开始下载远端目录到本地...
pulling ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
下载成功
(hfai) jiexing@jiexingdeMacBook-Pro workspace_example_for_resnet % hfai workspace diff                          
开始遍历本地工作区目录...
开始遍历集群工作区目录...
+----------------------+------+
| 本地未上传文件       | None |
+----------------------+------+
| 集群未下载文件       | None |
+----------------------+------+
| 本地与集群有差异文件 | None |
+----------------------+------+

hfai workspace pull

hfai workspace pull命令与download类似,只不过其是将工作目录下的所有文件一次性全部下载,这里也不在进行演示。

hfai workspace remove

hfai workspace remove用于工作空间的删除,其使用格式为:hfai workspace remove <workspace_name> [OPTIONS]。同样,这里也不进行演示。

总结

本篇博客讲述了hfai workspace功能的若干基本命令,通过这些命令的使用,用户可以打通本地端和远程端的数据同步,可以方便的上传代码,下载模型等。

猜你喜欢

转载自juejin.im/post/7127264810105831432