Views
No views yet
mlp.gate layers fallback to 16 bits to ensure runing successfully on vLLM.vllm serve Intel/Qwen3-235B-A22B-Instruct-2507-int4-mixed-ar --tensor-parallel-size 4 --max-model-len 2621441from transformers import AutoModelForCausalLM, AutoTokenizer
2
3model_name = "Intel/Qwen3-235B-A22B-Instruct-2507-int4-mixed-ar"
4
5# load the tokenizer and the model
6tokenizer = AutoTokenizer.from_pretrained(model_name)
7model = AutoModelForCausalLM.from_pretrained(
8 model_name,
9 torch_dtype="auto",
10 device_map="auto"
11)
12
13# prepare the model input
14prompt = "Give me a short introduction to large language model."
15messages = [
16 {"role": "user", "content": prompt}
17]
18text = tokenizer.apply_chat_template(
19 messages,
20 tokenize=False,
21 add_generation_prompt=True,
22)
23model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
24
25# conduct text completion
26generated_ids = model.generate(
27 **model_inputs,
28 max_new_tokens=16384
29)
30output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
31
32content = tokenizer.decode(output_ids, skip_special_tokens=True)
33
34print("content:", content)
35
361import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, AutoConfig
3from auto_round import AutoRound
4
5model_name = "Qwen/Qwen3-235B-A22B-Instruct-2507"
6
7model = AutoModelForCausalLM.from_pretrained(model_name,
8 device_map="cpu", torch_dtype="auto")
9
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11
12layer_config = {}
13for n, m in model.named_modules():
14 if "mlp.gate" in n: ## vllm only support 16 bit for this layer
15 layer_config[n] = {"bits": 16}
16 elif isinstance(m, torch.nn.Linear) and (not "expert" in n or "shared_experts" in n) and n != "lm_head":
17 layer_config[n] = {"bits": 8, "group_size": 128}
18
19autoround = AutoRound(model, tokenizer, iters=0, group_size=64, layer_config=layer_config)
20output_dir = "/dataset/Qwen3-235B-A22B-Instruct-2507-int4-mixed"
21autoround.quantize_and_save(output_dir)
22
23## tricky code to handle qkv fusing issue, we will fix it in vllm later
24import os
25import json
26
27config_path = os.path.join(output_dir, "config.json")
28
29with open(config_path, "r") as file:
30 config = json.load(file)
31extra_config = config["quantization_config"]["extra_config"]
32num_hidden_layers = config["num_hidden_layers"]
33for i in range(num_hidden_layers):
34 qkv_name = f"model.layers.{str(i)}.self_attn.qkv_proj"
35 extra_config[qkv_name] = {"bits": 8, "group_size": 128}
36with open(config_path, "w") as file:
37 json.dump(config, file, indent=2)
38