ualpaca-7b-llama / README.md
robinhad's picture
Add colab badge
b11f4cf
---
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)
```