GitOrigin-RevId: e69acb72da
tags/v1.3.0
@@ -1,8 +1,36 @@ | |||
import os | |||
import platform | |||
import sys | |||
import pytest | |||
import megengine.functional | |||
import megengine.module | |||
from megengine import Parameter | |||
from megengine.core._imperative_rt.core2 import sync | |||
from megengine.distributed.helper import get_device_count_by_fork | |||
from megengine.jit import trace as _trace | |||
from megengine.module import Linear, Module | |||
sys.path.append(os.path.join(os.path.dirname(__file__), "helpers")) | |||
_ngpu = get_device_count_by_fork("gpu") | |||
@pytest.fixture(autouse=True) | |||
def skip_by_ngpu(request): | |||
if request.node.get_closest_marker("require_ngpu"): | |||
require_ngpu = int(request.node.get_closest_marker("require_ngpu").args[0]) | |||
if require_ngpu > _ngpu: | |||
pytest.skip("skipped for ngpu unsatisfied: {}".format(require_ngpu)) | |||
@pytest.fixture(autouse=True) | |||
def skip_distributed(request): | |||
if request.node.get_closest_marker("distributed_isolated"): | |||
if platform.system() in ("Windows", "Darwin"): | |||
pytest.skip( | |||
"skipped for distributed unsupported at platform: {}".format( | |||
platform.system() | |||
) | |||
) |
@@ -21,7 +21,6 @@ import megengine.autodiff as ad | |||
import megengine.distributed as dist | |||
import megengine.functional as F | |||
from megengine.device import get_default_device, set_default_device | |||
from megengine.distributed.helper import get_device_count_by_fork | |||
from megengine.functional.debug_param import set_conv_execution_strategy | |||
from megengine.module import AvgPool2d, BatchNorm2d, Conv2d, Linear, Module | |||
from megengine.optimizer import SGD | |||
@@ -194,11 +193,8 @@ def run_test( | |||
worker(max_err) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
def test_dp_correctness(): | |||
model_name = "mnist_model_with_test.mge" | |||
model_path = os.path.join(os.path.dirname(__file__), model_name) | |||
@@ -32,11 +32,8 @@ class Simple(Module): | |||
return x | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
def test_param_pack(): | |||
data = np.ones([1], dtype="float32") | |||
@@ -61,11 +58,8 @@ def test_param_pack(): | |||
worker() | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
def test_param_pack_with_no_param(): | |||
data = np.ones([1], dtype="float32") | |||
@@ -10,6 +10,7 @@ import itertools | |||
import os | |||
import numpy as np | |||
import pytest | |||
import megengine | |||
import megengine.autodiff as ad | |||
@@ -22,57 +23,19 @@ from megengine.module import Module | |||
class Simple(Module): | |||
def __init__(self): | |||
super().__init__() | |||
self.a = Parameter([1.23], dtype=np.float32) | |||
self.a = Parameter([1.23], dtype="float32") | |||
def forward(self, x): | |||
x = x * self.a | |||
return x | |||
def test_sgd_momentum(): | |||
net = Simple() | |||
@pytest.mark.parametrize("trace_mode", [True, False, None]) | |||
@pytest.mark.parametrize("inplace_mode", [True, False]) | |||
def test_sgd_momentum(monkeypatch, trace_mode, inplace_mode): | |||
with monkeypatch.context() as mk: | |||
mk.setenv("MEGENGINE_INPLACE_UPDATE", str(int(inplace_mode))) | |||
optim = optimizer.SGD(net.parameters(), lr=1.0, momentum=0.9) | |||
optim.clear_grad() | |||
gm = ad.GradManager().attach(net.parameters()) | |||
data = tensor([2.34]) | |||
# do a step of train | |||
with gm: | |||
loss = net(data) | |||
gm.backward(loss) | |||
optim.step() | |||
np.testing.assert_almost_equal(optim._state[net.a]["momentum_buffer"].numpy(), 2.34) | |||
# do a step of infer | |||
loss = net(data) | |||
np.testing.assert_almost_equal(loss.numpy(), 2.34 * (1.23 - 2.34), 5) | |||
np.testing.assert_almost_equal(optim._state[net.a]["momentum_buffer"].numpy(), 2.34) | |||
# do a step of train | |||
optim.clear_grad() | |||
with gm: | |||
loss = net(data) | |||
gm.backward(loss) | |||
optim.step() | |||
np.testing.assert_almost_equal(loss.numpy(), 2.34 * (1.23 - 2.34), 5) | |||
np.testing.assert_almost_equal( | |||
optim._state[net.a]["momentum_buffer"].numpy(), 0.9 * 2.34 + 2.34, 5 | |||
) | |||
def test_sgd_momentum_trace(): | |||
origin_inplace = os.getenv("MEGENGINE_INPLACE_UPDATE") | |||
symbolic = (True, False) | |||
inplace = (0, 1) | |||
for symbolic, inplace in itertools.product(symbolic, inplace): | |||
os.environ["MEGENGINE_INPLACE_UPDATE"] = str(inplace) | |||
@trace(symbolic=symbolic) | |||
def train_func(data, *, model=None, optim=None, gm=None): | |||
optim.clear_grad() | |||
with gm: | |||
@@ -81,11 +44,16 @@ def test_sgd_momentum_trace(): | |||
optim.step() | |||
return loss | |||
@trace(symbolic=symbolic) | |||
if trace_mode is not None: | |||
train_func = trace(symbolic=trace_mode)(train_func) | |||
def eval_func(data, *, model=None, optim=None, gm=None): | |||
loss = net(data) | |||
return loss | |||
if trace_mode is not None: | |||
eval_func = trace(symbolic=trace_mode)(eval_func) | |||
net = Simple() | |||
optim = optimizer.SGD(net.parameters(), lr=1.0, momentum=0.9) | |||
gm = ad.GradManager().attach(net.parameters()) | |||
@@ -109,7 +77,3 @@ def test_sgd_momentum_trace(): | |||
np.testing.assert_almost_equal( | |||
optim._state[net.a]["momentum_buffer"].numpy(), 0.9 * 2.34 + 2.34, 5 | |||
) | |||
if origin_inplace: | |||
os.environ["MEGENGINE_INPLACE_UPDATE"] = origin_inplace | |||
else: | |||
del os.environ["MEGENGINE_INPLACE_UPDATE"] |
@@ -133,15 +133,12 @@ def test_regression_1762(): | |||
gm.backward(loss) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_remote_grad(): | |||
@pytest.mark.parametrize( | |||
"trace_mode", [True, False, None], ids=["symbolic", "trace", "no_trace"] | |||
) | |||
def test_remote_grad(trace_mode): | |||
@dist.launcher | |||
def worker(): | |||
rank = dist.get_rank() | |||
@@ -166,14 +163,10 @@ def test_remote_grad(): | |||
gm.backward(y) | |||
opt.step().clear_grad() | |||
train_funcs = [ | |||
train_func, | |||
trace(symbolic=False)(train_func), | |||
trace(symbolic=True)(train_func), | |||
] | |||
if trace_mode is not None: | |||
train_func = trace(symbolic=trace_mode)(train_func) | |||
for func in train_funcs: | |||
for i in range(3): | |||
func(x) | |||
for i in range(3): | |||
train_func(x) | |||
worker() |
@@ -51,13 +51,7 @@ def save_to(self, name="grad"): | |||
return callback | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_dist_grad(): | |||
world_size = 2 | |||
@@ -37,20 +37,15 @@ def _assert_q_val(q, val): | |||
assert ret == val | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("backend", ["nccl"]) | |||
@pytest.mark.isolated_distributed | |||
def test_init_process_group(): | |||
def test_init_process_group(backend): | |||
world_size = 2 | |||
server = dist.Server() | |||
port = server.py_server_port | |||
def worker(rank, backend): | |||
def worker(rank): | |||
dist.init_process_group("localhost", port, world_size, rank, rank, backend) | |||
assert dist.is_distributed() == True | |||
assert dist.get_rank() == rank | |||
@@ -67,27 +62,18 @@ def test_init_process_group(): | |||
assert isinstance(dist.get_client(), dist.Client) | |||
def check(backend): | |||
procs = [] | |||
for rank in range(world_size): | |||
p = mp.Process(target=worker, args=(rank, backend)) | |||
p.start() | |||
procs.append(p) | |||
for p in procs: | |||
p.join(20) | |||
assert p.exitcode == 0 | |||
procs = [] | |||
for rank in range(world_size): | |||
p = mp.Process(target=worker, args=(rank,)) | |||
p.start() | |||
procs.append(p) | |||
check("nccl") | |||
for p in procs: | |||
p.join(20) | |||
assert p.exitcode == 0 | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 3, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(3) | |||
@pytest.mark.isolated_distributed | |||
def test_new_group(): | |||
world_size = 3 | |||
@@ -106,13 +92,7 @@ def test_new_group(): | |||
worker() | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_group_barrier(): | |||
world_size = 2 | |||
@@ -142,13 +122,7 @@ def test_group_barrier(): | |||
assert p.exitcode == 0 | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_synchronized(): | |||
world_size = 2 | |||
@@ -186,17 +160,9 @@ def test_synchronized(): | |||
assert p.exitcode == 0 | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_user_set_get(): | |||
world_size = 2 | |||
@dist.launcher | |||
def worker(): | |||
# set in race condition | |||
@@ -33,15 +33,10 @@ from megengine.functional.distributed import ( | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(), (1,), (2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_reduce_sum(): | |||
def test_reduce_sum(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -52,27 +47,18 @@ def test_reduce_sum(): | |||
else: | |||
assert np.allclose(output.numpy(), 0) | |||
def check(shape): | |||
x = np.random.rand(*shape) | |||
y = np.random.rand(*shape) | |||
z = x + y | |||
data = (x, y) | |||
expect = (z, None) | |||
worker(data, expect) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = x + y | |||
data = (x, y) | |||
expect = (z, None) | |||
worker(data, expect) | |||
for shape in [(), (1,), (2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(), (1,), (2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_broadcast(): | |||
def test_broadcast(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -80,26 +66,17 @@ def test_broadcast(): | |||
output = broadcast(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape) | |||
y = x + 1 | |||
data = (x, y) | |||
expect = (x, x) | |||
worker(data, expect) | |||
for shape in [(), (1,), (2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = x + 1 | |||
data = (x, y) | |||
expect = (x, x) | |||
worker(data, expect) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(1,), (2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_all_gather(): | |||
def test_all_gather(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -107,27 +84,18 @@ def test_all_gather(): | |||
output = all_gather(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape).astype("float32") | |||
y = np.random.rand(*shape).astype("float32") | |||
z = np.concatenate((x, y)) | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = np.concatenate((x, y)) | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
for shape in [(2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(2, 3), (8, 10), (88, 44)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_reduce_scatter_sum(): | |||
def test_reduce_scatter_sum(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -135,27 +103,18 @@ def test_reduce_scatter_sum(): | |||
output = reduce_scatter_sum(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape).astype("float32") | |||
y = np.random.rand(*shape).astype("float32") | |||
z = x + y | |||
data = (x, y) | |||
expect = (z[: shape[0] // 2], z[shape[0] // 2 :]) | |||
worker(data, expect) | |||
for shape in [(2, 4), (8, 10), (88, 44)]: | |||
check(shape) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = x + y | |||
data = (x, y) | |||
expect = (z[: shape[0] // 2], z[shape[0] // 2 :]) | |||
worker(data, expect) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(), (1,), (2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_all_reduce_sum(): | |||
def test_all_reduce_sum(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -163,27 +122,18 @@ def test_all_reduce_sum(): | |||
output = all_reduce_sum(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape) | |||
y = np.random.rand(*shape) | |||
z = x + y | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = x + y | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
for shape in [(), (1,), (2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(), (1,), (2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_all_reduce_max(): | |||
def test_all_reduce_max(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -191,27 +141,18 @@ def test_all_reduce_max(): | |||
output = all_reduce_max(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape) | |||
y = np.random.rand(*shape) | |||
z = np.maximum(x, y) | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
for shape in [(), (1,), (2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = np.maximum(x, y) | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(), (1,), (2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_all_reduce_min(): | |||
def test_all_reduce_min(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -219,27 +160,18 @@ def test_all_reduce_min(): | |||
output = all_reduce_min(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape) | |||
y = np.random.rand(*shape) | |||
z = np.minimum(x, y) | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = np.minimum(x, y) | |||
data = (x, y) | |||
expect = (z, z) | |||
worker(data, expect) | |||
for shape in [(), (1,), (2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(2, 3), (8, 10), (99, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_gather(): | |||
def test_gather(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -250,27 +182,18 @@ def test_gather(): | |||
else: | |||
assert np.allclose(output.numpy(), 0) | |||
def check(shape): | |||
x = np.random.rand(*shape).astype("float32") | |||
y = np.random.rand(*shape).astype("float32") | |||
z = np.concatenate((x, y)) | |||
data = (x, y) | |||
expect = (z, None) | |||
worker(data, expect) | |||
for shape in [(2, 3), (8, 10), (99, 77)]: | |||
check(shape) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
z = np.concatenate((x, y)) | |||
data = (x, y) | |||
expect = (z, None) | |||
worker(data, expect) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(2, 3), (8, 10), (100, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_scatter(): | |||
def test_scatter(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -278,26 +201,17 @@ def test_scatter(): | |||
output = scatter(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape).astype("float32") | |||
y = x + 1 | |||
data = (x, y) | |||
expect = (x[: shape[0] // 2], x[shape[0] // 2 :]) | |||
worker(data, expect) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = x + 1 | |||
data = (x, y) | |||
expect = (x[: shape[0] // 2], x[shape[0] // 2 :]) | |||
worker(data, expect) | |||
for shape in [(2, 3), (8, 10), (100, 77)]: | |||
check(shape) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.parametrize("shape", [(2, 3), (8, 10), (100, 77)], ids=str) | |||
@pytest.mark.isolated_distributed | |||
def test_all_to_all(): | |||
def test_all_to_all(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(data, expect): | |||
rank = dist.get_rank() | |||
@@ -305,28 +219,19 @@ def test_all_to_all(): | |||
output = all_to_all(inp) | |||
assert np.allclose(output.numpy(), expect[rank]) | |||
def check(shape): | |||
x = np.random.rand(*shape).astype("float32") | |||
y = np.random.rand(*shape).astype("float32") | |||
a = np.concatenate((x[: shape[0] // 2], y[: shape[0] // 2])) | |||
b = np.concatenate((x[shape[0] // 2 :], y[shape[0] // 2 :])) | |||
data = (x, y) | |||
expect = (a, b) | |||
worker(data, expect) | |||
for shape in [(2, 3), (8, 10), (100, 77)]: | |||
check(shape) | |||
x = np.random.random_sample(shape).astype("float32") | |||
y = np.random.random_sample(shape).astype("float32") | |||
a = np.concatenate((x[: shape[0] // 2], y[: shape[0] // 2])) | |||
b = np.concatenate((x[shape[0] // 2 :], y[shape[0] // 2 :])) | |||
data = (x, y) | |||
expect = (a, b) | |||
worker(data, expect) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_io_remote(): | |||
@pytest.mark.parametrize("shape", [(), (1,), (4, 5)], ids=str) | |||
def test_io_remote(shape): | |||
@dist.launcher(n_gpus=2) | |||
def worker(val, shape): | |||
rank = dist.get_rank() | |||
@@ -339,6 +244,5 @@ def test_io_remote(): | |||
assert y.device == "gpu1" | |||
np.testing.assert_almost_equal(val, y.numpy()) | |||
for shape in [(), (1,), (4, 5)]: | |||
val = np.random.rand(*shape) | |||
worker(val, shape) | |||
val = np.random.random_sample(shape).astype("float32") | |||
worker(val, shape) |
@@ -355,26 +355,17 @@ def copy_test(dst, src): | |||
assert np.allclose(data, z.numpy()) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") == 0, reason="CUDA is disabled") | |||
@pytest.mark.require_ngpu(1) | |||
def test_copy_h2d(): | |||
copy_test("cpu0", "gpu0") | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") == 0, reason="CUDA is disabled") | |||
@pytest.mark.require_ngpu(1) | |||
def test_copy_d2h(): | |||
copy_test("gpu0", "cpu0") | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
def test_copy_d2d(): | |||
copy_test("gpu0", "gpu1") | |||
copy_test("gpu0:0", "gpu0:1") |
@@ -22,13 +22,7 @@ from megengine.module import BatchNorm1d, BatchNorm2d, SyncBatchNorm | |||
_assert_allclose = functools.partial(np.testing.assert_allclose, atol=5e-6, rtol=5e-6) | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_syncbn(): | |||
nr_chan = 8 | |||
@@ -125,9 +119,6 @@ def test_batchnorm(): | |||
_assert_allclose(yv1.numpy(), yv_expect) | |||
@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) | |||
@@ -215,9 +206,6 @@ def test_batchnorm2d(): | |||
_assert_allclose(yv1.numpy(), yv_expect) | |||
@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) | |||
@@ -285,9 +273,6 @@ def test_batchnorm_no_stats(): | |||
_assert_allclose(yv.numpy(), yv_expect) | |||
@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) | |||
@@ -333,9 +318,6 @@ def test_batchnorm2d_no_stats(): | |||
_assert_allclose(yv.numpy(), yv_expect) | |||
@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) | |||
@@ -65,13 +65,7 @@ def test_passive_observer(): | |||
assert m.get_qparams() == {"scale": mge.tensor(2.0)} | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_sync_min_max_observer(): | |||
word_size = get_device_count_by_fork("gpu") | |||
@@ -89,13 +83,7 @@ def test_sync_min_max_observer(): | |||
worker() | |||
@pytest.mark.skipif( | |||
platform.system() == "Darwin", reason="do not imp GPU mode at macos now" | |||
) | |||
@pytest.mark.skipif( | |||
platform.system() == "Windows", reason="windows disable MGB_ENABLE_OPR_MM" | |||
) | |||
@pytest.mark.skipif(get_device_count_by_fork("gpu") < 2, reason="need more gpu device") | |||
@pytest.mark.require_ngpu(2) | |||
@pytest.mark.isolated_distributed | |||
def test_sync_exponential_moving_average_observer(): | |||
word_size = get_device_count_by_fork("gpu") | |||