From ff895f82cff02c6942954b3db680aad50ded2e7e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 31 Jan 2024 17:04:56 +0100 Subject: [PATCH 1/6] add additional parameter to control if hostname of localhost is used --- pympipool/__init__.py | 5 +++++ pympipool/flux/executor.py | 7 +++++++ pympipool/mpi/executor.py | 6 ++++++ pympipool/shared/communication.py | 10 ++++++---- pympipool/shared/executorbase.py | 3 +++ pympipool/slurm/executor.py | 6 ++++++ tests/test_future.py | 6 +++--- tests/test_meta.py | 11 +++++++---- tests/test_task.py | 6 +++--- tests/test_with_dynamic_objects.py | 2 +- tests/test_worker.py | 20 ++++++++++++-------- tests/test_worker_memory.py | 3 ++- 12 files changed, 61 insertions(+), 24 deletions(-) diff --git a/pympipool/__init__.py b/pympipool/__init__.py index 1567c721..9c26401d 100644 --- a/pympipool/__init__.py +++ b/pympipool/__init__.py @@ -72,6 +72,7 @@ def __init__( cwd=None, sleep_interval=0.1, executor=None, + hostname_localhost=False, ): # Use __new__() instead of __init__(). This function is only implemented to enable auto-completion. pass @@ -87,6 +88,7 @@ def __new__( cwd=None, sleep_interval=0.1, executor=None, + hostname_localhost=False, ): """ Instead of returning a pympipool.Executor object this function returns either a pympipool.mpi.PyMPIExecutor, @@ -120,6 +122,7 @@ def __new__( init_function=init_function, cwd=cwd, sleep_interval=sleep_interval, + hostname_localhost=hostname_localhost, ) elif slurm_installed: return PySlurmExecutor( @@ -128,6 +131,7 @@ def __new__( init_function=init_function, cwd=cwd, sleep_interval=sleep_interval, + hostname_localhost=hostname_localhost, ) else: if threads_per_core != 1: @@ -150,4 +154,5 @@ def __new__( init_function=init_function, cwd=cwd, sleep_interval=sleep_interval, + hostname_localhost=hostname_localhost, ) diff --git a/pympipool/flux/executor.py b/pympipool/flux/executor.py index 9ab1e52d..0de3de7f 100644 --- a/pympipool/flux/executor.py +++ b/pympipool/flux/executor.py @@ -28,6 +28,7 @@ class PyFluxExecutor(ExecutorBase): cwd (str/None): current working directory where the parallel python task is executed sleep_interval (float): synchronization interval - default 0.1 executor (flux.job.FluxExecutor): Flux Python interface to submit the workers to flux + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection Examples: @@ -60,6 +61,7 @@ def __init__( cwd=None, sleep_interval=0.1, executor=None, + hostname_localhost=False, ): super().__init__() self._process = RaisingThread( @@ -69,6 +71,7 @@ def __init__( "future_queue": self._future_queue, "max_workers": max_workers, "sleep_interval": sleep_interval, + "hostname_localhost": hostname_localhost, "executor_class": PyFluxSingleTaskExecutor, # Executor Arguments "cores": cores_per_worker, @@ -93,6 +96,8 @@ class PyFluxSingleTaskExecutor(ExecutorBase): init_function (None): optional function to preset arguments for functions which are submitted later cwd (str/None): current working directory where the parallel python task is executed executor (flux.job.FluxExecutor): Flux Python interface to submit the workers to flux + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection + """ def __init__( @@ -103,6 +108,7 @@ def __init__( init_function=None, cwd=None, executor=None, + hostname_localhost=False, ): super().__init__() self._process = RaisingThread( @@ -112,6 +118,7 @@ def __init__( "future_queue": self._future_queue, "cores": cores, "interface_class": FluxPythonInterface, + "hostname_localhost": hostname_localhost, # Interface Arguments "threads_per_core": threads_per_core, "gpus_per_core": gpus_per_task, diff --git a/pympipool/mpi/executor.py b/pympipool/mpi/executor.py index 33b53f68..64a3a6de 100644 --- a/pympipool/mpi/executor.py +++ b/pympipool/mpi/executor.py @@ -23,6 +23,7 @@ class PyMPIExecutor(ExecutorBase): init_function (None): optional function to preset arguments for functions which are submitted later cwd (str/None): current working directory where the parallel python task is executed sleep_interval (float): synchronization interval - default 0.1 + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection Examples: @@ -53,6 +54,7 @@ def __init__( init_function=None, cwd=None, sleep_interval=0.1, + hostname_localhost=False, ): super().__init__() self._process = RaisingThread( @@ -63,6 +65,7 @@ def __init__( "max_workers": max_workers, "sleep_interval": sleep_interval, "executor_class": PyMPISingleTaskExecutor, + "hostname_localhost": hostname_localhost, # Executor Arguments "cores": cores_per_worker, "oversubscribe": oversubscribe, @@ -82,6 +85,7 @@ class PyMPISingleTaskExecutor(ExecutorBase): oversubscribe (bool): adds the `--oversubscribe` command line flag (OpenMPI only) - default False init_function (None): optional function to preset arguments for functions which are submitted later cwd (str/None): current working directory where the parallel python task is executed + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection """ @@ -91,6 +95,7 @@ def __init__( oversubscribe=False, init_function=None, cwd=None, + hostname_localhost=False, ): super().__init__() self._process = RaisingThread( @@ -103,6 +108,7 @@ def __init__( # Interface Arguments "cwd": cwd, "oversubscribe": oversubscribe, + "hostname_localhost": hostname_localhost, }, ) self._process.start() diff --git a/pympipool/shared/communication.py b/pympipool/shared/communication.py index 6272bc96..65baa0eb 100644 --- a/pympipool/shared/communication.py +++ b/pympipool/shared/communication.py @@ -98,11 +98,13 @@ def __del__(self): def interface_bootup( command_lst, connections, + hostname_localhost=False, ): - command_lst += [ - "--host", - gethostname(), - ] + if not hostname_localhost: + command_lst += [ + "--host", + gethostname(), + ] interface = SocketInterface(interface=connections) command_lst += [ "--zmqport", diff --git a/pympipool/shared/executorbase.py b/pympipool/shared/executorbase.py index 7c8918cd..ac93c765 100644 --- a/pympipool/shared/executorbase.py +++ b/pympipool/shared/executorbase.py @@ -119,6 +119,7 @@ def execute_parallel_tasks( future_queue, cores, interface_class, + hostname_localhost=False, **kwargs, ): """ @@ -128,11 +129,13 @@ def execute_parallel_tasks( future_queue (queue.Queue): task queue of dictionary objects which are submitted to the parallel process cores (int): defines the total number of MPI ranks to use interface_class: + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection """ execute_parallel_tasks_loop( interface=interface_bootup( command_lst=_get_backend_path(cores=cores), connections=interface_class(cores=cores, **kwargs), + hostname_localhost=hostname_localhost, ), future_queue=future_queue, ) diff --git a/pympipool/slurm/executor.py b/pympipool/slurm/executor.py index 1414493e..beb51eb3 100644 --- a/pympipool/slurm/executor.py +++ b/pympipool/slurm/executor.py @@ -24,6 +24,7 @@ class PySlurmExecutor(ExecutorBase): init_function (None): optional function to preset arguments for functions which are submitted later cwd (str/None): current working directory where the parallel python task is executed sleep_interval (float): synchronization interval - default 0.1 + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection Examples: @@ -56,6 +57,7 @@ def __init__( init_function=None, cwd=None, sleep_interval=0.1, + hostname_localhost=False, ): super().__init__() self._process = RaisingThread( @@ -65,6 +67,7 @@ def __init__( "future_queue": self._future_queue, "max_workers": max_workers, "sleep_interval": sleep_interval, + "hostname_localhost": hostname_localhost, "executor_class": PySlurmSingleTaskExecutor, # Executor Arguments "cores": cores_per_worker, @@ -89,6 +92,7 @@ class PySlurmSingleTaskExecutor(ExecutorBase): oversubscribe (bool): adds the `--oversubscribe` command line flag (OpenMPI only) - default False init_function (None): optional function to preset arguments for functions which are submitted later cwd (str/None): current working directory where the parallel python task is executed + hostname_localhost (boolean): use localhost as hostname to establish the zmq connection """ @@ -100,6 +104,7 @@ def __init__( oversubscribe=False, init_function=None, cwd=None, + hostname_localhost=False, ): super().__init__() self._process = RaisingThread( @@ -114,6 +119,7 @@ def __init__( "gpus_per_core": gpus_per_task, "cwd": cwd, "oversubscribe": oversubscribe, + "hostname_localhost": hostname_localhost, }, ) self._process.start() diff --git a/tests/test_future.py b/tests/test_future.py index 426d0156..d023df7f 100644 --- a/tests/test_future.py +++ b/tests/test_future.py @@ -11,7 +11,7 @@ def calc(i): class TestFuture(unittest.TestCase): def test_pool_serial(self): - with PyMPISingleTaskExecutor(cores=1) as p: + with PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) as p: output = p.submit(calc, i=2) self.assertTrue(isinstance(output, Future)) self.assertFalse(output.done()) @@ -20,7 +20,7 @@ def test_pool_serial(self): self.assertEqual(output.result(), np.array(4)) def test_pool_serial_multi_core(self): - with PyMPISingleTaskExecutor(cores=2) as p: + with PyMPISingleTaskExecutor(cores=2, hostname_localhost=True) as p: output = p.submit(calc, i=2) self.assertTrue(isinstance(output, Future)) self.assertFalse(output.done()) @@ -84,7 +84,7 @@ def __init__(self): def run(self): self.running = True - future = PyMPISingleTaskExecutor().submit(self.return_42) + future = PyMPISingleTaskExecutor(hostname_localhost=True).submit(self.return_42) future.add_done_callback(self.finished) return future diff --git a/tests/test_meta.py b/tests/test_meta.py index 1bba9a07..7f63e5eb 100644 --- a/tests/test_meta.py +++ b/tests/test_meta.py @@ -34,6 +34,7 @@ def test_meta_executor_future(self): meta_future = _get_executor_dict( max_workers=1, executor_class=PyMPISingleTaskExecutor, + hostname_localhost=True, ) future_obj = list(meta_future.keys())[0] executor_obj = list(meta_future.values())[0] @@ -47,6 +48,7 @@ def test_execute_task_dict(self): meta_future_lst = _get_executor_dict( max_workers=1, executor_class=PyMPISingleTaskExecutor, + hostname_localhost=True, ) f = Future() self.assertTrue( @@ -68,6 +70,7 @@ def test_execute_task_dict_error(self): meta_future_lst = _get_executor_dict( max_workers=1, executor_class=PyMPISingleTaskExecutor, + hostname_localhost=True, ) with self.assertRaises(ValueError): execute_task_dict(task_dict={}, meta_future_lst=meta_future_lst) @@ -78,7 +81,7 @@ def test_executor_broker(self): f = Future() q.put({"fn": calc, "args": (1,), "kwargs": {}, "future": f}) q.put({"shutdown": True, "wait": True}) - executor_broker(future_queue=q, max_workers=1, executor_class=PyMPISingleTaskExecutor) + executor_broker(future_queue=q, max_workers=1, executor_class=PyMPISingleTaskExecutor, hostname_localhost=True) self.assertTrue(f.done()) self.assertEqual(f.result(), 1) q.join() @@ -86,7 +89,7 @@ def test_executor_broker(self): class TestMetaExecutor(unittest.TestCase): def test_meta_executor_serial(self): - with PyMPIExecutor(max_workers=2) as exe: + with PyMPIExecutor(max_workers=2, hostname_localhost=True) as exe: fs_1 = exe.submit(calc, 1) fs_2 = exe.submit(calc, 2) self.assertEqual(fs_1.result(), 1) @@ -95,7 +98,7 @@ def test_meta_executor_serial(self): self.assertTrue(fs_2.done()) def test_meta_executor_single(self): - with PyMPIExecutor(max_workers=1) as exe: + with PyMPIExecutor(max_workers=1, hostname_localhost=True) as exe: fs_1 = exe.submit(calc, 1) fs_2 = exe.submit(calc, 2) self.assertEqual(fs_1.result(), 1) @@ -104,7 +107,7 @@ def test_meta_executor_single(self): self.assertTrue(fs_2.done()) def test_meta_executor_parallel(self): - with PyMPIExecutor(max_workers=1, cores_per_worker=2) as exe: + with PyMPIExecutor(max_workers=1, cores_per_worker=2, hostname_localhost=True) as exe: fs_1 = exe.submit(mpi_funct, 1) self.assertEqual(fs_1.result(), [(1, 2, 0), (1, 2, 1)]) self.assertTrue(fs_1.done()) diff --git a/tests/test_task.py b/tests/test_task.py index 1585e6d3..4f777f53 100644 --- a/tests/test_task.py +++ b/tests/test_task.py @@ -16,17 +16,17 @@ def mpi_funct(i): class TestTask(unittest.TestCase): def test_echo(self): - with PyMPISingleTaskExecutor(cores=2) as p: + with PyMPISingleTaskExecutor(cores=2, hostname_localhost=True) as p: output = p.submit(echo_funct, 2).result() self.assertEqual(output, [2, 2]) def test_mpi(self): - with PyMPISingleTaskExecutor(cores=2) as p: + with PyMPISingleTaskExecutor(cores=2, hostname_localhost=True) as p: output = p.submit(mpi_funct, 2).result() self.assertEqual(output, [(2, 2, 0), (2, 2, 1)]) def test_mpi_multiple(self): - with PyMPISingleTaskExecutor(cores=2) as p: + with PyMPISingleTaskExecutor(cores=2, hostname_localhost=True) as p: fs1 = p.submit(mpi_funct, 1) fs2 = p.submit(mpi_funct, 2) fs3 = p.submit(mpi_funct, 3) diff --git a/tests/test_with_dynamic_objects.py b/tests/test_with_dynamic_objects.py index 29494857..db0fcd8f 100644 --- a/tests/test_with_dynamic_objects.py +++ b/tests/test_with_dynamic_objects.py @@ -75,7 +75,7 @@ def slowly_returns_dynamic(dynamic_arg): return dynamic_arg dynamic_dynamic = slowly_returns_dynamic() - executor = Executor() + executor = Executor(hostname_localhost=True) dynamic_object = does_nothing() fs = executor.submit(dynamic_dynamic.run, dynamic_object) self.assertEqual( diff --git a/tests/test_worker.py b/tests/test_worker.py index 386fb16f..3e17080a 100644 --- a/tests/test_worker.py +++ b/tests/test_worker.py @@ -31,7 +31,7 @@ def raise_error(): class TestFuturePool(unittest.TestCase): def test_pool_serial(self): - with PyMPISingleTaskExecutor(cores=1) as p: + with PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) as p: output = p.submit(calc, i=2) self.assertEqual(len(p), 1) self.assertTrue(isinstance(output, Future)) @@ -42,7 +42,7 @@ def test_pool_serial(self): self.assertEqual(output.result(), np.array(4)) def test_executor_multi_submission(self): - with PyMPISingleTaskExecutor(cores=1) as p: + with PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) as p: fs_1 = p.submit(calc, i=2) fs_2 = p.submit(calc, i=2) self.assertEqual(fs_1.result(), np.array(4)) @@ -51,7 +51,7 @@ def test_executor_multi_submission(self): self.assertTrue(fs_2.done()) def test_shutdown(self): - p = PyMPISingleTaskExecutor(cores=1) + p = PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) fs1 = p.submit(sleep_one, i=2) fs2 = p.submit(sleep_one, i=4) sleep(1) @@ -63,23 +63,23 @@ def test_shutdown(self): fs2.result() def test_pool_serial_map(self): - with PyMPISingleTaskExecutor(cores=1) as p: + with PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) as p: output = p.map(calc, [1, 2, 3]) self.assertEqual(list(output), [np.array(1), np.array(4), np.array(9)]) def test_executor_exception(self): with self.assertRaises(RuntimeError): - with PyMPISingleTaskExecutor(cores=1) as p: + with PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) as p: p.submit(raise_error) def test_executor_exception_future(self): with self.assertRaises(RuntimeError): - with PyMPISingleTaskExecutor(cores=1) as p: + with PyMPISingleTaskExecutor(cores=1, hostname_localhost=True) as p: fs = p.submit(raise_error) fs.result() def test_pool_multi_core(self): - with PyMPISingleTaskExecutor(cores=2) as p: + with PyMPISingleTaskExecutor(cores=2, hostname_localhost=True) as p: output = p.submit(mpi_funct, i=2) self.assertEqual(len(p), 1) self.assertTrue(isinstance(output, Future)) @@ -90,7 +90,7 @@ def test_pool_multi_core(self): self.assertEqual(output.result(), [(2, 2, 0), (2, 2, 1)]) def test_pool_multi_core_map(self): - with PyMPISingleTaskExecutor(cores=2) as p: + with PyMPISingleTaskExecutor(cores=2, hostname_localhost=True) as p: output = p.map(mpi_funct, [1, 2, 3]) self.assertEqual( list(output), @@ -108,6 +108,7 @@ def test_execute_task_failed_no_argument(self): cores=1, oversubscribe=False, interface_class=MpiExecInterface, + hostname_localhost=True, ) q.join() @@ -122,6 +123,7 @@ def test_execute_task_failed_wrong_argument(self): cores=1, oversubscribe=False, interface_class=MpiExecInterface, + hostname_localhost=True, ) q.join() @@ -136,6 +138,7 @@ def test_execute_task(self): cores=1, oversubscribe=False, interface_class=MpiExecInterface, + hostname_localhost=True, ) self.assertEqual(f.result(), np.array(4)) q.join() @@ -151,6 +154,7 @@ def test_execute_task_parallel(self): cores=2, oversubscribe=False, interface_class=MpiExecInterface, + hostname_localhost=True, ) self.assertEqual(f.result(), [np.array(4), np.array(4)]) q.join() diff --git a/tests/test_worker_memory.py b/tests/test_worker_memory.py index 2d4da738..7230e0f5 100644 --- a/tests/test_worker_memory.py +++ b/tests/test_worker_memory.py @@ -17,7 +17,7 @@ def set_global(): class TestWorkerMemory(unittest.TestCase): def test_internal_memory(self): - with PyMPISingleTaskExecutor(cores=1, init_function=set_global) as p: + with PyMPISingleTaskExecutor(cores=1, init_function=set_global, hostname_localhost=True) as p: f = p.submit(get_global) self.assertFalse(f.done()) self.assertEqual(f.result(), np.array([5])) @@ -44,6 +44,7 @@ def test_execute_task(self): cores=1, oversubscribe=False, interface_class=MpiExecInterface, + hostname_localhost=True, ) self.assertEqual(f.result(), np.array([5])) q.join() From f6c7905ec884c00c0c187325748fbec985fe3aa3 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 31 Jan 2024 17:19:45 +0100 Subject: [PATCH 2/6] Switch to macos-14 --- .github/workflows/unittest-mpich.yml | 2 +- .github/workflows/unittest-openmpi.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/unittest-mpich.yml b/.github/workflows/unittest-mpich.yml index 9e24625f..80b4b5fa 100644 --- a/.github/workflows/unittest-mpich.yml +++ b/.github/workflows/unittest-mpich.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: include: - - operating-system: macos-11 + - operating-system: macos-14 python-version: '3.12' label: osx-64-py-3-12-mpich prefix: /Users/runner/miniconda3/envs/my-env diff --git a/.github/workflows/unittest-openmpi.yml b/.github/workflows/unittest-openmpi.yml index ff651757..8815d228 100644 --- a/.github/workflows/unittest-openmpi.yml +++ b/.github/workflows/unittest-openmpi.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: include: - - operating-system: macos-11 + - operating-system: macos-14 python-version: '3.12' label: osx-64-py-3-12-openmpi prefix: /Users/runner/miniconda3/envs/my-env From a5b76a8925e558760599c39adba965af4797f0a0 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 31 Jan 2024 17:23:16 +0100 Subject: [PATCH 3/6] more fixes --- tests/test_with_dynamic_objects.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_with_dynamic_objects.py b/tests/test_with_dynamic_objects.py index db0fcd8f..c9ebf755 100644 --- a/tests/test_with_dynamic_objects.py +++ b/tests/test_with_dynamic_objects.py @@ -107,7 +107,7 @@ def slowly_returns_42(): dynamic_42.result, msg="Just a sanity check that the test is set up right" ) - executor = Executor() + executor = Executor(hostname_localhost=True) fs = executor.submit(dynamic_42.run) fs.add_done_callback(dynamic_42.process_result) self.assertFalse( @@ -139,7 +139,7 @@ def returns_42(): dynamic_42.running, msg="Sanity check that the test starts in the expected condition" ) - executor = Executor() + executor = Executor(hostname_localhost=True) fs = executor.submit(dynamic_42.run) fs.add_done_callback(dynamic_42.process_result) self.assertTrue( @@ -162,7 +162,7 @@ def raise_error(): raise RuntimeError re = raise_error() - executor = Executor() + executor = Executor(hostname_localhost=True) fs = executor.submit(re.run) with self.assertRaises( RuntimeError, @@ -191,7 +191,7 @@ def slowly_returns_dynamic(): return inside_variable dynamic_dynamic = slowly_returns_dynamic() - executor = Executor() + executor = Executor(hostname_localhost=True) fs = executor.submit(dynamic_dynamic.run) self.assertIsInstance( fs.result(), @@ -219,7 +219,7 @@ def slow(): return fortytwo f = slow() - executor = Executor() + executor = Executor(hostname_localhost=True) fs = executor.submit(f.run) self.assertEqual( fs.result(timeout=30), From b7a083e884bb6669d44577ce1f33925f630ccd05 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 31 Jan 2024 17:36:56 +0100 Subject: [PATCH 4/6] found two more --- tests/test_future.py | 2 +- tests/test_meta.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_future.py b/tests/test_future.py index d023df7f..fe4344e4 100644 --- a/tests/test_future.py +++ b/tests/test_future.py @@ -48,7 +48,7 @@ def callback(future): def submit(): # Executor only exists in this scope and can get garbage collected after # this function is exits - future = PyMPISingleTaskExecutor().submit(slow_callable) + future = PyMPISingleTaskExecutor(hostname_localhost=True).submit(slow_callable) future.add_done_callback(callback) return future diff --git a/tests/test_meta.py b/tests/test_meta.py index 7f63e5eb..4efd4d9b 100644 --- a/tests/test_meta.py +++ b/tests/test_meta.py @@ -114,6 +114,6 @@ def test_meta_executor_parallel(self): def test_errors(self): with self.assertRaises(TypeError): - PyMPIExecutor(max_workers=1, cores_per_worker=1, threads_per_core=2) + PyMPIExecutor(max_workers=1, cores_per_worker=1, threads_per_core=2, hostname_localhost=True) with self.assertRaises(TypeError): - PyMPIExecutor(max_workers=1, cores_per_worker=1, gpus_per_worker=1) + PyMPIExecutor(max_workers=1, cores_per_worker=1, gpus_per_worker=1, hostname_localhost=True) From 626398c466b482cfa6fefb1fbf810880b4884658 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 31 Jan 2024 17:41:51 +0100 Subject: [PATCH 5/6] Switch to latest --- .github/workflows/unittest-mpich.yml | 2 +- .github/workflows/unittest-openmpi.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/unittest-mpich.yml b/.github/workflows/unittest-mpich.yml index 80b4b5fa..2d32edc5 100644 --- a/.github/workflows/unittest-mpich.yml +++ b/.github/workflows/unittest-mpich.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: include: - - operating-system: macos-14 + - operating-system: macos-latest python-version: '3.12' label: osx-64-py-3-12-mpich prefix: /Users/runner/miniconda3/envs/my-env diff --git a/.github/workflows/unittest-openmpi.yml b/.github/workflows/unittest-openmpi.yml index 8815d228..9080055f 100644 --- a/.github/workflows/unittest-openmpi.yml +++ b/.github/workflows/unittest-openmpi.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: include: - - operating-system: macos-14 + - operating-system: macos-latest python-version: '3.12' label: osx-64-py-3-12-openmpi prefix: /Users/runner/miniconda3/envs/my-env From ecb96ce052f14af9b87f3c3097011ff6eae324b1 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 31 Jan 2024 17:48:33 +0100 Subject: [PATCH 6/6] Remove check-macos-latest.yml --- .github/workflows/check-macos-latest.yml | 35 ------------------------ 1 file changed, 35 deletions(-) delete mode 100644 .github/workflows/check-macos-latest.yml diff --git a/.github/workflows/check-macos-latest.yml b/.github/workflows/check-macos-latest.yml deleted file mode 100644 index dc28c9d4..00000000 --- a/.github/workflows/check-macos-latest.yml +++ /dev/null @@ -1,35 +0,0 @@ -# We are waiting on the macos-latest image to play nicely with MPI - -name: Is-macos-latest-working-yet - -on: - schedule: - - cron: '0 23 * * 2' - workflow_dispatch: - -jobs: - openmpi-on-macos-latest: - runs-on: macos-latest - steps: - - uses: actions/checkout@v2 - - uses: conda-incubator/setup-miniconda@v2.2.0 - with: - python-version: "3.11" - mamba-version: "*" - channels: conda-forge - miniforge-variant: Mambaforge - channel-priority: strict - auto-update-conda: true - environment-file: .ci_support/environment-openmpi.yml - - name: Test - shell: bash -l {0} - timeout-minutes: 10 - run: | - pip install versioneer[toml]==0.29 - pip install . --no-deps --no-build-isolation - cd tests - python -m unittest discover . - env: - OMPI_MCA_plm: 'isolated' - OMPI_MCA_rmaps_base_oversubscribe: 'yes' - OMPI_MCA_btl_vader_single_copy_mechanism: 'none'