이 글은 허깅페이스에서 릴리즈한 SmolLM sLLM 소개 및 사용법을 간략히 정리한다.
머리말
SmoLLM은 WebGPU 기반으로 동작되는 sLLM(소형언어모델) 이다.
모델을 로딩한 후, 질문을 입력하면 빠른 속도로 답변을 생성한다.
SmolLM은 135M, 360M 및 1.7B 매개변수의 세 가지 크기로 제공된다. 이 모델은 데이터 세트인 Cosmo-Corpus를 기반으로 한다. Cosmo-Corpus에는 Cosmopedia v2(Mixtral에서 생성된 합성 교과서 및 스토리 28B 토큰), Python-Edu(The Stack의 교육용 Python 샘플 4B 토큰) 및 FineWeb-Edu(FineWeb에서 중복 제거된 교육용 웹 샘플 220B 토큰)가 포함된다.
SmolLM 모델은 상식, 추론 및 지식을 테스트하는 다양한 벤치마크에서 크기 범주의 다른 모델과 비교할 때 유망한 결과를 보여준다.
설치
다음과 같이 설치한다.
pip install transformers
pip install bitsandbytes accelerate
사용법
CPU, GPU, 다중 GPU에서 모델 실행된다. 사용방법은 다음과 같이 간단하다.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import AutoTokenizer, AutoModelForCausalLM
def load_model():
checkpoint = "HuggingFaceTB/SmolLM-1.7B"
device = "cuda" # for GPU usage or "cpu" for CPU usage
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
# for multiple GPUs install accelerate and do `model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto")`
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
def load_in_float16():
checkpoint = "HuggingFaceTB/SmolLM-1.7B"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
# for fp16 use `torch_dtype=torch.float16` instead
model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto", torch_dtype=torch.bfloat16)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to("cuda")
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
return model
model = load_in_float16()
print(f"Memory footprint: {model.get_memory_footprint() / 1e6:.2f} MB")
# Memory footprint: 3422.76 MB
def load_in_8bit(option_8bit, option_4bit):
# to use 4bit use `load_in_4bit=True` instead
quantization_config = BitsAndBytesConfig(load_in_8bit=option_8bit, load_in_4bit=option_4bit)
checkpoint = "HuggingFaceTB/SmolLM-1.7B"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, quantization_config=quantization_config)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to("cuda")
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
return model
model = load_in_8bit(True, False)
print(f"Memory footprint: {model.get_memory_footprint() / 1e6:.2f} MB")
# Memory footprint: 1812.14 MB
model = load_in_8bit(False, True)
print(f"Memory footprint: {model.get_memory_footprint() / 1e6:.2f} MB")
# Memory footprint: 1006.84 MB
마무리
LLM은 로컬 LLM, sLLM, vLLM으로 발전하고 있다.
레퍼런스