From c8d0f68763c09f612112f8946b16af4ede71960f Mon Sep 17 00:00:00 2001 From: uuuvn <83587632+uuuvn@users.noreply.github.com> Date: Tue, 24 Jun 2025 21:15:09 +0000 Subject: [PATCH] Weaker renderer validation in remote (#10964) ``` training bert training on ['REMOTE:0', 'REMOTE:1', 'REMOTE:2', 'REMOTE:3', 'REMOTE:4', 'REMOTE:5'] Traceback (most recent call last): File "/home/uuuvn/src/tinygrad/examples/mlperf/model_train.py", line 1300, in with Profiling(enabled=getenv("PYPROFILE")): globals()[nm]() ^^^^^^^^^^^^^^^ File "/home/uuuvn/src/tinygrad/examples/mlperf/model_train.py", line 975, in train_bert for x in GPUS: Device[x] ~~~~~~^^^ File "/home/uuuvn/src/tinygrad/tinygrad/device.py", line 22, in __getitem__ def __getitem__(self, ix:str) -> Compiled: return self.__get_canonicalized_item(self.canonicalize(ix)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/uuuvn/src/tinygrad/tinygrad/device.py", line 28, in __get_canonicalized_item ret = [cls for cname, cls in inspect.getmembers(importlib.import_module(f'{base}.runtime.ops_{x}')) \ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/uuuvn/src/tinygrad/tinygrad/runtime/ops_remote.py", line 417, in __init__ if not renderer[0].startswith("tinygrad.renderer.") or not renderer[1].endswith("Renderer"): raise RuntimeError(f"bad renderer {renderer}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: bad renderer ('tinygrad.runtime.ops_null', 'NullRenderer', ()) ``` --- tinygrad/runtime/ops_remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tinygrad/runtime/ops_remote.py b/tinygrad/runtime/ops_remote.py index 560ee99c4f..531bbb2537 100644 --- a/tinygrad/runtime/ops_remote.py +++ b/tinygrad/runtime/ops_remote.py @@ -366,7 +366,7 @@ class RemoteDevice(Compiled): if DEBUG >= 1: print(f"remote has device {self.properties.real_device}") # TODO: how to we have BEAM be cached on the backend? this should just send a specification of the compute. rethink what goes in Renderer renderer = self.properties.renderer - if not renderer[0].startswith("tinygrad.renderer.") or not renderer[1].endswith("Renderer"): raise RuntimeError(f"bad renderer {renderer}") + if not renderer[0].startswith("tinygrad.") or not renderer[1].endswith("Renderer"): raise RuntimeError(f"bad renderer {renderer}") renderer_class = fromimport(renderer[0], renderer[1]) # TODO: is this secure? if not issubclass(renderer_class, Renderer): raise RuntimeError(f"renderer isn't a Renderer {renderer}") renderer_instance = renderer_class(*renderer[2])