1. 개인이 AI를 “학습시킨다”는 것은 무엇인가
개인이 인공지능을 학습시킨다고 할 때, 보통은 다음 셋 중 하나를 의미한다.
첫째, 이미 존재하는 모델을 그대로 사용하는 것이다.
이 경우는 엄밀히 말하면 학습이라기보다 활용이다. 예를 들어 GPT API를 불러와서 프롬프트를 잘 설계해 쓰는 것은 모델을 학습시킨 것이 아니라, 기존 모델을 잘 사용하는 것이다.
둘째, 이미 존재하는 사전학습 모델(pretrained model)을 추가 학습시키는 것이다.
이것이 일반적으로 사람들이 말하는 “파인튜닝(fine-tuning)”이다. 예를 들어 BERT, Llama, ResNet 같은 이미 학습된 모델을 가져와서, 내가 만든 데이터셋으로 다시 학습시켜 특정 목적에 맞게 바꾸는 방식이다. 개인이 모델을 발전시키겠다고 할 때 가장 현실적이고 일반적인 방법이 여기에 해당한다.
셋째, 모델 구조 자체를 바꾸거나 새로운 방법을 제안하여 비교 실험하는 것이다.
예를 들어 baseline 모델은 기존 구조이고, proposed 모델은 내가 일부 구조를 바꾸거나 새로운 모듈을 추가한 것이다. 그 뒤 같은 데이터셋에서 둘을 학습시키고 성능을 비교한다. 이것은 개인이 연구나 프로젝트 차원에서 AI를 학습시키는 대표적인 방식이다.
즉, 질문의 요지를 정확히 말하면 다음과 같다.
개인이 “인공지능을 발전된 모델로 만들고 싶다”라고 할 때, 보통은 기존 모델을 가져와서 내 데이터로 추가 학습시키거나, 기존 모델을 기준으로 개선 구조를 제안하고 비교 실험하는 것이다.
처음부터 GPT 같은 대형 모델 전체를 새로 만드는 것은 일반 개인에게는 거의 불가능에 가깝다. 데이터, GPU, 비용, 시간 모두 너무 많이 든다. 그래서 현실적으로는 거의 항상 다음 둘 중 하나를 한다.
- pretrained model + fine-tuning
- pretrained model + 내 구조 개선 + 성능 비교
2. “API를 가져와서 fine-tuning” 하는 것인지에 대하여
여기서 중요한 구분이 있다. 많은 사람이 “모델을 가져온다”는 말을 API 사용과 혼동한다. 둘은 다르다.
2.1 API를 사용하는 경우
예를 들어 OpenAI API, Claude API 같은 것을 호출해서 답변을 받는 방식은, 내가 모델 내부 가중치를 직접 학습시키는 것이 아니다.
이 경우는 보통 다음과 같다.
- 이미 서비스 중인 모델을 호출
- 입력을 넣고 출력 받음
- 프롬프트 엔지니어링 가능
- 경우에 따라 제공업체가 fine-tuning 기능을 제공하면 그 범위 안에서 조정 가능
즉, API 방식은 “외부 모델 서비스 사용”에 가깝다.
2.2 모델 파일 자체를 가져와서 학습하는 경우
Hugging Face 같은 곳에서 사전학습 모델을 내려받아, 내 GPU 환경에서 직접 추가 학습하는 방식이다.
이 경우는 진짜로 내가 모델을 학습시키는 것이다.
예를 들면 다음 흐름이다.
- BERT, Llama, ResNet 등의 pretrained model 선택
- Python 코드에서 불러오기
- 내 데이터셋 준비
- loss 계산, optimizer 설정
- GPU로 학습
- 결과 저장
이 방식이 연구나 프로젝트에서 말하는 “모델을 학습시킨다”에 더 가깝다.오히려 연구나 실험에서는 보통 이미 존재하는 pretrained model을 직접 내려받아 fine-tuning 하거나, 구조를 바꿔 재학습하는 방식이 더 일반적이다.
3. GPU는 어떻게 활용하는가, 어떻게 쓰는가
GPU는 쉽게 말하면 모델 학습을 빠르게 하기 위한 연산 장치이다.
CPU도 계산은 할 수 있지만, 딥러닝에서 필요한 대규모 행렬 연산은 GPU가 훨씬 잘한다.
3.1 왜 GPU가 필요한가
딥러닝 학습에서는 다음 계산이 반복된다.
- 입력 데이터를 모델에 넣음
- 행렬 곱 계산
- loss 계산
- gradient 계산
- 파라미터 업데이트
이 과정에서 가장 많은 비중을 차지하는 것이 대규모 행렬 연산이다. GPU는 이런 병렬 계산에 특화되어 있어서 학습 속도를 크게 높인다.
즉, GPU는 “AI 전용 장비”라기보다, 딥러닝 계산에 매우 유리한 병렬 연산 장치이다.
3.2 개인은 GPU를 어디서 쓰는가
개인이 GPU를 쓰는 방식은 보통 세 가지다.
첫째, 내 PC의 GPU 사용
예를 들어 NVIDIA GPU가 있다면 PyTorch나 TensorFlow에서 CUDA를 이용해 학습할 수 있다.
둘째, 클라우드 GPU 사용
Google Colab, Kaggle, Paperspace, AWS, GCP, Lambda Labs 같은 환경에서 GPU를 빌려 쓴다.
셋째, 연구실/학교/회사 서버의 GPU 사용
학교 서버나 연구실 GPU 서버에 접속해서 학습한다.
3.3 GPU를 “쓴다”는 것이 실제로 무슨 뜻인가
예를 들어 PyTorch에서는 모델과 데이터를 GPU 메모리로 올려서 계산한다.
개념 흐름은 이렇다.
- 모델을 GPU로 이동
- 입력 데이터도 GPU로 이동
- forward, loss, backward 계산을 GPU에서 수행
- optimizer step으로 업데이트
즉, 사용자는 “이 모델과 데이터는 GPU에서 계산해라”라고 지정하고, 실제 수치 계산은 GPU가 처리한다.
예를 들어 개념적으로는 다음과 같다.
inputs = inputs.to("cuda")
labels = labels.to("cuda")
이렇게 하면 이후 계산이 GPU에서 돌아간다.
3.4 GPU에서 중요한 것
GPU를 사용할 때는 다음을 이해해야 한다.
- VRAM: GPU 메모리 크기. 모델이 크면 VRAM이 많이 필요하다.
- batch size: 한 번에 학습하는 데이터 양. 크면 VRAM을 많이 먹는다.
- 학습 속도: GPU 성능에 따라 다르다.
- 모델 크기: 큰 모델일수록 더 강한 GPU가 필요하다.
즉, GPU는 단순히 “좋은 그래픽카드”가 아니라, AI 학습 실험에서 사실상 핵심 자원이다.
4. 개인이 데이터셋을 만들고 모델을 학습시켜 baseline과 proposed를 비교하면, 그것이 학습이 맞는가
결론부터 말하면 맞다. 매우 전형적인 형태의 개인 학습, 프로젝트, 연구 실험이다.
조금 더 정확히 말하면, 그것은 다음 세 가지를 포함한다.
- 데이터셋 구축
- 모델 학습
- 성능 평가 및 비교
이 세 가지를 직접 수행했다면, 그것은 분명히 “개인이 AI를 학습시키고 실험한 것”이다.
4.1 baseline이란 무엇인가
baseline은 비교 기준이 되는 기존 방법이다.
예를 들어 “아무 개선 없이 기존 BERT를 그대로 사용한 모델”이 baseline일 수 있다.
즉, baseline은
“내가 제안한 방법이 정말 더 좋은지 비교하기 위한 출발점”이다.
4.2 proposed란 무엇인가
proposed는 내가 제안한 개선 방법이다.
예를 들어 다음과 같은 것이 될 수 있다.
- 새로운 attention 구조 추가
- 입력 전처리 방식 변경
- loss 함수 변경
- 특정 feature 추가
- 데이터 처리 방식 개선
즉, proposed는
“내가 개선했다고 주장하는 모델 또는 방법”이다.
5. 개인이 데이터셋을 만들고 baseline과 proposed를 비교하는 단계별 설명
1단계. 해결하고 싶은 문제를 정한다
먼저 무엇을 하고 싶은지 정해야 한다.
예를 들면 다음과 같다.
- 영화 리뷰가 긍정인지 부정인지 분류
- 이메일이 스팸인지 아닌지 분류
- 이미지가 고양이인지 개인지 분류
- 질문과 문서가 관련 있는지 판단
- 비디오 질문응답 성능 개선
이 단계에서는 문제를 한 문장으로 정의하면 된다.
예:
“한국어 리뷰 감정 분류 모델을 만들겠다.”
2단계. 입력과 정답의 형태를 정한다
AI 학습은 결국 “입력”과 “정답”이 있어야 한다.
예를 들어 감정 분류라면
- 입력: 리뷰 문장
- 정답: 긍정 또는 부정
이미지 분류라면
- 입력: 이미지
- 정답: 고양이, 개, 새
질의응답이라면
- 입력: 질문 + 문서
- 정답: 답변
즉, 모델이 무엇을 보고 무엇을 맞혀야 하는지 정하는 단계이다.
3단계. 데이터셋을 만든다
이제 데이터를 모은다. 방법은 보통 다음과 같다.
- 직접 수집
- 공개 데이터셋 활용
- 웹 크롤링
- 직접 라벨링
- 기존 데이터를 재구성
예를 들어 리뷰 분류라면 표 형태로 만들 수 있다.
- 문장: “정말 재미있었다” / 라벨: 긍정
- 문장: “시간 아까웠다” / 라벨: 부정
이렇게 입력과 정답이 한 쌍으로 정리되어 있으면 된다.
이것이 데이터셋이다.
4단계. 데이터를 train / validation / test로 나눈다
데이터셋을 보통 세 부분으로 나눈다.
- train: 모델 학습용
- validation: 학습 중 성능 확인용
- test: 최종 평가용
예를 들어 1000개 데이터가 있으면
- train 700
- validation 150
- test 150
처럼 나눌 수 있다.
이유는 간단하다.
학습에 쓴 데이터로 성능을 재면 공정한 평가가 아니기 때문이다.
5단계. baseline 모델을 정한다
이제 비교 기준이 필요하다.
예를 들어 텍스트 분류라면 baseline은 다음이 될 수 있다.
- Logistic Regression
- LSTM
- 기본 BERT
- 기본 CNN
이 중 하나를 “기존 방식”으로 두고 먼저 학습시킨다.
예:
“baseline은 기본 BERT 분류 모델로 한다.”
6단계. proposed 방법을 설계한다
이제 내가 개선하고 싶은 방법을 만든다.
예를 들어 다음처럼 설정할 수 있다.
- baseline: 기본 BERT
- proposed: BERT + 추가 attention
- baseline: 일반 CNN
- proposed: CNN + residual block
- baseline: 기존 입력
- proposed: 전처리 개선 입력
즉, proposed는 baseline과 무엇이 다른지 명확해야 한다.
중요한 점은, 너무 많은 것을 한꺼번에 바꾸면 왜 좋아졌는지 알기 어렵다는 것이다.
처음에는 한두 가지 차이만 두는 것이 좋다.
7단계. 모델을 코드로 구현한다
이제 Python과 딥러닝 프레임워크로 모델을 구현한다.
보통은 다음을 사용한다.
- PyTorch
- TensorFlow
- Hugging Face Transformers
여기서 하는 일은 다음과 같다.
- 데이터 읽기
- 모델 불러오기
- loss 함수 설정
- optimizer 설정
- 학습 루프 작성
즉, “모델이 데이터를 보고 학습하도록 코드로 만드는 단계”이다.
8단계. GPU에 올려서 학습시킨다
모델과 데이터를 GPU로 보내고 학습을 시작한다.
학습은 보통 여러 epoch 동안 진행한다.
한 epoch는 “전체 train 데이터를 한 번 다 학습하는 것”이다.
예를 들어 흐름은 이렇다.
- train 데이터 배치 하나를 불러옴
- 모델이 예측
- loss 계산
- backward
- optimizer step
- 다음 배치 반복
이 과정을 baseline에도 하고, proposed에도 각각 한다.
즉, 공정 비교를 위해 두 모델을 같은 조건으로 학습시켜야 한다.
9단계. validation으로 중간 성능을 확인한다
학습 중에는 validation 데이터로 성능을 확인한다.
이 단계에서 보는 것은 다음과 같다.
- loss가 줄고 있는지
- accuracy가 올라가는지
- overfitting이 발생하는지
예를 들어 train 성능은 계속 좋아지는데 validation 성능이 떨어지면, 과적합을 의심할 수 있다.
10단계. test 데이터로 최종 평가한다
학습이 끝나면 test 데이터로 최종 성능을 측정한다.
이때 쓰는 지표는 문제에 따라 다르다.
- 분류: accuracy, precision, recall, F1
- 회귀: MSE, MAE
- 생성: BLEU, ROUGE
- 탐지: mAP
예를 들어 감정 분류라면 accuracy와 F1을 많이 쓴다.
이 단계에서 baseline과 proposed를 비교한다.
예:
- baseline accuracy 84.2
- proposed accuracy 87.1
그러면 proposed가 더 좋다고 볼 수 있다.
11단계. 왜 좋아졌는지 해석한다
성능 숫자만 보는 것으로 끝나지 않는다.
왜 proposed가 좋아졌는지 분석해야 한다.
예를 들면,
- 긴 문장에서 더 잘 맞춘다
- 특정 클래스에서 성능이 좋아졌다
- 데이터 노이즈에 더 강하다
- 학습 속도가 더 빠르다
이 분석이 있어야 결과가 의미를 가진다.
12단계. 결과를 정리한다
마지막으로 다음 내용을 정리하면 된다.
- 문제 정의
- 데이터셋 설명
- baseline 설명
- proposed 설명
- 실험 환경
- 평가 지표
- 결과 비교
- 해석
이렇게 정리하면 하나의 완전한 개인 프로젝트, 연구 실험, 포트폴리오가 된다.
7. 아주 쉬운 비유로 다시 설명
전체 과정을 시험 공부에 비유하면 다음과 같다.
- 데이터셋 만들기: 문제집 만들기
- 모델 선택: 학생 고르기
- 학습시키기: 학생이 문제를 풀며 공부
- baseline: 기존 공부법 학생
- proposed: 내가 개선한 공부법 학생
- test 평가: 모의고사 보기
- 성능 비교: 누가 더 잘 푸는지 확인
즉, 개인이 하는 AI 학습은
“문제를 만들고, 학생에게 풀게 하고, 공부법을 바꿔가며 누가 더 잘하는지 비교하는 것”과 비슷하다.
개인이 AI를 학습시킨다는 것은 보통 이미 존재하는 사전학습 모델을 가져와 내 데이터로 추가 학습하거나, baseline과 proposed를 설계해 성능을 비교하는 것을 의미한다. API를 쓰는 것은 단순 활용에 가까운 경우가 많고, 진짜 학습 실험은 보통 모델을 직접 불러와 fine-tuning 하는 방식으로 진행된다. GPU는 이 학습 과정의 대규모 연산을 빠르게 처리하는 장치이며, 모델과 데이터를 GPU 메모리로 올려 forward와 backward 계산을 수행하는 데 사용된다. 또한 개인이 직접 데이터셋을 만들고, 모델을 학습시키고, baseline과 proposed를 비교하는 것은 매우 정석적인 AI 실험 방식이며, 실제 연구와 프로젝트도 대부분 이 구조를 따른다.
8. 처음 시작하는 사람 기준의 가장 현실적인 추천 경로
처음이라면 다음 순서가 가장 현실적이다.
- 작은 분류 문제 하나 정하기
- 공개 데이터셋 또는 직접 만든 소형 데이터셋 준비
- Hugging Face의 pretrained model 하나 선택
- baseline으로 먼저 fine-tuning
- 입력 처리나 모델 구조를 조금 바꿔 proposed 만들기
- accuracy/F1 비교
- 결과 해석
이렇게 시작하면 “개인이 AI를 학습시킨다”는 것이 실제로 어떤 일인지 가장 빠르게 체감할 수 있다.
이미 대규모 데이터로 사전학습된 모델을 가져온 뒤,
내가 가진 데이터와 목적에 맞게 추가 학습시키는 방식
이를 일반적으로 fine-tuning, transfer learning, 또는 경우에 따라 재학습 기반 실험이라고 부른다.
전체 흐름부터 먼저 정리하면 다음과 같다.
- 사전학습 모델 선택
- 내 환경에 맞는 GPU 학습 환경 구축
- Python 코드에서 모델과 토크나이저 또는 전처리기 불러오기
- 내 데이터셋 준비 및 전처리
- 학습 목적에 맞게 모델 구조 조정
- loss 함수와 optimizer 설정
- GPU에서 학습 수행
- 성능 평가 및 실험 비교
- 모델 저장 및 재사용
이제 각 단계를 연구 관점과 구현 관점에서 자세히 설명하겠다.
1. 사전학습 모델 선택
가장 먼저 해야 하는 일은 “무슨 모델을 가져올 것인가”를 정하는 것이다.
이 단계는 매우 중요하다. 왜냐하면 이후의 학습 방식, 데이터 형식, GPU 메모리 사용량, 성능 한계가 거의 여기서 결정되기 때문이다.
예를 들어:
- 텍스트 분류, 문장 이해, 질의응답: BERT, RoBERTa, DeBERTa, Llama 계열
- 이미지 분류, 객체 인식: ResNet, EfficientNet, ViT
- 문장 생성, 요약, 대화: GPT 계열, Llama 계열, T5
- 멀티모달: CLIP, BLIP, LLaVA 계열
- 음성: Whisper, wav2vec 계열
이때 단순히 “유명한 모델”을 고르는 것이 아니라, 다음 기준으로 판단해야 한다.
첫째, 내 과제(task)와 모델 구조가 맞아야 한다.
예를 들어 BERT는 인코더 기반이라 분류나 문장 이해에 강하고, GPT/Llama는 생성형 작업에 적합하다. 이미지 작업에 BERT를 쓰는 것은 구조상 맞지 않는다.
둘째, 내 GPU 자원으로 학습 가능한 크기여야 한다.
예를 들어 Llama 7B 이상 모델은 일반 개인 GPU 환경에서는 full fine-tuning이 어렵고, 보통 LoRA 같은 경량 학습 기법을 쓴다. 반면 BERT-base나 ResNet-50은 상대적으로 다루기 쉽다.
셋째, 공개된 pretrained weight가 있어야 한다.
Hugging Face 같은 저장소에는 모델 구조뿐 아니라 이미 학습된 가중치가 함께 제공된다. 이 가중치를 내려받아 시작하는 것이 핵심이다.
넷째, 라이선스도 확인해야 한다.
연구용 사용 가능 여부, 상업적 사용 가능 여부, 재배포 가능 여부는 모델마다 다르다.
즉, 이 단계는 “내 문제에 적합하고, 내 장비에서 돌릴 수 있으며, 공개 가중치가 제공되는 모델을 고르는 과정”이다.
2. GPU 학습 환경 구축
모델을 선택했다면, 이제 그 모델을 실제로 학습시킬 수 있는 환경을 만들어야 한다.
이 과정은 생각보다 중요하다. 코드가 맞아도 CUDA, PyTorch, 드라이버 버전이 어긋나면 학습이 되지 않는다.
보통 필요한 구성 요소는 다음과 같다.
- Python
- PyTorch 또는 TensorFlow
- CUDA
- cuDNN
- transformers, datasets, accelerate, peft 같은 라이브러리
- GPU 드라이버
실제 연구에서는 보통 PyTorch + Hugging Face Transformers 조합이 많이 쓰인다.
환경 구축의 핵심은 다음 두 가지이다.
첫째, GPU를 Python이 정상적으로 인식해야 한다.
즉, 코드에서 CUDA device가 잡혀야 한다.
둘째, 모델 라이브러리와 CUDA 버전이 맞아야 한다.
예를 들어 PyTorch가 특정 CUDA 버전에 맞춰 빌드되어 있어야 한다.
이 단계에서 자주 확인하는 것은 다음과 같다.
- torch.cuda.is_available() 가 True인지
- GPU 이름과 메모리가 정상적으로 표시되는지
- 학습 시 모델과 텐서가 CPU가 아니라 GPU로 올라가는지
이 환경이 준비되어야 비로소 “내 GPU 환경에서 직접 학습”이 가능해진다.
3. Python 코드에서 모델 불러오기
이제 사전학습 모델을 코드에서 불러온다.
여기서 중요한 점은 “모델만 불러오는 것”이 아니라, 모델과 함께 그 모델에 맞는 전처리 도구도 같이 불러와야 한다는 것이다.
텍스트 모델이라면:
- tokenizer
- model
이미지 모델이라면:
- image processor 또는 transform
- model
예를 들어 BERT 계열은 입력 문장을 그대로 넣지 않는다.
반드시 해당 BERT 전용 tokenizer로 토큰화해야 한다.
ResNet도 이미지를 그냥 넣지 않고, 크기 조정·정규화 등 모델이 학습되었던 방식에 맞춘 전처리를 적용해야 한다.
이 단계의 본질은 다음과 같다.
- 사전학습된 가중치를 메모리에 로드한다.
- 모델 구조를 복원한다.
- 입력 형식을 맞춰 줄 tokenizer/processor를 준비한다.
즉, “이미 학습된 모델을 재사용 가능한 상태로 불러오는 단계”이다.
4. 내 데이터셋 준비
이 단계가 실제 연구에서 가장 중요하다고 해도 과장이 아니다.
좋은 pretrained model을 써도 데이터셋이 부실하면 결과가 좋지 않다.
데이터셋 준비는 단순히 파일을 모으는 것이 아니다. 다음이 모두 포함된다.
- 데이터 수집
- 정답(label) 정의
- 학습/검증/테스트 분할
- 전처리
- 품질 점검
예를 들어 텍스트 분류를 한다면 데이터는 보통 다음과 같은 형태를 갖는다.
- 입력 텍스트
- 정답 레이블
예:
- “이 영화 정말 재미있다” → 긍정
- “시간만 낭비했다” → 부정
이미지 분류라면:
- 이미지 파일
- 클래스 라벨
예:
- cat_01.jpg → cat
- dog_03.jpg → dog
여기서 중요한 점은 “내 데이터 형식이 모델 입력 형식으로 변환되어야 한다”는 것이다.
텍스트의 경우:
- 문장을 tokenizer로 숫자 토큰 시퀀스로 변환
- attention mask 생성
- 필요 시 label도 숫자로 변환
이미지의 경우:
- 이미지 크기 통일
- 정규화
- 텐서 변환
또한 데이터는 보통 세 부분으로 나눈다.
- training set: 모델이 배우는 데이터
- validation set: 학습 도중 성능 점검용
- test set: 최종 성능 평가용
이 구분을 하지 않으면, 모델이 진짜 잘한 것인지 아니면 학습 데이터를 외운 것인지 알 수 없다.
즉, 이 단계는 “내 문제를 모델이 학습할 수 있는 입력-정답 쌍으로 정리하는 과정”이다.
5. 모델 구조 조정
사전학습 모델은 원래 특정 과제로 학습되었기 때문에, 내가 하려는 작업에 맞게 마지막 부분을 바꾸는 경우가 많다.
예를 들어 BERT는 원래 언어 일반 표현을 배우는 모델이다.
그 위에 분류기(classification head)를 붙여 감성분석을 할 수 있다.
ResNet도 원래 ImageNet 1000개 클래스를 분류하도록 학습되었을 수 있다.
그런데 내가 5개 클래스 분류를 하려면 마지막 fully connected layer를 5개 출력으로 바꿔야 한다.
여기서 흔히 하는 작업은 다음과 같다.
- 마지막 출력층 교체
- 일부 층 freeze
- 일부 층만 fine-tuning
- adapter 또는 LoRA 추가
- 내 연구 목적에 맞게 중간 구조 수정
예를 들어:
- feature extractor로만 사용하고 마지막 분류층만 학습
- 전체 모델 가중치를 전부 업데이트
- 큰 모델은 원본 weight는 고정하고 adapter만 학습
이 단계에서 중요한 개념이 두 가지 있다.
5-1. Freeze
기존 pretrained 가중치를 고정하고 일부만 학습하는 방식이다.
데이터가 적을 때, 또는 GPU 자원이 부족할 때 유리하다.
5-2. Fine-tuning
모델 전체 또는 일부를 내 데이터에 맞춰 다시 업데이트하는 방식이다.
데이터가 충분하고 task 적합성이 중요할 때 많이 쓴다.
즉, 이 단계는 “가져온 모델을 내 과제에 맞는 구조로 바꾸는 과정”이다.
6. Loss 함수 설정
모델을 학습한다는 것은, 모델의 예측과 정답 사이의 차이를 줄이도록 가중치를 조정하는 것이다.
그 차이를 수치로 나타낸 것이 loss다.
loss는 “모델이 얼마나 틀렸는가”를 나타내는 값이다.
학습의 목표는 이 loss를 줄이는 것이다.
대표적인 예시는 다음과 같다.
- 분류: Cross Entropy Loss
- 회귀: Mean Squared Error
- 언어 생성: 토큰 단위 Cross Entropy
- 객체 검출: 분류 loss + 박스 회귀 loss 조합
예를 들어 감성분석에서 정답이 긍정인데 모델이 부정 쪽 확률을 높게 주면 loss가 커진다.
반대로 정답 쪽 확률을 높게 주면 loss가 작아진다.
이 loss 값은 역전파(backpropagation)에 사용된다.
즉, “어느 가중치를 어느 방향으로 얼마나 바꿔야 하는가”를 계산하는 기준이 된다.
7. Optimizer 설정
loss만 있다고 학습이 되는 것은 아니다.
loss를 줄이기 위해 실제로 가중치를 업데이트하는 규칙이 필요한데, 그것이 optimizer다.
대표적으로 많이 쓰는 것은 다음과 같다.
- SGD
- Adam
- AdamW
현재 NLP와 Transformer 계열에서는 AdamW가 매우 자주 사용된다.
optimizer는 기본적으로 다음 역할을 한다.
- 현재 loss를 기준으로 gradient를 이용해
- 각 weight를 조금씩 수정하여
- 다음 번 예측이 더 좋아지게 만든다
여기서 매우 중요한 하이퍼파라미터가 learning rate다.
learning rate는 “한 번 업데이트할 때 얼마나 크게 움직일 것인가”를 의미한다.
- 너무 크면 학습이 불안정해진다
- 너무 작으면 학습이 매우 느리거나 거의 안 된다
그래서 실험에서는 learning rate, batch size, epoch 수를 조절하면서 최적 조건을 찾는다.
8. GPU로 학습한다는 의미
여기서 사용자가 특히 궁금해하는 부분이 “GPU로 학습”일 가능성이 크다.
이 부분을 명확히 설명하겠다.
딥러닝 학습은 수많은 행렬 곱셈으로 이루어진다.
예를 들어 입력 텐서와 가중치 행렬을 계속 곱하고, gradient를 계산하고, 다시 업데이트한다.
이 연산은 병렬 처리가 매우 많기 때문에 CPU보다 GPU가 훨씬 유리하다.
GPU 학습의 실제 의미는 다음과 같다.
- 모델 파라미터를 GPU 메모리에 올린다
- 입력 데이터도 GPU로 보낸다
- forward 계산을 GPU에서 수행한다
- loss 계산 후 backward도 GPU에서 수행한다
- optimizer가 GPU 메모리 상의 weight를 업데이트한다
즉, “코드가 GPU에서 실행된다”는 말은 사실상 딥러닝 핵심 연산이 GPU 텐서 기준으로 처리된다는 뜻이다.
학습 루프는 보통 다음 흐름을 따른다.
- 미니배치 데이터 로드
- 데이터를 GPU로 이동
- 모델에 입력하여 예측 생성
- loss 계산
- gradient 초기화
- backward 수행
- optimizer.step()으로 weight 업데이트
- 다음 배치 반복
이 과정을 수천, 수만 번 반복하면서 모델이 점점 내 데이터에 적응한다.
9. 학습 과정에서 실제로 일어나는 일
이 부분은 매우 중요하다. 단순히 “코드를 돌린다”가 아니라, 내부적으로 무슨 일이 일어나는지 이해해야 한다.
예를 들어 텍스트 분류를 한다고 하자.
입력 문장:
“이 제품은 정말 만족스럽다”
정답:
긍정
모델은 이 문장을 숫자 벡터로 바꾸고, 여러 층을 통과시켜 최종적으로 각 클래스 확률을 낸다.
예측:
- 긍정 0.62
- 부정 0.38
정답은 긍정이므로, 긍정 확률이 더 높아져야 한다.
loss는 현재 예측이 충분히 정답에 가깝지 않다고 판단한다.
그 다음:
- backward를 통해 각 가중치가 loss에 얼마나 기여했는지 계산
- optimizer가 가중치를 조금 수정
- 다음 입력에서 긍정 쪽 확률을 더 잘 주도록 방향 조정
이 과정이 반복되면 모델은 점점 내 데이터 패턴을 학습한다.
즉, fine-tuning은 완전히 처음부터 새 모델을 만드는 것이 아니라,
이미 세상을 어느 정도 알고 있는 모델에게 “내 문제에 맞는 추가 조정”을 하는 과정이다.
10. Full Fine-tuning과 Parameter-Efficient Fine-tuning의 차이
실제로는 모든 가중치를 전부 학습하는 방법과, 일부만 학습하는 방법이 있다.
10-1. Full Fine-tuning
모델 전체 파라미터를 전부 업데이트한다.
장점:
- task 적응력이 높을 수 있다
- 성능이 더 잘 나올 가능성이 있다
단점:
- GPU 메모리를 많이 쓴다
- 학습 시간이 길다
- 큰 모델에는 부담이 크다
10-2. PEFT(Parameter-Efficient Fine-Tuning)
대표적으로 LoRA, Adapter 등이 있다.
원본 모델 대부분은 고정하고, 작은 추가 파라미터만 학습한다.
장점:
- GPU 요구량이 낮다
- 저장 용량이 작다
- 여러 실험을 빠르게 반복하기 좋다
단점:
- full fine-tuning보다 표현력 한계가 있을 수 있다
개인 GPU 환경에서는 특히 대형 LLM을 다룰 때 PEFT가 현실적인 선택인 경우가 많다.
11. 학습 결과 평가
학습이 끝났다고 바로 “좋은 모델”이라고 결론 내리면 안 된다.
반드시 평가를 해야 한다.
평가의 목적은 다음과 같다.
- 학습 데이터만 외운 것이 아닌지 확인
- 실제로 task 성능이 좋아졌는지 확인
- baseline과 비교
- 하이퍼파라미터 조정 근거 확보
대표적인 평가 지표는 작업에 따라 다르다.
- 분류: Accuracy, Precision, Recall, F1
- 생성: BLEU, ROUGE, Perplexity
- 검출: mAP
- 회귀: MSE, MAE
예를 들어 감성분석이라면 validation/test 데이터로 accuracy나 F1-score를 본다.
클래스 불균형이 심하면 accuracy보다 F1이 더 중요할 수 있다.
연구에서는 보통 다음을 비교한다.
- pretrained model 그대로 썼을 때
- fine-tuning 했을 때
- 구조를 바꿨을 때
- 내 proposed method를 적용했을 때
즉, “학습 후 평가”가 있어야 비로소 실험 결과가 된다.
12. 결과 저장
모델 학습이 끝나면 결과를 저장해야 한다.
저장 대상은 단순히 weight 파일 하나가 아니다.
보통 다음을 함께 저장한다.
- 모델 가중치
- tokenizer 또는 processor
- optimizer 상태
- 학습 epoch 정보
- config 파일
- 실험 로그
왜 저장이 중요하냐면, 나중에 다음과 같은 일이 가능해야 하기 때문이다.
- 이어서 학습하기
- 추론(inference)만 하기
- 다른 PC나 서버에서 재현하기
- 논문 실험 결과 재검증하기
특히 연구에서는 어떤 설정으로 학습했는지까지 함께 기록해야 재현 가능성이 생긴다.
13. 실제 연구 절차로 보면 어떻게 이해하면 되는가
질문의 핵심은 아마 이것일 것이다.
“개인이 pretrained model을 내려받아 내 GPU에서 다시 학습시키는 것이 실제 연구에서 일반적인가?”
정답은 그렇다. 매우 일반적이다.
왜냐하면 처음부터 거대한 모델을 직접 pretraining 하는 것은 데이터·비용·GPU 자원 면에서 너무 부담이 크기 때문이다.
그래서 연구나 개인 실험에서는 보통 아래 중 하나를 한다.
- 공개 pretrained model을 가져와 fine-tuning
- 마지막 층만 바꿔 transfer learning
- 일부 구조를 수정해 재학습
- adapter/LoRA 기반 경량 튜닝
- baseline 모델과 proposed model 비교
즉, 연구에서 “모델을 학습시켰다”는 말이 항상 처음부터 거대 모델을 새로 만들었다는 뜻은 아니다.
오히려 대부분은 기존 pretrained model을 기반으로 목적에 맞게 추가 학습한 것이다.
14. 단계별로 아주 현실적으로 정리하면
개인이 실제로 하는 작업 흐름을 더 현실적으로 풀면 다음과 같다.
단계 1. 과제 정의
무엇을 할지 정한다.
예: 리뷰 긍정/부정 분류, 이미지 5종 분류, 문장 요약 등
단계 2. 적절한 pretrained model 선택
예:
텍스트 분류면 BERT
이미지 분류면 ResNet
생성이면 Llama/T5
단계 3. 내 GPU 환경 준비
PyTorch 설치, CUDA 확인, 필요한 라이브러리 설치
단계 4. 데이터셋 준비
입력과 정답을 정리하고 train/valid/test로 나눈다
단계 5. 모델 불러오기
pretrained weight와 tokenizer/processor를 로드한다
단계 6. 출력층 또는 구조 수정
내 클래스 수, 내 작업 방식에 맞게 마지막 층을 바꾼다
단계 7. loss, optimizer, learning rate 설정
어떤 기준으로 틀렸는지 계산하고, 어떻게 고칠지 정한다
단계 8. GPU에서 학습
배치를 반복하며 forward, loss, backward, update 수행
단계 9. 검증 데이터로 성능 확인
과적합 여부와 실제 성능 향상 확인
단계 10. 모델 저장
가중치와 설정 파일을 저장해 재사용 가능하게 만든다
단계 11. baseline과 비교
기존 모델 대비 얼마나 좋아졌는지 실험 결과를 정리한다
15. 이 방식의 장점
이 방식이 널리 쓰이는 이유는 분명하다.
첫째, 처음부터 전부 학습하는 것보다 훨씬 현실적이다.
둘째, 적은 데이터로도 성능이 잘 나오는 경우가 많다.
셋째, 공개 모델 생태계가 잘 되어 있어 실험 속도가 빠르다.
넷째, baseline과 비교가 쉬워 연구 구조를 만들기 좋다.
예를 들어 BERT를 감성분석에 fine-tuning하면, 완전히 랜덤 초기화한 모델보다 훨씬 빠르고 잘 학습되는 경우가 많다.
그 이유는 BERT가 이미 언어 일반 패턴을 학습해 두었기 때문이다.
16. 이 방식의 한계
반대로 한계도 있다.
첫째, 데이터셋 품질이 낮으면 좋은 pretrained model도 소용이 없다.
둘째, 큰 모델은 개인 GPU로 full fine-tuning이 어렵다.
셋째, 잘못 fine-tuning하면 오히려 기존 일반 성능이 망가질 수 있다.
넷째, 과적합이 쉽게 발생할 수 있다.
특히 데이터가 적을 때는 validation 성능을 계속 확인하면서 early stopping, regularization, dropout 등을 고려해야 한다.
17. 매우 중요한 오해 정리
많은 초보자가 다음처럼 생각한다.
“모델을 학습시킨다 = 반드시 거대한 모델을 처음부터 새로 만든다”
이건 대부분의 개인 연구 상황에서는 아니다.
실제로는 다음이 더 일반적이다.
- 이미 학습된 모델을 가져온다
- 내 데이터로 조금 더 학습시킨다
- 필요한 층만 바꾼다
- 성능을 비교한다
즉, 개인이 AI를 학습시킨다는 것은 대개
“공개 pretrained model을 활용해 내 과제에 맞게 추가 학습하는 것”을 의미한다.
18. 한 문장으로 요약
Hugging Face 같은 곳에서 사전학습 모델을 내려받아 내 GPU 환경에서 직접 추가 학습하는 방식이란, 이미 대규모 데이터로 기본 능력을 갖춘 모델을 가져온 뒤, 내 데이터셋과 목적에 맞게 구조를 조정하고 loss와 optimizer를 설정하여 GPU에서 반복 학습시킴으로써 특정 작업에 최적화된 모델로 만드는 과정이다.
GPU 사용하여 학습 시키는법 (기초 포함)
1단계
먼저 GPU가 무엇인지부터 이해해야 한다.
GPU는 원래 그래픽 처리 장치이지만, 딥러닝에서는 대량의 숫자 계산을 빠르게 처리하는 연산 장치로 사용된다.
딥러닝 모델은 내부적으로 엄청나게 많은 행렬 계산과 벡터 계산을 반복하는데, 이런 계산은 CPU보다 GPU가 훨씬 빠른 경우가 많다.
여기서 중요한 점은, GPU는 그냥 “컴퓨터 안에 있는 부품” 정도로 끝나는 것이 아니라는 점이다.
딥러닝에서 GPU를 쓴다는 것은, 모델과 데이터를 GPU가 계산할 수 있는 위치로 옮겨서 실제 연산을 GPU에서 수행하게 만드는 것을 의미한다.
즉, 초보자 기준으로 가장 먼저 이해해야 하는 핵심은 다음과 같다.
- CPU는 일반적인 계산 담당
- GPU는 딥러닝 같은 대량 병렬 계산 담당
- 딥러닝에서 GPU를 쓴다는 것은 “학습 계산을 GPU에게 맡긴다”는 뜻
정리하면, 1단계는 “GPU는 딥러닝 계산을 빠르게 해주는 장치”라는 개념을 이해하는 단계이다.
2단계
내 컴퓨터에 GPU가 있다고 해서 바로 딥러닝 학습이 가능한 것은 아니다.
딥러닝에서 가장 흔히 사용하는 GPU 환경은 NVIDIA GPU + CUDA 환경이다.
즉, 일반적으로 PyTorch에서 GPU를 제대로 쓰려면 다음 조건이 중요하다.
- NVIDIA GPU가 있어야 함
- 해당 GPU용 드라이버가 설치되어 있어야 함
- PyTorch가 GPU를 지원하는 버전이어야 함
예를 들어, 단순히 노트북에 그래픽칩이 있다는 것만으로는 부족할 수 있다.
딥러닝 학습에 자주 쓰이는 것은 보통 NVIDIA RTX 계열처럼 CUDA를 지원하는 GPU이다.
이 단계에서 사용자가 해야 할 일은 “내 장비가 GPU 학습이 가능한 장비인지 확인하는 것”이다.
즉, 2단계는 “내 컴퓨터가 딥러닝용 GPU를 사용할 수 있는 환경인지 확인하는 단계”이다.
3단계
Python과 PyTorch를 설치해야 한다.
딥러닝 학습은 보통 Python 코드로 수행한다.
그리고 PyTorch는 딥러닝 모델을 만들고 학습시키는 대표적인 라이브러리이다.
Hugging Face는 pretrained model을 쉽게 불러오게 해주는 라이브러리 생태계라고 보면 된다.
즉, 역할을 구분하면 다음과 같다.
- Python: 전체 코드를 실행하는 언어
- PyTorch: 딥러닝 계산과 GPU 연산 담당
- Hugging Face: pretrained model, tokenizer, 데이터 처리 지원
이 단계에서 중요한 것은 PyTorch를 CPU 전용 버전이 아니라 GPU 지원 버전으로 설치해야 한다는 점이다.
CPU 버전으로 설치하면 GPU가 있어도 사용할 수 없다.
즉, 3단계는 “GPU를 사용할 수 있는 PyTorch 환경과 Hugging Face 관련 라이브러리를 준비하는 단계”이다.
4단계
PyTorch가 GPU를 실제로 인식하는지 확인해야 한다.
이 단계는 매우 중요하다.
많은 초보자가 GPU가 있다고 생각하지만, 실제 코드에서는 GPU가 안 잡히는 경우가 많다.
PyTorch에서는 보통 다음 개념으로 확인한다.
- 현재 GPU 사용 가능 여부 확인
- 사용 가능한 GPU 이름 확인
- GPU 개수 확인
여기서 핵심 개념은 cuda 이다.
PyTorch에서 GPU를 쓸 수 있는 상태면 보통 cuda 라는 장치를 사용할 수 있게 된다.
즉, 이 단계의 본질은 다음과 같다.
“내 Python 코드가 GPU를 인식하고 있는가?”
만약 여기서 GPU가 인식되지 않으면, 이후 단계는 전부 CPU로 돌아가게 된다.
즉, 4단계는 “설치가 끝난 뒤, PyTorch가 GPU를 실제로 사용할 수 있는 상태인지 검증하는 단계”이다.
5단계
이제 device라는 개념을 이해해야 한다.
PyTorch에서 device는 연산이 어디서 수행될지를 의미한다.
가장 기본적인 두 가지는 다음과 같다.
- cpu
- cuda
cpu는 CPU에서 계산한다는 뜻이고,
cuda는 NVIDIA GPU에서 계산한다는 뜻이다.
초보자는 여기서 “GPU를 쓰는 법”을 너무 어렵게 생각할 필요가 없다.
실제로는 “연산 위치를 cpu에서 cuda로 바꾸는 것”이라고 이해하면 된다.
보통 코드는 다음 논리로 작성된다.
- GPU가 가능하면 cuda
- 안 되면 cpu
이렇게 하면 같은 코드가 GPU 있는 컴퓨터에서는 GPU로, 없는 컴퓨터에서는 CPU로 동작한다.
즉, 5단계는 “딥러닝 코드에서 연산 위치를 나타내는 device 개념을 이해하는 단계”이다.
6단계
Hugging Face에서 pretrained model을 불러온다.
이 단계에서는 예를 들어 BERT, Llama, ResNet 같은 이미 학습된 모델을 불러온다.
이 모델은 이미 대규모 데이터로 사전학습된 상태이므로, 사용자는 처음부터 모델을 새로 만들지 않아도 된다.
하지만 여기서 중요한 점이 있다.
모델을 불러오는 것만으로는 GPU를 쓰는 것이 아니다.
처음 불러온 모델은 대개 기본 상태로 메모리에 올라온다.
초보자 입장에서는 “모델을 불러왔다 = GPU 사용 준비 끝”이라고 오해하기 쉽지만, 실제로는 아직 GPU로 옮기지 않았을 수 있다.
즉, 6단계는 “사전학습된 모델을 Python 코드 안으로 가져오는 단계”이다.
7단계
설명
불러온 모델을 GPU로 옮긴다.
이 단계가 GPU 사용의 핵심 중 하나이다.
모델은 내부적으로 많은 파라미터를 갖는다.
예를 들어 가중치(weight), 편향(bias) 같은 값들이 있다.
이 값들이 CPU 메모리에 있으면 계산도 CPU 중심으로 이루어지고, GPU 메모리에 있어야 GPU 계산이 가능해진다.
따라서 모델을 GPU로 보낸다는 것은 모델 파라미터 전체를 GPU 메모리에 올린다는 뜻이다.
쉽게 말하면:
- 모델이 CPU에 있으면 CPU 계산
- 모델이 GPU에 있으면 GPU 계산 준비 상태
즉, 7단계는 “모델 자체를 GPU 메모리 위에 올려 두는 단계”이다.
8단계
설명
입력 데이터도 GPU로 옮겨야 한다.
초보자가 가장 많이 놓치는 부분이 바로 이것이다.
모델만 GPU에 올린다고 끝나지 않는다.
입력 데이터도 반드시 같은 장치에 있어야 한다.
예를 들어 텍스트 작업에서는 tokenizer가 문장을 숫자 텐서로 바꾼다.
이 숫자 텐서가 입력 데이터이다.
이미지 작업에서는 이미지가 텐서로 바뀐 것이 입력 데이터이다.
이 입력 텐서가 CPU에 있고 모델은 GPU에 있으면, PyTorch는 장치가 다르다고 오류를 낸다.
왜냐하면 서로 다른 장치에 있는 값들끼리는 바로 계산할 수 없기 때문이다.
따라서 기본 규칙은 명확하다.
- 모델이 GPU에 있으면 데이터도 GPU에 있어야 한다
- 모델이 CPU에 있으면 데이터도 CPU에 있어야 한다
즉, 8단계는 “입력 데이터까지 GPU로 이동시켜 모델과 같은 장치에 맞추는 단계”이다.
9단계
설명
모델에 데이터를 넣어 forward 계산을 수행한다.
이 단계에서 비로소 GPU가 실제 계산을 시작한다.
입력 데이터가 GPU에 있고 모델도 GPU에 있으면,
모델은 입력을 받아 출력값을 만든다.
이 과정을 forward라고 한다.
예를 들어:
- 텍스트 분류 모델이면 긍정/부정 점수 출력
- 이미지 분류 모델이면 고양이/강아지/자동차 같은 클래스 점수 출력
- 생성 모델이면 다음 단어 예측 결과 출력
여기서 중요한 것은, 이 계산이 CPU가 아니라 GPU에서 수행된다는 점이다.
즉, 우리가 모델과 데이터를 GPU로 옮긴 이유는 바로 이 forward 계산을 빠르게 하기 위해서이다.
즉, 9단계는 “GPU 위에 올라간 모델이 실제 입력을 받아 예측을 계산하는 단계”이다.
10단계
설명
정답과 비교해서 loss를 계산한다.
딥러닝에서 학습은 단순히 예측만 하는 것이 아니다.
모델의 예측이 정답과 얼마나 다른지를 계산해야 한다.
이 차이를 수치로 표현한 것이 loss이다.
예를 들어 정답이 “긍정”인데 모델이 “부정” 쪽 점수를 높게 주면 loss가 커진다.
반대로 정답에 가깝게 맞히면 loss가 작아진다.
이 loss는 “모델이 얼마나 틀렸는지”를 나타내는 값이다.
학습의 목표는 이 loss를 점점 줄이는 것이다.
GPU를 쓰는 상황에서는 이 loss 계산도 대부분 GPU 위에서 같이 수행된다.
즉, 10단계는 “모델의 예측 결과와 정답의 차이를 수치화하는 단계”이다.
11단계
설명
backward를 통해 gradient를 계산한다.
이 단계부터가 본격적인 학습 단계이다.
loss가 계산되면, 이제 모델이 왜 틀렸는지 내부적으로 추적해야 한다.
어느 가중치가 잘못된 방향으로 작동했는지, 어떤 값이 얼마나 수정되어야 하는지를 계산하는 과정이 필요하다.
이때 사용하는 것이 backward, 즉 역전파이다.
역전파를 수행하면 각 파라미터마다 gradient라는 값이 계산된다.
gradient는 쉽게 말해 “이 파라미터를 어느 방향으로 얼마나 바꾸면 loss가 줄어드는가”를 알려주는 정보이다.
초보자 입장에서는 다음처럼 이해하면 충분하다.
- forward: 예측함
- loss: 얼마나 틀렸는지 계산함
- backward: 무엇을 어떻게 고쳐야 하는지 계산함
즉, 11단계는 “모델의 틀린 정도를 바탕으로 파라미터 수정 방향을 계산하는 단계”이다.
12단계
설명
optimizer가 모델 파라미터를 업데이트한다.
gradient를 계산했다고 해서 자동으로 학습이 끝나는 것은 아니다.
이제 실제로 모델의 파라미터를 수정해야 한다.
이 역할을 하는 것이 optimizer이다.
대표적으로 Adam, AdamW, SGD 같은 것이 있다.
optimizer는 backward에서 계산된 gradient를 바탕으로 모델 가중치를 조금씩 수정한다.
이 수정이 반복되면 모델은 점점 내 데이터에 맞게 적응한다.
즉, 학습의 핵심 흐름은 다음과 같다.
- 예측한다
- 틀린 정도를 계산한다
- 수정 방향을 구한다
- 실제로 가중치를 수정한다
이 과정이 GPU 위에서 반복되면, 모델은 빠르게 학습된다.
즉, 12단계는 “계산된 gradient를 이용해 모델 파라미터를 실제로 바꾸는 단계”이다.
13단계
설명
이 과정을 배치 단위로 반복한다.
실제 데이터셋은 보통 한 번에 전부 넣지 않는다.
대신 여러 개씩 묶어서 나눠 넣는다. 이것을 batch라고 한다.
예를 들어 데이터가 10,000개라면:
- 한 번에 32개씩
- 또는 16개씩
- 또는 64개씩
이런 식으로 잘라서 학습한다.
왜 이렇게 하느냐 하면,
전체 데이터를 한 번에 GPU에 올리면 메모리가 부족할 수 있고,
미니배치 단위 학습이 계산 효율도 좋기 때문이다.
따라서 실제 학습은 다음을 반복한다.
- 배치 하나 불러오기
- GPU로 옮기기
- 예측하기
- loss 계산
- backward
- optimizer update
- 다음 배치 진행
즉, 13단계는 “전체 데이터를 작은 묶음으로 나누어 GPU에서 반복 학습하는 단계”이다.
14단계
설명
GPU 메모리 한계를 이해해야 한다.
초보자가 GPU를 처음 쓸 때 자주 만나는 문제는 메모리 부족이다.
GPU에도 메모리가 있는데, 이를 보통 VRAM이라고 생각하면 이해하기 쉽다.
GPU 메모리는 다음이 차지한다.
- 모델 파라미터
- 입력 데이터 배치
- 중간 계산 결과
- gradient
- optimizer 상태
즉, 모델이 크고 배치가 크면 GPU 메모리를 많이 쓴다.
예를 들어:
- BERT-base 정도는 비교적 다루기 쉬움
- 큰 LLM은 메모리 요구량이 매우 큼
- 배치 크기를 너무 크게 잡으면 바로 메모리 부족 발생 가능
이때 나타나는 대표적 오류가 Out Of Memory, 즉 OOM이다.
이 문제가 생기면 보통 다음 방법을 쓴다.
- batch size 줄이기
- 더 작은 모델 사용
- 입력 길이 줄이기
- mixed precision 사용
- full fine-tuning 대신 LoRA 사용
즉, 14단계는 “GPU는 무한한 자원이 아니며, 메모리 한계를 관리해야 한다는 것을 이해하는 단계”이다.
15단계
설명
가장 흔한 오류는 장치 불일치와 메모리 부족이다.
GPU를 처음 쓸 때 많이 만나는 대표 오류는 두 가지이다.
첫째, 모델은 GPU에 있는데 데이터는 CPU에 있는 경우
둘째, GPU 메모리가 부족한 경우
첫 번째 문제는 “같은 계산에 참여하는 것들은 같은 장치에 있어야 한다”는 규칙을 이해하면 해결된다.
두 번째 문제는 “GPU 메모리도 제한되어 있다”는 점을 이해하면 해결 방향이 보인다.
초보자는 에러가 나면 겁을 먹기 쉬운데, 실제로 딥러닝 GPU 에러의 상당수는 이 두 종류이다.
즉, 15단계는 “GPU 사용 시 자주 나는 오류의 원인을 이해하는 단계”이다.
16단계
설명
Hugging Face에서 GPU를 쓰는 것은 결국 PyTorch 방식으로 이루어진다.
많은 초보자가 “Hugging Face와 PyTorch는 별개인가?”라고 헷갈리는데, 실제로는 Hugging Face 모델 대부분이 PyTorch 기반으로 잘 연결되어 있다.
즉, Hugging Face는 다음을 쉽게 해준다.
- pretrained model 다운로드
- tokenizer 제공
- config 관리
- 데이터셋 처리 지원
그리고 PyTorch는 다음을 담당한다.
- 텐서 연산
- GPU 연산
- 자동 미분
- optimizer
- 학습 루프
그래서 Hugging Face + PyTorch + GPU 조합이라는 것은
“Hugging Face로 모델을 가져오고, PyTorch로 GPU 학습을 수행한다”는 의미이다.
즉, 16단계는 “Hugging Face와 PyTorch의 역할 분담을 이해하는 단계”이다.
17단계
설명
초보자 기준으로 GPU 사용 전체 흐름을 한 번에 정리하면 다음과 같다.
- GPU 가능한 환경 준비
- PyTorch GPU 버전 설치
- Hugging Face 라이브러리 설치
- PyTorch가 GPU를 인식하는지 확인
- device를 cuda로 설정
- pretrained model 불러오기
- 모델을 GPU로 이동
- 입력 데이터도 GPU로 이동
- forward 계산 수행
- loss 계산
- backward 수행
- optimizer로 파라미터 업데이트
- 이 과정을 batch 단위로 반복
- 성능 평가 후 모델 저장
이 흐름이 바로 초보자가 실제로 이해해야 하는 GPU 사용의 전체 구조이다.
즉, 17단계는 “앞선 모든 단계를 하나의 학습 절차로 통합해 이해하는 단계”이다.
18단계
아주 쉬운 비유로 다시 설명하면 다음과 같다.
CPU와 GPU를 작업장이라고 생각하면 된다.
- CPU 작업장: 일반 작업에는 좋지만 대량 반복 계산에는 느릴 수 있음
- GPU 작업장: 같은 계산을 엄청 많이 동시에 처리하는 데 강함
모델은 작업자이고, 데이터는 작업 재료이다.
그런데 작업자는 GPU 작업장에 있고, 재료는 CPU 작업장에 있으면 같이 일할 수 없다.
둘 다 같은 작업장에 있어야 한다.
그래서:
- 모델을 GPU로 보낸다
- 데이터도 GPU로 보낸다
- GPU에서 계산한다
- 결과를 바탕으로 모델을 조금씩 수정한다
이것이 바로 딥러닝에서 GPU를 “쓴다”는 의미이다.
즉, 18단계는 “개념을 비유적으로 정리해 완전히 이해하는 단계”이다.
19단계
설명
한 문장씩 가장 핵심만 다시 정리하면 다음과 같다.
- GPU는 딥러닝 계산을 빠르게 하는 장치이다.
- PyTorch가 GPU를 인식해야 사용할 수 있다.
- 코드에서 cuda device를 선택해야 한다.
- 모델을 GPU로 보내야 한다.
- 입력 데이터도 GPU로 보내야 한다.
- 그러면 예측, loss, backward, 업데이트가 GPU에서 수행된다.
- 이 과정을 반복하면 모델이 학습된다.
즉, 19단계는 “GPU 사용의 핵심 원리를 최소 문장으로 압축해 정리하는 단계”이다.
20단계
설명
최종적으로, “GPU를 어떻게 쓰는가”에 대한 가장 정확한 답은 다음과 같다.
딥러닝에서 GPU를 사용한다는 것은, Hugging Face에서 불러온 pretrained model과 입력 데이터를 PyTorch의 CUDA 장치로 이동시켜 GPU 메모리 상에서 forward 계산, loss 계산, 역전파, optimizer 업데이트를 수행하도록 만드는 것이다. 이 과정에서 사용자는 GPU 인식 여부, device 일치, 배치 크기, 메모리 사용량을 함께 관리해야 한다.
즉, 20단계는 “전체 개념을 기술적으로 정확한 문장으로 정리하는 단계”이다.
'AL,ML 학부연구생 > 공부 기록' 카테고리의 다른 글
| HuggingFace 은 어떤 플랫폼이고, 활용하여 무엇이 가능한가? (0) | 2026.03.24 |
|---|---|
| Llama, GPT, T5, BERT, RoBERTa, DeBERTa 는 각각 어떤 모델이고 어떤 작업에 특화되어 있나요? (0) | 2026.03.24 |
| LoRa (Low-Rank Adaptation)란 무엇인가? (0) | 2026.03.23 |
| Softmax와 Sigmoid 함수란 무엇인가? (0) | 2026.03.23 |
| Cross Entropy 란 무엇인가? (0) | 2026.03.23 |