--- language: - en - ko pipeline_tag: text-generation inference: false tags: - facebook - meta - pytorch - llama - llama-2 - llama-2-chat license: apache-2.0 library_name: peft --- # 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 * **Model Developers** : davidkim(changyeon kim) * **Repository** : https://github.com/davidkim205/komt * **Lora target modules** : q_proj, o_proj, v_proj, gate_proj, down_proj, k_proj, up_proj * **Model Size** : 120MB * **Model Architecture** : komt-Llama-2-13b is an auto-regressive language model that uses an optimized transformer architecture. The tuned versions use supervised fine-tuning by multi-task instruction ## 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 ``` * Requirements Python >=3.8. Linux distribution (Ubuntu, MacOS, etc.) + CUDA > 10.0. Refer https://github.com/TimDettmers/bitsandbytes#tldr ``` 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, '', '###'] 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 - nvidia driver : 535.54.03 - CUDA Version: 12.2 - ## 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.5.0.dev0