--- license: cc-by-nc-4.0 language: - uk --- # UAlpaca: Ukrainian instruction-tuned LLaMA ## Usage Check the Github repo with code and dataset: https://github.com/robinhad/kruk Generation Example: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/robinhad/kruk/blob/main/notebooks/ualpaca-lora.ipynb) # Requirements ```bash pip install bitsandbytes pip install -q datasets loralib sentencepiece pip install -q git+https://github.com/zphang/transformers@c3dc391 # this model uses a fork of transformers that provides LLaMA tokenizer; this wasn't merged yet pip install -q git+https://github.com/huggingface/peft.git ``` ```python from peft import PeftModel from transformers import LLaMATokenizer, LLaMAForCausalLM, GenerationConfig tokenizer = LLaMATokenizer.from_pretrained("decapoda-research/llama-7b-hf") model = LLaMAForCausalLM.from_pretrained( "decapoda-research/llama-7b-hf", load_in_8bit=True, device_map="auto", ) model = PeftModel.from_pretrained(model, "robinhad/ualpaca-7b-llama") # convert input to correct prompt def generate_prompt(instruction, input=None): if input: return f"""Унизу надається інструкція, яка описує завдання разом із вхідними даними, які надають додатковий контекст. Напиши відповідь, яка правильно доповнює запит. ### Інструкція: {instruction} ### Вхідні дані: {input} ### Відповідь:""" else: return f"""Унизу надається інструкція, яка описує завдання. Напиши відповідь, яка правильно доповнює запит. ### Інструкція: {instruction} ### Відповідь:""" # config and inference generation_config = GenerationConfig( temperature=0.2, top_p=0.75, num_beams=4, ) 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=generation_config, return_dict_in_generate=True, output_scores=True, max_new_tokens=256 ) for s in generation_output.sequences: output = tokenizer.decode(s) print("Відповідь:", output.split("### Відповідь:")[1].strip()) input_data = "Як звали батька Тараса Григоровича Шевченка?" print("Інструкція:", input_data) evaluate("Інструкція: " + input_data) ```