[Bug][Infra][GPU] artpipe lane down on 4090 — workers Rejected on missing /mnt/fusionio/spikersoft/art_pipe bind after artpipe-gpu label move (collateral of #500)
#501
Moving the artpipe-gpu swarm label to the 4090 node (done to serve the image-description worker — see #500/#403) collaterally took the artpipe lane down. The artpipe stacks follow the same artpipe-gpu label, so they rescheduled onto the 4090 — which is not provisioned for artpipe (missing the /mnt/fusionio/spikersoft/art_pipe bind-mount source). Both workers are now Rejected in a tight loop:
spikersoft-artpipe-model-safety_artpipe-model-safety → 0/1
spikersoft-artpipe-modeling_artpipe-modeling → 0/1
Rejected (repeating, every ~5s) on node 4090:
invalid mount config for type "bind": bind source path does not exist:
/mnt/fusionio/spikersoft/art_pipe
artpipe-model-safety is the always-on SafetyCheck resident, so this is a live outage of the art pipeline while the label sits on the 4090.
Root cause
Two services share one placement lever (node.labels.artpipe-gpu == true) but have different node-provisioning requirements:
image-description — needs only the GPU (self-contained image).
artpipe stacks — additionally bind-mount /mnt/fusionio/spikersoft/art_pipe (the art_pipe checkout + bootstrapped model venvs).
docs/4090-burst-node-runbook.md "one-time provisioning" step provides that checkout on the 4090:
sudo git clone https://git.spikersoft.com/spikerj/spikersoft-artpipe.git /mnt/fusionio/spikersoft/art_pipe
# then bootstrap model venvs inside a worker container
That step was not done for this label move (the move was for image-description, not a full artpipe burst), so the artpipe binds fail.
Options
(a) Provision the 4090 for artpipe — run the burst-runbook one-time provisioning (git clone art_pipe to /mnt/fusionio/spikersoft/art_pipe + venv bootstrap), then redeploy the six artpipe stacks (runbook Session START steps 3-4). Restores the lane on the 24 GB card.
(b) Decouple image-description placement from the shared artpipe-gpu label so serving the book-pipeline captioner on the 4090 doesn't drag the artpipe stacks with it. Cleanest long-term: image-description gets its own image-desc-gpu (or reuses a generic gpu) label, independent of the artpipe lane.
Interim if artpipe isn't needed right now: leave as-is (SafetyCheck/modeling stay 0/1) or move the label back to SERVER — but that re-breaks image-description's lease (#500). This label collision is the real design gap.
Same for spikersoft-artpipe-modeling_artpipe-modeling.
Both were 1/1 on SERVER before the artpipe-gpu label moved to 4090 (~2026-07-12 06:3x).
Related
#500 — the gpu-coordinator/label move for image-description that triggered this.
#403 — image-description deploy (why the 4090 lane was wanted).
#480 — same failure class (task Rejected on a missing bind source).
docs/4090-burst-node-runbook.md — the provisioning + single-lane procedure.
## Summary
Moving the `artpipe-gpu` swarm label to the **4090** node (done to serve the `image-description` worker — see #500/#403) collaterally **took the artpipe lane down**. The artpipe stacks follow the same `artpipe-gpu` label, so they rescheduled onto the 4090 — which is **not provisioned for artpipe** (missing the `/mnt/fusionio/spikersoft/art_pipe` bind-mount source). Both workers are now Rejected in a tight loop:
```
spikersoft-artpipe-model-safety_artpipe-model-safety → 0/1
spikersoft-artpipe-modeling_artpipe-modeling → 0/1
Rejected (repeating, every ~5s) on node 4090:
invalid mount config for type "bind": bind source path does not exist:
/mnt/fusionio/spikersoft/art_pipe
```
`artpipe-model-safety` is the **always-on SafetyCheck resident**, so this is a live outage of the art pipeline while the label sits on the 4090.
## Root cause
Two services share one placement lever (`node.labels.artpipe-gpu == true`) but have **different node-provisioning requirements**:
- `image-description` — needs only the GPU (self-contained image).
- artpipe stacks — additionally bind-mount `/mnt/fusionio/spikersoft/art_pipe` (the art_pipe checkout + bootstrapped model venvs).
`docs/4090-burst-node-runbook.md` "one-time provisioning" step provides that checkout on the 4090:
```
sudo git clone https://git.spikersoft.com/spikerj/spikersoft-artpipe.git /mnt/fusionio/spikersoft/art_pipe
# then bootstrap model venvs inside a worker container
```
That step was not done for this label move (the move was for image-description, not a full artpipe burst), so the artpipe binds fail.
## Options
**(a) Provision the 4090 for artpipe** — run the burst-runbook one-time provisioning (`git clone` art_pipe to `/mnt/fusionio/spikersoft/art_pipe` + venv bootstrap), then redeploy the six artpipe stacks (runbook Session START steps 3-4). Restores the lane on the 24 GB card.
**(b) Decouple image-description placement from the shared `artpipe-gpu` label** so serving the book-pipeline captioner on the 4090 doesn't drag the artpipe stacks with it. Cleanest long-term: image-description gets its own `image-desc-gpu` (or reuses a generic `gpu`) label, independent of the artpipe lane.
Interim if artpipe isn't needed right now: leave as-is (SafetyCheck/modeling stay 0/1) or move the label back to SERVER — but that re-breaks image-description's lease (#500). This label collision is the real design gap.
## Repro / evidence
- `docker service ps spikersoft-artpipe-model-safety_artpipe-model-safety` → Rejected loop, error above, node 4090.
- Same for `spikersoft-artpipe-modeling_artpipe-modeling`.
- Both were 1/1 on SERVER before the `artpipe-gpu` label moved to 4090 (~2026-07-12 06:3x).
## Related
- #500 — the gpu-coordinator/label move for image-description that triggered this.
- #403 — image-description deploy (why the 4090 lane was wanted).
- #480 — same failure class (task Rejected on a missing bind source).
- `docs/4090-burst-node-runbook.md` — the provisioning + single-lane procedure.
Analysis + decision needed (this is an ops choice, not a code fix — laying out the paths):
Why it broke: the six artpipe stacks follow the movable artpipe-gpu label AND bind /mnt/fusionio/spikersoft/art_pipe — which exists only on SERVER. Label moved to the 4090 (#500) → artpipe tasks Rejected on missing bind. Note the image-description worker is UNAFFECTED (its stack deliberately has no fusionio binds — images + model both come from MinIO) and is captioning fine on the 4090.
Resolution options:
Provision the art_pipe tree on the 4090 (the burst runbook's implicit step): rsync /mnt/fusionio/spikersoft/art_pipe from SERVER to the same path on the 4090 (venvs are arch-compatible x86→x86; CUDA venvs may need a re-bootstrap pass per #432/#357). ArtStudio then runs on the 24 GB card — the point of the burst session.
Split the lane: move artpipe-gpu back to SERVER (+ coordinator Nodes flip per the runbook) once caption-heavy work is done — image-description would then starve again (16 GB > 8 GB), so this only makes sense between caption sessions. The single-lane invariant (#367 U2 would remove it) forces this either/or today.
Longer-term (the #497/#413 trajectory): artpipe model weights into ai-models + boot-time venv bootstrap on any node — removes the data-gravity pin the same way image-description's was removed. Real work, tracked under #413/#432.
Recommend 1 for the current session (one rsync + venv re-bootstrap), 3 as the durable direction. Whoever runs option 1: docker service ps the six artpipe stacks after — they should schedule on the 4090 once the bind source exists.
Analysis + decision needed (this is an ops choice, not a code fix — laying out the paths):
**Why it broke**: the six artpipe stacks follow the movable `artpipe-gpu` label AND bind `/mnt/fusionio/spikersoft/art_pipe` — which exists only on SERVER. Label moved to the 4090 (#500) → artpipe tasks Rejected on missing bind. Note the image-description worker is UNAFFECTED (its stack deliberately has no fusionio binds — images + model both come from MinIO) and is captioning fine on the 4090.
**Resolution options:**
1. **Provision the art_pipe tree on the 4090** (the burst runbook's implicit step): rsync `/mnt/fusionio/spikersoft/art_pipe` from SERVER to the same path on the 4090 (venvs are arch-compatible x86→x86; CUDA venvs may need a re-bootstrap pass per #432/#357). ArtStudio then runs on the 24 GB card — the point of the burst session.
2. **Split the lane**: move `artpipe-gpu` back to SERVER (+ coordinator Nodes flip per the runbook) once caption-heavy work is done — image-description would then starve again (16 GB > 8 GB), so this only makes sense between caption sessions. The single-lane invariant (#367 U2 would remove it) forces this either/or today.
3. **Longer-term (the #497/#413 trajectory)**: artpipe model *weights* into `ai-models` + boot-time venv bootstrap on any node — removes the data-gravity pin the same way image-description's was removed. Real work, tracked under #413/#432.
Recommend 1 for the current session (one rsync + venv re-bootstrap), 3 as the durable direction. Whoever runs option 1: `docker service ps` the six artpipe stacks after — they should schedule on the 4090 once the bind source exists.
Safety-lane half of this is CLEARED (2026-07-13 01:51Z): the #517 baked-image cutover deployed and spikersoft-artpipe-model-safety is 1/1 Running on the 4090 with no /mnt/fusionio/spikersoft/art_pipe bind — the 'invalid mount config' reject-loop is gone for that service. spikersoft-artpipe-modeling still reject-loops on the missing bind and stays broken until its lane cuts over (Phase 2/3, #518/#519) or the bind is provisioned on the 4090. Suggest re-scoping this ticket to the modeling lane only.
Safety-lane half of this is CLEARED (2026-07-13 01:51Z): the #517 baked-image cutover deployed and spikersoft-artpipe-model-safety is 1/1 Running on the 4090 with no /mnt/fusionio/spikersoft/art_pipe bind — the 'invalid mount config' reject-loop is gone for that service. spikersoft-artpipe-modeling still reject-loops on the missing bind and stays broken until its lane cuts over (Phase 2/3, #518/#519) or the bind is provisioned on the 4090. Suggest re-scoping this ticket to the modeling lane only.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Moving the
artpipe-gpuswarm label to the 4090 node (done to serve theimage-descriptionworker — see #500/#403) collaterally took the artpipe lane down. The artpipe stacks follow the sameartpipe-gpulabel, so they rescheduled onto the 4090 — which is not provisioned for artpipe (missing the/mnt/fusionio/spikersoft/art_pipebind-mount source). Both workers are now Rejected in a tight loop:artpipe-model-safetyis the always-on SafetyCheck resident, so this is a live outage of the art pipeline while the label sits on the 4090.Root cause
Two services share one placement lever (
node.labels.artpipe-gpu == true) but have different node-provisioning requirements:image-description— needs only the GPU (self-contained image)./mnt/fusionio/spikersoft/art_pipe(the art_pipe checkout + bootstrapped model venvs).docs/4090-burst-node-runbook.md"one-time provisioning" step provides that checkout on the 4090:That step was not done for this label move (the move was for image-description, not a full artpipe burst), so the artpipe binds fail.
Options
(a) Provision the 4090 for artpipe — run the burst-runbook one-time provisioning (
git cloneart_pipe to/mnt/fusionio/spikersoft/art_pipe+ venv bootstrap), then redeploy the six artpipe stacks (runbook Session START steps 3-4). Restores the lane on the 24 GB card.(b) Decouple image-description placement from the shared
artpipe-gpulabel so serving the book-pipeline captioner on the 4090 doesn't drag the artpipe stacks with it. Cleanest long-term: image-description gets its ownimage-desc-gpu(or reuses a genericgpu) label, independent of the artpipe lane.Interim if artpipe isn't needed right now: leave as-is (SafetyCheck/modeling stay 0/1) or move the label back to SERVER — but that re-breaks image-description's lease (#500). This label collision is the real design gap.
Repro / evidence
docker service ps spikersoft-artpipe-model-safety_artpipe-model-safety→ Rejected loop, error above, node 4090.spikersoft-artpipe-modeling_artpipe-modeling.artpipe-gpulabel moved to 4090 (~2026-07-12 06:3x).Related
docs/4090-burst-node-runbook.md— the provisioning + single-lane procedure.Analysis + decision needed (this is an ops choice, not a code fix — laying out the paths):
Why it broke: the six artpipe stacks follow the movable
artpipe-gpulabel AND bind/mnt/fusionio/spikersoft/art_pipe— which exists only on SERVER. Label moved to the 4090 (#500) → artpipe tasks Rejected on missing bind. Note the image-description worker is UNAFFECTED (its stack deliberately has no fusionio binds — images + model both come from MinIO) and is captioning fine on the 4090.Resolution options:
/mnt/fusionio/spikersoft/art_pipefrom SERVER to the same path on the 4090 (venvs are arch-compatible x86→x86; CUDA venvs may need a re-bootstrap pass per #432/#357). ArtStudio then runs on the 24 GB card — the point of the burst session.artpipe-gpuback to SERVER (+ coordinator Nodes flip per the runbook) once caption-heavy work is done — image-description would then starve again (16 GB > 8 GB), so this only makes sense between caption sessions. The single-lane invariant (#367 U2 would remove it) forces this either/or today.ai-models+ boot-time venv bootstrap on any node — removes the data-gravity pin the same way image-description's was removed. Real work, tracked under #413/#432.Recommend 1 for the current session (one rsync + venv re-bootstrap), 3 as the durable direction. Whoever runs option 1:
docker service psthe six artpipe stacks after — they should schedule on the 4090 once the bind source exists.Safety-lane half of this is CLEARED (2026-07-13 01:51Z): the #517 baked-image cutover deployed and spikersoft-artpipe-model-safety is 1/1 Running on the 4090 with no /mnt/fusionio/spikersoft/art_pipe bind — the 'invalid mount config' reject-loop is gone for that service. spikersoft-artpipe-modeling still reject-loops on the missing bind and stays broken until its lane cuts over (Phase 2/3, #518/#519) or the bind is provisioned on the 4090. Suggest re-scoping this ticket to the modeling lane only.