
로컬 세팅 환경
- GPU : RTX 3060 Ti (VRAM 8GB)
- NVIDIA-SMI (Driver Version) : 572.70
- CUDA version : 12.8
- Python 3.10.11
RTX 3060 Ti (8GB VRAM)에서 실행할 수 있는 최적의 LLM을 찾다가 Llama 3.1 8B를 설치했다.
13B 이상 모델은 VRAM 한계로 부담스럽고, 7B보다는 성능이 좋아서 적당한 타협점이었다.
CUDA 12.8과 최신 드라이버 환경에서 GPU 가속을 활용해 최적화할 수 있고, 로컬에서 LLM을 실험하며 성능을 테스트하기에도 적절하다.
LLM 개발을 진행 중이라 다양한 모델을 직접 다뤄보는 게 중요했는데, 이 모델이 속도와 메모리 사용량 면에서 가장 균형 잡힌 선택이었다.
모델 다운로드
1. Llama CLI 설치
pip install llama-stack
2. 모델 목록 찾기 (많은 모델 목록이 나옵니다. 거기서 설치하고 싶은 모델을 고르시면 됩니다.)
llama model list
3. 모델 선택 (저는 Llama-3.1-8B를 선택했습니다)
llama model download --source meta --model-id meta-llama/Llama-3.1-8B
4. 사용자 정의 URL 지정
https://llama3-1.llamameta.net/로 시작하는 URL를 입력하면 됩니다.
meta-llama/Meta-Llama-3.1-8B는 비공개 모델이므로 Hugging Face 계정과 토큰이 필요합니다.
코드
import transformers
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
# 모델과 토크나이저 로드
model = "meta-llama/Meta-Llama-3.1-8B"
tokenizer = AutoTokenizer.from_pretrained(model)
# 4-bit 양자화 설정
quant_config = BitsAndBytesConfig(
load_in_4bit=True, # 4비트 가중치 로드
bnb_4bit_compute_dtype=torch.float16, # 4비트 연산에 사용할 dtype
)
# 모델 로드
model = AutoModelForCausalLM.from_pretrained(
model, # 모델 이름
quantization_config=quant_config, # 양자화 설정
device_map="auto", # 모델을 어떤 장치에 할당할지 지정 (GPU 또는 CPU 자동 선택)
)
# 파이프라인 설정
pipeline = transformers.pipeline(
"text-generation", # 파이프라인 타입 설정
model=model, # 사용할 모델 설정
tokenizer=tokenizer, # 사용할 토크나이저 설정
repetition_penalty=1.1, # 반복 페널티 설정
)
# 텍스트 생성
prompt = "안녕하세요. 자기소개 부탁드립니다\n"
sequences = pipeline(
prompt, # 입력 텍스트
do_sample=True, # 샘플링 여부
top_p=0.9, # 다양성 조절
num_return_sequences=1, # 생성할 시퀀스 수
eos_token_id=tokenizer.eos_token_id, # 종료 토큰 ID
max_new_tokens=100, # 생성할 최대 토큰 수
pad_token_id=tokenizer.pad_token_id, # 패딩 토큰 ID
)
for seq in sequences:
generated_text = seq['generated_text']
# 입력 프롬프트와 생성된 텍스트를 토큰화하여 비교
prompt_tokens = tokenizer.tokenize(prompt)
generated_tokens = tokenizer.tokenize(generated_text)
# 프롬프트 토큰 길이만큼 생성된 토큰에서 제거
if generated_tokens[:len(prompt_tokens)] == prompt_tokens:
generated_tokens = generated_tokens[len(prompt_tokens):]
# 토큰을 다시 텍스트로 변환
generated_text = tokenizer.convert_tokens_to_string(generated_tokens).strip()
print(f"Result: {generated_text}")
결과
Result: .
저는 한국인으로서 미국에서 살면서 영어를 배우고 싶어 하였습니다.
저희 가족은 미국에서 15년을 살았습니다. 저희가 거주한 곳은 워싱턴, 테네시, 그리고 캘리포니아입니다. 저희는 한국에서 일하던 직장을 잃고 미국에 이민하여 왔습니다. 저희는 이민자로서 미국에서 새로운 생활을 시작하였는데,
이런식으로 결과가 나온다.
생성할 최대 토큰 수를 100으로 제한했기 때문에 중간에 말이 잘린 것으로 보인다.
또한, "Llama-3.1-8B"는 영어 중심 모델이므로 한국어 프롬프트에서 응답 품질이 낮다.
'LLM > LLM 개발' 카테고리의 다른 글
Llama 3.1 8B 파인튜닝 하기(2) - 테스트(BLEU, 코사인 유사도) (0) | 2025.03.18 |
---|---|
Llama 3.1 8B 파인튜닝 하기(1) - 전처리, 파인튜닝 (0) | 2025.03.17 |