Views
No views yet

1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM
3
4device = (
5 "cuda:0" if torch.cuda.is_available() else # Nvidia GPU
6 "mps" if torch.backends.mps.is_available() else # Apple Silicon GPU
7 "cpu"
8)
9
10model_id = "PathFinderKR/Waktaverse-Llama-3-KO-8B-Instruct"
11
12tokenizer = AutoTokenizer.from_pretrained(model_id)
13model = AutoModelForCausalLM.from_pretrained(
14 model_id,
15 torch_dtype=torch.bfloat16,
16 device=device,
17)
18
19################################################################################
20# Generation parameters
21################################################################################
22num_return_sequences=1
23max_new_tokens=1024
24temperature=0.9
25top_k=40
26top_p=0.9
27repetition_penalty=1.1
28
29def generate_response(system ,user):
30 messages = [
31 {"role": "system", "content": system},
32 {"role": "user", "content": user}
33 ]
34 prompt = tokenizer.apply_chat_template(
35 messages,
36 tokenize=False,
37 add_generation_prompt=False
38 )
39
40 input_ids = tokenizer.encode(
41 prompt,
42 add_special_tokens=False,
43 return_tensors="pt"
44 ).to(device)
45
46 outputs = model.generate(
47 input_ids=input_ids,
48 pad_token_id=tokenizer.eos_token_id,
49 num_return_sequences=num_return_sequences,
50 max_new_tokens=max_new_tokens,
51 do_sample=True,
52 temperature=temperature,
53 top_k=top_k,
54 top_p=top_p,
55 repetition_penalty=repetition_penalty
56 )
57
58 return tokenizer.decode(outputs[0], skip_special_tokens=False)
59
60system_prompt = "다음 지시사항에 대한 응답을 작성해주세요."
61user_prompt = "피보나치 수열에 대해 설명해주세요."
62response = generate_response(system_prompt, user_prompt)
63print(response)1<|begin_of_text|><|start_header_id|>system<|end_header_id|>
2
3다음 지시사항에 대한 응답을 작성해주세요.<|eot_id|><|start_header_id|>user<|end_header_id|>
4
5피보나치 수열에 대해 설명해주세요.<|eot_id|><|start_header_id|>assistant<|end_header_id|>
6
7피보나치 수열은 수학에서 가장 유명한 수열 중 하나로, 0과 1로 시작하는 숫자들의 모임입니다. 각 숫자는 이전 두 개의 숫자의 합으로 정의되며, 이렇게 계속 반복됩니다. 피보나치 수열은 무한히 커지는데, 첫 번째와 두 번째 항이 모두 0일 수도 있지만 일반적으로는 첫 번째 항이 1이고 두 번째 항이 1입니다.
8
9예를 들어, 0 + 1 = 1, 1 + 1 = 2, 2 + 1 = 3, 3 + 2 = 5, 5 + 3 = 8, 8 + 5 = 13, 13 + 8 = 21, 21 + 13 = 34 등이 있습니다. 이 숫자들을 피보나치 수열이라고 합니다.
10
11피보나치 수열은 다른 수열들과 함께 사용될 때 도움이 됩니다. 예를 들어, 금융 시장에서는 금리 수익률을 나타내기 위해 이 수열이 사용됩니다. 또한 컴퓨터 과학과 컴퓨터 과학에서도 종종 찾을 수 있습니다. 피보나치 수열은 매우 복잡하며 많은 숫자가 나오므로 일반적인 수열처럼 쉽게 구할 수 없습니다. 이 때문에 피보나치 수열은 대수적 함수와 관련이 있으며 수학자들은 이를 연구하고 계산하기 위해 다양한 알고리즘을 개발했습니다.
12
13참고 자료: https://en.wikipedia.org/wiki/Fibonacci_sequence#Properties.<|eot_id|>1################################################################################
2# bitsandbytes parameters
3################################################################################
4load_in_4bit=True
5bnb_4bit_compute_dtype=torch_dtype
6bnb_4bit_quant_type="nf4"
7bnb_4bit_use_double_quant=False
8
9################################################################################
10# LoRA parameters
11################################################################################
12task_type="CAUSAL_LM"
13target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]
14r=8
15lora_alpha=16
16lora_dropout=0.05
17bias="none"
18
19################################################################################
20# TrainingArguments parameters
21################################################################################
22num_train_epochs=1
23per_device_train_batch_size=1
24per_device_eval_batch_size=2
25gradient_accumulation_steps=4
26gradient_checkpointing=True
27learning_rate=2e-5
28lr_scheduler_type="cosine"
29warmup_ratio=0.1
30weight_decay=0.1
31
32################################################################################
33# SFT parameters
34################################################################################
35max_seq_length=1024
36packing=TrueTBD@article{llama3modelcard,
title={Llama 3 Model Card},
author={AI@Meta},
year={2024},
url = {https://github.com/meta-llama/llama3/blob/main/MODEL_CARD.md}
}