/
githubmirror
/
incubator-mxnet
Обзор
Документация
Войти
/
githubmirror
/
incubator-mxnet
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/python/gpu/test_extensions_gpu.py
112 строк
4 KB
hankaj
Python string formatting (#21136)
16 сен 2022, 14:01
Не верифицирован
16 сен 2022, 14:01
c8922fe
Код
Авторство
О чём код?
# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # This test checks if dynamic loading of library into MXNet is successful import os import platform import mxnet as mx import numpy as np from mxnet import nd from mxnet.gluon import nn from mxnet.base import MXNetError from mxnet.test_utils import download, is_cd_run, assert_almost_equal, default_device import pytest base_path = os.path.join(os.path.dirname(__file__), "../../..") def check_platform(supported_platforms=['x86_64', 'AMD64']): return platform.machine() not in supported_platforms @pytest.mark.skipif(check_platform(), reason="not all machine types supported") @pytest.mark.skipif(is_cd_run(), reason="continuous delivery run - ignoring test") def test_custom_op_gpu(): # possible places to find library file if (os.name=='posix'): lib = 'libcustomop_gpu_lib.so' if os.path.exists(lib): fname = lib elif os.path.exists(os.path.join(base_path, 'build/'+lib)): fname = os.path.join(base_path, 'build/'+lib) else: raise MXNetError(f"library {lib} not found ") elif (os.name=='nt'): lib = 'libcustomop_gpu_lib.dll' if os.path.exists('windows_package\\lib\\'+lib): fname = 'windows_package\\lib\\'+lib else: raise MXNetError(f"library {lib} not found ") fname = os.path.abspath(fname) # load the library containing gemm custom operators mx.library.load(fname) # test symbol custom relu operator in gpu b = mx.nd.array([[-2,-1],[1,2]], ctx=mx.gpu()) c = mx.sym.Variable('c') d = mx.sym.Variable('d') e = mx.sym.my_relu(c) base = mx.sym.relu(d) in_grad = [mx.nd.empty((2,2), ctx=mx.gpu())] in_grad_base = [mx.nd.empty((2,2), ctx=mx.gpu())] exe = e._bind(ctx=mx.gpu(), args={'c':b}, args_grad=in_grad) exe_base = base._bind(ctx=mx.gpu(), args={'d':b}, args_grad=in_grad_base) out = exe.forward() out_base = exe_base.forward() assert_almost_equal(out_base[0].asnumpy(), out[0].asnumpy(), rtol=1e-3, atol=1e-3) # test custom relu backward out_grad = mx.nd.ones((2,2), ctx=mx.gpu()) exe.backward([out_grad]) exe_base.backward([out_grad]) assert_almost_equal(in_grad_base[0].asnumpy(), in_grad[0].asnumpy(), rtol=1e-3, atol=1e-3) # test custom noisy relu producing deterministic result given same seed managed by mxnet d1 = mx.nd.ones(shape=(10,10,10), ctx=mx.cpu()) d2 = mx.nd.ones(shape=(10,10,10), ctx=mx.gpu()) mx.random.seed(128, ctx=mx.cpu()) r1 = mx.nd.my_noisy_relu(d1) mx.random.seed(128, ctx=mx.cpu()) r2 = mx.nd.my_noisy_relu(d1) assert_almost_equal(r1.asnumpy(), r2.asnumpy(), rtol=1e-3, atol=1e-3) mx.random.seed(128, ctx=mx.gpu()) r3 = mx.nd.my_noisy_relu(d2) mx.random.seed(128, ctx=mx.gpu()) r4 = mx.nd.my_noisy_relu(d2) assert_almost_equal(r3.asnumpy(), r4.asnumpy(), rtol=1e-3, atol=1e-3) @pytest.mark.skipif(check_platform(['x86_64']), reason="not all machine types supported") @pytest.mark.skipif(is_cd_run(), reason="continuous delivery run - ignoring test") def test_external_op(): # check if operator already exists if hasattr(mx.nd, 'min_ex'): raise MXNetError('Operator already loaded') lib = 'libexternal_lib.so' fname = os.path.join(base_path,'example/extensions/lib_external_ops/build/'+lib) if not os.path.exists(fname): raise MXNetError(f"library {lib} not found ") fname = os.path.abspath(fname) mx.library.load(fname, False) # execute operator try: mx.nd.min_ex() except: raise MXNetError('Operator not loaded successfully')