| import os |
| import shutil |
| import tempfile |
| import unittest |
|
|
| import json |
| import numpy as np |
|
|
| from swift.llm import MODEL_MAPPING, load_dataset |
|
|
|
|
| class TestRun3(unittest.TestCase): |
|
|
| def setUp(self): |
| print(f'Testing {type(self).__name__}.{self._testMethodName}') |
| self._tmp_dir = tempfile.TemporaryDirectory() |
| self.tmp_dir = self._tmp_dir.name |
|
|
| def tearDown(self): |
| shutil.rmtree(self.tmp_dir) |
|
|
| def load_ds(self, ds): |
| train_dataset, val_dataset = load_dataset( |
| ds, |
| split_dataset_ratio=0.0, |
| strict=False, |
| num_proc=1, |
| model_name=['小黄', 'Xiao Huang'], |
| model_author=['魔搭', 'ModelScope']) |
| return train_dataset.select(range(min(50, len(train_dataset)))) |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| @unittest.skip('skip') |
| def test_template_compare(self): |
| if os.path.exists('./templates.txt'): |
| with open('./templates.txt', 'r') as f: |
| templates = json.load(f) |
| else: |
| templates = [] |
| skip_model_type = { |
| 'grok', 'deepseek_moe', 'deepseek_v2', 'deepseek_v2_5', 'llama3_1_omni', 'llava_next_qwen_hf', |
| 'llava1_6_yi', 'llava_next_qwen', 'mixtral', 'codefuse_codellama', 'wizardlm2', 'wizardlm2_awq', |
| 'openbuddy_deepseek', 'sus', 'openbuddy_mixtral', 'openbuddy_llama', 'dbrx', 'nenotron', 'reflection', |
| 'xverse_moe', 'qwen2_moe', 'yuan2', 'wizardlm2_moe', 'emu3_gen', 'llava1_6_mistral', 'mplug_owl3_241101', |
| 'llava1_6_yi_hf' |
| } |
| for model_name, model_meta in MODEL_MAPPING.items(): |
| if model_name in skip_model_type: |
| continue |
| template = model_meta.template |
| meta_requires = model_meta.requires or [] |
| for group in model_meta.model_groups: |
| model = group.models[0] |
| if 'awq' in model.ms_model_id.lower() or 'gptq' in model.ms_model_id.lower(): |
| break |
| if template in templates: |
| break |
| requires = meta_requires + (group.requires or []) |
| for req in requires: |
| os.system(f'pip install "{req}"') |
| if not any(['transformers' in req for req in requires]): |
| os.system('pip install transformers -U') |
| if not any(['accelerate' in req for req in requires]): |
| os.system('pip install accelerate -U') |
| try: |
| cmd = ('CUDA_VISIBLE_DEVICES=0 PYTHONPATH=. python tests/llm/load_template.py ' |
| f'--ms_model_id {model.ms_model_id} --template {template}') |
| if os.system(cmd) != 0: |
| raise RuntimeError() |
| cmd = ( |
| 'CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/mnt/workspace/yzhao/tastelikefeet/swift python tests/llm/load_template.py ' |
| f'--ms_model_id {model.ms_model_id} --template {template} --new 0') |
| if os.system(cmd) != 0: |
| raise RuntimeError() |
| with open('new_input_ids.txt', 'r') as f: |
| input_ids_new = json.load(f) |
| with open('old_input_ids.txt', 'r') as f: |
| input_ids_old = json.load(f) |
| print('model_id', model.ms_model_id, 'new:', input_ids_new, 'old:', input_ids_old) |
| self.assertTrue(np.allclose(input_ids_new['input_ids'], input_ids_old['input_ids'])) |
| except Exception: |
| import traceback |
| print(traceback.format_exc()) |
| passed = False |
| else: |
| passed = True |
| templates.append(template) |
| finally: |
| if passed: |
| with open('./templates.txt', 'w') as f: |
| json.dump(templates, f) |
| if os.path.exists('new_input_ids.txt'): |
| os.remove('new_input_ids.txt') |
| if os.path.exists('old_input_ids.txt'): |
| os.remove('old_input_ids.txt') |
|
|
|
|
| if __name__ == '__main__': |
| unittest.main() |
|
|