数据管理平台 CLI 操作指南 | 大装置帮助中心
跳到主要内容

数据管理平台 CLI 操作指南

版本记录

版本名称功能描述发布时间
数据管理平台 GA 版 v1.1.0CLI 操作指南从原始长文档中拆分出来,使文档具备更好的可读性。2023-4-28
数据管理平台 GA 版 v1.2.0CLI 支持大规模数据集的导入,帮助企业更好地管理大模型相关的数据资源。2023-5-30
数据管理平台 GA 版 v1.3.0CLI 整体主要为 upload 和 download,其他命令为补充。2023-6-30
数据管理平台 GA 版 v1.6.0支持数据空间2023-9-30
数据管理平台 GA 版 v1.8.0CLI download 命令支持下载到大装置 AOSS;CLI upload 命令支持其他常用 OSS(amazon,阿里,百度,华为等)2023-11-30

CLI 安装 & 版本

CLI 下载安装

支持系统: Linux:ubuntu,centos

使用下述命令,可以进行数据版本管理的 CLI 工具 Graviton 的一键式下载安装

curl --proto '=https' --tlsv1.2 -sSf https://aids-download.aoss.cn-sh-01.sensecoreapi-oss.cn/aidmp/release/install.sh | sh && export PATH=~/.grav/bin:$PATH

安装成功后,会有如下类似的提示信息

The installation was successful !   
Graviton version: V1.2.1
Update time(UTC+8): 2023-06-02 15:50:25

CLI 版本信息

使用 grav version 命令,也可以查看当前使用 Graviton 命令行工具的当前版本号和当前版本更新时间

Graviton version:  V1.2.1  
Update time(UTC+8): 2023-06-02 15:50:25

CLI 配置 & 帮助

CLI 配置:grav config

设置和查看单 Repo 或者全局的配置项

设置 Repo 的 AccessKey ,以便于后续和远端进行正常的交互。

输入 AccessKeyID 后,会提示继续输入 AccessKey Secret

其中 AccessKey 可以从 https://console.sensecore.cn/iam/access-key 处获得

$ grav config AccessKeyID <AccessKeyID> 

设置 Repo 的用户名,以便于记录相应用户的操作。

如下,设置全局的 user.name

$ grav config user.name <user.name> --global

可以查看当前的配置内容,如下

$ grav config --list

CLI 帮助: grav help

展示 Graviton 命令行的帮助信息

展示 Graviton CLI 的主要命令用法表

$ grav help

展示指定 command 的具体用法

$ grav <command> (-h|--help)

示例如下:

$ grav upload -h

CLI 上传 & 下载

CLI 上传:grav upload

上传数据到远端 Repo

可以导入OSS 原始数据(包括大装置 AOSS、amazon,阿里,百度,华为等OSS)或者本地的文件目录到数据管理平台的指定数据集上。默认上传到 master 分支的根目录,可以通过参数指定分支、版本和路径。 下面的 <repo_url> 可以在指定数据集的文件页上,点击【复制URL】获取,或者在数据集列表页点击【复制URL】获取。

默认上传到 master 分支的根目录:

$ grav upload <oss_path/local_path> <repo_url> 

通过 branch 参数和 path 参数,上传到指定分支的指定目录:

$ grav upload <oss_path/local_path> <repo_url> (-B|--branch)<branch> (-P|--path)<path>

通过 commit 参数和 path 参数,上传到指定版本(必须是某分支的最新版本)的指定目录:

$ grav upload <oss_path/local_path> <repo_url> (-C|--commit)<commit> (-P|--path)<path>

示例如下: 将 AOSS 的 bucket1 桶的 data 文件夹原始数据,上传到 master 分支的根目录:

$ grav upload s3://bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/data https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset

将本地文件目录的 test 文件夹数据集,上传到指定分支 dev 的 data/test 目录:

$ grav upload ./test https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset -B dev -P data/test

另外,我们的 upload 的 CLI 命令也同步支持 repo_url_detail 的参数,可以直接复制文件页的 url 详细地址,上传到该详细地址上

$ grav upload <oss_path / local_path >  <repo_url_detail>

例如,将 AOSS 的 bucket1 桶的 data 文件夹原始数据,上传到 master 分支的 data 路径:

$ grav upload s3://bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/data https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset/branch/master/tree/data

CLI 下载:grav download

从远端 Repo 下载数据

将远端指定 Repo 下载数据到本地或者是大装置 AOSS 的目录 ,默认 master 分支最新版本,可以指定相应的 Repo 内详细文件目录路径 path ,此时,会在当前目录下新建一个同 Repo 名的文件夹,放置下载下来 Repo 数据。 下面的 <repo_url> 可以在指定数据集的文件页上,点击【复制URL】获取,或者在数据集列表页点击【复制URL】获取。
默认下载 master 分支的根目录:

$ grav download <repo_url> <oss_path/local_path> 

通过 branch 参数和 path 参数,下载指定分支的指定目录:

$ grav download <repo_url> <oss_path/local_path> (-B|--branch)<branch> (-P|--path)<path>

通过 commit 参数和 path 参数,下载指定版本的指定目录:

$ grav download <repo_url> <oss_path/local_path> (-C|--commit)<commit> (-P|--path)<path>

示例如下: 下载 master 分支的根目录:

$ grav download https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset

下载指定分支 dev 的 data/test 目录:

$ grav download https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset -B dev -P data/test

另外,我们的 download 的 CLI 命令,也同步支持 repo_url_detail 的参数,可以直接复制文件页的 url 详细地址,下载该详细地址上的数据

$ grav download <repo_url_detail>

例如,下载 master 分支的 data 路径:

$ grav download https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset/branch/master/tree/data

附录:CLI 命令整体概览

数据集的数据文件个数在 10 万量级以下,以及数据文件大小在 10GB 以下,同时也可以使用我们完全类似 Git 的方式进行数据集的版本管理。

支持的整体命令如下:

类别CLI 命令描述
设置 & 协同grav config设置和查看单 Repo 或者全局的配置项
grav help展示 Graviton 命令行的帮助信息
grav upload上传数据到远端 Repo
grav download从远端 Repo 下载数据
grav remote添加远端的 Repo 地址
grav init本地初始化 Graviton 的 Repo
grav clone克隆 Repo 到一个新的目录
grav push将版本和数据信息推送更新到远端
grav pull从远端 Repo 拉取版本和数据信息
版本 & 分支grav add添加改动到缓存区
grav commit提交改动到 Repo
grav status展示当前工作目录的状态
grav log展示提交的日志信息
grav diff展示两个版本的区别、版本和工作区的区别等
grav checkout切换不同的分支、版本,以及恢复文件
grav branch创建、删除和列出分支
grav merge合并两个分支

CLI 命令:设置 & 协同

grav remote

添加远端的 Repo 地址

配置添加远端的 Repo 链接 , origin 非必填 远端 Repo 的链接 url 可以从数据管理平台的界面上获得

$ grav remote add [origin] <url>

示例如下:

$ grav remote add https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset

grav init

本地初始化 Graviton 的 Repo

在当前目录下创建一个空的 Repo

$ grav init

在当前目录下指定一个新 Repo 名,创建一个空的 Repo

$ grav init <new_repo>

grav clone

克隆 Repo 到一个新的目录

将远端指定 Repo 克隆到本地,默认克隆 master 分支,此时,会在当前目录下新建一个同 Repo 名的文件夹,放置克隆下来 Repo 内容

远端 Repo 的链接 url 可以从数据管理平台的界面上获得

$ grav clone <url> 

将远端指定 Repo 克隆到本地,指定 branch 分支,此时,会在当前目录下新建一个同 Repo 名的文件夹,放置克隆下来 Repo 内容

远端 Repo 的链接 url 可以从数据管理平台的界面上获得

$ grav clone (-B|--branch)<branch> <url>

示例如下:

$ grav clone -B dev https://console.sensecore.cn/aidmp/datasets/test-tenant/cn-sh-01/test-data-space/test-dataset

grav push

将版本和数据信息推送更新到远端,建议每次最多推送10万的文件,避免时间过长导致push任务失败

将本地 Repo 的指定 branch 推送到远端 Repo 对应的同名 branch , origin 非必填

$ grav push [origin] <branch> 

示例如下:

$ grav push master

如果远端没有对应的 branch 分支,可以通过交互式命令在远端新建对应的 branch 分支

如果远端的数据容量超出购买范围,则无法正常 push 成功,需要购买新增数据容量

如果 push 到远端分支时产生冲突,可以先 pull 到本地解决冲突后再重新 push

grav pull

从远端 Repo 拉取版本和数据信息

在本地 Repo 的 branch 分支下,从远端 Repo 拉取同名 branch 的内容,origin 非必填

$ grav pull [origin] <branch> 

示例如下:

$ grav pull master

pull 有冲突时,会有交互式提示 4 种解决方案:

  1. 推荐解决方式:两个版本的冲突文件带后缀方式同时放到工作区 ,需要用户手动解决冲突
  2. 冲突文件全部接受 XXX 分支
  3. 冲突文件全部接受 YYY 分支
  4. 取消本次 pull

其中,选择第一种推荐解决方式之后,会有交互式提示可能会用到下述 linux 命令,可以单独调整几个特殊的冲突文件后,再使用下述命令

批量删除指定 commitID 对应的冲突文件

for var in `find . -name '*~<last_commit_id>*'`; 
do rm $var;
done

批量修改冲突文件的文件名

for var in `find . -name '*~<last_commit_id>*'`; 
do mv -f "$var" `echo "$var" |sed 's/~<last_commit_id>//'`;
done

CLI 命令:版本 & 分支

grav add

添加改动到缓存区

添加一个或多个文件或文件夹的改动到暂存区

$ grav add <file1> <file2> ...

add 当前目录下的所有文件的改动到暂存区

$ grav add .

grav commit

提交改动到 Repo

提交本次改动信息到版本库,[msg] 为记录的改动信息

$ grav commit (-m|--message) [msg]    

示例如下

$ grav commit -m “first commit in 20220712

grav status

展示当前工作目录的状态

展示当前暂存区与工作区的区别

$ grav status

grav log

展示提交的日志信息

展示当前分支详细版本信息

$ grav log 

展示所有分支的详细版本信息

$ grav log --all

展示一行简略的版本信息

$ grav log --oneline

以演进图的方式展示当前分支信息

$ grav log --graph

可以将这些参数组合,展示所有分支,以演进图的方式,并且只展示一行简略的版本信息

$  grav log --graph --all --oneline

grav diff

展示两个版本的区别、版本和工作区的区别等

查看工作区和缓存区的差别,file(文件或文件夹)为可选,不加 file 为全部文件

$ grav diff [file]

查看工作区和版本库的差别,file(文件或文件夹)为可选,不加 file 为全部文件

$ grav diff HEAD [file]

查看缓存区和版本库的差别,file(文件或文件夹)为可选,不加 file 为全部文件,下面两种方式都支持

$ grav diff --staged [file] 
$ grav diff --cached [file] 

比较两个指定版本的差异,file(文件或文件夹)为可选,不加 file 为全部文件

$ grav diff <commit> <commit> [file]

比较两个指定分支的差异,file(文件或文件夹)为可选,不加 file 为全部文件

$ grav diff <branch> <branch> [file]

示例如下

$ grav diff master dev

grav checkout

切换不同的分支、版本,以及恢复文件

切换到指定 branch 分支

$ grav checkout <branch>

切换到 commit 对应的版本

$ grav checkout <commit> 

丢弃工作区一个或多个文件或文件夹的改动

$ grav checkout <file1>  <file2> 

丢弃工作区的改动,切换到当前版本

$ grav checkout .

从当前版本新建 branch 分支,且签出到新建的 branch 分支 新建的分支名,支持字母和数字的组合

$ grav checkout (-B|--branch) <branch>  

示例如下

$ grav checkout -B dev

grav branch

创建、删除和列出分支

展示本地的分支列表

$ grav branch

展示所有的分支列表, 包括远端的分支

$ grav branch (-a|--all) 

示例如下

$ grav branch -a

新建本地 Repo 新的指定分支 branch ,默认从当前分支继承过去 新建的分支名,支持字母和数字的组合

$ grav branch <branch>  

删除本地 Repo 指定分支 branch

$ grav branch (-d|--delete) <branch> 

示例如下

$ grav branch -d dev

grav merge

合并两个分支

在本地 Repo 的当前分支,合并指定分支 branch

$ grav merge <branch>  

merge 有冲突时,会有交互式提示 4 种解决方案:

  1. 推荐解决方式:两个版本的冲突文件带后缀方式同时放到工作区 ,需要用户手动解决冲突
  2. 冲突文件全部接受 XXX 分支
  3. 冲突文件全部接受 YYY 分支
  4. 取消本次 merge

其中,选择第一种推荐解决方式之后,会有交互式提示可能会用到下述 linux 命令,可以单独调整几个特殊的冲突文件后,再使用下述命令

批量删除指定 commitID 对应的冲突文件

for var in `find . -name '*~<last_commit_id>*'`; 
do rm $var;
done

批量修改冲突文件的文件名

for var in `find . -name '*~<last_commit_id>*'`; 
do mv -f "$var" `echo "$var" |sed 's/~<last_commit_id>//'`;
done