class_docstr: ModelManager manages how to train models.
  
  Each type of models can have their own config type, implemented as
  `config_type()` class method. `__init__()` of the concrete class must take
  this type.
  
  To integrate training algorithms into the standard training workflow, you need:
  1. `build_trainer()`: Builds the ReAgentLightningModule
  2. `get_data_module()`: Defines how to create data module for this algorithm
  3. `build_serving_modules()`: Creates the TorchScript modules for serving
  4. `get_reporter()`: Returns the reporter to collect training/evaluation metrics
  5. `create_policy()`: (Optional) Creates Policy object for to interact with Gym
docstr: Returns TorchScript for serving in production
docstr_tok: ["Returns","TorchScript","for","serving","in","production"]
code: def build_serving_modules(
      self,
      trainer_module: ReAgentLightningModule,
      normalization_data_map: Dict[str, NormalizationData],
  ) -> Dict[str, torch.nn.Module]:
      """
      Returns TorchScript for serving in production
      """
      return {
          "default_model": self.build_serving_module(
              trainer_module, normalization_data_map
          )
      }
  
imports: import abc
  import logging
  from typing import Dict, List, Optional, Tuple
  import pytorch_lightning
  import torch
  from reagent.core.dataclasses import dataclass
  from reagent.core.parameters import NormalizationData
  from reagent.data.reagent_data_module import ReAgentDataModule
  from reagent.reporting.reporter_base import ReporterBase
  from reagent.training import MultiStageTrainer, ReAgentLightningModule
  from reagent.workflow.types import Dataset, ReaderOptions, ResourceOptions, RewardOptions, RLTrainingOutput, RLTrainingReport, TableSpec
  from reagent.workflow.utils import get_rank, train_eval_lightning
label_desc: Use image node_id 6 for calling the ModelManager obj's underlying member method code with example usage: obj.build_serving_modules(trainer_module, normalization_data_map) and returns: dict