시작 전에
환경설정
Windows PC 에 Anaconda 로 Python 3.10 가상환경을 만들고, NVIDIA GPU 용 PyTorch 와 Hugging Face 도구(transformers, peft, trl, datasets)를 설치한 뒤, GPU 가 보이는지 확인합니다. 코드는 VS Code 의 Jupyter 노트북에서 실행합니다.
이사 갈 때 짐을 상자 하나에 모아 두는 것과 같습니다. 가상환경은 이 과정에 쓰는 패키지만 담은 상자입니다. 다른 과정의 패키지와 섞이지 않습니다.
어떤 컴퓨터가 필요한가
| 구분 | 1일차 | 2일차 |
|---|---|---|
| GPU | 없어도 된다(CPU 로 실행) | NVIDIA GPU, VRAM 8GB 이상 권장 |
| GPU 가 없을 때 | 그대로 실행한다. 4장 번역기 학습만 오래 걸린다 | Google Colab 의 T4 GPU 에서 노트북을 연다 |
| 메모리(RAM) | 8GB 이상 | 16GB 이상 권장 |
| 디스크 | 패키지와 모델을 합쳐 10GB 안팎의 빈 곳 |
- VRAM(Video RAM)은 그래픽 카드 안의 메모리입니다. 모델의 가중치와 학습 중 계산 값이 여기에 올라갑니다. 작업대 넓이로 생각하면 됩니다. 작업대가 좁으면 큰 가구(모델)를 펼칠 수 없습니다.
- 교안의 실행 결과는 NVIDIA GeForce RTX 3080(VRAM 10GB)에서 얻었습니다.
설치하기
- Anaconda 를 설치합니다. anaconda.com 의 다운로드 쪽에서 Windows 설치 파일을 받습니다.
- VS Code 를 설치합니다. 확장(Extensions)에서 마이크로소프트가 만든 "Python" 과 "Jupyter" 를 설치합니다.
- 실습 폴더를 준비합니다. 예:
C:\workspace\peft- 강사자료의 노트북(
1일차.ipynb,2일차.ipynb),requirements.txt,data폴더를 이 안에 넣습니다. 교안의 코드는 원본처럼data/파일이름으로 읽습니다.
- 강사자료의 노트북(
- NVIDIA 그래픽 드라이버를 최신으로 올립니다(GPU 가 있을 때). PyTorch 가 CUDA 12.1 을 쓰므로 드라이버가 너무 오래되면 GPU 를 찾지 못합니다.
가상환경 만들고 패키지 설치하기
"Anaconda Prompt" 를 열고 한 줄씩 실행합니다.
conda create -n transformer_peft python=3.10 # create = 만들기, -n = name, 파이썬 3.10 상자를 만든다
conda activate transformer_peft # 상자를 켠다. 줄 앞에 (transformer_peft) 가 붙는다
cd C:\workspace\peft # cd = change directory, 실습 폴더로 옮긴다
pip install -r requirements.txt # -r = requirement file, 적힌 패키지를 한꺼번에 설치한다
pip check # 설치된 패키지끼리 버전이 맞물리는지 검사한다| 명령과 옵션 | 원래 말 | 뜻 |
|---|---|---|
conda create -n 이름 python=3.10 | create, name | 이름 붙인 파이썬 상자를 만든다 |
conda activate 이름 | activate(켜다) | 이 창에서 상자 안의 파이썬을 쓰게 한다 |
-r 파일 | requirement file | 파일에 적힌 목록을 한꺼번에 설치한다 |
--extra-index-url | 추가 저장소 주소 | requirements.txt 첫 줄. CUDA 용 PyTorch 를 받을 곳을 더한다 |
requirements.txt는 NVIDIA GPU(CUDA 12.1)용 PyTorch 를 설치하도록 적혀 있습니다. 파일이 크므로(2GB 넘음) 설치에 시간이 걸립니다.transformers,peft,trl은 판에 따라 인자 이름이 달라집니다. 교안과 똑같이 맞추려면 적힌 판을 그대로 설치합니다.
이 과정의 패키지
| 패키지 | 교안의 판 | 하는 일 | 쓰는 장 |
|---|---|---|---|
torch | 2.5.1 (CUDA 12.1) | 텐서 계산과 신경망 학습의 바탕. GPU 계산을 맡는다 | 2~9장 |
transformers | 4.57.6 | 이미 학습된 모델과 토크나이저를 이름 하나로 불러오는 도구 | 2~9장 |
tokenizers | 0.22.2 | 글을 토큰으로 빠르게 나누는 도구 | 2~9장 |
huggingface-hub | 0.36.2 | Hugging Face 에서 모델과 데이터를 내려받는 창구 | 2~9장 |
datasets | 4.8.4 | 학습 데이터를 표처럼 다루는 도구(Dataset, DatasetDict) | 4장, 7~9장 |
peft | 0.20.0 | LoRA 같은 PEFT 를 모델에 붙이는 도구 | 8~9장 |
trl | 0.25.1 | SFT 학습을 맡는 SFTTrainer, SFTConfig | 8~9장 |
accelerate | 1.14.0 | 모델을 CPU·GPU 에 알맞게 나눠 올리는 도구 | 5~9장 |
bitsandbytes | 0.50.2 | 모델을 4비트로 줄여 올리는 양자화 도구(QLoRA) | 9장 |
sentencepiece | 0.2.1 | 일부 토크나이저가 쓰는 글 조각 나누기 도구 | 4장 |
safetensors | 가중치를 안전하게 저장하는 파일 꼴 | 8~9장 | |
numpy | 1.26.4 | 벡터와 행렬 계산 | 전부 |
pandas | 2.3.3 | 표 데이터 | 7~9장 |
matplotlib, koreanize-matplotlib | 3.10.8, 0.1.1 | 그래프와 한글 글꼴 | 8장 |
ipykernel, ipywidgets | VS Code 노트북이 이 상자를 쓰게 하고, 진행 막대를 보여 주는 도구 | 전부 |
GPU 확인하기
설치가 끝나면 노트북에서 아래 셀을 실행해 PyTorch 가 GPU 를 찾는지 봅니다.
import torch # 텐서 계산 라이브러리 PyTorch 를 불러온다
print(torch.__version__) # 설치된 PyTorch 판. 결과: 2.5.1+cu121 (cu121 = CUDA 12.1 용)
print(torch.cuda.is_available()) # GPU 를 쓸 수 있으면 True
print(torch.cuda.get_device_name(0)) # 0번 GPU 의 이름. 예: NVIDIA GeForce RTX 3080
print(torch.cuda.is_bf16_supported()) # BF16 정밀도를 지원하면 True(RTX 30 계열 이상)torch.cuda.is_available()이False면 GPU 용 PyTorch 가 아니라 CPU 용이 설치된 것입니다. 상자를 켠 상태에서pip install -r requirements.txt를 다시 실행하거나 드라이버를 올립니다.- BF16 을 지원하지 않는 GPU(Colab T4 등)는 2일차 노트북이 스스로 FP16 을 고릅니다.
Google Colab 에서 실행하기 (GPU 가 없을 때)
- colab.research.google.com 에서 노트북 파일을 올립니다.
- 메뉴의 "런타임 → 런타임 유형 변경"에서 T4 GPU 를 고릅니다.
- 첫 셀에서 패키지를 설치하고, 왼쪽 파일 창에
data폴더와 CSV 파일을 올립니다.
- Colab 의 T4 는 BF16 을 지원하지 않아 FP16 으로 학습합니다. 손실 값과 답변이 교안과 조금 다를 수 있습니다.
- Colab 은 세션이 끝나면
outputs/폴더가 사라집니다. 어댑터를 남기려면 내려받아 둡니다.
노트북 실행하기
- VS Code 에서 실습 폴더를 열고(
code .) 노트북을 연 뒤, 오른쪽 위 "커널 선택"에서transformer_peft환경을 고릅니다. - 노트북의 작업 폴더가 실습 폴더여야
data/...경로가 맞습니다. - 모델과 데이터는 처음 실행할 때 Hugging Face 에서 내려받습니다(Qwen 약 1GB). 인터넷이 되어야 하고, 가입이나 토큰은 필요 없습니다.
주의할 점
- 2일차에는 큰 모델을 여러 번 불러옵니다. "CUDA out of memory" 가 나면 다른 노트북의 커널을 끄고, 커널을 다시 시작한 뒤 처음부터 실행합니다.
- Windows 에서 Hugging Face 캐시가 "symlinks(바로가기)를 쓸 수 없다"는 경고를 낼 수 있습니다. 내려받기는 그대로 되고 디스크를 조금 더 쓸 뿐입니다.