Mein Trainingsprozess verwenden tfrecord Format für Zug & Evaluierungsdatensatz.TFRecordReader scheint extrem langsam, und Multi-Thread-Lesen funktioniert nicht
Ich teste den Benchmark des Lesers, nur 8000 Datensätze/Sekunde. und io Geschwindigkeit (siehe von iotop Befehl) nur 400KB-500KB/s.
Ich bin mit der CPP-Version von protobuf hier
Wenn möglich, ein minimales reproduzierbaren Beispiel bieten (wir haben in der Regel keine Zeit Hunderte von Zeilen des Codes zu lesen)
def read_and_decode(filename_queue):
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
return serialized_example
serialized_example = read_and_decode(filename_queue)
batch_serialized_example = tf.train.shuffle_batch(
[serialized_example],
batch_size=batch_size,
num_threads=thread_number,
capacity=capacity,
min_after_dequeue=min_after_dequeue)
features = tf.parse_example(
batch_serialized_example,
features={
"label": tf.FixedLenFeature([], tf.float32),
"ids": tf.VarLenFeature(tf.int64),
"values": tf.VarLenFeature(tf.float32),
})
Welche anderen Lösungsversuche haben Sie versucht?
Ich versuche, num_threads in tf.train.shuffle_batch zu setzen, aber nicht funktioniert.
Es scheint, dass wenn es auf 2 Threads eingestellt ist, es bei 8000records/s arbeitet, wenn die Thread-Nummer vergrößert wird, wird es langsamer. (Ich entferne alle Operationen, die cpus kosten. Einfach Daten lesen.)
Meine Server sind 24 core cpus.
Sind Sie durch CPU oder Festplatte eingeschränkt? Die Timeline-Visualisierung kann helfen, zu sehen, wo Engpässe sind –
schön, dich wieder zu sehen. 1) Nein, ich beschränke die CPU-Nutzung nicht. 2) Meine tfrecords Datei ist im lokalen Laufwerk gespeichert. Ist das ein Grund für die Leistung? 3) Ich werde jetzt gerade Timeline machen. Danke für den Vorschlag. Ich werde später aktualisieren. – ericyue
Hier ist mein Benchmark-Skript und Timeline-Ergebnis (Timeline.json Originaldatei inlcude) https://gist.github.com/ericyue/7705407a88e643f7ab380c6658f641e8 – ericyue