23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
5/8 스터디 전까지, 각 스터디원은 Llama, Gemma, Mistral 등의 LLM 모델 중 원하는 것을 선택하여 학습부터 추론까지의 코드를 돌려보는 것을 목표로 하였습니다.
저는 Llama2 - 7b 모델 을 선택하였고, 모델을 활용해 추후 필요한 영역에 사용하는 것이 목표입니다.
추후 수정사항이 생길 경우 내용 수정을 통해 내용을 업데이트 하겠습니다.
Colab Pro, T4
시스템 RAM 51.0GB
GPU RAM 15.0GB
디스크 201.2 GB
!pip install transformers datasets bitsandbytes peft trl accelerate --upgrade -qqq
!pip install -U huggingface_hub
!pip3 install -q -U datasets==2.18.0import torch
from datasets import Dataset, load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline, TrainingArguments
from peft import LoraConfig, PeftModel
from trl import SFTTrainerfrom huggingface_hub import notebook_login
notebook_login()각자 Huggingface 토큰을 사용하여 로그인합니다.
dataset = load_dataset("daekeun-ml/naver-news-summarization-ko")한국어 파인튜닝을 진행할 것이기 때문에, 한국어 뉴스 요약 데이터셋을 로드합니다.
학습 데이터를 확인해보면 아래와 같습니다.
dataset['train']
Dataset({
features: ['date', 'category', 'press', 'title', 'document', 'link', 'summary'],
num_rows: 22194
})dataset[’train’][0]
{'date': '2022-07-03 17:14:37',
'category': 'economy',
'press': 'YTN ',
'title': '추경호 중기 수출지원 총력 무역금융 40조 확대',
'document': '앵커 정부가 올해 하반기 우리 경제의 버팀목인 수출 확대를 위해 총력을 기울이기로 했습니다. 특히 수출 중소기업의 물류난 해소를 위해 무역금융 규모를 40조 원 이상 확대하고 물류비 지원과 임시선박 투입 등을 추진하기로 했습니다. 류환홍 기자가 보도합니다. 기자 수출은 최고의 실적을 보였지만 수입액이 급증하면서 올해 상반기 우리나라 무역수지는 역대 최악인 103억 달러 적자를 기록했습니다. 정부가 수출확대에 총력을 기울이기로 한 것은 원자재 가격 상승 등 대외 리스크가 가중되는 상황에서 수출 증가세 지속이야말로 한국경제의 회복을 위한 열쇠라고 본 것입니다. 추경호 경제부총리 겸 기획재정부 장관 정부는 우리 경제의 성장엔진인 수출이 높은 증가세를 지속할 수 있도록 총력을 다하겠습니다. 우선 물류 부담 증가 원자재 가격 상승 등 가중되고 있는 대외 리스크에 대해 적극 대응하겠습니다. 특히 중소기업과 중견기업 수출 지원을 위해 무역금융 규모를 연초 목표보다 40조 원 늘린 301조 원까지 확대하고 물류비 부담을 줄이기 위한 대책도 마련했습니다. 이창양 산업통상자원부 장관 국제 해상운임이 안정될 때까지 월 4척 이상의 임시선박을 지속 투입하는 한편 중소기업 전용 선복 적재 용량 도 현재보다 주당 50TEU 늘려 공급하겠습니다. 하반기에 우리 기업들의 수출 기회를 늘리기 위해 2 500여 개 수출기업을 대상으로 해외 전시회 참가를 지원하는 등 마케팅 지원도 벌이기로 했습니다. 정부는 또 이달 중으로 반도체를 비롯한 첨단 산업 육성 전략을 마련해 수출 증가세를 뒷받침하고 에너지 소비를 줄이기 위한 효율화 방안을 마련해 무역수지 개선에 나서기로 했습니다. YTN 류환홍입니다.',
'link': 'https://n.news.naver.com/mnews/article/052/0001759333?sid=101',
'summary': '올해 상반기 우리나라 무역수지는 역대 최악인 103억 달러 적자를 기록한 가운데, 정부가 하반기에 우리 경제의 버팀목인 수출 확대를 위해 총력을 기울이기로 결정한 가운데, 특히 수출 중소기업의 물류난 해소를 위해 무역금융 규모를 40조 원 이상 확대하고 물류비 지원과 임시선박 투입 등을 추진하기로 했다.'}meta의 모델을 사용하기 위해선, meta에 정보 제공이 필요합니다.
huggingface/meta-llama에서 개인정보를 작성한 뒤 제출하면 몇 분 뒤 사용 가능합니다.
모델을 로드하는 과정에서 OOM 이슈로 인해, QLora(Quantization + Lora)를 활용합니다.
BASE_MODEL = "meta-llama/Llama-2-7b-hf"
lora_config = LoraConfig(
r=8,
lora_alpha = 8,
lora_dropout = 0.05,
target_modules=["q_proj", "o_proj", "k_proj", "v_proj", "gate_proj", "up_proj", "down_proj"],
bias="none",
task_type="CAUSAL_LM",
)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(BASE_MODEL,
quantization_config=bnb_config,
device_map="auto"
)SFTtrainer을 사용해 학습을 진행합니다.
Max step은 500으로 설정했습니다.
trainer = SFTTrainer(
model=model,
train_dataset=dataset['train'],
max_seq_length=512,
args=TrainingArguments(
output_dir="outputs",
# num_train_epochs = 1,
max_steps=500,
per_device_train_batch_size=1,
gradient_accumulation_steps=4,
optim="paged_adamw_8bit",
warmup_steps=0.03,
learning_rate=2e-4,
fp16=True,
logging_steps=100,
push_to_hub=False,
report_to='none',
),
peft_config=lora_config,
formatting_func=generate_prompts,
)
trainer.train()[Output]
Step | Training Loss |
|---|---|
100 | 1.031900 |
200 | 0.929300 |
300 | 0.923700 |
400 | 0.868500 |
500 | 0.863000 |
TrainOutput(global_step=500,
training_loss=0.9232814483642579,
metrics = {
'train_runtime': 3351.6021,
'train_samples_per_second': 0.597,
'train_steps_per_second': 0.149,
'total_flos': 4.038108997678694e+16,
'train_loss': 0.9232814483642579,
'epoch': 0.09011444534558889})ADAPTER_MODEL = "lora_adapter"
trainer.model.save_pretrained(ADAPTER_MODEL)
model = AutoModelForCausalLM.from_pretrained(BASE_MODEL, device_map='auto', torch_dtype=torch.float16)
model = PeftModel.from_pretrained(model, ADAPTER_MODEL, device_map='auto', torch_dtype=torch.float16)
model = model.merge_and_unload()
model.save_pretrained('./Llama-2-7b-hf-finetuned')여기 까지 실행 후, 메모리 이슈로 인해 학습된 모델을 로드하지 못하는 경우가 발생합니다.
학습된 모델을 별도로 저장하고, 런타임을 재시작한 뒤 로드를 실행하는 것이 좋습니다.
이 때
BASE_MODEL = "meta-llama/Llama-2-7b-hf"
FT_MODEL = "./Llama-2-7b-hf-finetuned"
lora_config = LoraConfig(
r=8,
lora_alpha = 8,
lora_dropout = 0.05,
target_modules=["q_proj", "o_proj", "k_proj", "v_proj", "gate_proj", "up_proj", "down_proj"],
bias="none",
task_type="CAUSAL_LM",
)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
ft_model = AutoModelForCausalLM.from_pretrained(FT_MODEL,
quantization_config=bnb_config, device_map={"":0})
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, add_special_tokens=True)def generate_prompts_sentence(example):
prompt = f"""<|begin_of_text|><|start_header_id|>user<|end_header_id|>다음 글을 요약해주세요:
{example['document']}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
{example['summary']}<|eot_id|>"""
return promptpipe_finetuned = pipeline("text-generation", model=model2, tokenizer=tokenizer, max_new_tokens=512)outputs = pipe_finetuned(
generate_prompts_sentence(dataset['test'][number]),
do_sample=True,
temperature=0.2,
top_k=50,
top_p=0.95,
add_special_tokens=True
)number : 각 test set의 Index number
print(outputs[0]['generated_text'][len(generate_prompts_sentence(dataset['test'][number])):])아이일, 아이트로닉스는 차량용 복합기능형 졸음 방지 단말기 특허를 출원했으며 신규 특허는 자동차 주행 중 운전자의 졸음운전을 방지하는 상태 검출 기술에 관한 것으로, 해당 단말기는 가시광선 및 근적외선 광원을 조사하는 광원 모듈 운전자의 얼굴 영상을 촬영하는 가시광선 및 근적외선 카메라 차량 실내의 이산화탄소 농도를 측정하는 이산화탄소 센서로 구성됐다.<|eot_id|>
아이일, 아이트로닉스는 차량용 복합기능형 졸음 방지 단말기 특허를 출원했으며 신규 특허는 자동차 주행 중 운전자의 졸음운전을 방지하는 상태 검출 기술에 관한 것으로, 해당 단말기는 가시광선 및 근적외선 광원을 조사하는 �
한국형 우주발사체 누리호 가 지난 6월 21일 전남 고흥 나로우주센터 발사대에서 날아올라 성공적으로 발사됐다.<|eot_id|>
한국형 우주발사체 누리호 의 발사 성공에 힘입어 뉴스페이스 시대를 앞당기기 위한 발걸음이 빨라졌다.<|eot_id|>
우주산업 클러스터가 조성될 지역을 8월중 선정키로 했다.<|eot_id|>
이를 위해 오는 9월 중 우주산업클러스터 세부 사업의 예비타당성 조사를 신청키로 했다.<|eot_id|>
예타가 성공적으로 마무리되면 내년에 예산안을 마련해 2024년부터는 본격적으로 클러스터 구축 사업에 착수할 계획이다.<|eot_id|>
과기정통부는 정한 특화지구 지정원칙에 따르면 지역균형을 고려해 특화지구 지정때 수도권은 후보지에서 제외된다
LLM의 학습 부터 추론까지 전체적인 사이클을 경험해보며, Quantization 기법에 대해 공부할 수 있었음
리소스의 제한에 따라 모델 사용의 제한이 크다는 것을 경험함.
Output에서 아직 조금 오류가 있어, 추후 수정 필요
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.