def test_trace_memory(self): MODEL_ID = "sshleifer/tiny-gpt2" def _check_summary_is_not_empty(summary): self.assertTrue(hasattr(summary, "sequential")) self.assertTrue(hasattr(summary, "cumulative")) self.assertTrue(hasattr(summary, "current")) self.assertTrue(hasattr(summary, "total")) with tempfile.TemporaryDirectory() as tmp_dir: benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=True, no_inference=False, sequence_lengths=[8], batch_sizes=[1], log_filename=os.path.join(tmp_dir, "log.txt"), log_print=True, trace_memory_line_by_line=True, no_multi_process=True, ) benchmark = PyTorchBenchmark(benchmark_args) result = benchmark.run() _check_summary_is_not_empty(result.inference_summary) _check_summary_is_not_empty(result.train_summary) self.assertTrue(Path(os.path.join(tmp_dir, "log.txt")).exists())
def test_save_csv_files(self): MODEL_ID = "sshleifer/tiny-gpt2" with tempfile.TemporaryDirectory() as tmp_dir: benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=True, no_inference=False, save_to_csv=True, sequence_lengths=[8], batch_sizes=[1], inference_time_csv_file=os.path.join(tmp_dir, "inf_time.csv"), train_memory_csv_file=os.path.join(tmp_dir, "train_mem.csv"), inference_memory_csv_file=os.path.join(tmp_dir, "inf_mem.csv"), train_time_csv_file=os.path.join(tmp_dir, "train_time.csv"), env_info_csv_file=os.path.join(tmp_dir, "env.csv"), no_multi_process=True, ) benchmark = PyTorchBenchmark(benchmark_args) benchmark.run() self.assertTrue( Path(os.path.join(tmp_dir, "inf_time.csv")).exists()) self.assertTrue( Path(os.path.join(tmp_dir, "train_time.csv")).exists()) self.assertTrue( Path(os.path.join(tmp_dir, "inf_mem.csv")).exists()) self.assertTrue( Path(os.path.join(tmp_dir, "train_mem.csv")).exists()) self.assertTrue(Path(os.path.join(tmp_dir, "env.csv")).exists())
def test_train_no_configs(self): MODEL_ID = "sshleifer/tiny-gpt2" benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=True, no_inference=True, sequence_lengths=[8], batch_sizes=[1] ) benchmark = PyTorchBenchmark(benchmark_args) results = benchmark.run() self.check_results_dict_not_empty(results.time_train_result) self.check_results_dict_not_empty(results.memory_train_result)
def test_train_encoder_decoder_with_configs(self): MODEL_ID = "sshleifer/tinier_bart" config = AutoConfig.from_pretrained(MODEL_ID) benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=True, no_inference=True, sequence_lengths=[8], batch_sizes=[1] ) benchmark = PyTorchBenchmark(benchmark_args, configs=[config]) results = benchmark.run() self.check_results_dict_not_empty(results.time_train_result) self.check_results_dict_not_empty(results.memory_train_result)
def test_inference_with_configs(self): MODEL_ID = "sshleifer/tiny-gpt2" config = GPT2Config.from_pretrained(MODEL_ID) benchmark_args = PyTorchBenchmarkArguments(models=[MODEL_ID], training=False, no_inference=False, sequence_lengths=[8], batch_sizes=[1]) benchmark = PyTorchBenchmark(benchmark_args, configs=[config]) results = benchmark.run() self.check_results_dict_not_empty(results.time_inference_result) self.check_results_dict_not_empty(results.memory_inference_result)
def test_inference_fp16(self): MODEL_ID = "sshleifer/tiny-gpt2" benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=False, no_inference=False, fp16=True, sequence_lengths=[8], batch_sizes=[1], no_multi_process=True, ) benchmark = PyTorchBenchmark(benchmark_args) results = benchmark.run() self.check_results_dict_not_empty(results.time_inference_result) self.check_results_dict_not_empty(results.memory_inference_result)
def test_inference_no_configs_only_pretrain(self): MODEL_ID = "sshleifer/tiny-distilbert-base-uncased-finetuned-sst-2-english" benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=False, no_inference=False, sequence_lengths=[8], batch_sizes=[1], no_multi_process=True, only_pretrain_model=True, ) benchmark = PyTorchBenchmark(benchmark_args) results = benchmark.run() self.check_results_dict_not_empty(results.time_inference_result) self.check_results_dict_not_empty(results.memory_inference_result)
def test_inference_no_configs_only_pretrain(self): MODEL_ID = "sgugger/tiny-distilbert-classification" benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=False, inference=True, sequence_lengths=[8], batch_sizes=[1], multi_process=False, only_pretrain_model=True, ) benchmark = PyTorchBenchmark(benchmark_args) results = benchmark.run() self.check_results_dict_not_empty(results.time_inference_result) self.check_results_dict_not_empty(results.memory_inference_result)
def test_inference_no_model_no_architectures(self): MODEL_ID = "sshleifer/tiny-gpt2" config = AutoConfig.from_pretrained(MODEL_ID) # set architectures equal to `None` config.architectures = None benchmark_args = PyTorchBenchmarkArguments( models=[MODEL_ID], training=True, inference=True, sequence_lengths=[8], batch_sizes=[1], multi_process=False, ) benchmark = PyTorchBenchmark(benchmark_args, configs=[config]) results = benchmark.run() self.check_results_dict_not_empty(results.time_inference_result) self.check_results_dict_not_empty(results.memory_inference_result)
def main(): parser = HfArgumentParser(PyTorchBenchmarkArguments) try: benchmark_args = parser.parse_args_into_dataclasses()[0] except ValueError as e: arg_error_msg = "Arg --no_{0} is no longer used, please use --no-{0} instead." begin_error_msg = " ".join(str(e).split(" ")[:-1]) full_error_msg = "" depreciated_args = eval(str(e).split(" ")[-1]) wrong_args = [] for arg in depreciated_args: # arg[2:] removes '--' if arg[2:] in PyTorchBenchmarkArguments.deprecated_args: # arg[5:] removes '--no_' full_error_msg += arg_error_msg.format(arg[5:]) else: wrong_args.append(arg) if len(wrong_args) > 0: full_error_msg = full_error_msg + begin_error_msg + str(wrong_args) raise ValueError(full_error_msg) benchmark = PyTorchBenchmark(args=benchmark_args) benchmark.run()
def main(): parser = HfArgumentParser(PyTorchBenchmarkArguments) benchmark_args = parser.parse_args_into_dataclasses()[0] benchmark = PyTorchBenchmark(args=benchmark_args) benchmark.run()
args = [ '--models', model, '--batch_sizes', '{}'.format(batch_size), '--sequence_lengths', '{}'.format(seq_length), '--inference_time_csv_file', '{}.inference_time.csv'.format(prefix), '--inference_memory_csv_file', '{}.inference_memory.csv'.format(prefix), '--no_env_print', '--repeat', '3', '--save_to_csv' ] if use_fp16: args.append('--fp16') if torch_script: args.append('--torchscript') benchmark_args = parser.parse_args_into_dataclasses( args)[0] benchmark = PyTorchBenchmark(args=benchmark_args) p = Process(target=benchmark.run) p.start() p.join() try: inference_time_df = pd.read_csv( '{}.inference_time.csv'.format(prefix)) inference_memory_df = pd.read_csv( '{}.inference_memory.csv'.format(prefix)) latency = inference_time_df['result'][0] memory = inference_memory_df['result'][0] os.remove('{}.inference_time.csv'.format(prefix)) os.remove('{}.inference_memory.csv'.format(prefix)) except Exception: latency = math.nan memory = math.nan