Ich habe SSD (Single Shot Detector) in Tensorflow implementiert.Tensorflow versucht mehr Speicher zu verwenden, als der Profiler anzeigt
Während Folgerung, ich bin Laden der gefrorenen Diagramm wie folgt:
def load_graph(filename):
with tf.gfile.FastGFile(filename, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
img, box, cls, val = tf.import_graph_def(graph_def, name='',
return_elements=['input:0', 'pred/box:0', 'pred/cls:0', 'pred/val:0']
)
return img, box, cls, val
Damit keine unnötigen Operationen entlang Tag wird.
jedoch, als ich die Verwendung Skript ausgeführt wird, etwa so:
_box, _cls, _val = sess.run([box, cls, val],{img: np.expand_dims(image_data,0)},
(dh ich bin nur eine Losgröße von einer Verwendung)
Ich bemerkte, dass tensorflow über Speicherbelegung klagte:
2017-07-08 20:38:46.389877: W
tensorflow/core/common_runtime/bfc_allocator.cc:217] Allocator
(GPU_0_bfc) ran out of memory trying to allocate 2.05GiB. The caller
indicates that this is not a failure, but may mean that there could be
performance gains if more memory is available.
Also beschloss ich, die Operationen zu profilieren, und bekam folgendes Ergebnis:
Wie Sie sehen können, beansprucht keiner der Vorgänge mehr als 75 MB.
Woher kommt diese Diskrepanz?
Wenn ich die Menge an Speicherzuweisung zu steuern, wie folgt aus:
gpu_options = tf.GPUOptions(allow_growth=True, per_process_gpu_memory_fraction=0.1)
config = tf.ConfigProto(log_device_placement=True, gpu_options=gpu_options)
Tensorflow noch über die Menge an Speicher beschwert zur Verfügung, aber ich habe keine kritischen Treffer in der Leistung sehen (dh es läuft immer in etwa 8 ms, unabhängig von dem zulässigen Speicher zugewiesen)
Wenn ich erlaube es zu wachsen, bis Tensorflow scheint zufrieden, es wächst auf etwa 6,7 GB.
Ich verstehe nicht, was dieses Verhalten verursacht. Woher kommt diese Diskrepanz?
Einige Ops machen explorative Zuweisungen für optionalen Scratch Space (sie können ohne sie arbeiten, zB [conv] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/conv_ops_gpu.h#) L54)). Fehlgeschlagene Zuordnungen werden möglicherweise nicht im Profil angezeigt. Schwer zu sagen mehr ohne eine Reproduktion. Es ist möglich, dass der Scratch Space in diesem Fall nicht hilfreich ist (in diesem Fall ist es in Ordnung, die Warnung zu ignorieren). –