Pin corrected cuDSS 0.8 worker and require known FP64 sparse solve before annotation
Browse files- flora-worker-image.json +1 -1
- hand-pipeline-catalog.json +1 -1
- hand-worker-image.json +2 -2
- hand_setup.py +33 -1
- pipeline-source.tar.gz +2 -2
- pipeline-version.json +2 -2
- test_hand_actions.py +9 -2
flora-worker-image.json
CHANGED
|
@@ -31,7 +31,7 @@
|
|
| 31 |
"flora_batcher.py": "38e03e2032af8d5f3ed34980cc4d89927fe70c9742aa2ce13f4d0ccdd6fba727",
|
| 32 |
"flora_speed_entry.py": "192b18d75b9d876c2a65d88de340c8cea7c8da90543d0510b5ee6865d123d524",
|
| 33 |
"studio_runtime.py": "2b393bf7fafcdead638ad1cea35e49df8c6edce725f5545b76fd68e0a8fedd80",
|
| 34 |
-
"pipeline-version.json": "
|
| 35 |
"flora_vision.py": "a5a4231abf7b615164c40986df5f87047f745a23c55d86385d88f2a09e70f1e8"
|
| 36 |
},
|
| 37 |
"acceptance": {
|
|
|
|
| 31 |
"flora_batcher.py": "38e03e2032af8d5f3ed34980cc4d89927fe70c9742aa2ce13f4d0ccdd6fba727",
|
| 32 |
"flora_speed_entry.py": "192b18d75b9d876c2a65d88de340c8cea7c8da90543d0510b5ee6865d123d524",
|
| 33 |
"studio_runtime.py": "2b393bf7fafcdead638ad1cea35e49df8c6edce725f5545b76fd68e0a8fedd80",
|
| 34 |
+
"pipeline-version.json": "b0c3e208fae3ebc0ee38cb9df8ea657aadeca6b70629697a197df1d30dbe17c1",
|
| 35 |
"flora_vision.py": "a5a4231abf7b615164c40986df5f87047f745a23c55d86385d88f2a09e70f1e8"
|
| 36 |
},
|
| 37 |
"acceptance": {
|
hand-pipeline-catalog.json
CHANGED
|
@@ -44,5 +44,5 @@
|
|
| 44 |
"soma": "https://huggingface.co/nvidia/SOMA-X",
|
| 45 |
"runtime": "https://github.com/NVlabs/GEM-X/blob/20555befe2fbbe5b2015e1fff7ff214dc18ea9d6/ATTRIBUTIONS.md"
|
| 46 |
},
|
| 47 |
-
"lerobot_revision": "
|
| 48 |
}
|
|
|
|
| 44 |
"soma": "https://huggingface.co/nvidia/SOMA-X",
|
| 45 |
"runtime": "https://github.com/NVlabs/GEM-X/blob/20555befe2fbbe5b2015e1fff7ff214dc18ea9d6/ATTRIBUTIONS.md"
|
| 46 |
},
|
| 47 |
+
"lerobot_revision": "2022627082231d8c69d68bbfd59919952ff58c5c"
|
| 48 |
}
|
hand-worker-image.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
"recipe": "egohand-soma-v3-checkpoint-overlap-v4",
|
| 3 |
"build_verified": false,
|
| 4 |
"image_repo": "finerobotics/egohand-soma-worker-v4",
|
| 5 |
-
"image_revision": "
|
| 6 |
"image": "hf.co/spaces/finerobotics/egohand-soma-worker-v4",
|
| 7 |
-
"image_version_sha256": "
|
| 8 |
"assets": {
|
| 9 |
"repo": "finerobotics/egohand-soma-runtime",
|
| 10 |
"revision": "cb082150aed8612fd50a6a78a0e37deebf24b6c3",
|
|
|
|
| 2 |
"recipe": "egohand-soma-v3-checkpoint-overlap-v4",
|
| 3 |
"build_verified": false,
|
| 4 |
"image_repo": "finerobotics/egohand-soma-worker-v4",
|
| 5 |
+
"image_revision": "06dcbf6fc970289d532eeebc86bedeef72b8c791",
|
| 6 |
"image": "hf.co/spaces/finerobotics/egohand-soma-worker-v4",
|
| 7 |
+
"image_version_sha256": "624de4590d55adfe656876c3ff6b00929519b5d960cc6c3d710b6a204bc034ac",
|
| 8 |
"assets": {
|
| 9 |
"repo": "finerobotics/egohand-soma-runtime",
|
| 10 |
"revision": "cb082150aed8612fd50a6a78a0e37deebf24b6c3",
|
hand_setup.py
CHANGED
|
@@ -89,6 +89,11 @@ def prepare_camera_engines(profile):
|
|
| 89 |
check=True,
|
| 90 |
)
|
| 91 |
environment["LD_LIBRARY_PATH"] = environment["DROID_LIBRARY_PATH"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
subprocess.run(
|
| 93 |
[backend["droid_python"], __file__, "--build", json.dumps(backend)], env=environment, check=True
|
| 94 |
)
|
|
@@ -117,6 +122,31 @@ def verify_camera_contexts(backend):
|
|
| 117 |
del runtime
|
| 118 |
|
| 119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
def build_camera(backend):
|
| 121 |
"""Build TensorRT plans with the validated precision and dynamic shapes."""
|
| 122 |
import ctypes
|
|
@@ -236,5 +266,7 @@ if __name__ == "__main__":
|
|
| 236 |
build_camera(json.loads(sys.argv[2]))
|
| 237 |
elif sys.argv[1] == "--check-contexts":
|
| 238 |
verify_camera_contexts(json.loads(sys.argv[2]))
|
|
|
|
|
|
|
| 239 |
else:
|
| 240 |
-
raise ValueError("Expected --build or --check-
|
|
|
|
| 89 |
check=True,
|
| 90 |
)
|
| 91 |
environment["LD_LIBRARY_PATH"] = environment["DROID_LIBRARY_PATH"]
|
| 92 |
+
subprocess.run(
|
| 93 |
+
[backend["droid_python"], __file__, "--check-solver", json.dumps(backend)],
|
| 94 |
+
env=environment,
|
| 95 |
+
check=True,
|
| 96 |
+
)
|
| 97 |
subprocess.run(
|
| 98 |
[backend["droid_python"], __file__, "--build", json.dumps(backend)], env=environment, check=True
|
| 99 |
)
|
|
|
|
| 122 |
del runtime
|
| 123 |
|
| 124 |
|
| 125 |
+
def verify_camera_solver(backend):
|
| 126 |
+
"""Solve a known FP64 SPD system through the frozen sparse wrapper."""
|
| 127 |
+
from importlib.metadata import version
|
| 128 |
+
|
| 129 |
+
import torch
|
| 130 |
+
|
| 131 |
+
if version("nvidia-cudss-cu12") != "0.8.0.10":
|
| 132 |
+
raise RuntimeError("The frozen sparse wrapper requires cuDSS 0.8.0.10")
|
| 133 |
+
sys.path.insert(0, backend["droid_root"])
|
| 134 |
+
from cudss_solver import CuDSS
|
| 135 |
+
|
| 136 |
+
rows = torch.tensor([0, 1, 3, 5], device="cuda", dtype=torch.int32)
|
| 137 |
+
columns = torch.tensor([0, 0, 1, 1, 2], device="cuda", dtype=torch.int32)
|
| 138 |
+
values = torch.tensor([4.0, 1.0, 3.0, 1.0, 2.0], device="cuda", dtype=torch.float64)
|
| 139 |
+
rhs = torch.tensor([6.0, 10.0, 8.0], device="cuda", dtype=torch.float64)
|
| 140 |
+
solver = CuDSS(rows, columns, values, rhs)
|
| 141 |
+
try:
|
| 142 |
+
result = solver.solve()
|
| 143 |
+
solver.check()
|
| 144 |
+
torch.testing.assert_close(result, torch.tensor([1.0, 2.0, 3.0], device="cuda"), atol=1e-6, rtol=1e-6)
|
| 145 |
+
finally:
|
| 146 |
+
solver.close()
|
| 147 |
+
print('HAND_RUNTIME {"event":"fp64_sparse_solver_verified","cudss":"0.8.0.10"}', flush=True)
|
| 148 |
+
|
| 149 |
+
|
| 150 |
def build_camera(backend):
|
| 151 |
"""Build TensorRT plans with the validated precision and dynamic shapes."""
|
| 152 |
import ctypes
|
|
|
|
| 266 |
build_camera(json.loads(sys.argv[2]))
|
| 267 |
elif sys.argv[1] == "--check-contexts":
|
| 268 |
verify_camera_contexts(json.loads(sys.argv[2]))
|
| 269 |
+
elif sys.argv[1] == "--check-solver":
|
| 270 |
+
verify_camera_solver(json.loads(sys.argv[2]))
|
| 271 |
else:
|
| 272 |
+
raise ValueError("Expected --build, --check-contexts or --check-solver")
|
pipeline-source.tar.gz
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5d7d2b44502da0db87d01322d6fcd95bdf3c68b7a1302ba74309a8ecd63c3bb7
|
| 3 |
+
size 1873065
|
pipeline-version.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
-
"git_commit": "
|
| 3 |
-
"sha256": "
|
| 4 |
"preset": "abc_phases_schema_with_original_window_recovery",
|
| 5 |
"preset_date": "2026-09-25",
|
| 6 |
"engine": "lerobot.annotations.runtime",
|
|
|
|
| 1 |
{
|
| 2 |
+
"git_commit": "2022627082231d8c69d68bbfd59919952ff58c5c",
|
| 3 |
+
"sha256": "5d7d2b44502da0db87d01322d6fcd95bdf3c68b7a1302ba74309a8ecd63c3bb7",
|
| 4 |
"preset": "abc_phases_schema_with_original_window_recovery",
|
| 5 |
"preset_date": "2026-09-25",
|
| 6 |
"engine": "lerobot.annotations.runtime",
|
test_hand_actions.py
CHANGED
|
@@ -274,13 +274,20 @@ def test_gpu_setup_uses_isolated_offline_environments(monkeypatch):
|
|
| 274 |
hand_setup.prepare_camera_engines(
|
| 275 |
{"backend": {"droid_python": "/camera/python", "egohand_python": "/hand/python"}}
|
| 276 |
)
|
| 277 |
-
assert [command[0] for command, _ in calls] == [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 278 |
assert [environment["LD_LIBRARY_PATH"] for _, environment in calls] == [
|
| 279 |
"/hand/lib",
|
| 280 |
"/camera/lib",
|
| 281 |
"/camera/lib",
|
|
|
|
| 282 |
]
|
| 283 |
-
assert calls[
|
|
|
|
| 284 |
for _, environment in calls:
|
| 285 |
assert "HF_TOKEN" not in environment and "ANNOTATION_MANIFEST" not in environment
|
| 286 |
assert environment["HF_HUB_OFFLINE"] == environment["TRANSFORMERS_OFFLINE"] == "1"
|
|
|
|
| 274 |
hand_setup.prepare_camera_engines(
|
| 275 |
{"backend": {"droid_python": "/camera/python", "egohand_python": "/hand/python"}}
|
| 276 |
)
|
| 277 |
+
assert [command[0] for command, _ in calls] == [
|
| 278 |
+
"/hand/python",
|
| 279 |
+
"/camera/python",
|
| 280 |
+
"/camera/python",
|
| 281 |
+
"/camera/python",
|
| 282 |
+
]
|
| 283 |
assert [environment["LD_LIBRARY_PATH"] for _, environment in calls] == [
|
| 284 |
"/hand/lib",
|
| 285 |
"/camera/lib",
|
| 286 |
"/camera/lib",
|
| 287 |
+
"/camera/lib",
|
| 288 |
]
|
| 289 |
+
assert calls[1][0][2] == "--check-solver"
|
| 290 |
+
assert calls[3][0][2] == "--check-contexts"
|
| 291 |
for _, environment in calls:
|
| 292 |
assert "HF_TOKEN" not in environment and "ANNOTATION_MANIFEST" not in environment
|
| 293 |
assert environment["HF_HUB_OFFLINE"] == environment["TRANSFORMERS_OFFLINE"] == "1"
|