6 个版本 (稳定)
新 1.1.0 | 2024 年 8 月 19 日 |
---|---|
1.0.3 | 2024 年 5 月 23 日 |
0.4.0 | 2021 年 8 月 15 日 |
#245 in 科学
133 每月下载量
115KB
2K SLoC
giant-squid
一个替代的 MWA ASVO 客户端。有关使用 MWA ASVO 的一般帮助,请访问: MWA ASVO wiki。
针对 HPC 用户的通知
如果您在 HPC 系统上运行 giant-squid,请阅读 这篇 wiki 文章。
giant-squid
最初作为在 Haskell 编程语言(现在可用 Rust)中执行 MWA ASVO 相关任务的库创建。然而,它不仅是一个库;giant-squid
可执行文件作为 manta-ray-client 的替代品,可能因以下原因更适合用户
-
默认情况下,
giant-squid
流式解包 来自 MWA ASVO 的下载。换句话说,您不需要下载可能很大的(> 100 GiB!)tar 文件然后自己解包(因此会占用原始 tar 的两倍空间并执行一个非常昂贵的 IO 操作),您可以使用--keep-zip
而不必解包即可获取文件 -
giant-squid
不需要 CSV 文件来提交作业;这由命令行参数处理。 -
对于接受 obsids 或作业 ID 的任何命令,可以使用文本文件。这些文件会像您手动输入一样解包,并检查文本文件(s)的每个条目是否有效(所有整数和所有 10 位长);任何异常都会报告,并导致命令失败。
-
您可以使用
giant-squid
打印 MWA ASVO 队列的 JSON 格式,这使得在其他编程语言中解析工作状态变得更加简单。 -
默认情况下,
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
选项进一步过滤输出。
这两个选项都接受逗号分隔的值列表,来自上面的 jobType
和 jobState
列表。这些值可以是 TitleCase
、UPPERCASE
、lowercase
、kebab-case
、snake_case
,甚至 SPoNgeBOb-CAse
示例:仅显示满足以下两个条件的任务
- obsid 是
1234567890
或1234567891
- jobType 是
DownloadVisibilities
、DownloadMetadata
或CancelJob
- jobState 是
Processing
或Queued
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进行远程下载,因为数据通常太大。如果您在mwaops
或mwavcs
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