()
| 205 | probe: int = field(default=32) |
| 206 | |
| 207 | def main(): |
| 208 | # -----------------------------------------------------------Arguments----------------------------------------------------------- |
| 209 | |
| 210 | parser = HfArgumentParser((ModelArguments, DataTrainingArguments, TrainingArguments, KNNArguments)) |
| 211 | if len(sys.argv) == 2 and sys.argv[1].endswith(".json"): |
| 212 | # If we pass only one argument to the script and it's the path to a json file, |
| 213 | # let's parse it to get our arguments. |
| 214 | model_args, data_args, training_args, knn_args = parser.parse_json_file(json_file=os.path.abspath(sys.argv[1])) |
| 215 | else: |
| 216 | model_args, data_args, training_args, knn_args = parser.parse_args_into_dataclasses() |
| 217 | |
| 218 | # Setup logging |
| 219 | if training_args.should_log: |
| 220 | # The default of training_args.log_level is passive, so we set log level at info here to have that default. |
| 221 | transformers.utils.logging.set_verbosity_info() |
| 222 | log_level = training_args.get_process_log_level() |
| 223 | |
| 224 | logger.remove() |
| 225 | logger.add(sys.stdout, format = "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level}</level> | <blue>{process.name}</blue> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>", level=log_level) |
| 226 | |
| 227 | # Intercept default logging and transform to loguru |
| 228 | class InterceptHandler(logging.Handler): |
| 229 | def emit(self, record: logging.LogRecord) -> None: |
| 230 | # Get corresponding Loguru level if it exists. |
| 231 | level: str | int |
| 232 | try: |
| 233 | level = logger.level(record.levelname).name |
| 234 | except ValueError: |
| 235 | level = record.levelno |
| 236 | |
| 237 | # Find caller from where originated the logged message. |
| 238 | frame, depth = inspect.currentframe(), 0 |
| 239 | while frame and (depth == 0 or frame.f_code.co_filename == logging.__file__): |
| 240 | frame = frame.f_back |
| 241 | depth += 1 |
| 242 | |
| 243 | logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage()) |
| 244 | |
| 245 | logging.basicConfig(handlers=[InterceptHandler()], level=log_level, force=True) |
| 246 | datasets.utils.logging.set_verbosity(datasets.logging.WARNING) |
| 247 | transformers.utils.logging.set_verbosity(log_level) |
| 248 | transformers.utils.logging.disable_default_handler() |
| 249 | transformers.utils.logging.add_handler(InterceptHandler()) |
| 250 | |
| 251 | # Log on each process the small summary: |
| 252 | logger.warning( |
| 253 | f"Process rank: {training_args.local_rank}, device: {training_args.device}, n_gpu: {training_args.n_gpu}" |
| 254 | + f"distributed training: {bool(training_args.local_rank != -1)}, 16-bits training: {training_args.fp16}" |
| 255 | ) |
| 256 | logger.info(f"Training/evaluation parameters {training_args}") |
| 257 | logger.info(f"kNN parameters {knn_args}") |
| 258 | |
| 259 | # Detecting last checkpoint. |
| 260 | last_checkpoint = None |
| 261 | if os.path.isdir(training_args.output_dir) and training_args.do_train and not training_args.overwrite_output_dir: |
| 262 | last_checkpoint = get_last_checkpoint(training_args.output_dir) |
| 263 | if last_checkpoint is None and len(os.listdir(training_args.output_dir)) > 0: |
| 264 | raise ValueError( |
no test coverage detected