29 votes

Le chargement de SavedModel est beaucoup plus lent que le chargement d'un point de contrôle tf.train.Saver

J'ai changé de tf.train.Saver au format SavedModel, ce qui signifie que le chargement de mon modèle à partir du disque est beaucoup plus lent (au lieu de quelques secondes, cela prend quelques minutes). Pourquoi cela et que puis-je faire pour charger le modèle plus rapidement?

Je faisais ça:

 # 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)
 

Mais maintenant je fais ça:

 # 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)
 

2voto

domochevski Points 279

Je ne suis en aucune manière un expert en Tensorflow, mais si je devais faire une supposition pourquoi ce qui se passe, je dirais que:

  • tf.le train.Saver(), enregistre une complète méta-graphe. Par conséquent, toutes les informations nécessaires pour effectuer toutes les opérations contenues dans votre graphique est déjà là. Tous les tensorflow doit faire pour charger le modèle, c'est insérer la méta-graphe par défaut dans le/de graphe en cours et vous êtes bon pour aller.
  • Le SavedModelBuilder() sur l'autre côté, derrière la scène crée un langage agnostique représentation de vos opérations et de variables. Ce qui signifie que la méthode de chargement a extraire toutes les informations, puis recréer toute l'opération et les variables à partir de votre graphique précédent, et insérez-les dans le répertoire par défaut/graphe en cours.

Selon la taille de votre graphique, de recréer tout ce qu'il contenait peut prendre un certain temps.

Concernant la deuxième question, comme @J H a dit, si il n'y a pas de raisons pour vous d'utiliser une stratégie sur l'autre, et le temps est de l'essence, puis juste aller avec le plus rapide.

1voto

J_H Points 2740

que puis-je faire pour charger le modèle plus rapidement?

Revenez à tf.train.Saver , car votre question ne montre aucune motivation pour utiliser SavedModelBuilder et indique clairement que le temps écoulé est important pour vous. Alternativement, un MCVE qui reproduit le problème de synchronisation permettrait à d'autres de collaborer avec vous sur le profilage, le diagnostic et la correction de tout problème de performance perçu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X