6 个版本 (稳定)

1.1.0 2024 年 8 月 19 日
1.0.3 2024 年 5 月 23 日
0.4.0 2021 年 8 月 15 日

#245 in 科学

Download history 272/week @ 2024-05-09 244/week @ 2024-05-16 168/week @ 2024-05-23 1/week @ 2024-06-06 133/week @ 2024-08-15

133 每月下载量

MPL-2.0 许可证

115KB
2K SLoC

giant-squid

Tests Code Coverage codecov Crates.io Crates.io Crates.io docs

一个替代的 MWA ASVO 客户端。有关使用 MWA ASVO 的一般帮助,请访问: MWA ASVO wiki


针对 HPC 用户的通知

如果您在 HPC 系统上运行 giant-squid,请阅读 这篇 wiki 文章


giant-squid 最初作为在 Haskell 编程语言(现在可用 Rust)中执行 MWA ASVO 相关任务的库创建。然而,它不仅是一个库;giant-squid 可执行文件作为 manta-ray-client 的替代品,可能因以下原因更适合用户

  1. 默认情况下,giant-squid 流式解包 来自 MWA ASVO 的下载。换句话说,您不需要下载可能很大的(> 100 GiB!)tar 文件然后自己解包(因此会占用原始 tar 的两倍空间并执行一个非常昂贵的 IO 操作),您可以使用 --keep-zip 而不必解包即可获取文件

  2. giant-squid 不需要 CSV 文件来提交作业;这由命令行参数处理。

  3. 对于接受 obsids 或作业 ID 的任何命令,可以使用文本文件。这些文件会像您手动输入一样解包,并检查文本文件(s)的每个条目是否有效(所有整数和所有 10 位长);任何异常都会报告,并导致命令失败。

  4. 您可以使用 giant-squid 打印 MWA ASVO 队列的 JSON 格式,这使得在其他编程语言中解析工作状态变得更加简单。

  5. 默认情况下,giant-squid 将验证存档的哈希值。您可以使用 --skip-hash 跳过此检查。

用法

打印帮助文本

giant-squid -h

这同样适用于所有子命令,例如:

giant-squid download -h

打印 giant-squid 版本

giant-squid --version
giant-squid -V

(如果东西在变化,这个功能很有用!)

列出 MWA ASVO 任务

giant-squid list
giant-squid l

以 JSON 格式列出 MWA ASVO 任务

以下命令是等价的

giant-squid list --json
giant-squid list -j
giant-squid l -j

示例输出

giant-squid list -j
{"325430":{"obsid":1090528304,"jobId":325430,"jobType":"DownloadVisibilities","jobState":"Ready","files":[{"fileName":"1090528304_vis.zip","fileSize":10762878689,"fileHash":"ca0e89e56cbeb05816dad853f5bab0b4075097da"}]},"325431":{"obsid":1090528432,"jobId":325431,"jobType":"DownloadVisibilities","jobState":"Ready","files":[{"fileName":"1090528432_vis.zip","fileSize":10762875021,"fileHash":"9d9c3c0f56a2bb4e851aa63cdfb79095b29c66c9"}]}}

jobType 可以是以下任意一个

  • 转换
  • 下载可见性
  • 下载元数据
  • 下载电压
  • 取消任务

jobState 可以是以下任意一个

  • 排队
  • 处理中
  • 就绪
  • Error: Text(例如:“错误:某些错误信息”)
  • 已过期
  • 已取消

示例:在 Python 中读取

$ giant-squid list -j > /tmp/asvo.json
$ ipython
Python 3.8.0 (default, Oct 23 2019, 18:51:26)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.10.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import json

In [2]: with open("/tmp/asvo.json", "r") as h:
   ...:     q = json.load(h)
   ...:

In [3]: q.keys()
Out[3]: dict_keys(['216087', '216241', '217628'])

过滤 MWA ASVO 任务列表

giant-squid list 可以接受一个可选的标识符列表,该列表可以用于过滤任务列表,这些标识符可以是 jobID 列表或 obsID 列表,但不能同时使用。

此外,还可以使用 --states--types 选项进一步过滤输出。

这两个选项都接受逗号分隔的值列表,来自上面的 jobTypejobState 列表。这些值可以是 TitleCaseUPPERCASElowercasekebab-casesnake_case,甚至 SPoNgeBOb-CAse

示例:仅显示满足以下两个条件的任务

  • obsid 是 12345678901234567891
  • jobType 是 DownloadVisibilitiesDownloadMetadataCancelJob
  • jobState 是 ProcessingQueued
giant-squid list \
   --types dOwNlOaD__vIsIbIlItIeS,download-metadata,CANCELJOB \
   --states pRoCeSsInG,__Q_u_e_u_e_D__ \
   1234567890 1234567891

示例:使用 Bash 和 jq 进行手动哈希验证

此示例演示了如何将 giant-squid list -j 的输出流式传输到 jq。这与 giant-squid download 的功能相同,但额外开销是将 tar 存储到磁盘(-k)。

set -eux
giant-squid list -j --types download_visibilities --states ready \
  | jq -r '.[]|[.jobId,.files[0].fileUrl//"",.files[0].fileSize//"",.files[0].fileHash//""]|@tsv' \
  | tee ready.tsv
while read -r jobid url size hash; do
   # note: it's a good idea to check you have enough disk space here using $size.
   wget $url -O ${jobid}.tar --progress=dot:giga --wait=60 --random-wait
   sha1=$(sha1sum ${jobid}.tar | cut -d' ' -f1)
   if [ "\$sha1" != "\$hash" ]; then
      echo "Download failed, hash mismatch. Expected $hash, got $sha1"
      exit 1
   fi
   tar -xf ${jobid}.tar
do < ready.tsv

下载 MWA ASVO 任务

将任务 ID 12345 下载到当前目录 '.'

giant-squid download 12345
# or
giant-squid d 12345

将 obsid 1065880128 下载到当前目录 '.'

giant-squid download 1065880128
# or
giant-squid d 1065880128

giant-squid 通过指定数字的长度区分 job ID 和 obsid;10 位数字被视为 obsid。如果 MWA ASVO 今后提供超过十亿的任务,您可以对我表示不满。同样,如果到 2296 年此代码仍在使用,这也适用。)

也可以使用包含 job ID 或 obsid 的文本文件。

您可以通过为 download 子命令提供 download_dir 参数来指定下载目录。省略此参数将默认为当前目录 .

将 obsid 1065880128 下载到 /tmp 目录

giant-squid download --download-dir /tmp 1065880128
# or
giant-squid d -d /tmp 1065880128

默认情况下,giant-squid 将执行流解压。使用 -k(或 --keep-zip)来禁用此功能。

MWA ASVO 为其下载提供 SHA-1 校验和。giant-squid 默认会验证下载的完整性。向 download 命令添加 --skip-hash 以跳过。

使用 /scratch 数据交付选项提交的作业与使用 acacia 数据交付选项提交的作业行为不同。尝试下载 /scratch 作业时,如果作业路径(例如 /scratch/mwaops/asvo/12345)可以从当前主机访问,它将被移动到当前工作目录。否则,将跳过。

提交 MWA ASVO 作业

可视性下载

“可视性下载作业”是指提供包含 gpubox 文件、metafits 文件和 cotter 标志的 zip 文件的作业,用于单个 obsid。

为 obsid 1065880128 提交可视性下载作业

giant-squid submit-vis 1065880128
# or
giant-squid sv 1065880128

可以也使用包含 obsid 的文本文件。

如果要在不实际提交 obsid 的情况下检查命令是否工作,则可以使用 --dry-run 选项(简称 -n)。

您可以选择将文件打包并上传到 Pawsey 的 Acacia(默认),或者可以要求将文件留在 Pawsey 的 /scratch 文件系统中。第二种选项要求在您的 MWA ASVO 账户中设置 Pawsey 组,请联系管理员请求此功能。要提交使用 /scratch 交付选项的作业,请设置环境变量 GIANT_SQUID_DELIVERY=scratch。或者指定 -d scratch|acacia

当指定 scratch 作为交付时,也可以选择性地传递 delivery-format tar 以指示 MWA ASVO 提供文件的 tar 包,而不是所有单个文件。

转换下载

为 obsid 1065880128 提交转换作业

giant-squid submit-conv 1065880128
# or
giant-squid sc 1065880128

可以也使用包含 obsid 的文本文件。

可以通过运行帮助文本找到默认转换选项。

giant-squid submit-conv -h

要更改默认转换选项和/或指定更多选项,指定逗号分隔的键值对,如下所示

giant-squid submit-conv 1065880128 -p avg_time_res=0.5,avg_freq_res=10

如果要在不实际提交 obsid 的情况下检查命令是否工作,则可以使用 --dry-run 选项(简称 -n)。更多消息(包括 giant-squid 用于转换选项的内容)可以通过 -v(或 --verbose)访问。例如。

$ giant-squid submit-conv 1065880128 -nv -p avg_time_res=0.5,avg_freq_res=10
20:40:24 [INFO] Would have submitted 1 obsids for conversion, using these parameters:
{"output": "uvfits", "job_type": "conversion", "flag_edge_width": "160", "avg_freq_res": "10", "avg_time_res": "0.5"}

您可以选择将文件打包并上传到 Pawsey 的 Acacia(默认),或者可以要求将文件留在 Pawsey 的 /scratch 文件系统中。第二种选项要求在您的 MWA ASVO 账户中设置 Pawsey 组,请联系管理员请求此功能。要提交使用 /scratch 选项的作业,请设置环境变量 GIANT_SQUID_DELIVERY=scratch。

当指定 scratch 作为交付时,也可以选择性地传递 delivery-format tar 以指示 MWA ASVO 提供文件的 tar 包,而不是所有单个文件。

元数据下载

“元数据下载作业”是指提供包含 metafits 文件和 cotter 标志的 zip 文件的作业,用于单个 obsid。

为 obsid 1065880128 提交可视性下载作业

giant-squid submit-meta 1065880128
# or
giant-squid sm 1065880128

可以也使用包含 obsid 的文本文件。

如果要在不实际提交 obsid 的情况下检查命令是否工作,则可以使用 --dry-run 选项(简称 -n)。

您可以选择将文件打包并上传到 Pawsey 的 Acacia(默认),或者可以要求将文件留在 Pawsey 的 /scratch 文件系统中。第二种选项要求在您的 MWA ASVO 账户中设置 Pawsey 组,请联系管理员请求此功能。要提交使用 /scratch 选项的作业,请设置环境变量 GIANT_SQUID_DELIVERY=scratch。

当指定 scratch 作为交付时,也可以选择性地传递 delivery-format tar 以指示 MWA ASVO 提供文件的 tar 包,而不是所有单个文件。

电压下载

“电压下载作业”是指提供一个或多个 obsid 的原始电压的作业。

为 obsid 1065880128 提交电压下载作业

giant-squid submit-volt --delivery scratch --offset 0 --duration 8 1065880128
# or
giant-squid sv -d scratch -o 0 -u 8 1065880128

可以也使用包含 obsid 的文本文件。

如果要在不实际提交 obsid 的情况下检查命令是否工作,则可以使用 --dry-run 选项(简称 -n)。

对于 MWAX_VCS 或 MWAX_BUFFER 电压观测,您可以可选地传递 --from_channel--to_channel 以将作业限制为仅接收器粗通道范围指定的范围(包括)。MWA 接收器通道号范围为 0-255,乘以 1.28 将得到该通道的中心频率(MHz)。每个 MWA 观测通常有 24 个粗通道。

与其他工作不同,您不能选择将文件打包并上传到Pawsey的Acacia进行远程下载,因为数据通常太大。如果您在mwaopsmwavcs Pawsey小组中,并且已经要求MWA ASVO管理员在您的MWA ASVO个人资料中设置pawsey组,您可以要求将文件留在Pawsey的/scratch文件系统上。要提交具有/scratch选项的工作,请设置环境变量GIANT_SQUID_DELIVERY=scratch或传递-d scratch

重新提交作业

默认情况下,MWA ASVO服务器不允许您提交与队列中现有作业具有完全相同设置/参数的新作业(错误作业除外)。然而,您可以通过在任何作业提交时指定--allow-resubmit(简写为-r)来覆盖此行为。

下载性能

默认情况下,在下载时,giant-squid会在写入磁盘之前在内存中存储100 MiB的下载内容。这更有利于磁盘(尤其是属于超级计算机的磁盘),可以使下载更快。

在写入之前缓存的数据量可以通过设置GIANT_SQUID_BUF_SIZE进行调整。例如:

export GIANT_SQUID_BUF_SIZE=50
giant-squid download 12345

将使用50 MiB的内存来缓存下载内容,然后再写入。

安装

预编译

请查看GitHub发行页面

从crates.io构建

  • 安装Rust

  • 运行cargo install mwa_giant_squid

    • 最终的可执行文件将位于~./cargo/bin/giant-squid

    • 此目标可以通过CARGO_HOME环境变量进行配置。

从源代码构建

  • 安装Rust

  • 克隆此存储库并cd进入它

    gitclone https://github.com/MWATelescope/giant-squid && cdgiant-squid

  • 运行cargo install --path .

    • 最终的可执行文件将位于~./cargo/bin/giant-squid

    • 此目标可以通过CARGO_HOME环境变量进行配置。

Docker

您可以使用Docker运行giant-squid

docker run mwatelescope/giant-squid:latest -h

其他

Haskell代码仍然可在chj的GitLab上找到。切换到Rust意味着代码更高效且代码更易于阅读(对不起Haskell。我爱你,但你很奇怪)。

依赖关系

~8–22MB
~340K SLoC