From a5e4ecb7ae9ff950dcb54aa155f1d12c6bdb8c7a Mon Sep 17 00:00:00 2001 From: Gard Spreemann Date: Fri, 31 Dec 2021 10:46:47 +0100 Subject: Add patch to remove benchmarks This is just a temporary fix for #1002879, and should instead be properly fixed upstream. --- debian/changelog | 6 + ...hmarks-to-prevent-installation-in-wrong-p.patch | 231 +++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 238 insertions(+) create mode 100644 debian/patches/0001-Remove-benchmarks-to-prevent-installation-in-wrong-p.patch create mode 100644 debian/patches/series diff --git a/debian/changelog b/debian/changelog index 03e245a..edab601 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +python-pot (0.8.1+dfsg-2) unstable; urgency=medium + + * Add patch to remove benchmarks. (Closes: #1002879) + + -- Gard Spreemann Fri, 31 Dec 2021 10:47:43 +0100 + python-pot (0.8.1+dfsg-1) unstable; urgency=medium * New upstream version. diff --git a/debian/patches/0001-Remove-benchmarks-to-prevent-installation-in-wrong-p.patch b/debian/patches/0001-Remove-benchmarks-to-prevent-installation-in-wrong-p.patch new file mode 100644 index 0000000..28ae7d5 --- /dev/null +++ b/debian/patches/0001-Remove-benchmarks-to-prevent-installation-in-wrong-p.patch @@ -0,0 +1,231 @@ +From: Gard Spreemann +Date: Fri, 31 Dec 2021 10:46:27 +0100 +Subject: Remove benchmarks to prevent installation in wrong path + +--- + benchmarks/__init__.py | 5 --- + benchmarks/benchmark.py | 105 ------------------------------------------- + benchmarks/emd.py | 40 ----------------- + benchmarks/sinkhorn_knopp.py | 42 ----------------- + 4 files changed, 192 deletions(-) + delete mode 100644 benchmarks/__init__.py + delete mode 100644 benchmarks/benchmark.py + delete mode 100644 benchmarks/emd.py + delete mode 100644 benchmarks/sinkhorn_knopp.py + +diff --git a/benchmarks/__init__.py b/benchmarks/__init__.py +deleted file mode 100644 +index 37f5e56..0000000 +--- a/benchmarks/__init__.py ++++ /dev/null +@@ -1,5 +0,0 @@ +-from . import benchmark +-from . import sinkhorn_knopp +-from . import emd +- +-__all__= ["benchmark", "sinkhorn_knopp", "emd"] +diff --git a/benchmarks/benchmark.py b/benchmarks/benchmark.py +deleted file mode 100644 +index 7973c6b..0000000 +--- a/benchmarks/benchmark.py ++++ /dev/null +@@ -1,105 +0,0 @@ +-# /usr/bin/env python3 +-# -*- coding: utf-8 -*- +- +-from ot.backend import get_backend_list, jax, tf +-import gc +- +- +-def setup_backends(): +- if jax: +- from jax.config import config +- config.update("jax_enable_x64", True) +- +- if tf: +- from tensorflow.python.ops.numpy_ops import np_config +- np_config.enable_numpy_behavior() +- +- +-def exec_bench(setup, tested_function, param_list, n_runs, warmup_runs): +- backend_list = get_backend_list() +- for i, nx in enumerate(backend_list): +- if nx.__name__ == "tf" and i < len(backend_list) - 1: +- # Tensorflow should be the last one to be benchmarked because +- # as far as I'm aware, there is no way to force it to release +- # GPU memory. Hence, if any other backend is benchmarked after +- # Tensorflow and requires the usage of a GPU, it will not have the +- # full memory available and you may have a GPU Out Of Memory error +- # even though your GPU can technically hold your tensors in memory. +- backend_list.pop(i) +- backend_list.append(nx) +- break +- +- inputs = [setup(param) for param in param_list] +- results = dict() +- for nx in backend_list: +- for i in range(len(param_list)): +- print(nx, param_list[i]) +- args = inputs[i] +- results_nx = nx._bench( +- tested_function, +- *args, +- n_runs=n_runs, +- warmup_runs=warmup_runs +- ) +- gc.collect() +- results_nx_with_param_in_key = dict() +- for key in results_nx: +- new_key = (param_list[i], *key) +- results_nx_with_param_in_key[new_key] = results_nx[key] +- results.update(results_nx_with_param_in_key) +- return results +- +- +-def convert_to_html_table(results, param_name, main_title=None, comments=None): +- string = "\n" +- keys = list(results.keys()) +- params, names, devices, bitsizes = zip(*keys) +- +- devices_names = sorted(list(set(zip(devices, names)))) +- params = sorted(list(set(params))) +- bitsizes = sorted(list(set(bitsizes))) +- length = len(devices_names) + 1 +- cpus_cols = list(devices).count("CPU") / len(bitsizes) / len(params) +- gpus_cols = list(devices).count("GPU") / len(bitsizes) / len(params) +- assert cpus_cols + gpus_cols == len(devices_names) +- +- if main_title is not None: +- string += f'\n' +- +- for i, bitsize in enumerate(bitsizes): +- +- if i != 0: +- string += f'\n' +- +- # make bitsize header +- text = f"{bitsize} bits" +- if comments is not None: +- text += " - " +- if isinstance(comments, (tuple, list)) and len(comments) == len(bitsizes): +- text += str(comments[i]) +- else: +- text += str(comments) +- string += f'' +- string += f'\n' +- +- # make device header +- string += f'' +- string += f'' +- string += f'\n' +- +- # make param_name / backend header +- string += f'' +- for device, name in devices_names: +- string += f'' +- string += "\n" +- +- # make results rows +- for param in params: +- string += f'' +- for device, name in devices_names: +- key = (param, name, device, bitsize) +- string += f'' +- string += "\n" +- +- string += "
{str(main_title)}
 
Bitsize{text}
DeviceCPUGPU
{param_name}{name}
{param}{results[key]:.4f}
" +- return string +diff --git a/benchmarks/emd.py b/benchmarks/emd.py +deleted file mode 100644 +index 9f64863..0000000 +--- a/benchmarks/emd.py ++++ /dev/null +@@ -1,40 +0,0 @@ +-# /usr/bin/env python3 +-# -*- coding: utf-8 -*- +- +-import numpy as np +-import ot +-from .benchmark import ( +- setup_backends, +- exec_bench, +- convert_to_html_table +-) +- +- +-def setup(n_samples): +- rng = np.random.RandomState(789465132) +- x = rng.randn(n_samples, 2) +- y = rng.randn(n_samples, 2) +- +- a = ot.utils.unif(n_samples) +- M = ot.dist(x, y) +- return a, M +- +- +-if __name__ == "__main__": +- n_runs = 100 +- warmup_runs = 10 +- param_list = [50, 100, 500, 1000, 2000, 5000] +- +- setup_backends() +- results = exec_bench( +- setup=setup, +- tested_function=lambda a, M: ot.emd(a, a, M), +- param_list=param_list, +- n_runs=n_runs, +- warmup_runs=warmup_runs +- ) +- print(convert_to_html_table( +- results, +- param_name="Sample size", +- main_title=f"EMD - Averaged on {n_runs} runs" +- )) +diff --git a/benchmarks/sinkhorn_knopp.py b/benchmarks/sinkhorn_knopp.py +deleted file mode 100644 +index 3a1ef3f..0000000 +--- a/benchmarks/sinkhorn_knopp.py ++++ /dev/null +@@ -1,42 +0,0 @@ +-# /usr/bin/env python3 +-# -*- coding: utf-8 -*- +- +-import numpy as np +-import ot +-from .benchmark import ( +- setup_backends, +- exec_bench, +- convert_to_html_table +-) +- +- +-def setup(n_samples): +- rng = np.random.RandomState(123456789) +- a = rng.rand(n_samples // 4, 100) +- b = rng.rand(n_samples, 100) +- +- wa = ot.unif(n_samples // 4) +- wb = ot.unif(n_samples) +- +- M = ot.dist(a.copy(), b.copy()) +- return wa, wb, M +- +- +-if __name__ == "__main__": +- n_runs = 100 +- warmup_runs = 10 +- param_list = [50, 100, 500, 1000, 2000, 5000] +- +- setup_backends() +- results = exec_bench( +- setup=setup, +- tested_function=lambda *args: ot.bregman.sinkhorn(*args, reg=1, stopThr=1e-7), +- param_list=param_list, +- n_runs=n_runs, +- warmup_runs=warmup_runs +- ) +- print(convert_to_html_table( +- results, +- param_name="Sample size", +- main_title=f"Sinkhorn Knopp - Averaged on {n_runs} runs" +- )) diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..a82b8eb --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +0001-Remove-benchmarks-to-prevent-installation-in-wrong-p.patch -- cgit v1.2.3