Bird
Raised Fist0
TensorFlowml~20 mins

Multi-GPU training basics in TensorFlow - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Multi-GPU Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Why use Multi-GPU training?

Which of the following is the main reason to use multi-GPU training in deep learning?

ATo avoid using CPUs during training
BTo reduce the model size by distributing layers on different GPUs
CTo increase the model's accuracy by using multiple GPUs
DTo speed up training by splitting data and computations across GPUs
Attempts:
2 left
💡 Hint

Think about what happens when you have more GPUs working together.

❓ Predict Output
intermediate
2:00remaining
Output of Multi-GPU model training code

What will be the output shape of the model predictions when using tf.distribute.MirroredStrategy with 2 GPUs on input batch size 8?

TensorFlow
import tensorflow as tf
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(10, activation='relu', input_shape=(5,)),
        tf.keras.layers.Dense(3, activation='softmax')
    ])

import numpy as np
x = np.random.random((8, 5)).astype('float32')
predictions = model(x)
print(predictions.shape)
A(8, 3)
B(4, 3)
C(16, 3)
D(8, 10)
Attempts:
2 left
💡 Hint

The batch size stays the same; the model outputs one prediction per input.

❓ Hyperparameter
advanced
2:00remaining
Adjusting batch size for Multi-GPU training

You have a model training on 1 GPU with batch size 32. You switch to 4 GPUs using MirroredStrategy. What is the best practice for setting the batch size?

ADecrease batch size to 8 to reduce memory usage
BKeep batch size at 32 to avoid changing learning dynamics
CIncrease batch size to 128 to keep per-GPU batch size same as before
DSet batch size to 4 to match number of GPUs
Attempts:
2 left
💡 Hint

Think about how batch size is split across GPUs.

🔧 Debug
advanced
2:00remaining
Error in Multi-GPU model saving

After training a model with MirroredStrategy, you try to save the model using model.save('path') but get an error. What is the likely cause?

AModel was not created inside the strategy scope
BYou must call <code>strategy.experimental_run_v2()</code> before saving
CSaving is not supported with MirroredStrategy
DYou need to convert the model to a TensorFlow Lite model before saving
Attempts:
2 left
💡 Hint

Think about where the model should be created for distributed training.

❓ Model Choice
expert
2:00remaining
Choosing the right distribution strategy for multi-GPU training

You want to train a large model on a single machine with 8 GPUs. Which TensorFlow distribution strategy is best suited for this scenario?

Atf.distribute.experimental.ParameterServerStrategy
Btf.distribute.MirroredStrategy
Ctf.distribute.TPUStrategy
Dtf.distribute.MultiWorkerMirroredStrategy
Attempts:
2 left
💡 Hint

Consider the number of machines and GPUs involved.

Practice

(1/5)
1. What is the main purpose of using tf.distribute.MirroredStrategy() in TensorFlow?
easy
A. To train a model on multiple GPUs simultaneously
B. To reduce the size of the dataset
C. To convert a model to run on CPU only
D. To save the model in a special format

Solution

  1. Step 1: Understand the role of MirroredStrategy

    tf.distribute.MirroredStrategy() is designed to distribute training across multiple GPUs to speed up the process.
  2. Step 2: Compare options with the purpose

    Options A, B, and C do not relate to multi-GPU training. Only training a model on multiple GPUs simultaneously correctly states the purpose.
  3. Final Answer:

    To train a model on multiple GPUs simultaneously -> Option A
  4. Quick Check:

    Multi-GPU training = MirroredStrategy usage [OK]
Hint: MirroredStrategy means training on many GPUs at once [OK]
Common Mistakes:
  • Thinking it reduces dataset size
  • Confusing with CPU-only training
  • Assuming it changes model saving format
2. Which of the following is the correct way to start using multi-GPU training in TensorFlow?
easy
A. model = build_model() strategy = tf.distribute.MirroredStrategy() model.compile()
B. strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = build_model()
C. strategy = tf.distribute.MirroredStrategy() model = build_model() model.fit()
D. model = build_model() model.fit() strategy = tf.distribute.MirroredStrategy()

Solution

  1. Step 1: Identify correct usage of strategy.scope()

    Model building and compiling must happen inside strategy.scope() to enable multi-GPU support.
  2. Step 2: Check each option for correct order

    Only strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = build_model() builds the model inside the strategy scope. Others build or compile outside, which disables multi-GPU benefits.
  3. Final Answer:

    strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = build_model() -> Option B
  4. Quick Check:

    Build model inside strategy.scope() = strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = build_model() [OK]
Hint: Always build and compile inside strategy.scope() [OK]
Common Mistakes:
  • Building model before strategy.scope()
  • Compiling model outside strategy.scope()
  • Calling fit before defining strategy
3. Given the code below, what will be the output shape of the predictions if the input batch size is 64 and there are 2 GPUs?
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')

import numpy as np
inputs = np.random.random((64, 20))
predictions = model.predict(inputs)
print(predictions.shape)
medium
A. (10, 64)
B. (32, 10)
C. (128, 10)
D. (64, 10)

Solution

  1. Step 1: Understand batch size and MirroredStrategy behavior

    MirroredStrategy splits the batch across GPUs internally but the output predictions shape matches the input batch size.
  2. Step 2: Check model output shape

    The model outputs 10 classes per input. Input batch size is 64, so output shape is (64, 10).
  3. Final Answer:

    (64, 10) -> Option D
  4. Quick Check:

    Output shape = (batch_size, classes) = (64, 10) [OK]
Hint: Output shape matches input batch size, not multiplied by GPUs [OK]
Common Mistakes:
  • Multiplying batch size by number of GPUs
  • Confusing output shape dimensions
  • Assuming output shape is (10, 64)
4. You wrote this code but get an error: RuntimeError: tf.distribute.MirroredStrategy() must be used with model creation inside its scope. What is the likely mistake?
strategy = tf.distribute.MirroredStrategy()
model = build_model()
with strategy.scope():
    model.compile(optimizer='adam', loss='mse')
medium
A. Model was compiled outside the strategy.scope()
B. MirroredStrategy cannot be used with compile()
C. Model was built outside the strategy.scope()
D. The optimizer 'adam' is not supported

Solution

  1. Step 1: Analyze error message and code

    The error says model creation must be inside strategy.scope(). Here, model is built before entering the scope.
  2. Step 2: Identify correct fix

    Building the model inside the scope fixes the error. Compiling inside scope is correct.
  3. Final Answer:

    Model was built outside the strategy.scope() -> Option C
  4. Quick Check:

    Build model inside scope to avoid RuntimeError [OK]
Hint: Build model inside strategy.scope() to fix this error [OK]
Common Mistakes:
  • Building model before strategy.scope()
  • Thinking compile() causes error
  • Blaming optimizer choice
5. You want to train a large model on 4 GPUs using TensorFlow. Which of the following steps correctly applies multi-GPU training and ensures the model can handle larger batch sizes efficiently?
hard
A. Use tf.distribute.MirroredStrategy(), build and compile the model inside its scope, then increase batch size in model.fit()
B. Build the model first, then use tf.distribute.MirroredStrategy() only during model.fit() with default batch size
C. Use tf.distribute.MirroredStrategy() but keep batch size small to avoid memory issues
D. Train the model separately on each GPU without using MirroredStrategy and average weights manually

Solution

  1. Step 1: Apply MirroredStrategy correctly

    Use tf.distribute.MirroredStrategy() and build/compile the model inside its scope to enable multi-GPU training.
  2. Step 2: Adjust batch size for efficiency

    Increasing batch size in model.fit() leverages multiple GPUs to handle larger data efficiently.
  3. Final Answer:

    Use tf.distribute.MirroredStrategy(), build and compile the model inside its scope, then increase batch size in model.fit() -> Option A
  4. Quick Check:

    Build inside scope + increase batch size = efficient multi-GPU training [OK]
Hint: Build inside scope and increase batch size for multi-GPU speed [OK]
Common Mistakes:
  • Building model outside strategy scope
  • Not increasing batch size to use GPUs fully
  • Manually averaging weights instead of using MirroredStrategy
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard