From 81d20d304f9a7c2b859601b1f753b9eacd646ea4 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:50:16 -0500 Subject: [PATCH] gpu --- selfdrive/assets/icons_mici/egpu_orange.png | Bin 10876 -> 13079 bytes selfdrive/modeld/modeld.py | 29 +++++++++++++----- selfdrive/modeld/tests/test_usbgpu_helpers.py | 22 ++++++------- selfdrive/ui/mici/onroad/hud_renderer.py | 2 +- tinygrad_repo/tinygrad/runtime/ops_amd.py | 8 +++-- 5 files changed, 37 insertions(+), 24 deletions(-) diff --git a/selfdrive/assets/icons_mici/egpu_orange.png b/selfdrive/assets/icons_mici/egpu_orange.png index bdad8546765704c89053a27f626bd6fbb025988b..d8ad253f56028e6a269391f45edfd0f24bcaf6eb 100644 GIT binary patch literal 13079 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 literal 10876 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 Nz^37&!R3wNoS5?` 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 dict[str, np.ndarray] | None: + inputs: dict[str, np.ndarray], prepare_only: bool, + after_enqueue: Callable[[], None] | None = None) -> dict[str, np.ndarray] | None: frames: dict[str, Tensor] = {} for key, buf in bufs.items(): ptr = np.frombuffer(buf.data, dtype=np.uint8).ctypes.data @@ -615,11 +620,12 @@ class ModelState: img=img, big_img=big_img, ) + if after_enqueue is not None: + after_enqueue() outputs = [output.numpy().flatten() for output in output_tensors] if self.uses_external_gpu and any(not np.isfinite(output).all() for output in outputs): - cloudlog.error("external GPU model output not finite, dropping frame") - return None + raise RuntimeError("external GPU model output not finite") if self.model_type == "supercombo": model_output = outputs[0] @@ -921,7 +927,17 @@ def main(demo=False): mt1 = time.perf_counter() try: - model_output = model.run(bufs, transforms, inputs, prepare_only) + send_chestnut = ( + chestnut_state is not None and + run_count % round(ModelConstants.MODEL_FREQ / SERVICE_LIST["chestnutState"].frequency) == 0 + ) + model_output = model.run( + bufs, + transforms, + inputs, + prepare_only, + chestnut_state.send if send_chestnut else None, + ) except Exception: if not external_gpu_active or small_model is None: raise @@ -984,9 +1000,6 @@ def main(demo=False): if sm.updated['starpilotPlan']: starpilot_toggles = get_starpilot_toggles(sm) - if chestnut_state is not None and run_count % round(ModelConstants.MODEL_FREQ / SERVICE_LIST["chestnutState"].frequency) == 0: - chestnut_state.send() - if __name__ == "__main__": try: import argparse diff --git a/selfdrive/modeld/tests/test_usbgpu_helpers.py b/selfdrive/modeld/tests/test_usbgpu_helpers.py index cd3839dadd..0e643941c2 100644 --- a/selfdrive/modeld/tests/test_usbgpu_helpers.py +++ b/selfdrive/modeld/tests/test_usbgpu_helpers.py @@ -3,6 +3,7 @@ from types import MethodType from types import SimpleNamespace import numpy as np +import pytest from openpilot.selfdrive.modeld import modeld from openpilot.selfdrive.modeld.helpers import dump_oob, load_oob, tinygrad_dev_config @@ -37,17 +38,18 @@ def test_external_gpu_uses_a_longer_load_watchdog(): assert modeld.BIG_MODEL_RUN_WAIT_TIMEOUT_MS == 3000 -def test_external_gpu_signal_wait_matches_upstream_busy_poll(): +def test_external_gpu_signal_wait_yields_between_usb_polls(monkeypatch): from tinygrad.runtime import ops_amd sleeps = [] + monkeypatch.setattr(ops_amd.time, "sleep", sleeps.append) signal = ops_amd.AMDSignal.__new__(ops_amd.AMDSignal) signal.should_return = False - signal.owner = SimpleNamespace(is_usb=lambda: True, iface=SimpleNamespace(sleep=sleeps.append)) + signal.owner = SimpleNamespace(is_usb=lambda: True, iface=SimpleNamespace(sleep=lambda _: None)) signal._sleep(0) - assert sleeps == [] + assert sleeps == [ops_amd.AMD_USB_POLL_US / 1e6] def test_native_amd_signal_keeps_existing_short_wait_behavior(): @@ -201,7 +203,7 @@ def test_external_gpu_load_finishes_before_native_model_can_start(monkeypatch): ] -def test_external_gpu_nonfinite_outputs_are_dropped_without_escalating(monkeypatch): +def test_external_gpu_nonfinite_outputs_trigger_fallback(monkeypatch): class FakeTensor: @staticmethod def from_blob(*_args, **_kwargs): @@ -235,13 +237,7 @@ def test_external_gpu_nonfinite_outputs_are_dropped_without_escalating(monkeypat state.image_history_pipeline = modeld.IMAGE_HISTORY_IN_POLICY state.warp_enqueue = lambda **_kwargs: object() state.run_policy = lambda **_kwargs: (FakeOutput(),) - state._reset_state = MethodType( - lambda self: (_ for _ in ()).throw(AssertionError("upstream does not reset or escalate transient non-finite output")), - state, - ) - monkeypatch.setattr(modeld, "Tensor", FakeTensor) - monkeypatch.setattr(modeld.cloudlog, "error", lambda *_args, **_kwargs: None) buffers = { "img": SimpleNamespace(data=bytearray(4)), "big_img": SimpleNamespace(data=bytearray(4)), @@ -252,8 +248,10 @@ def test_external_gpu_nonfinite_outputs_are_dropped_without_escalating(monkeypat } inputs = {"desire_pulse": np.zeros(8, dtype=np.float32)} - for _ in range(10): - assert state.run(buffers, transforms, inputs, False) is None + callbacks = [] + with pytest.raises(RuntimeError, match="external GPU model output not finite"): + state.run(buffers, transforms, inputs, False, lambda: callbacks.append("sent")) + assert callbacks == ["sent"] def test_out_of_band_artifact_round_trip(): diff --git a/selfdrive/ui/mici/onroad/hud_renderer.py b/selfdrive/ui/mici/onroad/hud_renderer.py index 7ab54a152a..49dfd0e2fb 100644 --- a/selfdrive/ui/mici/onroad/hud_renderer.py +++ b/selfdrive/ui/mici/onroad/hud_renderer.py @@ -158,7 +158,7 @@ class HudRenderer(Widget): self._txt_exclamation_point: rl.Texture = gui_app.texture('icons_mici/exclamation_point.png', 44, 44) self._txt_egpu_loading: rl.Texture = gui_app.texture('icons_mici/egpu_loading.png', 60, 44) self._txt_egpu_green: rl.Texture = gui_app.texture('icons_mici/egpu_green.png', 60, 44) - self._txt_egpu_orange: rl.Texture = gui_app.texture('icons_mici/egpu_orange.png', 60, 44) + self._txt_egpu_orange: rl.Texture = gui_app.texture('icons_mici/egpu_orange.png', 75, 44) self._txt_egpu_crossed: rl.Texture = gui_app.texture('icons_mici/egpu_crossed.png', 60, 52) self._egpu_icon: rl.Texture | None = None diff --git a/tinygrad_repo/tinygrad/runtime/ops_amd.py b/tinygrad_repo/tinygrad/runtime/ops_amd.py index 7404a1fca3..a9248428b2 100644 --- a/tinygrad_repo/tinygrad/runtime/ops_amd.py +++ b/tinygrad_repo/tinygrad/runtime/ops_amd.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import cast -import os, ctypes, struct, hashlib, functools, importlib, mmap, errno, array, contextlib, sys, weakref, itertools, collections, atexit +import os, ctypes, struct, hashlib, functools, importlib, mmap, errno, array, contextlib, sys, weakref, itertools, collections, atexit, time assert sys.platform != 'win32' from dataclasses import dataclass from tinygrad.runtime.support.hcq import HCQCompiled, HCQAllocator, HCQBuffer, HWQueue, CLikeArgsState, HCQSignal, HCQProgram, FileIOInterface @@ -25,6 +25,7 @@ SQTT = ContextVar("SQTT", abs(VIZ.value)>=2) SQTT_ITRACE_SE_MASK, SQTT_LIMIT_SE, SQTT_SIMD_SEL, SQTT_TOKEN_EXCLUDE = \ ContextVar("SQTT_ITRACE_SE_MASK", 0b11), ContextVar("SQTT_LIMIT_SE", 0), ContextVar("SQTT_SIMD_SEL", 0), ContextVar("SQTT_TOKEN_EXCLUDE", 0) PMC = ContextVar("PMC", abs(VIZ.value)>=2) +AMD_USB_POLL_US = getenv("AMD_USB_POLL_US", 500) # microseconds to sleep between USB signal polls. 0 disables EVENT_INDEX_PARTIAL_FLUSH = 4 # based on a comment in nvd.h WAIT_REG_MEM_FUNCTION_EQ = 3 # == WAIT_REG_MEM_FUNCTION_NEQ = 4 # != @@ -45,8 +46,9 @@ class AMDSignal(HCQSignal): def __init__(self, *args, **kwargs): super().__init__(*args, **{**kwargs, 'timestamp_divider': 100}) def _sleep(self, time_spent_since_last_sleep_ms:int): - # Reasonable to sleep for long workloads (which take more than 200ms) and only timeline signals. - if time_spent_since_last_sleep_ms > 200 and self.owner is not None: self.owner.iface.sleep(200) + # USB signals live in VRAM across the link, so yield between polls. Native AMD only blocks after 200 ms. + if self.owner is not None and self.owner.is_usb() and AMD_USB_POLL_US: time.sleep(AMD_USB_POLL_US / 1e6) + elif time_spent_since_last_sleep_ms > 200 and self.owner is not None: self.owner.iface.sleep(200) class AMDComputeQueue(HWQueue): def __init__(self, dev:AMDDevice):