Lograr Bert_base cuantificado en un entorno tensorflow, completa ligera Bert

Medio Ambiente:

windows 10

Python 3.5

tensorflow 1.13.1

numpy 1.18.1  

 

1. En primer lugar, descargue el código abierto modelo de buena pre-entrenamiento de Google. Utilizo este es BERT-Base, sin entubar (primera)

  BERT-Base, sin entubar: 12 es-capa, 768-ocultos, 12 es-Heads, 110M Parámetros
  BERT-Large, sin entubar : 24-Capa, 1024 ocultos-, 16-Heads, 340M Parámetros
  BERT-Base, entubados : 12 es-capa, ocultos-768, 12 se-Heads, 110M Parámetros
2. referencia https://www.zybuluo.com/Team/note/1632532   (  https://zhuanlan.zhihu.com/p/91024786?utm_source=wechat_session&utm_medium=social&utm_oi=1035849572991401984 ) parte IV. Esa es la cifra a continuación:

  

 3. Abra la github oficial de Nvidia, a parte de conversión de ellos eran parte de la modificación de parámetros.

  https://github.com/NVIDIA/DeepLearningExamples/blob/master/FasterTransformer/v2/sample/tensorflow_bert/ckpt_type_convert.py

  En el que el código se implementa como sigue :( función es la de FP32 convertido a FP16)

1  importación tensorflow como tf
 2  importación numpy como np
 3  de tensorflow.contrib.framework.python.framework importación checkpoint_utils
 4  de tensorflow.python.ops importación io_ops
 5  de tensorflow.python.training.saver importación BaseSaverBuilder
 6  
7  
8  def checkpoint_dtype_cast (in_checkpoint_file , out_checkpoint_file):
 9      var_list = checkpoint_utils.list_variables (tf.flags.FLAGS.init_checkpoint)
 10  
11      def init_graph ():
 12         por nombre, forma en var_list:
 13              var = checkpoint_utils.load_variable (tf.flags.FLAGS.init_checkpoint, nombre)
 14              recon_dtype = tf.float16 si var.dtype == np.float32 otro var.dtype
 15              tf.get_variable (nombre, forma = forma, dtype = recon_dtype)
 16  
17      init_graph ()
 18      protector = tf.train.Saver (constructor = CastFromFloat32SaverBuilder ())
 19      con tf.Session () como sess:
 20          saver.restore (sess, in_checkpoint_file)
 21          protector. Guardar (sess, 'tmp.ckpt ' )
 22  
23      tf.reset_default_graph ()
 24  
25      init_graph ()
 26      protector = tf.train.Saver ()
 27      con tf.Session () como sess:
 28          saver.restore (sess, ' tmp.ckpt ' )
 29          saver.save (sess, out_checkpoint_file)
 30  
31  
32  clase CastFromFloat32SaverBuilder (BaseSaverBuilder):
 33      # Basado en tensorflow.python.training.saver.BulkSaverBuilder.bulk_restore 
34      def bulk_restore (self, filename_tensor, saveables, preferred_shard,
35                       restore_sequentially):
 36          restore_specs = []
 37          para saveable en saveables:
 38              para spec en saveable.specs:
 39                  restore_specs.append ((spec.name, spec.slice_spec, spec.dtype))
 40          nombres, rebanadas, dtypes = zip (* restore_specs)
 41          restore_dtypes = [tf.float32 si dtype.base_dtype == tf.float16 demás dtype para dtype en dtypes]
 42          # información de impresión 
43          parai en gama (len (restore_specs)):
 44              de impresión (nombres [i], ' de ' , restore_dtypes [i], ' a ' , dtypes [i] .base_dtype)
 45          con tf.device ( " CPU: 0 " ) :
 46              restaurado = io_ops.restore_v2 (
 47                  filename_tensor, nombres, rebanadas, restore_dtypes)
 48              de retorno [tf.cast (r, dt.base_dtype) para r, dt en zip (restaurados, dtypes)]
 49  
50  
51  si  __name__ == '__main__ ' :
 52      tf.flags.DEFINE_string ( " fp16_checkpoint " , " mrpc_output / fp16_model.ckpt " , " fp16 archivo punto de control " )
 53      tf.flags.DEFINE_string ( " init_checkpoint " , " bert_base / bert_model.ckpt " , " punto de control inicial archivo " )
 54      checkpoint_dtype_cast (tf.flags.FLAGS.init_checkpoint, tf.flags.FLAGS.fp16_checkpoint)

  En el que, la función principal de los dos parámetros puede ser modificado. El primer modelo es el lugar al que desea convertir la salida final, y la segunda es la dirección de google el modelo que se descargue.

 

Supongo que te gusta

Origin www.cnblogs.com/dhName/p/12628828.html
Recomendado
Clasificación