반응형

1. 모델 선택
먼저 HuggingFace에서 Models에 들어가
사용하고 싶은 모델을 선택한다.

모델을 선택 했으면,
Use this model을 클릭하고
transformers를 클릭해 준다.

그러면 모델을 불러올 수 있는 코드를 두가지 확인할 수 있다.
2. 모델 직접적으로 불러오는 방법
이 방법은 모델을 직접 불러오는 것이다.
불러오는 방법은 다음과 같다.
실행을 위해 코드를 복사한다. (모델 이름, import 라이브러리 확인)
모델을 gpu로 옮겨준다.
토크나이저도 불러온다.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# 디바이스 설정 (GPU가 사용 가능하면 GPU, 아니면 CPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 모델 및 토크나이저 로드
model_name = "deepseek-ai/DeepSeek-R1" # 사용할 모델 이름
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to(device) # 모델을 디바이스로 이동
다음은 모델을 실행하는 방법이다.
토크나이저를 통해 인코딩, 디코딩을 적용해 준다.
return_tensors="pt" 는 pytorch에서 사용할 수 있도록 텐서를 인코딩 하는 것이다.
그리고 model.generate() 메서드를 이용해 모델을 실행해 준다.
# 입력 텍스트 설정
input_text = "Hugging Face에서 PyTorch를 사용해 모델을 실행하는 방법?"
input_ids = tokenizer.encode(input_text, return_tensors="pt").to(device)
# 텍스트 생성
output = model.generate(input_ids, max_new_tokens=50, temperature=0.7, top_k=50, top_p=0.9)
decoded_output = tokenizer.decode(output[0], skip_special_tokens=True)
print(decoded_output)
파라미터 상세 설정 (대부분의 경우 default값을 넣어도 되므로, 그냥 보고 넘어가자)
- model.generate() : 모델을 실행하는 메서드
- input_ids : 입력 토큰
- max_length : 생성할 시퀀스의 최대 길이
- max_new_tokens : 새로 생성될 토큰의 최대 개수
- min_length : 성된 텍스트의 최소 길이
- temperature : 다음 토큰을 선택할 확률 분포를 조정 (높은 값 (>1)은 더 다양하고 창의적인 텍스트를 생성)
- top_k : 확률 분포에서 상위 k개의 후보 중에서만 다음 토큰을 샘플링
- top_p : 확률 분포의 누적 확률이 p 이상인 후보만 고려
- num_beams : 빔 서치(Beam Search)에서 사용할 빔의 수를 지정
- no_repeat_ngram_size : 생성된 텍스트에서 반복을 방지하기 위해 사용할 n-gram의 크기를 지정
- repetition_penalty : 반복된 텍스트의 생성 가능성을 줄이기 위한 페널티 적용 (값이 >1.0일수록 반복을 억제)
- length_penalty : 생성된 텍스트의 길이에 가중치를 부여 (값이 >1.0이면 긴 텍스트에 더 높은 점수를 부여)
- do_sample :텍스트 생성 시 샘플링을 사용할지 여부를 지정 (True: 확률 분포에서 샘플링)
- num_return_sequences : 생성할 텍스트의 수를 지정
- early_stopping : 텍스트 생성이 특정 조건을 만족하면 조기 종료할지 여부를 지정
# 입력 텍스트 설정
input_text = "Hugging Face에서 PyTorch를 사용해 모델을 실행하는 방법은?"
input_ids = tokenizer.encode(input_text, return_tensors="pt").to(device)
# 금지 단어 설정 (예: 특정 단어 금지)
bad_words_ids = tokenizer.encode("금지된단어", add_special_tokens=False)
bad_words_ids = [bad_words_ids] # 리스트로 감싸야 함
# 텍스트 생성
output = model.generate(
input_ids=input_ids, # 입력 텍스트
max_length=100, # 생성될 텍스트의 최대 길이
min_length=20, # 생성될 텍스트의 최소 길이
max_new_tokens=50, # 새로 생성될 토큰의 최대 개수
temperature=0.7, # 다양성 제어를 위한 온도
top_k=50, # 확률 상위 k개의 후보만 고려
top_p=0.9, # 누적 확률이 0.9 이상인 후보만 고려
num_beams=5, # 빔 서치에서 사용할 빔의 수
no_repeat_ngram_size=2, # 반복 방지 n-그램 크기
repetition_penalty=1.2, # 반복된 텍스트에 대한 페널티
length_penalty=1.0, # 길이에 대한 가중치
do_sample=True, # 샘플링 사용 여부
num_return_sequences=3, # 생성할 텍스트의 수
early_stopping=True, # 조건 충족 시 조기 종료
bad_words_ids=bad_words_ids, # 금지할 단어 리스트
pad_token_id=tokenizer.pad_token_id, # 패딩 토큰 ID
eos_token_id=tokenizer.eos_token_id, # 종료 토큰 ID
bos_token_id=tokenizer.bos_token_id, # 시작 토큰 ID
return_dict_in_generate=True, # 결과를 딕셔너리 형태로 반환
output_scores=True # 생성된 토큰의 점수 반환
)
# 결과 출력
for idx, sequence in enumerate(output.sequences):
decoded_text = tokenizer.decode(sequence, skip_special_tokens=True)
print(f"생성된 텍스트 #{idx + 1}:\n{decoded_text}\n")
# 추가 정보 출력
if output.scores:
print("생성된 토큰별 점수:")
for score in output.scores:
print(score)
3. 파이프라인(pipeline) 이용해 모델 불러오기
pipline은 모델을 간단히 실행하기 좋은 도구이다.
별도의 커스터마이징이 필요하지 않다면, 이 방법이 좋다.
모델 불러오기
pipe = pipeline("작업 유형", model="모델 이름")
모델 사용하기 (gpu도 설정할 필요없이 자동으로 잡아준다.)
result = pipe("입력 텍스트")
print(result)
파라미터 설정
(기본값으로 충분하지 않은 경우, pipeline에서도 generate와 동일한 파라미터를 설정할 수 있다)
result = pipe(
"Once upon a time",
max_new_tokens=50, # 새로 생성할 최대 토큰 수
temperature=0.7, # 출력 다양성 제어 (낮을수록 확정적)
top_k=50, # 상위 K개의 토큰만 고려
top_p=0.9, # 누적 확률 기반 필터링
repetition_penalty=1.2 # 반복 방지
)
print(result)
예시 코드
from transformers import pipeline
pipe = pipeline("text-generation", model="deepseek-ai/DeepSeek-R1", trust_remote_code=True)
result = pipe("Hello, how are you?")
print(result)
반응형
'자연어처리 > LLM을 위한 코딩' 카테고리의 다른 글
[LLM] 모델 학습 with HuggingFace (Accelerate) (6) (0) | 2025.02.15 |
---|---|
[LLM] 모델 학습 with Hugging Face (TrainingArguments, Trainer, trl) (5) (1) | 2025.02.13 |
[LLM] 데이터 준비 with huggingface (datasets) (4) (0) | 2025.02.10 |
Pytorch Transformers 설치 (2) (0) | 2025.01.28 |
LLM을 위한 Pytorch와 HuggingFace 개요 (1) (1) | 2025.01.28 |