mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-11-03 06:51:20 +08:00
Refactor model runner initialization and input handling.
Added a memory model detection mechanism in `TinygradRunner` and adjusted input preparation logic based on the detected model type. Fixed the `TinygradRunner` constructor to correctly pass `frames` for TICI hardware, ensuring proper model initialization.
This commit is contained in:
@@ -49,7 +49,7 @@ class ModelState:
|
||||
self.full_features_20Hz = np.zeros((ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.FEATURE_LEN), dtype=np.float32)
|
||||
self.desire_20Hz = np.zeros((ModelConstants.FULL_HISTORY_BUFFER_LEN + 1, ModelConstants.DESIRE_LEN), dtype=np.float32)
|
||||
# Initialize model runner
|
||||
self.model_runner = TinygradRunner() if TICI else ONNXRunner(self.frames)
|
||||
self.model_runner = TinygradRunner(self.frames) if TICI else ONNXRunner(self.frames)
|
||||
|
||||
# img buffers are managed in openCL transform code
|
||||
self.numpy_inputs = {}
|
||||
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
from openpilot.system.hardware import TICI
|
||||
|
||||
#
|
||||
from tinygrad.tensor import Tensor
|
||||
from tinygrad.tensor import Tensor, dtypes
|
||||
from openpilot.selfdrive.modeld.runners.tinygrad_helpers import qcom_tensor_from_opencl_address
|
||||
from openpilot.selfdrive.modeld.runners.ort_helpers import make_onnx_cpu_runner, ORT_TYPES_TO_NP_TYPES
|
||||
import pickle
|
||||
@@ -65,13 +65,18 @@ class TinygradRunner(ModelRunner):
|
||||
|
||||
assert TICI or frames is not None, "TinygradRunner requires frames for non-TICI hardware"
|
||||
self.frames = frames
|
||||
self.is_memory_model = None # Use None to indicate that it hasn't been determined yet
|
||||
|
||||
def prepare_inputs(self, imgs_cl: dict[str, CLMem], numpy_inputs: dict[str, np.ndarray]) -> dict:
|
||||
if self.is_memory_model is None:
|
||||
self.is_memory_model = any(self.input_to_dtype[key] == dtypes.uint8 for key in imgs_cl)
|
||||
print(f"Memory model: {self.is_memory_model}")
|
||||
|
||||
# Initialize image tensors if not already done
|
||||
for key in imgs_cl:
|
||||
if TICI and key not in self.inputs:
|
||||
self.inputs[key] = qcom_tensor_from_opencl_address(imgs_cl[key].mem_address, self.input_shapes[key], dtype=self.input_to_dtype[key])
|
||||
elif not TICI:
|
||||
if TICI and self.is_memory_model and key not in self.inputs:
|
||||
self.inputs[key] = qcom_tensor_from_opencl_address(imgs_cl[key].mem_address, self.input_shapes[key], dtype=dtypes.uint8)
|
||||
elif not TICI or not self.is_memory_model:
|
||||
shape = self.frames[key].buffer_from_cl(imgs_cl[key]).reshape(self.input_shapes[key])
|
||||
self.inputs[key] = Tensor(shape, device=self.input_to_device[key], dtype=self.input_to_dtype[key]).realize()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user