mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-09-18 12:33:43 +08:00
6080cc6168
* Ship precompiled eGPU model and camera warps Compile f78ed37d-afad-4dbc-8050-40ea885eedde/12864 through xx/ml_tools/openpilot_compile using the pinned tinygrad version. * Precompile the existing master driving model Use the unchanged master ONNX (SHA-256 6fee5937923c74848df4a63f6239eb6331c6274dd4bdb7a5d6ec0388a8b543d5) instead of updating the trained model. * Compile camera warps on device * Remove obsolete ONNX chunking and big model build check * Chunk model artifacts only during release packaging * Require model and camera warps for Chestnut readiness * Recompile precompiled CPU helpers for the runtime host * Ship the eGPU model with an ARM submission helper * Exempt model pickles from the build product size limit
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
import io
|
|
import pickle
|
|
import struct
|
|
from pathlib import Path
|
|
|
|
from openpilot.common.file_chunker import get_manifest_path
|
|
from openpilot.common.hardware.usb import CHESTNUT_USB_PRODUCT, USB_DEVICES_PATH, is_chestnut_usb_id
|
|
|
|
MODELS_DIR = Path(__file__).resolve().parent / 'models'
|
|
|
|
|
|
def modeld_pkl_path(chestnut: bool):
|
|
prefix = 'big_' if chestnut else ''
|
|
return MODELS_DIR / f'{prefix}driving_tinygrad.pkl'
|
|
|
|
def load_oob(f):
|
|
opcodes = f.read(struct.unpack('<q', f.read(8))[0])
|
|
def buffers():
|
|
while (h := f.read(8)):
|
|
pb = pickle.PickleBuffer(bytearray(struct.unpack('<q', h)[0]))
|
|
if f.readinto(pb) != pb.raw().nbytes:
|
|
raise EOFError("incomplete model buffer")
|
|
yield pb
|
|
return pickle.load(io.BytesIO(opcodes), buffers=buffers())
|
|
|
|
def chestnut_present() -> bool:
|
|
for d in USB_DEVICES_PATH.glob("*"):
|
|
try:
|
|
usb_id = (int((d / "idVendor").read_text(), 16), int((d / "idProduct").read_text(), 16))
|
|
product = (d / "product").read_text().strip()
|
|
if is_chestnut_usb_id(*usb_id) and product == CHESTNUT_USB_PRODUCT:
|
|
return True
|
|
except Exception:
|
|
pass
|
|
return False
|
|
|
|
def chestnut_compiled() -> bool:
|
|
path = modeld_pkl_path(chestnut=True)
|
|
return (path.is_file() or Path(get_manifest_path(path)).is_file()) and all(
|
|
(MODELS_DIR / f'big_driving_warp_{size}_tinygrad.pkl').is_file() for size in ('1344x760', '1928x1208'))
|