인공지능 개발자 수다(유튜브 바로가기) 자세히보기

자연어처리/LLM을 위한 코딩

LLM 모델 불러오기 실행하기 (Huggingface Transformers) (3)

Suda_777 2025. 1. 28. 23:23
반응형

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)

 

반응형