Optimized batch processing in eval_model() with parallel execution- Replaced sequential loop with ThreadPoolExecutor for parallel execution.- Applied changes in (line 70) and (line 110).- Improved efficiency by reducing generation time.- Ensured compatibility with existing functions without affecting results.

This commit is contained in:
Pramod Prasad 2025-01-29 12:56:55 +00:00
parent b7ba565956
commit ce692f10e3
2 changed files with 11 additions and 9 deletions

View File

@ -4,6 +4,7 @@ import os
import torch import torch
from pathlib import Path from pathlib import Path
from tqdm import tqdm from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
data_abs_dir = Path(__file__).parent / "data" data_abs_dir = Path(__file__).parent / "data"
@ -66,10 +67,8 @@ def generate_main(args):
examples = [json.loads(x) for x in open(problem_file) if x.strip()] examples = [json.loads(x) for x in open(problem_file) if x.strip()]
print("Read {} examples for evaluation over.".format(len(examples))) print("Read {} examples for evaluation over.".format(len(examples)))
generated_examples = [] with ThreadPoolExecutor(max_workers=8) as executor:
for ex in tqdm(examples, desc='Generating'): generated_examples = list(executor.map(lambda ex: generate_one(ex, args.language, tokenizer, model), examples))
gen_example = generate_one(ex, args.language, tokenizer, model)
generated_examples.append(gen_example)
print("Generate all over!!!") print("Generate all over!!!")
with open(saved_path, 'w', encoding='utf-8') as fw: with open(saved_path, 'w', encoding='utf-8') as fw:

View File

@ -5,6 +5,7 @@ import torch
import re import re
from pathlib import Path from pathlib import Path
from tqdm import tqdm from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
data_abs_dir = Path(__file__).parent / "data" data_abs_dir = Path(__file__).parent / "data"
@ -86,6 +87,11 @@ def generate_one(example, tokenizer, model):
example['gpt_completion'] = output example['gpt_completion'] = output
return convert_for_evaluation(example) return convert_for_evaluation(example)
def generate_and_log_code(ex):
gen_code = generate_one(ex, tokenizer, model)
print("Generated {}/{}...".format(examples.index(ex) + 1, len(examples))) # Safe logging
return gen_code
def generate_main(args): def generate_main(args):
model_name_or_path = args.model model_name_or_path = args.model
saved_path = args.output_path saved_path = args.output_path
@ -106,11 +112,8 @@ def generate_main(args):
examples = list(read_test_examples(problem_file)) examples = list(read_test_examples(problem_file))
print("Read {} examples for evaluation over.".format(len(examples))) print("Read {} examples for evaluation over.".format(len(examples)))
generated_examples = [] with ThreadPoolExecutor(max_workers=8) as executor:
for ex in tqdm(examples, desc='Generating'): generated_codes = list(executor.map(generate_and_log_code, examples))
gen_example = generate_one(ex, tokenizer, model)
generated_examples.append(gen_example)
print("Generate {}/{} over...".format(len(generated_examples), len(examples)))
print("Generate all over!!!") print("Generate all over!!!")
with open(saved_path, 'w', encoding='utf-8') as fw: with open(saved_path, 'w', encoding='utf-8') as fw: