Run the bert transformer layer by FasterTransformer. Args: inputs: A tf.Tensor with shape [batch_size, seq_len, hidden_dimension]. The inputs tensor of encoder. The rank must be 3. encoder_args: The arguments for encoder. The details are in the class "Transfo
(inputs,
encoder_args,
encoder_vars_dict,
sequence_length)
| 342 | (name, scope_name, actual_rank, str(tensor.shape), str(expected_rank))) |
| 343 | |
| 344 | def ft_bert(inputs, |
| 345 | encoder_args, |
| 346 | encoder_vars_dict, |
| 347 | sequence_length): |
| 348 | ''' |
| 349 | Run the bert transformer layer by FasterTransformer. |
| 350 | Args: |
| 351 | inputs: A tf.Tensor with shape [batch_size, seq_len, hidden_dimension]. |
| 352 | The inputs tensor of encoder. The rank must be 3. |
| 353 | encoder_args: The arguments for encoder. The details are in the class "TransformerArgument" of common.py |
| 354 | attention_mask: A tf.Tensor. The attention mask for self attention. |
| 355 | encoder_vars_dict: A dict of tf.Tensor or numpy array. |
| 356 | The variables for encoder. They can be either some tensor or some numpy array. |
| 357 | The key is the name of the tensor, like 'layer_0/attention/self/query/kernel:0'. |
| 358 | The value is the corresponding tensor or numpy array |
| 359 | sequence_length: A tf.Tensor or numpy array with shape [batch_size]. |
| 360 | The sequence length of the sentences |
| 361 | Outputs: |
| 362 | outputs: A tensor with shape [batch_size, seq_len, hidden_dimension]. |
| 363 | The results of encoder. |
| 364 | ''' |
| 365 | transformer_op_module = tf.load_op_library(os.path.join('./lib/libtf_bert.so')) |
| 366 | if encoder_args.int8_mode == 0: |
| 367 | outputs = transformer_op_module.bert( |
| 368 | inputs, |
| 369 | inputs, |
| 370 | sequence_length, |
| 371 | [encoder_vars_dict['layer_%d/attention/self/query/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 372 | [encoder_vars_dict['layer_%d/attention/self/query/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 373 | [encoder_vars_dict['layer_%d/attention/self/key/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 374 | [encoder_vars_dict['layer_%d/attention/self/key/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 375 | [encoder_vars_dict['layer_%d/attention/self/value/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 376 | [encoder_vars_dict['layer_%d/attention/self/value/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 377 | [encoder_vars_dict['layer_%d/attention/output/dense/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 378 | [encoder_vars_dict['layer_%d/attention/output/dense/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 379 | [encoder_vars_dict['layer_%d/attention/output/LayerNorm/beta:0' % id] for id in range(encoder_args.num_layer)], |
| 380 | [encoder_vars_dict['layer_%d/attention/output/LayerNorm/gamma:0' % id] for id in range(encoder_args.num_layer)], |
| 381 | [encoder_vars_dict['layer_%d/intermediate/dense/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 382 | [encoder_vars_dict['layer_%d/intermediate/dense/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 383 | [encoder_vars_dict['layer_%d/output/dense/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 384 | [encoder_vars_dict['layer_%d/output/dense/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 385 | [encoder_vars_dict['layer_%d/output/LayerNorm/beta:0' % id] for id in range(encoder_args.num_layer)], |
| 386 | [encoder_vars_dict['layer_%d/output/LayerNorm/gamma:0' % id] for id in range(encoder_args.num_layer)], |
| 387 | head_num = encoder_args.head_num, size_per_head = encoder_args.size_per_head, |
| 388 | inter_size = encoder_args.inter_size, |
| 389 | num_layer = encoder_args.num_layer, remove_padding=encoder_args.remove_padding, |
| 390 | q_scaling = 1.0) |
| 391 | else: |
| 392 | outputs = transformer_op_module.bert_int8( |
| 393 | inputs, |
| 394 | inputs, |
| 395 | sequence_length, |
| 396 | [encoder_vars_dict['layer_%d/attention/self/query/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 397 | [encoder_vars_dict['layer_%d/attention/self/query/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 398 | [encoder_vars_dict['layer_%d/attention/self/key/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 399 | [encoder_vars_dict['layer_%d/attention/self/key/bias:0' % id] for id in range(encoder_args.num_layer)], |
| 400 | [encoder_vars_dict['layer_%d/attention/self/value/kernel:0' % id] for id in range(encoder_args.num_layer)], |
| 401 | [encoder_vars_dict['layer_%d/attention/self/value/bias:0' % id] for id in range(encoder_args.num_layer)], |
no outgoing calls
no test coverage detected