--- library_name: peft base_model: huggyllama/llama-7b license: other datasets: - irlab-udc/alpaca_data_galician language: - gl pipeline_tag: text-generation widget: - text: >- Abaixo está unha instrución que describe unha tarefa. Escribe unha resposta que responda adecuadamente a entrada. ### Instrución: Cal é a fórmula química da auga? ### Resposta: example_title: Basic instruction - text: >- Abaixo está unha instrución que describe unha tarefa, xunto cunha entrada que proporciona máis contexto. Escribe unha resposta que responda adecuadamente a entrada. ### Instrución: Convence ao lector por que é importante un determinado tema. ### Entrada: Por que é esencial priorizar o sono? ### Resposta: example_title: Additional input --- # Cabuxa-7B Cabuxa is a [LLaMA-7B](https://huggingface.co/huggyllama/llama-7b) model for Galician that can answer instructions in the [Alpaca format](https://github.com/tloen/alpaca-lora/blob/main/templates/alpaca.json). It was fed with the 80% of the [irlab-udc/alpaca_data_galician](https://huggingface.co/datasets/irlab-udc/alpaca_data_galician) dataset, as we are keeping the remaining 20% for future evaluation and research. This work broadens the Portuguese effort from [22h/cabrita-lora-v0-1](https://huggingface.co/22h/cabrita-lora-v0-1) to Galician. Our working notes are available [here](https://arxiv.org/abs/2311.03812). ## How to Get Started with Cabuxa-7B Use the code below to get started with the model. ```python from peft import PeftModel from transformers import AutoModelForCausalLM, LlamaTokenizer, GenerationConfig config = PeftConfig.from_pretrained("irlab-udc/cabuxa-7b") model = AutoModelForCausalLM.from_pretrained("huggyllama/llama-7b", device_map="auto") model = PeftModel.from_pretrained(model, "irlab-udc/cabuxa-7b") tokenizer = LlamaTokenizer.from_pretrained("huggyllama/llama-7b") # This function builds the prompt in Alpaca format def generate_prompt(instruction, input=None): if input: return f"""Abaixo está unha instrución que describe unha tarefa, xunto cunha entrada que proporciona máis contexto. Escribe unha resposta que responda adecuadamente a entrada. ### Instrución: {instruction} ### Entrada: {input} ### Resposta:""" else: return f"""Abaixo está unha instrución que describe unha tarefa. Escribe unha resposta que responda adecuadamente a entrada. ### Instrución: {instruction} ### Resposta:""" def evaluate(instruction, input=None): prompt = generate_prompt(instruction, input) inputs = tokenizer(prompt, return_tensors="pt") input_ids = inputs["input_ids"].cuda() generation_output = model.generate( input_ids=input_ids, generation_config=GenerationConfig(do_sample=True), return_dict_in_generate=True, output_scores=True, max_new_tokens=256, ) for s in generation_output.sequences: output = tokenizer.decode(s) print("Resposta:", output.split("### Resposta:")[1].strip()) evaluate("Cal é a fórmula química da auga?") evaluate( "Convence ao lector por que é importante un determinado tema.", "Por que é esencial priorizar o sono?", ) ``` ``` Resposta: A fórmula química da auga é H₂O. Resposta: O sono é esencial para todos os humanos, pero tamén é unha ferramenta importante para lograr obxectivos, aumentar a productividade, maximizar os beneficios do soño e mantenerse saudable. ``` ## Training #### Configurations and Hyperparameters The following `LoraConfig` config was used during training: - r: 8 - lora_alpha: 16 - target_modules: ["q_proj", "v_proj"] - lora_dropout: 0.05 - bias: "none" - task_type: "CAUSAL_LM" The following `TrainingArguments` config was used during training: - per_device_train_batch_size: 64 - gradient_accumulation_steps: 32 - warmup_steps: 100 - num_train_epochs: 20 - learning_rate: 3e-4 - fp16=True The following `bitsandbytes` quantization config was used during training: - quant_method: bitsandbytes - load_in_8bit: True - load_in_4bit: False - llm_int8_threshold: 6.0 - llm_int8_skip_modules: None - llm_int8_enable_fp32_cpu_offload: False - llm_int8_has_fp16_weight: False - bnb_4bit_quant_type: fp4 - bnb_4bit_use_double_quant: False - bnb_4bit_compute_dtype: float32 #### Loss | Epoch | Loss | |:-----:|:------:| | 0.98 | 2.6109 | | 1.97 | 2.0596 | | 2.95 | 1.5092 | | 3.93 | 1.379 | | 4.92 | 1.2849 | | 5.9 | 1.208 | | 6.88 | 1.1508 | | 7.86 | 1.117 | | 8.85 | 1.0873 | | 9.83 | 1.0666 | | 10.81 | 1.0513 | | 11.8 | 1.0365 | | 12.78 | 1.0253 | | 13.76 | 1.0169 | | 14.75 | 1.0118 | | 15.73 | 1.0035 | | 16.71 | 0.9968 | | 17.7 | 0.9983 | | 18.68 | 0.9924 | | 19.66 | 0.9908 | #### Framework versions - PyTorch 2.1.0 - PEFT 0.6.0.dev0 - 🤗 Transformers 4.34.0 - 🤗 Datasets 2.14.5 - 🤗 Tokenizers 0.14.0 ## Environmental Impact Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700). - **Hardware Type:** NVIDIA RTX A6000. - **Hours used:** 72. - **Cloud Provider:** Private infrastructure. - **Carbon Emitted:** 9.33 Kg. CO2 eq.