in utils.py [0:0]
def setup(parser, fn_args=None):
# NOTE: If you change the defaults, you better go change mark what changed
# in the results in the README.md too
parser.add_argument('-i', '--input', default=datadir,
help="Input directory for input files. Must have a "
"${prefix}train.list, ${prefix}valid.list, and "
"${prefix}test.list files")
parser.add_argument('--load', default=False,
help="Whether to load the model")
parser.add_argument('--finetune', type=str, default="",
help="Whether to load a model if it doesn't exist")
parser.add_argument('--save', default=False,
help="Whether to save the model")
parser.add_argument('--io', default=False,
help="Shorthand for --load and --save to the same file")
parser.add_argument('--small', default=False, action='store_true',
help="Whether to use smalltrain.list, ... instead")
parser.add_argument('--check_dims', default=False, action='store_true',
help="Whether to show all dims (features, model)")
parser.add_argument('--data_threads', default=10, type=int,
help="Number of threads to use for dataloader")
parser.add_argument('--skip_frames', default=80, type=int,
help="Number of skip frames (multiply by 3 to get true #)")
parser.add_argument('--combine_frames', default=80, type=int,
help="Number of combine frames. (multiply by 3)")
parser.add_argument('--debug', default=3, type=int,
help="Choices for debug, can be 1-5, with 1 most verbose")
parser.add_argument('-k', '--kernel_size', default=64, type=int,
help="featurizer kernel size")
parser.add_argument('-s', '--stride', default=0, type=int,
help="featurizer stride size, secretly defaults to kernel size")
parser.add_argument('--divide_by', default=100, type=int,
help="divide features by this number; special values: 0 -> normalize features by their sum space, per timestep; negative -> do nothing")
parser.add_argument('-g', '--gpu', default=-1, type=int,
help="which GPU to use, -1 for CPU")
parser.add_argument('--reduced', default=False, action='store_true',
help='data is in featurizer-specific reduced format')
parser.add_argument('--predict', default='defog',
help="what prediction mode to use, between: {'defog', 'only_us', 'full_info', 'only_defog'}")
parser.add_argument('--predict_delta', default=False, action='store_true',
help="predict the delta between t and t+1")
parser.add_argument('--class_prob_thresh', default=0.5, type=float,
help="Existence when p[building] is greater than this flag")
parser.add_argument('--until_time', default=0, type=int,
help="predict until time (in minutes), 0 for full game")
parser.add_argument('--from_time', default=0, type=int,
help="predict from time (in minutes), 0 for full game")
parser.add_argument('-e', '--epochs', default=100, type=int,
help="# epochs")
parser.add_argument('--check_nan', default=False, action='store_true',
help="Check nan values during training, very very slow")
parser.add_argument('--just_valid', default=False, action='store_true',
help="Just do a validation run")
parser.add_argument('--use_true_visibility', default=False, action='store_true',
help="Use Jonas's visibility map, which is strictly more visible than reality. Default is strictly less visible")
parser.add_argument('--n_unit_thresh', default=0.1, type=float,
help="If model predicts > n_unit_thresh, round it to the next whole number")
parser.add_argument('--regr_slope_scalar', default=1.0, type=float,
help="If model predict K units, return K*regr_slope_scalar units")
args = parser.parse_args() if fn_args is None else parser.parse_args(fn_args)
if ((args.save is not False or args.load is not False)
and args.io is not False):
raise RuntimeError("Cannot have save or load with --io option")
if args.io is not False:
args.save = args.io
args.load = args.io
if args.save is not False:
args.save = os.path.abspath(args.save)
os.makedirs(args.save, exist_ok=True)
if args.check_dims:
args.debug = min(args.debug, 2)
logFormatter = logging.Formatter("[%(asctime)s %(filename)s:%(lineno)-4d] | %(levelname)8s | %(message)s", "%m-%d %H:%M:%S")
rootLogger = logging.getLogger()
rootLogger.setLevel(0)
if args.save is not False:
fileHandler = logging.FileHandler(os.path.join(args.save, "defogger.log"))
fileHandler.setFormatter(logFormatter)
fileHandler.setLevel(40)
rootLogger.addHandler(fileHandler)
consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(logFormatter)
consoleHandler.setLevel(args.debug*10)
rootLogger.addHandler(consoleHandler)
if args.debug <= 1:
th.backends.cudnn.enabled = False
else:
th.backends.cudnn.enabled = True
# TODO skip_frames >= combine_frames
assert args.skip_frames >= args.combine_frames, ("Not yet supported, need "
"to implement predict forward more than 1 skip frame.")
args.stride = args.kernel_size if args.stride == 0 else args.stride
args.from_time = convert_minutes_to_repframes(args.from_time, args.combine_frames)
args.until_time = convert_minutes_to_repframes(args.until_time, args.combine_frames)
if 'SLURM_JOBID' in os.environ:
logging.log(42, "slurm_info {} {} {}".format(
os.environ.get('SLURM_JOBID', -1),
os.environ.get('SLURM_ARRAY_JOB_ID', -1),
os.environ.get('SLURM_ARRAY_TASK_ID', -1),
))
logging.log(42, "git_commit {}".format(subprocess.check_output(
['git', 'rev-parse', '--short', 'HEAD']).decode().strip()))
logging.log(42, "process_pid {}".format(os.getpid()))
for a, b in sorted(vars(args).items()):
logging.log(42, "argument {} {}".format(a, b))
featurizer = _ext.CoarseConvFeaturizerUnitTypes(
args.kernel_size, args.kernel_size, args.stride, args.stride,
args.from_time, args.until_time)
args.featurizer = featurizer
args.n_inp_feats = args.featurizer.feature_size
# Finds the breakoff for units and buildings
ind2unit = {Constants.unittypes._dict[i] : v for i, v in
enumerate(featurizer.typemapper) if v != featurizer.feature_size - 1}
args.unit_range = (0, ind2unit['Zerg_Lurker'] + 1)
args.bldg_range = (ind2unit['Terran_Command_Center'], ind2unit['Protoss_Shield_Battery'] + 1)
# everything after cutoff is a building inclusive, except for the last,
# which is unknown
return args