# Alpaca QLoRA Finetuning (experimental support) This example ports [Alpaca-LoRA](https://github.com/tloen/alpaca-lora/tree/main) to BigDL-LLM QLoRA on [Intel CPUs](../../README.md). ### 1. Install ```bash conda create -n llm python=3.9 conda activate llm pip install --pre --upgrade bigdl-llm[all] pip install datasets transformers==4.34.0 pip install fire peft==0.5.0 pip install accelerate==0.23.0 ``` ### 2. Configures environment variables ```bash source bigdl-llm-init -t ``` ### 3. Finetuning LLaMA-2-7B on a node: Example usage: ``` python ./alpaca_qlora_finetuning_cpu.py \ --base_model "meta-llama/Llama-2-7b-hf" \ --data_path "yahma/alpaca-cleaned" \ --output_dir "./bigdl-qlora-alpaca" ``` **Note**: You could also specify `--base_model` to the local path of the huggingface model checkpoint folder and `--data_path` to the local path of the dataset JSON file. #### Sample Output ```log {'loss': 1.9231, 'learning_rate': 2.9999945367033285e-05, 'epoch': 0.0} {'loss': 1.8622, 'learning_rate': 2.9999781468531096e-05, 'epoch': 0.01} {'loss': 1.9043, 'learning_rate': 2.9999508305687345e-05, 'epoch': 0.01} {'loss': 1.8967, 'learning_rate': 2.999912588049185e-05, 'epoch': 0.01} {'loss': 1.9658, 'learning_rate': 2.9998634195730358e-05, 'epoch': 0.01} {'loss': 1.8386, 'learning_rate': 2.9998033254984483e-05, 'epoch': 0.02} {'loss': 1.809, 'learning_rate': 2.999732306263172e-05, 'epoch': 0.02} {'loss': 1.8552, 'learning_rate': 2.9996503623845395e-05, 'epoch': 0.02} 1%|█ | 8/1164 [xx:xx: {tags}" } ``` 2. update prompter.py and add new generate_prompt method ```python def generate_quote_prompt(self, quote: str, tags: Union[None, list]=None,) -> str: tags = str(tags) res = self.template["prompt"].format( quote=quote, tags=tags ) if self._verbose: print(res) return res ``` 3. update generate_and_tokenize_prompt method ```python def generate_and_tokenize_prompt(data_point): full_prompt = prompter.generate_quote_prompt( data_point["quote"], data_point["tags"] ) user_prompt = prompter.generate_quote_prompt( data_point["quote"], data_point["tags"] ) ``` 4. choose prompt `english_quotes` to train ```bash python ./quotes_qlora_finetuning_cpu.py \ --base_model "meta-llama/Llama-2-7b-hf" \ --data_path "./english_quotes" \ --output_dir "./bigdl-qlora-alpaca" \ --prompt_template_name "english_quotes" ```