Press "Enter" to skip to content

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

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

 

导语

 

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

 

workspace简介

 

使用场景

 

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

 

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

 

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

 

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

 

整体架构

 

 

上图展示了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功能的若干基本命令,通过这些命令的使用,用户可以打通本地端和远程端的数据同步,可以方便的上传代码,下载模型等。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注