LLM에 대해 확실한 기본기를 다지기 위해
공부하고 정리한 내용입니다.
AI 공부를 하면서 HuggingFace사용법은 필수적으로 익혀야 한다.
그래서 HuggingFace를 통해 모델을 다운로드 받아서 사용해보고자 한다.
HuggingFace란?
- LLM을 포함하여 다양한 모델을 공유하고 사용할 수 있도록 개방된 오픈소스 플랫폼이다.
- HuggingFace 특징은 아래와 같다.
- 누구나 쉽게 AI 모델을 공유하고 HuggingFace에서 만든 파이썬 라이브러리 transformers를 이용하여 쉽게 다운로드, 추론, 파인튜닝을 수행할 수 있다.
- 최신 AI/LLM 모델과 기술을 접할 수 있다.
- github처럼 모델 공유가 가능하다. -> 다운로드한 모델을 파인튜닝한 후 HuggingFace 업로드
- 다양한 Dataset 공유 가능
- 자신이 개발한 AI 기반 웹앱을 호스팅 할 수 있다.(Space 탭)
HuggingFace에서는 대표적으로 아래와 같은 세 가지 라이브러리를 제공한다.
| 라이브러리 | 설명 | 사용 예시 |
| datasets | - 모델 파인튜닝 /성능평가 시 필요한 데이터셋을 로드하거나 저장할 수 있는 라이브러리 | from datasets import load_dataset dataset = load_dataset() |
| trl | - 모델 파인튜닝 등 학습시 활용되는 라이브러리 | from trl import PPOTrainer, PPOConfig |
| transformers | - 모델 자체와 토크나이저를 로드하여 추론할 때 주로 사용되는 라이브러리 | from transformers import AutoTokenizer, AutoModel model = AutoModel() tokenizer = AutoTokenizer() |
특히 Transformers 라이브러리는 HuggingFace가 등장하기 전에는 여러 기업에서 서로 다른 인터페이스를 제공했기 때문에 복잡했지만, HuggingFace에서 파이썬 transformers 라이브러리를 제작/유지를 하여 여러 모델을 쉽게 다룰 수 있도록 한다.
*HuggingFace 모델을 다운로드하거나 파인튜닝, 양자화 등의 작업을 수행하는 등의 경우 transformers 라이브러리를 사용한다.
실습
실습 환경은 Colab으로 진행했고, 런타임 유형은 T4로 설정했다.
모델을 다운로드하고 추론을 하는 방식은 두 가지가 있다.
1. pipeline - 간소화된 추론 방법
- pipeline은 토크나이저와 모델을 결합해 쉽게 추론할 수 있도록 지원
- pipeline() 수행 시 자동으로 허깅페이스에서 모델 다운로드
- 주로 프로토타이핑, 간단히 테스트할 때 사용
- gpt2-xl 모델은 허깅페이스 openai-community/gpt2-xl 모델을 의미
# pipeline 가져오기
from transformers import pipeline
# gpt2-xl 모델 로드
generator = pipeline('text-generation', model='gpt2-xl')
# 문장 넣어서 텍스트 출력
response = generator("Hello, I'm a language model,", max_length=100, num_return_sequences=2)
# 결과 출력
print(response)
2. 토크나이저와 모델을 각각 다운로드하는 방식
아래의 3단계로 이루어진다.
1. transformer 라이브러리에서 AutoModelForCausslLM, AutoTokenizer를 불러온 후,
Tokenizer를 이용하여 text를 토큰화한다.
# transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
# AutoModelForCasualLM = 다음 단어를 예측하는 모델
# AutoTokenizer = 텍스트를 숫자로 변환해주는 도구
tokenizer = AutoTokenizer.from_pretrained('gpt2-xl')
model = AutoModelForCausalLM.from_pretrained('gpt2-xl').to('cuda')
text = "Replace me by any text you'd like"
# .to('cuda') 하는 이유 -> 모델이 GPU에 있기 때문에 입력도 GPU에 있어야 함.
encoded_input = tokenizer(text, return_tensors='pt').to('cuda')
print(encoded_input)
2. 토큰화 한 내용으로 추론을 수행한 후, 결과 토큰을 출력한다.
# model.generate(): 추론 수행
outputs = model.generate(
# **encoded_input : dict를 풀어서 전달
**encoded_input,
max_length=100,
repetition_penalty=2.0
)
# 토큰 리스트 출력
print(outputs)
3. 토큰을 사람이 읽을 수 있도록 문자열로 변환한다.
decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=False)
print(decoded_output)
두 가지 방식을 사용해 본 결과 각 방식의 차이가 잘 느껴졌는데,
첫 번째 방식의 경우에는
빠르게 결과를 확인할 수 있다는 장점이 존재하지만 내부 동작을 확인할 수 없고, 커스터마이징이 제한된다는 점을 느꼈고
두 번째 방식의 경우에는
제어가 가능하고, 성능 최적화 및 확장성 까지도 고려해 볼 수 있다는 장점이 존재하지만,
코드가 복잡하다는 단점이 존재한다는 점을 확인할 수 있었다.
다음 글에서는 토크나이저에 대해 더 자세히 공부해보고자 한다.
'LLM' 카테고리의 다른 글
| 3. 토크나이저(Tokenizer) (0) | 2026.04.25 |
|---|---|
| 1. LLM 이해 (0) | 2026.04.23 |