move graph/search to engine (#4596)

This commit is contained in:
George Hotz
2024-05-14 23:12:59 -07:00
committed by GitHub
parent afa9753d39
commit ff64bcab69
28 changed files with 33 additions and 33 deletions

View File

@@ -93,7 +93,7 @@ sched = create_schedule([out])
for si in sched: print(si.ast[0].op) # NOTE: the first two convert it to CLANG
# DEBUGGING: print the compute ast as a tree
from tinygrad.features.graph import print_tree
from tinygrad.engine.graph import print_tree
print_tree(sched[-1].ast[0])
# NOTE: sched[-1].ast is the same as st_0 above

View File

@@ -4,12 +4,12 @@ from tinygrad import Tensor, nn
from tinygrad.ops import LoadOps, get_lazyop_info
from tinygrad.device import Device, Compiled
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.search import time_linearizer, beam_search, bufs_from_lin
from tinygrad.engine.search import time_linearizer, beam_search, bufs_from_lin
from tinygrad.helpers import ansilen, DEBUG, getenv
from tinygrad.shape.symbolic import sym_infer
from tinygrad.dtype import dtypes
from tinygrad.engine.schedule import create_schedule
from tinygrad.features.graph import print_tree
from tinygrad.engine.graph import print_tree
if __name__ == "__main__":
if getenv("HALF"):

View File

@@ -5,7 +5,7 @@ from tinygrad.nn import Linear
from tinygrad.tensor import Tensor
from tinygrad.nn.optim import Adam
from tinygrad.nn.state import get_parameters, get_state_dict, safe_save, safe_load, load_state_dict
from tinygrad.features.search import actions
from tinygrad.engine.search import actions
from extra.optimization.helpers import load_worlds, ast_str_to_lin, lin_to_feats, assert_same_lin
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.helpers import getenv

View File

@@ -14,7 +14,7 @@ from tinygrad.codegen.kernel import Opt, OptOps
# more stuff
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.search import actions
from tinygrad.engine.search import actions
from extra.optimization.helpers import lin_to_feats
from extra.optimization.pretrain_valuenet import ValueNet
from tinygrad.nn.optim import Adam

View File

@@ -1,7 +1,7 @@
import random
from tqdm import tqdm
from extra.optimization.helpers import load_worlds, ast_str_to_lin
from tinygrad.features.search import actions
from tinygrad.engine.search import actions
from tinygrad.codegen.linearizer import Linearizer
tactions = set()

View File

@@ -3,7 +3,7 @@ import numpy as np
import math, random
from tinygrad.tensor import Tensor
from tinygrad.nn.state import get_parameters, get_state_dict, safe_save, safe_load, load_state_dict
from tinygrad.features.search import actions, bufs_from_lin, time_linearizer, get_linearizer_actions
from tinygrad.engine.search import actions, bufs_from_lin, time_linearizer, get_linearizer_actions
from tinygrad.nn.optim import Adam
from extra.optimization.extract_policynet import PolicyNet
from extra.optimization.helpers import load_worlds, ast_str_to_lin, lin_to_feats

View File

@@ -1,6 +1,6 @@
from typing import List, Tuple
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.search import get_linearizer_actions, actions
from tinygrad.engine.search import get_linearizer_actions, actions
_net = None
def beam_q_estimate(beam:List[Tuple[Linearizer, float]]) -> List[Tuple[Linearizer, float]]:

View File

@@ -5,7 +5,7 @@ from tinygrad import dtypes
from tinygrad.helpers import BEAM, getenv
from tinygrad.device import Device, Compiled
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.search import time_linearizer, beam_search, bufs_from_lin
from tinygrad.engine.search import time_linearizer, beam_search, bufs_from_lin
if __name__ == '__main__':

View File

@@ -6,7 +6,7 @@ from copy import deepcopy
from tinygrad.helpers import getenv, colored
from tinygrad.tensor import Tensor
from tinygrad.nn.state import get_parameters, get_state_dict, safe_save, safe_load, load_state_dict
from tinygrad.features.search import bufs_from_lin, time_linearizer, actions, get_linearizer_actions
from tinygrad.engine.search import bufs_from_lin, time_linearizer, actions, get_linearizer_actions
from extra.optimization.helpers import load_worlds, ast_str_to_lin, lin_to_feats
from extra.optimization.extract_policynet import PolicyNet
from extra.optimization.pretrain_valuenet import ValueNet

View File

@@ -1,5 +1,5 @@
from extra.optimization.helpers import load_worlds, ast_str_to_lin
from tinygrad.features.search import bufs_from_lin, time_linearizer, get_linearizer_actions
from tinygrad.engine.search import bufs_from_lin, time_linearizer, get_linearizer_actions
if __name__ == "__main__":
ast_strs = load_worlds()

View File

@@ -3,7 +3,7 @@ from tinygrad import Device, dtypes, Tensor
from tinygrad.helpers import to_mv
from tinygrad.engine.schedule import create_schedule
from tinygrad.runtime.ops_nv import NVDevice, HWComputeQueue
from tinygrad.features.search import Opt, OptOps
from tinygrad.engine.search import Opt, OptOps
from test.test_linearizer_failures import helper_test_lin
from tinygrad.codegen.linearizer import Linearizer

View File

@@ -3,7 +3,7 @@ import unittest
from tinygrad.tensor import Tensor
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.renderer.cstyle import OpenCLRenderer
from tinygrad.features.graph import graph_uops
from tinygrad.engine.graph import graph_uops
from tinygrad.engine.schedule import create_schedule
from tinygrad.nn import Conv2d

View File

@@ -7,8 +7,8 @@ from extra.optimization.helpers import load_worlds, ast_str_to_lin
from tinygrad import Tensor, Device, dtypes
from tinygrad.codegen.linearizer import Linearizer, UOp
from tinygrad.codegen.kernel import Opt, OptOps
from tinygrad.features.search import get_linearizer_actions, bufs_from_lin
from tinygrad.features.graph import print_tree
from tinygrad.engine.search import get_linearizer_actions, bufs_from_lin
from tinygrad.engine.graph import print_tree
from tinygrad.engine.realize import CompiledRunner
from tinygrad.helpers import getenv, from_mv, prod, colored, Context, DEBUG
from tinygrad.ops import LazyOp, UnaryOps, BufferOps

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
import subprocess, pickle, shlex, sys
from typing import Dict, List, Tuple
from tinygrad.features.graph import print_tree
from tinygrad.engine.graph import print_tree
from tinygrad.helpers import colored
from tinygrad.ops import LazyOp

View File

@@ -1,6 +1,6 @@
from tinygrad import Device
from tinygrad.helpers import getenv, DEBUG, BEAM
from tinygrad.features.search import beam_search, time_linearizer, bufs_from_lin
from tinygrad.engine.search import beam_search, time_linearizer, bufs_from_lin
from extra.optimization.helpers import load_worlds, ast_str_to_lin
if __name__ == "__main__":

View File

@@ -1,7 +1,7 @@
from tinygrad import Device
from tinygrad.helpers import getenv, colored
from extra.optimization.helpers import load_worlds, ast_str_to_lin
from tinygrad.features.search import bufs_from_lin
from tinygrad.engine.search import bufs_from_lin
# move to helpers?
def colorize_float(x):

View File

@@ -3,7 +3,7 @@ from tinygrad import Device
from tinygrad.engine.realize import CompiledRunner
from tinygrad.helpers import getenv, colored
from extra.optimization.helpers import load_worlds, ast_str_to_lin
from tinygrad.features.search import bufs_from_lin
from tinygrad.engine.search import bufs_from_lin
from tinygrad.runtime.ops_cuda import PTXCompiler, PTXRenderer, CUDACompiler
# move to helpers?

View File

@@ -4,8 +4,8 @@ from extra.optimization.helpers import kern_str_to_lin
from test.external.fuzz_linearizer import compare_linearizer
from tinygrad.helpers import colored
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.graph import print_tree
from tinygrad.features.search import time_linearizer
from tinygrad.engine.graph import print_tree
from tinygrad.engine.search import time_linearizer
# Use this with the LOGKERN options to verify that all executed kernels are valid and evaluate to the same ground truth results

View File

@@ -322,7 +322,7 @@ class TestLinearizer(unittest.TestCase):
np.testing.assert_allclose(result, golden_result, atol=0.1, rtol=0.15)
# check that get_linearizer_actions produces all 9 options
from tinygrad.features.search import get_linearizer_actions
from tinygrad.engine.search import get_linearizer_actions
tc_actions = [k for i, k in get_linearizer_actions(Linearizer(realized_ast), False).items() if k.applied_opts[0].op == OptOps.TC]
assert len(tc_actions) == 9, f"get_linearizer_actions should contain 9 possible TC actions, only got {len(tc_actions)}"

View File

@@ -3,7 +3,7 @@ import unittest, random
import numpy as np
from tinygrad.codegen.kernel import KernelOptError
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.search import Opt, OptOps
from tinygrad.engine.search import Opt, OptOps
from tinygrad import Device, dtypes, Tensor
from tinygrad.helpers import CI
from test.external.fuzz_linearizer import compare_linearizer

View File

@@ -3,8 +3,8 @@ import unittest
from tinygrad import dtypes, Device
from tinygrad.helpers import CI
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.search import Opt, OptOps
from tinygrad.features.search import time_linearizer, bufs_from_lin
from tinygrad.engine.search import Opt, OptOps
from tinygrad.engine.search import time_linearizer, bufs_from_lin
# stuff needed to unpack a kernel
from tinygrad.ops import LazyOp, BinaryOps, UnaryOps, ReduceOps, BufferOps, MemBuffer, ConstBuffer

View File

@@ -10,7 +10,7 @@ from tinygrad.tensor import Tensor
from tinygrad.ops import BinaryOps, LoadOps, ReduceOps
from tinygrad.helpers import DEBUG, flatten
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.features.graph import print_tree
from tinygrad.engine.graph import print_tree
from tinygrad.engine.schedule import create_schedule
from tinygrad import nn, dtypes
from test.helpers import is_dtype_supported

View File

@@ -3,7 +3,7 @@ import unittest
from tinygrad.codegen.kernel import Opt, OptOps
from tinygrad.codegen.linearizer import Linearizer
from tinygrad.engine.schedule import create_schedule
from tinygrad.features.search import time_linearizer, bufs_from_lin, actions
from tinygrad.engine.search import time_linearizer, bufs_from_lin, actions
from tinygrad.device import Device, Buffer
from tinygrad.ops import LoadOps, BufferOps
from tinygrad.tensor import Tensor
@@ -48,7 +48,7 @@ class TestBEAM(unittest.TestCase):
a = Tensor.rand(4, 3)
b = Tensor.rand(3)
realized_ast, _ = helper_realized_ast(a @ b)
from tinygrad.features.search import get_linearizer_actions
from tinygrad.engine.search import get_linearizer_actions
lins = get_linearizer_actions(Linearizer(realized_ast), False).values()
# ensure amt=0 are not duplicated

View File

@@ -141,7 +141,7 @@ class UOpGraph:
def globals(self) -> List[Tuple[int, bool]]: return [x.arg for x in self.uops if x.uop is UOps.DEFINE_GLOBAL]
def graph(self):
from tinygrad.features.graph import graph_uops
from tinygrad.engine.graph import graph_uops
graph_uops(self.uops)
def print(self):

View File

@@ -14,14 +14,14 @@ from tinygrad.engine.schedule import ScheduleItem
logkerns, logkerns_level = open(getenv("LOGKERNS", ""), "a") if getenv("LOGKERNS", "") else None, getenv("LOGKERNS_LEVEL", 1)
def get_linearizer(renderer:Renderer, ast:Tuple[LazyOp, ...]) -> Linearizer:
if DEBUG >= 3:
from tinygrad.features.graph import print_tree
from tinygrad.engine.graph import print_tree
for op in ast: print_tree(op)
k = Linearizer(*ast, opts=renderer)
k.required_optimizations()
if not NOOPT:
if not (used_tensor_cores:=k.apply_tensor_cores(getenv("TC", 1))): k.hand_coded_optimizations()
if BEAM >= 1:
from tinygrad.features.search import beam_search, time_linearizer, bufs_from_lin
from tinygrad.engine.search import beam_search, time_linearizer, bufs_from_lin
kb, k_opt = Linearizer(*ast, opts=renderer), k
kb.required_optimizations()
rawbufs = bufs_from_lin(kb, allocate=False)
@@ -67,7 +67,7 @@ class CompiledRunner(Runner):
global_size, local_size = self.p.launch_dims(var_vals)
if global_size is not None and local_size is None and all_int(self.p.global_size): # type: ignore[arg-type]
# TODO: this is copied from get_program
from tinygrad.features.search import optimize_local_size
from tinygrad.engine.search import optimize_local_size
local_size = optimize_local_size(self.clprg, global_size, rawbufs)
global_size = [g//l if g%l == 0 else g/l for g,l in zip(global_size, local_size)]
self.p = replace(self.p, global_size=global_size, local_size=local_size)

View File

@@ -3,7 +3,7 @@ from collections import defaultdict, deque
from dataclasses import dataclass
from typing import Tuple, List, Dict, Optional, Set, DefaultDict
from tinygrad.ops import LoadOps, BufferOps, LazyOp, ReduceOps, ConstBuffer, MemBuffer, UNSAFE_PAD_OPS, UnaryOps
from tinygrad.features.graph import log_lazybuffer, realized_lazybuffer
from tinygrad.engine.graph import log_lazybuffer, realized_lazybuffer
from tinygrad.helpers import GRAPH, DEBUG, MULTIOUTPUT, SAVE_SCHEDULE, GlobalCounters, prod, dedup, all_int, merge_dicts, getenv
from tinygrad.shape.symbolic import Variable
from tinygrad.dtype import ImageDType, dtypes