Metrics & Evaluation - GPU vs CPU tensor placement
Which metric matters for GPU vs CPU tensor placement and WHY
When deciding where to place tensors (GPU or CPU), the key metric is execution time. This measures how fast your model runs. Faster execution means better use of hardware. Another important metric is memory usage, which shows if your device can hold the data without running out of space. Efficient placement reduces waiting time and speeds up training or prediction.
Confusion matrix or equivalent visualization
Tensor Placement Performance Comparison:
| Device | Execution Time (seconds) | Memory Usage (MB) |
|--------|-------------------------|-------------------|
| CPU | 12.5 | 1500 |
| GPU | 3.2 | 2000 |
This shows GPU runs the same task faster but uses more memory.
Precision vs Recall tradeoff (or equivalent) with concrete examples
Instead of precision and recall, here we consider speed vs memory tradeoff. For example:
Using GPU speeds up training but uses more memory. If memory is limited, CPU might be better.
Using CPU saves memory but runs slower, which can delay results.
Choosing placement depends on your priority: faster results (GPU) or lower memory use (CPU).
What "good" vs "bad" metric values look like for this use case
Good: Low execution time (seconds) and memory usage within device limits. For example, GPU execution time under 5 seconds and memory usage below device capacity.
Bad: High execution time (e.g., CPU taking 10+ seconds when GPU can do it in 3) or memory overflow errors causing crashes.
Metrics pitfalls
Ignoring data transfer time: Moving tensors between CPU and GPU can add delay, hurting performance.
Overlooking memory limits: Placing too large tensors on GPU can cause out-of-memory errors.
Assuming GPU always faster: Small models or simple tasks may run faster on CPU due to overhead.
Not measuring end-to-end time: Only timing computation ignores data loading and transfer delays.
Self-check question
Your model runs in 3 seconds on GPU but 12 seconds on CPU. However, GPU memory usage is 95% of capacity and sometimes causes errors. Is GPU placement good for production? Why or why not?
Key Result
Execution time and memory usage are key metrics to evaluate GPU vs CPU tensor placement, balancing speed and resource limits.
Practice
(1/5)
1. What is the main reason to use tf.device() in TensorFlow when working with GPUs and CPUs?
easy
A. To change the data type of a tensor
B. To save the model to disk
C. To initialize variables automatically
D. To specify whether a tensor or operation runs on CPU or GPU
Solution
Step 1: Understand the purpose of tf.device()
This function is used to tell TensorFlow where to place tensors or operations, either on CPU or GPU.
Step 2: Compare options with the function's purpose
Changing data types, initializing variables, or saving models are unrelated to device placement.
Final Answer:
To specify whether a tensor or operation runs on CPU or GPU -> Option D
Quick Check:
tf.device() controls device placement = B [OK]
Hint: tf.device() sets CPU or GPU for tensors [OK]
Common Mistakes:
Confusing device placement with data type changes
Thinking tf.device() initializes variables
Assuming tf.device() saves models
2. Which of the following is the correct syntax to place a tensor on GPU device 0 in TensorFlow?
easy
A. with tf.device('/GPU:0'):
x = tf.constant([1, 2, 3])
B. with tf.device('device:GPU0'):
x = tf.constant([1, 2, 3])
C. with tf.device('GPU0'):
x = tf.constant([1, 2, 3])
D. with tf.device('/CPU:0'):
x = tf.constant([1, 2, 3])
TensorFlow uses '/GPU:0' to refer to the first GPU device.
Step 2: Check each option's device string
The correct format for GPU device 0 is with tf.device('/GPU:0'):
x = tf.constant([1, 2, 3]). Formats like '/CPU:0', 'device:GPU0', and 'GPU0' are incorrect.
Final Answer:
with tf.device('/GPU:0'):
x = tf.constant([1, 2, 3]) -> Option A
Quick Check:
Correct GPU device string = D [OK]
Hint: Use '/GPU:0' to specify first GPU device [OK]
Common Mistakes:
Using 'GPU0' without slash and colon
Confusing CPU and GPU device strings
Missing the 'with' context for tf.device
3. What will be the output device placement of the tensor x in the following code if a GPU is available?
with tf.device('/CPU:0'):
x = tf.constant([1, 2, 3])
print(x.device)
medium
A. It will show a GPU device string like '/job:localhost/replica:0/task:0/device:GPU:0'
B. It will show a CPU device string like '/job:localhost/replica:0/task:0/device:CPU:0'
C. It will raise an error because GPU is available
D. It will show an empty string
Solution
Step 1: Analyze the device context used
The code uses with tf.device('/CPU:0'), so the tensor x is forced to be on CPU.
Step 2: Understand device string output
Printing x.device will show the full device string indicating CPU, regardless of GPU availability.
Final Answer:
It will show a CPU device string like '/job:localhost/replica:0/task:0/device:CPU:0' -> Option B
4. Identify the error in this TensorFlow code snippet that tries to place a tensor on GPU:
with tf.device('/GPU:1'):
x = tf.constant([4, 5, 6])
print(x.device)
Assuming the system has only one GPU device.
medium
A. Syntax error in tf.device string
B. No error, code runs fine on GPU 1
C. Error because GPU device '/GPU:1' does not exist
D. TensorFlow automatically switches to CPU without error
Solution
Step 1: Check available GPU devices
The system has only one GPU, which is '/GPU:0'. Trying to use '/GPU:1' refers to a non-existent second GPU.
Step 2: Understand TensorFlow behavior on invalid device
TensorFlow raises an error if the specified device does not exist.
Final Answer:
Error because GPU device '/GPU:1' does not exist -> Option C
Quick Check:
Invalid GPU index causes error = A [OK]
Hint: Check GPU count before using device index [OK]
Common Mistakes:
Assuming GPU indices start at 1
Expecting automatic fallback to CPU
Ignoring device existence errors
5. You want to speed up a large matrix multiplication in TensorFlow using GPU if available, but fall back to CPU if no GPU exists. Which code snippet correctly implements this logic?
hard
A. if tf.config.list_physical_devices('GPU'):
with tf.device('/GPU:0'):
result = tf.matmul(a, b)
else:
with tf.device('/CPU:0'):
result = tf.matmul(a, b)
B. with tf.device('/GPU:0'):
result = tf.matmul(a, b)
C. result = tf.matmul(a, b) # TensorFlow auto-chooses device
D. with tf.device('/CPU:0'):
result = tf.matmul(a, b)
Solution
Step 1: Check for GPU availability
Use tf.config.list_physical_devices('GPU') to detect if GPU exists.
Step 2: Use conditional device placement
If GPU exists, place operation on '/GPU:0', else place on '/CPU:0' to ensure fallback.
Step 3: Verify other options
Forcing GPU without checking availability risks errors if no GPU. Auto-placement lacks explicit conditional control. Forcing CPU ignores available GPU.
Final Answer:
if tf.config.list_physical_devices('GPU'):
with tf.device('/GPU:0'):
result = tf.matmul(a, b)
else:
with tf.device('/CPU:0'):
result = tf.matmul(a, b) -> Option A
Quick Check:
Conditional device placement with fallback = A [OK]
Hint: Check GPU presence before device placement [OK]
Common Mistakes:
Not handling fallback when GPU missing
Assuming TensorFlow always picks GPU
Forcing CPU even if GPU is available
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.