Exemple #1
0
def transformer_factory(request):
    def set_and_get_factory(transformer_name):
        factory = ngt.make_transformer_factory(transformer_name)
        ngt.set_transformer_factory(factory)
        return factory

    transformer_name = request.param

    if pytest.config.getoption("--enable_flex"):
        if transformer_name == flex_gpu_transformer_name:
            if flex_gpu_transformer_name in ngt.transformer_choices():
                yield set_and_get_factory(transformer_name)
            else:
                raise ValueError("GPU not found, should not set --enable_flex"
                                 "flag for py.test.")
        else:
            pytest.skip(
                'Skip all other transformers since --enable_flex is set.')
    else:
        if transformer_name == flex_gpu_transformer_name:
            pytest.skip('Skip flex test since --enable_flex is not set.')
        else:
            yield set_and_get_factory(transformer_name)

    # Reset transformer factory to default
    ngt.set_transformer_factory(ngt.make_transformer_factory("numpy"))
Exemple #2
0
def transformer_factory(request):
    factory = ngt.make_transformer_factory(request.param)
    ngt.set_transformer_factory(factory)
    yield factory

    # Reset transformer factory to default
    ngt.set_transformer_factory(ngt.make_transformer_factory("numpy"))
Exemple #3
0
    def parse_args(self, gen_be=True):
        args = super(NgraphArgparser, self).parse_args()
        factory = ngt.make_transformer_factory(args.backend)
        ngt.set_transformer_factory(factory)

        # invert no_progress_bar meaning and store in args.progress_bar
        args.progress_bar = not args.no_progress_bar

        return args
Exemple #4
0
def transformer_factory(request):
    def set_and_get_factory(transformer_name):
        factory = ngt.make_transformer_factory(transformer_name)
        ngt.set_transformer_factory(factory)
        return factory

    name = request.config.getoption("--transformer")

    yield set_and_get_factory(name)

    # Reset transformer factory to default
    ngt.set_transformer_factory(ngt.make_transformer_factory("cpu"))
Exemple #5
0
    def make_and_set_transformer_factory(args):

        flex_args = ('fixed_point', 'flex_verbose', 'collect_flex_data')
        # default value for all flex args if not given, confusing with store_true in add_argument
        default = False

        if args.backend == flex_gpu_transformer_name:
            flex_args_dict = dict(
                (a, getattr(args, a, default)) for a in flex_args)
            factory = ngt.make_transformer_factory(args.backend,
                                                   **flex_args_dict)
        else:
            factory = ngt.make_transformer_factory(args.backend)

        ngt.set_transformer_factory(factory)
Exemple #6
0
                                         dtype=np.int32)
        utt_lens_val = ((2 * lbl_lens_val + 1) / float(max_utt_len)) * 100
        utt_lens_val = utt_lens_val.astype(np.int32)
        fprop_ctc = costfun(activs_val, lbls_val, utt_lens_val,
                            lbl_lens_val).copy()
        bprop_ctc = grad_costfun(activs_val, lbls_val, utt_lens_val,
                                 lbl_lens_val).copy()

        # compare with reference values
        costs_ref, grads_ref = ctc_ref(activs_val, lbls_val, utt_lens_val,
                                       lbl_lens_val)
        ng.testing.assert_allclose(fprop_ctc,
                                   costs_ref,
                                   rtol=1.0e-5,
                                   atol=1.0e-5)
        ng.testing.assert_allclose(bprop_ctc[0],
                                   grads_ref,
                                   rtol=1.0e-5,
                                   atol=1.0e-5)


if __name__ == '__main__':
    factory = ngt.make_transformer_factory('cpu')
    ngt.set_transformer_factory(factory)
    bsz = 4
    nout = np.random.randint(5, 10)
    max_lbl_len = np.random.randint(5, 20)
    max_utt_len = 2 * max_lbl_len + 1
    data_args = (nout, bsz, max_utt_len, max_lbl_len)
    test_ctc(factory, data_args)
Exemple #7
0
def test_gdm(args, transformer_factory):
    """
    Test the ngraph GradientDescentMomentum against the neon version across 10 update steps.
    """
    # set up parameters
    C = ng.make_axis(20, name="C")
    N = ng.make_axis(32, name="N", batch=True)

    be = gen_backend(backend='cpu', batch_size=N.length)

    # restrict to numpy transformer for now
    factory = ngt.make_transformer_factory('numpy')
    ngt.set_transformer_factory(factory)
    ngt.make_transformer()

    # generate dummy data (to initialize values)
    w_init = np.random.rand(C.length).astype('float32')

    # set up nervana graph
    X = ng.placeholder([C, N]).named('X')
    Y = ng.placeholder([N]).named('Y')
    W = ng.variable([C - 1], initial_value=w_init).named('W')

    ex = ExecutorFactory()
    transformer = ex.transformer

    lrate, mom, wdecay = args
    gdm = GradientDescentMomentum(learning_rate=lrate, momentum_coef=mom, wdecay=wdecay)
    cost = ng.sum(Y - ng.dot(W, X), out_axis=())

    # to call ngraph gdm, use (ngraph_W, _) = ngraph_optimize(x, y)
    # where (x, y) are nparrays that fill the placeholders X and Y
    updates = gdm(cost)
    ngraph_optimize = transformer.computation([W, updates], X, Y)
    transformer.initialize()

    # set up the neon gdm
    neon_gdm = NeonGradientDescentMomentum(learning_rate=lrate, momentum_coef=mom, wdecay=wdecay)
    # dev_v0 = be.zeros((C.length, 1))  # velocities are zero at the beginning
    dev_dw = be.zeros((C.length, 1))  # we fill the gradient info in the below
    dev_w_init = be.array(w_init)  # copy w_init to device
    param_list = [((dev_w_init, dev_dw), [])]

    # store the weights with each minibatch for debugging
    ng_Ws = []
    be_Ws = []

    # run for 20 minibatches
    for i, (x, y) in enumerate([generate_data(C.length, N.length) for _ in range(20)]):
        # obtain ngraph results
        (ng_W, _) = ngraph_optimize(x, y)
        ng_Ws.append(copy.deepcopy(ng_W))

        # obtain neon results
        dw = -1 * x.sum(axis=1)   # the gradients we compute analytically
        param_list[0][0][1].set(dw)  # fill the gradient

        neon_gdm.optimize([DummyLayer(param_list)], epoch=0)
        (param, grad), states = param_list[0]
        be_W = param.get()[:, 0]
        be_Ws.append(be_W)

        np.testing.assert_allclose(be_W, ng_W, rtol=1e-3)
Exemple #8
0
 def make_and_set_transformer_factory(self, args):
     factory = ngt.make_transformer_factory(args.backend)
     ngt.set_transformer_factory(factory)
Exemple #9
0
 def set_and_get_factory(transformer_name):
     factory = ngt.make_transformer_factory(transformer_name)
     ngt.set_transformer_factory(factory)
     return factory
Exemple #10
0
 def make_and_set_transformer_factory(self, args):
     if args.backend == flex_gpu_transformer_name:
             FlexNgraphArgparser.make_and_set_transformer_factory(args)
     else:
         factory = ngt.make_transformer_factory(args.backend)
         ngt.set_transformer_factory(factory)