Spaces:
Sleeping
Sleeping
from concurrent.futures import ProcessPoolExecutor | |
import queue | |
import subprocess | |
import os | |
def evaluate(dataset, gpu): | |
print('*******dataset:', dataset) | |
model_name = "Pythia_2B_143000_SVFT_CR15K" | |
save_dir= "results/" + model_name | |
if not os.path.exists(save_dir): | |
try: | |
os.makedirs(save_dir) | |
except: | |
pass | |
save_path = os.path.join(save_dir, dataset + ".txt") | |
command = f"CUDA_VISIBLE_DEVICES={gpu} python commonsense_evaluate_latest.py \ | |
--model LLaMA-7B \ | |
--adapter LoRA \ | |
--dataset {dataset} \ | |
--base_model './{model_name}' \ | |
--batch_size 1| tee -a {save_path}" | |
result = subprocess.run(command, shell=True, text=True, capture_output=False) | |
print(f"Evaluation results for dataset {dataset} on GPU {gpu}:\n{result.stdout}") | |
return gpu | |
datasets = ["boolq", "social_i_qa", "piqa", "ARC-Easy", "ARC-Challenge", "winogrande", "openbookqa", "hellaswag"] | |
gpus = [0, 0, 0, 0] | |
tasks_queue = queue.Queue() | |
gpu_queue = queue.Queue() | |
for gpu in gpus: | |
gpu_queue.put(gpu) | |
for task in datasets: | |
tasks_queue.put(task) | |
num_processes = min(len(datasets), len(gpus)) # number of processes to run in parallel | |
with ProcessPoolExecutor(max_workers=num_processes) as executor: | |
futures = [executor.submit(evaluate, tasks_queue.get(), gpu_queue.get()) for i in range(num_processes)] | |
for future in futures: | |
gpu_id = future.result() | |
gpu_queue.put(gpu_id) | |
if tasks_queue.qsize() > 0: | |
futures.append(executor.submit(evaluate, tasks_queue.get(), gpu_queue.get())) | |