From 1b133faaab7a5b5b1d40f30bcd6dc70390340230 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Fri, 9 Jun 2023 10:11:46 +0000 Subject: [PATCH 01/36] Add tests --- dreamstream/tensor.py | 127 +++++++++++++++++++++++++++++----- tests/test_stream_metadata.py | 35 ++++++++++ 2 files changed, 146 insertions(+), 16 deletions(-) create mode 100644 tests/test_stream_metadata.py diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index e8c6124..6e33013 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -37,17 +37,106 @@ def recouple(func, tensor, *args, **kwargs): return as_stream_tensor(data=tensor, meta=meta, names=names) -class StreamMetadata: +class LazyProxy(object): + """A proxy class that lazily instantiates an object of type cls with arguments *args and **kwargs.""" + + def __init__(self, cls, *args, **kwargs): + self.__dict__["_cls"] = cls + self.__dict__["_args"] = args + self.__dict__["_kwargs"] = kwargs + self.__dict__["_obj"] = None + + def __getattr__(self, name): + # print("Called: __getattr__", name) + if self.__dict__["_obj"] is None: + self.__init_obj() + + return getattr(self.__dict__["_obj"], name) + + def __setattr__(self, name, value): + # print("Called: __setattr__", name, value) + if self.__dict__["_obj"] is None: + self.__init_obj() + + setattr(self.__dict__["_obj"], name, value) + + def __getitem__(self, key): + # print("Called: __getitem__", key) + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__getitem__(key) + + def __copy__(self): + # print("Called: __copy__") + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__copy__() + + def __eq__(self, other): + # print("Called: __eq__", other) + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__eq__(other) + + def __len__(self): + # print("Called: __len__") + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__len__() + + def __repr__(self): + # print("Called: __repr__") + if self.__dict__["_obj"] is None: + return f"LazyProxy({self.__dict__['_cls'].__name__}, {self.__dict__['_args']}, {self.__dict__['_kwargs']})" + return self.__dict__["_obj"].__repr__() + + def __init_obj(self): + # print("Called: __init_obj") + self.__dict__["_obj"] = object.__new__(self.__dict__["_cls"]) + self.__dict__["_obj"].__init__(*self.__dict__["_args"], **self.__dict__["_kwargs"]) + + +class LazyInit(object): + """A class that lazily initializes its attributes.""" + + def __new__(cls, *args, **kwargs): + return LazyProxy(cls, *args, **kwargs) + + +class StreamMetadata(LazyInit): """Metadata associated with a batch of streamed input tensors.""" + __slots__ = [ + "ids", + "_sos", + "_eos", + "_lengths", + "_min_length", + "_max_length", + "_lengths_updated", + "_any_starting", + "_any_ending", + "_all_starting", + "_all_ending", + "_any_starting_or_ending", + "_all_starting_and_ending", + "_sos_or_eos_updated", + ] + def __init__( self, ids: Union[str, List[str]], sos: Union[bool, List[bool], torch.BoolTensor], eos: Union[bool, List[bool], torch.BoolTensor], lengths: Union[int, List[int], torch.IntTensor], + _copy_on_init: bool = False, ): - # TODO: Make initialization lazy such that it only happens when the StreamMetadata is actually used. + super().__init__() + if isinstance(ids, str): ids = [ids] if isinstance(lengths, int): @@ -60,25 +149,32 @@ def __init__( if not len(ids) == len(lengths) == len(sos) == len(eos): raise ValueError("ids, lengths, sos and eos must have the same length.") - sos = torch.as_tensor(sos, dtype=torch.bool) - eos = torch.as_tensor(eos, dtype=torch.bool) - lengths = torch.as_tensor(lengths, dtype=torch.int) + sos_tensor = torch.as_tensor(sos, dtype=torch.bool) + eos_tensor = torch.as_tensor(eos, dtype=torch.bool) + lengths_tensor = torch.as_tensor(lengths, dtype=torch.int) + + if _copy_on_init: + if sos_tensor is sos: + sos_tensor = sos_tensor.clone() + if eos_tensor is eos: + eos_tensor = eos_tensor.clone() + if lengths_tensor is lengths: + lengths_tensor = lengths_tensor.clone() if not all(isinstance(i, str) for i in ids): raise ValueError("ids must be a list of strings.") - if sos.ndim > 1 or eos.ndim > 1 or lengths.ndim > 1: + if lengths_tensor.ndim > 1 or eos_tensor.ndim > 1 or lengths_tensor.ndim > 1: raise ValueError("sos, eos and lengths must be 1-dimensional.") self.ids = ids - self._sos = sos - self._eos = eos - self._lengths = lengths + self._sos = sos_tensor + self._eos = eos_tensor + self._lengths = lengths_tensor self._min_length = None self._max_length = None self._lengths_updated = True - self._update_lengths() self._any_starting = None self._any_ending = None @@ -87,7 +183,6 @@ def __init__( self._any_starting_or_ending = None self._all_starting_and_ending = None self._sos_or_eos_updated = True - self._update_logicals() @property def sos(self) -> torch.BoolTensor: @@ -203,10 +298,11 @@ def _update_logicals(self): def __copy__(self): """Return a deep copy of the StreamMetadata object.""" return StreamMetadata( - ids=deepcopy(self.ids), - sos=self.sos.clone(), - eos=self.eos.clone(), - lengths=self.lengths.clone(), + ids=self.ids, + sos=self.sos, + eos=self.eos, + lengths=self.lengths, + _copy_on_init=True, ) def __eq__(self, other: "StreamMetadata") -> bool: @@ -246,7 +342,6 @@ def __repr__(self) -> str: i += 1 short_ids_repr = ", ".join(repr_ids) + ", ..., " + repr(last) - print(short_ids_repr, len(short_ids_repr)) else: short_ids_repr = repr(self.ids) diff --git a/tests/test_stream_metadata.py b/tests/test_stream_metadata.py new file mode 100644 index 0000000..ff6e314 --- /dev/null +++ b/tests/test_stream_metadata.py @@ -0,0 +1,35 @@ +from dreamstream.tensor import LazyInit, LazyProxy + + +class TestObject(): + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + +class LazyTestObject(LazyInit): + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + +class TestLazy(): + def test_lazy_proxy_laziness(self): + lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) + + assert lazy_proxy.__dict__["_cls"] is TestObject + assert lazy_proxy.__dict__["_args"] == (1, 2, 3) + assert lazy_proxy.__dict__["_kwargs"] == {'a': 1, 'b': 2, 'c': 3} + assert lazy_proxy.__dict__["_obj"] is None + + def test_lazy_proxy_initialization(self): + lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) + _ = lazy_proxy.args # trigger initialization + + assert isinstance(lazy_proxy.__dict__["_obj"], TestObject) + assert lazy_proxy.__dict__["_obj"].args == (1, 2, 3) + assert lazy_proxy.__dict__["_obj"].kwargs == {'a': 1, 'b': 2, 'c': 3} + + def test_lazy_init(self): + lazy_init = LazyTestObject(1, 2, 3, a=1, b=2, c=3) + assert isinstance(lazy_init, LazyProxy) From b30cd57af93aa88c88c4e3c84f4e8b4493b40b52 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Fri, 9 Jun 2023 10:19:00 +0000 Subject: [PATCH 02/36] Remove prints --- dreamstream/tensor.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 6e33013..64b3bb4 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -47,55 +47,47 @@ def __init__(self, cls, *args, **kwargs): self.__dict__["_obj"] = None def __getattr__(self, name): - # print("Called: __getattr__", name) if self.__dict__["_obj"] is None: self.__init_obj() return getattr(self.__dict__["_obj"], name) def __setattr__(self, name, value): - # print("Called: __setattr__", name, value) if self.__dict__["_obj"] is None: self.__init_obj() setattr(self.__dict__["_obj"], name, value) def __getitem__(self, key): - # print("Called: __getitem__", key) if self.__dict__["_obj"] is None: self.__init_obj() return self.__dict__["_obj"].__getitem__(key) def __copy__(self): - # print("Called: __copy__") if self.__dict__["_obj"] is None: self.__init_obj() return self.__dict__["_obj"].__copy__() def __eq__(self, other): - # print("Called: __eq__", other) if self.__dict__["_obj"] is None: self.__init_obj() return self.__dict__["_obj"].__eq__(other) def __len__(self): - # print("Called: __len__") if self.__dict__["_obj"] is None: self.__init_obj() return self.__dict__["_obj"].__len__() def __repr__(self): - # print("Called: __repr__") if self.__dict__["_obj"] is None: return f"LazyProxy({self.__dict__['_cls'].__name__}, {self.__dict__['_args']}, {self.__dict__['_kwargs']})" return self.__dict__["_obj"].__repr__() def __init_obj(self): - # print("Called: __init_obj") self.__dict__["_obj"] = object.__new__(self.__dict__["_cls"]) self.__dict__["_obj"].__init__(*self.__dict__["_args"], **self.__dict__["_kwargs"]) From 894c8f73c86f02465a90d382cf601a2bf29a8c1f Mon Sep 17 00:00:00 2001 From: borgholt Date: Mon, 19 Jun 2023 09:26:07 +0000 Subject: [PATCH 03/36] Conv module update and scraping --- README.md | 1 + ...alid-pointwise-ops-2023_06_09-10_06_02.txt | 210 ++++++++++++++++++ ...alid-pointwise-ops-2023_06_09-10_06_02.txt | 145 ++++++++++++ doc_scrape/pointwise-ops.py | 195 ++++++++++++++++ dreamstream/__init__.py | 4 +- dreamstream/func_coverage.py | 102 ++++++++- dreamstream/overrides.py | 36 ++- dreamstream/patches/conv.py | 15 +- dreamstream/tensor.py | 168 ++++++++++---- dreamstream/tests/test.pkl | Bin 0 -> 463693 bytes ...conv1d_2.py => test_conv1d_mixed_batch.py} | 0 dreamstream/tests/test_conv1d_subsample.py | 80 +++++++ dreamstream/utils/dummies.py | 43 ++++ dreamstream/utils/listloaders.py | 21 ++ tests/test_tensor.py | 2 + 15 files changed, 960 insertions(+), 62 deletions(-) create mode 100644 doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt create mode 100644 doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt create mode 100644 doc_scrape/pointwise-ops.py create mode 100644 dreamstream/tests/test.pkl rename dreamstream/tests/{test_conv1d_2.py => test_conv1d_mixed_batch.py} (100%) create mode 100644 dreamstream/tests/test_conv1d_subsample.py create mode 100644 dreamstream/utils/dummies.py create mode 100644 dreamstream/utils/listloaders.py diff --git a/README.md b/README.md index 7ec1312..cf55b60 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ PyTorch models are typically trained and evaluated on batches of data. However, - operations that reduce the batch dimension (e.g. `torch.sum`): Reduce also the attributes along the batch dim. This happens in losses. - operations that create new dimensions: Adjust `batch_dim` and `stream_dim` accordlingly. This could happen anywhere. - Seperate arguments to forward method: We can change all patched forward methods to take additional arguments, but, by default they won't be given (and we have no control). +- Support loading/saving of named tensors by custom `__reduce__` or `__reduce_ex__`. ## Can we use DreamStream for training? diff --git a/doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt b/doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt new file mode 100644 index 0000000..ca00a3c --- /dev/null +++ b/doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt @@ -0,0 +1,210 @@ +abs +Tensor.abs +absolute +Tensor.absolute +acos +Tensor.acos +arccos +Tensor.arccos +acosh +Tensor.acosh +arccosh +Tensor.arccosh +add +Tensor.add +addcdiv +Tensor.addcdiv +addcmul +Tensor.addcmul +angle +Tensor.angle +asin +Tensor.asin +arcsin +Tensor.arcsin +asinh +Tensor.asinh +arcsinh +Tensor.arcsinh +atan +Tensor.atan +arctan +Tensor.arctan +atanh +Tensor.atanh +arctanh +Tensor.arctanh +atan2 +Tensor.atan2 +arctan2 +Tensor.arctan2 +bitwise_not +Tensor.bitwise_not +bitwise_and +Tensor.bitwise_and +bitwise_or +Tensor.bitwise_or +bitwise_xor +Tensor.bitwise_xor +bitwise_left_shift +Tensor.bitwise_left_shift +bitwise_right_shift +Tensor.bitwise_right_shift +ceil +Tensor.ceil +clamp +Tensor.clamp +clip +Tensor.clip +conj_physical +Tensor.conj_physical +copysign +Tensor.copysign +cos +Tensor.cos +cosh +Tensor.cosh +deg2rad +Tensor.deg2rad +div +Tensor.div +divide +Tensor.divide +digamma +Tensor.digamma +erf +Tensor.erf +erfc +Tensor.erfc +erfinv +Tensor.erfinv +exp +Tensor.exp +exp2 +Tensor.exp2 +expm1 +Tensor.expm1 +fake_quantize_per_channel_affine +fake_quantize_per_tensor_affine +fix +Tensor.fix +float_power +Tensor.float_power +floor +Tensor.floor +floor_divide +Tensor.floor_divide +fmod +Tensor.fmod +frac +Tensor.frac +frexp +Tensor.frexp +gradient +imag +Tensor.imag +ldexp +Tensor.ldexp +lerp +Tensor.lerp +lgamma +Tensor.lgamma +log +Tensor.log +log10 +Tensor.log10 +log1p +Tensor.log1p +log2 +Tensor.log2 +logaddexp +Tensor.logaddexp +logaddexp2 +Tensor.logaddexp2 +logical_and +Tensor.logical_and +logical_not +Tensor.logical_not +logical_or +Tensor.logical_or +logical_xor +Tensor.logical_xor +logit +Tensor.logit +hypot +Tensor.hypot +i0 +Tensor.i0 +igamma +Tensor.igamma +igammac +Tensor.igammac +mul +Tensor.mul +multiply +Tensor.multiply +mvlgamma +Tensor.mvlgamma +nan_to_num +Tensor.nan_to_num +neg +Tensor.neg +negative +Tensor.negative +nextafter +Tensor.nextafter +polygamma +Tensor.polygamma +positive +Tensor.positive +pow +Tensor.pow +quantized_batch_norm +quantized_max_pool1d +quantized_max_pool2d +rad2deg +Tensor.rad2deg +real +Tensor.real +reciprocal +Tensor.reciprocal +remainder +Tensor.remainder +round +Tensor.round +rsqrt +Tensor.rsqrt +sigmoid +Tensor.sigmoid +sign +Tensor.sign +sgn +Tensor.sgn +signbit +Tensor.signbit +sin +Tensor.sin +sinc +Tensor.sinc +sinh +Tensor.sinh +softmax +Tensor.softmax +sqrt +Tensor.sqrt +square +Tensor.square +sub +Tensor.sub +subtract +Tensor.subtract +tan +Tensor.tan +tanh +Tensor.tanh +true_divide +Tensor.true_divide +trunc +Tensor.trunc +xlogy +Tensor.xlogy \ No newline at end of file diff --git a/doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt b/doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt new file mode 100644 index 0000000..d5d441a --- /dev/null +++ b/doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt @@ -0,0 +1,145 @@ +abs_ +Tensor.abs_ +Tensor.absolute_ +acos_ +Tensor.acos_ +arccos_ +Tensor.arccos_ +acosh_ +Tensor.acosh_ +arccosh_ +Tensor.arccosh_ +Tensor.add_ +Tensor.addcdiv_ +Tensor.addcmul_ +asin_ +Tensor.asin_ +arcsin_ +Tensor.arcsin_ +asinh_ +Tensor.asinh_ +arcsinh_ +Tensor.arcsinh_ +atan_ +Tensor.atan_ +arctan_ +Tensor.arctan_ +atanh_ +Tensor.atanh_ +arctanh_ +Tensor.arctanh_ +Tensor.atan2_ +Tensor.arctan2_ +Tensor.bitwise_not_ +Tensor.bitwise_and_ +Tensor.bitwise_or_ +Tensor.bitwise_xor_ +Tensor.bitwise_left_shift_ +Tensor.bitwise_right_shift_ +ceil_ +Tensor.ceil_ +clamp_ +Tensor.clamp_ +clip_ +Tensor.clip_ +conj_physical_ +Tensor.conj_physical_ +Tensor.copysign_ +cos_ +Tensor.cos_ +cosh_ +Tensor.cosh_ +deg2rad_ +Tensor.deg2rad_ +Tensor.div_ +Tensor.divide_ +Tensor.digamma_ +erf_ +Tensor.erf_ +erfc_ +Tensor.erfc_ +Tensor.erfinv_ +exp_ +Tensor.exp_ +exp2_ +Tensor.exp2_ +expm1_ +Tensor.expm1_ +fix_ +Tensor.fix_ +Tensor.float_power_ +floor_ +Tensor.floor_ +Tensor.floor_divide_ +Tensor.fmod_ +frac_ +Tensor.frac_ +ldexp_ +Tensor.ldexp_ +Tensor.lerp_ +Tensor.lgamma_ +log_ +Tensor.log_ +log10_ +Tensor.log10_ +log1p_ +Tensor.log1p_ +log2_ +Tensor.log2_ +Tensor.logical_and_ +Tensor.logical_not_ +Tensor.logical_or_ +Tensor.logical_xor_ +logit_ +Tensor.logit_ +Tensor.hypot_ +i0_ +Tensor.i0_ +Tensor.igamma_ +Tensor.igammac_ +Tensor.mul_ +Tensor.multiply_ +Tensor.mvlgamma_ +nan_to_num_ +Tensor.nan_to_num_ +neg_ +Tensor.neg_ +negative_ +Tensor.negative_ +Tensor.nextafter_ +Tensor.polygamma_ +Tensor.pow_ +rad2deg_ +Tensor.rad2deg_ +reciprocal_ +Tensor.reciprocal_ +Tensor.remainder_ +round_ +Tensor.round_ +rsqrt_ +Tensor.rsqrt_ +sigmoid_ +Tensor.sigmoid_ +Tensor.sign_ +Tensor.sgn_ +sin_ +Tensor.sin_ +sinc_ +Tensor.sinc_ +sinh_ +Tensor.sinh_ +sqrt_ +Tensor.sqrt_ +square_ +Tensor.square_ +Tensor.sub_ +Tensor.subtract_ +tan_ +Tensor.tan_ +tanh_ +Tensor.tanh_ +Tensor.true_divide_ +trunc_ +Tensor.trunc_ +xlogy_ +Tensor.xlogy_ \ No newline at end of file diff --git a/doc_scrape/pointwise-ops.py b/doc_scrape/pointwise-ops.py new file mode 100644 index 0000000..4b70c42 --- /dev/null +++ b/doc_scrape/pointwise-ops.py @@ -0,0 +1,195 @@ +from glob import glob +import urllib.request +from datetime import datetime + +import torch +from bs4 import BeautifulSoup +from tqdm import tqdm + +#from dreamstream.utils.dummies import TestTensor +from dreamstream.utils.listloaders import get_tensor_attr +from dreamstream.tensor import recouple, inplace_recouple, TestTensor + +#from ..tests import test_dict + + +tensor = torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]], dtype=torch.float32) +#tensor = torch.tensor([[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]], [[12, 13, 14], [15, 16, 17]]]) +tensors = [tensor.clone() for i in range(3)] + +def to_test(tensor): + return TestTensor(tensor.rename("A", "B", "C"), meta="test") + +class Inputs: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + def __iter__(self): + return iter((self.args, self.kwargs)) + + +def valid(func, *args, **kwargs): + return func(*args, **kwargs) + +def compare_tensors(test_out, out): + + nan_filter = torch.isnan(out) + out = out[~nan_filter] + + assert out.numel() > 0 + assert isinstance(test_out, TestTensor) + assert hasattr(test_out, "meta") + assert test_out.meta == "test" + assert torch.allclose(torch.Tensor(test_out).rename(None)[~nan_filter], out) + + + + +inplace_func_hierarchy = [valid, inplace_recouple] +outofplace_func_hierarchy = [valid, recouple] + + +fp = urllib.request.urlopen("https://pytorch.org/docs/stable/torch.html") +html_doc = fp.read().decode("utf8") +fp.close() + +soup = BeautifulSoup(html_doc, 'html.parser') + +# scrape and validate pointwise ops +pwo_section = soup.find("section", {"id": "pointwise-ops"}) +pwo_rows = pwo_section.find_all("tr") +pwo_names = [r.find("td").text for r in pwo_rows] + +func_names = [] +for n in pwo_names: + if hasattr(torch, n): + func_names.append(f"{n}") + if hasattr(torch.Tensor, n): + func_names.append(f"Tensor.{n}") + # if hasattr(torch, n + "_"): + # func_names.append(f"{n}_") + # if hasattr(torch.Tensor, n + "_"): + # func_names.append(f"Tensor.{n}_") + +no_valid_input_found = [] +no_valid_output = [] +valid_funcs = [] +recouple_funcs = [] +recouple_inplace_funcs = [] + +for func_name in tqdm(func_names): + + # these are handled manually (either decouple or customized) + if "quantize" in func_name: + continue + if func_name.endswith("real") or func_name.endswith("imag"): + continue + + is_inplace = func_name.endswith("_") + func = get_tensor_attr(func_name) + input_valid = False + + for i in range(1, 4): + + try: + inputs = tensors[:i] + + if "bitwise" in func_name: + inputs = [x.to(torch.int64) for x in inputs] + if func_name.endswith("softmax"): + inputs += [-1] + if func_name.endswith("mvlgamma") or func_name == "Tensor.polygamma": + inputs += [1] + if func_name == "polygamma": + inputs = [1] + inputs + + target_inputs = [x.clone() if isinstance(x, torch.Tensor) else x for x in inputs] if is_inplace else inputs + out = func(*target_inputs) + input_valid = True + break + + except Exception as e: + if i == 3: + no_valid_input_found.append(func_name) + #import IPython; IPython.embed() + + if input_valid: + + test_inputs = [to_test(x) if isinstance(x, torch.Tensor) else x for x in inputs] + + test_out = recouple(func, *test_inputs, _tensor_type=TestTensor) + compare_tensors(test_out, out) + recouple_funcs.append(func_name) + + # try: + # test_out = valid(func, *test_inputs) + # compare_tensors(test_out, out) + # valid_funcs.append(func_name) + # print("\nSUCCESS\n") + # break + # except: + # pass + + # try: + # if is_inplace: + # test_out = inplace_recouple(func, *test_inputs) + # compare_tensors(test_out, out) + # recouple_inplace_funcs.append(func_name) + # else: + # test_out = recouple(func, *test_inputs) + # compare_tensors(test_out, out) + # recouple_funcs.append(func_name) + # break + # except: + # pass + + no_valid_output.append(func_name) + + + + + + + # try: + # stream_inputs = [to_test(x) for x in inputs] + # test_out = func(*stream_inputs) + # except Exception as e: + # test_dict[func_name] = str(e) + # continue + + # if not isinstance(test_out, TestTensor): + # test_dict[func_name] = "NOT_TENSOR" + # continue + + # if not hasattr(test_out, "meta"): + # test_dict[func_name] = "NO_META" + # continue + + # if test_out.meta != "test": + # test_dict[func_name] = "NOT_VALID_META" + # continue + + # nan_filter = torch.isnan(out) + # out = out[~nan_filter] + # test_out = torch.Tensor(test_out).rename(None)[~nan_filter] + + # if torch.allclose(out, test_out): + # test_dict[func_name] = "VALID" + # else: + # test_dict[func_name] = "NOT_CLOSE" + + + + + + + + +# if len(glob("lists/pointwise-ops-*.txt")) > 0: +# raise Exception("lists/pointwise-ops-*.txt already exists. Please delete this/these file(s) before running this script.") +# scrape_date = datetime.now().strftime("%Y_%m_%d-%H_%M_%S") +# with open(f"lists/default-valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: +# file_buffer.write("\n".join(pwo_defualt_valid)) +# with open(f"lists/valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: +# file_buffer.write("\n".join(pwo_valid)) \ No newline at end of file diff --git a/dreamstream/__init__.py b/dreamstream/__init__.py index 722262e..fae0529 100644 --- a/dreamstream/__init__.py +++ b/dreamstream/__init__.py @@ -1,3 +1,3 @@ -import dreamstream.random -from dreamstream.tensor import StreamTensor, StreamMetadata, stream_tensor, as_stream_tensor from dreamstream.overrides import * +import dreamstream.random +from dreamstream.tensor import StreamTensor, StreamMetadata, stream_tensor, as_stream_tensor \ No newline at end of file diff --git a/dreamstream/func_coverage.py b/dreamstream/func_coverage.py index dd3bbd2..94d7bee 100644 --- a/dreamstream/func_coverage.py +++ b/dreamstream/func_coverage.py @@ -1,33 +1,125 @@ +import os +from glob import glob + import torch +from dreamstream.utils.listloaders import load_default_valid_pointwise_ops, load_valid_pointwise_ops + FLAT_OVERRIDABLE_FUNCTIONS = {f for k, fs in torch.overrides.get_overridable_functions().items() for f in fs} # Functions that must be overridden to handle StreamMetadata and limit use cases. -OVERRIDDEN_FUNCTIONS = dict() +CUSTOMIZED_FUNCTIONS = dict() + +GET_METHODS = {f for f in FLAT_OVERRIDABLE_FUNCTIONS if f.__name__ == "__get__"} + +DEFAULT_VALID_POITWISE_OPS = load_default_valid_pointwise_ops() +VALID_POITWISE_OPS = load_valid_pointwise_ops() # Functions that work for StreamTensors using the super().__torch_function__. VALID_FUNCTIONS = { torch.Tensor.__repr__, + torch.Tensor.__str__, + torch.Tensor.__dir__, + torch.Tensor.size, + torch.equal, + torch.Tensor.rename_, + torch.Tensor.zero_, + torch.Tensor.fill_, + + torch.Tensor.bernoulli_, + torch.Tensor.cauchy_, + torch.Tensor.exponential_, + torch.Tensor.geometric_, + torch.Tensor.log_normal_, + torch.Tensor.normal_, + torch.Tensor.random_, + torch.Tensor.uniform_, + + # torch.is_tensor and torch.is_storage are not overridable + torch.is_complex, + torch.Tensor.is_complex, + torch.is_conj, + torch.Tensor.is_conj, + torch.is_floating_point, + torch.Tensor.is_floating_point, + torch.is_nonzero, + torch.Tensor.is_nonzero, + torch.numel, + torch.Tensor.numel, + torch.Tensor.dim, + + torch.Tensor.imag, + torch.Tensor.real, } +VALID_FUNCTIONS.update(GET_METHODS) +#VALID_FUNCTIONS.update(VALID_POITWISE_OPS) -# Functions that must be wrapped to avoid returning a StreamTensor. +# Functions that work for StreamTensors using the super().__torch_function__, but .meta is not preserved. +DEFAULT_VALID_FUNCTIONS = { + torch.Tensor.align_to, + torch.transpose, + torch.Tensor.transpose, + torch.Tensor.rename, + torch.clone, # meta is not preserved + torch.Tensor.clone, # meta is not preserved + + torch.rand_like, + torch.randn_like, + torch.zeros_like, + torch.ones_like, + torch.empty_like, + torch.full_like, + + torch.Tensor.__abs__, + torch.Tensor.__neg__, + torch.Tensor.__add__, + +} +#DEFAULT_VALID_FUNCTIONS.update(DEFAULT_VALID_POITWISE_OPS) + +# Functions that must be wrapped to avoid returning a StreamTensor (and may not ). DECOUPLE_FUNCTIONS = { torch.argmax, torch.argmin, torch.argsort, + torch.allclose, + torch.Tensor.allclose, + torch.quantize_per_channel, # output "type" is not supported with names + torch.fake_quantize_per_channel_affine, # output "type" is not supported with names + torch.fake_quantize_per_tensor_affine, # output "type" is not supported with names } -# Functions that must be wrapped to avoid failures related to named tensors and to maintain StreamMetadata. +# Functions that must be wrapped to avoid failures related to named tensors (and to maintain StreamMetadata). RECOUPLE_FUNCTIONS = { torch.adjoint, torch.sigmoid, torch.Tensor.sigmoid, - torch.transpose, + + torch.isclose, + torch.Tensor.isclose, + + + torch.randint_like, + + torch.heaviside, + torch.Tensor.heaviside, + torch.dequantize, + torch.Tensor.dequantize, + torch.polar, + torch.complex, + + torch.real, + torch.imag, +} + +INPLACE_RECOUPLE_FUNCTIONS = { + torch.Tensor.heaviside_, } # The full set of functions that are explicitly supported for StreamTensors. -SUPPORTED_FUNCTIONS = VALID_FUNCTIONS | DECOUPLE_FUNCTIONS | RECOUPLE_FUNCTIONS | OVERRIDDEN_FUNCTIONS.keys() +SUPPORTED_FUNCTIONS = VALID_FUNCTIONS | DEFAULT_VALID_FUNCTIONS | DECOUPLE_FUNCTIONS | RECOUPLE_FUNCTIONS | INPLACE_RECOUPLE_FUNCTIONS | CUSTOMIZED_FUNCTIONS.keys() # The set of functions that are overrideable but not explicitly supported. These functions may still work correctly. UNSUPPORTED_FUNCTIONS = {f for f in FLAT_OVERRIDABLE_FUNCTIONS if f not in SUPPORTED_FUNCTIONS} +SUPPORTED_NON_OVERRIDEABLE_FUNCTIONS = {f for f in SUPPORTED_FUNCTIONS if f not in FLAT_OVERRIDABLE_FUNCTIONS} diff --git a/dreamstream/overrides.py b/dreamstream/overrides.py index 05764d0..4a5cb0d 100644 --- a/dreamstream/overrides.py +++ b/dreamstream/overrides.py @@ -7,10 +7,9 @@ from torch import Tensor from dreamstream.tensor import StreamTensor, StreamMetadata, as_stream_tensor -from dreamstream.func_coverage import OVERRIDDEN_FUNCTIONS +from dreamstream.func_coverage import CUSTOMIZED_FUNCTIONS from dreamstream.utils.flags import BATCH, LENGTH - # Wrap whatever functools.update_wrapper usually wraps, except __doc__ WRAPPER_ASSIGNMENTS = tuple(set(functools.WRAPPER_ASSIGNMENTS) - {"__doc__"}) TORCH_DOC_LINEWIDTH = 80 @@ -39,12 +38,11 @@ def implements(torch_function): def decorator(func): functools.update_wrapper(func, torch_function, assigned=WRAPPER_ASSIGNMENTS) func.__doc__ = augment_documentation(func.__doc__, torch_function.__doc__) - OVERRIDDEN_FUNCTIONS[torch_function] = func + CUSTOMIZED_FUNCTIONS[torch_function] = func return func return decorator - @implements(torch.cat) def cat(tensors: List[Union[StreamTensor, Tensor]], dim=0, *, out=None): """If dim is the batch dimension of any StreamTensor, assert all are StreamTensors and concatenate the stream @@ -176,16 +174,35 @@ def chunk(tensor: StreamTensor, chunks: int, dim=0): def pad(input: StreamTensor, pad: List[int], mode: str = "constant", value: float = None): meta = input.meta names = input.names - input = input.named_tensor().rename(None) + # TODO: Adapt meta - output = torch.nn.functional.pad(input, pad, mode=mode, value=value) + output = torch.nn.functional.pad(input.tensor(), pad, mode=mode, value=value) + output = output.rename(*names) return StreamTensor(output, meta) +@implements(torch.quantize_per_tensor) +def quantize_per_tensor(input: Tuple[StreamTensor], scale: float, zero_point: int, dtype: torch.dtype): + input = input.tensor() if isinstance(input, StreamTensor) else tuple([t.tensor() for t in input]) + return torch.quantize_per_tensor(input, scale, zero_point, dtype) + +@implements(torch.quantize_per_tensor_dynamic) +def quantize_per_tensor_dynamic(input: Tuple[StreamTensor], dtype: torch.dtype, reduce_range: bool): + input = input.tensor() if isinstance(input, StreamTensor) else tuple([t.tensor() for t in input]) + return torch.quantize_per_tensor_dynamic(input, dtype, reduce_range) +@implements(torch.fake_quantize_per_tensor_affine) +def fake_quantize_per_tensor_affine(input: StreamTensor, scale: float, zero_point: int, quant_min: int, quant_max: int): + return torch.fake_quantize_per_tensor_affine(input.tensor(), scale, zero_point, quant_min, quant_max) -def _compute_conv_output_lengths(input_lengths: Tensor, kernel_width: int, stride: int): - return +@implements(torch.frexp) +@implements(torch.Tensor.frexp) +def frexp(input: StreamTensor): + tensor, meta, names = input.decouple() + out = torch.frexp(input.tensor()) + mantissa = StreamTensor(out.mantissa.rename(*names), meta=meta) + exponent = StreamTensor(out.exponent.rename(*names), meta=meta) + return torch.return_types.frexp((mantissa, exponent)) @implements(torch.conv1d) @@ -235,13 +252,14 @@ def conv1d(input: StreamTensor, weight: Tensor, bias: Optional[Tensor] = None, s for i, (start, end, _id, eos) in enumerate(zip(next_start, meta.lengths, meta.ids, meta.eos)): if not eos: buffer[_id] = input[i, ..., start:end] + meta._temp_buffer = buffer # Convolve input and revert to StreamTensor. output = torch.conv1d(input, weight, bias=bias, stride=stride, padding=padding, dilation=dilation, groups=groups) output.rename_(*names) meta.lengths = output_lengths #TODO: Consider whether to zero out the padding. - return StreamTensor(output, meta), buffer + return StreamTensor(output, meta) def is_multidimensional_indexing(indices: Union[None, int, slice, List[Any], Tuple[Any, ...]]): diff --git a/dreamstream/patches/conv.py b/dreamstream/patches/conv.py index 21686e7..731d2e5 100644 --- a/dreamstream/patches/conv.py +++ b/dreamstream/patches/conv.py @@ -9,7 +9,11 @@ from dreamstream.patches.general import online, offline from dreamstream.nn.utils import pad_stream_tensor -#TODO: Add support for subsampling convolutions (i.e., stride > kernel_width). +# TODO: #1 Add support for subsampling convolutions (i.e., stride > kernel_width). +# TODO: #2 Generalize to N-D convolutions, where the length dimension can be any dimension. +# TODO: Add support for transposed convolutions. + + def conv_1d_pre_hook(self, inputs): @@ -32,7 +36,7 @@ def conv_1d_pre_hook(self, inputs): if (buffer_lengths == ref_length).all(): buffer_data = torch.stack(buffer_data) input = torch.cat([buffer_data, input], dim=-1) - + # If not, split batch into individual inputs and concatenate separately first. else: # TODO: This needs to be tested. @@ -46,11 +50,12 @@ def conv_1d_pre_hook(self, inputs): def conv_1d_post_hook(self, inputs, outputs): if self.streaming: - outputs, buffer = outputs - self.stream_buffer.update(buffer) + outputs = outputs + self.stream_buffer.update(outputs.meta._temp_buffer) + outputs.meta._temp_buffer = None # TODO: Simplify this. - if outputs.meta.any_end: + if outputs.meta.any_ending: for _id, eos in zip(outputs.meta.ids, outputs.meta.eos): if eos and _id in self.stream_buffer: del self.stream_buffer[_id] diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 1b7b888..9ef420e 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -11,7 +11,8 @@ from torch import Tensor -from dreamstream.func_coverage import DECOUPLE_FUNCTIONS, RECOUPLE_FUNCTIONS, VALID_FUNCTIONS, OVERRIDDEN_FUNCTIONS +from dreamstream.func_coverage import DECOUPLE_FUNCTIONS, RECOUPLE_FUNCTIONS, VALID_FUNCTIONS, CUSTOMIZED_FUNCTIONS, \ + DEFAULT_VALID_FUNCTIONS, INPLACE_RECOUPLE_FUNCTIONS from dreamstream.utils.flags import BATCH, LENGTH @@ -19,19 +20,6 @@ # are needed. This minimizes overhead computation on StreamTensors that end up as leaf nodes in the computation graph. -def decouple(func, tensor, *args, **kwargs): - """Call function on tensor after decoupling it from StreamMetadata.""" - return func(tensor.tensor(), *args, **kwargs) - - -def recouple(func, tensor, *args, **kwargs): - """Call function on tensor after recoupling it to StreamMetadata and recouple again afterwards.""" - tensor, meta, names = tensor.decouple() - tensor = func(tensor, *args, **kwargs) - tensor.rename_(names) - return as_stream_tensor(data=tensor, meta=meta, names=names) - - class StreamMetadata: """Metadata associated with a batch of streamed input tensors.""" @@ -69,6 +57,8 @@ def __init__( self._sos = sos self._eos = eos self._lengths = lengths + + self._temp_buffer = None self._min_length = None self._max_length = None @@ -514,7 +504,7 @@ def __new__(cls, data, meta: StreamMetadata, *args, **kwargs) -> "StreamTensor": """Return a new StreamTensor object.""" return super().__new__(cls, data, *args, **kwargs) - def __init__(self, data, meta: StreamMetadata, *args, names: List[str] = None, **kwargs): + def __init__(self, data, meta: StreamMetadata, *args, **kwargs): """Initialize a StreamTensor object (self is StreamTensor, data is e.g. torch.Tensor).""" super().__init__() self.meta = meta @@ -532,29 +522,56 @@ def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), Raises: RuntimeError: If the intercepted function could not be handled safely. """ + if kwargs is None: kwargs = dict() - - if func in OVERRIDDEN_FUNCTIONS: - # print(f"\n\n{func.__name__}: STREAM_TENSOR_FUNCTIONS\n\n") - return OVERRIDDEN_FUNCTIONS[func](*args, **kwargs) - - if func in RECOUPLE_FUNCTIONS: - # print(f"\n\n{func.__name__}: RECOUPLE_FUNCTIONS\n\n") - return recouple(func, *args, **kwargs) + + if func in VALID_FUNCTIONS: + return super().__torch_function__(func, types, args, {}) + + if func in CUSTOMIZED_FUNCTIONS: + return CUSTOMIZED_FUNCTIONS[func](*args, **kwargs) if func in DECOUPLE_FUNCTIONS: - # print(f"\n\n{func.__name__}: DECOUPLE_FUNCTIONS\n\n") return decouple(func, *args, **kwargs) - if func in VALID_FUNCTIONS: - # print(f"\n\n{func.__name__}: VALID_FUNCTIONS\n\n") - return super().__torch_function__(func, types, args, kwargs) + if func in RECOUPLE_FUNCTIONS: + return recouple(func, *args, **kwargs) + + if func in INPLACE_RECOUPLE_FUNCTIONS: + return inplace_recouple(func, *args, **kwargs) # Unhandled functions are passed to the torch.Tensor.__torch_function__ method. - warnings.warn( - f"Function {func.__name__} is not handled by StreamTensor.__torch_function__ and may not work as expected." - ) + if func not in DEFAULT_VALID_FUNCTIONS: + warnings.warn( + f"Function {func.__name__} is not handled by StreamTensor.__torch_function__ and may not work as expected." + ) + + return cls.default_valid(func, types, args, kwargs) + + # out = super().__torch_function__(func, types, args, kwargs) + + # metas = [x.meta for x in [*args, *kwargs.values()] if isinstance(x, StreamTensor)] + # if not all(s == metas[0] for s in metas[1:]): + # msg = ( + # f"Called a torch function ({func.__name__}) which was not handled by " + # f"StreamTensor.__torch_function__ with {len(metas)} StreamTensors in the input." + # f"In this case the function can only be handled if the StreamTensors have equal metadata," + # f"but they were not equal." + # ) + # raise RuntimeError(msg) + + # if isinstance(out, StreamTensor): + # out.meta = metas[0] + # return out + # elif isinstance(out, torch.Tensor): + # return StreamTensor(out, meta=metas[0]) + + # return out + + @classmethod + def default_valid(cls, func, types, args, kwargs): + out = super().__torch_function__(func, types, args, kwargs) metas = [x.meta for x in [*args, *kwargs.values()] if isinstance(x, StreamTensor)] @@ -566,12 +583,16 @@ def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), f"but they were not equal." ) raise RuntimeError(msg) - - if isinstance(out, torch.Tensor): + + if isinstance(out, StreamTensor): + out.meta = metas[0] + return out + elif isinstance(out, torch.Tensor): return StreamTensor(out, meta=metas[0]) return out - + + @property def has_batch_dim(self) -> bool: return BATCH in self.names @@ -587,6 +608,21 @@ def batch_dim(self) -> int: @property def length_dim(self) -> int: return self.names.index(LENGTH) + + @property + def real(self): + return torch.real(self) + + @property + def imag(self): + return torch.imag(self) + + @property + def T(self): + return self.permute(*reversed(range(self.ndim))) + + # def test(self): + # return super().rename(None) def is_batch_dim(self, dim: int) -> bool: return self.names[dim] == BATCH @@ -637,35 +673,85 @@ def unpad_sequence(self, keep_names: bool = False) -> List["StreamTensor"]: for x in self.unbind(dim=batch_dim) ] - def decouple(self, copy_meta: bool = False) -> Tuple[Tensor, StreamMetadata, Tuple[str]]: + def decouple(self, copy_meta: bool = False, keep_names: bool = False) -> Tuple[Tensor, StreamMetadata, Tuple[str]]: """Decouple the StreamTensor from names and metadata.""" meta = self.meta.clone() if copy_meta else self.meta - return self.tensor(), meta, self.names + return self.tensor(keep_names=keep_names), meta, self.names def as_stream_tensor( - data, meta: StreamMetadata, names: Tuple[Union[None, int]], dtype: torch.dtype = None, device: torch.device = None + data, meta: StreamMetadata = None, names: Tuple[Union[None, str]] = None, dtype: torch.dtype = None, device: torch.device = None ) -> StreamTensor: """Convert a tensor to a StreamTensor. See also `torch.as_tensor`.""" data = torch.as_tensor(data, dtype=dtype, device=device) - data = data.refine_names(*names) # Make the tensor named if it isn't already. + if names is not None: + data = data.refine_names(*names) # Make the tensor named if it isn't already. + if meta is None: + meta = data.meta return StreamTensor(data=data, meta=meta) def stream_tensor( data, meta: StreamMetadata, - names: Tuple[Union[None, int]], + names: Tuple[Union[None, str]], dtype: torch.dtype = None, device: torch.device = None, requires_grad: bool = False, pin_memory: bool = False, ) -> StreamTensor: """Convert a tensor to a StreamTensor. See also `torch.tensor`.""" - if isinstance(data, torch.Tensor) and data.names != names: - data = data.rename(*names) - data = torch.tensor( data, names=names, dtype=dtype, device=device, requires_grad=requires_grad, pin_memory=pin_memory ) return StreamTensor(data=data, meta=meta) + + +class TestTensor(torch.Tensor): + + @staticmethod + def __new__(cls, data, meta, *args, **kwargs) -> "TestTensor": + """Return a new StreamTensor object.""" + return super().__new__(cls, data, *args, **kwargs) + + def __init__(self, data, meta, *args, names: List[str] = None, **kwargs): + """Initialize a StreamTensor object (self is StreamTensor, data is e.g. torch.Tensor).""" + super(TestTensor).__init__() + self.meta = meta + + def tensor(self, keep_names: bool = False) -> torch.Tensor: + """Return the underlying torch.Tensor.""" + tensor = torch.Tensor(self) # 1-2 µs + if not keep_names: + tensor.rename_(None) # 2-3 µs + return tensor + + def clone(self, *args, **kwargs): + """Clone a StreamTensor object.""" + return TestTensor(super().clone(*args, **kwargs), self.meta) + + +def decouple(func, *args, _keep_names=False, _tensor_type=StreamTensor, **kwargs): + """Call function on tensor after decoupling it from StreamMetadata.""" + args = [arg.tensor(keep_names=_keep_names) if isinstance(arg, _tensor_type) else arg for arg in args] + kwargs = {k: v.tensor(keep_names=_keep_names) if isinstance(v, _tensor_type) else v for k, v in kwargs.items()} + return func(*args, **kwargs) + + +def recouple(func, *args, _tensor_type=StreamTensor, **kwargs): + """Call function on tensor after recoupling it to StreamMetadata and recouple again afterwards.""" + meta_list = [x.meta for x in [*args, *kwargs.values()] if isinstance(x, _tensor_type)] + names_list = [x.names for x in [*args, *kwargs.values()] if isinstance(x, _tensor_type)] + if not (all(m == meta_list[0] for m in meta_list[1:]) and all(n == names_list[0] for n in names_list[1:])): + raise RuntimeError("StreamTensor arguments must have the same metadata and names.") + # args = [arg.rename(None) if isinstance(arg, StreamTensor) else arg for arg in args] + # kwargs = {k: v.rename(None) if isinstance(v, StreamTensor) else v for k, v in kwargs.items()} + # out = func(*args, **kwargs) + out = decouple(func, *args, _tensor_type=_tensor_type, **kwargs) + out.rename_(*names_list[0]) + return _tensor_type(out, meta_list[0]) + + +def inplace_recouple(func, tensor, *args, **kwargs): + decouple(func, tensor, *args, **kwargs) + return tensor diff --git a/dreamstream/tests/test.pkl b/dreamstream/tests/test.pkl new file mode 100644 index 0000000000000000000000000000000000000000..2caacde3c922e5137e8f8e2c023f634f4c4c877b GIT binary patch literal 463693 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 z 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

(UzS? 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

~yZWz;c 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 u0b)m$P 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 DRd$w* literal 0 HcmV?d00001 diff --git a/dreamstream/tests/test_conv1d_2.py b/dreamstream/tests/test_conv1d_mixed_batch.py similarity index 100% rename from dreamstream/tests/test_conv1d_2.py rename to dreamstream/tests/test_conv1d_mixed_batch.py diff --git a/dreamstream/tests/test_conv1d_subsample.py b/dreamstream/tests/test_conv1d_subsample.py new file mode 100644 index 0000000..4658503 --- /dev/null +++ b/dreamstream/tests/test_conv1d_subsample.py @@ -0,0 +1,80 @@ +from random import randint +from uuid import uuid4 +from copy import deepcopy +import random +from dreamstream.utils import test as t + +import torch +from torch import nn + +from dreamstream import stream_tensor +from dreamstream.utils.flags import BATCH, LENGTH +from dreamstream.nn.utils import pad_full_sequence, pad_stream_tensor +from dreamstream.patches import patch_conv_1d +from dreamstream.data import OutputCollector +from dreamstream.func_coverage import SUPPORTED_FUNCTIONS, UNSUPPORTED_FUNCTIONS, SUPPORTED_NON_OVERRIDEABLE_FUNCTIONS +from dreamstream import StreamTensor +from dreamstream.utils import test as t + +FLAT = {f for k, fs in torch.overrides.get_overridable_functions().items() for f in fs} + +def random_chunks(full_length): + chunks = [] + chunk_sum, remaining = 0, full_length + while remaining > 0: + chunks.append(min(randint(7-3, 100), remaining)) + chunk_sum = sum(chunks) + remaining = full_length - chunk_sum + return chunks + +for kernel_size in range(1, 3): + for stride in range(1, 3): + + conv = nn.Conv1d(256, 128, kernel_size=kernel_size, stride=stride, padding=kernel_size//2) + conv = patch_conv_1d(conv) + + # TEST 1: Test with multiple streams of different lengths. + sequences = [torch.rand(256, randint(50, 2000)) for i in range(32)] + + ids = [str(uuid4()) for i in range(32)] + targets = {_id: conv(s) for _id, s in zip(ids, sequences)} + original_sequences = {_id: s for _id, s in zip(ids, sequences)} + + data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") + data = data.unpad_sequence() + conv.online() + data = {_id: conv(s) for _id, s in zip(ids, data)} + # TEMP TEST + + for _id, s in data.items(): + assert s.size("L") == s.meta.lengths[0] + assert torch.allclose(s, targets[_id]) + + print(f"OK: {stride > kernel_size} {kernel_size}, {stride}") + + +# import IPython; IPython.embed(using=False) + + +# data = {_id: s.split(random_chunks(s.size("L")), dim=1) for _id, s in zip(ids, data)} + +# def remaining_chunks(data): +# return sum([len(x) for x in data.values()]) + +# batches = [] +# while remaining_chunks(data) > 0: +# batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] +# if len(batch) > 0: +# batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) + +# stream_output = OutputCollector() +# conv.online() +# for x in batches: +# y = conv(x) +# stream_output.update(y) + +# for _id, _y in targets.items(): +# y = stream_output[_id].tensor() +# abs_diff = (_y - y).abs() +# print(y.size(-1), torch.allclose(_y, y), abs_diff.max().item(), abs_diff.max(0).values[:10].max().item()) + diff --git a/dreamstream/utils/dummies.py b/dreamstream/utils/dummies.py new file mode 100644 index 0000000..4183db2 --- /dev/null +++ b/dreamstream/utils/dummies.py @@ -0,0 +1,43 @@ +# from typing import List, Callable + +# import torch + +# from dreamstream import StreamTensor + +# class TestMetadata: +# """Metadata associated with a batch of streamed input tensors.""" + +# def __init__( +# self, +# property="this is a test", +# ): +# self.property = property + +# class TestTensor(StreamTensor): + +# # @staticmethod +# # def __new__(cls, data, meta: TestMetadata, *args, **kwargs) -> "TestTensor": +# # """Return a new StreamTensor object.""" +# # return super().__new__(cls, data, *args, **kwargs) + +# # def __init__(self, data, meta: TestMetadata, *args, names: List[str] = None, **kwargs): +# # """Initialize a StreamTensor object (self is StreamTensor, data is e.g. torch.Tensor).""" +# # super(TestTensor).__init__() +# # self.meta = meta + +# def clone(self, *args, **kwargs): +# """Clone a StreamTensor object.""" +# return TestTensor(super().clone(*args, **kwargs), self.meta) + +# @classmethod +# def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), kwargs=None): +# return torch.Tensor.__torch_function__(cls, func, types, args, kwargs) + +# class TestObjects(): + +# a = torch.rand(2, 3, 4) +# b = a.rename("B", "F", "L") +# c = TestTensor(a, TestMetadata("this is another test")) +# d = TestTensor(b, TestMetadata("this is another test")) + +# test = TestObjects() \ No newline at end of file diff --git a/dreamstream/utils/listloaders.py b/dreamstream/utils/listloaders.py new file mode 100644 index 0000000..4ae65a2 --- /dev/null +++ b/dreamstream/utils/listloaders.py @@ -0,0 +1,21 @@ +import os +from glob import glob + +import torch + + +lists_path = __file__.replace("/dreamstream/utils/listloaders.py", "/doc_scrape/lists") + +def get_tensor_attr(x): + return getattr(torch.Tensor, x.replace("Tensor.", "")) if x.startswith("Tensor.") else getattr(torch, x) + +def load_default_valid_pointwise_ops(): + with open(glob(os.path.join(lists_path, "default-valid-pointwise-ops-*.txt"))[0], "r") as file_buffer: + ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} + return ops_list + +def load_valid_pointwise_ops(): + with open(glob(os.path.join(lists_path, "valid-pointwise-ops-*.txt"))[0], "r") as file_buffer: + ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} + return ops_list + diff --git a/tests/test_tensor.py b/tests/test_tensor.py index 99e179b..105695a 100644 --- a/tests/test_tensor.py +++ b/tests/test_tensor.py @@ -77,6 +77,7 @@ def test_function_coverage(): ## Indexing + def test_feature_indexing_integer(stream_tensor_3d): """Indexing with an integer on the feature dim should remove the feature dim but not change the meta.""" @@ -87,6 +88,7 @@ def test_feature_indexing_integer(stream_tensor_3d): assert torch.equal(s5.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s5.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s5.meta.lengths, torch.tensor([3, 3, 2])) + assert torch.allclose(s5.tensor(), stream_tensor_3d.tensor()[:, 0, :]) assert s5.names == (BATCH, LENGTH) From 8bbd8da88aa8c665a0354bf48194d66ea7bf0a11 Mon Sep 17 00:00:00 2001 From: borgholt Date: Mon, 19 Jun 2023 16:20:04 +0000 Subject: [PATCH 04/36] Scraping and assignment via testing done. --- ...lid-pointwise-ops-2023_06_19-16_13_42.txt} | 46 +---- ...uple-pointwise-ops-2023_06_19-16_13_42.txt | 23 +++ ...uple-pointwise-ops-2023_06_19-16_13_42.txt | 32 ++++ ...lid-pointwise-ops-2023_06_19-16_13_42.txt} | 25 +-- doc_scrape/pointwise-ops.py | 165 +++++++++--------- dreamstream/func_coverage.py | 12 +- dreamstream/tensor.py | 4 +- dreamstream/utils/listloaders.py | 10 ++ 8 files changed, 162 insertions(+), 155 deletions(-) rename doc_scrape/lists/{default-valid-pointwise-ops-2023_06_09-10_06_02.txt => default-valid-pointwise-ops-2023_06_19-16_13_42.txt} (73%) create mode 100644 doc_scrape/lists/inplace-recouple-pointwise-ops-2023_06_19-16_13_42.txt create mode 100644 doc_scrape/lists/recouple-pointwise-ops-2023_06_19-16_13_42.txt rename doc_scrape/lists/{valid-pointwise-ops-2023_06_09-10_06_02.txt => valid-pointwise-ops-2023_06_19-16_13_42.txt} (79%) diff --git a/doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt b/doc_scrape/lists/default-valid-pointwise-ops-2023_06_19-16_13_42.txt similarity index 73% rename from doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt rename to doc_scrape/lists/default-valid-pointwise-ops-2023_06_19-16_13_42.txt index ca00a3c..69d5b6c 100644 --- a/doc_scrape/lists/default-valid-pointwise-ops-2023_06_09-10_06_02.txt +++ b/doc_scrape/lists/default-valid-pointwise-ops-2023_06_19-16_13_42.txt @@ -40,16 +40,6 @@ arctan2 Tensor.arctan2 bitwise_not Tensor.bitwise_not -bitwise_and -Tensor.bitwise_and -bitwise_or -Tensor.bitwise_or -bitwise_xor -Tensor.bitwise_xor -bitwise_left_shift -Tensor.bitwise_left_shift -bitwise_right_shift -Tensor.bitwise_right_shift ceil Tensor.ceil clamp @@ -58,8 +48,6 @@ clip Tensor.clip conj_physical Tensor.conj_physical -copysign -Tensor.copysign cos Tensor.cos cosh @@ -80,12 +68,8 @@ erfinv Tensor.erfinv exp Tensor.exp -exp2 -Tensor.exp2 expm1 Tensor.expm1 -fake_quantize_per_channel_affine -fake_quantize_per_tensor_affine fix Tensor.fix float_power @@ -94,19 +78,10 @@ floor Tensor.floor floor_divide Tensor.floor_divide -fmod -Tensor.fmod frac Tensor.frac -frexp -Tensor.frexp -gradient -imag -Tensor.imag ldexp Tensor.ldexp -lerp -Tensor.lerp lgamma Tensor.lgamma log @@ -129,8 +104,6 @@ logical_or Tensor.logical_or logical_xor Tensor.logical_xor -logit -Tensor.logit hypot Tensor.hypot i0 @@ -143,10 +116,6 @@ mul Tensor.mul multiply Tensor.multiply -mvlgamma -Tensor.mvlgamma -nan_to_num -Tensor.nan_to_num neg Tensor.neg negative @@ -159,17 +128,10 @@ positive Tensor.positive pow Tensor.pow -quantized_batch_norm -quantized_max_pool1d -quantized_max_pool2d rad2deg Tensor.rad2deg -real -Tensor.real reciprocal Tensor.reciprocal -remainder -Tensor.remainder round Tensor.round rsqrt @@ -178,14 +140,10 @@ sigmoid Tensor.sigmoid sign Tensor.sign -sgn -Tensor.sgn signbit Tensor.signbit sin Tensor.sin -sinc -Tensor.sinc sinh Tensor.sinh softmax @@ -205,6 +163,4 @@ Tensor.tanh true_divide Tensor.true_divide trunc -Tensor.trunc -xlogy -Tensor.xlogy \ No newline at end of file +Tensor.trunc \ No newline at end of file diff --git a/doc_scrape/lists/inplace-recouple-pointwise-ops-2023_06_19-16_13_42.txt b/doc_scrape/lists/inplace-recouple-pointwise-ops-2023_06_19-16_13_42.txt new file mode 100644 index 0000000..24b6836 --- /dev/null +++ b/doc_scrape/lists/inplace-recouple-pointwise-ops-2023_06_19-16_13_42.txt @@ -0,0 +1,23 @@ +Tensor.bitwise_and_ +Tensor.bitwise_or_ +Tensor.bitwise_xor_ +Tensor.bitwise_left_shift_ +Tensor.bitwise_right_shift_ +conj_physical_ +Tensor.conj_physical_ +Tensor.copysign_ +exp2_ +Tensor.exp2_ +Tensor.fmod_ +Tensor.lerp_ +logit_ +Tensor.logit_ +Tensor.mvlgamma_ +nan_to_num_ +Tensor.nan_to_num_ +Tensor.remainder_ +Tensor.sgn_ +sinc_ +Tensor.sinc_ +xlogy_ +Tensor.xlogy_ \ No newline at end of file diff --git a/doc_scrape/lists/recouple-pointwise-ops-2023_06_19-16_13_42.txt b/doc_scrape/lists/recouple-pointwise-ops-2023_06_19-16_13_42.txt new file mode 100644 index 0000000..a2fef71 --- /dev/null +++ b/doc_scrape/lists/recouple-pointwise-ops-2023_06_19-16_13_42.txt @@ -0,0 +1,32 @@ +bitwise_and +Tensor.bitwise_and +bitwise_or +Tensor.bitwise_or +bitwise_xor +Tensor.bitwise_xor +bitwise_left_shift +Tensor.bitwise_left_shift +bitwise_right_shift +Tensor.bitwise_right_shift +copysign +Tensor.copysign +exp2 +Tensor.exp2 +fmod +Tensor.fmod +lerp +Tensor.lerp +logit +Tensor.logit +mvlgamma +Tensor.mvlgamma +nan_to_num +Tensor.nan_to_num +remainder +Tensor.remainder +sgn +Tensor.sgn +sinc +Tensor.sinc +xlogy +Tensor.xlogy \ No newline at end of file diff --git a/doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt b/doc_scrape/lists/valid-pointwise-ops-2023_06_19-16_13_42.txt similarity index 79% rename from doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt rename to doc_scrape/lists/valid-pointwise-ops-2023_06_19-16_13_42.txt index d5d441a..6fff35d 100644 --- a/doc_scrape/lists/valid-pointwise-ops-2023_06_09-10_06_02.txt +++ b/doc_scrape/lists/valid-pointwise-ops-2023_06_19-16_13_42.txt @@ -31,20 +31,12 @@ Tensor.arctanh_ Tensor.atan2_ Tensor.arctan2_ Tensor.bitwise_not_ -Tensor.bitwise_and_ -Tensor.bitwise_or_ -Tensor.bitwise_xor_ -Tensor.bitwise_left_shift_ -Tensor.bitwise_right_shift_ ceil_ Tensor.ceil_ clamp_ Tensor.clamp_ clip_ Tensor.clip_ -conj_physical_ -Tensor.conj_physical_ -Tensor.copysign_ cos_ Tensor.cos_ cosh_ @@ -61,8 +53,6 @@ Tensor.erfc_ Tensor.erfinv_ exp_ Tensor.exp_ -exp2_ -Tensor.exp2_ expm1_ Tensor.expm1_ fix_ @@ -71,12 +61,10 @@ Tensor.float_power_ floor_ Tensor.floor_ Tensor.floor_divide_ -Tensor.fmod_ frac_ Tensor.frac_ ldexp_ Tensor.ldexp_ -Tensor.lerp_ Tensor.lgamma_ log_ Tensor.log_ @@ -90,8 +78,6 @@ Tensor.logical_and_ Tensor.logical_not_ Tensor.logical_or_ Tensor.logical_xor_ -logit_ -Tensor.logit_ Tensor.hypot_ i0_ Tensor.i0_ @@ -99,9 +85,6 @@ Tensor.igamma_ Tensor.igammac_ Tensor.mul_ Tensor.multiply_ -Tensor.mvlgamma_ -nan_to_num_ -Tensor.nan_to_num_ neg_ Tensor.neg_ negative_ @@ -113,7 +96,6 @@ rad2deg_ Tensor.rad2deg_ reciprocal_ Tensor.reciprocal_ -Tensor.remainder_ round_ Tensor.round_ rsqrt_ @@ -121,11 +103,8 @@ Tensor.rsqrt_ sigmoid_ Tensor.sigmoid_ Tensor.sign_ -Tensor.sgn_ sin_ Tensor.sin_ -sinc_ -Tensor.sinc_ sinh_ Tensor.sinh_ sqrt_ @@ -140,6 +119,4 @@ tanh_ Tensor.tanh_ Tensor.true_divide_ trunc_ -Tensor.trunc_ -xlogy_ -Tensor.xlogy_ \ No newline at end of file +Tensor.trunc_ \ No newline at end of file diff --git a/doc_scrape/pointwise-ops.py b/doc_scrape/pointwise-ops.py index 4b70c42..fe330ed 100644 --- a/doc_scrape/pointwise-ops.py +++ b/doc_scrape/pointwise-ops.py @@ -1,6 +1,7 @@ from glob import glob import urllib.request from datetime import datetime +from copy import deepcopy import torch from bs4 import BeautifulSoup @@ -32,6 +33,29 @@ def __iter__(self): def valid(func, *args, **kwargs): return func(*args, **kwargs) +def default_valid(func, *args, **kwargs): + + out = func(*args, **kwargs) + + metas = [x.meta for x in [*args, *kwargs.values()] if isinstance(x, TestTensor)] + if not all(s == metas[0] for s in metas[1:]): + msg = ( + f"Called a torch function ({func.__name__}) which was not handled by " + f"StreamTensor.__torch_function__ with {len(metas)} StreamTensors in the input." + f"In this case the function can only be handled if the StreamTensors have equal metadata," + f"but they were not equal." + ) + raise RuntimeError(msg) + + if isinstance(out, TestTensor): + out.meta = metas[0] + return out + elif isinstance(out, torch.Tensor): + return TestTensor(out, meta=metas[0]) + + return out + + def compare_tensors(test_out, out): nan_filter = torch.isnan(out) @@ -42,14 +66,11 @@ def compare_tensors(test_out, out): assert hasattr(test_out, "meta") assert test_out.meta == "test" assert torch.allclose(torch.Tensor(test_out).rename(None)[~nan_filter], out) - - - + inplace_func_hierarchy = [valid, inplace_recouple] outofplace_func_hierarchy = [valid, recouple] - fp = urllib.request.urlopen("https://pytorch.org/docs/stable/torch.html") html_doc = fp.read().decode("utf8") fp.close() @@ -67,14 +88,15 @@ def compare_tensors(test_out, out): func_names.append(f"{n}") if hasattr(torch.Tensor, n): func_names.append(f"Tensor.{n}") - # if hasattr(torch, n + "_"): - # func_names.append(f"{n}_") - # if hasattr(torch.Tensor, n + "_"): - # func_names.append(f"Tensor.{n}_") + if hasattr(torch, n + "_"): + func_names.append(f"{n}_") + if hasattr(torch.Tensor, n + "_"): + func_names.append(f"Tensor.{n}_") no_valid_input_found = [] no_valid_output = [] valid_funcs = [] +default_valid_funcs = [] recouple_funcs = [] recouple_inplace_funcs = [] @@ -85,6 +107,10 @@ def compare_tensors(test_out, out): continue if func_name.endswith("real") or func_name.endswith("imag"): continue + if func_name.endswith("frexp"):# or func_name.endswith("ldexp"): + continue + if func_name.endswith("gradient"): + continue is_inplace = func_name.endswith("_") func = get_tensor_attr(func_name) @@ -99,10 +125,12 @@ def compare_tensors(test_out, out): inputs = [x.to(torch.int64) for x in inputs] if func_name.endswith("softmax"): inputs += [-1] - if func_name.endswith("mvlgamma") or func_name == "Tensor.polygamma": + if ("mvlgamma" in func_name) or ("Tensor.polygamma" in func_name): inputs += [1] if func_name == "polygamma": inputs = [1] + inputs + if func_name.endswith("float_power_"): + inputs = [x.to(torch.float64) for x in inputs] target_inputs = [x.clone() if isinstance(x, torch.Tensor) else x for x in inputs] if is_inplace else inputs out = func(*target_inputs) @@ -112,84 +140,59 @@ def compare_tensors(test_out, out): except Exception as e: if i == 3: no_valid_input_found.append(func_name) - #import IPython; IPython.embed() if input_valid: - test_inputs = [to_test(x) if isinstance(x, torch.Tensor) else x for x in inputs] + try: + if is_inplace: + test_inputs = [to_test(x.clone()) if isinstance(x, torch.Tensor) else deepcopy(x) for x in inputs] + test_out = valid(func, *test_inputs) + compare_tensors(test_out, out) + valid_funcs.append(func_name) + else: + test_inputs = [to_test(x) if isinstance(x, torch.Tensor) else x for x in inputs] + test_out = default_valid(func, *test_inputs) + compare_tensors(test_out, out) + default_valid_funcs.append(func_name) + continue + except Exception as e: + pass - test_out = recouple(func, *test_inputs, _tensor_type=TestTensor) - compare_tensors(test_out, out) - recouple_funcs.append(func_name) - # try: - # test_out = valid(func, *test_inputs) - # compare_tensors(test_out, out) - # valid_funcs.append(func_name) - # print("\nSUCCESS\n") - # break - # except: - # pass - # try: - # if is_inplace: - # test_out = inplace_recouple(func, *test_inputs) - # compare_tensors(test_out, out) - # recouple_inplace_funcs.append(func_name) - # else: - # test_out = recouple(func, *test_inputs) - # compare_tensors(test_out, out) - # recouple_funcs.append(func_name) - # break - # except: - # pass + try: + if is_inplace: + test_inputs = [to_test(x.clone()) if isinstance(x, torch.Tensor) else deepcopy(x) for x in inputs] + test_out = inplace_recouple(func, *test_inputs, _tensor_type=TestTensor) + compare_tensors(test_out, out) + recouple_inplace_funcs.append(func_name) + else: + test_inputs = [to_test(x) if isinstance(x, torch.Tensor) else x for x in inputs] + test_out = recouple(func, *test_inputs, _tensor_type=TestTensor) + compare_tensors(test_out, out) + recouple_funcs.append(func_name) + continue + except Exception as e: + pass no_valid_output.append(func_name) - - - - - - - # try: - # stream_inputs = [to_test(x) for x in inputs] - # test_out = func(*stream_inputs) - # except Exception as e: - # test_dict[func_name] = str(e) - # continue - - # if not isinstance(test_out, TestTensor): - # test_dict[func_name] = "NOT_TENSOR" - # continue - - # if not hasattr(test_out, "meta"): - # test_dict[func_name] = "NO_META" - # continue - - # if test_out.meta != "test": - # test_dict[func_name] = "NOT_VALID_META" - # continue - - # nan_filter = torch.isnan(out) - # out = out[~nan_filter] - # test_out = torch.Tensor(test_out).rename(None)[~nan_filter] - # if torch.allclose(out, test_out): - # test_dict[func_name] = "VALID" - # else: - # test_dict[func_name] = "NOT_CLOSE" - - - - - - - - -# if len(glob("lists/pointwise-ops-*.txt")) > 0: -# raise Exception("lists/pointwise-ops-*.txt already exists. Please delete this/these file(s) before running this script.") -# scrape_date = datetime.now().strftime("%Y_%m_%d-%H_%M_%S") -# with open(f"lists/default-valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: -# file_buffer.write("\n".join(pwo_defualt_valid)) -# with open(f"lists/valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: -# file_buffer.write("\n".join(pwo_valid)) \ No newline at end of file +print(f"\n\nNumber of valid funcs: {len(valid_funcs)}") +print(f"Number of default valid funcs: {len(default_valid_funcs)}") +print(f"Number of recouple funcs: {len(recouple_funcs)}") +print(f"Number of inplace recouple funcs: {len(recouple_inplace_funcs)}") +print(f"Number of funcs wo/ valid input: {len(no_valid_input_found)}") +print(f"Number of funcs wo/ valid output: {len(no_valid_output)}") + + +if len(glob("lists/*pointwise-ops*.txt")) > 0: + raise Exception("lists/*pointwise-ops*.txt already exists. Please delete this/these file(s) before running this script.") +scrape_date = datetime.now().strftime("%Y_%m_%d-%H_%M_%S") +with open(f"lists/default-valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: + file_buffer.write("\n".join(default_valid_funcs)) +with open(f"lists/valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: + file_buffer.write("\n".join(valid_funcs)) +with open(f"lists/recouple-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: + file_buffer.write("\n".join(recouple_funcs)) +with open(f"lists/inplace-recouple-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: + file_buffer.write("\n".join(recouple_inplace_funcs)) \ No newline at end of file diff --git a/dreamstream/func_coverage.py b/dreamstream/func_coverage.py index 94d7bee..9b5bb2c 100644 --- a/dreamstream/func_coverage.py +++ b/dreamstream/func_coverage.py @@ -3,7 +3,8 @@ import torch -from dreamstream.utils.listloaders import load_default_valid_pointwise_ops, load_valid_pointwise_ops +from dreamstream.utils.listloaders import load_default_valid_pointwise_ops, load_valid_pointwise_ops, \ + load_recouple_pointwise_ops, load_inplace_recouple_pointwise_ops FLAT_OVERRIDABLE_FUNCTIONS = {f for k, fs in torch.overrides.get_overridable_functions().items() for f in fs} @@ -15,6 +16,8 @@ DEFAULT_VALID_POITWISE_OPS = load_default_valid_pointwise_ops() VALID_POITWISE_OPS = load_valid_pointwise_ops() +RECOUPLE_POITWISE_OPS = load_recouple_pointwise_ops() +INPLACE_RECOUPLE_POITWISE_OPS = load_inplace_recouple_pointwise_ops() # Functions that work for StreamTensors using the super().__torch_function__. VALID_FUNCTIONS = { @@ -53,7 +56,7 @@ torch.Tensor.real, } VALID_FUNCTIONS.update(GET_METHODS) -#VALID_FUNCTIONS.update(VALID_POITWISE_OPS) +VALID_FUNCTIONS.update(VALID_POITWISE_OPS) # Functions that work for StreamTensors using the super().__torch_function__, but .meta is not preserved. DEFAULT_VALID_FUNCTIONS = { @@ -76,7 +79,7 @@ torch.Tensor.__add__, } -#DEFAULT_VALID_FUNCTIONS.update(DEFAULT_VALID_POITWISE_OPS) +DEFAULT_VALID_FUNCTIONS.update(DEFAULT_VALID_POITWISE_OPS) # Functions that must be wrapped to avoid returning a StreamTensor (and may not ). DECOUPLE_FUNCTIONS = { @@ -88,6 +91,7 @@ torch.quantize_per_channel, # output "type" is not supported with names torch.fake_quantize_per_channel_affine, # output "type" is not supported with names torch.fake_quantize_per_tensor_affine, # output "type" is not supported with names + torch.gradient, # TODO: double check if decouple is the right category for torch.gradient } # Functions that must be wrapped to avoid failures related to named tensors (and to maintain StreamMetadata). @@ -112,10 +116,12 @@ torch.real, torch.imag, } +RECOUPLE_FUNCTIONS.update(RECOUPLE_POITWISE_OPS) INPLACE_RECOUPLE_FUNCTIONS = { torch.Tensor.heaviside_, } +INPLACE_RECOUPLE_FUNCTIONS.update(INPLACE_RECOUPLE_POITWISE_OPS) # The full set of functions that are explicitly supported for StreamTensors. SUPPORTED_FUNCTIONS = VALID_FUNCTIONS | DEFAULT_VALID_FUNCTIONS | DECOUPLE_FUNCTIONS | RECOUPLE_FUNCTIONS | INPLACE_RECOUPLE_FUNCTIONS | CUSTOMIZED_FUNCTIONS.keys() diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 9ef420e..4a40394 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -752,6 +752,6 @@ def recouple(func, *args, _tensor_type=StreamTensor, **kwargs): return _tensor_type(out, meta_list[0]) -def inplace_recouple(func, tensor, *args, **kwargs): - decouple(func, tensor, *args, **kwargs) +def inplace_recouple(func, tensor, *args, _tensor_type=StreamTensor, **kwargs): + decouple(func, tensor, *args, _tensor_type=_tensor_type, **kwargs) return tensor diff --git a/dreamstream/utils/listloaders.py b/dreamstream/utils/listloaders.py index 4ae65a2..40026ef 100644 --- a/dreamstream/utils/listloaders.py +++ b/dreamstream/utils/listloaders.py @@ -19,3 +19,13 @@ def load_valid_pointwise_ops(): ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} return ops_list +def load_recouple_pointwise_ops(): + with open(glob(os.path.join(lists_path, "recouple-pointwise-ops-*.txt"))[0], "r") as file_buffer: + ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} + return ops_list + +def load_inplace_recouple_pointwise_ops(): + with open(glob(os.path.join(lists_path, "inplace-recouple-pointwise-ops-*.txt"))[0], "r") as file_buffer: + ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} + return ops_list + From 6ca11afa3a0e9621a8b22d76c003622bd44615c5 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Thu, 22 Jun 2023 10:22:30 +0000 Subject: [PATCH 05/36] Add outer level patch method --- dreamstream/data/stream_dataset.py | 47 ++++++----- dreamstream/nn/utils/pad_sequence.py | 1 - dreamstream/overrides.py | 13 ++-- dreamstream/patches/conv.py | 9 +-- dreamstream/patches/general.py | 37 ++++++--- dreamstream/patches/modes.py | 27 +++++++ dreamstream/tensor.py | 34 ++++---- dreamstream/warnings.py | 4 + examples/wav2letter.py | 112 +++++++++++++++++++++++++++ tests/data/test_stream_dataset.py | 18 ++--- tests/test_tensor.py | 72 ++++++++--------- 11 files changed, 268 insertions(+), 106 deletions(-) create mode 100644 dreamstream/patches/modes.py create mode 100644 examples/wav2letter.py diff --git a/dreamstream/data/stream_dataset.py b/dreamstream/data/stream_dataset.py index 4be2295..9522705 100644 --- a/dreamstream/data/stream_dataset.py +++ b/dreamstream/data/stream_dataset.py @@ -323,7 +323,7 @@ def continue_buffering( num_current_buffered = sum(1 for id in active_ids if id in buffers and buffers[id] and buffers[id][-1].eos) num_next_buffered = sum(1 for id in buffers.keys() if id not in active_ids and buffers[id] and buffers[id][-1].eos) - return num_next_buffered < (batch_size - num_current_buffered) or num_current_buffered < num_current_running + return num_current_buffered < num_current_running or num_next_buffered < (batch_size - num_current_running) def make_streams_synchronous( @@ -382,12 +382,13 @@ def __init__( batch_size: int = 1, shuffle: bool = False, num_workers: int = 0, - non_overlapping_batches: bool = False, + overlapping_batches: bool = False, collate_fn: Optional[Callable] = None, pin_memory: bool = False, drop_last: bool = False, timeout: float = 0, worker_init_fn: Optional[Callable] = None, + multiprocessing_context: Any | None = None, prefetch_factor: Optional[int] = None, persistent_workers: bool = False, pin_memory_device: Optional[torch.device] = "", @@ -402,12 +403,15 @@ def __init__( Args: dataset (Union[IterableDataset, List[IterableDataset]]): A single or a list of IterableDataset instances. batch_size (int): The batch size. + shuffle (bool): Whether to shuffle the dataset between epochs. num_workers (int, optional): When a single dataset is given, it is split into `num_workers` subsets and - each to be processed in parallel by a single worker. When a list of datasets is given, `num_workers` - has no effect. Defaults to 0. - non_overlapping_batches (bool, optional): If True, the batches are non-overlapping. In this case, new files - are started only once every file in the batch has ended. If False, a new file is started as soon as a - file in the previous batch ended. Defaults to False. + each to be processed in parallel by a DataLoader using a single worker. When a list of datasets is + given, `num_workers` has no effect. Defaults to 0. + overlapping_batches (bool, optional): If True, each new batch will introduce new files to replace those that + ended in the previous batch, keeping the batch size constant (except for the last batch if + `drop_last=False`). If False, new files will only start once all files from the previous batch have + ended. This is usually more memory and compute efficient for state management in models in online mode, + but also leads to more batches. Defaults to False. drop_last (bool, optional): Drop the last batch(es) if smaller than `batch_size`. Defaults to False. collate_fn (Callable, optional): A function that takes a list of batch parts and collates them into a batch. Defaults to None. @@ -416,14 +420,17 @@ def __init__( self.batch_size = batch_size self.shuffle = shuffle self.num_workers = num_workers - self.non_overlapping_batches = non_overlapping_batches + self.overlapping_batches = overlapping_batches self.drop_last = drop_last self.worker_init_fn = worker_init_fn + self.collate_fn = collate_fn - if drop_last and non_overlapping_batches: - raise ValueError("Only one of `drop_last` and `non_overlapping_batches` can be True.") + if drop_last and not overlapping_batches: + raise ValueError("`drop_last` can only be used when overlapping batches.") if isinstance(dataset, list): + if num_workers > 0: + raise ValueError("When a list of datasets is given, `num_workers` has no effect.") self.num_workers = len(dataset) if collate_fn is None: @@ -432,13 +439,13 @@ def __init__( else: collate_fn = torch.utils.data._utils.collate.default_collate - self.collate_fn = collate_fn - self.dataloader_kwargs = dict( batch_size=None, + collate_fn=None, num_workers=(0 if self.num_workers == 0 else 1), pin_memory=pin_memory, timeout=timeout, + multiprocessing_context=multiprocessing_context, prefetch_factor=(prefetch_factor if num_workers > 0 else None), persistent_workers=persistent_workers, pin_memory_device=pin_memory_device, @@ -446,7 +453,7 @@ def __init__( def _get_worker_init_fn(self, actual_worker_id: int): """Wrap worker_init_fn to change the input `worker_id` for each worker. This is necessary because we - use `num_workers` independent DataLoaders instead of one DataLoader with `num_workers` workers.""" + use `num_workers` independent DataLoaders with one worker each instead of one with `num_workers` workers.""" if self.worker_init_fn is None: return None @@ -458,6 +465,9 @@ def wrapped_worker_init_fn(dataloader_worker_id: int): return wrapped_worker_init_fn def get_stream_loaders(self) -> Generator[Any, None, None]: + # TODO (JDH): Wrap this method in a dedicated process to offload all data preparation from main process. + # Currently this happens in the main proces and may take a bit of time, especially the collation. + if isinstance(self.dataset, IterableDataset): num_workers = max(1, self.num_workers) datasets = self.dataset.split( @@ -488,7 +498,7 @@ def get_stream_loaders(self) -> Generator[Any, None, None]: stream_loader = (list(itertools.chain.from_iterable(batch_parts)) for batch_parts in stream_loaders) # Wait for all files being streamed to finish before starting the next set of files. - if self.non_overlapping_batches: + if not self.overlapping_batches: stream_loader = make_streams_synchronous(stream_loader) # Collate batches @@ -500,9 +510,6 @@ def __iter__(self) -> Generator[Any, None, None]: yield batch -# TODO (JDH): Wrap collation in a dedicated process to offload all data preparation from main process. Currently -# collation happens in the main proces. - class MultiStreamOneProcessDataLoader: def __init__( @@ -511,7 +518,7 @@ def __init__( batch_size: int = 1, shuffle: bool = False, num_workers: int = 0, - non_overlapping_batches: bool = False, + overlapping_batches: bool = False, collate_fn: Optional[Callable] = None, pin_memory: bool = False, drop_last: bool = False, @@ -537,7 +544,7 @@ def __init__( num_workers (int, optional): When a single dataset is given, it is split into `num_workers` subsets and each to be processed in parallel by a single worker. When a list of datasets is given, `num_workers` has no effect. Defaults to 0. - non_overlapping_batches (bool, optional): If True, the batches are non-overlapping. In this case, new files + overlapping_batches (bool, optional): If True, the batches are non-overlapping. In this case, new files are started only once every file in the batch has ended. If False, a new file is started as soon as a file in the previous batch ended. Defaults to False. drop_last (bool, optional): Drop the last batch(es) if smaller than `batch_size`. Defaults to False. @@ -552,7 +559,7 @@ def __init__( batch_size=batch_size, shuffle=shuffle, num_workers=0, - non_overlapping_batches=non_overlapping_batches, + overlapping_batches=overlapping_batches, collate_fn=collate_fn, pin_memory=pin_memory, drop_last=drop_last, diff --git a/dreamstream/nn/utils/pad_sequence.py b/dreamstream/nn/utils/pad_sequence.py index 1e80c05..c2c8b2a 100644 --- a/dreamstream/nn/utils/pad_sequence.py +++ b/dreamstream/nn/utils/pad_sequence.py @@ -36,7 +36,6 @@ def pad_chunks( tensor = tensor.rename(*names) meta = StreamMetadata(ids=ids, sos=sos, eos=eos, lengths=lengths) - return StreamTensor(data=tensor, meta=meta) diff --git a/dreamstream/overrides.py b/dreamstream/overrides.py index c707490..d99f490 100644 --- a/dreamstream/overrides.py +++ b/dreamstream/overrides.py @@ -4,6 +4,7 @@ from torch.types import Number import numpy as np +import rich import torch import torch.nn.functional as F from torch import Tensor @@ -62,8 +63,8 @@ def cat(tensors: List[Union[StreamTensor, Tensor]], dim=0, *, out=None): is_batch_dim = [t.is_batch_dim(dim) for t in tensors if isinstance(t, StreamTensor)] # TODO (JDH): Speed this up if any(is_batch_dim): require_all_stream_tensors(tensors, "Cannot concatenate StreamTensor and torch.Tensor along batch dimension.") - tensors = [t.named_tensor() for t in tensors] - tensor = torch.cat(tensors, dim=dim, out=out) + torch_tensors = [t.named_tensor() for t in tensors] + tensor = torch.cat(torch_tensors, dim=dim, out=out) meta = StreamMetadata.cat_batch([t.meta for t in tensors]) # TODO (JDH): Make this lazily evaluated. return StreamTensor(tensor, meta) @@ -72,11 +73,11 @@ def cat(tensors: List[Union[StreamTensor, Tensor]], dim=0, *, out=None): if any(is_length_dim): for t in tensors[:-1]: if isinstance(t, StreamTensor) and t.meta.lengths.min() < t.max_length(): - raise NotImplementedError("Only the last tensor can be padded when concatenating along length.") - tensors = [t.named_tensor() if isinstance(t, StreamTensor) else t for t in tensors] - tensor = torch.cat(tensors, dim=dim, out=out) + raise NotImplementedError("Only the right-most input can be padded when concatenating along length.") + torch_tensors = [t.named_tensor() if isinstance(t, StreamTensor) else t for t in tensors] + tensor = torch.cat(torch_tensors, dim=dim, out=out) meta = StreamMetadata.cat_length([t.meta for t in tensors if isinstance(t, StreamTensor)]) - meta.lengths += sum([t.size(dim) for t in tensors if not isinstance(t, StreamTensor)]) + meta.lengths += sum([t.size(dim) for t in tensors if not isinstance(t, StreamTensor)]) # Add torch.Tensors return StreamTensor(tensor, meta) # Concatenation along a dimension that is neither batch nor length. diff --git a/dreamstream/patches/conv.py b/dreamstream/patches/conv.py index 556969f..916b90d 100644 --- a/dreamstream/patches/conv.py +++ b/dreamstream/patches/conv.py @@ -3,7 +3,7 @@ import torch from dreamstream.tensor import StreamTensor, StreamMetadata -from dreamstream.patches.general import online, offline +from dreamstream.patches.modes import add_streaming_modes, online, offline from dreamstream.nn.utils import pad_stream_tensor @@ -38,7 +38,7 @@ def conv_1d_pre_hook(self, inputs): # If not, split batch into individual inputs and concatenate separately first. # TODO (LB): This needs to be tested. input = input.unpad_sequence() - input = [a if b is None else torch.cat([b, a], dim=-1) for a, b in zip(input, buffer_data)] + input = [x if b is None else torch.cat([b, x], dim=-1) for x, b in zip(input, buffer_data)] input = pad_stream_tensor(input).permute(1, 2, 0) return input @@ -60,10 +60,7 @@ def conv_1d_post_hook(self, inputs, outputs): def patch_conv_1d(module): - # Add streaming mode. - module.online = types.MethodType(online, module) - module.offline = types.MethodType(offline, module) - module.streaming = False + add_streaming_modes(module) # Add stream_buffer dictionary. module.stream_buffer = {} diff --git a/dreamstream/patches/general.py b/dreamstream/patches/general.py index 6403830..e6fa6dc 100644 --- a/dreamstream/patches/general.py +++ b/dreamstream/patches/general.py @@ -1,15 +1,30 @@ -def online(self, mode=True): - if not isinstance(mode, bool): - raise ValueError("streaming mode is expected to be boolean") - self.streaming = mode - for module in self.children(): - module.online(mode) - return self +import torch.nn as nn +from dreamstream.patches.conv import patch_conv_1d +from dreamstream.patches.modes import add_streaming_modes -def offline(self): - return self.online(mode=False) +MODULE_TO_PATCH = { + nn.Conv1d: patch_conv_1d, +} -def patch(module): - raise NotImplementedError("stream_patch is not implemented") + +def patch(module: nn.Module) -> nn.Module: + """Recursively apply `patch_module` to all modules in `module`.""" + module.apply(patch_module) + return module + + +def patch_module(module) -> None: + """Patch a given module to support streaming mode.""" + patch_method = MODULE_TO_PATCH.get(type(module), None) + if patch_method is None: + add_streaming_modes(module) + else: + patch_method(module) + + # Error checking for modules that do NOT have the correct behaviour yet. + if isinstance(module, (nn.Conv2d, nn.Conv3d, nn.ConvTranspose1d, nn.ConvTranspose2d, nn.ConvTranspose3d, nn.LSTM, nn.GRU, nn.RNN, nn.MultiheadAttention)): + raise NotImplementedError(f"Module {type(module)} is not supported yet.") + + return module diff --git a/dreamstream/patches/modes.py b/dreamstream/patches/modes.py new file mode 100644 index 0000000..084c27c --- /dev/null +++ b/dreamstream/patches/modes.py @@ -0,0 +1,27 @@ +import types + +import torch.nn as nn + + +def online(self: nn.Module, mode: bool = True) -> nn.Module: + """Set the module to either online (default) or offline mode.""" + if not isinstance(mode, bool): + raise ValueError(f"Streaming `mode` was expected to be boolean but got {mode=}.") + + self.streaming = mode + for module in self.children(): + module.online(mode) + return self + + +def offline(self: nn.Module) -> nn.Module: + """Set the module to offline mode.""" + return self.online(mode=False) + + +def add_streaming_modes(module: nn.Module): + """Equip a module with the streaming mode but no additional functionality.""" + module.online = types.MethodType(online, module) + module.offline = types.MethodType(offline, module) + module.streaming = False + return module diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 6f8707a..57e66d5 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -1,5 +1,4 @@ import itertools -import warnings from copy import deepcopy from typing import Any, Callable, List, Optional, Tuple, Union, Mapping, Sequence @@ -26,6 +25,7 @@ update_eos_from_slice, update_lengths_from_list_of_indices, ) +from dreamstream import warnings # TODO (JDH): Make StreamMetadata methods like cat, split and index lazily evaluated such that they only evaluate when @@ -41,6 +41,7 @@ class StreamMetadata: "_eos", "_lengths", "_chunk_indices", + "_temp_buffer", "_min_length", "_max_length", "_lengths_updated", @@ -236,7 +237,7 @@ def __copy__(self): new_meta.__dict__.update(self.__dict__) return new_meta - def __deepcopy__(self): + def __deepcopy__(self, memo): """Return a deep copy of the StreamMetadata object.""" return StreamMetadata( ids=deepcopy(self.ids), @@ -665,8 +666,6 @@ def __init__(self, data, meta: StreamMetadata, *args, **kwargs): """Initialize a StreamTensor object (self is StreamTensor, data is e.g. torch.Tensor).""" super().__init__() self.meta = meta - if names is not None: - self.rename_(*names) def __getstate__(self) -> Tuple[torch.Tensor, StreamMetadata, List[str]]: """Return the state of the StreamTensor object.""" @@ -711,13 +710,14 @@ def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), # Unhandled functions are passed to the torch.Tensor.__torch_function__ method. if func not in DEFAULT_VALID_FUNCTIONS: warnings.warn( - f"Function {func.__name__} is not handled by StreamTensor.__torch_function__ and may not work as expected." + f"Function {func.__name__} is not handled by StreamTensor.__torch_function__ " + f"and may not work as expected." ) return cls.default_valid(func, types, args, kwargs) - @staticmethod - def default_valid(func, types, args, kwargs): + @classmethod + def default_valid(cls, func, types, args, kwargs): out = super().__torch_function__(func, types, args, kwargs) metas = [x.meta for x in [*args, *kwargs.values()] if isinstance(x, StreamTensor)] # TODO (JDH): Make recursive @@ -766,9 +766,6 @@ def imag(self): def T(self): return self.permute(*reversed(range(self.ndim))) - # def test(self): - # return super().rename(None) - def is_batch_dim(self, dim: int) -> bool: return self.names[dim] == BATCH @@ -798,10 +795,8 @@ def drop_empty(self) -> "StreamTensor": return None if len(self.meta) == 1 and self.meta.max_length > 0: return self - tensor, meta, names = self.decouple() - batch_dim = names.index(BATCH) - tensor = torch.index_select(tensor, batch_dim, meta.lengths.nonzero().squeeze()) - return as_stream_tensor(data=tensor, meta=meta.drop_empty(), names=names) + + return torch.index_select(self, self.batch_dim, self.meta.lengths.nonzero().squeeze()) def named_tensor(self) -> torch.Tensor: """Return the underlying torch.Tensor with names.""" @@ -847,9 +842,14 @@ def stream_tensor( pin_memory: bool = False, ) -> StreamTensor: """Convert a tensor to a StreamTensor. See also `torch.tensor`.""" - data = torch.tensor( - data, names=names, dtype=dtype, device=device, requires_grad=requires_grad, pin_memory=pin_memory - ) + try: + data = torch.tensor( + data, names=names, dtype=dtype, device=device, requires_grad=requires_grad, pin_memory=pin_memory + ) + except RuntimeError: + data = torch.tensor(data, dtype=dtype, device=device, requires_grad=requires_grad, pin_memory=pin_memory) + data.rename_(*names) + return StreamTensor(data=data, meta=meta) diff --git a/dreamstream/warnings.py b/dreamstream/warnings.py index d860138..131cfab 100644 --- a/dreamstream/warnings.py +++ b/dreamstream/warnings.py @@ -5,6 +5,10 @@ class TorchStreamWarning(RuntimeWarning): pass +def warn(message: str): + warnings.warn(message, TorchStreamWarning, stacklevel=2) + + class TorchStreamFallbackWarning(TorchStreamWarning): pass diff --git a/examples/wav2letter.py b/examples/wav2letter.py new file mode 100644 index 0000000..c25d020 --- /dev/null +++ b/examples/wav2letter.py @@ -0,0 +1,112 @@ +import os +import random +import pandas as pd +import pathlib +import requests +import torch +import uuid + +from torchaudio.models import Wav2Letter + +from dreamstream.data import AudioStreamDataset, MultiStreamDataLoader + +from dreamstream.patches.general import patch +from dreamstream.utils.flags import LENGTH +from dreamstream.nn.utils import pad_full_sequence, pad_stream_tensor +from dreamstream.patches import patch_conv_1d +from dreamstream.data import OutputCollector + + +# _SAMPLE_DIR = pathlib.Path(os.path.join(os.path.dirname(__file__), "sample_data")) +# _SAMPLE_DIR.mkdir(exist_ok=True) + + +# SAMPLE_WAV_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/steam-train-whistle-daniel_simon.wav" +# SAMPLE_WAV_PATH = _SAMPLE_DIR / "steam.wav" + +# SAMPLE_WAV_SPEECH_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/source-16k/train/sp0307/Lab41-SRI-VOiCES-src-sp0307-ch127535-sg0042.wav" +# SAMPLE_WAV_SPEECH_PATH = _SAMPLE_DIR / "speech.wav" + +# SAMPLE_RIR_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/distant-16k/room-response/rm1/impulse/Lab41-SRI-VOiCES-rm1-impulse-mc01-stu-clo.wav" +# SAMPLE_RIR_PATH = _SAMPLE_DIR / "rir.wav" + +# SAMPLE_NOISE_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/distant-16k/distractors/rm1/babb/Lab41-SRI-VOiCES-rm1-babb-mc01-stu-clo.wav" +# SAMPLE_NOISE_PATH = _SAMPLE_DIR / "bg.wav" + + +# def _fetch_data(): +# uri = [ +# (SAMPLE_WAV_URL, SAMPLE_WAV_PATH), +# (SAMPLE_WAV_SPEECH_URL, SAMPLE_WAV_SPEECH_PATH), +# (SAMPLE_RIR_URL, SAMPLE_RIR_PATH), +# (SAMPLE_NOISE_URL, SAMPLE_NOISE_PATH), +# ] +# for url, path in uri: +# if not os.path.exists(path): +# with open(path, 'wb') as file_: +# file_.write(requests.get(url).content) + + +def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): + chunks = [] + chunk_sum, remaining = 0, full_length + while remaining > 0: + chunks.append(min(random.randint(min_size, max_size), remaining)) + chunk_sum = sum(chunks) + remaining = full_length - chunk_sum + return chunks + + +def run(): + # _fetch_data() + + # source_files = [SAMPLE_WAV_PATH, SAMPLE_WAV_SPEECH_PATH, SAMPLE_RIR_PATH, SAMPLE_NOISE_PATH] + # dataset = AudioStreamDataset(source_files, chunk_seconds=0.3) + # loader = MultiStreamDataLoader(dataset, batch_size=2, num_workers=0, overlapping_batches=False, collate_fn=dataset.custom_collate) + + + # model = Wav2Letter(num_classes=40, input_type="waveform") + # model = torch.nn.Conv1d(1, 128, 3, padding=1) + model = torch.nn.Sequential( + torch.nn.Conv1d(1, 128, 3, padding=1), + torch.nn.Conv1d(128, 256, 5, padding=2), + ) + model = patch(model) + + # TEST 1: Test with multiple streams of different lengths. + sequences = [torch.rand(1, random.randint(16000, 48000)) for i in range(32)] + + ids = [str(uuid.uuid4()) for i in range(32)] + targets = {_id: model(s) for _id, s in zip(ids, sequences)} + # original_sequences = {_id: s for _id, s in zip(ids, sequences)} + + data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") + data = data.unpad_sequence() + data = {_id: s.split(random_chunks(s.size("L"), min_size=16000, max_size=32000), dim=1) for _id, s in zip(ids, data)} + + + def remaining_chunks(data): + return sum([len(x) for x in data.values()]) + + + batches = [] + while remaining_chunks(data) > 0: + batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] + if len(batch) > 0: + batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) + + stream_output = OutputCollector() + model.online() + for x in batches: + print(x.shape) + y = model(x) + stream_output.update(y) + + for _id, _y in targets.items(): + y = stream_output[_id].tensor() + abs_diff = (_y - y).abs() + print(y.size(-1), torch.allclose(_y, y), abs_diff.max().item(), abs_diff.max(0).values[:10].max().item()) + + +if __name__ == "__main__": + run() diff --git a/tests/data/test_stream_dataset.py b/tests/data/test_stream_dataset.py index dcde685..cc1ce65 100644 --- a/tests/data/test_stream_dataset.py +++ b/tests/data/test_stream_dataset.py @@ -134,7 +134,7 @@ def test_split(self, test_source_df, use_file_lengths, num_workers, batch_size, class TestMultiStreamDataLoader: @pytest.mark.parametrize( - "shuffle, drop_last, non_overlapping_batches", + "shuffle, drop_last, overlapping_batches", [ (False, False, False), (True, False, False), @@ -146,7 +146,7 @@ class TestMultiStreamDataLoader: (True, True, True), ], ) - def test_instantiate(self, test_source_df, shuffle, drop_last, non_overlapping_batches): + def test_instantiate(self, test_source_df, shuffle, drop_last, overlapping_batches): dataset = AudioStreamDataset( file_list=test_source_df.filename, file_lengths=test_source_df.length, @@ -158,10 +158,10 @@ def test_instantiate(self, test_source_df, shuffle, drop_last, non_overlapping_b "num_workers": 5, "shuffle": shuffle, "drop_last": drop_last, - "non_overlapping_batches": non_overlapping_batches, + "overlapping_batches": overlapping_batches, } - if drop_last and non_overlapping_batches: + if drop_last and not overlapping_batches: with pytest.raises(ValueError): MultiStreamDataLoader(dataset, **kwargs) return None @@ -171,9 +171,9 @@ def test_instantiate(self, test_source_df, shuffle, drop_last, non_overlapping_b assert isinstance(iter(dataloader), Generator) @pytest.mark.parametrize( - "num_workers, shuffle, non_overlapping_batches", itertools.product(*[[0, 1, 5], [True, False], [True, False]]) + "num_workers, shuffle, overlapping_batches", itertools.product(*[[0, 1, 5], [True, False], [True, False]]) ) - def test_iterate_drop_last0(self, test_source_df, num_workers, shuffle, non_overlapping_batches): + def test_iterate_drop_last0(self, test_source_df, num_workers, shuffle, overlapping_batches): dataset = AudioStreamDataset( file_list=test_source_df.filename, file_lengths=test_source_df.length, @@ -185,7 +185,7 @@ def test_iterate_drop_last0(self, test_source_df, num_workers, shuffle, non_over num_workers=num_workers, shuffle=shuffle, drop_last=False, - non_overlapping_batches=non_overlapping_batches, + overlapping_batches=overlapping_batches, collate_fn=dataset.custom_collate, ) @@ -205,7 +205,7 @@ def test_iterate_drop_last0(self, test_source_df, num_workers, shuffle, non_over samples_seen.extend(sample_ids) sos = [int(sos) for sos in batch.meta.sos] - if non_overlapping_batches: + if not overlapping_batches: assert all([sos[i] == sos[0] for i in range(len(sos))]), "All files must start simultaneously." # names = [id.split("/")[-1].split(".")[0] for id in batch.meta.ids] @@ -234,7 +234,7 @@ def test_iterate_drop_last1(self, test_source_df, shuffle): num_workers=0, shuffle=shuffle, drop_last=True, - non_overlapping_batches=False, + overlapping_batches=True, collate_fn=dataset.custom_collate, ) diff --git a/tests/test_tensor.py b/tests/test_tensor.py index 5e1f14f..ff449e6 100644 --- a/tests/test_tensor.py +++ b/tests/test_tensor.py @@ -7,7 +7,7 @@ from dreamstream.func_coverage import ( DECOUPLE_FUNCTIONS, FLAT_OVERRIDABLE_FUNCTIONS, - OVERRIDDEN_FUNCTIONS, + CUSTOMIZED_FUNCTIONS, RECOUPLE_FUNCTIONS, UNSUPPORTED_FUNCTIONS, VALID_FUNCTIONS, @@ -198,37 +198,37 @@ def to_torch_tensor_recursive(x): TEST_SKIP_EQUALITY_CHECK = {torch.Tensor.__repr__, torch.Tensor.__str__} -def test_valid_coupled_recoupled_functions(): - """Iterate over all valid, coupled and recoupled functions and check that they work as expected.""" - INPUTS = collections.defaultdict(Inputs) - INPUTS.update(TEST_INPUTS_VALID_FUNCTIONS | TEST_INPUTS_DECOUPLE_FUNCTIONS | TEST_INPUTS_RECOUPLE_FUNCTIONS) +# def test_valid_coupled_recoupled_functions(): +# """Iterate over all valid, coupled and recoupled functions and check that they work as expected.""" +# INPUTS = collections.defaultdict(Inputs) +# INPUTS.update(TEST_INPUTS_VALID_FUNCTIONS | TEST_INPUTS_DECOUPLE_FUNCTIONS | TEST_INPUTS_RECOUPLE_FUNCTIONS) - FUNCTIONS = VALID_FUNCTIONS | DECOUPLE_FUNCTIONS | RECOUPLE_FUNCTIONS +# FUNCTIONS = VALID_FUNCTIONS | DECOUPLE_FUNCTIONS | RECOUPLE_FUNCTIONS - failed = [] - for function in FUNCTIONS: - try: - args, kwargs = INPUTS[function] - stream_tensor_out = function(*args, **kwargs) - torch_tensor_out = function(*to_torch_tensor_recursive(args), **to_torch_tensor_recursive(kwargs)) +# failed = [] +# for function in FUNCTIONS: +# try: +# args, kwargs = INPUTS[function] +# stream_tensor_out = function(*args, **kwargs) +# torch_tensor_out = function(*to_torch_tensor_recursive(args), **to_torch_tensor_recursive(kwargs)) - if function in TEST_SKIP_EQUALITY_CHECK: - continue +# if function in TEST_SKIP_EQUALITY_CHECK: +# continue - if isinstance(torch_tensor_out, torch.Tensor): - stream_tensor_out = stream_tensor_out.rename(None) - torch_tensor_out = torch_tensor_out.rename(None) - assert torch.equal(stream_tensor_out, torch_tensor_out) - else: - assert stream_tensor_out == torch_tensor_out +# if isinstance(torch_tensor_out, torch.Tensor): +# stream_tensor_out = stream_tensor_out.rename(None) +# torch_tensor_out = torch_tensor_out.rename(None) +# assert torch.equal(stream_tensor_out, torch_tensor_out) +# else: +# assert stream_tensor_out == torch_tensor_out - except Exception as e: - failed.append((function, e)) +# except Exception as e: +# failed.append((function, e)) - if any(failed): - failed_str = " - " + "\n\n - ".join([f"{f.__name__}: {e}" for f, e in failed]) - err = f"The following functions claimed to be valid, were not:\n{failed_str}" - raise AssertionError("\n\n" + err) +# if any(failed): +# failed_str = " - " + "\n - ".join([f"{f.__name__}: {e}" for f, e in failed]) +# err = f"The following {len(failed)} functions claimed to be valid, were not:\n{failed_str}" +# raise AssertionError("\n" + err) # def test_unsupported_functions(stream_tensor_bfl_fixture): @@ -244,18 +244,18 @@ def test_valid_coupled_recoupled_functions(): # raise AssertionError(f"The following functions claimed to be invalid, were not:\n{failed_str}") -def test_function_coverage(): - """Test that we have covered all functions in torch.nn.functional.""" - num_overridden = len(OVERRIDDEN_FUNCTIONS) - num_valid = len(VALID_FUNCTIONS) - num_invalid = len(UNSUPPORTED_FUNCTIONS) - num_total = num_overridden + num_valid + num_invalid +# def test_function_coverage(): +# """Test that we have covered all functions in torch.nn.functional.""" +# num_customized = len(CUSTOMIZED_FUNCTIONS) +# num_valid = len(VALID_FUNCTIONS) +# num_invalid = len(UNSUPPORTED_FUNCTIONS) +# num_total = num_customized + num_valid + num_invalid - fraction_working = (num_overridden + num_valid) / num_total +# fraction_working = (num_customized + num_valid) / num_total - msg = "Total number of functions must be the number of overridable functions plus any dunder methods." - assert num_total >= len(FLAT_OVERRIDABLE_FUNCTIONS), msg - assert fraction_working > 0.8, f"Only {fraction_working*100:.1f} % of torch functions are covered (req >80%)." +# msg = "Total number of functions must be the number of overridable functions plus any dunder methods." +# assert num_total >= len(FLAT_OVERRIDABLE_FUNCTIONS), msg +# assert fraction_working > 0.8, f"Only {fraction_working*100:.1f} % of torch functions are covered (req >80%)." ## Indexing functions From 59ddca723e0262a1404ba7b80d35b1a21437affe Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Thu, 22 Jun 2023 13:48:16 +0000 Subject: [PATCH 06/36] Add test for conv patch --- dreamstream/__init__.py | 1 + dreamstream/data/data_objects.py | 10 ++- dreamstream/nn/utils/__init__.py | 2 +- dreamstream/nn/utils/pad_sequence.py | 1 - dreamstream/overrides.py | 7 +- dreamstream/patches/__init__.py | 4 +- dreamstream/patches/conv.py | 73 +----------------- dreamstream/utils/operations.py | 44 +++++++++++ examples/wav2letter.py | 83 ++++++-------------- tests/patches/test_patching.py | 110 +++++++++++++++++++++++++++ 10 files changed, 196 insertions(+), 139 deletions(-) create mode 100644 dreamstream/utils/operations.py create mode 100644 tests/patches/test_patching.py diff --git a/dreamstream/__init__.py b/dreamstream/__init__.py index 08f5371..8cb69a4 100644 --- a/dreamstream/__init__.py +++ b/dreamstream/__init__.py @@ -2,3 +2,4 @@ import dreamstream.random # noqa: F401 from dreamstream.tensor import StreamTensor, StreamMetadata, stream_tensor, as_stream_tensor # noqa: F401 +from dreamstream.patches import patch, patch_module, add_streaming_modes, patch_conv_1d # noqa: F401 \ No newline at end of file diff --git a/dreamstream/data/data_objects.py b/dreamstream/data/data_objects.py index fea76e0..8f574b2 100644 --- a/dreamstream/data/data_objects.py +++ b/dreamstream/data/data_objects.py @@ -109,7 +109,7 @@ def update(self, *stream_tensors: Tuple[StreamTensor]): for t in stream_tensors: if BATCH in t.names: for x in t.unpad_sequence(): - if x.meta.max_length > 0: + if x.meta.max_length > 0: # NOTE (JDH): Will error out when the first chunk output has length == 0. self._update_unary(x) else: assert t.meta.size() == 1, "The tensor has no batch dimension, but metadata has multiple elements." @@ -124,9 +124,13 @@ def _update_unary(self, stream_tensor: StreamTensor): self.closed_entries.add(_id) if _id in self: - assert not stream_tensor.meta.sos.item(), "The tensor is the first chunk." + if stream_tensor.meta.sos.item(): + raise ValueError(f"Tried to collect a chunk on a known id {_id} but got a chunk claiming to be first.") + length_dim = stream_tensor.names.index(LENGTH) self[_id] = torch.cat([self[_id], stream_tensor], dim=length_dim) else: - assert stream_tensor.meta.sos.item(), "The tensor is not the first chunk." + if not stream_tensor.meta.sos.item(): + raise ValueError(f"Tried to start a new id `{_id}` but the received chunk was not the first chunk.") + self[_id] = stream_tensor diff --git a/dreamstream/nn/utils/__init__.py b/dreamstream/nn/utils/__init__.py index bf297a1..8083b8f 100644 --- a/dreamstream/nn/utils/__init__.py +++ b/dreamstream/nn/utils/__init__.py @@ -1 +1 @@ -from .pad_sequence import * # noqa: F403 +from dreamstream.nn.utils.pad_sequence import pad_chunks, pad_full_sequence, pad_stream_tensor # noqa: F401 diff --git a/dreamstream/nn/utils/pad_sequence.py b/dreamstream/nn/utils/pad_sequence.py index c2c8b2a..14a451b 100644 --- a/dreamstream/nn/utils/pad_sequence.py +++ b/dreamstream/nn/utils/pad_sequence.py @@ -42,7 +42,6 @@ def pad_chunks( def pad_full_sequence(sequences, names: List[str], ids: List[str], batch_first: bool = False) -> StreamTensor: sos = torch.full((len(sequences),), True, dtype=torch.bool) eos = torch.full((len(sequences),), True, dtype=torch.bool) - return pad_chunks(sequences=sequences, names=names, ids=ids, sos=sos, eos=eos, batch_first=batch_first) diff --git a/dreamstream/overrides.py b/dreamstream/overrides.py index d99f490..ea56d66 100644 --- a/dreamstream/overrides.py +++ b/dreamstream/overrides.py @@ -1,5 +1,6 @@ import functools from copy import deepcopy +import math from typing import Any, Callable, NamedTuple, Optional, List, Sequence, Tuple, Union from torch.types import Number @@ -12,6 +13,7 @@ from dreamstream.tensor import StreamTensor, StreamMetadata, decouple_recursive from dreamstream.func_coverage import CUSTOMIZED_FUNCTIONS from dreamstream.utils.flags import BATCH, LENGTH +from dreamstream.utils.operations import sequence_mask from dreamstream.warnings import fallback_operation_warning @@ -249,7 +251,10 @@ def conv1d( output = torch.conv1d(input, weight, bias=bias, stride=stride, padding=padding, dilation=dilation, groups=groups) output.rename_(*names) meta.lengths = output_lengths - # TODO: Consider whether to zero out the padding. + + # Zero out the padding. + mask = sequence_mask(output_lengths, max_len=output.size(-1), device=output.device) + output *= mask.unsqueeze(1) return StreamTensor(output, meta) diff --git a/dreamstream/patches/__init__.py b/dreamstream/patches/__init__.py index 0961199..e70806a 100644 --- a/dreamstream/patches/__init__.py +++ b/dreamstream/patches/__init__.py @@ -1 +1,3 @@ -from .conv import patch_conv_1d # noqa: F401 +from dreamstream.patches.general import patch, patch_module # noqa: F401 +from dreamstream.patches.modes import add_streaming_modes # noqa: F401 +from dreamstream.patches.conv import patch_conv_1d # noqa: F401 diff --git a/dreamstream/patches/conv.py b/dreamstream/patches/conv.py index 916b90d..4ca017e 100644 --- a/dreamstream/patches/conv.py +++ b/dreamstream/patches/conv.py @@ -1,9 +1,7 @@ -import types - import torch -from dreamstream.tensor import StreamTensor, StreamMetadata -from dreamstream.patches.modes import add_streaming_modes, online, offline +from dreamstream.tensor import StreamTensor +from dreamstream.patches.modes import add_streaming_modes from dreamstream.nn.utils import pad_stream_tensor @@ -73,70 +71,3 @@ def patch_conv_1d(module): module.register_forward_hook(conv_1d_post_hook) return module - - -if __name__ == "__main__": - import os - import argparse - from random import randint - - os.environ["CUDA_VISIBLE_DEVICES"] = "0" - - parser = argparse.ArgumentParser() - - # configuration of layer - parser.add_argument("--in_channels", default=32, type=int) - parser.add_argument("--out_channels", default=64, type=int) - parser.add_argument("--kernel_size", default=3, type=int) - parser.add_argument("--stride", default=2, type=int) - - # configuration of test input - parser.add_argument("--input_min_length", default=1000, type=int) - parser.add_argument("--input_max_length", default=2000, type=int) - parser.add_argument("--input_min_chunk_size", default=50, type=int) - parser.add_argument("--input_max_chunk_size", default=50, type=int) - parser.add_argument("--input_batch_size", default=32, type=int) - - args, _ = parser.parse_known_args() - - assert args.input_min_length <= args.input_max_length - assert args.input_min_chunk_size <= args.input_max_chunk_size - - N = 20_000 - stream_inputs, stream_batch_inputs, inputs = [], [], [] - for n in range(N): - x1 = torch.rand(1, 32, randint(1, 20)) - # x2 = pad_sequence([x1, torch.rand(1, 32, randint(args.kernel_size, 50))], batch_first=True, padding_value=0) - ss1 = StreamMetadata(ids=["test_1"], lengths=[x1.size(-1)], sos=[n == 0], eos=[n == N - 1]) - # ss2 = StreamMetadata(ids=["test_1", "test_2"], lengths=[x1.size(-1), x2.size(-1)], first=[n == 0] * 2, - # last=[n == N - 1] * 2) - xs1 = StreamTensor(x1, meta=ss1) - # xs2 = StreamTensor(x2, meta=ss2) - stream_inputs.append(xs1) - # stream_batch_inputs.append(xs2) - inputs.append(x1) - - x_full = torch.cat(inputs, dim=-1) - s = StreamMetadata(ids=["test_2"], lengths=[x_full.size(-1)], sos=[True], eos=[True]) - x_full_stream = StreamTensor(x_full, meta=s) - - conv1d = torch.nn.Conv1d(args.in_channels, args.out_channels, args.kernel_size, args.stride, padding=2) - - y1 = conv1d(x_full) - - conv1d = patch_conv_1d(conv1d) - conv1d.online() - - y2 = conv1d(x_full_stream) - - ys = [] - for x in stream_inputs: - y = conv1d(x) - if y is None: - print("skipping") - continue - ys.append(y) - y3 = torch.cat([torch.Tensor(y_) for y_ in ys], dim=-1) - - assert torch.allclose(y1, y2, rtol=0, atol=0) - assert torch.allclose(y1, y3, rtol=1e-6, atol=1e-6) diff --git a/dreamstream/utils/operations.py b/dreamstream/utils/operations.py new file mode 100644 index 0000000..21bb1fe --- /dev/null +++ b/dreamstream/utils/operations.py @@ -0,0 +1,44 @@ +import math + +from typing import Union + +import torch + + +def sequence_mask( + seq_lens: Union[list, torch.Tensor], + max_len: int = None, + invert: bool = False, + dtype: torch.dtype = torch.bool, + device: torch.device = None, +): + """ + Creates a binary sequence mask where all entries up to seq_lens are 1 and the remaining are 0. + + Args: + seq_lens (Tensor): The sequence lengths from which to construct the mask. Should be shape N with dtype == int64. + max_len (int): The temporal dimension of the sequence mask. If None, will use max of seq_lens. + dtype (torch.dtype): The type of the mask. Default is torch.bool. + invert (bool): If False, `m[i]` is `True` for `i < x_sl` and False for `i >= x_sl`. + If True, returns the inverse i.e. `~m`. Default is False. + Returns: + Tensor: The sequence mask of shape (N, T). + """ + if isinstance(seq_lens, torch.Tensor): + device = seq_lens.device if device is None else device + if device != seq_lens.device: + seq_lens = seq_lens.to(device) + else: + seq_lens = torch.tensor(seq_lens, device=device, dtype=int) + + T = max_len or math.ceil(seq_lens.max()) + + step_ids = torch.arange(T, device=device).unsqueeze(0) # (1, T) + + if invert: + seq_mask = step_ids >= seq_lens.unsqueeze(1) # broadcast over batch, (N, T) + return seq_mask.to(dtype) + + seq_mask = step_ids < seq_lens.unsqueeze(1) # broadcast over batch, (N, T) + return seq_mask.to(dtype) + diff --git a/examples/wav2letter.py b/examples/wav2letter.py index c25d020..aaa18b6 100644 --- a/examples/wav2letter.py +++ b/examples/wav2letter.py @@ -1,52 +1,14 @@ -import os import random -import pandas as pd -import pathlib -import requests import torch -import uuid from torchaudio.models import Wav2Letter -from dreamstream.data import AudioStreamDataset, MultiStreamDataLoader - from dreamstream.patches.general import patch from dreamstream.utils.flags import LENGTH from dreamstream.nn.utils import pad_full_sequence, pad_stream_tensor -from dreamstream.patches import patch_conv_1d from dreamstream.data import OutputCollector -# _SAMPLE_DIR = pathlib.Path(os.path.join(os.path.dirname(__file__), "sample_data")) -# _SAMPLE_DIR.mkdir(exist_ok=True) - - -# SAMPLE_WAV_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/steam-train-whistle-daniel_simon.wav" -# SAMPLE_WAV_PATH = _SAMPLE_DIR / "steam.wav" - -# SAMPLE_WAV_SPEECH_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/source-16k/train/sp0307/Lab41-SRI-VOiCES-src-sp0307-ch127535-sg0042.wav" -# SAMPLE_WAV_SPEECH_PATH = _SAMPLE_DIR / "speech.wav" - -# SAMPLE_RIR_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/distant-16k/room-response/rm1/impulse/Lab41-SRI-VOiCES-rm1-impulse-mc01-stu-clo.wav" -# SAMPLE_RIR_PATH = _SAMPLE_DIR / "rir.wav" - -# SAMPLE_NOISE_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/distant-16k/distractors/rm1/babb/Lab41-SRI-VOiCES-rm1-babb-mc01-stu-clo.wav" -# SAMPLE_NOISE_PATH = _SAMPLE_DIR / "bg.wav" - - -# def _fetch_data(): -# uri = [ -# (SAMPLE_WAV_URL, SAMPLE_WAV_PATH), -# (SAMPLE_WAV_SPEECH_URL, SAMPLE_WAV_SPEECH_PATH), -# (SAMPLE_RIR_URL, SAMPLE_RIR_PATH), -# (SAMPLE_NOISE_URL, SAMPLE_NOISE_PATH), -# ] -# for url, path in uri: -# if not os.path.exists(path): -# with open(path, 'wb') as file_: -# file_.write(requests.get(url).content) - - def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): chunks = [] chunk_sum, remaining = 0, full_length @@ -58,37 +20,29 @@ def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): def run(): - # _fetch_data() - - # source_files = [SAMPLE_WAV_PATH, SAMPLE_WAV_SPEECH_PATH, SAMPLE_RIR_PATH, SAMPLE_NOISE_PATH] - # dataset = AudioStreamDataset(source_files, chunk_seconds=0.3) - # loader = MultiStreamDataLoader(dataset, batch_size=2, num_workers=0, overlapping_batches=False, collate_fn=dataset.custom_collate) - - - # model = Wav2Letter(num_classes=40, input_type="waveform") - # model = torch.nn.Conv1d(1, 128, 3, padding=1) - model = torch.nn.Sequential( - torch.nn.Conv1d(1, 128, 3, padding=1), - torch.nn.Conv1d(128, 256, 5, padding=2), - ) + random.seed(42) + torch.manual_seed(42) + + BATCH_SIZE = 32 + + model = Wav2Letter(num_classes=40, input_type="waveform") model = patch(model) - # TEST 1: Test with multiple streams of different lengths. - sequences = [torch.rand(1, random.randint(16000, 48000)) for i in range(32)] + # Test with multiple streams of different lengths. + sequences = [torch.rand(1, random.randint(16000 * 5, 16000 * 30)) for i in range(BATCH_SIZE)] - ids = [str(uuid.uuid4()) for i in range(32)] - targets = {_id: model(s) for _id, s in zip(ids, sequences)} - # original_sequences = {_id: s for _id, s in zip(ids, sequences)} + ids = [str(hash(i)) for i in range(BATCH_SIZE)] + targets = {_id: model(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") data = data.unpad_sequence() - data = {_id: s.split(random_chunks(s.size("L"), min_size=16000, max_size=32000), dim=1) for _id, s in zip(ids, data)} - + data = { + _id: s.split(random_chunks(s.size("L"), min_size=16000, max_size=32000), dim=1) for _id, s in zip(ids, data) + } def remaining_chunks(data): return sum([len(x) for x in data.values()]) - batches = [] while remaining_chunks(data) > 0: batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] @@ -97,15 +51,22 @@ def remaining_chunks(data): stream_output = OutputCollector() model.online() + ys = [] for x in batches: - print(x.shape) y = model(x) + ys.append(y) stream_output.update(y) for _id, _y in targets.items(): y = stream_output[_id].tensor() abs_diff = (_y - y).abs() - print(y.size(-1), torch.allclose(_y, y), abs_diff.max().item(), abs_diff.max(0).values[:10].max().item()) + print( + _id, + y.shape, + torch.allclose(_y, y, atol=1e-6), + abs_diff.max().item(), + abs_diff.max(0).values[:10].max().item(), + ) if __name__ == "__main__": diff --git a/tests/patches/test_patching.py b/tests/patches/test_patching.py new file mode 100644 index 0000000..baf6622 --- /dev/null +++ b/tests/patches/test_patching.py @@ -0,0 +1,110 @@ +import random +import torch +import torch.nn as nn +import torchaudio +import pytest + +from dreamstream import patch +from dreamstream.data.data_objects import OutputCollector +from dreamstream.nn.utils.pad_sequence import pad_full_sequence, pad_stream_tensor +from dreamstream.utils.flags import LENGTH + + +torch.manual_seed(42) +random.seed(42) + + +def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): + chunks = [] + chunk_sum, remaining = 0, full_length + while remaining > 0: + chunks.append(min(random.randint(min_size, max_size), remaining)) + chunk_sum = sum(chunks) + remaining = full_length - chunk_sum + return chunks + + +BATCH_SIZE = 32 + + +@pytest.fixture +def sequences(): + return [torch.rand(16, random.randint(16000 * 5, 16000 * 8)) for i in range(BATCH_SIZE)] + + +@pytest.fixture +def ids(): + return [str(hash(i)) for i in range(BATCH_SIZE)] + + +@pytest.fixture +def batches_of_chunks(sequences, ids): + data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") + data = data.unpad_sequence() + data = { + _id: s.split(random_chunks(s.size("L"), min_size=16000, max_size=32000), dim=1) for _id, s in zip(ids, data) + } + + def num_remaining_chunks(data): + return sum([len(x) for x in data.values()]) + + batches = [] + while num_remaining_chunks(data) > 0: + batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] + if len(batch) > 0: + batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) + + return batches + + +class TestPatching: + test_modules = [ + nn.Conv1d(16, 128, kernel_size=1, padding=0), + nn.Conv1d(16, 128, kernel_size=1, padding=1), + nn.Conv1d(16, 128, kernel_size=3, padding=0), + nn.Conv1d(16, 128, kernel_size=3, padding=1), + nn.Conv1d(16, 128, kernel_size=4, padding=0), + nn.Conv1d(16, 128, kernel_size=4, padding=2), + nn.Conv1d(16, 128, kernel_size=5, padding=0), + nn.Conv1d(16, 128, kernel_size=5, padding=2), + nn.Conv1d(16, 128, kernel_size=5, padding=2, stride=2), + nn.Conv1d(16, 128, kernel_size=5, padding=2, stride=2), + nn.Sequential( + nn.Conv1d(16, 128, kernel_size=3, padding=1), + nn.Conv1d(128, 128, kernel_size=5, padding=2), + ), + nn.Sequential( + nn.Conv1d(16, 128, kernel_size=3, padding=1, stride=2), + nn.Conv1d(128, 128, kernel_size=5, padding=2, stride=2), + ), + torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=16), + # GreedyCTCDecoder(labels=ascii_lowercase[:14] + " " + BLANK_TOKEN, blank_index=15), + ] + + def recursive_assert(self, module): + assert hasattr(module, "online") + assert hasattr(module, "offline") + if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + assert hasattr(module, "stream_buffer") + assert hasattr(module, "kernel_width") + + @pytest.mark.parametrize("module", test_modules) + def test_patch(self, module): + patch(module) + module.apply(self.recursive_assert) + + @pytest.mark.parametrize("module", test_modules) + def test_equivalence(self, sequences, ids, batches_of_chunks, module): + with torch.inference_mode(): + targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} + + stream_output = OutputCollector() + module.online() + with torch.inference_mode(): + for x in batches_of_chunks: + y = module(x) + stream_output.update(y) + + for _id, _y in targets.items(): + y = stream_output[_id].tensor() + assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" From f9b03a2c6584992c9e1dffdb5b657fbae821e613 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Thu, 22 Jun 2023 13:51:52 +0000 Subject: [PATCH 07/36] Fix linting --- dreamstream/__init__.py | 2 +- dreamstream/data/stream_dataset.py | 5 +- dreamstream/patches/general.py | 19 ++++- dreamstream/tests/test.pkl | Bin 463693 -> 0 bytes dreamstream/tests/test_conv1d.py | 47 ----------- dreamstream/tests/test_conv1d_mixed_batch.py | 58 -------------- dreamstream/tests/test_conv1d_subsample.py | 80 ------------------- dreamstream/utils/dummies.py | 43 ---------- dreamstream/utils/listloaders.py | 6 +- dreamstream/utils/operations.py | 1 - 10 files changed, 24 insertions(+), 237 deletions(-) delete mode 100644 dreamstream/tests/test.pkl delete mode 100644 dreamstream/tests/test_conv1d.py delete mode 100644 dreamstream/tests/test_conv1d_mixed_batch.py delete mode 100644 dreamstream/tests/test_conv1d_subsample.py delete mode 100644 dreamstream/utils/dummies.py diff --git a/dreamstream/__init__.py b/dreamstream/__init__.py index 8cb69a4..8276d92 100644 --- a/dreamstream/__init__.py +++ b/dreamstream/__init__.py @@ -2,4 +2,4 @@ import dreamstream.random # noqa: F401 from dreamstream.tensor import StreamTensor, StreamMetadata, stream_tensor, as_stream_tensor # noqa: F401 -from dreamstream.patches import patch, patch_module, add_streaming_modes, patch_conv_1d # noqa: F401 \ No newline at end of file +from dreamstream.patches import patch, patch_module, add_streaming_modes, patch_conv_1d # noqa: F401 diff --git a/dreamstream/data/stream_dataset.py b/dreamstream/data/stream_dataset.py index 9522705..fe02786 100644 --- a/dreamstream/data/stream_dataset.py +++ b/dreamstream/data/stream_dataset.py @@ -409,7 +409,7 @@ def __init__( given, `num_workers` has no effect. Defaults to 0. overlapping_batches (bool, optional): If True, each new batch will introduce new files to replace those that ended in the previous batch, keeping the batch size constant (except for the last batch if - `drop_last=False`). If False, new files will only start once all files from the previous batch have + `drop_last=False`). If False, new files will only start once all files from the previous batch have ended. This is usually more memory and compute efficient for state management in models in online mode, but also leads to more batches. Defaults to False. drop_last (bool, optional): Drop the last batch(es) if smaller than `batch_size`. Defaults to False. @@ -465,7 +465,7 @@ def wrapped_worker_init_fn(dataloader_worker_id: int): return wrapped_worker_init_fn def get_stream_loaders(self) -> Generator[Any, None, None]: - # TODO (JDH): Wrap this method in a dedicated process to offload all data preparation from main process. + # TODO (JDH): Wrap this method in a dedicated process to offload all data preparation from main process. # Currently this happens in the main proces and may take a bit of time, especially the collation. if isinstance(self.dataset, IterableDataset): @@ -510,7 +510,6 @@ def __iter__(self) -> Generator[Any, None, None]: yield batch - class MultiStreamOneProcessDataLoader: def __init__( self, diff --git a/dreamstream/patches/general.py b/dreamstream/patches/general.py index e6fa6dc..efc6ac1 100644 --- a/dreamstream/patches/general.py +++ b/dreamstream/patches/general.py @@ -4,7 +4,7 @@ from dreamstream.patches.modes import add_streaming_modes -MODULE_TO_PATCH = { +MODULE_PATCHERS = { nn.Conv1d: patch_conv_1d, } @@ -17,14 +17,27 @@ def patch(module: nn.Module) -> nn.Module: def patch_module(module) -> None: """Patch a given module to support streaming mode.""" - patch_method = MODULE_TO_PATCH.get(type(module), None) + patch_method = MODULE_PATCHERS.get(type(module), None) if patch_method is None: add_streaming_modes(module) else: patch_method(module) # Error checking for modules that do NOT have the correct behaviour yet. - if isinstance(module, (nn.Conv2d, nn.Conv3d, nn.ConvTranspose1d, nn.ConvTranspose2d, nn.ConvTranspose3d, nn.LSTM, nn.GRU, nn.RNN, nn.MultiheadAttention)): + if isinstance( + module, + ( + nn.Conv2d, + nn.Conv3d, + nn.ConvTranspose1d, + nn.ConvTranspose2d, + nn.ConvTranspose3d, + nn.LSTM, + nn.GRU, + nn.RNN, + nn.MultiheadAttention, + ), + ): raise NotImplementedError(f"Module {type(module)} is not supported yet.") return module diff --git a/dreamstream/tests/test.pkl b/dreamstream/tests/test.pkl deleted file mode 100644 index 2caacde3c922e5137e8f8e2c023f634f4c4c877b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463693 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 z 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

(UzS? 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

~yZWz;c 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 u0b)m$P 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 DRd$w* diff --git a/dreamstream/tests/test_conv1d.py b/dreamstream/tests/test_conv1d.py deleted file mode 100644 index ca608e0..0000000 --- a/dreamstream/tests/test_conv1d.py +++ /dev/null @@ -1,47 +0,0 @@ -from random import randint -from uuid import uuid4 - -import torch -from torch import nn - -from dreamstream.utils.flags import LENGTH -from dreamstream.nn.utils import pad_full_sequence -from dreamstream.patches import patch_conv_1d -from dreamstream.data import OutputCollector - - -def random_chunks(full_length): - chunks = [] - chunk_sum, remaining = 0, full_length - while remaining > 0: - chunks.append(min(randint(7, 200), remaining)) - chunk_sum = sum(chunks) - remaining = full_length - chunk_sum - return chunks - - -conv = nn.Conv1d(256, 128, 7, padding=3) -conv = patch_conv_1d(conv) - -# TEST 1: Test with multiple streams of different lengths. -sequences = [torch.rand(256, randint(50, 2000)) for i in range(32)] -ids = [str(uuid4()) for i in range(32)] -targets = {_id: conv(s) for _id, s in zip(ids, sequences)} -batch = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") -chunks = random_chunks(batch.size("L")) - -stream_output = OutputCollector() -conv.online() -for x in batch.split(chunks, dim=2): - x = x.drop_empty() - try: - y = conv(x) - except Exception: - import IPython - - IPython.embed(using=False) - stream_output.update(y) - -for _id, _y in targets.items(): - y = stream_output[_id].tensor() - print(torch.allclose(_y, y), (_y - y).abs().max().item()) diff --git a/dreamstream/tests/test_conv1d_mixed_batch.py b/dreamstream/tests/test_conv1d_mixed_batch.py deleted file mode 100644 index f7b35c4..0000000 --- a/dreamstream/tests/test_conv1d_mixed_batch.py +++ /dev/null @@ -1,58 +0,0 @@ -from random import randint -from uuid import uuid4 -import random - -import torch -from torch import nn - -from dreamstream.utils.flags import LENGTH -from dreamstream.nn.utils import pad_full_sequence, pad_stream_tensor -from dreamstream.patches import patch_conv_1d -from dreamstream.data import OutputCollector - - -def random_chunks(full_length): - chunks = [] - chunk_sum, remaining = 0, full_length - while remaining > 0: - chunks.append(min(randint(7 - 3, 100), remaining)) - chunk_sum = sum(chunks) - remaining = full_length - chunk_sum - return chunks - - -conv = nn.Conv1d(256, 128, 7, stride=6, padding=3) -conv = patch_conv_1d(conv) - -# TEST 1: Test with multiple streams of different lengths. -sequences = [torch.rand(256, randint(50, 2000)) for i in range(32)] - -ids = [str(uuid4()) for i in range(32)] -targets = {_id: conv(s) for _id, s in zip(ids, sequences)} -original_sequences = {_id: s for _id, s in zip(ids, sequences)} - -data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") -data = data.unpad_sequence() -data = {_id: s.split(random_chunks(s.size("L")), dim=1) for _id, s in zip(ids, data)} - - -def remaining_chunks(data): - return sum([len(x) for x in data.values()]) - - -batches = [] -while remaining_chunks(data) > 0: - batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] - if len(batch) > 0: - batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) - -stream_output = OutputCollector() -conv.online() -for x in batches: - y = conv(x) - stream_output.update(y) - -for _id, _y in targets.items(): - y = stream_output[_id].tensor() - abs_diff = (_y - y).abs() - print(y.size(-1), torch.allclose(_y, y), abs_diff.max().item(), abs_diff.max(0).values[:10].max().item()) diff --git a/dreamstream/tests/test_conv1d_subsample.py b/dreamstream/tests/test_conv1d_subsample.py deleted file mode 100644 index 4658503..0000000 --- a/dreamstream/tests/test_conv1d_subsample.py +++ /dev/null @@ -1,80 +0,0 @@ -from random import randint -from uuid import uuid4 -from copy import deepcopy -import random -from dreamstream.utils import test as t - -import torch -from torch import nn - -from dreamstream import stream_tensor -from dreamstream.utils.flags import BATCH, LENGTH -from dreamstream.nn.utils import pad_full_sequence, pad_stream_tensor -from dreamstream.patches import patch_conv_1d -from dreamstream.data import OutputCollector -from dreamstream.func_coverage import SUPPORTED_FUNCTIONS, UNSUPPORTED_FUNCTIONS, SUPPORTED_NON_OVERRIDEABLE_FUNCTIONS -from dreamstream import StreamTensor -from dreamstream.utils import test as t - -FLAT = {f for k, fs in torch.overrides.get_overridable_functions().items() for f in fs} - -def random_chunks(full_length): - chunks = [] - chunk_sum, remaining = 0, full_length - while remaining > 0: - chunks.append(min(randint(7-3, 100), remaining)) - chunk_sum = sum(chunks) - remaining = full_length - chunk_sum - return chunks - -for kernel_size in range(1, 3): - for stride in range(1, 3): - - conv = nn.Conv1d(256, 128, kernel_size=kernel_size, stride=stride, padding=kernel_size//2) - conv = patch_conv_1d(conv) - - # TEST 1: Test with multiple streams of different lengths. - sequences = [torch.rand(256, randint(50, 2000)) for i in range(32)] - - ids = [str(uuid4()) for i in range(32)] - targets = {_id: conv(s) for _id, s in zip(ids, sequences)} - original_sequences = {_id: s for _id, s in zip(ids, sequences)} - - data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") - data = data.unpad_sequence() - conv.online() - data = {_id: conv(s) for _id, s in zip(ids, data)} - # TEMP TEST - - for _id, s in data.items(): - assert s.size("L") == s.meta.lengths[0] - assert torch.allclose(s, targets[_id]) - - print(f"OK: {stride > kernel_size} {kernel_size}, {stride}") - - -# import IPython; IPython.embed(using=False) - - -# data = {_id: s.split(random_chunks(s.size("L")), dim=1) for _id, s in zip(ids, data)} - -# def remaining_chunks(data): -# return sum([len(x) for x in data.values()]) - -# batches = [] -# while remaining_chunks(data) > 0: -# batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] -# if len(batch) > 0: -# batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) - -# stream_output = OutputCollector() -# conv.online() -# for x in batches: -# y = conv(x) -# stream_output.update(y) - -# for _id, _y in targets.items(): -# y = stream_output[_id].tensor() -# abs_diff = (_y - y).abs() -# print(y.size(-1), torch.allclose(_y, y), abs_diff.max().item(), abs_diff.max(0).values[:10].max().item()) - diff --git a/dreamstream/utils/dummies.py b/dreamstream/utils/dummies.py deleted file mode 100644 index 4183db2..0000000 --- a/dreamstream/utils/dummies.py +++ /dev/null @@ -1,43 +0,0 @@ -# from typing import List, Callable - -# import torch - -# from dreamstream import StreamTensor - -# class TestMetadata: -# """Metadata associated with a batch of streamed input tensors.""" - -# def __init__( -# self, -# property="this is a test", -# ): -# self.property = property - -# class TestTensor(StreamTensor): - -# # @staticmethod -# # def __new__(cls, data, meta: TestMetadata, *args, **kwargs) -> "TestTensor": -# # """Return a new StreamTensor object.""" -# # return super().__new__(cls, data, *args, **kwargs) - -# # def __init__(self, data, meta: TestMetadata, *args, names: List[str] = None, **kwargs): -# # """Initialize a StreamTensor object (self is StreamTensor, data is e.g. torch.Tensor).""" -# # super(TestTensor).__init__() -# # self.meta = meta - -# def clone(self, *args, **kwargs): -# """Clone a StreamTensor object.""" -# return TestTensor(super().clone(*args, **kwargs), self.meta) - -# @classmethod -# def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), kwargs=None): -# return torch.Tensor.__torch_function__(cls, func, types, args, kwargs) - -# class TestObjects(): - -# a = torch.rand(2, 3, 4) -# b = a.rename("B", "F", "L") -# c = TestTensor(a, TestMetadata("this is another test")) -# d = TestTensor(b, TestMetadata("this is another test")) - -# test = TestObjects() \ No newline at end of file diff --git a/dreamstream/utils/listloaders.py b/dreamstream/utils/listloaders.py index 40026ef..b308f06 100644 --- a/dreamstream/utils/listloaders.py +++ b/dreamstream/utils/listloaders.py @@ -6,26 +6,30 @@ lists_path = __file__.replace("/dreamstream/utils/listloaders.py", "/doc_scrape/lists") + def get_tensor_attr(x): return getattr(torch.Tensor, x.replace("Tensor.", "")) if x.startswith("Tensor.") else getattr(torch, x) + def load_default_valid_pointwise_ops(): with open(glob(os.path.join(lists_path, "default-valid-pointwise-ops-*.txt"))[0], "r") as file_buffer: ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} return ops_list + def load_valid_pointwise_ops(): with open(glob(os.path.join(lists_path, "valid-pointwise-ops-*.txt"))[0], "r") as file_buffer: ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} return ops_list + def load_recouple_pointwise_ops(): with open(glob(os.path.join(lists_path, "recouple-pointwise-ops-*.txt"))[0], "r") as file_buffer: ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} return ops_list + def load_inplace_recouple_pointwise_ops(): with open(glob(os.path.join(lists_path, "inplace-recouple-pointwise-ops-*.txt"))[0], "r") as file_buffer: ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} return ops_list - diff --git a/dreamstream/utils/operations.py b/dreamstream/utils/operations.py index 21bb1fe..7ba49d0 100644 --- a/dreamstream/utils/operations.py +++ b/dreamstream/utils/operations.py @@ -41,4 +41,3 @@ def sequence_mask( seq_mask = step_ids < seq_lens.unsqueeze(1) # broadcast over batch, (N, T) return seq_mask.to(dtype) - From d82e0416045fee631573424036f892a0d008ce4d Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Thu, 22 Jun 2023 14:00:35 +0000 Subject: [PATCH 08/36] Add license --- LICENSE | 19 +++++++++++++++++++ pyproject.toml | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..57e7007 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2023 Corti.ai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pyproject.toml b/pyproject.toml index 73ecefc..9a3fbf2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,22 @@ +[project] +name = "TorchStream" +version = "0.1.0" +authors = [ + {name = "Jakob Drachmann Havtorn", email = "jdh@corti.ai"}, + {name = "Lasse Borgholt", email = "lb@corti.ai"}, +] +description = "Plug-and-play data streaming for PyTorch" +readme = "README.md" +license = {file = "LICENSE"} +requires-python = ">=3.10" +keywords = ["streaming", "online", "automatic speech recognition", "asr", "neural networks", "pytorch", "torch"] +dependencies = [ + "torch", +] + +[tool.setuptools] +py-modules = ["dreamstream"] + [tool.ruff] line-length = 120 From a40c7bc875b84a9685de648e87f15f396c42fce6 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Thu, 22 Jun 2023 14:00:47 +0000 Subject: [PATCH 09/36] Format pointwise_ops --- doc_scrape/pointwise-ops.py | 54 ++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/doc_scrape/pointwise-ops.py b/doc_scrape/pointwise-ops.py index fe330ed..3933925 100644 --- a/doc_scrape/pointwise-ops.py +++ b/doc_scrape/pointwise-ops.py @@ -7,20 +7,24 @@ from bs4 import BeautifulSoup from tqdm import tqdm -#from dreamstream.utils.dummies import TestTensor +# from dreamstream.utils.dummies import TestTensor from dreamstream.utils.listloaders import get_tensor_attr from dreamstream.tensor import recouple, inplace_recouple, TestTensor -#from ..tests import test_dict +# from ..tests import test_dict -tensor = torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]], dtype=torch.float32) -#tensor = torch.tensor([[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]], [[12, 13, 14], [15, 16, 17]]]) +tensor = torch.tensor( + [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]], dtype=torch.float32 +) +# tensor = torch.tensor([[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]], [[12, 13, 14], [15, 16, 17]]]) tensors = [tensor.clone() for i in range(3)] + def to_test(tensor): return TestTensor(tensor.rename("A", "B", "C"), meta="test") + class Inputs: def __init__(self, *args, **kwargs): self.args = args @@ -28,13 +32,13 @@ def __init__(self, *args, **kwargs): def __iter__(self): return iter((self.args, self.kwargs)) - + def valid(func, *args, **kwargs): return func(*args, **kwargs) + def default_valid(func, *args, **kwargs): - out = func(*args, **kwargs) metas = [x.meta for x in [*args, *kwargs.values()] if isinstance(x, TestTensor)] @@ -46,7 +50,7 @@ def default_valid(func, *args, **kwargs): f"but they were not equal." ) raise RuntimeError(msg) - + if isinstance(out, TestTensor): out.meta = metas[0] return out @@ -57,17 +61,16 @@ def default_valid(func, *args, **kwargs): def compare_tensors(test_out, out): - nan_filter = torch.isnan(out) out = out[~nan_filter] - + assert out.numel() > 0 assert isinstance(test_out, TestTensor) assert hasattr(test_out, "meta") assert test_out.meta == "test" assert torch.allclose(torch.Tensor(test_out).rename(None)[~nan_filter], out) - + inplace_func_hierarchy = [valid, inplace_recouple] outofplace_func_hierarchy = [valid, recouple] @@ -75,7 +78,7 @@ def compare_tensors(test_out, out): html_doc = fp.read().decode("utf8") fp.close() -soup = BeautifulSoup(html_doc, 'html.parser') +soup = BeautifulSoup(html_doc, "html.parser") # scrape and validate pointwise ops pwo_section = soup.find("section", {"id": "pointwise-ops"}) @@ -101,26 +104,24 @@ def compare_tensors(test_out, out): recouple_inplace_funcs = [] for func_name in tqdm(func_names): - # these are handled manually (either decouple or customized) if "quantize" in func_name: continue if func_name.endswith("real") or func_name.endswith("imag"): continue - if func_name.endswith("frexp"):# or func_name.endswith("ldexp"): + if func_name.endswith("frexp"): # or func_name.endswith("ldexp"): continue if func_name.endswith("gradient"): continue - + is_inplace = func_name.endswith("_") func = get_tensor_attr(func_name) input_valid = False for i in range(1, 4): - try: inputs = tensors[:i] - + if "bitwise" in func_name: inputs = [x.to(torch.int64) for x in inputs] if func_name.endswith("softmax"): @@ -131,18 +132,17 @@ def compare_tensors(test_out, out): inputs = [1] + inputs if func_name.endswith("float_power_"): inputs = [x.to(torch.float64) for x in inputs] - + target_inputs = [x.clone() if isinstance(x, torch.Tensor) else x for x in inputs] if is_inplace else inputs out = func(*target_inputs) input_valid = True break - + except Exception as e: if i == 3: no_valid_input_found.append(func_name) - + if input_valid: - try: if is_inplace: test_inputs = [to_test(x.clone()) if isinstance(x, torch.Tensor) else deepcopy(x) for x in inputs] @@ -157,9 +157,7 @@ def compare_tensors(test_out, out): continue except Exception as e: pass - - - + try: if is_inplace: test_inputs = [to_test(x.clone()) if isinstance(x, torch.Tensor) else deepcopy(x) for x in inputs] @@ -174,9 +172,9 @@ def compare_tensors(test_out, out): continue except Exception as e: pass - + no_valid_output.append(func_name) - + print(f"\n\nNumber of valid funcs: {len(valid_funcs)}") print(f"Number of default valid funcs: {len(default_valid_funcs)}") print(f"Number of recouple funcs: {len(recouple_funcs)}") @@ -186,7 +184,9 @@ def compare_tensors(test_out, out): if len(glob("lists/*pointwise-ops*.txt")) > 0: - raise Exception("lists/*pointwise-ops*.txt already exists. Please delete this/these file(s) before running this script.") + raise Exception( + "lists/*pointwise-ops*.txt already exists. Please delete this/these file(s) before running this script." + ) scrape_date = datetime.now().strftime("%Y_%m_%d-%H_%M_%S") with open(f"lists/default-valid-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: file_buffer.write("\n".join(default_valid_funcs)) @@ -195,4 +195,4 @@ def compare_tensors(test_out, out): with open(f"lists/recouple-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: file_buffer.write("\n".join(recouple_funcs)) with open(f"lists/inplace-recouple-pointwise-ops-{scrape_date}.txt", "w") as file_buffer: - file_buffer.write("\n".join(recouple_inplace_funcs)) \ No newline at end of file + file_buffer.write("\n".join(recouple_inplace_funcs)) From c022efe9e09830e5a3a0301e217149504dc0a4ba Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Thu, 22 Jun 2023 15:42:13 +0000 Subject: [PATCH 10/36] Start implementing RNN --- README.md | 2 +- dreamstream/overrides.py | 14 ++++ dreamstream/patches/conv.py | 24 +++---- dreamstream/patches/general.py | 10 ++- dreamstream/patches/rnn.py | 118 +++++++++++++++++++++++++++++++++ dreamstream/tensor.py | 5 +- tests/conftest.py | 60 +++++++++++++++++ tests/patches/test_conv.py | 59 +++++++++++++++++ tests/patches/test_patching.py | 110 ------------------------------ tests/patches/test_rnn.py | 61 +++++++++++++++++ 10 files changed, 334 insertions(+), 129 deletions(-) create mode 100644 dreamstream/patches/rnn.py create mode 100644 tests/conftest.py create mode 100644 tests/patches/test_conv.py delete mode 100644 tests/patches/test_patching.py create mode 100644 tests/patches/test_rnn.py diff --git a/README.md b/README.md index 87db58f..05c7638 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ PyTorch models are typically trained and evaluated on batches of data. However, - Combining batch or length dimensions with one or more other dimensions into a single dimension using e.g. `torch.reshape`, `torch.flatten` or masked indexing. - Options: - Fail outright. - - Fallback to a regular `torch.Tensor`. + - Fallback to a regular `torch.Tensor`. <-- Chose this one. - Fallback to a different tensor subclass that is identical in behaviour to `torch.Tensor` but carries the frozen `StreamMetadata` along. - Support loading/saving of named tensors by custom `__reduce__` or `__reduce_ex__`. diff --git a/dreamstream/overrides.py b/dreamstream/overrides.py index ea56d66..f812ace 100644 --- a/dreamstream/overrides.py +++ b/dreamstream/overrides.py @@ -238,6 +238,7 @@ def conv1d( padding = 0 # Create buffer. + # TODO (JDH): Default to storing the batched input buffer. output_lengths = ((meta.lengths - kernel_width) // stride[0] + 1).clip(min=0) next_start = output_lengths * stride[0] buffer = {} @@ -919,3 +920,16 @@ def unqsqueeze(input: StreamTensor, dim: int) -> StreamTensor: # moving dimensions # X @implements(torch.transpose) # X @implements(torch.permute) + + + +# @implements(torch.Tensor.__getstate__) +# def __getstate__(self): +# return self.metadata + + +@implements(torch.Tensor.__reduce_ex__) +def __reduce_ex__(self: StreamTensor, proto): + print("OHI!") + self.rename_(None) + return torch.Tensor.__reduce_ex__(self, proto) diff --git a/dreamstream/patches/conv.py b/dreamstream/patches/conv.py index 4ca017e..bd49218 100644 --- a/dreamstream/patches/conv.py +++ b/dreamstream/patches/conv.py @@ -43,24 +43,23 @@ def conv_1d_pre_hook(self, inputs): def conv_1d_post_hook(self, inputs, outputs): - if self.streaming: - outputs = outputs - self.stream_buffer.update(outputs.meta._temp_buffer) - outputs.meta._temp_buffer = None + if not self.streaming: + return outputs - # TODO (LB): Simplify this. - if outputs.meta.any_ending: - for _id, eos in zip(outputs.meta.ids, outputs.meta.eos): - if eos and _id in self.stream_buffer: - del self.stream_buffer[_id] + self.stream_buffer.update(outputs.meta._temp_buffer) + outputs.meta._temp_buffer = None - return outputs + # TODO (LB): Simplify this. + if outputs.meta.any_ending: + for _id, eos in zip(outputs.meta.ids, outputs.meta.eos): + if eos and _id in self.stream_buffer: + del self.stream_buffer[_id] -def patch_conv_1d(module): +def patch_conv_1d(module) -> torch.nn.Module: add_streaming_modes(module) - # Add stream_buffer dictionary. + # Add a dictionary for storing input buffers. module.stream_buffer = {} # Add module-specific attributes. @@ -69,5 +68,4 @@ def patch_conv_1d(module): # Register pre_hook and post_hook. module.register_forward_pre_hook(conv_1d_pre_hook) module.register_forward_hook(conv_1d_post_hook) - return module diff --git a/dreamstream/patches/general.py b/dreamstream/patches/general.py index efc6ac1..215b227 100644 --- a/dreamstream/patches/general.py +++ b/dreamstream/patches/general.py @@ -1,11 +1,15 @@ import torch.nn as nn from dreamstream.patches.conv import patch_conv_1d +from dreamstream.patches.rnn import patch_rnn from dreamstream.patches.modes import add_streaming_modes MODULE_PATCHERS = { nn.Conv1d: patch_conv_1d, + nn.RNN: patch_rnn, + nn.LSTM: patch_rnn, + nn.GRU: patch_rnn, } @@ -32,9 +36,9 @@ def patch_module(module) -> None: nn.ConvTranspose1d, nn.ConvTranspose2d, nn.ConvTranspose3d, - nn.LSTM, - nn.GRU, - nn.RNN, + # nn.LSTM, + # nn.GRU, + # nn.RNN, nn.MultiheadAttention, ), ): diff --git a/dreamstream/patches/rnn.py b/dreamstream/patches/rnn.py new file mode 100644 index 0000000..2d06f60 --- /dev/null +++ b/dreamstream/patches/rnn.py @@ -0,0 +1,118 @@ +from typing import Optional, Tuple, Union +import torch + +from dreamstream.tensor import StreamTensor +from dreamstream.patches.modes import add_streaming_modes +from dreamstream.nn.utils import pad_stream_tensor + + +# TODO (JDH): How do we deal with PackedSequence? +# TODO (JDH): When an initial state is provided, we use it only for the first chunk.) + + +def get_tensor_and_state(inputs: Union[Tuple[torch.Tensor], Tuple[torch.Tensor, Optional[torch.Tensor]]]) -> Tuple[torch.Tensor, Optional[torch.Tensor]]: + if len(inputs) == 2: + return inputs + + return inputs[0], None + + +def rnn_pre_hook(self, inputs): + # TODO (JDH): Deal with initial hidden state here. + x, state = get_tensor_and_state(inputs) + + is_stream_tensor = isinstance(x, StreamTensor) + if not self.streaming: + if is_stream_tensor: + raise RuntimeError("Using StreamTensors in offline mode might result in unexpected behavior.") + return inputs + + if not is_stream_tensor: + raise RuntimeError("The input is expected to be StreamTensor when in online mode.") + + # Cases: + # - Given state: + # 1. None + # 2. Tensor + # - Given ids: + # 1. All are first + # 2. Some are first + # 3. None are first + # 4. All are last + # 5. Some are last + # 6. None are last + # 7. All are first and last + # 8. Some are first and some are last + # 9. None are first or last + # - Hidden state store: + # 1. All ids are in the hidden state store + # 2. Some ids are in the hidden state store + # 3. No ids are in the hidden state store + + # Get hidden state (num_layers, batch_size, hidden_size). + # If any of the ids are in the hidden state store, we must use that state (unless they are the first chunk, but they can't be if they are in the hidden state store). + # Any first chunks must use the given initial state. + # 1. If all chunks are first chunks, we can use the given initial state whether it is None or Tensor. + # 2. If only some chunks are first chunks, we must use the given initial state for those chunks and the hidden + # state store for the others by writing selectively. + + missing_ids = [i for i, _id in enumerate(x.meta.ids) if _id in self.hidden_state_store] + if any(missing_ids): + default_state = torch.zeros(self.num_layers, x.size(0), self.hidden_size, device=x.device) + if state is not None: + # Write default_state into the state tensor at the batch ids where ~is_id_present. + index = torch.as_tensor(missing_ids, device=x.device) + dim = 0 if self.batch_first else 1 + torch.select_scatter(state, default_state, dim=dim, index=index) + + state = torch.stack([self._hidden_state_store[_id] for _id in x.meta.ids], dim=1) + else: + for i, _id in enumerate(x.meta.ids): + if _id in self.hidden_state_store: + state.append(self.hidden_state_store[_id]) + default_state = torch.zeros(self.num_layers, x.size(0), self.hidden_size, device=x.device) + + + + # import IPython + # IPython.embed(using=False) + + x.meta._temp_names = x.names + x = x.rename(None) + return x, state + + +def rnn_post_hook(self, inputs, outputs): + if not self.streaming: + return outputs + + # import IPython + # IPython.embed(using=False) + + input, in_state = get_tensor_and_state(inputs) + output, out_state = get_tensor_and_state(outputs) + + # Store hidden state + # TODO (JDH): Default to storing the batched hidden state. + for i, _id in enumerate(output.meta.ids): + self.hidden_state_store[_id] = out_state[:, i, :] + + output.rename_(*input.meta._temp_names) + + if isinstance(out_state, StreamTensor): + out_state.rename_(*input.meta._temp_names) + + return StreamTensor(output, meta=input.meta), out_state + + +def patch_rnn(module): + add_streaming_modes(module) + + # Add a dictionary for storing previous hidden states. + module.hidden_state_store = {} + + # Register pre_hook and post_hook. + module.register_forward_pre_hook(rnn_pre_hook) + module.register_forward_hook(rnn_post_hook) + return module + diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 57e66d5..8f70866 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -42,6 +42,7 @@ class StreamMetadata: "_lengths", "_chunk_indices", "_temp_buffer", + "_temp_names", "_min_length", "_max_length", "_lengths_updated", @@ -92,6 +93,7 @@ def __init__( self._chunk_indices = chunk_indices self._temp_buffer = None + self._temp_names = None self._min_length = None self._max_length = None @@ -237,7 +239,7 @@ def __copy__(self): new_meta.__dict__.update(self.__dict__) return new_meta - def __deepcopy__(self, memo): + def __deepcopy__(self, memo=None): """Return a deep copy of the StreamMetadata object.""" return StreamMetadata( ids=deepcopy(self.ids), @@ -688,7 +690,6 @@ def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), Raises: RuntimeError: If the intercepted function could not be handled safely. """ - if kwargs is None: kwargs = dict() diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..c2dda0a --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,60 @@ +import random +from typing import List + +import pytest +import torch + +from dreamstream.nn.utils.pad_sequence import pad_full_sequence, pad_stream_tensor +from dreamstream.tensor import StreamTensor +from dreamstream.utils.flags import BATCH, LENGTH + + +torch.manual_seed(42) +random.seed(42) + + +BATCH_SIZE = 32 + + +def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): + """Generate a number of random chunks of different lengths that sum up to `full_length`.""" + chunks = [] + chunk_sum, remaining = 0, full_length + while remaining > 0: + chunks.append(min(random.randint(min_size, max_size), remaining)) + chunk_sum = sum(chunks) + remaining = full_length - chunk_sum + return chunks + + +@pytest.fixture +def sequences(): + """A number of sequences of different lengths of size `BATCH_SIZE`. Size (16, L) of `torch.rand` values.""" + return [torch.rand(16, random.randint(200, 1000)) for i in range(BATCH_SIZE)] + + +@pytest.fixture +def ids(): + """A number of unique ids of size `BATCH_SIZE`.""" + return [str(hash(i)) for i in range(BATCH_SIZE)] + + +@pytest.fixture +def batches_of_chunks(sequences, ids) -> List[StreamTensor]: + """Batches of chunks of different lengths from the `sequences` data.""" + data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to(BATCH, "F", LENGTH) + data = data.unpad_sequence() + data = { + _id: s.split(random_chunks(s.size(LENGTH), min_size=100, max_size=200), dim=1) for _id, s in zip(ids, data) + } + + def num_remaining_chunks(data): + return sum([len(x) for x in data.values()]) + + batches = [] + while num_remaining_chunks(data) > 0: + batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] + if len(batch) > 0: + batches.append(pad_stream_tensor(batch).align_to(BATCH, "F", LENGTH)) + + return batches diff --git a/tests/patches/test_conv.py b/tests/patches/test_conv.py new file mode 100644 index 0000000..a38f48e --- /dev/null +++ b/tests/patches/test_conv.py @@ -0,0 +1,59 @@ +import torch +import torch.nn as nn +import pytest +import torchaudio + +from dreamstream import patch +from dreamstream.data.data_objects import OutputCollector + + +class TestConvs: + test_modules = [ + nn.Conv1d(16, 16, kernel_size=1, padding=0), + nn.Conv1d(16, 16, kernel_size=1, padding=1), + nn.Conv1d(16, 16, kernel_size=3, padding=0), + nn.Conv1d(16, 16, kernel_size=3, padding=1), + nn.Conv1d(16, 16, kernel_size=4, padding=0), + nn.Conv1d(16, 16, kernel_size=4, padding=2), + nn.Conv1d(16, 16, kernel_size=5, padding=0), + nn.Conv1d(16, 16, kernel_size=5, padding=2), + nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + nn.Sequential( + nn.Conv1d(16, 16, kernel_size=3, padding=1), + nn.Conv1d(16, 16, kernel_size=5, padding=2), + ), + nn.Sequential( + nn.Conv1d(16, 16, kernel_size=3, padding=1, stride=2), + nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + ), + torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=16), + ] + + def recursive_assert(self, module): + assert hasattr(module, "online") + assert hasattr(module, "offline") + if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + assert hasattr(module, "stream_buffer") + assert hasattr(module, "kernel_width") + + @pytest.mark.parametrize("module", test_modules) + def test_patch(self, module): + patch(module) + module.apply(self.recursive_assert) + + @pytest.mark.parametrize("module", test_modules) + def test_equivalence(self, sequences, ids, batches_of_chunks, module): + with torch.inference_mode(): + targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} + + stream_output = OutputCollector() + module.online() + with torch.inference_mode(): + for x in batches_of_chunks: + y = module(x) + stream_output.update(y) + + for _id, _y in targets.items(): + y = stream_output[_id].tensor() + assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" diff --git a/tests/patches/test_patching.py b/tests/patches/test_patching.py deleted file mode 100644 index baf6622..0000000 --- a/tests/patches/test_patching.py +++ /dev/null @@ -1,110 +0,0 @@ -import random -import torch -import torch.nn as nn -import torchaudio -import pytest - -from dreamstream import patch -from dreamstream.data.data_objects import OutputCollector -from dreamstream.nn.utils.pad_sequence import pad_full_sequence, pad_stream_tensor -from dreamstream.utils.flags import LENGTH - - -torch.manual_seed(42) -random.seed(42) - - -def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): - chunks = [] - chunk_sum, remaining = 0, full_length - while remaining > 0: - chunks.append(min(random.randint(min_size, max_size), remaining)) - chunk_sum = sum(chunks) - remaining = full_length - chunk_sum - return chunks - - -BATCH_SIZE = 32 - - -@pytest.fixture -def sequences(): - return [torch.rand(16, random.randint(16000 * 5, 16000 * 8)) for i in range(BATCH_SIZE)] - - -@pytest.fixture -def ids(): - return [str(hash(i)) for i in range(BATCH_SIZE)] - - -@pytest.fixture -def batches_of_chunks(sequences, ids): - data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") - data = data.unpad_sequence() - data = { - _id: s.split(random_chunks(s.size("L"), min_size=16000, max_size=32000), dim=1) for _id, s in zip(ids, data) - } - - def num_remaining_chunks(data): - return sum([len(x) for x in data.values()]) - - batches = [] - while num_remaining_chunks(data) > 0: - batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] - if len(batch) > 0: - batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) - - return batches - - -class TestPatching: - test_modules = [ - nn.Conv1d(16, 128, kernel_size=1, padding=0), - nn.Conv1d(16, 128, kernel_size=1, padding=1), - nn.Conv1d(16, 128, kernel_size=3, padding=0), - nn.Conv1d(16, 128, kernel_size=3, padding=1), - nn.Conv1d(16, 128, kernel_size=4, padding=0), - nn.Conv1d(16, 128, kernel_size=4, padding=2), - nn.Conv1d(16, 128, kernel_size=5, padding=0), - nn.Conv1d(16, 128, kernel_size=5, padding=2), - nn.Conv1d(16, 128, kernel_size=5, padding=2, stride=2), - nn.Conv1d(16, 128, kernel_size=5, padding=2, stride=2), - nn.Sequential( - nn.Conv1d(16, 128, kernel_size=3, padding=1), - nn.Conv1d(128, 128, kernel_size=5, padding=2), - ), - nn.Sequential( - nn.Conv1d(16, 128, kernel_size=3, padding=1, stride=2), - nn.Conv1d(128, 128, kernel_size=5, padding=2, stride=2), - ), - torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=16), - # GreedyCTCDecoder(labels=ascii_lowercase[:14] + " " + BLANK_TOKEN, blank_index=15), - ] - - def recursive_assert(self, module): - assert hasattr(module, "online") - assert hasattr(module, "offline") - if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): - assert hasattr(module, "stream_buffer") - assert hasattr(module, "kernel_width") - - @pytest.mark.parametrize("module", test_modules) - def test_patch(self, module): - patch(module) - module.apply(self.recursive_assert) - - @pytest.mark.parametrize("module", test_modules) - def test_equivalence(self, sequences, ids, batches_of_chunks, module): - with torch.inference_mode(): - targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} - - stream_output = OutputCollector() - module.online() - with torch.inference_mode(): - for x in batches_of_chunks: - y = module(x) - stream_output.update(y) - - for _id, _y in targets.items(): - y = stream_output[_id].tensor() - assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" diff --git a/tests/patches/test_rnn.py b/tests/patches/test_rnn.py new file mode 100644 index 0000000..f8dccdb --- /dev/null +++ b/tests/patches/test_rnn.py @@ -0,0 +1,61 @@ +import random +import torch +import torch.nn as nn +import pytest + +from dreamstream import patch +from dreamstream.data.data_objects import OutputCollector +from dreamstream.utils.flags import BATCH, LENGTH + + +class TestRNNs: + initial_h = torch.randn(1, 1, 16) + initial_c = torch.randn(1, 1, 16) + + test_modules = [ + nn.RNN(16, 16, bidirectional=False, batch_first=True), + ] + + def recursive_assert(self, module): + assert hasattr(module, "online") + assert hasattr(module, "offline") + + if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + assert hasattr(module, "stream_buffer") + assert hasattr(module, "kernel_width") + + if isinstance(module, (nn.RNN, nn.LSTM, nn.GRU)): + pass + + @pytest.mark.parametrize("module", test_modules) + def test_patch(self, module): + patch(module) + module.apply(self.recursive_assert) + + @pytest.mark.parametrize("initial_state", [False]) + @pytest.mark.parametrize("module", test_modules) + def test_equivalence(self, sequences, ids, batches_of_chunks, module, initial_state): + if initial_state: + if isinstance(module, nn.LSTM): + state = (self.initial_h, self.initial_c) + else: + state = self.initial_h + else: + state = None + + with torch.inference_mode(): + targets = {_id: module(s.transpose(0, 1).unsqueeze(0), state) for _id, s in zip(ids, sequences)} + + # TODO (JDH): Test final state equivalence + stream_output = OutputCollector() + module.online() + with torch.inference_mode(): + for x in batches_of_chunks: + y, state = module(x.align_to(BATCH, LENGTH, "F"), state) + stream_output.update(y) + + import IPython + IPython.embed(using=False) + for _id, _y in targets.items(): + y = stream_output[_id].tensor() + assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" From 03bb2d0f8d4e4e8e5fb7fe6a18093d3461bed5a2 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Fri, 23 Jun 2023 08:32:57 +0000 Subject: [PATCH 11/36] Remove wav2letter test --- tests/patches/test_conv.py | 59 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 tests/patches/test_conv.py diff --git a/tests/patches/test_conv.py b/tests/patches/test_conv.py new file mode 100644 index 0000000..dcb2a6a --- /dev/null +++ b/tests/patches/test_conv.py @@ -0,0 +1,59 @@ +import torch +import torch.nn as nn +import pytest +import torchaudio + +from dreamstream import patch +from dreamstream.data.data_objects import OutputCollector + + +class TestConvs: + test_modules = [ + nn.Conv1d(16, 16, kernel_size=1, padding=0), + nn.Conv1d(16, 16, kernel_size=1, padding=1), + nn.Conv1d(16, 16, kernel_size=3, padding=0), + nn.Conv1d(16, 16, kernel_size=3, padding=1), + nn.Conv1d(16, 16, kernel_size=4, padding=0), + nn.Conv1d(16, 16, kernel_size=4, padding=2), + nn.Conv1d(16, 16, kernel_size=5, padding=0), + nn.Conv1d(16, 16, kernel_size=5, padding=2), + nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + nn.Sequential( + nn.Conv1d(16, 16, kernel_size=3, padding=1), + nn.Conv1d(16, 16, kernel_size=5, padding=2), + ), + nn.Sequential( + nn.Conv1d(16, 16, kernel_size=3, padding=1, stride=2), + nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + ), + # torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=16), # Too slow for remote CI. + ] + + def recursive_assert(self, module): + assert hasattr(module, "online") + assert hasattr(module, "offline") + if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + assert hasattr(module, "stream_buffer") + assert hasattr(module, "kernel_width") + + @pytest.mark.parametrize("module", test_modules) + def test_patch(self, module): + patch(module) + module.apply(self.recursive_assert) + + @pytest.mark.parametrize("module", test_modules) + def test_equivalence(self, sequences, ids, batches_of_chunks, module): + with torch.inference_mode(): + targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} + + stream_output = OutputCollector() + module.online() + with torch.inference_mode(): + for x in batches_of_chunks: + y = module(x) + stream_output.update(y) + + for _id, _y in targets.items(): + y = stream_output[_id].tensor() + assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" From a4c5711499c0737fe1c10b2ceb65a5e858019ebe Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Fri, 23 Jun 2023 12:03:41 +0000 Subject: [PATCH 12/36] Update tests and fix deepcopy --- dreamstream/tensor.py | 2 +- tests/conftest.py | 70 +++++++++++++++++++++ tests/patches/test_conv.py | 36 +++++------ tests/patches/test_patching.py | 110 --------------------------------- 4 files changed, 89 insertions(+), 129 deletions(-) create mode 100644 tests/conftest.py delete mode 100644 tests/patches/test_patching.py diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 57e66d5..53891c3 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -237,7 +237,7 @@ def __copy__(self): new_meta.__dict__.update(self.__dict__) return new_meta - def __deepcopy__(self, memo): + def __deepcopy__(self, memo: Optional[dict] = None): """Return a deep copy of the StreamMetadata object.""" return StreamMetadata( ids=deepcopy(self.ids), diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..5f6e697 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,70 @@ +import random + +import pytest +import torch + +from dreamstream.nn.utils.pad_sequence import pad_full_sequence, pad_stream_tensor +from dreamstream.utils.flags import LENGTH + + +torch.manual_seed(42) +random.seed(42) + + +BATCH_SIZE = 32 +SAMPLE_RATE = 16000 +WAVEFORM_MIN_SECONDS = 3 +WAVEFORM_MAX_SECONDS = 7 +WAVEFORM_CHUNK_MIN_SECONDS = 1 +WAVEFORM_CHUNK_MAX_SECONDS = 2 + + +def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): + chunks = [] + chunk_sum, remaining = 0, full_length + while remaining > 0: + chunks.append(min(random.randint(min_size, max_size), remaining)) + chunk_sum = sum(chunks) + remaining = full_length - chunk_sum + return chunks + + +@pytest.fixture +def waveforms(): + return [ + torch.rand(1, random.randint(SAMPLE_RATE * WAVEFORM_MIN_SECONDS, SAMPLE_RATE * WAVEFORM_MAX_SECONDS)) + for i in range(BATCH_SIZE) + ] + + +@pytest.fixture +def ids(): + return [str(hash(i)) for i in range(BATCH_SIZE)] + + +@pytest.fixture +def batches_of_waveform_chunks(waveforms, ids): + data = pad_full_sequence(waveforms, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") + data = data.unpad_sequence() + data = { + _id: s.split( + random_chunks( + s.size("L"), + min_size=SAMPLE_RATE * WAVEFORM_CHUNK_MIN_SECONDS, + max_size=SAMPLE_RATE * WAVEFORM_CHUNK_MAX_SECONDS, + ), + dim=1, + ) + for _id, s in zip(ids, data) + } + + def num_remaining_chunks(data): + return sum([len(x) for x in data.values()]) + + batches = [] + while num_remaining_chunks(data) > 0: + batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] + if len(batch) > 0: + batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) + + return batches diff --git a/tests/patches/test_conv.py b/tests/patches/test_conv.py index dcb2a6a..a362057 100644 --- a/tests/patches/test_conv.py +++ b/tests/patches/test_conv.py @@ -1,7 +1,7 @@ import torch import torch.nn as nn import pytest -import torchaudio +# import torchaudio from dreamstream import patch from dreamstream.data.data_objects import OutputCollector @@ -9,23 +9,23 @@ class TestConvs: test_modules = [ - nn.Conv1d(16, 16, kernel_size=1, padding=0), - nn.Conv1d(16, 16, kernel_size=1, padding=1), - nn.Conv1d(16, 16, kernel_size=3, padding=0), - nn.Conv1d(16, 16, kernel_size=3, padding=1), - nn.Conv1d(16, 16, kernel_size=4, padding=0), - nn.Conv1d(16, 16, kernel_size=4, padding=2), - nn.Conv1d(16, 16, kernel_size=5, padding=0), - nn.Conv1d(16, 16, kernel_size=5, padding=2), - nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), - nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + nn.Conv1d(1, 4, kernel_size=1, padding=0), + nn.Conv1d(1, 4, kernel_size=1, padding=1), + nn.Conv1d(1, 4, kernel_size=3, padding=0), + nn.Conv1d(1, 4, kernel_size=3, padding=1), + nn.Conv1d(1, 4, kernel_size=4, padding=0), + nn.Conv1d(1, 4, kernel_size=4, padding=2), + nn.Conv1d(1, 4, kernel_size=5, padding=0), + nn.Conv1d(1, 4, kernel_size=5, padding=2), + nn.Conv1d(1, 4, kernel_size=5, padding=2, stride=2), + nn.Conv1d(1, 4, kernel_size=5, padding=2, stride=2), nn.Sequential( - nn.Conv1d(16, 16, kernel_size=3, padding=1), - nn.Conv1d(16, 16, kernel_size=5, padding=2), + nn.Conv1d(1, 4, kernel_size=3, padding=1), + nn.Conv1d(4, 4, kernel_size=5, padding=2), ), nn.Sequential( - nn.Conv1d(16, 16, kernel_size=3, padding=1, stride=2), - nn.Conv1d(16, 16, kernel_size=5, padding=2, stride=2), + nn.Conv1d(1, 4, kernel_size=3, padding=1, stride=2), + nn.Conv1d(4, 4, kernel_size=5, padding=2, stride=2), ), # torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=16), # Too slow for remote CI. ] @@ -43,14 +43,14 @@ def test_patch(self, module): module.apply(self.recursive_assert) @pytest.mark.parametrize("module", test_modules) - def test_equivalence(self, sequences, ids, batches_of_chunks, module): + def test_equivalence(self, waveforms, ids, batches_of_waveform_chunks, module): with torch.inference_mode(): - targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} + targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, waveforms)} stream_output = OutputCollector() module.online() with torch.inference_mode(): - for x in batches_of_chunks: + for x in batches_of_waveform_chunks: y = module(x) stream_output.update(y) diff --git a/tests/patches/test_patching.py b/tests/patches/test_patching.py deleted file mode 100644 index baf6622..0000000 --- a/tests/patches/test_patching.py +++ /dev/null @@ -1,110 +0,0 @@ -import random -import torch -import torch.nn as nn -import torchaudio -import pytest - -from dreamstream import patch -from dreamstream.data.data_objects import OutputCollector -from dreamstream.nn.utils.pad_sequence import pad_full_sequence, pad_stream_tensor -from dreamstream.utils.flags import LENGTH - - -torch.manual_seed(42) -random.seed(42) - - -def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): - chunks = [] - chunk_sum, remaining = 0, full_length - while remaining > 0: - chunks.append(min(random.randint(min_size, max_size), remaining)) - chunk_sum = sum(chunks) - remaining = full_length - chunk_sum - return chunks - - -BATCH_SIZE = 32 - - -@pytest.fixture -def sequences(): - return [torch.rand(16, random.randint(16000 * 5, 16000 * 8)) for i in range(BATCH_SIZE)] - - -@pytest.fixture -def ids(): - return [str(hash(i)) for i in range(BATCH_SIZE)] - - -@pytest.fixture -def batches_of_chunks(sequences, ids): - data = pad_full_sequence(sequences, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") - data = data.unpad_sequence() - data = { - _id: s.split(random_chunks(s.size("L"), min_size=16000, max_size=32000), dim=1) for _id, s in zip(ids, data) - } - - def num_remaining_chunks(data): - return sum([len(x) for x in data.values()]) - - batches = [] - while num_remaining_chunks(data) > 0: - batch = [s.pop(0) for _id, s in data.items() if len(s) > 0 and random.random() < 0.75] - if len(batch) > 0: - batches.append(pad_stream_tensor(batch).align_to("B", "F", "L")) - - return batches - - -class TestPatching: - test_modules = [ - nn.Conv1d(16, 128, kernel_size=1, padding=0), - nn.Conv1d(16, 128, kernel_size=1, padding=1), - nn.Conv1d(16, 128, kernel_size=3, padding=0), - nn.Conv1d(16, 128, kernel_size=3, padding=1), - nn.Conv1d(16, 128, kernel_size=4, padding=0), - nn.Conv1d(16, 128, kernel_size=4, padding=2), - nn.Conv1d(16, 128, kernel_size=5, padding=0), - nn.Conv1d(16, 128, kernel_size=5, padding=2), - nn.Conv1d(16, 128, kernel_size=5, padding=2, stride=2), - nn.Conv1d(16, 128, kernel_size=5, padding=2, stride=2), - nn.Sequential( - nn.Conv1d(16, 128, kernel_size=3, padding=1), - nn.Conv1d(128, 128, kernel_size=5, padding=2), - ), - nn.Sequential( - nn.Conv1d(16, 128, kernel_size=3, padding=1, stride=2), - nn.Conv1d(128, 128, kernel_size=5, padding=2, stride=2), - ), - torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=16), - # GreedyCTCDecoder(labels=ascii_lowercase[:14] + " " + BLANK_TOKEN, blank_index=15), - ] - - def recursive_assert(self, module): - assert hasattr(module, "online") - assert hasattr(module, "offline") - if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): - assert hasattr(module, "stream_buffer") - assert hasattr(module, "kernel_width") - - @pytest.mark.parametrize("module", test_modules) - def test_patch(self, module): - patch(module) - module.apply(self.recursive_assert) - - @pytest.mark.parametrize("module", test_modules) - def test_equivalence(self, sequences, ids, batches_of_chunks, module): - with torch.inference_mode(): - targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, sequences)} - - stream_output = OutputCollector() - module.online() - with torch.inference_mode(): - for x in batches_of_chunks: - y = module(x) - stream_output.update(y) - - for _id, _y in targets.items(): - y = stream_output[_id].tensor() - assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" From 0d8e4f84906694041ff5cbe50c7607f053df8858 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Fri, 23 Jun 2023 12:04:08 +0000 Subject: [PATCH 13/36] Reformat listloaders.py --- dreamstream/utils/listloaders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dreamstream/utils/listloaders.py b/dreamstream/utils/listloaders.py index b308f06..22563d1 100644 --- a/dreamstream/utils/listloaders.py +++ b/dreamstream/utils/listloaders.py @@ -21,7 +21,7 @@ def load_valid_pointwise_ops(): with open(glob(os.path.join(lists_path, "valid-pointwise-ops-*.txt"))[0], "r") as file_buffer: ops_list = {get_tensor_attr(f) for f in file_buffer.read().split("\n")} return ops_list - + def load_recouple_pointwise_ops(): with open(glob(os.path.join(lists_path, "recouple-pointwise-ops-*.txt"))[0], "r") as file_buffer: From 83aed6378504761f26d82a0381f963759fb11016 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Fri, 23 Jun 2023 12:06:04 +0000 Subject: [PATCH 14/36] Fix linting --- doc_scrape/pointwise-ops.py | 6 +++--- dreamstream/func_coverage.py | 3 --- dreamstream/overrides.py | 2 -- tests/test_tensor.py | 18 +++++++++--------- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/doc_scrape/pointwise-ops.py b/doc_scrape/pointwise-ops.py index 3933925..45f4456 100644 --- a/doc_scrape/pointwise-ops.py +++ b/doc_scrape/pointwise-ops.py @@ -138,7 +138,7 @@ def compare_tensors(test_out, out): input_valid = True break - except Exception as e: + except Exception: if i == 3: no_valid_input_found.append(func_name) @@ -155,7 +155,7 @@ def compare_tensors(test_out, out): compare_tensors(test_out, out) default_valid_funcs.append(func_name) continue - except Exception as e: + except Exception: pass try: @@ -170,7 +170,7 @@ def compare_tensors(test_out, out): compare_tensors(test_out, out) recouple_funcs.append(func_name) continue - except Exception as e: + except Exception: pass no_valid_output.append(func_name) diff --git a/dreamstream/func_coverage.py b/dreamstream/func_coverage.py index 575a02f..857b5fb 100644 --- a/dreamstream/func_coverage.py +++ b/dreamstream/func_coverage.py @@ -1,6 +1,3 @@ -import os -from glob import glob - import torch from dreamstream.utils.listloaders import ( diff --git a/dreamstream/overrides.py b/dreamstream/overrides.py index ea56d66..3720137 100644 --- a/dreamstream/overrides.py +++ b/dreamstream/overrides.py @@ -1,11 +1,9 @@ import functools from copy import deepcopy -import math from typing import Any, Callable, NamedTuple, Optional, List, Sequence, Tuple, Union from torch.types import Number import numpy as np -import rich import torch import torch.nn.functional as F from torch import Tensor diff --git a/tests/test_tensor.py b/tests/test_tensor.py index ff449e6..a725099 100644 --- a/tests/test_tensor.py +++ b/tests/test_tensor.py @@ -1,17 +1,17 @@ -import collections +# import collections import pytest import torch from dreamstream.tensor import StreamTensor, as_stream_tensor, stream_tensor, stream_metadata, LENGTH, BATCH -from dreamstream.func_coverage import ( - DECOUPLE_FUNCTIONS, - FLAT_OVERRIDABLE_FUNCTIONS, - CUSTOMIZED_FUNCTIONS, - RECOUPLE_FUNCTIONS, - UNSUPPORTED_FUNCTIONS, - VALID_FUNCTIONS, -) +# from dreamstream.func_coverage import ( +# DECOUPLE_FUNCTIONS, +# FLAT_OVERRIDABLE_FUNCTIONS, +# CUSTOMIZED_FUNCTIONS, +# RECOUPLE_FUNCTIONS, +# UNSUPPORTED_FUNCTIONS, +# VALID_FUNCTIONS, +# ) from dreamstream.overrides import join_dim_names From 9a4f70f10bdcf933795899a52ceb876886bd4600 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 12:30:35 +0200 Subject: [PATCH 15/36] Add chunk_indices to equal and deepcopy --- dreamstream/tensor.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 4b51ca2..1be3e04 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -340,6 +340,7 @@ def __deepcopy__(self): sos=self.sos, eos=self.eos, lengths=self.lengths, + chunk_indices=self._chunk_indices, _copy_on_init=True, ) @@ -350,6 +351,7 @@ def __eq__(self, other: "StreamMetadata") -> bool: and self.sos.equal(other.sos) and self.eos.equal(other.eos) and self.lengths.equal(other.lengths) + and (self._chunk_indices is None and other._chunk_indices is None) or (self._chunk_indices.equal(other.lengths) ) def __len__(self) -> int: From 26a150e9455466a95c778d121a38ea72cc4372f4 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 14:00:54 +0200 Subject: [PATCH 16/36] Add chunk_indices to indexing --- dreamstream/tensor.py | 48 ++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 1be3e04..82b3589 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -351,7 +351,7 @@ def __eq__(self, other: "StreamMetadata") -> bool: and self.sos.equal(other.sos) and self.eos.equal(other.eos) and self.lengths.equal(other.lengths) - and (self._chunk_indices is None and other._chunk_indices is None) or (self._chunk_indices.equal(other.lengths) + and (self._chunk_indices is None and other._chunk_indices is None) or self._chunk_indices.equal(other.lengths) ) def __len__(self) -> int: @@ -442,14 +442,16 @@ def index_batch( sos = self.sos[indices] eos = self.eos[indices] lengths = self.lengths[indices] - return StreamMetadata(ids, sos, eos, lengths) + chunk_indices = self._chunk_indices[indices] if self._chunk_indices is not None else None + return StreamMetadata(ids, sos, eos, lengths, chunk_indices) if isinstance(indices, int): ids = [self.ids[indices]] sos = self.sos[[indices]] eos = self.eos[[indices]] lengths = self.lengths[[indices]] - return StreamMetadata(ids, sos, eos, lengths) + chunk_indices = self._chunk_indices[[indices]] if self._chunk_indices is not None else None + return StreamMetadata(ids, sos, eos, lengths, chunk_indices) if isinstance(indices, slice): ids = self.ids[indices] @@ -459,7 +461,8 @@ def index_batch( sos = self.sos[indices] eos = self.eos[indices] lengths = self.lengths[indices] - return StreamMetadata(ids, sos, eos, lengths) + chunk_indices = self._chunk_indices[indices] if self._chunk_indices is not None else None + return StreamMetadata(ids, sos, eos, lengths, chunk_indices) def index_length( self, indices: Union[None, int, slice, List[int], Tuple[int], torch.IntTensor, torch.BoolTensor] @@ -502,12 +505,14 @@ def index_batch_and_length(self, indices: torch.BoolTensor) -> "StreamMetadata": sos = self.sos[keep_ids] eos = self.eos[keep_ids] lengths = self.lengths[keep_ids] + chunk_indices = self._chunk_indices[keep_ids] if self._chunk_indices is not None else None indices = indices[keep_ids] else: # includes `broadcast_batch == True` ids = deepcopy(self.ids) sos = self.sos eos = self.eos lengths = self.lengths + chunk_indices = self._chunk_indices sos = sos & indices[:, 0] # SOS only if the first index is included. if not broadcast_length: @@ -517,8 +522,9 @@ def index_batch_and_length(self, indices: torch.BoolTensor) -> "StreamMetadata": eos = eos & (start < lengths) & (lengths <= stop) # eos = eos & indices[range(indices.size(0)), lengths - 1] # EOS only if the last non-padding is included. lengths = cumsum[keep_ids, lengths - 1] + chunk_indices = chunk_indices[keep_ids] if chunk_indices is not None else None - return StreamMetadata(ids, sos, eos, lengths) + return StreamMetadata(ids, sos, eos, lengths, chunk_indices) def _index_length_int(self, index: int) -> "StreamMetadata": # Convert negative indices to positive @@ -531,7 +537,8 @@ def _index_length_int(self, index: int) -> "StreamMetadata": # TODO (JDH): numba compiled arithmetic is much faster but slowed down due to conversion to/from numpy # Maybe we should store sos and eos as numpy arrays instead of torch tensors? eos = torch.from_numpy(update_eos_from_integer(self.eos.numpy(), self.lengths.numpy(), index)) - return StreamMetadata(deepcopy(self.ids), sos, eos, lengths) + chunk_indices = self._chunk_indices.clone() if self._chunk_indices is not None else None + return StreamMetadata(deepcopy(self.ids), sos, eos, lengths, chunk_indices) def _index_length_slice(self, slice: slice) -> "StreamMetadata": # Convert start and stop to positive indices @@ -552,7 +559,8 @@ def _index_length_slice(self, slice: slice) -> "StreamMetadata": sos = self.sos.clone() if start == 0 and stop > 0 else torch.zeros_like(self.sos) eos = torch.from_numpy(update_eos_from_slice(self.eos.numpy(), self.lengths.numpy(), start, stop)) - return StreamMetadata(deepcopy(self.ids), sos, eos, lengths) + chunk_indices = self._chunk_indices.clone() if self._chunk_indices is not None else None + return StreamMetadata(deepcopy(self.ids), sos, eos, lengths, chunk_indices) def _index_length_list(self, indices: Union[List[int], Tuple[int]]) -> "StreamMetadata": # Convert to numpy arrays for faster manipulation and numba jit support. @@ -570,7 +578,8 @@ def _index_length_list(self, indices: Union[List[int], Tuple[int]]) -> "StreamMe sos = self.sos.clone() if min_i == 0 else torch.zeros_like(self.sos) eos = torch.from_numpy(update_eos_from_slice(self.eos.numpy(), lengths_np, min_i, max_i)) # TODO (JDH): Keep EOS true if the indexing spans over the last non-padding element. - return StreamMetadata(deepcopy(self.ids), sos, eos, lengths) + chunk_indices = self._chunk_indices.clone() if self._chunk_indices is not None else None + return StreamMetadata(deepcopy(self.ids), sos, eos, lengths, chunk_indices) def _index_length_1d_tensor(self, indices: torch.Tensor) -> "StreamMetadata": if indices.dtype == torch.bool: @@ -604,15 +613,21 @@ def cat_batch(cls, metas: List["StreamMetadata"]) -> "StreamMetadata": StreamMetadata: The concatenated StreamMetadata object. """ + if not all(isinstance(s, StreamMetadata) for s in metas): + raise TypeError("All objects in list must be of type StreamMetadata.") + if len(metas) == 1: return deepcopy(metas[0]) - assert all(isinstance(s, StreamMetadata) for s in metas) ids = list(itertools.chain.from_iterable([s.ids for s in metas])) sos = torch.cat([s.sos for s in metas], dim=0) eos = torch.cat([s.eos for s in metas], dim=0) lengths = torch.cat([s.lengths for s in metas], dim=0) - return cls(ids, sos, eos, lengths) + if all(s.chunk_indices is not None for s in metas): + chunk_indices = torch.cat([s.chunk_indices for s in metas], dim=0) + else: + chunk_indices = None + return cls(ids, sos, eos, lengths, chunk_indices) @classmethod def cat_length(cls, metas: List["StreamMetadata"]) -> "StreamMetadata": @@ -640,7 +655,9 @@ def cat_length(cls, metas: List["StreamMetadata"]) -> "StreamMetadata": sos = metas[0].sos.clone() eos = metas[-1].eos.clone() lengths = sum([s.lengths for s in metas]) - return cls(ids, sos, eos, lengths) + if all(s.chunk_indices is not None for s in metas): + chunk_indices = metas[-1].chunk_indices.clone() # TODO (JDH): This assumes the right-most chunk is the last + return cls(ids, sos, eos, lengths, chunk_indices) def split(self, split_size_or_sections: Union[int, List[int]], dim: str) -> List["StreamMetadata"]: """Split a StreamMetadata object into a list of StreamMetadata objects along a given dimension.""" @@ -669,10 +686,13 @@ def split_batch(self, split_size_or_sections: Union[int, List[int]]) -> List["St slices = np.cumsum([0] + split_size_or_sections) split_ids = [self.ids[i:j] for i, j in zip(slices[:-1], slices[1:])] - split_first = self.sos.split(split_size_or_sections) - split_last = self.eos.split(split_size_or_sections) + split_sos = self.sos.split(split_size_or_sections) + split_eos = self.eos.split(split_size_or_sections) split_lengths = self.lengths.split(split_size_or_sections) - args_iter = zip(split_ids, split_first, split_last, split_lengths) + split_chunk_indices = ( + self.chunk_indices.split(split_size_or_sections) if self.chunk_indices is not None else None + ) + args_iter = zip(split_ids, split_sos, split_eos, split_lengths, split_chunk_indices) return [stream_metadata(*args) for args in args_iter] From 2a0103c6be56c5f7c1158e020ccaf7da0bf11c8b Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 14:17:08 +0200 Subject: [PATCH 17/36] Format with black --- dreamstream/tensor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 82b3589..b229dd8 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -351,7 +351,8 @@ def __eq__(self, other: "StreamMetadata") -> bool: and self.sos.equal(other.sos) and self.eos.equal(other.eos) and self.lengths.equal(other.lengths) - and (self._chunk_indices is None and other._chunk_indices is None) or self._chunk_indices.equal(other.lengths) + and (self._chunk_indices is None and other._chunk_indices is None) + or self._chunk_indices.equal(other.lengths) ) def __len__(self) -> int: From e8bc8c19671935f456e1a37e3407c414602fbf7f Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 14:52:41 +0200 Subject: [PATCH 18/36] Add questions regarding extra tokens for Transformers --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 56126c9..1825f74 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,9 @@ PyTorch models are typically trained and evaluated on batches of data. However, - Fail outright. - Fallback to a regular `torch.Tensor`. - Fallback to a different tensor subclass that is identical in behaviour to `torch.Tensor` but carries the frozen `StreamMetadata` along. +- How do we deal with + - Special tokens concatenated to the input? E.g. "translate" and "language" tokens in Whisper? + - Learnable tokens concatenated to the input sequence before an MHSA layer? ## Can we use DreamStream for training? From 5719824dafab977eea2a4a5cb140f0c52192b120 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 22:38:08 +0200 Subject: [PATCH 19/36] Updates for testing --- dreamstream/patches/rnn.py | 68 +++++++++++++++++++++++--------------- dreamstream/tensor.py | 11 +++--- tests/test_tensor.py | 2 +- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/dreamstream/patches/rnn.py b/dreamstream/patches/rnn.py index ad1eb9a..7679a07 100644 --- a/dreamstream/patches/rnn.py +++ b/dreamstream/patches/rnn.py @@ -102,7 +102,45 @@ def __delitem__(self, keys): def rnn_pre_hook(self, inputs): - # TODO (JDH): Deal with initial hidden state here. + """ + + Cases: + - Given state: + 1. None + 2. Tensor + - Given ids: + 1. All are first + 2. Some are first + 3. None are first + 4. All are last + 5. Some are last + 6. None are last + 7. All are first and last + 8. Some are first and some are last + 9. None are first or last + - Hidden state store: + 1. All ids are in the hidden state store + 2. Some ids are in the hidden state store + 3. No ids are in the hidden state store + + Get hidden state (num_layers, batch_size, hidden_size). + If any of the ids are in the hidden state store, we must use that state (unless they are the first chunk, but they can't be if they are in the hidden state store). + Any first chunks must use the given initial state. + 1. If all chunks are first chunks, we can use the given initial state whether it is None or Tensor. + 2. If only some chunks are first chunks, we must use the given initial state for those chunks and the hidden + state store for the others by writing selectively. + + Args: + self (nn.RNN): The current module. + inputs (Union[torch.Tensor, Tuple[torch.Tensor, Optional[torch.Tensor]]]): Inputs to `self.forward`. + + Raises: + RuntimeError: If input is a StreamTensor and the module is not in online mode, or if the input is not a + StreamTensor but the module is in online mode. + + Returns: + (Union[torch.Tensor, Tuple[torch.Tensor, Optional[torch.Tensor]]]): Modified inputs to `self.forward`. + """ x, state = get_tensor_and_state(inputs) input_is_stream_tensor = isinstance(x, StreamTensor) @@ -115,34 +153,10 @@ def rnn_pre_hook(self, inputs): if not input_is_stream_tensor: raise RuntimeError("The input is expected to be StreamTensor when in online mode.") - # Cases: - # - Given state: - # 1. None - # 2. Tensor - # - Given ids: - # 1. All are first - # 2. Some are first - # 3. None are first - # 4. All are last - # 5. Some are last - # 6. None are last - # 7. All are first and last - # 8. Some are first and some are last - # 9. None are first or last - # - Hidden state store: - # 1. All ids are in the hidden state store - # 2. Some ids are in the hidden state store - # 3. No ids are in the hidden state store - - # Get hidden state (num_layers, batch_size, hidden_size). - # If any of the ids are in the hidden state store, we must use that state (unless they are the first chunk, but they can't be if they are in the hidden state store). - # Any first chunks must use the given initial state. - # 1. If all chunks are first chunks, we can use the given initial state whether it is None or Tensor. - # 2. If only some chunks are first chunks, we must use the given initial state for those chunks and the hidden - # state store for the others by writing selectively. # import IPython # IPython.embed(using=False) + # TODO (JDH): Deal with initial hidden state here. ids_without_state = [(i, _id) for i, _id in enumerate(x.meta.ids) if _id not in self.hidden_state_store] if any(ids_without_state): if len(ids_without_state) == len(x.meta.ids) and state is None: @@ -159,7 +173,7 @@ def rnn_pre_hook(self, inputs): state = self.hidden_state_store[x.meta.ids] else: # Some ids have state but a custom state is given too. - # TODO (JDH): Speed this up by using torch.select_scatter or similar directly on the given state + # TODO (JDH): Speed this up by using torch.select_scatter or similar directly on the given state. for i, _id in ids_without_state: self.hidden_state_store[_id] = state[:, i, :].unsqueeze(1) state = self.hidden_state_store[x.meta.ids] diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 6c711c1..174b5e1 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -666,12 +666,13 @@ def split_batch(self, split_size_or_sections: Union[int, List[int]]) -> List["St split_sos = self.sos.split(split_size_or_sections) split_eos = self.eos.split(split_size_or_sections) split_lengths = self.lengths.split(split_size_or_sections) - split_chunk_indices = ( - self.chunk_indices.split(split_size_or_sections) if self.chunk_indices is not None else None - ) - args_iter = zip(split_ids, split_sos, split_eos, split_lengths, split_chunk_indices) + if self.chunk_indices is not None: + split_chunk_indices = self.chunk_indices.split(split_size_or_sections) + else: + split_chunk_indices = [None] * split_size_or_sections - return [stream_metadata(*args) for args in args_iter] + args_iter = zip(split_ids, split_sos, split_eos, split_lengths, split_chunk_indices) + return [StreamMetadata(*args) for args in args_iter] def split_length(self, split_size_or_sections: Union[int, List[int]]) -> List["StreamMetadata"]: """Split a StreamMetadata object into a list of StreamMetadata objects along the length dimension. diff --git a/tests/test_tensor.py b/tests/test_tensor.py index a725099..f0a3410 100644 --- a/tests/test_tensor.py +++ b/tests/test_tensor.py @@ -271,7 +271,7 @@ def assert_stream_tensor_and_meta_correct(stream_tensor, func, *args, ids, lengt t = func(torch_tensor, *args, **kwargs) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), t) - assert s.meta.ids == ids + assert s.meta.ids == tuple(ids) assert torch.equal(s.meta.sos, torch.tensor(sos)) assert torch.equal(s.meta.eos, torch.tensor(eos)) assert torch.equal(s.meta.lengths, torch.tensor(lengths)) From 549739b961360e4170c4f86d59c201fd7495ac5b Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 23:44:11 +0200 Subject: [PATCH 20/36] Fix typing state ids as tuple --- dreamstream/tensor.py | 114 ++++++++++----------------------------- tests/test_tensor.py | 122 +++++++++++++++++++++--------------------- 2 files changed, 89 insertions(+), 147 deletions(-) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index 174b5e1..de26f02 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -32,69 +32,7 @@ # they are needed. This minimizes overhead computation on StreamTensors that end up as leaf nodes in the graph. -class LazyProxy(object): - """A proxy class that lazily instantiates an object of type cls with arguments *args and **kwargs.""" - - def __init__(self, cls, *args, **kwargs): - self.__dict__["_cls"] = cls - self.__dict__["_args"] = args - self.__dict__["_kwargs"] = kwargs - self.__dict__["_obj"] = None - - def __getattr__(self, name): - if self.__dict__["_obj"] is None: - self.__init_obj() - - return getattr(self.__dict__["_obj"], name) - - def __setattr__(self, name, value): - if self.__dict__["_obj"] is None: - self.__init_obj() - - setattr(self.__dict__["_obj"], name, value) - - def __getitem__(self, key): - if self.__dict__["_obj"] is None: - self.__init_obj() - - return self.__dict__["_obj"].__getitem__(key) - - def __copy__(self): - if self.__dict__["_obj"] is None: - self.__init_obj() - - return self.__dict__["_obj"].__copy__() - - def __eq__(self, other): - if self.__dict__["_obj"] is None: - self.__init_obj() - - return self.__dict__["_obj"].__eq__(other) - - def __len__(self): - if self.__dict__["_obj"] is None: - self.__init_obj() - - return self.__dict__["_obj"].__len__() - - def __repr__(self): - if self.__dict__["_obj"] is None: - return f"LazyProxy({self.__dict__['_cls'].__name__}, {self.__dict__['_args']}, {self.__dict__['_kwargs']})" - return self.__dict__["_obj"].__repr__() - - def __init_obj(self): - self.__dict__["_obj"] = object.__new__(self.__dict__["_cls"]) - self.__dict__["_obj"].__init__(*self.__dict__["_args"], **self.__dict__["_kwargs"]) - - -class LazyInit(object): - """A class that lazily initializes its attributes.""" - - def __new__(cls, *args, **kwargs): - return LazyProxy(cls, *args, **kwargs) - - -class StreamMetadata(LazyInit): +class StreamMetadata: """Metadata associated with a batch of streamed input tensors.""" __slots__ = [ @@ -119,17 +57,19 @@ class StreamMetadata(LazyInit): def __init__( self, - ids: Union[str, List[str]], - sos: Union[bool, List[bool], torch.BoolTensor], - eos: Union[bool, List[bool], torch.BoolTensor], - lengths: Union[int, List[int], torch.IntTensor], - chunk_indices: Optional[Union[int, List[int], torch.IntTensor]] = None, + ids: Union[str, Tuple[str]], + sos: Union[bool, Tuple[bool], torch.BoolTensor], + eos: Union[bool, Tuple[bool], torch.BoolTensor], + lengths: Union[int, Tuple[int], torch.IntTensor], + chunk_indices: Optional[Union[int, Tuple[int], torch.IntTensor]] = None, _copy_on_init: bool = False, ): super().__init__() if isinstance(ids, str): - ids = [ids] + ids = (ids,) + elif isinstance(ids, Sequence): + ids = tuple(ids) if isinstance(lengths, int): lengths = tuple(lengths) if isinstance(sos, bool): @@ -327,8 +267,10 @@ def __eq__(self, other: "StreamMetadata") -> bool: and self.sos.equal(other.sos) and self.eos.equal(other.eos) and self.lengths.equal(other.lengths) - and (self._chunk_indices is None and other._chunk_indices is None) - or self._chunk_indices.equal(other.lengths) + and ( + (self._chunk_indices is None and other._chunk_indices is None) + or self._chunk_indices.equal(other.lengths) + ) ) def __len__(self) -> int: @@ -415,7 +357,7 @@ def index_batch( raise IndexError(f"Expected batch indices to be a 1-dimensional tensor, but got {indices.ndim} dimensions.") if isinstance(indices, torch.BoolTensor): - ids = [id for i, id in enumerate(self.ids) if indices[i]] + ids = tuple(id for i, id in enumerate(self.ids) if indices[i]) sos = self.sos[indices] eos = self.eos[indices] lengths = self.lengths[indices] @@ -423,11 +365,11 @@ def index_batch( return StreamMetadata(ids, sos, eos, lengths, chunk_indices) if isinstance(indices, int): - ids = tuple(self.ids[indices]) - sos = self.sos[[indices]] - eos = self.eos[[indices]] - lengths = self.lengths[[indices]] - chunk_indices = self._chunk_indices[[indices]] if self._chunk_indices is not None else None + ids = (self.ids[indices],) + sos = self.sos[indices].unsqueeze_(0) + eos = self.eos[indices].unsqueeze_(0) + lengths = self.lengths[indices].unsqueeze_(0) + chunk_indices = self._chunk_indices[indices].unsqueeze_(0) if self._chunk_indices is not None else None return StreamMetadata(ids, sos, eos, lengths, chunk_indices) if isinstance(indices, slice): @@ -478,7 +420,7 @@ def index_batch_and_length(self, indices: torch.BoolTensor) -> "StreamMetadata": return self.__deepcopy__() if not keep_ids.all(): - ids = [id for i, id in enumerate(self.ids) if keep_ids[i]] + ids = tuple(id for i, id in enumerate(self.ids) if keep_ids[i]) sos = self.sos[keep_ids] eos = self.eos[keep_ids] lengths = self.lengths[keep_ids] @@ -596,7 +538,7 @@ def cat_batch(cls, metas: List["StreamMetadata"]) -> "StreamMetadata": if len(metas) == 1: return deepcopy(metas[0]) - ids = list(itertools.chain.from_iterable([s.ids for s in metas])) + ids = tuple(itertools.chain.from_iterable(s.ids for s in metas)) sos = torch.cat([s.sos for s in metas], dim=0) eos = torch.cat([s.eos for s in metas], dim=0) lengths = torch.cat([s.lengths for s in metas], dim=0) @@ -724,19 +666,19 @@ def __init__(self) -> None: def stream_metadata( - ids: Union[str, List[str]], - sos: Union[bool, List[bool], torch.BoolTensor], - eos: Union[bool, List[bool], torch.BoolTensor], - lengths: Union[int, List[int], torch.IntTensor], - chunk_indices: Optional[Union[int, List[int], torch.IntTensor]] = None, + ids: Union[str, Tuple[str]], + sos: Union[bool, Tuple[bool], torch.BoolTensor], + eos: Union[bool, Tuple[bool], torch.BoolTensor], + lengths: Union[int, Tuple[int], torch.IntTensor], + chunk_indices: Optional[Union[int, Tuple[int], torch.IntTensor]] = None, ) -> StreamMetadata: """Create a StreamMetadata object from the given arguments. Args: - ids (Union[str, List[str]]): The ids of the input tensors. + ids (Union[str, Tuple[str]]): The ids of the input tensors. sos (bool): Whether the input tensors are the first in a batch. eos (bool): Whether the input tensors are the last in a batch. - lengths (Union[int, List[int]]): The lengths of the input tensors. + lengths (Union[int, Tuple[int]]): The lengths of the input tensors. chunk_indices (int): The index of the chunk in the batch. num_chunks (Optional[int], optional): The number of chunks in the batch. Defaults to None. diff --git a/tests/test_tensor.py b/tests/test_tensor.py index f0a3410..353f029 100644 --- a/tests/test_tensor.py +++ b/tests/test_tensor.py @@ -25,7 +25,7 @@ def test_data_3d(): def test_meta_kwargs(): return dict( - ids=["first", "middle", "last"], + ids=("first", "middle", "last"), sos=[True, False, False], eos=[False, False, True], lengths=[3, 3, 2], @@ -107,7 +107,7 @@ def stream_tensor_bfld_fixture(): ) def test_instantiate_stream_tensor(data): """Test that we can instantiate a StreamTensor from different kinds of data.""" - meta = stream_metadata(ids=["a", "b"], sos=[True, False], eos=[False, True], lengths=[3, 3]) + meta = stream_metadata(ids=("a", "b"), sos=[True, False], eos=[False, True], lengths=[3, 3]) tensor = stream_tensor(data, meta, names=(BATCH, LENGTH)) assert isinstance(tensor, StreamTensor) @@ -294,7 +294,7 @@ class TestNarrow: def test_narrow_batch(self, stream_tensor_bfl_fixture): """Test `torch.narrow` on a StreamTensor when applied to batch, length, and feature dimensions.""" assert_kwargs = dict( - ids=["middle", "last"], + ids=("middle", "last"), lengths=[3, 2], sos=[False, False], eos=[False, True], @@ -313,7 +313,7 @@ def test_narrow_feature(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.narrow(dim=1, start=1, length=1) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().narrow(dim=1, start=1, length=1)) - assert s.meta.ids == ["first", "middle", "last"] + assert s.meta.ids == ("first", "middle", "last") assert torch.equal(s.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s.meta.lengths, torch.tensor([3, 3, 2])) @@ -323,7 +323,7 @@ def test_narrow_length(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.narrow(dim=2, start=1, length=2) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().narrow(dim=2, start=1, length=2)) - assert s.meta.ids == ["first", "middle", "last"] + assert s.meta.ids == ("first", "middle", "last") assert torch.equal(s.meta.sos, torch.tensor([False, False, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s.meta.lengths, torch.tensor([2, 2, 1])) @@ -370,7 +370,7 @@ def test_gather_feature(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.gather(dim=1, index=self.full_index) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().gather(dim=1, index=self.full_index)) - assert s.meta.ids == ["first", "middle", "last"] + assert s.meta.ids == ("first", "middle", "last") assert torch.equal(s.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s.meta.lengths, torch.tensor([3, 3, 2])) @@ -380,7 +380,7 @@ def test_gather_feature_truncated(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.gather(dim=1, index=self.truncated_index) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().gather(dim=1, index=self.truncated_index)) - assert s.meta.ids == ["first", "middle"] + assert s.meta.ids == ("first", "middle") assert torch.equal(s.meta.sos, torch.tensor([True, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False])) assert torch.equal(s.meta.lengths, torch.tensor([2, 2])) @@ -403,7 +403,7 @@ def test_take_along_feature(self, stream_tensor_bfl_fixture): assert torch.equal( s.tensor(), stream_tensor_bfl_fixture.tensor().take_along_dim(dim=1, indices=TestGather.full_index) ) - assert s.meta.ids == ["first", "middle", "last"] + assert s.meta.ids == ("first", "middle", "last") assert torch.equal(s.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s.meta.lengths, torch.tensor([3, 3, 2])) @@ -424,7 +424,7 @@ def test_select_batch(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.select(dim=0, index=1) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().select(dim=0, index=1)) - assert s.meta.ids == ["middle"] + assert s.meta.ids == ("middle",) assert torch.equal(s.meta.sos, torch.tensor([False])) assert torch.equal(s.meta.eos, torch.tensor([False])) assert torch.equal(s.meta.lengths, torch.tensor([3])) @@ -434,7 +434,7 @@ def test_select_feature(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.select(dim=1, index=1) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().select(dim=1, index=1)) - assert s.meta.ids == ["first", "middle", "last"] + assert s.meta.ids == ("first", "middle", "last") assert torch.equal(s.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s.meta.lengths, torch.tensor([3, 3, 2])) @@ -444,7 +444,7 @@ def test_select_length(self, stream_tensor_bfl_fixture): s = stream_tensor_bfl_fixture.select(dim=2, index=1) assert isinstance(s, StreamTensor) assert torch.equal(s.tensor(), stream_tensor_bfl_fixture.tensor().select(dim=2, index=1)) - assert s.meta.ids == ["first", "middle", "last"] + assert s.meta.ids == ("first", "middle", "last") assert torch.equal(s.meta.sos, torch.tensor([False, False, False])) assert torch.equal(s.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s.meta.lengths, torch.tensor([1, 1, 1])) @@ -458,7 +458,7 @@ def test_take_batch(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture.take(indices) assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor().take(indices)) - assert s1.meta.ids == ["first"] + assert s1.meta.ids == ("first",) assert torch.equal(s1.meta.sos, torch.tensor([True])) assert torch.equal(s1.meta.eos, torch.tensor([False])) assert torch.equal(s1.meta.lengths, torch.tensor([3])) @@ -469,7 +469,7 @@ def test_take_batch(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture.take(indices) assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor().take(indices)) - assert s2.meta.ids == ["first"] + assert s2.meta.ids == ("first",) assert torch.equal(s2.meta.sos, torch.tensor([False])) assert torch.equal(s2.meta.eos, torch.tensor([False])) assert torch.equal(s2.meta.lengths, torch.tensor([2])) @@ -481,7 +481,7 @@ def test_take_feature(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture.take(indices) assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor().take(indices)) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 3, 2])) @@ -493,7 +493,7 @@ def test_take_length(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture.take(indices) assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor().take(indices)) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, False])) assert torch.equal(s1.meta.lengths, torch.tensor([1, 1, 1])) @@ -504,7 +504,7 @@ def test_take_length(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture.take(indices) assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor().take(indices)) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, False])) assert torch.equal(s1.meta.lengths, torch.tensor([1, 1, 0])) @@ -516,7 +516,7 @@ def test_take_every_other(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture.take(indices) assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor().take(indices)) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 3, 2])) @@ -531,7 +531,7 @@ def test_index_select_batch(self, stream_tensor_bfl_fixture): torch.index_select, dim=0, index=torch.tensor([0, 2]), - ids=["first", "last"], + ids=("first", "last"), sos=torch.tensor([True, False]), eos=torch.tensor([False, True]), lengths=torch.tensor([3, 2]), @@ -608,7 +608,7 @@ def test_feature_indexing_integer(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[:, 0, :] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, 0, :]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 3, 2])) @@ -620,7 +620,7 @@ def test_batch_indexing_integer(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[0] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[0]) - assert s1.meta.ids == ["first"] # changed to only the first example + assert s1.meta.ids == ("first",) # changed to only the first example assert torch.equal(s1.meta.sos, torch.tensor([True])) assert torch.equal(s1.meta.eos, torch.tensor([False])) assert torch.equal(s1.meta.lengths, torch.tensor([3])) @@ -631,7 +631,7 @@ def test_batch_indexing_slice(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[1:] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[1:]) - assert s1.meta.ids == ["middle", "last"] + assert s1.meta.ids == ("middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 2])) @@ -641,7 +641,7 @@ def test_batch_indexing_tuple(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[(0,)] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[(0,)]) - assert s1.meta.ids == ["first"] + assert s1.meta.ids == ("first",) assert torch.equal(s1.meta.sos, torch.tensor([True])) assert torch.equal(s1.meta.eos, torch.tensor([False])) assert torch.equal(s1.meta.lengths, torch.tensor([3])) @@ -650,7 +650,7 @@ def test_batch_indexing_tuple(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[(0, 1)] assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[(0, 1)]) - assert s2.meta.ids == ["first"] + assert s2.meta.ids == ("first",) assert torch.equal(s2.meta.sos, torch.tensor([True])) assert torch.equal(s2.meta.eos, torch.tensor([False])) assert torch.equal(s2.meta.lengths, torch.tensor([3])) @@ -659,7 +659,7 @@ def test_batch_indexing_tuple(self, stream_tensor_bfl_fixture): s3 = stream_tensor_bfl_fixture[(0, 1, 2)] assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[(0, 1, 2)]) - assert s3.meta.ids == ["first"] + assert s3.meta.ids == ("first",) assert torch.equal(s3.meta.sos, torch.tensor([False])) assert torch.equal(s3.meta.eos, torch.tensor([False])) assert torch.equal(s3.meta.lengths, torch.tensor([1])) @@ -668,7 +668,7 @@ def test_batch_indexing_tuple(self, stream_tensor_bfl_fixture): s4 = stream_tensor_bfl_fixture[(0, 1, 0)] assert isinstance(s4, StreamTensor) assert torch.equal(s4.tensor(), stream_tensor_bfl_fixture.tensor()[(0, 1, 0)]) - assert s4.meta.ids == ["first"] + assert s4.meta.ids == ("first",) assert torch.equal(s4.meta.sos, torch.tensor([True])) assert torch.equal(s4.meta.eos, torch.tensor([False])) assert torch.equal(s4.meta.lengths, torch.tensor([1])) @@ -679,7 +679,7 @@ def test_batch_indexing_list(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[[1]] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[[1]]) - assert s1.meta.ids == ["middle"] + assert s1.meta.ids == ("middle",) assert torch.equal(s1.meta.sos, torch.tensor([False])) assert torch.equal(s1.meta.eos, torch.tensor([False])) assert torch.equal(s1.meta.lengths, torch.tensor([3])) @@ -688,7 +688,7 @@ def test_batch_indexing_list(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[[0, 2]] assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[[0, 2]]) - assert s2.meta.ids == ["first", "last"] + assert s2.meta.ids == ("first", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, True])) assert torch.equal(s2.meta.lengths, torch.tensor([3, 2])) @@ -699,7 +699,7 @@ def test_batch_indexing_booltensor(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[torch.tensor([False, True, True])] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[torch.tensor([False, True, True])]) - assert s1.meta.ids == ["middle", "last"] + assert s1.meta.ids == ("middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 2])) @@ -710,7 +710,7 @@ def test_batch_indexing_inttensor(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[torch.tensor([1, 2])] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[torch.tensor([1, 2])]) - assert s1.meta.ids == ["middle", "last"] + assert s1.meta.ids == ("middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 2])) @@ -724,7 +724,7 @@ def test_length_indexing_integer(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[:, :, 0] # first length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, 0]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s2.meta.lengths, torch.tensor([1, 1, 1])) # changed to 1 @@ -733,7 +733,7 @@ def test_length_indexing_integer(self, stream_tensor_bfl_fixture): s3 = stream_tensor_bfl_fixture[:, :, 1] # middle length index assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, 1]) - assert s3.meta.ids == ["first", "middle", "last"] + assert s3.meta.ids == ("first", "middle", "last") assert torch.equal(s3.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s3.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s3.meta.lengths, torch.tensor([1, 1, 1])) # changed to 1 @@ -742,7 +742,7 @@ def test_length_indexing_integer(self, stream_tensor_bfl_fixture): s4 = stream_tensor_bfl_fixture[:, :, -1] # last length index assert isinstance(s4, StreamTensor) assert torch.equal(s4.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, -1]) - assert s4.meta.ids == ["first", "middle", "last"] + assert s4.meta.ids == ("first", "middle", "last") assert torch.equal(s4.meta.sos, torch.tensor([False, False, False])) # change to False assert torch.equal(s4.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s4.meta.lengths, torch.tensor([1, 1, 0])) # changed to 1 and 0 @@ -758,7 +758,7 @@ def test_length_indexing_slice(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[:, :, 1:] # remove first length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, 1:]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s2.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s2.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all) @@ -767,7 +767,7 @@ def test_length_indexing_slice(self, stream_tensor_bfl_fixture): s3 = stream_tensor_bfl_fixture[:, :, :-1] # remove last length index assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, :-1]) - assert s3.meta.ids == ["first", "middle", "last"] + assert s3.meta.ids == ("first", "middle", "last") assert torch.equal(s3.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s3.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s3.meta.lengths, torch.tensor([2, 2, 2])) # minus 1 for all but "last" since it was padding @@ -776,7 +776,7 @@ def test_length_indexing_slice(self, stream_tensor_bfl_fixture): s4 = stream_tensor_bfl_fixture[:, :, 1:-1] # remove first and last length index assert isinstance(s4, StreamTensor) assert torch.equal(s4.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, 1:-1]) - assert s4.meta.ids == ["first", "middle", "last"] + assert s4.meta.ids == ("first", "middle", "last") assert torch.equal(s4.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s4.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s4.meta.lengths, torch.tensor([1, 1, 1])) # minus 2 for all but "last" since it was padding @@ -785,7 +785,7 @@ def test_length_indexing_slice(self, stream_tensor_bfl_fixture): s5 = stream_tensor_bfl_fixture[:, :, :-2] # remove two last length indices assert isinstance(s5, StreamTensor) assert torch.equal(s5.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, :-2]) - assert s5.meta.ids == ["first", "middle", "last"] + assert s5.meta.ids == ("first", "middle", "last") assert torch.equal(s5.meta.sos, torch.tensor([True, False, False])) # changed to False assert torch.equal(s5.meta.eos, torch.tensor([False, False, False])) assert torch.equal(s5.meta.lengths, torch.tensor([1, 1, 1])) # minus 2 for all but "last" since it was padding @@ -794,7 +794,7 @@ def test_length_indexing_slice(self, stream_tensor_bfl_fixture): s6 = stream_tensor_bfl_fixture[:, :, ::2] # remove every other length index from start to end assert isinstance(s6, StreamTensor) assert torch.equal(s6.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, ::2]) - assert s6.meta.ids == ["first", "middle", "last"] + assert s6.meta.ids == ("first", "middle", "last") assert torch.equal(s6.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s6.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s6.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -812,7 +812,7 @@ def test_length_indexing_tuple_list(self, stream_tensor_bfl_fixture, indices): s1 = stream_tensor_bfl_fixture[:, :, indices[0]] # remove first length index assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, indices[0]]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -821,7 +821,7 @@ def test_length_indexing_tuple_list(self, stream_tensor_bfl_fixture, indices): s2 = stream_tensor_bfl_fixture[:, :, indices[1]] # remove middle length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, indices[1]]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s2.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -830,7 +830,7 @@ def test_length_indexing_tuple_list(self, stream_tensor_bfl_fixture, indices): s3 = stream_tensor_bfl_fixture[:, :, indices[2]] # remove last length index assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, indices[2]]) - assert s3.meta.ids == ["first", "middle", "last"] + assert s3.meta.ids == ("first", "middle", "last") assert torch.equal(s3.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s3.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s3.meta.lengths, torch.tensor([2, 2, 2])) # minus 1 for all but "last" since was padding @@ -841,7 +841,7 @@ def test_length_indexing_list(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[:, :, [1, 2]] # remove first length index assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, [1, 2]]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -850,7 +850,7 @@ def test_length_indexing_list(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[:, :, [0, 2]] # remove middle length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, [0, 2]]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s2.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -859,7 +859,7 @@ def test_length_indexing_list(self, stream_tensor_bfl_fixture): s3 = stream_tensor_bfl_fixture[:, :, [0, 1]] # remove last length index assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, [0, 1]]) - assert s3.meta.ids == ["first", "middle", "last"] + assert s3.meta.ids == ("first", "middle", "last") assert torch.equal(s3.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s3.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s3.meta.lengths, torch.tensor([2, 2, 2])) # minus 1 for all but "last" since it was padding @@ -870,7 +870,7 @@ def test_length_indexing_1d_inttensor(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[:, :, torch.tensor([1, 2])] # remove first length index assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, torch.tensor([1, 2])]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -879,7 +879,7 @@ def test_length_indexing_1d_inttensor(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[:, :, torch.tensor([0, 2])] # remove middle length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, torch.tensor([0, 2])]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s2.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -888,7 +888,7 @@ def test_length_indexing_1d_inttensor(self, stream_tensor_bfl_fixture): s3 = stream_tensor_bfl_fixture[:, :, torch.tensor([0, 1])] # remove last length index assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, torch.tensor([0, 1])]) - assert s3.meta.ids == ["first", "middle", "last"] + assert s3.meta.ids == ("first", "middle", "last") assert torch.equal(s3.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s3.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s3.meta.lengths, torch.tensor([2, 2, 2])) # minus 1 for all but "last" since it was padding @@ -899,7 +899,7 @@ def test_length_indexing_1d_booltensor(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[:, :, torch.tensor([False, True, True])] # remove first length index assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, torch.tensor([False, True, True])]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -908,7 +908,7 @@ def test_length_indexing_1d_booltensor(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[:, :, torch.tensor([True, True, False])] # remove last length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, :, torch.tensor([True, True, False])]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s2.meta.lengths, torch.tensor([2, 2, 2])) # minus 1 for all but last since this was padding. @@ -920,7 +920,7 @@ def test_batch_and_feature_indexing_2d_booltensor(self, stream_tensor_bfl_fixtur s1 = stream_tensor_bfl_fixture[indices] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[indices]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 3, 2])) @@ -934,7 +934,7 @@ def test_length_and_feature_indexing_2d_booltensor(self, stream_tensor_bfl_fixtu s1 = stream_tensor_bfl_fixture[:, indices] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, indices]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 3, 2])) @@ -944,7 +944,7 @@ def test_length_and_feature_indexing_2d_booltensor(self, stream_tensor_bfl_fixtu s2 = stream_tensor_bfl_fixture[:, indices] assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[:, indices]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, False])) assert torch.equal(s2.meta.lengths, torch.tensor([1, 1, 1])) # changed to 1 @@ -994,7 +994,7 @@ def test_feature_indexing_2d_inttensor(self, stream_tensor_bfl_fixture): s1 = stream_tensor_bfl_fixture[:, indices] assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, indices]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([3, 3, 2])) @@ -1020,7 +1020,7 @@ def test_length_indexing_integer_multidimensional(self, stream_tensor_bfl_fixtur s1 = stream_tensor_bfl_fixture[:, 0, 0] # first length index and first feature index assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, 0, 0]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s1.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s1.meta.lengths, torch.tensor([1, 1, 1])) # changed to 1 @@ -1034,7 +1034,7 @@ def test_length_indexing_slice_multidimensional(self, stream_tensor_bfl_fixture) s1 = stream_tensor_bfl_fixture[:, 0, 1:] # remove first length index and first feature index assert isinstance(s1, StreamTensor) assert torch.equal(s1.tensor(), stream_tensor_bfl_fixture.tensor()[:, 0, 1:]) - assert s1.meta.ids == ["first", "middle", "last"] + assert s1.meta.ids == ("first", "middle", "last") assert torch.equal(s1.meta.sos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s1.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s1.meta.lengths, torch.tensor([2, 2, 1])) # minus 1 for all @@ -1048,7 +1048,7 @@ def test_batch_and_length_indexing_slice(self, stream_tensor_bfl_fixture): stream_tensor_bfl_fixture, torch.Tensor.__getitem__, (slice(None, -1), slice(None), slice(1, None)), # [:-1, :, 1:] - ids=["first", "middle"], + ids=("first", "middle"), sos=torch.tensor([False, False]), eos=torch.tensor([False, False]), lengths=torch.tensor([2, 2]), @@ -1060,7 +1060,7 @@ def test_indexing_ellipsis(self, stream_tensor_bfl_fixture): s1_1 = stream_tensor_bfl_fixture[0, ...] # keep only first batch example assert isinstance(s1_1, StreamTensor) assert torch.equal(s1_1.tensor(), stream_tensor_bfl_fixture.tensor()[0, ...]) - assert s1_1.meta.ids == ["first"] + assert s1_1.meta.ids == ("first",) assert torch.equal(s1_1.meta.sos, torch.tensor([True])) assert torch.equal(s1_1.meta.eos, torch.tensor([False])) assert torch.equal(s1_1.meta.lengths, torch.tensor([3])) @@ -1069,7 +1069,7 @@ def test_indexing_ellipsis(self, stream_tensor_bfl_fixture): s1_2 = stream_tensor_bfl_fixture[0, ..., :] # keep only first batch example assert isinstance(s1_2, StreamTensor) assert torch.equal(s1_2.tensor(), stream_tensor_bfl_fixture.tensor()[0, ..., :]) - assert s1_2.meta.ids == ["first"] + assert s1_2.meta.ids == ("first",) assert torch.equal(s1_2.meta.sos, torch.tensor([True])) assert torch.equal(s1_2.meta.eos, torch.tensor([False])) assert torch.equal(s1_2.meta.lengths, torch.tensor([3])) @@ -1078,7 +1078,7 @@ def test_indexing_ellipsis(self, stream_tensor_bfl_fixture): s1_3 = stream_tensor_bfl_fixture[0, :, ...] # keep only first batch example assert isinstance(s1_3, StreamTensor) assert torch.equal(s1_1.tensor(), stream_tensor_bfl_fixture.tensor()[0, :, ...]) - assert s1_3.meta.ids == ["first"] + assert s1_3.meta.ids == ("first",) assert torch.equal(s1_3.meta.sos, torch.tensor([True])) assert torch.equal(s1_3.meta.eos, torch.tensor([False])) assert torch.equal(s1_3.meta.lengths, torch.tensor([3])) @@ -1087,7 +1087,7 @@ def test_indexing_ellipsis(self, stream_tensor_bfl_fixture): s1_4 = stream_tensor_bfl_fixture[0, ..., ...] # keep only first batch example assert isinstance(s1_4, StreamTensor) assert torch.equal(s1_1.tensor(), stream_tensor_bfl_fixture.tensor()[0, ..., ...]) - assert s1_4.meta.ids == ["first"] + assert s1_4.meta.ids == ("first",) assert torch.equal(s1_4.meta.sos, torch.tensor([True])) assert torch.equal(s1_4.meta.eos, torch.tensor([False])) assert torch.equal(s1_4.meta.lengths, torch.tensor([3])) @@ -1096,7 +1096,7 @@ def test_indexing_ellipsis(self, stream_tensor_bfl_fixture): s2 = stream_tensor_bfl_fixture[..., 0] # keep only first length index assert isinstance(s2, StreamTensor) assert torch.equal(s2.tensor(), stream_tensor_bfl_fixture.tensor()[..., 0]) - assert s2.meta.ids == ["first", "middle", "last"] + assert s2.meta.ids == ("first", "middle", "last") assert torch.equal(s2.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s2.meta.eos, torch.tensor([False, False, False])) # changed to False assert torch.equal(s2.meta.lengths, torch.tensor([1, 1, 1])) # set to 1 @@ -1105,7 +1105,7 @@ def test_indexing_ellipsis(self, stream_tensor_bfl_fixture): s3 = stream_tensor_bfl_fixture[..., 0, ...] # keep only first feature dim assert isinstance(s3, StreamTensor) assert torch.equal(s3.tensor(), stream_tensor_bfl_fixture.tensor()[..., 0, ...]) - assert s3.meta.ids == ["first", "middle", "last"] + assert s3.meta.ids == ("first", "middle", "last") assert torch.equal(s3.meta.sos, torch.tensor([True, False, False])) assert torch.equal(s3.meta.eos, torch.tensor([False, False, True])) assert torch.equal(s3.meta.lengths, torch.tensor([3, 3, 2])) From 5e19c57bd88a98b072fca031b4936fbf1c321f28 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 23:45:13 +0200 Subject: [PATCH 21/36] Remove LazyInit tests --- tests/test_stream_metadata.py | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 tests/test_stream_metadata.py diff --git a/tests/test_stream_metadata.py b/tests/test_stream_metadata.py deleted file mode 100644 index ff6e314..0000000 --- a/tests/test_stream_metadata.py +++ /dev/null @@ -1,35 +0,0 @@ -from dreamstream.tensor import LazyInit, LazyProxy - - -class TestObject(): - def __init__(self, *args, **kwargs): - self.args = args - self.kwargs = kwargs - - -class LazyTestObject(LazyInit): - def __init__(self, *args, **kwargs): - self.args = args - self.kwargs = kwargs - - -class TestLazy(): - def test_lazy_proxy_laziness(self): - lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) - - assert lazy_proxy.__dict__["_cls"] is TestObject - assert lazy_proxy.__dict__["_args"] == (1, 2, 3) - assert lazy_proxy.__dict__["_kwargs"] == {'a': 1, 'b': 2, 'c': 3} - assert lazy_proxy.__dict__["_obj"] is None - - def test_lazy_proxy_initialization(self): - lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) - _ = lazy_proxy.args # trigger initialization - - assert isinstance(lazy_proxy.__dict__["_obj"], TestObject) - assert lazy_proxy.__dict__["_obj"].args == (1, 2, 3) - assert lazy_proxy.__dict__["_obj"].kwargs == {'a': 1, 'b': 2, 'c': 3} - - def test_lazy_init(self): - lazy_init = LazyTestObject(1, 2, 3, a=1, b=2, c=3) - assert isinstance(lazy_init, LazyProxy) From aaffc2b69cccd1f88dd633f8806633f03969f7d3 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 23:52:05 +0200 Subject: [PATCH 22/36] Add test of time saving from lazy initialisation --- dreamstream/utils/timing.py | 124 ++++++++++++++++++++++++++++++++++ tests/test_stream_metadata.py | 10 +++ 2 files changed, 134 insertions(+) create mode 100644 dreamstream/utils/timing.py diff --git a/dreamstream/utils/timing.py b/dreamstream/utils/timing.py new file mode 100644 index 0000000..d2b19c6 --- /dev/null +++ b/dreamstream/utils/timing.py @@ -0,0 +1,124 @@ +import warnings +import timeit as timeit_module + +from types import SimpleNamespace +from typing import Callable, Optional, Union + +import numpy as np +import rich + + +UNITS = {"ns": 1e-9, "µs": 1e-6, "ms": 1e-3, "s": 1.0} + + +def format_time(dt, unit=None, precision=4): + """Format a time in seconds by rescaling and appending appropriate unit + + The returned string will always have length at most 5 (precision) + 2 (unit) + 1 (space) = 7 + """ + if unit is not None: + scale = UNITS[unit] + else: + scales = [(scale, unit) for unit, scale in UNITS.items()] + scales.sort(reverse=True) + for scale, unit in scales: + if dt >= scale: + break + + return "%.*g%s" % (precision, dt / scale, unit) + + +def timeit( + statement: Union["str", Callable], + setup: str = "pass", + timer=timeit_module.default_timer, + globals: dict = None, + inner_duration: float = 0.2, + repeats: int = 10, + number: Optional[int] = None, + print_results: bool = False, + print_suffix: str = None, +): + r"""Time the execution of `statement` using the `timeit` package similar to the IPython magic `%timeit`. + + Example:: + + import random + + def a(): + return random.random() + random.random() + + timeit(a) + + >>> namespace(min=1.844983547925949e-07, + max=2.3509945720434188e-07, + mean=1.979972431436181e-07, + median=1.9188937079161407e-07, + std=1.4883481745944718e-08, + number=1000000, + repeats=10) + + Args: + statement (Union[str, Callable]): Statement to `exec` or a callable. + setup (str, optional): Any setup steps to perform before repeats. Defaults to "pass". + timer (optional): Timer to use. Defaults to timeit_module.default_timer. + globals (dict, optional): Namespace for timing. Defaults to None. + inner_duration (float, optional): Minimum number of seconds to use iterating over `statement`. Defaults to 0.2. + repeats (int, optional): Number of times to repeat the inner loop. + number (int, optional): Overrules the `inner_duration` argument and directly sets the `number` of inner iters. + + Returns: + SimpleNamespace: Namespace with min, max, mean, median, std, number and repeats attributes + """ + timer = timeit_module.Timer(statement, setup=setup, timer=timer, globals=globals) + + if number is None: + # Autorange twice to overcome overhead + number, time_taken = timer.autorange() + number, time_taken = timer.autorange() + + multiplier = inner_duration // time_taken + 1 + number = int(multiplier * number) + + # Time + timings = timer.repeat(repeat=repeats, number=number) + timings = np.array(timings) / number + + # Collect results + min = np.min(timings) + max = np.max(timings) + mean = np.mean(timings) + median = np.median(timings) + std = np.std(timings) + + results = SimpleNamespace(min=min, max=max, mean=mean, median=median, std=std, number=number, repeats=repeats) + + if max >= min * 4: + warnings.warn_explicit( + "The test results are likely unreliable. " + "The worst time (%s) was more than four times " + "slower than the best time (%s)." % (format_time(max), format_time(min)), + UserWarning, + "", + 0, + ) + + if print_results: + report_timings(results, suffix=str(statement) if print_suffix is None else print_suffix) + + return results + + +def report_timings(timings, prefix: Optional[str] = None, suffix: Optional[str] = None): + if prefix: + s = f"{prefix:15s} | " + else: + s = "" + + s += f"number={timings.number:>5d} | [{format_time(timings.min):>8s}, {format_time(timings.max):>8s}] | {format_time(timings.median):>8s} | {format_time(timings.mean):>8s} +- {format_time(timings.std):>8s}" + + if suffix: + s += f" | {suffix}" + + rich.print(s) + return s diff --git a/tests/test_stream_metadata.py b/tests/test_stream_metadata.py index ff6e314..41bbbc0 100644 --- a/tests/test_stream_metadata.py +++ b/tests/test_stream_metadata.py @@ -1,10 +1,14 @@ +import time + from dreamstream.tensor import LazyInit, LazyProxy +from dreamstream.utils.timing import timeit class TestObject(): def __init__(self, *args, **kwargs): self.args = args self.kwargs = kwargs + time.sleep(0.1) class LazyTestObject(LazyInit): @@ -33,3 +37,9 @@ def test_lazy_proxy_initialization(self): def test_lazy_init(self): lazy_init = LazyTestObject(1, 2, 3, a=1, b=2, c=3) assert isinstance(lazy_init, LazyProxy) + + def test_lazy_init_time_saved(self): + """Test that lazy initialization indeed saves time.""" + lazy_timing = timeit("LazyTestObject(1, 2, 3, a=1, b=2, c=3)", globals=globals()) + init_timing = timeit("TestObject(1, 2, 3, a=1, b=2, c=3)", globals=globals()) + assert lazy_timing.median < init_timing.median / 100 From ccb6c04208fc168c7deaf5c50c7453ec07b49975 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 23:57:54 +0200 Subject: [PATCH 23/36] Cleanup --- tests/test_stream_metadata.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_stream_metadata.py b/tests/test_stream_metadata.py index 41bbbc0..98b2fa9 100644 --- a/tests/test_stream_metadata.py +++ b/tests/test_stream_metadata.py @@ -6,6 +6,7 @@ class TestObject(): def __init__(self, *args, **kwargs): + super().__init__() self.args = args self.kwargs = kwargs time.sleep(0.1) @@ -13,6 +14,7 @@ def __init__(self, *args, **kwargs): class LazyTestObject(LazyInit): def __init__(self, *args, **kwargs): + super().__init__() self.args = args self.kwargs = kwargs @@ -20,7 +22,6 @@ def __init__(self, *args, **kwargs): class TestLazy(): def test_lazy_proxy_laziness(self): lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) - assert lazy_proxy.__dict__["_cls"] is TestObject assert lazy_proxy.__dict__["_args"] == (1, 2, 3) assert lazy_proxy.__dict__["_kwargs"] == {'a': 1, 'b': 2, 'c': 3} @@ -29,7 +30,6 @@ def test_lazy_proxy_laziness(self): def test_lazy_proxy_initialization(self): lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) _ = lazy_proxy.args # trigger initialization - assert isinstance(lazy_proxy.__dict__["_obj"], TestObject) assert lazy_proxy.__dict__["_obj"].args == (1, 2, 3) assert lazy_proxy.__dict__["_obj"].kwargs == {'a': 1, 'b': 2, 'c': 3} From 890955ec494e5562a181c236593664601c60ca65 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 27 Jun 2023 23:58:39 +0200 Subject: [PATCH 24/36] Rename test class to avoid pytest warning --- tests/test_stream_metadata.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test_stream_metadata.py b/tests/test_stream_metadata.py index 98b2fa9..0cf5cb9 100644 --- a/tests/test_stream_metadata.py +++ b/tests/test_stream_metadata.py @@ -4,7 +4,7 @@ from dreamstream.utils.timing import timeit -class TestObject(): +class DummyObject(): def __init__(self, *args, **kwargs): super().__init__() self.args = args @@ -12,7 +12,7 @@ def __init__(self, *args, **kwargs): time.sleep(0.1) -class LazyTestObject(LazyInit): +class LazyDummyObject(LazyInit): def __init__(self, *args, **kwargs): super().__init__() self.args = args @@ -21,25 +21,25 @@ def __init__(self, *args, **kwargs): class TestLazy(): def test_lazy_proxy_laziness(self): - lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) - assert lazy_proxy.__dict__["_cls"] is TestObject + lazy_proxy = LazyProxy(DummyObject, 1, 2, 3, a=1, b=2, c=3) + assert lazy_proxy.__dict__["_cls"] is DummyObject assert lazy_proxy.__dict__["_args"] == (1, 2, 3) assert lazy_proxy.__dict__["_kwargs"] == {'a': 1, 'b': 2, 'c': 3} assert lazy_proxy.__dict__["_obj"] is None def test_lazy_proxy_initialization(self): - lazy_proxy = LazyProxy(TestObject, 1, 2, 3, a=1, b=2, c=3) + lazy_proxy = LazyProxy(DummyObject, 1, 2, 3, a=1, b=2, c=3) _ = lazy_proxy.args # trigger initialization - assert isinstance(lazy_proxy.__dict__["_obj"], TestObject) + assert isinstance(lazy_proxy.__dict__["_obj"], DummyObject) assert lazy_proxy.__dict__["_obj"].args == (1, 2, 3) assert lazy_proxy.__dict__["_obj"].kwargs == {'a': 1, 'b': 2, 'c': 3} def test_lazy_init(self): - lazy_init = LazyTestObject(1, 2, 3, a=1, b=2, c=3) + lazy_init = LazyDummyObject(1, 2, 3, a=1, b=2, c=3) assert isinstance(lazy_init, LazyProxy) def test_lazy_init_time_saved(self): """Test that lazy initialization indeed saves time.""" - lazy_timing = timeit("LazyTestObject(1, 2, 3, a=1, b=2, c=3)", globals=globals()) - init_timing = timeit("TestObject(1, 2, 3, a=1, b=2, c=3)", globals=globals()) + lazy_timing = timeit("LazyDummyObject(1, 2, 3, a=1, b=2, c=3)", globals=globals()) + init_timing = timeit("DummyObject(1, 2, 3, a=1, b=2, c=3)", globals=globals()) assert lazy_timing.median < init_timing.median / 100 From 81941282d17709d26811d209eaec6ca529ffb063 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Wed, 28 Jun 2023 00:06:39 +0200 Subject: [PATCH 25/36] Fix warnings --- dreamstream/__init__.py | 1 + dreamstream/warnings.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dreamstream/__init__.py b/dreamstream/__init__.py index dacc0a9..34fad4a 100644 --- a/dreamstream/__init__.py +++ b/dreamstream/__init__.py @@ -2,3 +2,4 @@ import dreamstream.random # noqa: F401 from dreamstream.tensor import StreamMetadata, StreamTensor, as_stream_tensor, stream_tensor # noqa: F401 +from dreamstream.warnings import suppress_warnings diff --git a/dreamstream/warnings.py b/dreamstream/warnings.py index d860138..b629e72 100644 --- a/dreamstream/warnings.py +++ b/dreamstream/warnings.py @@ -20,7 +20,7 @@ class TorchStreamFallbackWarning(TorchStreamWarning): "open an issue on GitHub." ) -REASON_METADATA_AMBIGUOUS = "since combining the StreamMetadata of the inputs is ambiguous" +DESCRIPTION_METADATA_AMBIGUOUS = "since combining the StreamMetadata of the inputs is ambiguous" def fallback_operation_warning(operation: str, description: str = ""): From 74249c29fbd8c906e6a5c5266a2833022b068abc Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Wed, 28 Jun 2023 15:13:56 +0200 Subject: [PATCH 26/36] Add missing lazy classes back into tensor.py --- dreamstream/tensor.py | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index de26f02..f3464c8 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -32,6 +32,68 @@ # they are needed. This minimizes overhead computation on StreamTensors that end up as leaf nodes in the graph. +class LazyProxy(object): + """A proxy class that lazily instantiates an object of type cls with arguments *args and **kwargs.""" + + def __init__(self, cls, *args, **kwargs): + self.__dict__["_cls"] = cls + self.__dict__["_args"] = args + self.__dict__["_kwargs"] = kwargs + self.__dict__["_obj"] = None + + def __getattr__(self, name): + if self.__dict__["_obj"] is None: + self.__init_obj() + + return getattr(self.__dict__["_obj"], name) + + def __setattr__(self, name, value): + if self.__dict__["_obj"] is None: + self.__init_obj() + + setattr(self.__dict__["_obj"], name, value) + + def __getitem__(self, key): + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__getitem__(key) + + def __copy__(self): + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__copy__() + + def __eq__(self, other): + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__eq__(other) + + def __len__(self): + if self.__dict__["_obj"] is None: + self.__init_obj() + + return self.__dict__["_obj"].__len__() + + def __repr__(self): + if self.__dict__["_obj"] is None: + return f"LazyProxy({self.__dict__['_cls'].__name__}, {self.__dict__['_args']}, {self.__dict__['_kwargs']})" + return self.__dict__["_obj"].__repr__() + + def __init_obj(self): + self.__dict__["_obj"] = object.__new__(self.__dict__["_cls"]) + self.__dict__["_obj"].__init__(*self.__dict__["_args"], **self.__dict__["_kwargs"]) + + +class LazyInit(object): + """A class that lazily initializes its attributes.""" + + def __new__(cls, *args, **kwargs): + return LazyProxy(cls, *args, **kwargs) + + class StreamMetadata: """Metadata associated with a batch of streamed input tensors.""" From 3c89749c18096753dc41d683352beb9a8b19da42 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:21:09 +0200 Subject: [PATCH 27/36] Add test command --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 8230879..9c3e5c0 100644 --- a/README.md +++ b/README.md @@ -189,6 +189,11 @@ pip install -r requirements.txt ``` +## Run tests +```bash +pytest -sv --cov=dreamstream --cov-report=term -p no:pytest_wampy tests/test_tensor.py::TestUnbind +``` + ```python From ef5d0fb99391176d7abae55839d48c3249c6e177 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:21:13 +0200 Subject: [PATCH 28/36] Add onnx --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index ad61aa3..57e8aac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,6 +10,7 @@ nbstripout num2words numba numpy +onnx pandas pylint pytest From 6e6e01577e76a7d559bc727db431f4e42c2ed0e9 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:21:34 +0200 Subject: [PATCH 29/36] Fix formatting --- dreamstream/func_coverage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dreamstream/func_coverage.py b/dreamstream/func_coverage.py index 857b5fb..904e973 100644 --- a/dreamstream/func_coverage.py +++ b/dreamstream/func_coverage.py @@ -76,7 +76,7 @@ } DEFAULT_VALID_FUNCTIONS.update(DEFAULT_VALID_POITWISE_OPS) -# Functions that must be wrapped to avoid returning a StreamTensor (and may not ). +# Functions that must be wrapped to avoid returning a StreamTensor (and may not). DECOUPLE_FUNCTIONS = { torch.argmax, torch.argmin, From e3cd110e8719a5030905f6340d97f67436bac9fd Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:21:47 +0200 Subject: [PATCH 30/36] Add RNN methods --- dreamstream/overrides.py | 123 +++++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 12 deletions(-) diff --git a/dreamstream/overrides.py b/dreamstream/overrides.py index 0f6d8e1..c0f2fae 100644 --- a/dreamstream/overrides.py +++ b/dreamstream/overrides.py @@ -1,6 +1,6 @@ import functools from copy import deepcopy -from typing import Any, Callable, NamedTuple, Optional, List, Sequence, Tuple, Union +from typing import Any, Callable, Dict, NamedTuple, Optional, List, Sequence, Tuple, Union from torch.types import Number import numpy as np @@ -107,13 +107,13 @@ def stack(tensors: List[Union[StreamTensor, Tensor]], dim=0, *, out=None): names = names[:dim] + (None,) + names[dim:] return StreamTensor(tensor.rename_(*names), metas[0]) - # If not all StreamTensors have the same metas, then we can only stack them if + # If not all StreamTensors have the same metas, then we can only stack them if # 1, They all have exactly one id # 2. All StreamTensors have different ids. # 3. All tensors are StreamTensors. if not all(isinstance(t, StreamTensor) for t in tensors): raise ValueError("Cannot stack StreamTensors with different stream states together with torch.Tensors.") - + if not all(len(t.meta.ids) == 1 for t in tensors): raise ValueError("Can only stack StreamTensors with different ids together when they each have one id.") @@ -192,7 +192,6 @@ def unbind(tensor: StreamTensor, dim=0) -> List[StreamTensor]: if tensor.names[dim] == BATCH: states = meta.unbind_batch() tensors = tensor.unbind(dim=dim) - assert len(tensors) == len(states) tensors = [StreamTensor(t, meta) for t, meta in zip(tensors, states)] else: tensors = tensor.unbind(dim=dim) @@ -761,9 +760,9 @@ def index_select(input: StreamTensor, dim: int, index: Tensor, *, out: Optional[ tensor, meta, names = input.decouple() out = torch.index_select(tensor, dim, index, out=out) - if dim == names.index(BATCH): + if BATCH in names and dim == names.index(BATCH): meta = meta[index] - elif dim == names.index(LENGTH): + elif LENGTH in names and dim == names.index(LENGTH): meta = meta[:, index] out.rename_(*names) @@ -967,14 +966,114 @@ def unqsqueeze(input: StreamTensor, dim: int) -> StreamTensor: # X @implements(torch.permute) - -# @implements(torch.Tensor.__getstate__) -# def __getstate__(self): -# return self.metadata - - @implements(torch.Tensor.__reduce_ex__) def __reduce_ex__(self: StreamTensor, proto): print("OHI!") self.rename_(None) return torch.Tensor.__reduce_ex__(self, proto) + + +@implements(torch._VF._pack_padded_sequence) +def _pack_padded_sequence( + input: StreamTensor, + lengths: Tensor, + batch_first: bool = False, +) -> torch.nn.utils.rnn.PackedSequence: + """Decouple the StreamTensor input and remove the batch dimension before calling the original function.""" + tensor, meta, names = input.decouple() + data, batch_sizes = torch._VF._pack_padded_sequence(tensor, lengths, batch_first=batch_first) + names = names[1:] if batch_first else names[0] + names[2:] + data = StreamTensor(data, meta) + data.rename_(*names) + return data, batch_sizes + + +@implements(torch._VF._pad_packed_sequence) +def _pad_packed_sequence( + input_data: StreamTensor, + batch_sizes: torch.Tensor, + batch_first: bool = False, + padding_value: float = 0.0, + total_length: Optional[int] = None, +) -> Tuple[StreamTensor, Tensor]: + """Decouple the StreamTensor input before calling the original function then add back batch dimension and names.""" + # import IPython + # IPython.embed(using=False, header="pad_packed_sequence") + tensor, meta, names = input_data.decouple() + tensor, lengths = torch._VF._pad_packed_sequence(tensor, batch_sizes, batch_first, padding_value, total_length) + if BATCH in names: + names = (None,) + names if batch_first else names[0] + (None,) + names[1:] + else: + names = (BATCH,) + names if batch_first else names[0] + (BATCH,) + names[1:] + tensor.rename_(*names) + return StreamTensor(tensor, meta), lengths + + +@implements(torch._VF.rnn_tanh) +def rnn_tanh( + input: StreamTensor, + batch_sizes: Optional[torch.Tensor], + hx: torch.Tensor, + weights: torch.Tensor, + bias: torch.Tensor, + num_layers: int, + dropout: float, + training: bool, + bidirectional: bool, +) -> Tuple[StreamTensor, torch.Tensor]: + return rnn(input, batch_sizes, hx, weights, bias, num_layers, dropout, training, bidirectional, torch._VF.rnn_tanh) + + +@implements(torch._VF.rnn_relu) +def rnn_relu( + input: StreamTensor, + batch_sizes: Optional[torch.Tensor], + hx: torch.Tensor, + weights: torch.Tensor, + bias: torch.Tensor, + num_layers: int, + dropout: float, + training: bool, + bidirectional: bool, +) -> Tuple[StreamTensor, torch.Tensor]: + return rnn(input, batch_sizes, hx, weights, bias, num_layers, dropout, training, bidirectional, torch._VF.rnn_relu) + +# if batch_sizes is None: +# if self.mode == 'RNN_TANH': +# result = _VF.rnn_tanh(input, hx, self._flat_weights, self.bias, self.num_layers, +# self.dropout, self.training, self.bidirectional, +# self.batch_first) +# else: +# result = _VF.rnn_relu(input, hx, self._flat_weights, self.bias, self.num_layers, +# self.dropout, self.training, self.bidirectional, +# self.batch_first) +# else: +# if self.mode == 'RNN_TANH': +# result = _VF.rnn_tanh(input, batch_sizes, hx, self._flat_weights, self.bias, +# self.num_layers, self.dropout, self.training, +# self.bidirectional) +# else: +# result = _VF.rnn_relu(input, batch_sizes, hx, self._flat_weights, self.bias, +# self.num_layers, self.dropout, self.training, +# self.bidirectional) + +def rnn( + input: StreamTensor, + batch_sizes: Optional[torch.Tensor], + hx: torch.Tensor, + weights: torch.Tensor, + bias: torch.Tensor, + num_layers: int, + dropout: float, + training: bool, + bidirectional: bool, + method: Union[torch._VF.rnn_tanh, torch._VF.rnn_relu], +) -> Tuple[StreamTensor, StreamTensor]: + input, meta, names = input.decouple() + if isinstance(hx, StreamTensor): + hx, hx_meta, hx_names = hx.decouple() + + output, hx = method(input, batch_sizes, hx, weights, bias, num_layers, dropout, training, bidirectional) + + output = StreamTensor(output, meta).rename_(*names) + return output, hx From f4b6d87fb853b4f81abf2897f334d41196ed861a Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:22:05 +0200 Subject: [PATCH 31/36] Fix chunk indices --- dreamstream/tensor.py | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/dreamstream/tensor.py b/dreamstream/tensor.py index f3464c8..c8911ec 100644 --- a/dreamstream/tensor.py +++ b/dreamstream/tensor.py @@ -1,7 +1,7 @@ import itertools from copy import deepcopy -from typing import Any, Callable, List, Optional, Tuple, Union, Mapping, Sequence +from typing import Any, Callable, List, Optional, Tuple, Union, Mapping, Sequence, Dict import torch import numpy as np @@ -105,6 +105,7 @@ class StreamMetadata: "_chunk_indices", "_temp_buffer", "_temp_names", + "_temp_input_was_packed", "_min_length", "_max_length", "_lengths_updated", @@ -168,6 +169,7 @@ def __init__( self._temp_buffer = None self._temp_names = None + self._temp_input_was_packed = None self._min_length = None self._max_length = None @@ -638,6 +640,8 @@ def cat_length(cls, metas: List["StreamMetadata"]) -> "StreamMetadata": lengths = sum([s.lengths for s in metas]) if all(s.chunk_indices is not None for s in metas): chunk_indices = metas[-1].chunk_indices.clone() # TODO (JDH): This assumes the right-most chunk is the last + else: + chunk_indices = None return cls(ids, sos, eos, lengths, chunk_indices) def split(self, split_size_or_sections: Union[int, List[int]], dim: str) -> List["StreamMetadata"]: @@ -673,7 +677,7 @@ def split_batch(self, split_size_or_sections: Union[int, List[int]]) -> List["St if self.chunk_indices is not None: split_chunk_indices = self.chunk_indices.split(split_size_or_sections) else: - split_chunk_indices = [None] * split_size_or_sections + split_chunk_indices = [None] * len(split_ids) args_iter = zip(split_ids, split_sos, split_eos, split_lengths, split_chunk_indices) return [StreamMetadata(*args) for args in args_iter] @@ -790,7 +794,7 @@ def __torch_function__(cls, func: Callable, types: List[torch.Tensor], args=(), """ if kwargs is None: kwargs = dict() - + if func in VALID_FUNCTIONS: return super().__torch_function__(func, types, args, {}) @@ -837,6 +841,18 @@ def default_valid(cls, func, types, args, kwargs): return out + @property + def real(self): + return torch.real(self) + + @property + def imag(self): + return torch.imag(self) + + @property + def T(self): + return self.permute(*reversed(range(self.ndim))) + @property def has_batch_dim(self) -> bool: return BATCH in self.names @@ -853,18 +869,6 @@ def batch_dim(self) -> int: def length_dim(self) -> int: return self.names.index(LENGTH) - @property - def real(self): - return torch.real(self) - - @property - def imag(self): - return torch.imag(self) - - @property - def T(self): - return self.permute(*reversed(range(self.ndim))) - def is_batch_dim(self, dim: int) -> bool: return self.names[dim] == BATCH @@ -1029,8 +1033,8 @@ def recouple(func, *args, _tensor_type=StreamTensor, **kwargs): if not (all(m == meta_list[0] for m in meta_list[1:]) and all(n == names_list[0] for n in names_list[1:])): raise RuntimeError("StreamTensor arguments must have the same metadata and names.") out = decouple(func, *args, _tensor_type=_tensor_type, **kwargs) - out.rename_(*names_list[0]) - return _tensor_type(out, meta_list[0]) + out = _tensor_type(out, meta_list[0]).rename_(*names_list[0]) + return out def inplace_recouple(func, tensor, *args, _tensor_type=StreamTensor, **kwargs): From f84199d3229e5db644e4d617ce27603af720e5f7 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:22:19 +0200 Subject: [PATCH 32/36] Add append to list option --- dreamstream/data/data_objects.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/dreamstream/data/data_objects.py b/dreamstream/data/data_objects.py index 8f574b2..4509199 100644 --- a/dreamstream/data/data_objects.py +++ b/dreamstream/data/data_objects.py @@ -100,8 +100,11 @@ def num_chunks(self): class OutputCollector(dict): - def __init__(self, *stream_tensor: StreamTensor): + def __init__(self, *stream_tensor: StreamTensor, collection: str = "cat"): super().__init__() + + update_unaries = dict(cat=self._update_unary_tensor_cat, append=self._update_unary_list_append) + self._update_unary = update_unaries[collection] self.closed_entries = set() self.update(*stream_tensor) @@ -115,7 +118,7 @@ def update(self, *stream_tensors: Tuple[StreamTensor]): assert t.meta.size() == 1, "The tensor has no batch dimension, but metadata has multiple elements." self._update_unary(t) - def _update_unary(self, stream_tensor: StreamTensor): + def _update_unary_tensor_cat(self, stream_tensor: StreamTensor): _id = stream_tensor.meta.ids[0] if _id in self.closed_entries: @@ -134,3 +137,22 @@ def _update_unary(self, stream_tensor: StreamTensor): raise ValueError(f"Tried to start a new id `{_id}` but the received chunk was not the first chunk.") self[_id] = stream_tensor + + def _update_unary_list_append(self, stream_tensor: StreamTensor): + _id = stream_tensor.meta.ids[0] + + if _id in self.closed_entries: + raise ValueError(f"The entry for {_id} has already been closed.") + if stream_tensor.meta.eos.item(): + self.closed_entries.add(_id) + + if _id in self: + if stream_tensor.meta.sos.item(): + raise ValueError(f"Tried to collect a chunk on a known id {_id} but got a chunk claiming to be first.") + + self[_id].append(stream_tensor) + else: + if not stream_tensor.meta.sos.item(): + raise ValueError(f"Tried to start a new id `{_id}` but the received chunk was not the first chunk.") + + self[_id] = [stream_tensor] From d35f8daa2fcc92d115550454edd97551214e31db Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:22:30 +0200 Subject: [PATCH 33/36] Add a few type hints --- dreamstream/patches/conv.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dreamstream/patches/conv.py b/dreamstream/patches/conv.py index bd49218..06e04c1 100644 --- a/dreamstream/patches/conv.py +++ b/dreamstream/patches/conv.py @@ -1,3 +1,5 @@ +from typing import Tuple, Dict + import torch from dreamstream.tensor import StreamTensor @@ -10,7 +12,7 @@ # TODO (LB): Add support for transposed convolutions. -def conv_1d_pre_hook(self, inputs): +def conv_1d_pre_hook(self, inputs: Tuple[torch.Tensor]) -> Tuple[torch.Tensor]: is_stream_tensor = isinstance(inputs[0], StreamTensor) if not self.streaming: if is_stream_tensor: @@ -42,7 +44,7 @@ def conv_1d_pre_hook(self, inputs): return input -def conv_1d_post_hook(self, inputs, outputs): +def conv_1d_post_hook(self, inputs: Tuple[torch.Tensor], outputs: torch.Tensor): if not self.streaming: return outputs @@ -60,10 +62,10 @@ def patch_conv_1d(module) -> torch.nn.Module: add_streaming_modes(module) # Add a dictionary for storing input buffers. - module.stream_buffer = {} + module.stream_buffer: Dict[str, torch.Tensor] = {} # Add module-specific attributes. - module.kernel_width = module.kernel_size[0] + (module.kernel_size[0] - 1) * (module.dilation[0] - 1) + module.kernel_width: int = module.kernel_size[0] + (module.kernel_size[0] - 1) * (module.dilation[0] - 1) # Register pre_hook and post_hook. module.register_forward_pre_hook(conv_1d_pre_hook) From 52dae47e8fa234dd4f217c716569624130d2cecf Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:23:08 +0200 Subject: [PATCH 34/36] Add partially working RNN --- dreamstream/patches/rnn.py | 275 ++++++++++++++++++++++++++----------- tests/__init__.py | 0 tests/conftest.py | 100 +++++++++++--- tests/patches/test_rnn.py | 134 +++++++++++++----- 4 files changed, 374 insertions(+), 135 deletions(-) create mode 100644 tests/__init__.py diff --git a/dreamstream/patches/rnn.py b/dreamstream/patches/rnn.py index 7679a07..c8c361a 100644 --- a/dreamstream/patches/rnn.py +++ b/dreamstream/patches/rnn.py @@ -1,9 +1,14 @@ +import collections +import logging + from typing import Any, List, Optional, Tuple, Union + import torch from dreamstream.tensor import StreamTensor from dreamstream.patches.modes import add_streaming_modes from dreamstream.nn.utils import pad_stream_tensor +from dreamstream.utils.flags import BATCH # TODO (JDH): How do we deal with PackedSequence? @@ -11,6 +16,9 @@ # TODO (JDH): Deal with non-batched inputs and hidden states (note that when input is batched so must be the hidden state). +LOGGER = logging.getLogger(__file__) + + def get_tensor_and_state( inputs: Union[Tuple[torch.Tensor], Tuple[torch.Tensor, Optional[torch.Tensor]]] ) -> Tuple[torch.Tensor, Optional[torch.Tensor]]: @@ -26,84 +34,182 @@ class StateStore(dict): def __init__(self, *args, batch_dim: int, **kwargs): self.batch_dim = batch_dim super().__init__(*args, **kwargs) - self.batch_keys = set(k for k in self.keys() if isinstance(k, tuple)) - def __contains__(self, keys: Union[str, Tuple[str]]): - # Single key and batch key matching. - if keys in self.__dict__: + self.individual_keys = set() + self.batch_keys = set() + for k in self.keys(): + if isinstance(k, tuple): + self.batch_keys.add(k) + else: + self.individual_keys.add(k) + + def get_batch_key(self, keys: Union[Any, Tuple[Any]]): + return keys if isinstance(keys, tuple) else (keys,) + + def __contains__(self, keys: Union[Any, Tuple[Any]]): + # Return quickly if there is an non-fragmented individual or batch key match. + if keys in self.keys(): # or not isinstance(keys, tuple) and len(keys) == 1: return True - - # Find individual key matches allowing some to be part of batch keys. - # Return True if every key is found. - batch_key = tuple(keys) - found_keys = 0 - for k in batch_key: - for bk in self.batch_keys: - if k in bk: - found_keys += 1 - return found_keys == len(batch_key) + # If no batch keys exist, then no fragmented matches will be found. + if not self.batch_keys: + return False - def __getitem__(self, keys: Union[str, Tuple[str]]) -> torch.Tensor: - # Single key and batch key matching. - try: + # Find individual key matches allowing some to be part of batch keys. + return self.__contains_fragmented__(keys) + + def __contains_fragmented__(self, keys: Union[Any, Tuple[Any]]): + """Check if keys exist in the StateStore in a fragmented way (i.e. split across batched and individual keys).""" + batch_key = self.get_batch_key(keys) + found_ids = 0 + for k in batch_key: + if k in self.individual_keys: + found_ids += 1 + else: + for bk in self.batch_keys: + if k in bk: + found_ids += 1 + + return found_ids == len(batch_key) + + # def __contains_fragmented__(self, keys: Union[Any, Tuple[Any]]): + # """Check if keys exist in the StateStore in a fragmented way (i.e. split across batched and individual keys).""" + # batch_key = self.get_batch_key(keys) + # individual_finds = 0 + # sub_batch_finds = 0 + # for k in batch_key: + # if k in self.individual_keys: + # individual_finds += 1 + # else: + # for bk in self.batch_keys: + # if k in bk: + # sub_batch_finds += 1 + + # return individual_finds > 0 and sub_batch_finds > 0 and individual_finds + sub_batch_finds == len(batch_key) + + def __getitem__(self, keys: Union[Any, Tuple[Any]]) -> torch.Tensor: + print(f"__getitem__: {keys}") + # Return quickly if there is an non-fragmented individual or batch key match. + if keys in self.keys(): + print(f"Pulling direct match:\n{super().__getitem__(keys)}") return super().__getitem__(keys) - except KeyError: - pass + # if not isinstance(keys, tuple) and len(keys) == 1: + # return super().__getitem__(keys[0]) # Find individual key matches allowing some to be part of batch keys. Returns KeyError if any key is not found. - batch_key = tuple(keys) + batch_key = (keys,) if isinstance(keys, str) else keys vals = [] for k in batch_key: - if k in self.__dict__: - vals.append(super().__getitem__(k)) + if k in self.keys(): + tensor = super().__getitem__(k) + print(f"Pulling individual:\n{tensor}") + vals.append(tensor) else: for bk in self.batch_keys: if k in bk: tensor = super().__getitem__(bk) - sample = torch.select(tensor, dim=self.batch_dim, index=bk.index(k)) + print(f"Pulling batch:\n{tensor}") + sample = torch.select(tensor, dim=self.batch_dim, index=bk.index(k)).unsqueeze(self.batch_dim) # if isinstance(tensor, StreamTensor) and tensor.names[dim] != BATCH: # sample = sample.align_to(*tensor.names) vals.append(sample) if len(vals) != len(batch_key): - found_keys = tuple(k for k in batch_key if k in self.__dict__ or any(k in bk for bk in self.batch_keys)) + found_keys = tuple(k for k in batch_key if k in self.keys() or any(k in bk for bk in self.batch_keys)) missing_keys = tuple(k for k in batch_key if k not in found_keys) msg = f"Could not find keys {missing_keys}." if found_keys: msg += f" Found keys {found_keys}." raise KeyError(msg) - return torch.stack(vals, dim=self.batch_dim).rename(*tensor.names) + return torch.cat(vals, dim=self.batch_dim).rename(*tensor.names) + + def __setitem__(self, key: Union[Any, Tuple[Any]], value: torch.Tensor): + print(f"__setitem__: {key},\n{value}") + if self.__contains_fragmented__(key): + # We must delete the fragmented locations to make sure we correctly overwrite the state. + # TODO (JDH): Implement this + self.__deltitem_fragmented__(key) - def __setitem__(self, key: Union[str, Tuple[str]], value: torch.Tensor): super().__setitem__(key, value) if isinstance(key, tuple): self.batch_keys.add(key) + else: + self.individual_keys.add(key) def __delitem__(self, keys): - import IPython - IPython.embed(using=False, header="StateStore.__delitem__") - # Single key and batch key matching. - if keys in self.__dict__: - del self.__dict__[keys] + # Delete quickly if there is an non-fragmented individual or batch key match. + print(f"__delitem__: {keys}") + if keys in self.keys(): + super().__delitem__(keys) + if isinstance(keys, tuple): + self.batch_keys.remove(keys) + else: + self.individual_keys.remove(keys) + return None - - # Find individual key matches allowing some to be part of batch keys. - # Return True if every key is found. - batch_key = tuple(keys) - found_keys = 0 + + self.__deltitem_fragmented__(keys) + + def __deltitem_fragmented__(self, keys: Union[Any, Tuple[Any]]): + # print(f"{self.individual_keys=}") + # print(f"{self.batch_keys=}") + # print(f"{keys=}") + print(f"__delitem_fragmented__: {keys}") + batch_key = self.get_batch_key(keys) + individual_keys_to_delete = set() + keys_to_delete_in_batch_keys = collections.defaultdict(set) for k in batch_key: - for bk in self.batch_keys: - if k in bk: - found_keys += 1 + if k in self.individual_keys: + individual_keys_to_delete.add(k) + else: + for bk in self.batch_keys: + if k in bk: + keys_to_delete_in_batch_keys[bk].add(k) + + self.individual_keys = self.individual_keys - individual_keys_to_delete + for key_to_delete in individual_keys_to_delete: + super().__delitem__(key_to_delete) + + for bk, keys_to_delete in keys_to_delete_in_batch_keys.items(): + self.batch_keys.remove(bk) + if len(keys_to_delete) == len(bk): + # Delete entire batch key + super().__delitem__(bk) + else: + # Delete individual keys in the batch key also indexing the tensor. + # We assume that since we are deleting part of batch key, then the kept subbatch keys should be simply + # stored as individual keys. + tensor = super().__getitem__(bk) + # import IPython + # IPython.embed(using=False) + keys_to_keep = tuple(k for k in bk if k not in keys_to_delete) + tensors_to_keep = [t for k, t in zip(bk, tensor.unbind(self.batch_dim)) if k in keys_to_keep] + for k, tensor in zip(keys_to_keep, tensors_to_keep): + super().__setitem__(k, tensor.unsqueeze(self.batch_dim)) + + self.individual_keys = self.individual_keys.union(keys_to_keep) + super().__delitem__(bk) + + return None + + +class DefaultStateStore(StateStore): + def __init__(self, *args, batch_dim: int, default_state: torch.Tensor, **kwargs): + super().__init__(*args, batch_dim=batch_dim, **kwargs) + + def __getitem__(self, keys: Union[Any, Tuple[Any]]): + raise NotImplementedError() - return found_keys == len(batch_key) +StreamTensorOrPackedSequence = Union[StreamTensor, torch.nn.utils.rnn.PackedSequence] -def rnn_pre_hook(self, inputs): + +def rnn_pre_hook( + self, inputs: Union[StreamTensorOrPackedSequence, Tuple[StreamTensorOrPackedSequence, Optional[torch.Tensor]]] +): """ - + Cases: - Given state: 1. None @@ -135,7 +241,7 @@ def rnn_pre_hook(self, inputs): inputs (Union[torch.Tensor, Tuple[torch.Tensor, Optional[torch.Tensor]]]): Inputs to `self.forward`. Raises: - RuntimeError: If input is a StreamTensor and the module is not in online mode, or if the input is not a + RuntimeError: If input is a StreamTensor and the module is not in online mode, or if the input is not a StreamTensor but the module is in online mode. Returns: @@ -143,7 +249,8 @@ def rnn_pre_hook(self, inputs): """ x, state = get_tensor_and_state(inputs) - input_is_stream_tensor = isinstance(x, StreamTensor) + input_is_packed = isinstance(x, torch.nn.utils.rnn.PackedSequence) + input_is_stream_tensor = isinstance(x.data, StreamTensor) if input_is_packed else isinstance(x, StreamTensor) if not self.streaming: state_is_stream_tensor = isinstance(state, StreamTensor) if state is not None else False if input_is_stream_tensor or state_is_stream_tensor: @@ -153,42 +260,55 @@ def rnn_pre_hook(self, inputs): if not input_is_stream_tensor: raise RuntimeError("The input is expected to be StreamTensor when in online mode.") - # import IPython - # IPython.embed(using=False) - - # TODO (JDH): Deal with initial hidden state here. - ids_without_state = [(i, _id) for i, _id in enumerate(x.meta.ids) if _id not in self.hidden_state_store] - if any(ids_without_state): - if len(ids_without_state) == len(x.meta.ids) and state is None: - # No ids have state and no custom state is given. - state = None - elif len(ids_without_state) == len(x.meta.ids) and state is not None: + # Make the input a PackedSequence. TODO (JDH): Don't do this if input is a non-padded batch. + if input_is_packed: + ids = x.data.meta.ids + else: + # Pack the sequence and unsort the ids to either i) match the given `state` or ii) return the `state` from the + # `hidden_state_store` in the unsorted order. This will be sorted with `x.sorted_indices` inside the recurrent + # module's `forward` method. + x = torch.nn.utils.rnn.pack_padded_sequence(x, x.meta.lengths, batch_first=self.batch_first, enforce_sorted=False) + ids = tuple(x.data.meta.ids[i] for i in x.unsorted_indices) + + x.data.meta._temp_input_was_packed = input_is_packed + + if isinstance(state, StreamTensor): + state = state.tensor() + + batch_size = len(ids) + all_ids_in_state = ids in self.hidden_state_store + if not all_ids_in_state: + ids_without_state = tuple((i, _id) for i, _id in enumerate(ids) if _id not in self.hidden_state_store) + if len(ids_without_state) == batch_size and state is not None: # No ids have state but a custom state is given. - default_state = torch.zeros(self.num_layers, x.size(0), self.hidden_size, device=x.device) - state = default_state - elif len(ids_without_state) < len(x.meta.ids) and state is None: + # Use the custom state for all examples. + pass + elif len(ids_without_state) == batch_size and state is None: + # No ids have state and no custom state is given. + # Use the module-native default state by passing None state. + state = torch.zeros(self.num_layers, batch_size, self.hidden_size, device=x.data.device, dtype=x.data.dtype) + elif len(ids_without_state) < batch_size and state is None: # Some ids have state but no custom state is given. - for i, _id in ids_without_state: - self.hidden_state_store[_id] = torch.zeros(self.num_layers, 1, self.hidden_size, device=x.device) - state = self.hidden_state_store[x.meta.ids] + # Write module-native default state into the StateStore for ids without state and gather contiguous state. + default_state = torch.zeros(self.num_layers, len(ids_without_state), self.hidden_size, device=x.data.device, dtype=x.data.dtype) + ids_without_state = tuple(_id for i, _id in ids_without_state) + self.hidden_state_store[ids_without_state] = default_state + state = self.hidden_state_store[ids] else: - # Some ids have state but a custom state is given too. + # Some ids have state but a state is given too. + # Write custom state into StateStore for ids with out state and gather contiguous state. # TODO (JDH): Speed this up by using torch.select_scatter or similar directly on the given state. for i, _id in ids_without_state: self.hidden_state_store[_id] = state[:, i, :].unsqueeze(1) - state = self.hidden_state_store[x.meta.ids] + state = self.hidden_state_store[ids] # # Write default_state into the state tensor at the batch ids that do not have state. # index = torch.as_tensor(ids_without_state, device=x.device) # dim = 0 if self.batch_first else 1 # torch.select_scatter(state, default_state, dim=dim, index=index) else: # All ids have state. Return the state. - state = self.hidden_state_store[x.meta.ids] + state = self.hidden_state_store[ids] - x.meta._temp_names = x.names - x = x.rename(None) - if state is not None: - state = state.rename(None) return x, state @@ -196,28 +316,29 @@ def rnn_post_hook(self, inputs, outputs): if not self.streaming: return outputs + print("post hook") input, in_state = get_tensor_and_state(inputs) output, out_state = get_tensor_and_state(outputs) + + meta = input.meta if isinstance(input, StreamTensor) else input.data.meta + if not meta._temp_input_was_packed: + output.data.meta = input.data.meta + output, lengths = torch.nn.utils.rnn.pad_packed_sequence(output, batch_first=self.batch_first) + meta = output.meta # Ensure out_state is a proper StreamTensor. - # TODO (JDH): Not sure if we want to propagate the StreamTensor onto states - # out_state = StreamTensor(out_state, meta=input.meta.clone()) - # out_state.meta.lengths = torch.ones_like(out_state.meta.lengths) - # out_state.rename_(*("num_layers", input.meta._temp_names[0], input.meta._temp_names[-1])) if isinstance(out_state, StreamTensor): out_state = out_state.tensor() # Store hidden states for this batch - self.hidden_state_store[input.meta.ids] = out_state + self.hidden_state_store[meta.ids] = out_state # Delete hidden states of ending files. - ending_ids = tuple(_id for _id, eos in zip(input.meta.ids, input.meta.eos) if eos) + ending_ids = tuple(_id for _id, eos in zip(meta.ids, meta.eos) if eos) if ending_ids: del self.hidden_state_store[ending_ids] - - # Ensure output is a proper StreamTensor. - output.rename_(*input.meta._temp_names) - return StreamTensor(output, meta=input.meta), out_state + + return output, out_state def patch_rnn(module): diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py index 7e9874a..92f5f35 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ import random +from typing import List import pytest import torch @@ -7,19 +8,44 @@ from dreamstream.utils.flags import BATCH, LENGTH -torch.manual_seed(42) -random.seed(42) +SEED = 42 +torch.manual_seed(SEED) +random.seed(SEED) BATCH_SIZE = 8 + +# Test parameters for waveforms SAMPLE_RATE = 1000 +WAVEFORM_DIM = 1 # Number of waveform channels WAVEFORM_MIN_SECONDS = 3 WAVEFORM_MAX_SECONDS = 7 WAVEFORM_CHUNK_MIN_SECONDS = 1 WAVEFORM_CHUNK_MAX_SECONDS = 2 - - -def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): +WAVEFORM_CHUNK_SECONDS = 1.5 +WAVEFORM_MIN_SIZE = round(WAVEFORM_MIN_SECONDS * SAMPLE_RATE) +WAVEFORM_MAX_SIZE = round(WAVEFORM_MAX_SECONDS * SAMPLE_RATE) +WAVEFORM_CHUNK_MIN_SIZE = round(WAVEFORM_CHUNK_MIN_SECONDS * SAMPLE_RATE) +WAVEFORM_CHUNK_MAX_SIZE = round(WAVEFORM_CHUNK_MAX_SECONDS * SAMPLE_RATE) +WAVEFORM_CHUNK_SIZE = round(WAVEFORM_CHUNK_SECONDS * SAMPLE_RATE) + +# Test parameters for sequences of "tokens" (shorter than waveforms) +# TOKEN_DIM = 4 +# TOKEN_MIN_SIZE = 50 +# TOKEN_MAX_SIZE = 500 +# TOKEN_CHUNK_MIN_SIZE = 10 +# TOKEN_CHUNK_MAX_SIZE = 30 +# TOKEN_CHUNK_SIZE = 20 +TOKEN_DIM = 4 +TOKEN_MIN_SIZE = 50 +TOKEN_MAX_SIZE = 500 +TOKEN_CHUNK_MIN_SIZE = 10 +TOKEN_CHUNK_MAX_SIZE = 30 +TOKEN_CHUNK_SIZE = 20 + + +def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000) -> List[int]: + """Return a list of chunk sizes to use for `torch.split`.""" chunks = [] chunk_sum, remaining = 0, full_length while remaining > 0: @@ -31,11 +57,14 @@ def random_chunks(full_length, min_size: int = 1000, max_size: int = 8000): @pytest.fixture def waveforms(): - """A number of waveform sequences of different lengths of size `BATCH_SIZE`. Size (16, L) of `torch.rand` values.""" - return [ - torch.rand(1, random.randint(SAMPLE_RATE * WAVEFORM_MIN_SECONDS, SAMPLE_RATE * WAVEFORM_MAX_SECONDS)) - for i in range(BATCH_SIZE) - ] + """A `BATCH_SIZE` list of length-varying waveform sequences of size (WAVEFORM_DIM, L) of `torch.rand` values.""" + return [torch.rand(WAVEFORM_DIM, random.randint(WAVEFORM_MIN_SIZE, WAVEFORM_MAX_SIZE)) for _ in range(BATCH_SIZE)] + + +@pytest.fixture +def tokens(): + """A `BATCH_SIZE` list of length-varying token sequences of size (TOKEN_DIM, L) of `torch.rand` values.""" + return [torch.rand(TOKEN_DIM, random.randint(TOKEN_MIN_SIZE, TOKEN_MAX_SIZE)) for _ in range(BATCH_SIZE)] @pytest.fixture @@ -44,20 +73,12 @@ def ids(): return [str(hash(i)) for i in range(BATCH_SIZE)] -@pytest.fixture -def batches_of_waveform_chunks(waveforms, ids): - """Batches of chunks of waveforms of varying lengths from the `waveforms` data.""" - data = pad_full_sequence(waveforms, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") +def create_random_batches(data, ids, min_size: int, max_size: int): + """Create a number of batches of shape (BATCH, F, RANDOM_CHUNK_SIZE) from variable length sequences (F, LENGTH).""" + data = pad_full_sequence(data, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") data = data.unpad_sequence() data = { - _id: s.split( - random_chunks( - s.size("L"), - min_size=SAMPLE_RATE * WAVEFORM_CHUNK_MIN_SECONDS, - max_size=SAMPLE_RATE * WAVEFORM_CHUNK_MAX_SECONDS, - ), - dim=1, - ) + _id: s.split(random_chunks(s.size("L"), min_size=min_size, max_size=max_size), dim=1) for _id, s in zip(ids, data) } @@ -71,3 +92,38 @@ def num_remaining_chunks(data): batches.append(pad_stream_tensor(batch).align_to(BATCH, "F", LENGTH)) return batches + + +def create_structured_batches(data, ids, chunk_size: int): + """Create a number of batches of shape (BATCH, F, CHUNK_SIZE) from variable length sequences (F, LENGTH).""" + data = pad_full_sequence(data, names=("F", LENGTH), ids=ids).align_to("B", "F", "L") + data = data.unpad_sequence() + data = {_id: s.split(chunk_size, dim=1) for _id, s in zip(ids, data)} + + def num_remaining_chunks(data): + return sum([len(x) for x in data.values()]) + + batches = [] + while num_remaining_chunks(data) > 0: + batch = [s.pop(0) for _id, s in data.items() if len(s) > 0] + if len(batch) > 0: + batches.append(pad_stream_tensor(batch).align_to(BATCH, "F", LENGTH)) + + return batches + + +# @pytest.fixture +# def batches_of_waveform_chunks(waveforms, ids): +# """Batches of chunks of waveforms of varying lengths from the `waveforms` data.""" +# return create_random_batches( +# waveforms, +# ids, +# min_size=SAMPLE_RATE * WAVEFORM_CHUNK_MIN_SECONDS, +# max_size=SAMPLE_RATE * WAVEFORM_CHUNK_MAX_SECONDS, +# ) + + +# @pytest.fixture +# def batches_of_token_chunks(tokens, ids): +# """Batches of chunks of tokens of varying lengths from the `tokens` data.""" +# return create_random_batches(tokens, ids, min_size=TOKENS_CHUNK_MIN_SIZE, max_size=TOKENS_CHUNK_MAX_SIZE) diff --git a/tests/patches/test_rnn.py b/tests/patches/test_rnn.py index f253387..9570e74 100644 --- a/tests/patches/test_rnn.py +++ b/tests/patches/test_rnn.py @@ -1,4 +1,6 @@ +import collections import random + import torch import torch.nn as nn import pytest @@ -6,65 +8,125 @@ from dreamstream import patch from dreamstream.data.data_objects import OutputCollector from dreamstream.utils.flags import BATCH, LENGTH +from tests.conftest import ( + create_random_batches, + create_structured_batches, + TOKEN_CHUNK_SIZE, + TOKEN_CHUNK_MIN_SIZE, + TOKEN_CHUNK_MAX_SIZE, + TOKEN_DIM, + BATCH_SIZE +) class TestRNNs: - initial_h = torch.randn(1, 1, 16) - initial_c = torch.randn(1, 1, 16) + # initial_h = torch.randn(1, BATCH_SIZE, 16) + # initial_c = torch.randn(1, BATCH_SIZE, 16) + initial_h = torch.randn(1, 1, 4) + initial_c = torch.randn(1, 1, 4) test_modules = [ - nn.RNN(1, 16, bidirectional=False, batch_first=True), - # nn.Sequential( - # nn.RNN(1, 4, bidirectional=False, batch_first=True), - # nn.RNN(4, 4, bidirectional=False, batch_first=True), - # ), - # nn.GRU(1, 16, bidirectional=False, batch_first=True), - # nn.Sequential( - # nn.GRU(1, 4, bidirectional=False, batch_first=True), - # nn.GRU(4, 4, bidirectional=False, batch_first=True), - # ), + nn.RNN(TOKEN_DIM, 4, num_layers=1, bidirectional=False, batch_first=True), + nn.RNN(TOKEN_DIM, 4, num_layers=2, bidirectional=False, batch_first=True), + # nn.GRU(TOKEN_DIM, 16, num_layers=1, bidirectional=False, batch_first=True), + # nn.GRU(TOKEN_DIM, 16, num_layers=2, bidirectional=False, batch_first=True), + # nn.LSTM(TOKEN_DIM, 16, num_layers=1, bidirectional=False, batch_first=True), + # nn.LSTM(TOKEN_DIM, 16, num_layers=2, bidirectional=False, batch_first=True), ] def recursive_assert(self, module): assert hasattr(module, "online") assert hasattr(module, "offline") - if isinstance(module, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): - assert hasattr(module, "stream_buffer") - assert hasattr(module, "kernel_width") - if isinstance(module, (nn.RNN, nn.LSTM, nn.GRU)): - pass + assert hasattr(module, "hidden_state_store") @pytest.mark.parametrize("module", test_modules) def test_patch(self, module): patch(module) module.apply(self.recursive_assert) - @pytest.mark.parametrize("initial_state", [False]) + # @pytest.mark.parametrize("use_initial_state", [False, True]) + # @pytest.mark.parametrize("is_packed_sequence", [False, True]) + # @pytest.mark.parametrize("is_structured_batches", [True, False]) + @pytest.mark.parametrize("use_initial_state", [False]) + @pytest.mark.parametrize("is_packed_sequence", [True]) + @pytest.mark.parametrize("is_structured_batches", [True, False]) @pytest.mark.parametrize("module", test_modules) - def test_equivalence(self, waveforms, ids, batches_of_waveform_chunks, module, initial_state): - if initial_state: - if isinstance(module, nn.LSTM): - state = (self.initial_h, self.initial_c) - else: - state = self.initial_h + def test_equivalence(self, tokens, ids, module, use_initial_state, is_packed_sequence, is_structured_batches): + lengths = torch.tensor([t.shape[1] for t in tokens]) + # Create batches. + if is_structured_batches: + batches = create_structured_batches(tokens, ids, chunk_size=TOKEN_CHUNK_SIZE) else: - state = None + batches = create_random_batches(tokens, ids, min_size=TOKEN_CHUNK_MIN_SIZE, max_size=TOKEN_CHUNK_MAX_SIZE) - with torch.inference_mode(): - targets = {_id: module(s.transpose(0, 1).unsqueeze(0), state) for _id, s in zip(ids, waveforms)} + # (Maybe) Create packed sequences + tokens = [t.transpose(0, 1) for t in tokens] # (D, L) -> (L, D) + batches = [b.align_to(BATCH, LENGTH, "F") for b in batches] # (B, L, F) + if is_packed_sequence: + tokens = [torch.nn.utils.rnn.pack_sequence([t]) for t in tokens] + batches = [torch.nn.utils.rnn.pack_padded_sequence(b.align_to(BATCH, LENGTH, "F"), b.meta.lengths, batch_first=True, enforce_sorted=False) for b in batches] + + # (Maybe) Set initial state + if use_initial_state: + initial_state = (self.initial_h, self.initial_c) if isinstance(module, nn.LSTM) else self.initial_h + else: + initial_state = None - # TODO (JDH): Test final state equivalence - stream_output = OutputCollector() - module.online() + # Run offline and online versions with torch.inference_mode(): - for x in batches_of_waveform_chunks: - y, state = module(x.align_to(BATCH, LENGTH, "F"), state) + # Offline targets + module.offline() + targets = { + _id: module(t, initial_state.squeeze(0) if use_initial_state else None) + for _id, t in zip(ids, tokens) + } + if is_packed_sequence: + targets = { + _id: (torch.nn.utils.rnn.pad_packed_sequence(y, batch_first=True)[0].squeeze(0), out_states) + for _id, (y, out_states) in targets.items() + } + + # Online outputs + module.online() + stream_output = OutputCollector(collection="cat") + # stream_states = OutputCollector(collection="append") + stream_states = dict() + for j, x in enumerate(batches): + y, out_states = module(x, initial_state) + if is_packed_sequence: + y = torch.nn.utils.rnn.pad_packed_sequence(y, batch_first=True)[0] stream_output.update(y) + for i, _id in enumerate(y.meta.ids): + # print(j, out_states[:, i], targets[_id][1]) + if y.meta.eos[i]: + stream_states[_id] = out_states[:, i] + # stream_states.update(out_states) - import IPython - IPython.embed(using=False) - for _id, _y in targets.items(): + # Compare outputs + failed_outputs = [] + failed_states = [] + for _id, (_y, _state) in targets.items(): y = stream_output[_id].tensor() - assert torch.allclose(_y, y, atol=1e-6), f"{_id} failed" + state = stream_states[_id] + + # print(f"Online output: {y}") + # print(f"Offline output: {_y}") + print(_id) + print(f"Online state: {state}") + print(f"Offline state: {_state}") + print((_y - y).abs().sum(0).max()) + print((_state - state).abs().sum(0).max()) + + import IPython + IPython.embed(using=False) + + if not torch.allclose(_y, y, atol=1e-6): + num_errs = ((_y - y).abs().sum(-1) > 1e-6).sum() + failed_outputs.append(f"{_id} failed on n={num_errs} of {y.shape[0]} output steps.") + if not torch.allclose(_state, state, atol=1e-6): + failed_states.append(f"{_id} failed on state, {_state} != {state}") + + if any(failed_states) or any(failed_outputs): + raise AssertionError(f"Failed on:\n{failed_outputs}\n{failed_states}") From a85e7d96794eaa8c7a97358e902d80cc8ceac810 Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:23:14 +0200 Subject: [PATCH 35/36] Add test for unbind --- tests/test_tensor.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_tensor.py b/tests/test_tensor.py index 353f029..15d97c3 100644 --- a/tests/test_tensor.py +++ b/tests/test_tensor.py @@ -1342,3 +1342,25 @@ def test_squeeze_all_singleton_dims(self, stream_tensor_bfl_fixture, stream_meta torch.squeeze, **stream_meta_kwargs_fixture, ) + + +class TestUnbind: + def test_unbind_batch(self, stream_tensor_bfl_fixture): + batch_size = stream_tensor_bfl_fixture.size(0) + tensors = stream_tensor_bfl_fixture.unbind(dim=0) + assert len(tensors) == batch_size + for i in range(batch_size): + assert stream_tensor_bfl_fixture.meta.ids[i] == tensors[i].meta.ids[0] + assert stream_tensor_bfl_fixture.meta.sos[i] == tensors[i].meta.sos[0] + assert stream_tensor_bfl_fixture.meta.eos[i] == tensors[i].meta.eos[0] + assert stream_tensor_bfl_fixture.meta.lengths[i] == tensors[i].meta.lengths[0] + + def test_unbind_feature(self, stream_tensor_bfl_fixture): + tensors = stream_tensor_bfl_fixture.unbind(dim=1) + for tensor in tensors: + assert tensor.meta == stream_tensor_bfl_fixture.meta + + def test_unbind_length(self, stream_tensor_bfl_fixture): + # TODO (JDH): Implement this. + with pytest.raises(ValueError): + stream_tensor_bfl_fixture.unbind(dim=2) From a1f878c121bead193df1472f3d50f5884f7f57ba Mon Sep 17 00:00:00 2001 From: Jakob Drachmann Havtorn Date: Tue, 4 Jul 2023 15:23:31 +0200 Subject: [PATCH 36/36] Add conv test case for structured batches --- tests/patches/test_conv.py | 54 +++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/tests/patches/test_conv.py b/tests/patches/test_conv.py index 7d045f4..34e024d 100644 --- a/tests/patches/test_conv.py +++ b/tests/patches/test_conv.py @@ -5,29 +5,39 @@ from dreamstream import patch from dreamstream.data.data_objects import OutputCollector +from tests.conftest import ( + WAVEFORM_CHUNK_SIZE, + WAVEFORM_CHUNK_MIN_SIZE, + WAVEFORM_CHUNK_MAX_SIZE, + WAVEFORM_DIM, + create_structured_batches, + create_random_batches, +) class TestConvs: test_modules = [ - nn.Conv1d(1, 4, kernel_size=1, padding=0), - nn.Conv1d(1, 4, kernel_size=1, padding=1), - nn.Conv1d(1, 4, kernel_size=3, padding=0), - nn.Conv1d(1, 4, kernel_size=3, padding=1), - nn.Conv1d(1, 4, kernel_size=4, padding=0), - nn.Conv1d(1, 4, kernel_size=4, padding=2), - nn.Conv1d(1, 4, kernel_size=5, padding=0), - nn.Conv1d(1, 4, kernel_size=5, padding=2), - nn.Conv1d(1, 4, kernel_size=5, padding=2, stride=2), - nn.Conv1d(1, 4, kernel_size=5, padding=2, stride=2), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=1, padding=0), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=1, padding=1), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=3, padding=0), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=3, padding=1), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=4, padding=0), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=4, padding=2), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=5, padding=0), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=5, padding=2), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=5, padding=2, stride=2), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=5, padding=2, stride=2), nn.Sequential( - nn.Conv1d(1, 4, kernel_size=3, padding=1), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=3, padding=1), nn.Conv1d(4, 4, kernel_size=5, padding=2), ), nn.Sequential( - nn.Conv1d(1, 4, kernel_size=3, padding=1, stride=2), + nn.Conv1d(WAVEFORM_DIM, 4, kernel_size=3, padding=1, stride=2), nn.Conv1d(4, 4, kernel_size=5, padding=2, stride=2), ), - torchaudio.models.Wav2Letter(num_classes=40, input_type="mfcc", num_features=1), # Too slow for remote CI. + torchaudio.models.Wav2Letter( + num_classes=40, input_type="mfcc", num_features=WAVEFORM_DIM + ), # Too slow for remote CI. ] def recursive_assert(self, module): @@ -43,14 +53,22 @@ def test_patch(self, module): module.apply(self.recursive_assert) @pytest.mark.parametrize("module", test_modules) - def test_equivalence(self, waveforms, ids, batches_of_waveform_chunks, module): + @pytest.mark.parametrize("is_structured_batches", [True, False]) + def test_equivalence(self, waveforms, ids, module, is_structured_batches): + if is_structured_batches: + batches = create_structured_batches(waveforms, ids, chunk_size=WAVEFORM_CHUNK_SIZE) + else: + batches = create_random_batches(waveforms, ids, min_size=WAVEFORM_CHUNK_MIN_SIZE, max_size=WAVEFORM_CHUNK_MAX_SIZE) + with torch.inference_mode(): + # Offline targets + module.offline() targets = {_id: module(s.unsqueeze(0)) for _id, s in zip(ids, waveforms)} - stream_output = OutputCollector() - module.online() - with torch.inference_mode(): - for x in batches_of_waveform_chunks: + # Online outputs + stream_output = OutputCollector() + module.online() + for x in batches: y = module(x) stream_output.update(y)