一览At a glance
运行 / 排队数量、CPU、内存、GPU、磁盘,空闲的机器自动合并成一行。Running / pending counts, CPU, memory, GPUs and disks; idle servers fold into one line.
NEP、GPUMD、VASP、LAMMPS 自动识别,显示进度、速度、预计剩余时间和曲线。NEP, GPUMD, VASP and LAMMPS are recognised automatically, with progress, speed, ETA and curves.
完成和失败不同的提示音;没有作业记录的集群也能判断是正常结束还是提前退出。Different sounds for success and failure; it can tell a clean finish from an early exit even without job accounting.
服务器上什么都不装,每次刷新一个 SSH 通道;取消任务要三道确认;密码默认不保存。Nothing installed on servers, one SSH channel per refresh, a three-step cancel, passwords not stored by default.
Slurm / PBS 集群Slurm & PBS clusters
- 你的作业:用
squeue -u $USER读取,显示名称、作业号、已运行时间 / 时间上限、节点和分区。 Your jobs, read withsqueue -u $USER: name, ID, elapsed / time limit, nodes and partition. - 数组作业合并成一行:几十上百个元素显示成一条分段进度条——绿色完成、红色失败、蓝色运行中、灰色排队,点开能看每个正在运行的元素。 Job arrays in one row: dozens or hundreds of elements become a single segmented bar — green done, red failed, blue running, grey pending — and you can open each running element.
- 排队原因说人话:
Priority、AssocGrpBillingRunMinutes、DependencyNeverSatisfied这类原因翻译成一句话;永远不会开始、需要你动手的那种会标红。 Pending reasons in plain words:Priority,AssocGrpBillingRunMinutes,DependencyNeverSatisfiedand friends become one sentence; the ones that will never start without your help are flagged in red. - 分区空闲资源:点卡片上的 ▦,按需查询各分区还有多少空闲的 CPU、GPU 和节点,帮你决定往哪儿投。 Free resources per partition: click ▦ on the card to see free CPUs, GPUs and nodes per partition, on demand — handy for deciding where to submit.
- 最近 24 小时:有
sacct时用服务器上的完整记录(数组元素合并成一条),没有时用 ServerIsland 自己观察到的记录。 Last 24 hours: the full record fromsacctwhen available (array elements merged), otherwise what ServerIsland saw itself. - PBS 也一样:PBS Pro、OpenPBS 和 Torque 用
qselect+qstat -f读取,数组作业、排队原因(来自 comment)、结束状态(qstat -x)、按住取消(qdel)都有;分区空闲资源只有 Slurm 才有。 PBS too: PBS Pro, OpenPBS and Torque are read withqselect+qstat -f— arrays, pending reasons (from the comment), final states (qstat -x) and hold-to-cancel (qdel) all work; free partition resources are Slurm only. - 只看某些目录:每台服务器可以只显示工作目录在指定文件夹里的作业和进程,比如只看
~/projects/LLZO。 Only some folders: limit a server to jobs and processes whose working directory is inside given folders, e.g. just~/projects/LLZO. - 单机 Slurm 工作站:可以同时显示作业和直接运行的程序,属于作业的进程不会重复列出。 Single-machine Slurm: show jobs and directly started programs together; processes that belong to a job aren't listed twice.
直连服务器与 GPUDirect servers & GPUs
- 进程:列出你的计算进程(Python、torchrun、计算软件……),系统服务、桌面、编辑器后台这些自动排除;"包含 / 排除"规则可以自己改。占用 GPU 的进程总会显示。 Processes: your compute processes (Python, torchrun, simulation codes…), with system services, desktop and editor helpers filtered out — the include / exclude rules are editable. Anything using a GPU always shows.
- GPU:一两张卡时显示利用率、显存、温度;更多卡时每张一个小方块,显存快满时顶上一条琥珀色的线。 GPUs: utilisation, memory and temperature for one or two cards; with more, one small cell per GPU, with an amber line when its memory is nearly full.
- 监听进程:点卡片上的 👁,从高负载进程里挑一个"监听",或者在设置里输入 PID。监听的进程不受过滤规则影响,结束时一定提醒;PID 被别的进程复用时也能认出来。 Watch a process: pick one with 👁 on the card or enter a PID in Settings. Watched processes ignore the filters and always alert when they end — and PID reuse is detected.
- 磁盘:用量超过阈值(默认 90%)时提醒一次,回落之后再超过才会再提醒。 Disks: one alert when usage passes the threshold (90% by default), and again only after it drops and rises again.
计算软件识别Simulation software
在任务的工作目录里找特征文件,只读文件末尾或很小的文件,和任务列表在同一次刷新里完成。任何一处和预期不一致,就不显示进度。 ServerIsland looks for telltale files in each job's working directory, reads only small files or file tails, and does it in the same refresh as the job list. If anything doesn't match what it expects, it shows no progress at all.
| 软件Software | 识别依据Detected from | 显示Shows |
|---|---|---|
| NEP / GNEP | loss.out + nep.in / gnep.in | 代数 / epoch、各项 loss、速度、预计剩余;详情页有 loss 曲线(对数坐标,增量读取)generation / epoch, losses, speed, ETA; a log-scale loss curve, read incrementally |
| GPUMD | run.in + neighbor.out / thermo.out | 步数(目标是 run.in 里所有 run 之和)、速度、近邻数steps (target = sum of all runs in run.in), speed, neighbour counts |
| VASP | INCAR + OSZICAR + OUTCAR | MD:离子步 / NSW 的百分比;结构优化:离子步,以及并排的能量曲线和最大力曲线(读 OUTCAR,虚线是 EDIFFG 目标);单点:电子步。OUTCAR 里出现计时信息算正常结束MD: ionic steps as a share of NSW; relaxation: ionic steps plus side-by-side energy and max-force curves (from OUTCAR, with the EDIFFG target as a dashed line); SCF: electronic steps. The timing block in OUTCAR marks a clean finish |
| LAMMPS | log.lammps | 最后一段 run 的步数和速度;出现 Total wall time 算正常结束。minimize 等少见写法不显示steps and speed of the last run; Total wall time marks a clean finish. minimize and other unusual setups are skipped |
进度长时间没有变化(超过 10 分钟或 5 个刷新周期)时,任务行上会提示"⚠ 没有新输出",方便发现卡住的任务。任务结束时会再读一次输出文件的最终状态,避免"最后一次采样还没到目标"被误判为失败。 If the output hasn't changed for a while (10 minutes or five refreshes), the row warns "⚠ no output" so stuck runs stand out. When a job ends, the output is read once more so a run that finished between two refreshes isn't reported as failed.
自定义规则Custom rules
你自己的程序也能显示进度:在 设置 → 进度识别 里添加规则,填一个文件名(可以用 * 通配,取最新的一个)和一个关键字或正则。比如关键字 epoch 能匹配 "Epoch 37/100"、"epoch: 37";写成 37/100 时会顺便取到目标值。目标值也可以写死,或者从另一个文件里读(比如配置文件里的 max_epochs)。再填一个"结束标记",进程结束时就能判断是正常完成还是提前退出。
Make your own code show progress: add a rule under Settings → Progress Detection with a file name (wildcards allowed — the newest match is used) and a keyword or regex. The keyword epoch matches "Epoch 37/100" or "epoch: 37", and the "/100" form also gives the target. The target can also be fixed or read from another file (say max_epochs in a config). Add an end marker and ServerIsland can tell a clean finish from an early exit.
规则编辑页有"测试"按钮:选一台服务器和一个任务目录,只读地跑一次,告诉你取到了什么,没取到时显示文件最后几行。 The rule editor has a Test button: pick a server and a job directory, and it runs once, read-only, showing what it found — or the last lines of the file when it found nothing.
脚本也可以主动上报:往 ~/.serverisland/progress/名称.json 写一行 JSON(progress 或 current / total、message、jobid、status),带 jobid 的会合并到对应作业上。
Scripts can also report directly by writing one line of JSON to ~/.serverisland/progress/name.json (progress or current / total, message, jobid, status); entries with a jobid are merged into that job.
提醒Alerts
弹窗显示 5 秒,带服务器名、用时、退出状态。同一次刷新里事件太多时合并成一条。A five-second pop-up with the server, duration and exit state. Bursts in one refresh are merged into one.
先问 sacct;没有作业记录就看计算软件的输出;都没有就只说"已离开队列"。sacct first; without accounting, the software's own output; otherwise just "left the queue".
全部结束时汇总一次(成功几个、失败几个);可选第一个元素失败时立即提醒。One summary when the whole array ends (how many succeeded / failed); optionally an early alert on the first failure.
每台服务器可以静音;短于 30 秒的进程不打扰;提示音可以调音量或关掉。Mute per server; processes shorter than 30 s never alert; sounds have a volume and an off switch.
详情、日志、取消Details, logs & cancelling
- 详情:Slurm 作业来自
scontrol(结束太久的用sacct),进程来自/proc:状态、时间、节点、资源、工作目录、完整命令。 Details fromscontrol(orsacctfor long-finished jobs) and/proc: state, times, nodes, resources, working directory, full command. - 日志末尾:自动找到作业的 StdOut / StdErr,或进程输出重定向到的文件,每 4 秒刷新最后 40 行;报错行标红,警告标黄。输出直接打到终端(tmux / screen)时会告诉你为什么读不到。 Log tail: finds the job's StdOut / StdErr or the file a process writes to and refreshes the last 40 lines every 4 s, with errors in red and warnings in amber. If output goes to a terminal (tmux / screen), it tells you why there's nothing to read.
- 一键复制:作业号、路径、完整命令,以及一条可以在终端里实时看日志的
ssh … tail -f命令;还可以直接在终端里 ssh 到工作目录。 One-click copies of IDs, paths, full commands and a readyssh … tail -fcommand — or open a terminal straight into the working directory. - 取消:默认关闭,按服务器开启;按住 1.5 秒 → 再确认一次(写明要执行的命令)→ 服务器上核对任务名称、所有者和启动时间,对不上就不执行。进程先发 TERM,没退出可以再强制结束。 Cancel: off by default, enabled per server; hold 1.5 s → confirm (the exact command is shown) → the server re-checks name, owner and start time and refuses on any mismatch. Processes get TERM first, with a force-kill if they don't exit.
每台服务器的设置Per-server control
| 设置Setting | 用途What for |
|---|---|
| 连接方式Connection | 用 ~/.ssh/config 里的别名,或直接填地址、用户名、端口、私钥文件;不会改动 ~/.ssh/configAn alias from ~/.ssh/config, or type the address, user, port and key file; ~/.ssh/config is never modified |
| 认证方式Authentication | 密钥、密码、密钥 + 密码、动态口令;需要登录的机器点"登录…"后连接在后台保持(8 小时到一直保持)Key, password, key + password or one-time code; servers that need a login stay connected in the background after "Log In…" (8 hours to forever) |
| 记住密码Remember password | 默认关。打开后密码只存进系统钥匙串 / Windows 凭据管理器 / Linux 钥匙圈,断线后自动重新登录;动态口令从不保存Off by default. When on, the password lives only in the macOS Keychain / Windows Credential Manager / Linux keyring and is used to reconnect automatically; one-time codes are never stored |
| 跳板机Jump host | 选另一台已添加的服务器做跳板,可以多级;每一跳分别询问密码、分别报错,跳板机已登录时直接复用它的连接Go through another server you've added, even several in a row; each hop asks and reports errors separately, and a logged-in jump host's connection is reused |
| 轮询间隔 / 暂停Interval / pause | 10 秒到 1 小时,或跟随全局;知道没任务时可以暂停,仍可手动刷新10 s to 1 h or the global value; pause when you know nothing's running — manual refresh still works |
| 连接后先执行Run first | 每次查询前先执行,比如 module load slurm、source env.shRuns before every query — module load slurm, source env.sh… |
| 补全 PATHImport PATH | 把 ~/.bashrc 等文件里的 PATH 目录补上,装在家目录下的 Slurm / 软件也能找到Adds PATH entries from ~/.bashrc and friends, so tools installed in your home directory are found |
| 显示内容What to show | CPU、内存、GPU、磁盘、进度文件可以分别关掉Turn CPU, memory, GPU, disk and progress files on or off |
| 远程命令Remote commands | squeue、sacct、ps、nvidia-smi、df 的写法都能改,每条都能恢复默认Every squeue / sacct / ps / nvidia-smi / df command is editable, with a reset |
| 诊断Diagnostics | 自动检测类型、检查命令在不在、测试连接并查看服务器的原始输出Detect the type, check which commands exist, test the connection and see the raw output |
Tako
刘海里的像素小章鱼,心情跟着服务器走:The pixel octopus in the notch mirrors your servers:
三个平台Three platforms
| macOS | Windows | Linux | |
|---|---|---|---|
| 显示Display | 贴着刘海的灵动岛Island around the notch | 屏幕顶部的灵动岛,或桌面小章鱼(可拖动);托盘图标Island at the top of the screen or a draggable desktop pet; tray icon | |
| SSH | 系统 ssh,复用连接System ssh, shared connection | 内置 SSH(读取 .ssh\config 和 known_hosts),也可以改用系统 sshBuilt-in SSH (reads .ssh\config and known_hosts), or the system ssh | 系统 ssh,复用连接System ssh, shared connection |
| 提醒Alerts | 弹窗、提示音、系统通知Pop-up, sounds, notifications | 弹窗、提示音Pop-up, sounds | 弹窗、提示音、系统通知Pop-up, sounds, notifications |
| 配置Settings file | 同一种格式,可以互相拷贝Same format everywhere — copy it across | ||
设计原则Principles
每次刷新把一小段只读的 bash 脚本通过 SSH 发过去,读完结果就结束。Each refresh sends a short, read-only bash script over SSH and reads the answer. That's all.
每台服务器每次刷新一个 SSH 通道、一次 squeue;只读小文件和文件末尾;出错时自动退避,不触发封禁。One SSH channel and one squeue per server per refresh; only small files and tails; automatic back-off so it never trips fail2ban.
拿不准就不说:识别对不上不显示进度,结果不明就说"不确定"。When unsure, it says so: no progress for unrecognised output, "unknown" when the result is unknown.
没有账号、没有云端、不收集任何数据;密码默认不保存,要记住时也只放在系统钥匙串里。开源(GPL-3.0)。No account, no cloud, no telemetry; passwords aren't stored unless you ask, and then only in your system keychain. Open source (GPL-3.0).