|
--- |
|
library_name: peft |
|
datasets: |
|
- Xilabs/instructmix |
|
pipeline_tag: text-generation |
|
--- |
|
## Model Card for "InstructMix Llama 3B" |
|
|
|
**Model Name:** InstructMix Llama 3B |
|
|
|
**Description:** |
|
|
|
InstructMix Llama 3B is a language model fine-tuned on the InstructMix dataset using parameter-efficient fine-tuning (PEFT), using the base model "openlm-research/open_llama_3b_v2," which can be found at [https://huggingface.co/openlm-research/open_llama_3b_v2](https://huggingface.co/openlm-research/open_llama_3b_v2). |
|
|
|
An easy way to use InstructMix Llama 3B is via the API: https://replicate.com/ritabratamaiti/instructmix-llama-3b |
|
|
|
**Usage:** |
|
```py |
|
import torch |
|
from transformers import LlamaForCausalLM, LlamaTokenizer |
|
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
|
from transformers import LlamaTokenizer, LlamaForCausalLM, GenerationConfig |
|
from peft import PeftModel, PeftConfig |
|
|
|
# Hugging Face model_path |
|
model_path = 'openlm-research/open_llama_3b_v2' |
|
peft_model_id = 'Xilabs/instructmix-llama-3b' |
|
tokenizer = LlamaTokenizer.from_pretrained(model_path) |
|
model = LlamaForCausalLM.from_pretrained( |
|
model_path, device_map="auto" |
|
) |
|
model = PeftModel.from_pretrained(model, peft_model_id) |
|
def generate_prompt(instruction, input=None): |
|
if input: |
|
return f"""Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. |
|
|
|
### Instruction: |
|
{instruction} |
|
|
|
### Input: |
|
{input} |
|
|
|
### Response:""" |
|
else: |
|
return f"""Below is an instruction that describes a task. Write a response that appropriately completes the request. |
|
|
|
### Instruction: |
|
{instruction} |
|
|
|
### Response:""" |
|
def evaluate( |
|
instruction, |
|
input=None, |
|
temperature=0.5, |
|
top_p=0.75, |
|
top_k=40, |
|
num_beams=5, |
|
max_new_tokens=128, |
|
**kwargs, |
|
): |
|
prompt = generate_prompt(instruction, input) |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
input_ids = inputs["input_ids"].to("cuda") |
|
generation_config = GenerationConfig( |
|
temperature=temperature, |
|
top_p=top_p, |
|
top_k=top_k, |
|
num_beams=num_beams, |
|
early_stopping=True, |
|
repetition_penalty=1.1, |
|
**kwargs, |
|
) |
|
with torch.no_grad(): |
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
generation_config=generation_config, |
|
return_dict_in_generate=True, |
|
output_scores=True, |
|
max_new_tokens=max_new_tokens, |
|
) |
|
s = generation_output.sequences[0] |
|
output = tokenizer.decode(s, skip_special_tokens = True) |
|
#print(output) |
|
return output.split("### Response:")[1] |
|
|
|
instruction = "What is the meaning of life?" |
|
print(evaluate(instruction, num_beams=3, temperature=0.1, max_new_tokens=256)) |
|
``` |
|
|
|
|
|
## Training procedure |
|
|
|
|
|
The following `bitsandbytes` quantization config was used during training: |
|
- load_in_8bit: False |
|
- load_in_4bit: True |
|
- 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: nf4 |
|
- bnb_4bit_use_double_quant: True |
|
- bnb_4bit_compute_dtype: bfloat16 |
|
### Framework versions |
|
|
|
|
|
- PEFT 0.4.0 |