GitOrigin-RevId: 97d2b496bb
tags/v0.6.0
| @@ -426,6 +426,14 @@ endif() | |||
| set(MGB_JIT ${MGE_WITH_JIT}) | |||
| set(MGB_JIT_HALIDE ${MGE_WITH_HALIDE}) | |||
| IF(APPLE) | |||
| set(CMAKE_THREAD_LIBS_INIT "-lpthread") | |||
| set(CMAKE_HAVE_THREADS_LIBRARY 1) | |||
| set(CMAKE_USE_WIN32_THREADS_INIT 0) | |||
| set(CMAKE_USE_PTHREADS_INIT 1) | |||
| set(THREADS_PREFER_PTHREAD_FLAG ON) | |||
| ENDIF() | |||
| # Thread | |||
| if(CMAKE_THREAD_LIBS_INIT) | |||
| set(MGB_HAVE_THREAD 1) | |||
| @@ -641,14 +649,6 @@ elseif(TARGET _xxx) | |||
| ) | |||
| endif() | |||
| IF(APPLE) | |||
| set(CMAKE_THREAD_LIBS_INIT "-lpthread") | |||
| set(CMAKE_HAVE_THREADS_LIBRARY 1) | |||
| set(CMAKE_USE_WIN32_THREADS_INIT 0) | |||
| set(CMAKE_USE_PTHREADS_INIT 1) | |||
| set(THREADS_PREFER_PTHREAD_FLAG ON) | |||
| ENDIF() | |||
| # Configure and install pkg-config. | |||
| # Note that unlike the Config.cmake modules, this is not relocatable (and not | |||
| # really portable) because we have two dependencies without pkg-config | |||
| @@ -11,11 +11,7 @@ find_package(NumPy REQUIRED) | |||
| find_package(SWIG REQUIRED) | |||
| set(SWIG_SRC src/swig/mgb.i) | |||
| if (APPLE) | |||
| set(CMAKE_SWIG_FLAGS -Wall -threads -py3 -modern) | |||
| else() | |||
| set(CMAKE_SWIG_FLAGS -Wall -threads -py3 -modern -DSWIGWORDSIZE64) | |||
| endif() | |||
| set(CMAKE_SWIG_FLAGS -Wall -threads -py3 -modern -DSWIGWORDSIZE64) | |||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") | |||
| file(GLOB_RECURSE OPR_DECL_SRCS "${PROJECT_SOURCE_DIR}/src/**/*.oprdecl") | |||
| @@ -285,8 +285,8 @@ class exc_opr_tracker_scope(_GraphPropertyBase): | |||
| ), "bad args for exc_opr_tracker_scope: {!r} {!r}".format(comp_graph, tracker) | |||
| super().__init__(comp_graph, tracker) | |||
| __prop_setup__ = _mgb._config.begin_set_exc_opr_tracker | |||
| __prop_clear__ = _mgb._config.end_set_exc_opr_tracker | |||
| __prop_setup__ = staticmethod(_mgb._config.begin_set_exc_opr_tracker) | |||
| __prop_clear__ = staticmethod(_mgb._config.end_set_exc_opr_tracker) | |||
| class opr_priority_scope(_GraphPropertyBase): | |||
| @@ -312,8 +312,8 @@ class opr_priority_scope(_GraphPropertyBase): | |||
| def __init__(self, comp_graph, priority): | |||
| super().__init__(comp_graph, int(priority)) | |||
| __prop_setup__ = _mgb._config.begin_set_opr_priority | |||
| __prop_clear__ = _mgb._config.end_set_opr_priority | |||
| __prop_setup__ = staticmethod(_mgb._config.begin_set_opr_priority) | |||
| __prop_clear__ = staticmethod(_mgb._config.end_set_opr_priority) | |||
| OprTrackerResult = collections.namedtuple( | |||
| @@ -6,6 +6,7 @@ | |||
| # Unless required by applicable law or agreed to in writing, | |||
| # software distributed under the License is distributed on an | |||
| # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| import platform | |||
| import resource | |||
| import sys | |||
| import threading | |||
| @@ -32,10 +33,16 @@ class AlternativeRecursionLimit: | |||
| self.orig_rlim_stack_soft, | |||
| self.orig_rlim_stack_hard, | |||
| ) = resource.getrlimit(resource.RLIMIT_STACK) | |||
| resource.setrlimit( | |||
| resource.RLIMIT_STACK, | |||
| (self.orig_rlim_stack_hard, self.orig_rlim_stack_hard), | |||
| ) | |||
| # FIXME: https://bugs.python.org/issue34602, python3 release version | |||
| # on Macos always have this issue, not all user install python3 from src | |||
| try: | |||
| resource.setrlimit( | |||
| resource.RLIMIT_STACK, | |||
| (self.orig_rlim_stack_hard, self.orig_rlim_stack_hard), | |||
| ) | |||
| except ValueError as exc: | |||
| if platform.system() != "Darwin": | |||
| raise exc | |||
| # increase recursion limit | |||
| sys.setrecursionlimit(self.new_py_limit) | |||
| self.count += 1 | |||
| @@ -45,10 +52,14 @@ class AlternativeRecursionLimit: | |||
| self.count -= 1 | |||
| if self.count == 0: | |||
| sys.setrecursionlimit(self.orig_py_limit) | |||
| resource.setrlimit( | |||
| resource.RLIMIT_STACK, | |||
| (self.orig_rlim_stack_soft, self.orig_rlim_stack_hard), | |||
| ) | |||
| try: | |||
| resource.setrlimit( | |||
| resource.RLIMIT_STACK, | |||
| (self.orig_rlim_stack_soft, self.orig_rlim_stack_hard), | |||
| ) | |||
| except ValueError as exc: | |||
| if platform.system() != "Darwin": | |||
| raise exc | |||
| _max_recursion_limit_context_manager = AlternativeRecursionLimit(2 ** 31 - 1) | |||
| @@ -32,12 +32,9 @@ void _init_bfloat16_types(PyObject *m); // implemented in bfloat16.cpp | |||
| %template(_PairStringSizeT) std::pair<std::string, size_t>; | |||
| %template(_PairSizeTSizeT) std::pair<size_t, size_t>; | |||
| /* | |||
| * | |||
| * real define uint64_t here, BUT, do not define SWIGWORDSIZE64 | |||
| * at osx env, at this time uint64_t means unsigned long long, | |||
| * BUT, unsigned long long do not have type_name() method at c++, | |||
| * when define SWIGWORDSIZE64 at linux env, uint64_t means | |||
| * unsigned long int, more detail refs stdint.i | |||
| * swig use uint64_t have compat build issue with | |||
| * clang at osx env, so we use unsigned long to | |||
| * replace uint64_t,more detail refs stdint.i | |||
| * | |||
| */ | |||
| %template(_VectorPairUint64String) std::vector<std::pair<unsigned long int, std::string>>; | |||
| @@ -7,10 +7,12 @@ | |||
| # software distributed under the License is distributed on an | |||
| # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| import multiprocessing as mp | |||
| import platform | |||
| import subprocess | |||
| import sys | |||
| import numpy as np | |||
| import pytest | |||
| def worker(master_ip, master_port, world_size, rank, dev, trace): | |||
| @@ -84,6 +86,9 @@ def start_workers(worker, world_size, trace=False): | |||
| assert p.exitcode == 0 | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| def test_distributed(): | |||
| start_workers(worker, 2, trace=True) | |||
| start_workers(worker, 2, trace=False) | |||
| @@ -7,6 +7,7 @@ | |||
| # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| import multiprocessing as mp | |||
| import platform | |||
| import numpy as np | |||
| import pytest | |||
| @@ -25,6 +26,9 @@ def _init_process_group_wrapper(world_size, rank, dev, backend, q): | |||
| dist.init_process_group("localhost", port, world_size, rank, dev, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_reduce_sum(): | |||
| world_size = 2 | |||
| @@ -61,6 +65,9 @@ def test_reduce_sum(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_gather(): | |||
| world_size = 2 | |||
| @@ -97,6 +104,9 @@ def test_gather(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_broadcast(): | |||
| world_size = 2 | |||
| @@ -129,6 +139,9 @@ def test_broadcast(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_scatter(): | |||
| world_size = 2 | |||
| @@ -165,6 +178,9 @@ def test_scatter(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_all_to_all(): | |||
| world_size = 2 | |||
| @@ -199,6 +215,9 @@ def test_all_to_all(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_all_gather(): | |||
| world_size = 2 | |||
| @@ -232,6 +251,9 @@ def test_all_gather(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_reduce_scatter_sum(): | |||
| world_size = 2 | |||
| @@ -269,6 +291,9 @@ def test_reduce_scatter_sum(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_all_reduce_sum(): | |||
| world_size = 2 | |||
| @@ -302,6 +327,9 @@ def test_all_reduce_sum(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_all_reduce_max(): | |||
| world_size = 2 | |||
| @@ -335,6 +363,9 @@ def test_all_reduce_max(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_all_reduce_min(): | |||
| world_size = 2 | |||
| @@ -368,6 +399,9 @@ def test_all_reduce_min(): | |||
| check(shape, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_bcast_param(): | |||
| world_size = 2 | |||
| @@ -6,6 +6,7 @@ | |||
| # software distributed under the License is distributed on an | |||
| # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| import multiprocessing as mp | |||
| import platform | |||
| import queue | |||
| from time import sleep | |||
| @@ -41,6 +42,9 @@ def _init_process_group_wrapper(world_size, rank, dev, backend, q): | |||
| dist.init_process_group(_LOCALHOST, port, world_size, rank, dev, backend) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_create_mm_server(): | |||
| def worker(): | |||
| @@ -60,6 +64,9 @@ def test_create_mm_server(): | |||
| assert p.exitcode == 0 | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_init_process_group(): | |||
| world_size = 2 | |||
| @@ -92,6 +99,9 @@ def test_init_process_group(): | |||
| check("ucx") | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_group_barrier(): | |||
| world_size = 2 | |||
| @@ -124,6 +134,9 @@ def test_group_barrier(): | |||
| assert p0.exitcode == 0 and p1.exitcode == 0 | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_synchronized(): | |||
| world_size = 2 | |||
| @@ -7,6 +7,7 @@ | |||
| # software distributed under the License is distributed on an | |||
| # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| import multiprocessing as mp | |||
| import platform | |||
| import numpy as np | |||
| import pytest | |||
| @@ -18,6 +19,9 @@ from megengine.module import BatchNorm1d, BatchNorm2d, SyncBatchNorm | |||
| from megengine.test import assertTensorClose | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| @pytest.mark.isolated_distributed | |||
| def test_syncbn(): | |||
| nr_chan = 8 | |||
| @@ -136,6 +140,9 @@ def test_batchnorm(): | |||
| assertTensorClose(yv_expect, yv1.numpy(), max_err=5e-6) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| def test_syncbn1d(): | |||
| nr_chan = 8 | |||
| data_shape = (3, nr_chan, 4) | |||
| @@ -231,6 +238,9 @@ def test_batchnorm2d(): | |||
| assertTensorClose(yv_expect, yv1.numpy(), max_err=5e-6) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| def test_syncbn2d(): | |||
| nr_chan = 8 | |||
| data_shape = (3, nr_chan, 16, 16) | |||
| @@ -302,6 +312,9 @@ def test_batchnorm_no_stats(): | |||
| assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| def test_syncbn_no_stats(): | |||
| nr_chan = 8 | |||
| data_shape = (3, nr_chan, 4) | |||
| @@ -351,6 +364,9 @@ def test_batchnorm2d_no_stats(): | |||
| assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) | |||
| @pytest.mark.skipif( | |||
| platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
| ) | |||
| def test_syncbn2d_no_stats(): | |||
| nr_chan = 8 | |||
| data_shape = (3, nr_chan, 16, 16) | |||
| @@ -141,5 +141,17 @@ function do_build() { | |||
| done | |||
| } | |||
| function third_party_prepare() { | |||
| if [[ -z ${ALREADY_INSTALL_THIRD_PARTY} ]] | |||
| then | |||
| echo "init third_party..." | |||
| ${SRC_DIR}/third_party/prepare.sh | |||
| ${SRC_DIR}/third_party/install-mkl.sh | |||
| else | |||
| echo "skip init third_party..." | |||
| fi | |||
| } | |||
| ###################### | |||
| third_party_prepare | |||
| do_build | |||
| @@ -1,20 +1,6 @@ | |||
| #!/bin/bash -e | |||
| READLINK=readlink | |||
| OS=$(uname -s) | |||
| if [ $OS = "Darwin" ];then | |||
| READLINK=greadlink | |||
| else | |||
| echo "ERR: only run at macos env" | |||
| exit -1 | |||
| fi | |||
| SRC_DIR=$($READLINK -f "`dirname $0`/../../../") | |||
| echo ${SRC_DIR} | |||
| ALL_PYTHON="3.5.9 3.6.10 3.7.7 3.8.3" | |||
| #install env before use greadlink | |||
| function try_install_brew() { | |||
| which brew | |||
| if [ $? -eq 0 ]; then | |||
| @@ -34,13 +20,33 @@ function try_install_brew() { | |||
| } | |||
| function install_brew_package() { | |||
| BREW_PACKAGE="openssl readline sqlite3 xz gdbm zlib pyenv wget swig coreutils llvm" | |||
| BREW_PACKAGE="openssl readline sqlite3 xz gdbm zlib pyenv wget swig coreutils llvm git-lfs" | |||
| for pak in ${BREW_PACKAGE} | |||
| do | |||
| echo "###### do command: brew install ${pak}" | |||
| brew install ${pak} | |||
| done | |||
| git lfs install | |||
| } | |||
| try_install_brew | |||
| install_brew_package | |||
| READLINK=readlink | |||
| OS=$(uname -s) | |||
| if [ $OS = "Darwin" ];then | |||
| READLINK=greadlink | |||
| else | |||
| echo "ERR: only run at macos env" | |||
| exit -1 | |||
| fi | |||
| SRC_DIR=$($READLINK -f "`dirname $0`/../../../") | |||
| echo ${SRC_DIR} | |||
| ALL_PYTHON="3.5.9 3.6.10 3.7.7 3.8.3" | |||
| function install_python_package() { | |||
| for pak in ${ALL_PYTHON} | |||
| @@ -51,7 +57,7 @@ function install_python_package() { | |||
| else | |||
| env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install ${pak} | |||
| fi | |||
| echo "###### do command: /Users/${USER}/.pyenv/versions/${pak}/bin/python3 -m pip install numpy wheel" | |||
| echo "###### do command: /Users/${USER}/.pyenv/versions/${pak}/bin/python3 -m pip install numpy wheel requests tqdm tabulate" | |||
| /Users/${USER}/.pyenv/versions/${pak}/bin/python3 -m pip install numpy wheel | |||
| echo "###### do command: /Users/${USER}/.pyenv/versions/${pak}/bin/python3 -m pip install -r ${SRC_DIR}/python_module/requires-test.txt" | |||
| /Users/${USER}/.pyenv/versions/${pak}/bin/python3 -m pip install -r ${SRC_DIR}/python_module/requires-test.txt | |||
| @@ -95,8 +101,6 @@ function append_path_env_message() { | |||
| } | |||
| ############install env now########### | |||
| try_install_brew | |||
| install_brew_package | |||
| install_python_package | |||
| install_cmake | |||
| append_path_env_message | |||
| @@ -139,9 +139,12 @@ class SigHandlerInit { | |||
| mgb_log_error("%s: caught deadly signal %d(%s)", msg0, signum, | |||
| strsignal(signum)); | |||
| } | |||
| //FIXME: imp backtrace for macos | |||
| #ifndef __APPLE__ | |||
| std::string bp; | |||
| debug::backtrace(2).fmt_to_str(bp); | |||
| mgb_log_error("%s", bp.c_str()); | |||
| #endif | |||
| exit(EXIT_FAILURE); | |||
| } | |||