Skip to main content

从命令行界面管理数据

在这个例子中,我们将创建一个简单的数据集,并使用clearml-data CLI演示其上的基本操作。

先决条件

  1. 首先,确保你已经克隆了clearml仓库。它包含了所有需要的文件。

  2. 打开终端并切换到克隆仓库的示例文件夹:

    cd clearml/examples/reporting

创建初始数据集

  1. 要创建数据集,请运行以下代码:

    clearml-data create --project datasets --name HelloDataset

    预期响应:

    clearml-data - Dataset Management & Versioning CLI
    Creating a new dataset:
    New dataset created id=24d05040f3e14fbfbed8edb1bf08a88c
  2. 添加一个文件夹。文件添加是递归的,因此只需指向文件夹即可捕获所有文件和子文件夹:

    clearml-data add --files data_samples

    预期响应:

    clearml-data - Dataset Management & Versioning CLI
    Adding files/folder to dataset id 24d05040f3e14fbfbed8edb1bf08a88c
    Generating SHA2 hash for 2 files
    Hash generation completed
    5 files added
note

创建数据集后,运行命令时不需要指定其ID,例如addremovelist

  1. 关闭数据集 - 此命令会上传文件。默认情况下,文件会上传到文件服务器,但可以使用--storage标志配置为任何ClearML支持的存储介质(参见存储)。 该命令还会完成数据集的最终化,使其不可变并准备好被使用。

    clearml-data close

    预期响应:

    clearml-data - Dataset Management & Versioning CLI
    Finalizing dataset id 24d05040f3e14fbfbed8edb1bf08a88c
    Pending uploads, starting dataset upload to https://files.community.clear.ml
    Uploading compressed dataset changes (4 files, total 221.56 KB) to https://files.community.clear.ml
    Upload completed (221.56 KB)
    2021-05-04 09:32:03,388 - clearml.Task - INFO - Waiting to finish uploads
    2021-05-04 09:32:04,067 - clearml.Task - INFO - Finished uploading
    Dataset closed and finalized

列出数据集内容

要查看所有文件是否已添加到创建的数据集中,请使用 clearml-data list 并输入刚刚关闭的数据集的ID。

clearml-data list --id 24d05040f3e14fbfbed8edb1bf08a88c

预期响应:

clearml-data - Dataset Management & Versioning CLI 

List dataset content: 24d05040f3e14fbfbed8edb1bf08a88c
Listing dataset content
file name | size | hash
-----------------------------------------------------------------------------------------------------------------
dancing.jpg | 40,484 | 78e804c0c1d54da8d67e9d072c1eec514b91f4d1f296cdf9bf16d6e54d63116a
data.csv | 21,440 | b618696f57b822cd2e9b92564a52b3cc93a2206f41df3f022956bb6cfe4e7ad5
picasso.jpg | 114,573 | 6b3c67ea9ec82b09bd7520dd09dad2f1176347d740fd2042c88720e780691a7c
sample.json | 132 | 9c42a9a978ac7a71873ebd5c65985e613cfaaff1c98f655af0d2ee0246502fd7
sample.mp3 | 72,142 | fbb756ae14005420ff00ccdaff99416bebfcea3adb7e30963a69e68e9fbe361b
Total 5 files, 248771 bytes

创建子数据集

使用ClearML数据,您可以创建继承其他数据集内容的子数据集。

  1. 创建一个新的数据集,指定先前创建的作为其父级:

    clearml-data create --project datasets --name HelloDataset-improved --parents 24d05040f3e14fbfbed8edb1bf08a88c
    note

    您需要输入在上述创建数据集时收到的数据集ID

  2. 添加一个新文件。

    • 创建一个新文件:echo "data data data" > new_data.txt

    • 现在将文件添加到数据集中:

    clearml-data add --files new_data.txt

    控制台应显示此输出:

    clearml-data - Dataset Management & Versioning CLI
    Adding files/folder to dataset id 8b68686a4af040d081027ba3cf6bbca6
    1 file added
  3. 删除一个文件。您需要指定文件的完整路径(在数据集内,而不是本地)以删除它。

    clearml-data remove --files data_samples/dancing.jpg

    预期响应:

    clearml-data - Dataset Management & Versioning CLI
    Removing files/folder from dataset id 8b68686a4af040d081027ba3cf6bbca6
    1 files removed
  4. 关闭并最终确定数据集:

    clearml-data close
  5. 再次查看数据集中的文件:

    clearml-data list --id 8b68686a4af040d081027ba3cf6bbca6

    并查看所做的更改!new_data.txt 已被添加,dancing.jpg 已被移除。

    file name                                                        | size       | hash                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------
    data.csv | 21,440 | b618696f57b822cd2e9b92564a52b3cc93a2206f41df3f022956bb6cfe4e7ad5
    new_data.txt | 15 | 6df986a2154902260a836febc5a32543f5337eac60560c57db99257a7e012051
    picasso.jpg | 114,573 | 6b3c67ea9ec82b09bd7520dd09dad2f1176347d740fd2042c88720e780691a7c
    sample.json | 132 | 9c42a9a978ac7a71873ebd5c65985e613cfaaff1c98f655af0d2ee0246502fd7
    sample.mp3 | 72,142 | fbb756ae14005420ff00ccdaff99416bebfcea3adb7e30963a69e68e9fbe361b
    Total 5 files, 208302 bytes

通过使用clearml-data,为数据创建了清晰的谱系。如本示例所示,当数据集关闭时,添加或删除数据的唯一方法是创建一个新数据集,并使用前一个数据集作为父级。这样,数据不依赖于代码,并且是可复现的。