Bird
Raised Fist0
PyTorchml~20 mins

TorchScript for production in PyTorch - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
TorchScript Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of TorchScript tracing with control flow
Consider the following PyTorch model and its TorchScript tracing. What will be the output when running scripted_model(torch.tensor(3))?
PyTorch
import torch
import torch.nn as nn

class MyModel(nn.Module):
    def forward(self, x):
        if x.item() > 2:
            return x * 2
        else:
            return x + 2

model = MyModel()
scripted_model = torch.jit.trace(model, torch.tensor(1))
output = scripted_model(torch.tensor(3))
print(output.item())
A4
B5
C3
D6
Attempts:
2 left
💡 Hint
Tracing records operations for the example input. Think about what happens when input changes.
❓ Model Choice
intermediate
1:30remaining
Choosing between tracing and scripting for dynamic control flow
You have a PyTorch model with dynamic control flow depending on input values. Which TorchScript method should you use to correctly convert the model for production?
Atorch.jit.trace
Btorch.jit.optimize_for_inference
Ctorch.jit.freeze
Dtorch.jit.script
Attempts:
2 left
💡 Hint
Tracing records operations for fixed inputs, scripting analyzes code.
❓ Hyperparameter
advanced
1:30remaining
Optimizing TorchScript model for inference speed
Which of the following options is the best practice to improve inference speed of a TorchScript model in production?
AUse torch.jit.freeze on the scripted model
BUse torch.jit.trace with multiple example inputs
CIncrease batch size during training
DAdd dropout layers before scripting
Attempts:
2 left
💡 Hint
Freezing removes unnecessary parts and optimizes the graph.
🔧 Debug
advanced
2:00remaining
Identifying error in TorchScript scripted model
Given this scripted model code, what error will it raise when running scripted_model(torch.tensor([1,2,3]))?
PyTorch
import torch
import torch.nn as nn

class Model(nn.Module):
    def forward(self, x):
        return x[0] + x[3]

model = Model()
scripted_model = torch.jit.script(model)
output = scripted_model(torch.tensor([1,2,3]))
AIndexError: index 3 is out of bounds for dimension 0 with size 3
BNo error, output is 4
CRuntimeError: TorchScript does not support list indexing
DTypeError: unsupported operand type(s) for +: 'Tensor' and 'int'
Attempts:
2 left
💡 Hint
Check the tensor size and indexing carefully.
🧠 Conceptual
expert
2:30remaining
Understanding TorchScript serialization and deployment
Which statement about TorchScript models saved with torch.jit.save and loaded with torch.jit.load is TRUE?
AThe saved model cannot be used without the original Python source code
BThe loaded model can only run on the same device type it was saved from
CThe saved model includes both the model code and its parameters in a single file
DThe saved model loses all optimizations applied during scripting
Attempts:
2 left
💡 Hint
Think about portability and self-containment of TorchScript files.

Practice

(1/5)
1. What is the main purpose of using TorchScript in PyTorch?
easy
A. To increase the size of the model for better accuracy
B. To visualize model training progress
C. To convert PyTorch models into a format optimized for production use
D. To automatically generate training data

Solution

  1. Step 1: Understand TorchScript's role

    TorchScript is designed to convert PyTorch models into a form that can run faster and be deployed easily in production environments.
  2. Step 2: Compare options

    Options A, B, and D describe unrelated tasks like visualization, model size increase, or data generation, which are not the purpose of TorchScript.
  3. Final Answer:

    To convert PyTorch models into a format optimized for production use -> Option C
  4. Quick Check:

    TorchScript purpose = convert for production [OK]
Hint: TorchScript = production-ready model format [OK]
Common Mistakes:
  • Confusing TorchScript with visualization tools
  • Thinking TorchScript generates data
  • Assuming TorchScript increases model size
2. Which of the following is the correct way to save a TorchScript model after scripting?
easy
A. torch.save(model, 'model.pt')
B. torchscript.save_model(model, 'model.pt')
C. model.save('model.pt')
D. scripted_model.save('model.pt')

Solution

  1. Step 1: Recall TorchScript saving method

    After scripting a model, the resulting scripted model object has a save() method to save it to disk.
  2. Step 2: Evaluate options

    torch.save(model, 'model.pt') uses torch.save which is for regular PyTorch models, not scripted ones. model.save('model.pt') is invalid as model.save() does not exist. torchscript.save_model(model, 'model.pt') is not a valid PyTorch API.
  3. Final Answer:

    scripted_model.save('model.pt') -> Option D
  4. Quick Check:

    Use scripted_model.save() to save TorchScript [OK]
Hint: Use scripted_model.save() to save TorchScript models [OK]
Common Mistakes:
  • Using torch.save() instead of scripted_model.save()
  • Calling save() on the original model
  • Assuming torchscript.save_model() exists
3. Given the code below, what will be the output printed?
import torch
class MyModule(torch.nn.Module):
    def forward(self, x):
        return x * 2

model = MyModule()
scripted = torch.jit.script(model)
print(scripted(torch.tensor(3)))
medium
A. tensor(6)
B. tensor(3)
C. 6
D. Error: scripting failed

Solution

  1. Step 1: Understand the model's forward method

    The model multiplies input by 2, so input 3 becomes 6.
  2. Step 2: Check scripting and output

    The model is scripted successfully, so calling scripted(torch.tensor(3)) returns tensor(6).
  3. Final Answer:

    tensor(6) -> Option A
  4. Quick Check:

    Input 3 * 2 = tensor(6) [OK]
Hint: Model doubles input; output = input * 2 [OK]
Common Mistakes:
  • Confusing tensor(6) with integer 6
  • Expecting error from scripting simple model
  • Ignoring tensor wrapper in output
4. What is the error in the following code snippet when trying to trace a model?
import torch
class MyModel(torch.nn.Module):
    def forward(self, x):
        if x.sum() > 0:
            return x * 2
        else:
            return x - 2

model = MyModel()
example_input = torch.tensor([1.0, -1.0])
traced = torch.jit.trace(model, example_input)
medium
A. Syntax error in model definition
B. Tracing fails because the model has data-dependent control flow
C. example_input must be a scalar tensor
D. No error, tracing works fine

Solution

  1. Step 1: Identify model control flow

    The model uses an if-statement depending on input data (x.sum() > 0), which is data-dependent control flow.
  2. Step 2: Understand tracing limitation

    Tracing records operations from example input but cannot capture data-dependent branches, so it will not handle this correctly.
  3. Final Answer:

    Tracing fails because the model has data-dependent control flow -> Option B
  4. Quick Check:

    Tracing can't handle data-dependent control flow [OK]
Hint: Tracing fails if model has if/else based on input data [OK]
Common Mistakes:
  • Assuming tracing works with all control flow
  • Thinking example_input shape causes error
  • Ignoring data-dependent branching
5. You want to deploy a PyTorch model with dynamic control flow and save it for production. Which approach is best to create a TorchScript model that handles this correctly?
hard
A. Use torch.jit.script() to convert the model
B. Rewrite the model to remove all control flow before tracing
C. Save the original PyTorch model with torch.save()
D. Use torch.jit.trace() with a fixed example input

Solution

  1. Step 1: Identify model characteristics

    The model has dynamic control flow, meaning decisions depend on input data during execution.
  2. Step 2: Choose correct TorchScript method

    torch.jit.script() analyzes the model code and supports dynamic control flow, unlike tracing which only records fixed operations.
  3. Step 3: Evaluate other options

    Use torch.jit.trace() with a fixed example input (tracing) fails with dynamic control flow. Save the original PyTorch model with torch.save() saves the model but not in optimized TorchScript form. Rewrite the model to remove all control flow before tracing is impractical and changes model logic.
  4. Final Answer:

    Use torch.jit.script() to convert the model -> Option A
  5. Quick Check:

    Dynamic control flow needs scripting, not tracing [OK]
Hint: Use scripting for models with dynamic control flow [OK]
Common Mistakes:
  • Using tracing for dynamic control flow models
  • Saving without TorchScript conversion
  • Trying to remove control flow instead of scripting
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