|
--- |
|
license: mit |
|
language: |
|
- pt |
|
base_model: |
|
- meta-llama/Llama-3.1-8B-Instruct |
|
library_name: peft |
|
tags: |
|
- bode |
|
- llama |
|
- portuguese |
|
--- |
|
Recomendamos fortemente que utilizem o Kaggle com GPU. Você pode usar o Bode facilmente com a biblioteca Transformers do HuggingFace. Entretanto, é necessário ter a autorização de acesso ao [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct). |
|
|
|
Abaixo, colocamos um exemplo simples de como carregar o modelo e gerar texto: |
|
|
|
```python |
|
|
|
# Downloads necessários |
|
!pip install transformers |
|
!pip install einops accelerate bitsandbytes |
|
!pip install sentence_transformers |
|
!pip install git+https://github.com/huggingface/peft.git |
|
|
|
|
|
from peft import PeftModel |
|
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig |
|
import transformers |
|
import torch |
|
from peft import PeftModel, PeftConfig |
|
|
|
llm_model = "recogna-nlp/Bode-3.1-8B-Instruct-lora" |
|
hf_auth = 'HF_KEY' |
|
config = PeftConfig.from_pretrained(llm_model) |
|
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, trust_remote_code=True, return_dict=True, load_in_4bit=True, device_map='auto', token=hf_auth) |
|
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path, token=hf_auth) |
|
model = PeftModel.from_pretrained(model, llm_model) # Caso ocorra o seguinte erro: "ValueError: We need an `offload_dir`... Você deve acrescentar o parâmetro: offload_folder="./offload_dir". |
|
model.eval() |
|
|
|
|
|
#Testando geração de texto |
|
def generate_prompt(instruction, input=None): |
|
if input: |
|
return f"""Abaixo está uma instrução que descreve uma tarefa, juntamente com uma entrada que fornece mais contexto. Escreva uma resposta que complete adequadamente o pedido. |
|
|
|
### Instrução: |
|
{instruction} |
|
|
|
### Entrada: |
|
{input} |
|
|
|
### Resposta:""" |
|
else: |
|
return f"""Abaixo está uma instrução que descreve uma tarefa. Escreva uma resposta que complete adequadamente o pedido. |
|
|
|
### Instrução: |
|
{instruction} |
|
|
|
### Resposta:""" |
|
|
|
generation_config = GenerationConfig( |
|
num_beams=2, |
|
do_sample=False, |
|
pad_token_id=tokenizer.eos_token_id |
|
) |
|
def evaluate(instruction, input=None): |
|
prompt = generate_prompt(instruction, input) |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
input_ids = inputs["input_ids"].cuda() |
|
attention_mask = inputs["attention_mask"].cuda() |
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
attention_mask=attention_mask, |
|
generation_config=generation_config, |
|
return_dict_in_generate=True, |
|
output_scores=True, |
|
max_length=800, |
|
) |
|
for s in generation_output.sequences: |
|
output = tokenizer.decode(s, skip_special_tokens=True) |
|
print("Resposta:", output.split("### Resposta:")[1].strip()) |
|
|
|
evaluate("Faça uma função em python de multiplicação entre 3 valores") |
|
``` |