| 
							 | 
						""" | 
					
					
						
						| 
							 | 
						E2E tests for falcon | 
					
					
						
						| 
							 | 
						""" | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						import logging | 
					
					
						
						| 
							 | 
						import os | 
					
					
						
						| 
							 | 
						import unittest | 
					
					
						
						| 
							 | 
						from pathlib import Path | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						from axolotl.cli import load_datasets | 
					
					
						
						| 
							 | 
						from axolotl.common.cli import TrainerCliArgs | 
					
					
						
						| 
							 | 
						from axolotl.train import train | 
					
					
						
						| 
							 | 
						from axolotl.utils.config import normalize_config | 
					
					
						
						| 
							 | 
						from axolotl.utils.dict import DictDefault | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						from .utils import with_temp_dir | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						LOG = logging.getLogger("axolotl.tests.e2e") | 
					
					
						
						| 
							 | 
						os.environ["WANDB_DISABLED"] = "true" | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						class TestFalcon(unittest.TestCase): | 
					
					
						
						| 
							 | 
						    """ | 
					
					
						
						| 
							 | 
						    Test case for falcon | 
					
					
						
						| 
							 | 
						    """ | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						    @with_temp_dir | 
					
					
						
						| 
							 | 
						    def test_lora(self, temp_dir): | 
					
					
						
						| 
							 | 
						         | 
					
					
						
						| 
							 | 
						        cfg = DictDefault( | 
					
					
						
						| 
							 | 
						            { | 
					
					
						
						| 
							 | 
						                "base_model": "illuin/tiny-random-FalconForCausalLM", | 
					
					
						
						| 
							 | 
						                "flash_attention": True, | 
					
					
						
						| 
							 | 
						                "sequence_len": 1024, | 
					
					
						
						| 
							 | 
						                "load_in_8bit": True, | 
					
					
						
						| 
							 | 
						                "adapter": "lora", | 
					
					
						
						| 
							 | 
						                "lora_r": 32, | 
					
					
						
						| 
							 | 
						                "lora_alpha": 64, | 
					
					
						
						| 
							 | 
						                "lora_dropout": 0.05, | 
					
					
						
						| 
							 | 
						                "lora_target_linear": True, | 
					
					
						
						| 
							 | 
						                "lora_modules_to_save": [ | 
					
					
						
						| 
							 | 
						                    "word_embeddings", | 
					
					
						
						| 
							 | 
						                    "lm_head", | 
					
					
						
						| 
							 | 
						                ], | 
					
					
						
						| 
							 | 
						                "val_set_size": 0.1, | 
					
					
						
						| 
							 | 
						                "special_tokens": { | 
					
					
						
						| 
							 | 
						                    "bos_token": "<|endoftext|>", | 
					
					
						
						| 
							 | 
						                    "pad_token": "<|endoftext|>", | 
					
					
						
						| 
							 | 
						                }, | 
					
					
						
						| 
							 | 
						                "datasets": [ | 
					
					
						
						| 
							 | 
						                    { | 
					
					
						
						| 
							 | 
						                        "path": "mhenrichsen/alpaca_2k_test", | 
					
					
						
						| 
							 | 
						                        "type": "alpaca", | 
					
					
						
						| 
							 | 
						                    }, | 
					
					
						
						| 
							 | 
						                ], | 
					
					
						
						| 
							 | 
						                "num_epochs": 2, | 
					
					
						
						| 
							 | 
						                "micro_batch_size": 2, | 
					
					
						
						| 
							 | 
						                "gradient_accumulation_steps": 1, | 
					
					
						
						| 
							 | 
						                "output_dir": temp_dir, | 
					
					
						
						| 
							 | 
						                "learning_rate": 0.00001, | 
					
					
						
						| 
							 | 
						                "optimizer": "adamw_torch", | 
					
					
						
						| 
							 | 
						                "lr_scheduler": "cosine", | 
					
					
						
						| 
							 | 
						                "max_steps": 20, | 
					
					
						
						| 
							 | 
						                "save_steps": 10, | 
					
					
						
						| 
							 | 
						                "eval_steps": 10, | 
					
					
						
						| 
							 | 
						                "bf16": "auto", | 
					
					
						
						| 
							 | 
						            } | 
					
					
						
						| 
							 | 
						        ) | 
					
					
						
						| 
							 | 
						        normalize_config(cfg) | 
					
					
						
						| 
							 | 
						        cli_args = TrainerCliArgs() | 
					
					
						
						| 
							 | 
						        dataset_meta = load_datasets(cfg=cfg, cli_args=cli_args) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        train(cfg=cfg, cli_args=cli_args, dataset_meta=dataset_meta) | 
					
					
						
						| 
							 | 
						        assert (Path(temp_dir) / "adapter_model.bin").exists() | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						    @with_temp_dir | 
					
					
						
						| 
							 | 
						    def test_lora_added_vocab(self, temp_dir): | 
					
					
						
						| 
							 | 
						         | 
					
					
						
						| 
							 | 
						        cfg = DictDefault( | 
					
					
						
						| 
							 | 
						            { | 
					
					
						
						| 
							 | 
						                "base_model": "illuin/tiny-random-FalconForCausalLM", | 
					
					
						
						| 
							 | 
						                "flash_attention": True, | 
					
					
						
						| 
							 | 
						                "sequence_len": 1024, | 
					
					
						
						| 
							 | 
						                "load_in_8bit": True, | 
					
					
						
						| 
							 | 
						                "adapter": "lora", | 
					
					
						
						| 
							 | 
						                "lora_r": 32, | 
					
					
						
						| 
							 | 
						                "lora_alpha": 64, | 
					
					
						
						| 
							 | 
						                "lora_dropout": 0.05, | 
					
					
						
						| 
							 | 
						                "lora_target_linear": True, | 
					
					
						
						| 
							 | 
						                "lora_modules_to_save": [ | 
					
					
						
						| 
							 | 
						                    "word_embeddings", | 
					
					
						
						| 
							 | 
						                    "lm_head", | 
					
					
						
						| 
							 | 
						                ], | 
					
					
						
						| 
							 | 
						                "val_set_size": 0.1, | 
					
					
						
						| 
							 | 
						                "special_tokens": { | 
					
					
						
						| 
							 | 
						                    "bos_token": "<|endoftext|>", | 
					
					
						
						| 
							 | 
						                    "pad_token": "<|endoftext|>", | 
					
					
						
						| 
							 | 
						                }, | 
					
					
						
						| 
							 | 
						                "tokens": [ | 
					
					
						
						| 
							 | 
						                    "<|im_start|>", | 
					
					
						
						| 
							 | 
						                    "<|im_end|>", | 
					
					
						
						| 
							 | 
						                ], | 
					
					
						
						| 
							 | 
						                "datasets": [ | 
					
					
						
						| 
							 | 
						                    { | 
					
					
						
						| 
							 | 
						                        "path": "mhenrichsen/alpaca_2k_test", | 
					
					
						
						| 
							 | 
						                        "type": "alpaca", | 
					
					
						
						| 
							 | 
						                    }, | 
					
					
						
						| 
							 | 
						                ], | 
					
					
						
						| 
							 | 
						                "num_epochs": 2, | 
					
					
						
						| 
							 | 
						                "micro_batch_size": 2, | 
					
					
						
						| 
							 | 
						                "gradient_accumulation_steps": 1, | 
					
					
						
						| 
							 | 
						                "output_dir": temp_dir, | 
					
					
						
						| 
							 | 
						                "learning_rate": 0.00001, | 
					
					
						
						| 
							 | 
						                "optimizer": "adamw_torch", | 
					
					
						
						| 
							 | 
						                "lr_scheduler": "cosine", | 
					
					
						
						| 
							 | 
						                "max_steps": 20, | 
					
					
						
						| 
							 | 
						                "save_steps": 10, | 
					
					
						
						| 
							 | 
						                "eval_steps": 10, | 
					
					
						
						| 
							 | 
						                "bf16": "auto", | 
					
					
						
						| 
							 | 
						            } | 
					
					
						
						| 
							 | 
						        ) | 
					
					
						
						| 
							 | 
						        normalize_config(cfg) | 
					
					
						
						| 
							 | 
						        cli_args = TrainerCliArgs() | 
					
					
						
						| 
							 | 
						        dataset_meta = load_datasets(cfg=cfg, cli_args=cli_args) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        train(cfg=cfg, cli_args=cli_args, dataset_meta=dataset_meta) | 
					
					
						
						| 
							 | 
						        assert (Path(temp_dir) / "adapter_model.bin").exists() | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						    @with_temp_dir | 
					
					
						
						| 
							 | 
						    def test_ft(self, temp_dir): | 
					
					
						
						| 
							 | 
						         | 
					
					
						
						| 
							 | 
						        cfg = DictDefault( | 
					
					
						
						| 
							 | 
						            { | 
					
					
						
						| 
							 | 
						                "base_model": "illuin/tiny-random-FalconForCausalLM", | 
					
					
						
						| 
							 | 
						                "flash_attention": True, | 
					
					
						
						| 
							 | 
						                "sequence_len": 1024, | 
					
					
						
						| 
							 | 
						                "val_set_size": 0.1, | 
					
					
						
						| 
							 | 
						                "special_tokens": { | 
					
					
						
						| 
							 | 
						                    "bos_token": "<|endoftext|>", | 
					
					
						
						| 
							 | 
						                    "pad_token": "<|endoftext|>", | 
					
					
						
						| 
							 | 
						                }, | 
					
					
						
						| 
							 | 
						                "datasets": [ | 
					
					
						
						| 
							 | 
						                    { | 
					
					
						
						| 
							 | 
						                        "path": "mhenrichsen/alpaca_2k_test", | 
					
					
						
						| 
							 | 
						                        "type": "alpaca", | 
					
					
						
						| 
							 | 
						                    }, | 
					
					
						
						| 
							 | 
						                ], | 
					
					
						
						| 
							 | 
						                "num_epochs": 2, | 
					
					
						
						| 
							 | 
						                "micro_batch_size": 2, | 
					
					
						
						| 
							 | 
						                "gradient_accumulation_steps": 1, | 
					
					
						
						| 
							 | 
						                "output_dir": temp_dir, | 
					
					
						
						| 
							 | 
						                "learning_rate": 0.00001, | 
					
					
						
						| 
							 | 
						                "optimizer": "adamw_torch", | 
					
					
						
						| 
							 | 
						                "lr_scheduler": "cosine", | 
					
					
						
						| 
							 | 
						                "max_steps": 20, | 
					
					
						
						| 
							 | 
						                "save_steps": 10, | 
					
					
						
						| 
							 | 
						                "eval_steps": 10, | 
					
					
						
						| 
							 | 
						                "bf16": "auto", | 
					
					
						
						| 
							 | 
						            } | 
					
					
						
						| 
							 | 
						        ) | 
					
					
						
						| 
							 | 
						        normalize_config(cfg) | 
					
					
						
						| 
							 | 
						        cli_args = TrainerCliArgs() | 
					
					
						
						| 
							 | 
						        dataset_meta = load_datasets(cfg=cfg, cli_args=cli_args) | 
					
					
						
						| 
							 | 
						
 | 
					
					
						
						| 
							 | 
						        train(cfg=cfg, cli_args=cli_args, dataset_meta=dataset_meta) | 
					
					
						
						| 
							 | 
						        assert (Path(temp_dir) / "pytorch_model.bin").exists() | 
					
					
						
						| 
							 | 
						
 |