{% extends "base.html" %} {% block title %}vq · fleet · {{ jobid }}{% endblock %} {% block content %} {% if error %}
Could not read job {{ jobid }} on {{ queue_host }}: {{ error }}
{% else %} {% set s = detail.status %}Fetched live from the owning host just now. Refresh
{% if flash %}{{ flash }}
{% endif %} {% if can_act and s.state in ("pending", "running", "suspended") %} {% endif %}{{ s.command | join(" ") }}{{ s.cwd }}{{ s.scheduler_id }}| node | allocated cores |
|---|---|
| {{ a.node }} | {{ a.cores if a.cores is not none else "not reported" }} |
The scheduler's allocation: {{ allocation | length }} node{{ "s" if allocation | length != 1 else "" }}. Nothing is measured per node; the usage on this page is the whole job's.
Measured by {{ final_usage.collector }}{% if final_usage.receipts and final_usage.receipts > 1 %} over {{ final_usage.receipts }} array elements (cpu summed, wall and peak the largest){% endif %}. Peak rss is the {{ final_usage.peak_rss_scope }}, not a sum over the job's processes.
{% elif final_usage.status == "absent" %}No usage receipt. The command did not exit on its own (a killed job leaves none), or it ran under a vq that did not write one.
{% elif final_usage.status == "error" %}The collector could not measure this run: {{ final_usage.error }}
{% else %}The usage receipt is not shown because it cannot be trusted: {{ final_usage.error }}
{% endif %}| gpu | model | utilisation | device memory | job processes |
|---|---|---|---|---|
| {{ device.index }} | {{ device.name }} | {% if device.utilization_percent is not none %}{{ device.utilization_percent }}%{% else %}unknown{% endif %} | {% if device.memory_used_mb is not none %}{{ "%.0f" | format(device.memory_used_mb) }} MB{% else %}unknown{% endif %}{% if device.memory_total_mb is not none %} of {{ "%.0f" | format(device.memory_total_mb) }} MB{% endif %} | {% if not device.job_process %}none seen{% elif device.job_memory_mb is not none %}{{ "%.0f" | format(device.job_memory_mb) }} MB{% else %}unknown{% endif %} |
The newest complete nvidia-smi sample from the batch node, taken {{ gpu_live.observed or "at an unknown time" }} by the node's clock. {% if gpu_live.coverage == "allocation" %}The node shows exactly the {{ gpu_live.allocated }} allocated GPUs. {% elif gpu_live.coverage == "attributed" %}The node shows {{ gpu_live.visible }} GPUs for an allocation of {{ gpu_live.allocated }}; only devices a process of this job is on are listed. {% else %}The node shows {{ gpu_live.visible }} of {{ gpu_live.allocated }} allocated GPUs; other nodes are not observed.{% endif %} Utilisation and device memory are the device as a whole, not this job's share.
{% else %}GPU use is not measured now: {{ gpu_live.reason }}
{% endif %}| element | {% endif %}gpu | model | job processes peak | device memory peak | utilisation mean | utilisation peak |
|---|---|---|---|---|---|---|
| {{ device.element }} | {% endif %}{{ device.index }} | {{ device.name }} | {% if device.job_peak_memory_mb is not none %}{{ "%.0f" | format(device.job_peak_memory_mb) }} MB{% else %}not attributed{% endif %} | {% if device.device_peak_memory_mb is not none %}{{ "%.0f" | format(device.device_peak_memory_mb) }} MB{% else %}unknown{% endif %}{% if device.memory_total_mb is not none %} of {{ "%.0f" | format(device.memory_total_mb) }} MB{% endif %} | {% if device.utilization_mean_percent is not none %}{{ device.utilization_mean_percent }}%{% else %}unknown{% endif %} | {% if device.utilization_peak_percent is not none %}{{ device.utilization_peak_percent }}%{% else %}unknown{% endif %} |
Measured by {{ gpu_usage.collector }} on the batch node, {{ gpu_usage.samples }} samples every {{ gpu_usage.interval_seconds }} s{% if gpu_usage.truncated %}, until sampling reached its size cap{% endif %}. {% if gpu_usage.coverage == "allocation" %}The node showed exactly the {{ gpu_usage.allocated }} allocated GPUs, so these are the job's devices. {% elif gpu_usage.coverage == "attributed" %}The node showed {{ gpu_usage.visible }} GPUs for an allocation of {{ gpu_usage.allocated }}; only devices a process of this job was seen on are listed. {% elif gpu_usage.coverage == "mixed" %}Each of the {{ gpu_usage.elements | length }} array elements is summarised on its own node, and which devices are listed differs between them: {% for element in gpu_usage.elements %}element {{ element.index }} {{ element.coverage or ("not measured: " ~ element.reason) }}{% if not loop.last %}; {% endif %}{% endfor %}. {% else %}The node showed {{ gpu_usage.visible }} of {{ gpu_usage.allocated }} allocated GPUs; other nodes are not observed, so this is partial.{% endif %} Device memory and utilisation are the device as a whole, not this job's share. Job process memory counts processes started from the job script and, on Slurm, the job's other steps in its cgroup.
{% elif gpu_usage.status == "absent" %}No GPU samples: the command never ran, or it ran under a vq that does not sample GPUs.
{% elif gpu_usage.status == "unavailable" %}GPU use was not measured: {{ gpu_usage.reason }}
{% else %}The GPU samples are not shown because they cannot be trusted: {{ gpu_usage.error }}
{% endif %}Watchdog samples from the owning host, ~5 s apart. CPU% is the whole process group ({{ s.cpus }} core(s) declared ⇒ up to ~{{ s.cpus * 100 }}%). {% if s.mem_mb %}Declared memory ceiling {{ s.mem_mb }} MB.{% endif %}
{# Four narrow columns, but a 19-char timestamp plus three numerics still exceeds a phone viewport once main's padding is taken off. #}| ts | cpu % | rss MB | {% if s.mem_mb %}mem % | {% endif %}
|---|---|---|---|
| {{ smp.ts[:19] | replace("T", " ") if smp.ts else "-" }} | {{ "%.0f" | format(smp.cpu_percent) if smp.cpu_percent is not none else "-" }} | {{ "%.0f" | format(smp.rss_mb) if smp.rss_mb is not none else "-" }} | {% if s.mem_mb %}{{ "%.1f" | format(100.0 * smp.rss_mb / s.mem_mb) if smp.rss_mb is not none else "-" }} | {% endif %}
{{ s.stdout }}{% else %}No stdout captured yet.
{% endif %}{{ s.stderr }}{% else %}No stderr captured yet.
{% endif %}| ts | kind | detail |
|---|---|---|
| {{ e.ts }} | {{ e.kind }} |
{%- set core = ["ts", "kind", "jobid"] -%}
{%- for k, v in e.items() if k not in core -%}
{{ k }}: {{ v }}{% if not loop.last %} · {% endif %}
{%- endfor -%}
|
No events recorded (pre-v0.6.54 job, or workspace cleaned up).
{% endif %}