import sys
import os
from opt_loss import OptLoss
from mlperf_logger import configure_logger, log_start, log_end, log_event, set_seeds, get_rank, barrier
from mlperf_logging.mllog import constants
import torch
from torch.autograd import Variable
import time
import numpy as np
import io
from bisect import bisect
from ssd300 import SSD300
from master_params import create_flat_master
from parse_config import parse_args, validate_arguments, validate_group_bn
from async_evaluator import AsyncEvaluator
from eval import coco_eval
import gc
from data.native_pipeline import build_train_pipe
import torch.utils.data.distributed
import torch.distributed as dist
configure_logger(constants.SSD)
log_start(key=constants.INIT_START, log_all_ranks=True)
args = parse_args()
args.evaluation.sort()
args.lr_decay_epochs.sort()
validate_arguments(args)
torch.set_num_threads(1)
torch.backends.cudnn.benchmark = not args.profile_cudnn_get
build_train_pipe(args)