Views
No views yet
transformers implementation does not have multi-token prediction (MTP) support. So you might see some "weights not loaded" warnings. This is expected.1model_id=tiny-random/glm-4.5
2vllm serve $model_id \
3 --tensor-parallel-size 1 \
4 --tool-call-parser glm4_moe \
5 --reasoning-parser glm4_moe \
6 --enable-auto-tool-choice1# Multi-token prediction is supported
2model_id=tiny-random/glm-4.5
3python3 -m sglang.launch_server \
4 --model-path $model_id \
5 --tp-size 1 \
6 --cuda-graph-max-bs 4 \
7 --tool-call-parser glm45 \
8 --reasoning-parser glm45 \
9 --speculative-algorithm EAGLE \
10 --speculative-num-steps 3 \
11 --speculative-eagle-topk 1 \
12 --speculative-num-draft-tokens 4 \
13 --mem-fraction-static 0.41from transformers import pipeline
2model_id = "tiny-random/glm-4.5"
3pipe = pipeline(
4 "text-generation", model=model_id, device="cuda",
5 trust_remote_code=True, max_new_tokens=20,
6)
7print(pipe("Hello World!"))1from copy import deepcopy
2
3import torch
4import torch.nn as nn
5from transformers import (
6 AutoConfig,
7 AutoModelForCausalLM,
8 AutoTokenizer,
9 GenerationConfig,
10 pipeline,
11 set_seed,
12)
13from transformers.models.glm4_moe.modeling_glm4_moe import Glm4MoeDecoderLayer, Glm4MoeRMSNorm
14
15source_model_id = "zai-org/GLM-4.5"
16save_folder = "/tmp/tiny-random/glm-4.5"
17
18tokenizer = AutoTokenizer.from_pretrained(
19 source_model_id, trust_remote_code=True,
20)
21tokenizer.save_pretrained(save_folder)
22
23config = AutoConfig.from_pretrained(
24 source_model_id, trust_remote_code=True,
25)
26config.hidden_size = 16
27config.head_dim = 64
28config.intermediate_size = 64
29config.num_attention_heads = 4
30config.num_hidden_layers = 2 # 1 dense, 1 moe
31config.num_key_value_heads = 2
32config.moe_intermediate_size = 64
33config.n_routed_experts = 16
34config.n_shared_experts = 1
35config.first_k_dense_replace = 1
36config.num_experts_per_tok = 8
37config.num_nextn_predict_layers = 1 # after layer 0 and 1, there will be a another MTP layer
38config.tie_word_embeddings = True
39
40torch.set_default_dtype(torch.bfloat16)
41model = AutoModelForCausalLM.from_config(
42 config,
43 torch_dtype=torch.bfloat16,
44 trust_remote_code=True,
45)
46
47class SharedHead(nn.Module):
48 def __init__(self, config) -> None:
49 super().__init__()
50 self.norm = Glm4MoeRMSNorm(config.hidden_size, eps=config.rms_norm_eps)
51 # self.head = deepcopy(model.get_output_embeddings())
52
53class Glm4MoeDecoderMTP(Glm4MoeDecoderLayer):
54 def __init__(self, config, layer_idx):
55 super().__init__(config, layer_idx=layer_idx)
56 self.enorm = Glm4MoeRMSNorm(config.hidden_size, eps=config.rms_norm_eps)
57 self.hnorm = Glm4MoeRMSNorm(config.hidden_size, eps=config.rms_norm_eps)
58 self.eh_proj = nn.Linear(config.hidden_size * 2, config.hidden_size, bias=False)
59 self.shared_head = SharedHead(config=config)
60 # self.embed_tokens = deepcopy(model.get_input_embeddings())
61
62last_extra_layer = Glm4MoeDecoderMTP(config, layer_idx=config.num_hidden_layers)
63model.model.layers.append(last_extra_layer)
64model.generation_config = GenerationConfig.from_pretrained(
65 source_model_id, trust_remote_code=True,
66)
67set_seed(42)
68with torch.no_grad():
69 for name, p in sorted(model.named_parameters()):
70 torch.nn.init.normal_(p, 0, 0.2)
71 print(name, p.shape)
72model.save_pretrained(save_folder)