Quá trình đào tạo của tôi sử dụng định dạng tfrecord cho đào tạo & eval dataset.TFRecordReader có vẻ cực kỳ chậm và đa luồng đọc không hoạt động
Tôi kiểm tra điểm chuẩn của trình đọc, chỉ 8000records/giây. và tốc độ io (xem từ lệnh iotop) chỉ 400KB-500KB/s.
Tôi đang sử dụng phiên bản cpp của protobuf đây
Nếu có thể, cung cấp một ví dụ tái sản xuất tối thiểu (Chúng tôi thường không có thời gian để đọc hàng trăm dòng mã của bạn)
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),
})
Bạn đã thử các giải pháp đã thử nào khác?
Tôi cố gắng đặt num_threads bằng tf.train.shuffle_batch nhưng không hoạt động.
Dường như khi đặt thành 2 chuỗi, nó hoạt động ở 8000records/s, khi phóng to số chuỗi, nó sẽ chậm hơn. (Tôi loại bỏ tất cả các ops mà chi phí cpus. Chỉ cần đọc dữ liệu.)
Máy chủ của tôi là 24 lõi CPU.
Bạn có bị giới hạn bởi CPU hoặc theo đĩa không? Thực hiện trực quan hóa dòng thời gian có thể giúp bạn xem các nút cổ chai ở đâu là –
rất vui được gặp lại bạn. 1) không, tôi không giới hạn việc sử dụng CPU. 2) Tập tin tfrecords của tôi được lưu trong ổ đĩa cục bộ. đây có phải là lý do cho hiệu suất không? 3) Tôi sẽ làm dòng thời gian ngay bây giờ. cảm ơn cho đề nghị. Tôi sẽ cập nhật sau. – ericyue
đây là tập lệnh chuẩn và kết quả dòng thời gian của tôi (tập tin gốc của tệp timeline.json) https://gist.github.com/ericyue/7705407a88e643f7ab380c6658f641e8 – ericyue