SavedModelBundle memory leak
Personne n'a encore pris cette issue.
- Langage dominant
- Java
- Étoiles
- 928
- Forks
- 227
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
System information
- Have I written custom code (as opposed to using a stock example script provided in TensorFlow): Yes
- OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Linux Ubuntu 18.04.5 LTS
- TensorFlow installed from (source or binary): Included in java artifact
- TensorFlow version: 2.4.1
Describe the current behavior
Loading and closing SavedModelBundle in an infinite loop leads to OutOfMemoryError:
Exception in thread "main" java.lang.OutOfMemoryError: Physical memory usage is too high: physicalBytes (7828M) > maxPhysicalBytes (7828M)
at org.bytedeco.javacpp.Pointer.deallocator(Pointer.java:695)
at org.tensorflow.internal.c_api.AbstractTF_Status.newStatus(AbstractTF_Status.java:70)
at org.tensorflow.SavedModelBundle.load(SavedModelBundle.java:401)
at org.tensorflow.SavedModelBundle.access$000(SavedModelBundle.java:59)
at org.tensorflow.SavedModelBundle$Loader.load(SavedModelBundle.java:68)
at org.tensorflow.SavedModelBundle.load(SavedModelBundle.java:242)
at com.mycompany.app.App.main(App.java:13)
I use 0.3.1 version of the library. It is the only dependency:
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow-core-platform</artifactId>
<version>0.3.1</version>
</dependency>
The memory leak is reproducible with a model from this repository:
https://github.com/tensorflow/java/tree/master/tensorflow-core/tensorflow-core-api/src/test/resources/saved_model
Describe the expected behavior
I assume that the following code should run endlessly
Code to reproduce the issue
package com.mycompany.app;
import org.tensorflow.SavedModelBundle;
import java.net.URISyntaxException;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) throws URISyntaxException {
var modelPath = Paths.get(App.class.getResource("/saved_model").toURI()).toString();
while (true) {
var model = SavedModelBundle.load(modelPath, "serve");
model.close();
}
}
}
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction dans App.main, en vous concentrant sur les appels répétés à SavedModelBundle.load(modelPath, "serve") et model.close(), et utilisez la ressource saved_model mentionnée dans l’issue. Vérifiez que la mémoire continue d’augmenter au fil des itérations et que le chemin de chargement et de fermeture peut être exécuté plusieurs fois jusqu’à son terme sans provoquer d’OutOfMemoryError.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java, tensorflow
- Domaine
- machine-learning
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 28/100