|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| import os
|
|
|
| import pytest
|
|
|
| from llamafactory.train.test_utils import compare_model, load_infer_model, load_reference_model, load_train_model
|
|
|
|
|
| TINY_LLAMA3 = os.getenv("TINY_LLAMA3", "llamafactory/tiny-random-Llama-3")
|
|
|
| TINY_LLAMA_PISSA = os.getenv("TINY_LLAMA_ADAPTER", "llamafactory/tiny-random-Llama-3-pissa")
|
|
|
| TRAIN_ARGS = {
|
| "model_name_or_path": TINY_LLAMA3,
|
| "stage": "sft",
|
| "do_train": True,
|
| "finetuning_type": "lora",
|
| "pissa_init": True,
|
| "pissa_iter": -1,
|
| "dataset": "llamafactory/tiny-supervised-dataset",
|
| "dataset_dir": "ONLINE",
|
| "template": "llama3",
|
| "cutoff_len": 1024,
|
| "output_dir": "dummy_dir",
|
| "overwrite_output_dir": True,
|
| "fp16": True,
|
| }
|
|
|
| INFER_ARGS = {
|
| "model_name_or_path": TINY_LLAMA_PISSA,
|
| "adapter_name_or_path": TINY_LLAMA_PISSA,
|
| "adapter_folder": "pissa_init",
|
| "finetuning_type": "lora",
|
| "template": "llama3",
|
| "infer_dtype": "float16",
|
| }
|
|
|
|
|
| @pytest.mark.xfail(reason="PiSSA initialization is not stable in different platform.")
|
| def test_pissa_train():
|
| model = load_train_model(**TRAIN_ARGS)
|
| ref_model = load_reference_model(TINY_LLAMA_PISSA, TINY_LLAMA_PISSA, use_pissa=True, is_trainable=True)
|
| compare_model(model, ref_model)
|
|
|
|
|
| @pytest.mark.xfail(reason="Known connection error.")
|
| def test_pissa_inference():
|
| model = load_infer_model(**INFER_ARGS)
|
| ref_model = load_reference_model(TINY_LLAMA_PISSA, TINY_LLAMA_PISSA, use_pissa=True, is_trainable=False)
|
| ref_model = ref_model.merge_and_unload()
|
| compare_model(model, ref_model)
|
|
|