| import os |
| from abc import ABC, abstractmethod |
| from typing import Dict, List, Optional, Union |
|
|
| import torch.distributed as dist |
|
|
| from lmms_eval.api.registry import ALL_TASKS |
| from lmms_eval.tasks import ( |
| ConfigurableTask, |
| get_task_dict, |
| include_path, |
| initialize_tasks, |
| ) |
|
|
|
|
| def rank0_print(*args): |
| if dist.is_initialized(): |
| if dist.get_rank() == 0: |
| print(f"Rank {dist.get_rank()}: ", *args) |
| else: |
| print(*args) |
|
|
|
|
| class BaseEmbedder(ABC): |
| def __init__(self, name: str, output_path: str) -> None: |
| super().__init__() |
| self.name = name |
| self.output_path = output_path |
| os.makedirs(self.output_path, exist_ok=True) |
| initialize_tasks() |
|
|
| def flatten(self, input): |
| new_list = [] |
| for i in input: |
| for j in i: |
| new_list.append(j) |
| return new_list |
|
|
| |
| |
| @staticmethod |
| def init_task(task: str, ignored_ids: Union[set, List] = None): |
| task_dict = get_task_dict([task], model_name="llava") |
| task_obj = task_dict[task] |
| if type(task_obj) == tuple: |
| group, task_obj = task_obj |
| DATASET_PATH = task_obj.DATASET_PATH |
| DATASET_NAME = None |
| if task_obj.DATASET_NAME is not None: |
| DATASET_NAME = task_obj.DATASET_NAME |
|
|
| docs = task_obj.test_docs() if task_obj.has_test_docs() else task_obj.validation_docs() |
| split = task_obj.config.test_split if task_obj.has_test_docs() else task_obj.config.validation_split |
| rank0_print(f"\nTask : {task_obj.config.task}\n - #num : {len(task_obj.test_docs()) if task_obj.has_test_docs() else task_obj.validation_docs()}") |
| task_obj.build_all_requests() |
| requests = [] |
| for instance in task_obj.instances: |
| reqtype = instance.request_type |
| contexts, all_gen_kwargs, doc_to_visual, doc_id, task, split = instance.args |
| if ignored_ids is not None and doc_id in ignored_ids: |
| continue |
| requests.append(instance) |
| return DATASET_PATH, DATASET_NAME, split, requests, task_obj, docs |
|
|
| @abstractmethod |
| def embed_task(self, task: str): |
| return |
|
|