feat(perception): qualify E33 worker shadow

This commit is contained in:
DCCONSTRUCTIONS
2026-07-27 13:43:18 +03:00
parent 32257fc2b4
commit 9bbd5845b7
13 changed files with 2448 additions and 9 deletions
@@ -0,0 +1,141 @@
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$PackageRoot,
[Parameter(Mandatory = $true)]
[ValidatePattern("^[a-z0-9][a-z0-9._-]{2,95}$")]
[string]$ExecutionId,
[string]$OutputRoot = "D:\NDC_MISSIONCORE\runtime\derived\e33-worker-shadow",
[string]$ContainerImage = "nvcr.io/nvidia/tritonserver:26.06-py3@sha256:58df7489c3f2276f9591d500a012dee03e23d35543ce3c390b4c001e6bf90794",
[ValidateRange(1, 1000)]
[int]$FreeGiBFloor = 300
)
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"
function Assert-LastExitCode([string]$Operation) {
if ($LASTEXITCODE -ne 0) {
throw "$Operation failed with exit code $LASTEXITCODE"
}
}
function Resolve-DDirectory([string]$Path, [string]$Label) {
$item = Get-Item -LiteralPath (Resolve-Path -LiteralPath $Path).Path -Force
$root = [IO.Path]::GetPathRoot($item.FullName).TrimEnd("\")
if (
-not $item.PSIsContainer -or
($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -or
$root -ine "D:"
) {
throw "$Label must be a real D: directory"
}
return $item.FullName
}
function Convert-ToDockerPath([string]$Path) {
return $Path.Replace("\", "/")
}
function Assert-FreeSpace([string]$Phase) {
$free = [int64](Get-PSDrive -Name D).Free
$floor = [int64]$FreeGiBFloor * 1GB
Write-Host (
"DISK_GUARD PHASE={0} DRIVE=D FREE_BYTES={1} FREE_GIB={2} FLOOR_GIB={3}" -f
$Phase, $free, [math]::Round($free / 1GB, 3), $FreeGiBFloor
)
if ($free -lt ($floor + 1GB)) {
throw "D: lacks the guarded E33 reserve during $Phase"
}
return $free
}
$package = Resolve-DDirectory $PackageRoot "E33 package"
$packageManifestPath = Join-Path $package "manifest.json"
if (-not (Test-Path -LiteralPath $packageManifestPath -PathType Leaf)) {
throw "E33 package manifest is missing"
}
$packageManifest = Get-Content -LiteralPath $packageManifestPath -Raw | ConvertFrom-Json
if (
$packageManifest.schema_version -ne "missioncore.e33-worker-package/v1" -or
$packageManifest.package_id -ne (Split-Path $package -Leaf) -or
$packageManifest.package_id -notmatch "^e33-worker-package-[a-f0-9]{64}$"
) {
throw "E33 package manifest is incompatible"
}
if (-not (Test-Path -LiteralPath $OutputRoot)) {
$null = New-Item -ItemType Directory -Path $OutputRoot
}
$output = Resolve-DDirectory $OutputRoot "E33 output root"
$freeBefore = Assert-FreeSpace "preflight"
& docker image inspect $ContainerImage *> $null
Assert-LastExitCode "Pinned E33 container image inspection"
$dockerPackage = Convert-ToDockerPath $package
$dockerOutput = Convert-ToDockerPath $output
$packageName = Split-Path $package -Leaf
$containerPackage = "/opt/e33-input/$packageName"
$command = @(
"run", "--rm",
"--network", "none",
"--read-only",
"--security-opt", "no-new-privileges:true",
"--cap-drop", "ALL",
"--pids-limit", "128",
"--gpus", "all",
"--tmpfs", "/tmp:rw,noexec,nosuid,size=256m",
"-e", "PYTHONDONTWRITEBYTECODE=1",
"-e", ("PYTHONPATH={0}/runtime" -f $containerPackage),
"-e", ("E33_CONTAINER_IMAGE={0}" -f $ContainerImage),
"-e", ("E33_WORKER_NODE={0}" -f $env:COMPUTERNAME),
"-v", ("{0}:{1}:ro" -f $dockerPackage, $containerPackage),
"-v", ("{0}:/output:rw" -f $dockerOutput),
"--entrypoint", "python3",
$ContainerImage,
("{0}/runtime/run_e33_worker_shadow.py" -f $containerPackage),
"--package", $containerPackage,
"--output-root", "/output",
"--execution-id", $ExecutionId
)
Write-Output ("PACKAGE_ID={0}" -f $packageManifest.package_id)
Write-Output ("PACKAGE_IDENTITY_SHA256={0}" -f $packageManifest.identity_sha256)
Write-Output ("CONTAINER_IMAGE={0}" -f $ContainerImage)
Write-Output ("EXECUTION_ID={0}" -f $ExecutionId)
& docker @command
Assert-LastExitCode "E33 worker shadow"
$matches = @(
Get-ChildItem -LiteralPath $output -Directory -Filter "e33-worker-shadow-*" |
Where-Object {
$resultPath = Join-Path $_.FullName "result.json"
if (-not (Test-Path -LiteralPath $resultPath -PathType Leaf)) {
return $false
}
$result = Get-Content -LiteralPath $resultPath -Raw | ConvertFrom-Json
return (
$result.identity.execution_id -eq $ExecutionId -and
$result.identity.package_id -eq $packageManifest.package_id
)
}
)
if ($matches.Count -ne 1) {
throw "E33 immutable result could not be resolved uniquely"
}
$resultRoot = $matches[0].FullName
$resultManifest = Get-Content -LiteralPath (Join-Path $resultRoot "result.json") -Raw |
ConvertFrom-Json
if (
$resultManifest.schema_version -ne "missioncore.e33-worker-shadow-result/v1" -or
$resultManifest.publication_scope -ne "worker-shadow-diagnostic-only"
) {
throw "E33 result manifest is incompatible"
}
$freeAfter = Assert-FreeSpace "completed"
Write-Output ("RESULT_ROOT={0}" -f $resultRoot)
Write-Output ("RESULT_ID={0}" -f $resultManifest.result_id)
Write-Output ("ACCEPTANCE_STATE={0}" -f $resultManifest.acceptance_state)
Write-Output ("DISK_FREE_BYTES_BEFORE={0}" -f $freeBefore)
Write-Output ("DISK_FREE_BYTES_AFTER={0}" -f $freeAfter)
@@ -0,0 +1,37 @@
{
"schema_version": "missioncore.e33-worker-shadow-profile/v1",
"mode": "full-session-qualification",
"expected_e32_result_id": "e32-track-geometry-a14ca0e7fb3850ca0dfa3c41634e1b490a2d58ab74d101afc6d6921fbdb0e6fd",
"expected_worker_node": "DESKTOP-OPJ8J04",
"container_image": "nvcr.io/nvidia/tritonserver:26.06-py3@sha256:58df7489c3f2276f9591d500a012dee03e23d35543ce3c390b4c001e6bf90794",
"pacing": {
"speed": 1.0,
"start_delay_ms": 250.0
},
"queues": {
"work_capacity": 2,
"result_capacity": 2
},
"deadlines": {
"result_ms": 100.0,
"stale_ms": 150.0,
"unavailable_ms": 500.0
},
"resources": {
"sample_interval_seconds": 1.0
},
"acceptance": {
"minimum_effective_fps": 9.5,
"maximum_input_drop_fraction": 0.001,
"maximum_result_drop_fraction": 0.0,
"maximum_result_age_p95_ms": 100.0,
"maximum_deadline_miss_fraction": 0.01,
"maximum_release_lag_p95_ms": 25.0,
"maximum_process_rss_mib": 1024.0,
"require_gpu_visible": true
},
"authority": {
"commands_enabled": false,
"navigation_or_safety_accepted": false
}
}
@@ -0,0 +1,40 @@
#!/usr/bin/env python3
"""Execute one immutable E33 package inside the bounded worker container."""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from k1link.compute.e33_worker_shadow import run_e33_worker_shadow
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--package", type=Path, required=True)
parser.add_argument("--output-root", type=Path, required=True)
parser.add_argument("--execution-id", required=True)
args = parser.parse_args()
result = run_e33_worker_shadow(
args.package,
args.output_root,
execution_id=args.execution_id,
)
print(
json.dumps(
{
"result_id": result.result_id,
"result_root": str(result.result_root),
"accepted": result.accepted,
"metrics": result.report["metrics"],
},
ensure_ascii=False,
sort_keys=True,
)
)
return 0 if result.accepted else 2
if __name__ == "__main__":
raise SystemExit(main())