본문 바로가기

스타트업 투자/데이터 + 테크

패스트캠퍼스 환급챌린지 44일차 : 모델 호출

by Sungwook Choi 2025. 5. 14.

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장

② 오늘자 날짜, 공부 종료 시각 포함 사진 1장

③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장

④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)

2. 학습 후기 700자 이상 (공백 제외)

  • 파인튜닝 테스트
    • AutoPeftModelForCausalLM()의 입력으로 LoRA Adapter가 저장된 체크포인트의 주소를 넣으면 LoRA Adapter가 기존의 LLM과 부착되어 로드됩니다. 이 과정은 LoRA Adapter의 가중치를 사전 학습된 언어 모델(LLM)에 통합하여 미세 조정된 모델을 완성하는 것을 의미합니다.
    • peft_model_id 변수는 미세 조정된 가중치가 저장된 체크포인트의 경로를 나타냅니다. "llama3-8b-summarizer-ko/checkpoint-372"는 LoRA Adapter 가중치가 저장된 위치로, 이 경로에서 해당 가중치를 불러옵니다.
    • fine_tuned_modelAutoPeftModelForCausalLM.from_pretrained 메서드를 통해 체크포인트를 로드하여 생성됩니다. 이 메서드는 LLM과 LoRA Adapter를 결합하고, 최적화된 설정으로 모델을 메모리에 로드합니다. device_map="auto" 옵션은 모델을 자동으로 GPU에 배치합니다.
    • pipeline은 Hugging Face의 고수준 유틸리티로, NLP 작업(예: 텍스트 생성, 번역, 요약 등)을 간단히 수행할 수 있게 해줍니다. 이 코드에서 사용된 pipeline("text-generation")은 텍스트 생성 작업을 수행하기 위한 파이프라인 객체를 생성합니다. 파이프라인은 내부적으로 모델과 토크나이저를 관리하여, 입력 텍스트를 토큰화하고, 모델을 통해 생성된 결과를 다시 디코딩하여 사람이 읽을 수 있는 텍스트로 변환합니다.
    • 이 코드는 미세 조정된 LLM을 로드한 뒤, 이를 이용해 텍스트 생성 작업을 간단히 수행할 수 있도록 준비하는 데 목적이 있습니다. pipeline을 통해 텍스트 생성 작업을 실행하면, 입력 텍스트에 기반하여 모델이 다음 토큰을 예측하고 이를 반복적으로 생성합니다. 이 과정은 사용자에게 자연스러운 텍스트를 출력하는 데 사용됩니다.
    • 코드
    • import torch from peft import AutoPeftModelForCausalLM from transformers import AutoTokenizer, pipeline

peft_model_id = "llama3-8b-summarizer-ko/checkpoint-372"
fine_tuned_model = AutoPeftModelForCausalLM.from_pretrained(peft_model_id, device_map="auto", torch_dtype=torch.float16)
pipe = pipeline("text-generation", model=fine_tuned_model, tokenizer=tokenizer)

eos_token = tokenizer("<|eot_id|>",add_special_tokens=False)["input_ids"][0]

def test_inference(pipe, prompt):
outputs = pipe(prompt, max_new_tokens=1024, eos_token_id=eos_token, do_sample=False)
return outputs[0]['generated_text'][len(prompt):].strip()

for prompt, label in zip(prompt_lst[10:15], label_lst[10:15]):
# print(f" prompt:\n{prompt}")
print(f" response:\n{test_inference(pipe, prompt)}")
print(f" label:\n{label}")
print("-"*50)


    - LoRA Adapter를 merge하지 않은 기본모델로 테스트 데이터에 인퍼런스
~~~코드2
base_model_id = "NCSOFT/Llama-VARCO-8B-Instruct"
model = AutoModelForCausalLM.from_pretrained(base_model_id, device_map="auto", torch_dtype=torch.float16)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)

for prompt, label in zip(prompt_lst[10:15], label_lst[10:15]):
    # print(f"    prompt:\n{prompt}")
    print(f"    response:\n{test_inference(pipe, prompt)}")
    print(f"    label:\n{label}")
    print("-"*50)

url : https://abit.ly/lisbva

댓글