Why is Keras LSTM on CPU three times faster than GPU?
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
In the realm of Artificial Intelligence (AI) and machine learning, the Long Short-Term Memory (LSTM) networks are renowned for their effectiveness in handling sequential data, such as time-series data, natural language processing (NLP), and more. Traditionally, a Graphics Processing Unit (GPU) is considered superior in computational power for training deep learning models, leading to an assumption that they would outperform a Central Processing Unit (CPU) for LSTMs. However, there are scenarios where an LSTM model implemented using Keras, a deep learning API, runs faster on a CPU compared to a GPU. This article explores the reasons behind such occurrences, delving into the technical aspects, illustrative examples, and providing a comprehensive understanding of the topic.
Technical Explanation
Parallelism vs Sequential Computation
GPUs excel in parallel computation. They are designed to handle thousands of threads simultaneously, making them highly efficient for operations that can be performed in parallel. However, LSTMs involve sequential computations inherent to their architecture due to feedback loops within the network. Each step in an LSTM cell depends on the computation of the previous step, which introduces a bottleneck for parallelism:
- Vanilla LSTM involves the computation of several gates (input, forget, and output) and cell states.
- Sequential Nature: At each time step
t, the output of the LSTM cell depends on both the input at that time step and the hidden state (or output) from time stept-1.
This dependency chain limits the extent to which a GPU can efficiently parallelize the workload.
Data Transfer Overhead
Using a GPU necessitates data transfer between the CPU (where data typically resides) and the GPU memory. This transfer is non-negligible due to the following reasons:
- Bus Latency: The latency of data transfer over the PCIe bus can overshadow the computational speed of the GPU itself, especially for small to medium-sized models.
- Batch Size Influence: GPUs usually thrive on large batch sizes, which can mask the data transfer time with parallel computation. However, LSTMs, often operating on smaller batch sizes due to memory constraints or model specifics, might find such overhead prohibitive.
Specific Use Cases and Model Sizes
For small models, the overhead introduced by the GPU in terms of data transfer and management can lead to better performance on a CPU:
- Large Network vs Small Network: If the LSTM network is relatively small, the computational overhead may not justify the GPU's initialization and data transfer time.
- Dataset Size: Smaller datasets may not leverage the full potential of a GPU, making CPUs more efficient due to reduced overhead of data transfer.
Example Analysis
Consider a simple bilingual translation task using a modest-sized LSTM network. Here, the network has to process sentence sequences with a vocabulary size of around 10,000 words.
- CPU Performance: If the network is small (e.g., 1 or 2 LSTM layers with 50 hidden units each), the CPU can efficiently handle the computation with moderate concurrency levels inherent to its multi-core design.
- GPU Performance: The same network on the GPU might face delays due to memory allocation, kernel execution overheads, and data copying operations not being offset by the benefits of parallel execution.
Here's an illustrative table summarizing key factors affecting performance:
| Key Aspect | CPU Performance | GPU Performance |
| Parallelism | Moderate | High, but limited by sequential operations |
| Data Transfer Overhead | Minimal | Can be significant, especially for small data |
| Model Initialization | Fast | Can be slow due to kernel setup |
| Effective Batch Size | Small to Medium | Performs better with larger batch sizes |
| Suitable Network Size | Small networks | Large networks |
Additional Details
Optimization Strategies
To mitigate GPU inefficiencies, consider:
- CuDNN Accelerations: Using CuDNN-optimized LSTM cells can enhance performance by exploiting specialized kernels.
- Batch Size: Opt for larger batch sizes if memory allows, which could help in better utilizing GPU capabilities.
- Mixed Precision Training: Leverage FP16 precision on GPUs, reducing the memory footprint and improving throughput.
Future Developments
With ongoing advances in machine learning frameworks and hardware accelerators, new GPU architectures and software optimizations may eventually reduce or eliminate the performance discrepancies seen today in certain scenarios.
Conclusion
While GPUs remain powerful tools for deep learning, especially for large-scale models, there exist specific contexts where CPUs can outperform GPUs in training Keras LSTMs. These scenarios typically involve smaller network sizes, lower batch sizes, and overhead concerns that tip the balance in favor of CPUs. Understanding the underlying dynamics is crucial for optimizing performance in various machine learning tasks.

