facebook meta pytorch llama llama-2 llama-2-chat

komt-Llama-2-13b-hf-lora

This model fine-tuned the aaa model using PEFT-LoRA.

The "komt-Llama-2-13b-hf-lora" model was developed using a multi-task instruction technique aimed at enhancing Korean language performance. For more details, please refer to the GitHub Repository. Please refer below for more detailed information.

For more detailed information, please refer to the https://huggingface.co/davidkim205/komt-Llama-2-13b-hf.

Model Details

Dataset

korean multi-task instruction dataset

Prompt Template

### instruction: {prompt}

### Response: 

Examples:

### instruction: 영화 해리포터 시리즈 배급사가 어디야

### Response:

response:

### instruction: 영화 해리포터 시리즈 배급사가 어디야

### Response: 워너 브라더스\n그 외에도 키네스 같은 작은 역할을 맡은 사람들도 있었다. 데이비드 알바레즈는 볼드모트 군단의 보로미르 7개 학교 중 하나인 필립스부르그 보로미르 7개 학교의 교장이며, 필리우스 플리트우드는 필립스부르그 보로미르 7개 학교의 교사이다. 필립스부르그는 보로미르 7개 학교 중 하나로, 보로미르 전설에 따르면 보로미르 7개 학교의 교장들이 죽으면 세계를 멸망시킨다는 점을 알고 있다. 《해리 포터와 혼혈 왕자》에서 데스 이터는 해리 포터를 죽이려고 하지만 실패하고 해리 포터는 데스 이터를 죽이려고 하지만 또 실패한다. 《해리 포터와 아즈카반의 죄수》에서 데스 이터는 아즈카반의 죄수로 등장하여 해리 포터에게 복수를 하고자 하지만 해리 포터와 론 위즐리의 발 빠른 대처로 실패하고 해리 포터와 론 위즐리는 데스 이터를 죽이려고 하지만 실패하고 그 결과 데스 이터는 다시 기저승에 봉인된다. 《해리 포터와 죽음의 성물》에서 데스 이터는 부활하여 죽음의 성물 1부에 등장하였으며, 해리 포터와 죽음의 성물 2부에서 데스 이터는 죽음의 성물 2부의 내용을 방해하는 간첩 역할을 한다. 데스 이터는 영화 해리포터와 죽음의 성물 1부에서 데스 이터의 역할을 맡은 배우 스티븐 피카드가 연기한다.

Usage

After downloading from GitHub, please install as follows:

git clone https://github.com/davidkim205/komt
cd komt
pip install -r lora/requirements_lora.txt

import torch

from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from transformers import StoppingCriteria, StoppingCriteriaList
from transformers import TextStreamer, GenerationConfig
from peft import PeftModel, PeftConfig

class LocalStoppingCriteria(StoppingCriteria):

    def __init__(self, tokenizer, stop_words = []):
        super().__init__()

        stops = [tokenizer(stop_word, return_tensors='pt', add_special_tokens = False)['input_ids'].squeeze() for stop_word in stop_words]
        print('stop_words', stop_words)
        print('stop_words_ids', stops)
        self.stop_words = stop_words
        self.stops = [stop.cuda() for stop in stops]
        self.tokenizer = tokenizer
    def _compare_token(self, input_ids):
        for stop in self.stops:
            if len(stop.size()) != 1:
                continue
            stop_len = len(stop)
            if torch.all((stop == input_ids[0][-stop_len:])).item():
                return True

        return False
    def _compare_decode(self, input_ids):
        input_str = self.tokenizer.decode(input_ids[0])
        for stop_word in self.stop_words:
            if input_str.endswith(stop_word):
                return True
        return False

    def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor):
        input_str = self.tokenizer.decode(input_ids[0])
        for stop_word in self.stop_words:
            if input_str.endswith(stop_word):
                return True
        return False

#
# config
peft_model_name = 'davidkim205/komt-Llama-2-7b-chat-hf-lora'
model_name = 'davidkim205/komt-Llama-2-7b-chat-hf'
instruction_prefix = "### instruction: "
input_prefix = "### input: "
answer_prefix = "### Response: "
endoftext = "<|end|>"
stop_words = [endoftext, '<s>', '###']
generation_config = GenerationConfig(
    temperature=0.9,
    top_p=0.7,
    top_k=100,
    max_new_tokens=2048,
    early_stopping=True,
    do_sample=True,
)
#
# create model
config = PeftConfig.from_pretrained(peft_model_name)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=bnb_config,
                                             device_map="auto")
model = PeftModel.from_pretrained(model, peft_model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
stopping_criteria = StoppingCriteriaList([LocalStoppingCriteria(tokenizer=tokenizer, stop_words=stop_words)])
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
model.eval()

#
# generate
prompt = f"### instruction: 영화 해리포터 시리즈 배급사가 어디야\n\n### Response:"
gened = model.generate(
    **tokenizer(
        prompt,
        return_tensors='pt',
        return_token_type_ids=False
    ).to('cuda'),
    generation_config=generation_config,
    eos_token_id=model.config.eos_token_id,
    stopping_criteria=stopping_criteria,
    streamer=streamer
)
output_text = tokenizer.decode(gened[0], skip_special_tokens=True)

print('--------------------')
print(output_text)

response:

워너 브라더스\n그 외에도 키네스 같은 작은 역할을 맡은 사람들도 있었다. 데이비드 알바레즈는 볼드모트 군단의 보로미르 7개 학교 중 하나인 필립스부르그 보로미르 7개 학교의 교장이며, 필리우스 플리트우드는 필립스부르그 보로미르 7개 학교의 교사이다. 필립스부르그는 보로미르 7개 학교 중 하나로, 보로미르 전설에 따르면 보로미르 7개 학교의 교장들이 죽으면 세계를 멸망시킨다는 점을 알고 있다. 《해리 포터와 혼혈 왕자》에서 데스 이터는 해리 포터를 죽이려고 하지만 실패하고 해리 포터는 데스 이터를 죽이려고 하지만 또 실패한다. 《해리 포터와 아즈카반의 죄수》에서 데스 이터는 아즈카반의 죄수로 등장하여 해리 포터에게 복수를 하고자 하지만 해리 포터와 론 위즐리의 발 빠른 대처로 실패하고 해리 포터와 론 위즐리는 데스 이터를 죽이려고 하지만 실패하고 그 결과 데스 이터는 다시 기저승에 봉인된다. 《해리 포터와 죽음의 성물》에서 데스 이터는 부활하여 죽음의 성물 1부에 등장하였으며, 해리 포터와 죽음의 성물 2부에서 데스 이터는 죽음의 성물 2부의 내용을 방해하는 간첩 역할을 한다. 데스 이터는 영화 해리포터와 죽음의 성물 1부에서 데스 이터의 역할을 맡은 배우 스티븐 피카드가 연기한다.

Hardware and Software

Training procedure

The following bitsandbytes quantization config was used during training:

Framework versions