File size: 3,390 Bytes
285bf0b b0b43c1 285bf0b be676b9 285bf0b 69306c5 b0b43c1 57f92c6 69306c5 285bf0b 38f0467 285bf0b a260b60 285bf0b 57f92c6 285bf0b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
from peft import PeftModel
from transformers import LlamaTokenizer, LlamaForCausalLM, GenerationConfig
import gradio as gr
from torch.cuda import is_available
from torch import bfloat16
if is_available():
options = dict(
load_in_8bit=True,
device_map="auto",
)
else:
options = {
"torch_dtype": bfloat16
#"low_cpu_mem_usage": True,
#"offload_state_dict": True,
#"offload_folder": "offload",
#"device_map": "auto",
}
tokenizer = LlamaTokenizer.from_pretrained("openlm-research/open_llama_3b_v2")
model = LlamaForCausalLM.from_pretrained(
"openlm-research/open_llama_3b_v2",
**options
)
model = PeftModel.from_pretrained(model, "robinhad/open_llama_3b_uk", )#offload_state_dict=True, offload_folder=".")
def generate_prompt(instruction, input=None, output=""):
if input:
return f"""Унизу надається інструкція, яка описує завдання разом із вхідними даними, які надають додатковий контекст. Напиши відповідь, яка правильно доповнює запит.
### Інструкція:
{instruction}
### Вхідні дані:
{input}
### Відповідь:
{output}"""
else:
return f"""Унизу надається інструкція, яка описує завдання. Напиши відповідь, яка правильно доповнює запит.
### Інструкція:
{instruction}
### Відповідь:
{output}"""
generation_config = GenerationConfig(
temperature=0.2,
top_p=0.75,
num_beams=4,
)
def evaluate(instruction, input=None):
if input.strip() == "":
input = None
prompt = generate_prompt(instruction, input)
inputs = tokenizer(prompt, return_tensors="pt")
input_ids = inputs["input_ids"]
if is_available():
input_ids = 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=64
)
for s in generation_output.sequences:
output = tokenizer.decode(s, skip_special_tokens=True)
print("============")
print(output)
return output.split("### Відповідь:")[1].strip()
gr.Interface(
evaluate,
[
gr.inputs.Textbox(lines=5, label="Інструкція"),
gr.inputs.Textbox(lines=5, label="Вхідні дані (необов'язково)"),
],
gr.outputs.Textbox(label="Відповідь"),
title="Kruk",
description="Open Llama is a Ukrainian language model trained on the machine-translated Dolly dataset.",
examples=[
[
"Яка найвища гора в Україні?",
"",
],
[
"Розкажи історію про Івасика-Телесика.",
"",
],
[
"Яка з цих гір не знаходиться у Європі?",
"Говерла, Монблан, Гран-Парадізо, Еверест"
],
[
"Чому качки жовтоногі?",
"",
],
[
"Чому у качки жовті ноги?",
"",
],
]
).launch() |