Pin Tower-compatible CUDA runtime
This commit is contained in:
@@ -388,7 +388,7 @@ def test_backend_docker_context_contains_gis_import_smoke_script() -> None:
|
|||||||
assert (ROOT / "backend" / "scripts" / "gis_import_smoke.py").exists()
|
assert (ROOT / "backend" / "scripts" / "gis_import_smoke.py").exists()
|
||||||
|
|
||||||
|
|
||||||
def test_all_in_one_dockerfile_caches_dependencies_and_uses_cpu_torch_for_ai_runtime() -> None:
|
def test_all_in_one_dockerfile_caches_dependencies_and_pins_driver_compatible_cuda_torch() -> None:
|
||||||
dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
|
dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
|
||||||
|
|
||||||
metadata_copy_index = dockerfile.index("COPY backend/pyproject.toml /app/")
|
metadata_copy_index = dockerfile.index("COPY backend/pyproject.toml /app/")
|
||||||
@@ -398,9 +398,9 @@ def test_all_in_one_dockerfile_caches_dependencies_and_uses_cpu_torch_for_ai_run
|
|||||||
smoke_index = dockerfile.index("RUN python scripts/gis_import_smoke.py")
|
smoke_index = dockerfile.index("RUN python scripts/gis_import_smoke.py")
|
||||||
|
|
||||||
assert metadata_copy_index < placeholder_readme_index < dependency_install_index < backend_copy_index < smoke_index
|
assert metadata_copy_index < placeholder_readme_index < dependency_install_index < backend_copy_index < smoke_index
|
||||||
assert "GEOINTEL_TORCH_INDEX_URL=https://download.pytorch.org/whl/cu130" in dockerfile
|
assert "GEOINTEL_TORCH_INDEX_URL=https://download.pytorch.org/whl/cu128" in dockerfile
|
||||||
assert "GEOINTEL_TORCH_VERSION=2.13.0" in dockerfile
|
assert "GEOINTEL_TORCH_VERSION=2.11.0" in dockerfile
|
||||||
assert "GEOINTEL_TORCHVISION_VERSION=0.28.0" in dockerfile
|
assert "GEOINTEL_TORCHVISION_VERSION=0.26.0" in dockerfile
|
||||||
assert '--index-url "$GEOINTEL_TORCH_INDEX_URL"' in dockerfile
|
assert '--index-url "$GEOINTEL_TORCH_INDEX_URL"' in dockerfile
|
||||||
|
|
||||||
|
|
||||||
@@ -432,4 +432,4 @@ def test_unraid_ai_runtime_requests_nvidia_and_fails_closed() -> None:
|
|||||||
assert 'YOLO_DEVICE="${YOLO_DEVICE:-cuda:0}"' in run_script
|
assert 'YOLO_DEVICE="${YOLO_DEVICE:-cuda:0}"' in run_script
|
||||||
assert 'YOLO_REQUIRE_CUDA="${YOLO_REQUIRE_CUDA:-true}"' in run_script
|
assert 'YOLO_REQUIRE_CUDA="${YOLO_REQUIRE_CUDA:-true}"' in run_script
|
||||||
assert '-e YOLO_REQUIRE_CUDA="$YOLO_REQUIRE_CUDA"' in run_script
|
assert '-e YOLO_REQUIRE_CUDA="$YOLO_REQUIRE_CUDA"' in run_script
|
||||||
assert "https://download.pytorch.org/whl/cu130" in dockerfile
|
assert "https://download.pytorch.org/whl/cu128" in dockerfile
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ RUN npm run build
|
|||||||
FROM postgres:16-bookworm AS runtime
|
FROM postgres:16-bookworm AS runtime
|
||||||
|
|
||||||
ARG GEOINTEL_INSTALL_AI=false
|
ARG GEOINTEL_INSTALL_AI=false
|
||||||
ARG GEOINTEL_TORCH_INDEX_URL=https://download.pytorch.org/whl/cu130
|
ARG GEOINTEL_TORCH_INDEX_URL=https://download.pytorch.org/whl/cu128
|
||||||
ARG GEOINTEL_TORCH_VERSION=2.13.0
|
ARG GEOINTEL_TORCH_VERSION=2.11.0
|
||||||
ARG GEOINTEL_TORCHVISION_VERSION=0.28.0
|
ARG GEOINTEL_TORCHVISION_VERSION=0.26.0
|
||||||
ARG GEOINTEL_ULTRALYTICS_VERSION=8.4.99
|
ARG GEOINTEL_ULTRALYTICS_VERSION=8.4.99
|
||||||
ARG GEOINTEL_SETUPTOOLS_VERSION=83.0.0
|
ARG GEOINTEL_SETUPTOOLS_VERSION=83.0.0
|
||||||
ARG GEOINTEL_WHEEL_VERSION=0.47.0
|
ARG GEOINTEL_WHEEL_VERSION=0.47.0
|
||||||
|
|||||||
@@ -12230,3 +12230,4 @@ Open:
|
|||||||
### Verificatie
|
### Verificatie
|
||||||
- TypeScript- en Vite-productiebuild geslaagd.
|
- TypeScript- en Vite-productiebuild geslaagd.
|
||||||
- Gerichte frontend-, backend-, browser- en productieverificatie volgen hieronder na de releasegate.
|
- Gerichte frontend-, backend-, browser- en productieverificatie volgen hieronder na de releasegate.
|
||||||
|
- De eerste productieacceptatie vond een echte CUDA-compatibiliteitsregressie: `torch 2.13.0+cu130` zag de RTX 4080 SUPER maar weigerde initialisatie op de Tower-driver met CUDA 12.9-capaciteit. De AI-image is daarom teruggebracht naar de expliciet gepinde, drivercompatibele combinatie `torch 2.11.0` / `torchvision 0.26.0` via de officiële CUDA 12.8-index; promotie vereist opnieuw live `torch.cuda.is_available()` en modelpreflight.
|
||||||
|
|||||||
@@ -46,12 +46,14 @@ not be installed by the default Docker backend image unless an explicit AI image
|
|||||||
or profile is introduced later.
|
or profile is introduced later.
|
||||||
|
|
||||||
The opt-in Unraid all-in-one AI build is NVIDIA-GPU-oriented. It installs the
|
The opt-in Unraid all-in-one AI build is NVIDIA-GPU-oriented. It installs the
|
||||||
pinned PyTorch/torchvision pair from the CUDA 13.0 wheel index before installing
|
pinned PyTorch/torchvision pair from the CUDA 12.8 wheel index before installing
|
||||||
the `ai` extra. The production runtime exposes the NVIDIA device, selects
|
the `ai` extra. The production runtime exposes the NVIDIA device, selects
|
||||||
`YOLO_DEVICE=cuda:0` and sets `YOLO_REQUIRE_CUDA=true`, so missing CUDA fails
|
`YOLO_DEVICE=cuda:0` and sets `YOLO_REQUIRE_CUDA=true`, so missing CUDA fails
|
||||||
closed instead of silently falling back to CPU. The index and versions remain
|
closed instead of silently falling back to CPU. The index and versions remain
|
||||||
explicit Docker build arguments and require live driver/runtime validation on
|
explicit Docker build arguments and require live driver/runtime validation on
|
||||||
Tower before release promotion.
|
Tower before release promotion. CUDA 12.8 is deliberately below the Tower
|
||||||
|
driver's reported CUDA 12.9 capability; a newer wheel index may not be promoted
|
||||||
|
merely because it exists when `torch.cuda.is_available()` fails on that driver.
|
||||||
|
|
||||||
Docker dependency metadata is copied before application source. Backend source
|
Docker dependency metadata is copied before application source. Backend source
|
||||||
changes therefore reuse the dependency layer while changes to `pyproject.toml`
|
changes therefore reuse the dependency layer while changes to `pyproject.toml`
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ export function LandingPage({
|
|||||||
<div>
|
<div>
|
||||||
<p>Veilige toegang</p>
|
<p>Veilige toegang</p>
|
||||||
<h2 id="access-title">Open de GeoIntel-workbench</h2>
|
<h2 id="access-title">Open de GeoIntel-workbench</h2>
|
||||||
<span>Meld u aan als operator of start een beperkte demosessie.</span>
|
<span>Meld u aan als operator of start een projectgebonden demosessie met volledige analysetoegang.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -301,7 +301,7 @@ export function LandingPage({
|
|||||||
<span className="landing-guest-icon" aria-hidden="true"><UserRound /></span>
|
<span className="landing-guest-icon" aria-hidden="true"><UserRound /></span>
|
||||||
<div>
|
<div>
|
||||||
<strong>Gastmodus</strong>
|
<strong>Gastmodus</strong>
|
||||||
<p>Open een tijdelijke, alleen-lezen demowerkruimte met voorbeelddata en een vooraf uitgevoerde kwaliteitscontrole.</p>
|
<p>Gebruik dezelfde modellen, analyses en downloads als een gebruiker. Alleen beheer, instellingen en uploads blijven afgeschermd.</p>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" onClick={submitGuestLogin} disabled={busy}>
|
<button type="button" onClick={submitGuestLogin} disabled={busy}>
|
||||||
{pendingAction === 'guest' ? 'Demo voorbereiden…' : 'Als gast verkennen'}
|
{pendingAction === 'guest' ? 'Demo voorbereiden…' : 'Als gast verkennen'}
|
||||||
|
|||||||
Reference in New Issue
Block a user