1from vllm import LLM, SamplingParams
2from transformers import AutoTokenizer
3
4model_id = "nakue/SmolLM2-1.7B-W4A16-instruct"
5
6llm = LLM(
7 model=model_id,
8 quantization="compressed-tensors",
9 dtype="bfloat16",
10)
11
12sampling_params = SamplingParams(temperature=0.7, max_tokens=256)
13
14tokenizer = AutoTokenizer.from_pretrained(model_id)
15messages = [
16 {"role": "system", "content": "You are a helpful assistant."},
17 {"role": "user", "content": "What is the difference between W4A16 and W8A8 quantization?"},
18]
19prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
20
21outputs = llm.generate([prompt], sampling_params)
22print(outputs[0].outputs[0].text)
1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4model_id = "nakue/SmolLM2-1.7B-W4A16-instruct"
5tokenizer = AutoTokenizer.from_pretrained(model_id)
6
7model = AutoModelForCausalLM.from_pretrained(
8 model_id,
9 torch_dtype=torch.bfloat16,
10 device_map="auto",
11)
12
13messages = [
14 {"role": "system", "content": "You are a helpful assistant."},
15 {"role": "user", "content": "Explain quantization in simple terms."},
16]
17
18inputs = tokenizer.apply_chat_template(
19 messages,
20 return_tensors="pt",
21 add_generation_prompt=True,
22 return_dict=True,
23).to(model.device)
24
25outputs = model.generate(**inputs, max_new_tokens=128)
26print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
27
1from llmcompressor.transformers import SparseAutoModelForCausalLM
2from transformers import AutoTokenizer
3import torch
4
5model_id = "nakue/SmolLM2-1.7B-W4A16-instruct"
6tokenizer = AutoTokenizer.from_pretrained(model_id)
7
8model = SparseAutoModelForCausalLM.from_pretrained(
9 model_id,
10 torch_dtype="auto",
11 device_map="auto",
12)
13
14inputs = tokenizer("Explain INT4 quantization:", return_tensors="pt").to(model.device)
15outputs = model.generate(**inputs, max_new_tokens=128)
16print(tokenizer.decode(outputs[0], skip_special_tokens=True))
1from llmcompressor.transformers import SparseAutoModelForCausalLM
2import torch
3
4model = SparseAutoModelForCausalLM.from_pretrained(
5 "nakue/SmolLM2-1.7B-W4A16-instruct",
6 torch_dtype=torch.bfloat16,
7)
8model.save_pretrained("smollm2-bf16-dequantized")
9tokenizer.save_pretrained("smollm2-bf16-dequantized")
1from llmcompressor.transformers import SparseAutoModelForCausalLM, oneshot
2from llmcompressor.modifiers.quantization import QuantizationModifier
3from transformers import AutoTokenizer
4
5model_id = "HuggingFaceTB/SmolLM2-1.7B-Instruct"
6tokenizer = AutoTokenizer.from_pretrained(model_id)
7model = SparseAutoModelForCausalLM.from_pretrained(
8 model_id, torch_dtype="auto", device_map="auto"
9)
10
11recipe = QuantizationModifier(
12 targets="Linear",
13 scheme="W4A16",
14 ignore=["lm_head"], # keep output projection in BF16
15)
16
17oneshot(
18 model=model,
19 dataset="ultrachat",
20 recipe=recipe,
21 max_seq_length=2048,
22 num_calibration_samples=512,
23)
24
25model.save_pretrained("SmolLM2-1.7B-W4A16-instruct")
26tokenizer.save_pretrained("SmolLM2-1.7B-W4A16-instruct")
1# BF16 baseline
2lm_eval --model hf \
3 --model_args "pretrained=HuggingFaceTB/SmolLM2-1.7B-Instruct,dtype=bfloat16" \
4 --tasks hellaswag,winogrande,arc_easy,arc_challenge,piqa,wikitext \
5 --num_fewshot 0 --batch_size 32 --output_path results/baseline
6
7# W4A16
8lm_eval --model hf \
9 --model_args "pretrained=nakue/SmolLM2-1.7B-W4A16-instruct,dtype=bfloat16" \
10 --tasks hellaswag,winogrande,arc_easy,arc_challenge,piqa,wikitext \
11 --num_fewshot 0 --batch_size 32 --output_path results/w4a16
Apache 2.0 — inherited from the base model. See
LICENSE.
1@misc{smollm2,
2 title = {SmolLM2: When Smol Goes Big},
3 author = {HuggingFaceTB},
4 year = {2024},
5 url = {https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B-Instruct}
6}