what protocol protobuf google buffers python tensorflow protocol-buffers

python - protocol - Cargar SavedModel es mucho más lento que cargar un punto de control tf.train.Saver



google:: protobuf (2)

¿Qué puedo hacer para cargar el modelo más rápido?

Vuelva a tf.train.Saver , ya que su pregunta no muestra ninguna motivación para usar SavedModelBuilder, y deja en claro que el tiempo transcurrido es importante para usted. Alternativamente, un MCVE que reproduzca el problema del tiempo permitiría que otros colaboren con usted en la creación de perfiles, el diagnóstico y la reparación de cualquier problema de rendimiento percibido.

Cambié de tf.train.Saver al formato SavedModel, lo que sorprendentemente significa que cargar mi modelo desde el disco es mucho más lento (en lugar de un par de segundos, toma unos minutos). ¿Por qué es esto y qué puedo hacer para cargar el modelo más rápido?

Solía ​​hacer esto:

# Save model saver = tf.train.Saver() save_path = saver.save(session, model_path) # Load model saver = tf.train.import_meta_graph(model_path + ''.meta'') saver.restore(session, model_path)

Pero ahora hago esto:

# Save model builder = tf.saved_model.builder.SavedModelBuilder(model_path) builder.add_meta_graph_and_variables(session, [tf.saved_model.tag_constants.TRAINING]) builder.save() # Load model tf.saved_model.loader.load(session, [tf.saved_model.tag_constants.TRAINING], model_path)


De ninguna manera soy un experto en Tensorflow, pero si tuviera que adivinar por qué sucede esto, diría que:

  • tf.train.Saver (), guarda un meta-gráfico completo. Por lo tanto, toda la información necesaria para realizar cualquier operación contenida en su gráfico ya está allí. Todo lo que tensorflow necesita hacer para cargar el modelo, es insertar el meta-gráfico en el gráfico predeterminado / actual y listo.
  • SavedModelBuilder (), por otro lado, detrás de la escena crea una representación independiente del idioma de sus operaciones y variables. Lo que significa que el método de carga tiene que extraer toda la información, luego recrear todas las operaciones y variables de su gráfico anterior e insertarlas en el gráfico predeterminado / actual.

Dependiendo del tamaño de su gráfico, recrear todo lo que contiene podría tomar algún tiempo.

Con respecto a la segunda pregunta, como dijo @JH, si no hay razones para que uses una estrategia sobre la otra, y el tiempo es esencial, entonces solo elige la más rápida.