REI
tensorflow
resource_error
ai_generated
true
ResourceExhaustedError: Failed to get next element from iterator: Out of memory while reading data
ID: tensorflow/resource-exhausted-iterator-get-next
82%Fix Rate
86%Confidence
1Evidence
2024-06-18First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| tensorflow 2.13.0 | active | — | — | — |
| tensorflow 2.14.0 | active | — | — | — |
Root Cause
Data pipeline prefetching consumes too much memory, often due to large batch size, large dataset elements, or infinite prefetch.
generic中文
数据管道预取消耗过多内存,通常由于批大小过大、数据集元素过大或无限预取导致。
Official Documentation
https://www.tensorflow.org/api_docs/python/tf/data/Dataset#prefetchWorkarounds
-
85% success Limit the prefetch buffer size using tf.data.Dataset.prefetch with a specific buffer size: dataset = dataset.batch(32).prefetch(buffer_size=tf.data.AUTOTUNE) # Or manually set buffer_size to a small number like 1 or 2 # Alternatively, use .prefetch(1) to limit to one batch
Limit the prefetch buffer size using tf.data.Dataset.prefetch with a specific buffer size: dataset = dataset.batch(32).prefetch(buffer_size=tf.data.AUTOTUNE) # Or manually set buffer_size to a small number like 1 or 2 # Alternatively, use .prefetch(1) to limit to one batch
-
80% success Reduce batch size to lower memory usage per element: dataset = dataset.batch(16).prefetch(tf.data.AUTOTUNE) # Or use smaller batch size like 8
Reduce batch size to lower memory usage per element: dataset = dataset.batch(16).prefetch(tf.data.AUTOTUNE) # Or use smaller batch size like 8
-
75% success Use tf.data.Dataset.cache to avoid re-reading large files, combined with controlled prefetch: dataset = dataset.cache().batch(32).prefetch(1)
Use tf.data.Dataset.cache to avoid re-reading large files, combined with controlled prefetch: dataset = dataset.cache().batch(32).prefetch(1)
中文步骤
Limit the prefetch buffer size using tf.data.Dataset.prefetch with a specific buffer size: dataset = dataset.batch(32).prefetch(buffer_size=tf.data.AUTOTUNE) # Or manually set buffer_size to a small number like 1 or 2 # Alternatively, use .prefetch(1) to limit to one batch
Reduce batch size to lower memory usage per element: dataset = dataset.batch(16).prefetch(tf.data.AUTOTUNE) # Or use smaller batch size like 8
Use tf.data.Dataset.cache to avoid re-reading large files, combined with controlled prefetch: dataset = dataset.cache().batch(32).prefetch(1)
Dead Ends
Common approaches that don't work:
-
70% fail
Memory is consumed by prefetch buffer, not worker count.
-
90% fail
The error is about TensorFlow's internal buffer limits, not system memory capacity.