<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def elmo_2x1024_128_2048cnn_1xhighway(dataset_name=None, pretrained=False, ctx=mx.cpu(), root=os.path.join(get_home_dir(), 'models'), **kwargs):
 r"""ELMo 2-layer BiLSTM with 1024 hidden units, 128 projection size, 1 highway layer. Parameters dataset_name : str or None, default None The dataset name on which the pre-trained model is trained. Options are 'gbw'. pretrained : bool, default False Whether to load the pre-trained weights for model. ctx : Context, default CPU The context in which to load the pre-trained weights. root : str, default '$MXNET_HOME/models' Location for keeping the model parameters. MXNET_HOME defaults to '~/.mxnet'. Returns ------- gluon.Block """


    predefined_args = {'rnn_type': 'lstmpc',
                       'output_size': 128,
                       'filters': [[1, 32], [2, 32], [3, 64], [4, 128],
                                   [5, 256], [6, 512], [7, 1024]],
                       'char_embed_size': 16,
                       'num_highway': 1,
                       'conv_layer_activation': 'relu',
                       'max_chars_per_token': 50,
                       'input_size': 128,
                       'hidden_size': 1024,
                       'proj_size': 128,
                       'num_layers': 2,
                       'cell_clip': 3,
                       'proj_clip': 3,
                       'skip_connection': True}
    assert all((k not in kwargs) for k in predefined_args), \
           'Cannot override predefined model settings.'
    predefined_args.update(kwargs)
    return _get_elmo_model(ELMoBiLM, 'elmo_2x1024_128_2048cnn_1xhighway', dataset_name, pretrained,
                           ctx, root, **predefined_args)