더보기
54일 차 회고.
배가 아파서 점심을 건너뛰고 빅데이터분석기사 공부를 했다. 이제 겨우 일주일 남았는데 아직 공부해야 할 분량이 많이 남아있어서 불안하기도 해서 오히려 시간이 빨리 지나갔으면 좋겠다. 그리고 오늘 SQLD 사전 점수가 공개되었는데 안정적으로 합격이 되었다.
1. SFT Trainer
1-1. TRL(Transformer Reinforcement Learning)
Trainer
- 일반적인 목적의 학습
- 텍스트 분류, QA, 요약과 같은 지도 학습에 대해 처음부터 모델을 학습한다.
- 고도화된 커스터마이징
- Hyperparameters, Optimizers, Schedulers, Logging, 평가 지표를 Fine Tuning 하기 위한 광범위한 config 옵션을 제공한다.
- 복잡한 학습 워크플로우 처리
- Gradient Accumulation, Early Stopping, Checkpointing, 분산학습 등의 기능을 지원한다.
- 많은 데이터 요구
SFT Trainer
- SFT(Supervised Fine Tuning)
- 지도 학습에서 더 작은 데이터 세트로 사전 학습 된 모델을 Fine Tuning 하는 데 최적화되어 있다.
- 간단한 인터페이스
- 효율적인 메모리 사용
- PEFT(Parameter Efficient)
- 패킹 최적화(Packing Optimization)
- 빠른 학습
1-2. SFT Trainer
Module
!pip install typing_extensions==4.7.1 --upgrade
!pip install trl peft wandb
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
model_id = 'beomi/KoAlpaca-Polyglot-5.8B'
model = AutoModelForCausalLM.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
dataset = load_dataset('CarrotAI/ko-instruction-dataset', split='train')
dataset
"""
Dataset({
features: ['output', 'instruction'],
num_rows: 7040
})
"""
def formatting_prompts_func(example):
output_texts = []
for i in range(len(example['instruction'])):
text = f'### Question: {example['instruction'][i]}\n ### Answer: {example['output'][i]}'
output_texts.append(text)
return output_texts
response_template = ' ### Answer:'
collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
Training
from peft import LoraConfig
peft_config = LoraConfig(
r=16,
lora_alpha=32,
lora_dropout=0.05,
bias='none',
task_type='CAUSAL_LM' # Text Generation
SFT Config
from transformers import TrainingArguments
arge = TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
warmup_steps=5,
max_steps=60,
learning_rate=2e-4,
weight_decay=0.01,
lr_scheduler_type="linear",
seed=3407,
output_dir="outputs",
report_to="wandb",
run_name="alpaca-base-high-lr",
logging_steps=1
)
SFT Trainer
- Weights & Biases의 API key를 입력해야 한다.
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
args=args,
peft_config=peft_config,
formatting_Func=formatting_prompts_func,
data_collator=collator
)
trainer.train()

Inference
from transformers import pipeline
pipe = pipeline(
task='text-generation',
model=model,
tokenizer=tokenizer,
device=0
)
def ask(x, context='', is_input_full=False):
answer = pipe(
f'### 질문: {x}\n\n### 맥락: {context}\n\n### 답변:' if context else f'### 질문: {x}\n\n### 답변',
do_sample=True,
max_new_tokens=512,
temperature=0.7,
top_p=0.9,
return_full_text=False,
eos_token_id=tokenizer.eos_token_id
)
print(answer[0]['generated_text'])
ask('-Question-')
2. LLM 프로젝트
2-1. Flow Chart

2-2. 파일 구조
LLM_PROJECT
├─ database
│ ├─ db
│ └─ docker-compose.yml
├─ etl
│ └─ README.md
├─ training
│ └─ README.md
├─ web
│ ├─ .venv
│ ├─ common
│ │ ├─ database
│ │ ├─ display
│ │ │ ├─ constant.py
│ │ │ ├─ history.py
│ │ │ ├─ input.py
│ │ │ ├─ output.py
│ │ │ └─ utils.py
│ │ ├─ model
│ │ │ ├─ groq.py
│ │ │ ├─ ollama.py
│ │ │ ├─ openai.py
│ │ │ ├─ provider_class.py
│ │ │ └─ provider.py
│ │ └─ pages
│ │ └─ db.py
│ ├─ .env
│ ├─ chatbot.py
│ ├─ requirements.txt
│ └─ test.ipynb
├─ .gitignore
└─ README.md
2-3. 개발 과정
관계형 데이터베이스(PostgreSQL) 구축
- docker-compose.yml
version: '3'
services:
db-postgresql:
image: pgvector/pgvector:pg17
container_name: db-postgresql
restart: always
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: p1234
ports:
- '5432:5432'
- terminal
docker-compose up -d
- Docker 생성 확인

- db-postgresql Exec
# psql -U postgres
postgres=# CREATE DATABASE dvdrental;
postgres=# exit
# cd /var/lib/postgresql/data
# pg_restore -U postgres -d dvdrental ./dvdrental.tar
# psql -U postgres
postgres=# \c dvdrental
dvdrental=#
- SQL
SELECT f1.title, COUNT(f2.actor_id) actor_cnt
FROM film f1
LEFT JOIN film_actor f2
ON f1.film_id=f2.film_id
GROUP BY f1.film_id
;
Streamlit 연결
- web/.env
OPENAI_API_KEY=
GROQ_API_KEY=
HOST=
PORT=
DATABASE=
USER_NAME=
PASSWORD=
- web/requirements.txt
python-dotenv
streamlit
groq
openai
jupyter=
pandas
langchain
langchain-community
psycopg2-binary
sqlalchemy
- web/pages/db.py
Git & Github
- .gitignore
.venv
__pycache__
.env
database/db
'SK네트웍스 Family AI캠프 10기 > Daily 회고' 카테고리의 다른 글
| 56일차. Fine Tuning - Prompt & Quantization & PEFT & GGUF (0) | 2025.04.01 |
|---|---|
| 55일차. Fine Tuning - DeepSpeed & Accelerate & LLM 프로젝트 (0) | 2025.03.31 |
| 53일차. Hugging Face - Transformer Trainer & LLM 프로젝트 (0) | 2025.03.27 |
| 52일차. Hugging Face - Transformer Model & Pipeline & LLM - LLM 프로젝트 (0) | 2025.03.26 |
| 51일차. LLM - LLaMA & Claude & SciSpace & LLM 프로젝트 (0) | 2025.03.25 |