본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장
② 오늘자 날짜, 공부 종료 시각 포함 사진 1장
③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장
④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)
2. 학습 후기 700자 이상 (공백 제외)
- 라마팩토리 설치
!git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory !pip install e ".[torch,metrics]" !pip3 install deepspeed datasets vllm scikit-learn import torch try: assert torch.cuda.is_available() is True except AssertionError: print("Please set up a GPU before using LLaMA Factory: https://medium.com/mlearning-ai/training-yolov4-on-google-colab-316f8fff99c6")
- 데이터셋 로드
import json import os from datasets import load_dataset from sklearn.model_selection import train_test_split import IPython.display as display
데이터셋 로드
print("데이터셋 다운로드 중...")
dataset = load_dataset("iamjoon/finance_news_summarizer")
train_data = dataset["train"]
샘플 데이터 확인
print("\n첫 번째 샘플:")
display.display(train_data[0])
- 학습데이터와 테스트데이터 분리
~~~코드3
# Dataset을 리스트로 변환
train_data_list = list(train_data)
# 학습/테스트 데이터 분할 (8:2)
train_split, test_split = train_test_split(train_data_list, test_size=0.2, random_state=42)
- 라마팩토리 특유의 형식으로 변환
- 'system' : 시스템 프롬프트
- 'instruction' : 유저 프롬프트
- 'output' : 레이블
# LLaMA-Factory 형식으로 변환하는 함수
def convert_to_llama_factory_format(data_split):
converted = []
for item in data_split:
if isinstance(item["assistant"], dict):
assistant_text = json.dumps(item["assistant"], ensure_ascii=False)
else:
assistant_text = item["assistant"]
preprocessed_item = {
"instruction": item["user_prompt"],
"input": "",
"output": assistant_text,
"system": item["system_prompt"]
}
converted.append(preprocessed_item)
return converted
# 변환
print("\n학습/테스트 데이터셋 변환 중...")
llama_train = convert_to_llama_factory_format(train_split)
llama_test = convert_to_llama_factory_format(test_split)
# 샘플 데이터 확인
print("\n첫 번째 샘플:")
display.display(llama_train[0])
# output 부분은 반드시 문자열이어야 합니다.
type(llama_train[0]['output'])
- 라마팩토리에서는 data 디렉토리 안에 json파일로 파일을 저장해야 함
# 저장 print("\nJSON 파일로 저장 중...") os.makedirs("data", exist_ok=True)
with open("data/finance_news_summarizer_train.json", "w", encoding="utf-8") as f:
json.dump(llama_train, f, ensure_ascii=False, indent=2)
with open("data/finance_news_summarizer_test.json", "w", encoding="utf-8") as f:
json.dump(llama_test, f, ensure_ascii=False, indent=2)
print("완료되었습니다.")
- 라마팩토리에서는 data 디렉토리 내에 데이터를 저장하고나서 반드시 dataset_info.json에 데이터를 등록해야 함
~~~코드6
# 데이터셋 정보 파일 업데이트
dataset_info_path = "data/dataset_info.json"
if os.path.exists(dataset_info_path):
with open(dataset_info_path, "r", encoding="utf-8") as f:
dataset_info = json.load(f)
else:
dataset_info = {}
# finance_news_summarizer 데이터셋 정보 추가
dataset_info["finance_news_summarizer"] = {
"file_name": "finance_news_summarizer_train.json",
"columns": {
"prompt": "instruction", # 유저 프롬프트
"query": "input", # 실제 사용되지는 않지만 형식적으로 넣어준다.
"response": "output", # 어시스턴트 답변
"system": "system" # 시스템 프롬프트
}
}
# 업데이트된 데이터셋 정보 저장
with open(dataset_info_path, "w", encoding="utf-8") as f:
json.dump(dataset_info, f, ensure_ascii=False, indent=2)
print(f"데이터셋 정보가 {dataset_info_path}에 업데이트되었습니다.")
- 학습 파라미터 설정
- 라마팩토리에서는 학습 파라미터를 설정하고 설정값을 json파일로 저장해아 함
# 학습 구성 생성 args = dict( stage="sft", # 지도 학습 미세 조정 수행 do_train=True, model_name_or_path="NCSOFT/Llama-VARCO-8B-Instruct", # 한글 사용 가능한 라마 모델 dataset="finance_news_summarizer", # 변환한 데이터셋 사용 template="llama3", # llama3 프롬프트 템플릿 사용 finetuning_type="lora", # 메모리 절약을 위해 LoRA 어댑터 사용 lora_target="all", # 모든 선형 레이어에 LoRA 어댑터 연결 output_dir="llama3_finance_lora", # LoRA 어댑터 저장 경로 per_device_train_batch_size=2, # 마이크로 배치 크기 gradient_accumulation_steps=4, # 그래디언트 누적 단계 lr_scheduler_type="cosine", # 코사인 학습률 스케줄러 사용 learning_rate=1e-5, # 학습률 num_train_epochs=3.0, # 학습 에포크 수 bf16=True, # bfloat16 혼합 정밀도 학습 사용 report_to="none", # wandb 로깅 비활성화 # 멀티 GPU 및 DeepSpeed 설정 deepspeed="examples/deepspeed/ds_z3_config.json", # DeepSpeed ZeRO-3 설정 파일 경로 ddp_find_unused_parameters=False, # 멀티 GPU 학습을 위한 설정 ) # 학습 구성 저장 json.dump(args, open("/workspace/LLaMA-Factory/train_finance.json", "w", encoding="utf-8"), indent=2)
print("학습 구성이 저장되었습니다. 이제 학습을 시작합니다.")
~
url : https://abit.ly/lisbva
'스타트업 투자 > 데이터 + 테크' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 40일차 : 모델 호출 강의 후기 (0) | 2025.05.10 |
---|---|
패스트캠퍼스 환급챌린지 39일차 : 모델업로드 및 다운로드 강의 후기 (0) | 2025.05.09 |
패스트캠퍼스 환급챌린지 37일차 : 요약 데이터 전처리 강의 후기 (0) | 2025.05.07 |
패스트캠퍼스 환급챌린지 36일차 : vLLM을 활용한 Multi-LoRA Serving 강의 후기 (0) | 2025.05.06 |
패스트캠퍼스 환급챌린지 35일차 : 페이지드 어텐션과 vLLM 강의 후기 (1) | 2025.05.05 |
댓글