Views
No views yet
1from transformers import AutoTokenizer, AutoModelForCausalLM
2from datasets import load_dataset
3from llmcompressor import oneshot
4from llmcompressor.modifiers.quantization import QuantizationModifier
5from llmcompressor.modifiers.smoothquant import SmoothQuantModifier
6from llmcompressor.transformers.compression.helpers import calculate_offload_device_map
7
8model_id = "Qwen/Qwen2.5-Coder-14B-Instruct"
9model_out = "Qwen2.5-Coder-14B-Instruct.w8a8"
10
11num_samples = 128
12max_seq_len = 4096
13
14tokenizer = AutoTokenizer.from_pretrained(model_id)
15
16def preprocess_fn(example):
17 return {"text": tokenizer.apply_chat_template(example["messages"], add_generation_prompt=False, tokenize=False)}
18
19ds = load_dataset("neuralmagic/LLM_compression_calibration", split="train")
20ds = ds.shuffle().select(range(num_samples))
21ds = ds.map(preprocess_fn)
22
23recipe = [
24 SmoothQuantModifier(smoothing_strength=0.8),
25 QuantizationModifier(targets="Linear", scheme="W8A8", ignore=["lm_head"], dampening_frac=0.1)
26]
27
28device_map = calculate_offload_device_map(
29 model_id, reserve_for_hessians=True, num_gpus=1, torch_dtype="bfloat16"
30)
31
32model = AutoModelForCausalLM.from_pretrained(
33 model_id,
34 device_map=device_map,
35 torch_dtype="bfloat16",
36)
37
38oneshot(
39 model=model,
40 dataset=ds,
41 recipe=recipe,
42 max_seq_length=max_seq_len,
43 num_calibration_samples=num_samples,
44 output_dir=model_out,
45)