File size: 5,799 Bytes
9e33468
 
 
 
e3f4c9b
 
527e17f
 
 
580e13f
 
 
 
 
 
0a2499c
 
37fe333
 
 
 
 
 
 
 
 
0a2499c
37fe333
0a2499c
 
37fe333
 
 
 
 
 
0a2499c
 
 
 
 
 
 
 
 
 
 
37fe333
0a2499c
 
 
 
1af88d9
37fe333
0a2499c
 
7bb076e
0a2499c
37fe333
 
 
 
 
 
 
 
 
 
7bb076e
37fe333
 
 
 
 
 
 
 
 
 
7bb076e
0a2499c
 
 
 
 
 
 
 
7bb076e
0a2499c
37fe333
bdc8a19
580e13f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77caa60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
---
datasets:
- gbharti/finance-alpaca
- sujet-ai/Sujet-Finance-Instruct-177k
tags:
- krx
base_model:
- Qwen/Qwen2.5-7B-Instruct
library_name: transformers
---


# Qwen 2.5 7B Instruct 모델 파인튜닝
이 저장소는 Amazon SageMaker를 사용하여 Qwen 2.5 7B Instruct 모델을 파인튜닝하는 코드를 포함하고 있습니다. 이 프로젝트는 대규모 언어 모델의 효율적인 파인튜닝을 위해 QLoRA(Quantized Low-Rank Adaptation)를 사용합니다.

## 모델 사용 방법

### 요구사항
- Python 3.8 이상
- CUDA 지원 GPU (최소 24GB VRAM 권장)
- 필요한 라이브러리:
```bash
pip install torch transformers accelerate
```

## 기본 사용 예시
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# CUDA 사용 가능 여부 확인
if torch.cuda.is_available():
    print(f"Using GPU: {torch.cuda.get_device_name(0)}")
else:
    print("Warning: CUDA not available, using CPU")

# 모델과 토크나이저 로드
model = AutoModelForCausalLM.from_pretrained(
    "seong67360/Qwen2.5-7B-Instruct_v4",
    device_map="auto",
    trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(
    "seong67360/Qwen2.5-7B-Instruct_v4",
    trust_remote_code=True
)

# 대화 예시
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "What is quantum computing?"}
]

# 응답 생성
response = model.chat(tokenizer, messages)
print(response)
```

## 메모리 최적화 옵션
GPU 메모리가 제한된 경우, 8비트 또는 4비트 양자화를 사용할 수 있습니다:
```python
# 8비트 양자화
model = AutoModelForCausalLM.from_pretrained(
    "seong67360/Qwen2.5-7B-Instruct_v4",
    device_map="auto",
    trust_remote_code=True,
    load_in_8bit=True
)

# 또는 4비트 양자화
model = AutoModelForCausalLM.from_pretrained(
    "seong67360/Qwen2.5-7B-Instruct_v4",
    device_map="auto",
    trust_remote_code=True,
    load_in_4bit=True
)
```

## 생성 파라미터 설정
```python
response = model.chat(
    tokenizer, 
    messages,
    temperature=0.7,          # 높을수록 더 창의적인 응답
    top_p=0.9,               # 샘플링에 사용될 누적 확률의 임계값
    max_new_tokens=512,      # 생성할 최대 토큰 수
    repetition_penalty=1.1    # 반복 방지를 위한 페널티 (1.0 이상)
)
```

---

## 프로젝트 구조

```
.
├── scripts/
│   ├── train.py
│   ├── tokenization_qwen2.py
│   ├── requirements.txt
│   └── bootstrap.sh
├── sagemaker_train.py
└── README.md
```

## 사전 요구사항

- Amazon SageMaker 접근 권한
- Hugging Face 계정 및 접근 토큰
- AWS 자격 증명 구성
- Python 3.10+

## 환경 설정

프로젝트에서 사용하는 주요 의존성:

- PyTorch 2.1.0
- Transformers (main 브랜치의 최신 버전)
- Accelerate >= 0.27.0
- PEFT >= 0.6.0
- BitsAndBytes >= 0.41.0

## 모델 구성

- 기본 모델: `Qwen/Qwen2.5-7B-Instruct`
- 학습 방법: QLoRA (4비트 양자화)
- 인스턴스 유형: ml.p5.48xlarge
- 분산 전략: PyTorch DDP

## 학습 구성

### 하이퍼파라미터

```python
{
    'epochs': 3,
    'per_device_train_batch_size': 4,
    'gradient_accumulation_steps': 8,
    'learning_rate': 1e-5,
    'max_steps': 1000,
    'bf16': True,
    'max_length': 2048,
    'gradient_checkpointing': True,
    'optim': 'adamw_torch',
    'lr_scheduler_type': 'cosine',
    'warmup_ratio': 0.1,
    'weight_decay': 0.01,
    'max_grad_norm': 0.3
}
```

### 환경 변수

학습 환경은 분산 학습 및 메모리 관리를 위한 최적화로 구성되어 있습니다:

- CUDA 장치 구성
- 메모리 최적화 설정
- 분산 학습을 위한 EFA(Elastic Fabric Adapter) 구성
- Hugging Face 토큰 및 캐시 설정

## 학습 프로세스

1. **환경 준비**:
   - 필요한 의존성이 포함된 `requirements.txt` 생성
   - Transformers 설치를 위한 `bootstrap.sh` 생성
   - SageMaker 학습 구성 설정

2. **모델 로딩**:
   - 4비트 양자화로 기본 Qwen 2.5 7B 모델 로드
   - 양자화를 위한 BitsAndBytes 구성
   - k-bit 학습을 위한 모델 준비

3. **데이터셋 처리**:
   - Sujet Finance 데이터셋 사용
   - Qwen2 형식으로 대화 포맷팅
   - 최대 2048 토큰 길이로 토크나이징
   - 병렬 처리를 통한 데이터 전처리 구현

4. **학습**:
   - 메모리 효율성을 위한 gradient checkpointing 구현
   - 웜업이 포함된 코사인 학습률 스케줄 사용
   - 50 스텝마다 체크포인트 저장
   - 10 스텝마다 학습 메트릭 로깅

## 모니터링 및 메트릭

학습 과정에서 다음 메트릭을 추적합니다:
- 학습 손실(Training loss)
- 평가 손실(Evaluation loss)

## 오류 처리

구현에는 포괄적인 오류 처리 및 로깅이 포함되어 있습니다:
- 환경 유효성 검사
- 데이터셋 준비 검증
- 학습 프로세스 모니터링
- 자세한 오류 메시지 및 스택 추적

## 사용 방법

1. AWS 자격 증명 및 SageMaker 역할 구성
2. Hugging Face 토큰 설정
3. 학습 스크립트 실행:

```bash
python sagemaker_train.py
```

## 커스텀 컴포넌트

### 커스텀 토크나이저

프로젝트는 다음 기능이 포함된 Qwen2 토크나이저의 커스텀 구현(`tokenization_qwen2.py`)을 포함합니다:
- 특수 토큰 처리
- 유니코드 정규화
- 어휘 관리
- 모델 학습을 위한 입력 준비

## 주의사항

- 학습 스크립트는 ml.p5.48xlarge 인스턴스 타입에 최적화되어 있습니다
- PyTorch Distributed Data Parallel을 사용한 학습
- 메모리 최적화를 위한 gradient checkpointing 구현
- 학습 실패에 대한 자동 재시도 메커니즘 포함