GetBatch: Distributed Multi-Object Retrieval for ML Data Loading
Organizations: NVIDIA, Santa Clara, USA.
Abstract
Machine learning training pipelines consume data in batches. A single training step may require thousands of samples drawn from shards distributed across a storage cluster. Issuing thousands of individual GET requests incurs per-request overhead that often dominates data transfer time. To solve this problem, we introduce GetBatch - a new object store API that elevates batch retrieval to a first-class storage operation, replacing independent GET operations with a single deterministic, fault-tolerant streaming execution. GetBatch achieves up to 15x throughput improvement for small objects and, in a production training workload, reduces P95 batch retrieval latency by 2x and P99 per-object tail latency by 3.7x compared to individual GET requests.
Figures & tables
| GetBatch | ||||
|---|---|---|---|---|
| Object Size | GET | Batch 32 | Batch 64 | Batch 128 |
| 10 KiB | 0.5 | 4.5 (9 ) | 6.0 (12 ) | 7.3 (15 ) |
| 100 KiB | 4.2 | 20.7 (4.9 ) | 24.1 (5.7 ) | 26.1 (6.2 ) |
| 1 MiB | 22.3 | 32.4 (1.5 ) | 35.2 (1.6 ) | 37.0 (1.7 ) |
| Method | P50 | P95 | P99 | Avg |
|---|---|---|---|---|
| Batch Latency (ms) | ||||
| Sequential I/O | 243.7 | 431.2 | 638.9 | 261.4 |
| Random GET | 934.7 | 3668.7 | 4814.3 | 1320.0 |
| GetBatch | 427.5 | 1808.6 | 2744.7 | 624.7 |
| Per-Object Latency (ms) | ||||
| Sequential I/O | 1.2 | 5.2 | 6.8 | 2.0 |