[Bug][Prod][GPU] image-description crash-loops on gated HuggingFace model — no HF token for Qwen3-VL-8B (401 GatedRepoError) #502

Closed
opened 2026-07-12 07:19:24 +00:00 by spikerj · 2 comments
Owner

Summary

The image-description worker (Qwen3-VL captioner) now gets its GPU lease (the #500 coordinator fix is live), loads the model on first request — and crash-loops because the model repo is gated on HuggingFace and no HF auth token is configured. Books with images still never get captioned; the failure moved one step further down the chain (#403#500 → this).

Evidence (2026-07-12 ~07:18, node 4090)

huggingface_hub.errors.GatedRepoError: 401 Client Error
Cannot access gated repo for url
  https://huggingface.co/prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it/resolve/main/config.json
Access to model prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it is restricted.
You must have access to it and be authenticated to access it. Please log in.
  → VisionModel.from_pretrained(...) → AutoConfig.from_pretrained(...) → cached_files(...)
OSError: You are trying to access a gated repo.

Task cycles: Running 4 min ago / Shutdown 5 min ago on node 4090 — it dies on every caption attempt (the worker process exits on the unhandled from_pretrained exception).

Root cause

The image-description service env carries no HuggingFace credentials — only GPU_MODEL_IDENTIFIER=qwen3-vl-8b. No HF_TOKEN / HUGGING_FACE_HUB_TOKEN, no HF_HOME, no offline/local model path. So from_pretrained hits the HF Hub anonymously and the gated repo returns 401.

Fix options

(a) Authenticated pull — add an HF_TOKEN (Docker secret) whose HF account has been granted access to prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it, injected as HUGGING_FACE_HUB_TOKEN/HF_TOKEN. Also set HF_HOME to a writable/persistent cache (see #495 for the ArtPipe HF-cache pattern) so it isn't re-downloaded every restart.

(b) Local mirror (infra-consistent, preferred) — pre-stage the weights on the model volume (the /mnt/fusionio/spikersoft/ai pattern from #497) and run the worker with HF_HUB_OFFLINE=1 pointing at the local dir. Avoids a runtime dependency on HF availability/auth on the hot path.

(c) Switch to a non-gated caption model if licensing/access to this abliterated variant isn't guaranteed.

Impact

Image-bearing book uploads still hang at Stage=ImageDescriptions (the worker now crashes instead of waiting on a lease). Same user-facing symptom, next root cause.

Related

  • #500 — gpu-coordinator lease (now resolved: lease grants, which surfaced this).
  • #403 — image-description deploy.
  • #497 — model-provisioning-on-/mnt/fusionio/spikersoft/ai pattern (embedding model).
  • #495 — ArtPipe HF cache / HF_HOME permission pattern (closed) — reference for the cache env.
## Summary The `image-description` worker (Qwen3-VL captioner) now gets its GPU lease (the #500 coordinator fix is live), loads the model on first request — and **crash-loops** because the model repo is **gated on HuggingFace** and no HF auth token is configured. Books with images still never get captioned; the failure moved one step further down the chain (#403 → #500 → this). ## Evidence (2026-07-12 ~07:18, node 4090) ``` huggingface_hub.errors.GatedRepoError: 401 Client Error Cannot access gated repo for url https://huggingface.co/prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it/resolve/main/config.json Access to model prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it is restricted. You must have access to it and be authenticated to access it. Please log in. → VisionModel.from_pretrained(...) → AutoConfig.from_pretrained(...) → cached_files(...) OSError: You are trying to access a gated repo. ``` Task cycles: `Running 4 min ago / Shutdown 5 min ago` on node 4090 — it dies on every caption attempt (the worker process exits on the unhandled `from_pretrained` exception). ## Root cause The image-description service env carries **no HuggingFace credentials** — only `GPU_MODEL_IDENTIFIER=qwen3-vl-8b`. No `HF_TOKEN` / `HUGGING_FACE_HUB_TOKEN`, no `HF_HOME`, no offline/local model path. So `from_pretrained` hits the HF Hub anonymously and the gated repo returns 401. ## Fix options **(a) Authenticated pull** — add an `HF_TOKEN` (Docker secret) whose HF account has been granted access to `prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it`, injected as `HUGGING_FACE_HUB_TOKEN`/`HF_TOKEN`. Also set `HF_HOME` to a writable/persistent cache (see #495 for the ArtPipe HF-cache pattern) so it isn't re-downloaded every restart. **(b) Local mirror (infra-consistent, preferred)** — pre-stage the weights on the model volume (the `/mnt/fusionio/spikersoft/ai` pattern from #497) and run the worker with `HF_HUB_OFFLINE=1` pointing at the local dir. Avoids a runtime dependency on HF availability/auth on the hot path. **(c)** Switch to a non-gated caption model if licensing/access to this abliterated variant isn't guaranteed. ## Impact Image-bearing book uploads still hang at `Stage=ImageDescriptions` (the worker now crashes instead of waiting on a lease). Same user-facing symptom, next root cause. ## Related - #500 — gpu-coordinator lease (now resolved: lease grants, which surfaced this). - #403 — image-description deploy. - #497 — model-provisioning-on-`/mnt/fusionio/spikersoft/ai` pattern (embedding model). - #495 — ArtPipe HF cache / `HF_HOME` permission pattern (closed) — reference for the cache env.
Author
Owner

Related: filed #506 — a separate image-description defect surfaced while investigating this service. When the GPU-lease client is momentarily None (startup race before _gpu_client is set, or coordinator transiently unreachable per #503), _gpu_client.acquire() raises AttributeError, which is misclassified as a PERMANENT failure (_PERMANENT_FAILURES tuple, image_description_service.py:1004) and dead-lettered without retry → silent caption data loss. Confirmed 2 images DLQ'd 07:33 on 4090. Distinct fix from the HF-token issue here.

Related: filed #506 — a *separate* image-description defect surfaced while investigating this service. When the GPU-lease client is momentarily None (startup race before _gpu_client is set, or coordinator transiently unreachable per #503), `_gpu_client.acquire()` raises AttributeError, which is misclassified as a PERMANENT failure (_PERMANENT_FAILURES tuple, image_description_service.py:1004) and dead-lettered without retry → silent caption data loss. Confirmed 2 images DLQ'd 07:33 on 4090. Distinct fix from the HF-token issue here.
Author
Owner

Superseded by the MinIO model architecture and verified working — closing. The gated-repo problem was eliminated rather than tokened-around: the worker now syncs Qwen/Qwen3-VL-8B-Instruct (official, ungated) from the ai-models bucket (backend #228 + infra #41) and loads from disk; prod never contacts HuggingFace. Evidence: 110 completed captions in Mongo generated by the bucket-loaded model.

Superseded by the MinIO model architecture and verified working — closing. The gated-repo problem was eliminated rather than tokened-around: the worker now syncs `Qwen/Qwen3-VL-8B-Instruct` (official, ungated) from the `ai-models` bucket (backend #228 + infra #41) and loads from disk; prod never contacts HuggingFace. Evidence: **110 completed captions** in Mongo generated by the bucket-loaded model.
Sign in to join this conversation.