Views
No views yet
vllm serve tiny-random/kimi-linear --trust-remote-code1# tested on transformers==4.57.1
2import torch
3import transformers
4from transformers import AutoModelForCausalLM, AutoTokenizer
5
6model_id = "tiny-random/kimi-linear"
7model = AutoModelForCausalLM.from_pretrained(
8 model_id,
9 dtype=torch.bfloat16,
10 device_map="cuda",
11 trust_remote_code=True
12)
13tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
14
15messages = [
16 {"role": "system", "content": "You are a helpful assistant provided by Moonshot-AI."},
17 {"role": "user", "content": "Is 123 a prime?"}
18]
19input_ids = tokenizer.apply_chat_template(
20 messages,
21 add_generation_prompt=True,
22 return_tensors="pt",
23 tokenize=True,
24).to(model.device)
25print(input_ids)
26generated_ids = model.generate(inputs=input_ids, max_new_tokens=500)
27response = tokenizer.batch_decode(generated_ids)[0]
28print(response)1import json
2from pathlib import Path
3
4import accelerate
5import torch
6from huggingface_hub import file_exists, hf_hub_download
7from transformers import (
8 AutoConfig,
9 AutoModelForCausalLM,
10 AutoProcessor,
11 AutoTokenizer,
12 GenerationConfig,
13 set_seed,
14)
15
16source_model_id = "moonshotai/Kimi-Linear-48B-A3B-Instruct"
17save_folder = "/tmp/tiny-random/kimi-linear"
18
19Path(save_folder).mkdir(parents=True, exist_ok=True)
20tokenizer = AutoTokenizer.from_pretrained(
21 source_model_id, trust_remote_code=True)
22tokenizer.save_pretrained(save_folder)
23with open(hf_hub_download(source_model_id, filename='tokenizer_config.json', repo_type='model'), 'r', encoding='utf-8') as f:
24 tokenizer_config_json = json.load(f)
25tokenizer_config_json['auto_map']['AutoTokenizer'][0] = f'{source_model_id}--' + \
26 tokenizer_config_json["auto_map"]["AutoTokenizer"][0]
27with open(f"{save_folder}/tokenizer_config.json", "w", encoding='utf-8') as f:
28 json.dump(tokenizer_config_json, f, indent=2)
29# hf_hub_download(source_model_id, filename='tiktoken.model', repo_type='model',
30# local_dir=save_folder, local_dir_use_symlinks=True, cache_dir='/tmp/')
31
32with open(hf_hub_download(source_model_id, filename='config.json', repo_type='model'), 'r', encoding='utf-8') as f:
33 config_json = json.load(f)
34for k, v in config_json['auto_map'].items():
35 config_json['auto_map'][k] = f'{source_model_id}--{v}'
36config_json.update({
37 "head_dim": 32,
38 "hidden_size": 8,
39 "intermediate_size": 32,
40 "linear_attn_config": {
41 "full_attn_layers": [4],
42 "head_dim": 32,
43 "kda_layers": [1, 2, 3],
44 "num_heads": 8,
45 "short_conv_kernel_size": 4,
46 },
47 "num_attention_heads": 8,
48 "num_key_value_heads": 8,
49 "moe_intermediate_size": 32,
50 "num_hidden_layers": 5,
51})
52with open(f"{save_folder}/config.json", "w", encoding='utf-8') as f:
53 json.dump(config_json, f, indent=2)
54
55config = AutoConfig.from_pretrained(
56 save_folder,
57 trust_remote_code=True,
58)
59print(config)
60torch.set_default_dtype(torch.bfloat16)
61model = AutoModelForCausalLM.from_config(config, trust_remote_code=True)
62torch.set_default_dtype(torch.float32)
63if file_exists(filename="generation_config.json", repo_id=source_model_id, repo_type='model'):
64 model.generation_config = GenerationConfig.from_pretrained(
65 source_model_id, trust_remote_code=True,
66 )
67set_seed(42)
68model = model.cpu()
69n_parms = sum(p.numel() for p in model.parameters())
70with torch.no_grad():
71 for name, p in sorted(model.named_parameters()):
72 torch.nn.init.normal_(p, 0, 0.1)
73 print(name, p.shape, (p.numel() / n_parms * 100), '%')
74model.save_pretrained(save_folder)
75
76with open(f"{save_folder}/config.json", "r", encoding='utf-8') as f:
77 config_json = json.load(f)
78 config_json['auto_map'] = {k: f'{source_model_id}--' + v.split(
79 '--')[-1] for k, v in config_json['auto_map'].items()}
80with open(f"{save_folder}/config.json", "w", encoding='utf-8') as f:
81 json.dump(config_json, f, indent=2)
82for python_file in Path(save_folder).glob('*.py'):
83 python_file.unlink()1KimiLinearForCausalLM(
2 (model): KimiLinearModel(
3 (embed_tokens): Embedding(163840, 8, padding_idx=163839)
4 (layers): ModuleList(
5 (0): KimiDecoderLayer(
6 (self_attn): KimiDeltaAttention(
7 (q_proj): Linear(in_features=8, out_features=256, bias=False)
8 (k_proj): Linear(in_features=8, out_features=256, bias=False)
9 (v_proj): Linear(in_features=8, out_features=256, bias=False)
10 (q_conv1d): ShortConvolution(256, 256, kernel_size=(4,), stride=(1,), padding=(3,), groups=256, bias=False, activation=silu, backend=triton)
11 (k_conv1d): ShortConvolution(256, 256, kernel_size=(4,), stride=(1,), padding=(3,), groups=256, bias=False, activation=silu, backend=triton)
12 (v_conv1d): ShortConvolution(256, 256, kernel_size=(4,), stride=(1,), padding=(3,), groups=256, bias=False, activation=silu, backend=triton)
13 (f_a_proj): Linear(in_features=8, out_features=32, bias=False)
14 (f_b_proj): Linear(in_features=32, out_features=256, bias=False)
15 (b_proj): Linear(in_features=8, out_features=8, bias=False)
16 (g_a_proj): Linear(in_features=8, out_features=32, bias=False)
17 (g_b_proj): Linear(in_features=32, out_features=256, bias=False)
18 (o_norm): FusedRMSNormGated(32, eps=1e-05, activation=sigmoid)
19 (o_proj): Linear(in_features=256, out_features=8, bias=False)
20 )
21 (mlp): KimiMLP(
22 (gate_proj): Linear(in_features=8, out_features=32, bias=False)
23 (up_proj): Linear(in_features=8, out_features=32, bias=False)
24 (down_proj): Linear(in_features=32, out_features=8, bias=False)
25 (act_fn): SiLUActivation()
26 )
27 (input_layernorm): KimiRMSNorm()
28 (post_attention_layernorm): KimiRMSNorm()
29 )
30 (1-2): 2 x KimiDecoderLayer(
31 (self_attn): KimiDeltaAttention(
32 (q_proj): Linear(in_features=8, out_features=256, bias=False)
33 (k_proj): Linear(in_features=8, out_features=256, bias=False)
34 (v_proj): Linear(in_features=8, out_features=256, bias=False)
35 (q_conv1d): ShortConvolution(256, 256, kernel_size=(4,), stride=(1,), padding=(3,), groups=256, bias=False, activation=silu, backend=triton)
36 (k_conv1d): ShortConvolution(256, 256, kernel_size=(4,), stride=(1,), padding=(3,), groups=256, bias=False, activation=silu, backend=triton)
37 (v_conv1d): ShortConvolution(256, 256, kernel_size=(4,), stride=(1,), padding=(3,), groups=256, bias=False, activation=silu, backend=triton)
38 (f_a_proj): Linear(in_features=8, out_features=32, bias=False)
39 (f_b_proj): Linear(in_features=32, out_features=256, bias=False)
40 (b_proj): Linear(in_features=8, out_features=8, bias=False)
41 (g_a_proj): Linear(in_features=8, out_features=32, bias=False)
42 (g_b_proj): Linear(in_features=32, out_features=256, bias=False)
43 (o_norm): FusedRMSNormGated(32, eps=1e-05, activation=sigmoid)
44 (o_proj): Linear(in_features=256, out_features=8, bias=False)
45 )
46 (block_sparse_moe): KimiSparseMoeBlock(
47 (experts): ModuleList(
48 (0-255): 256 x KimiBlockSparseMLP(
49 (w1): Linear(in_features=8, out_features=32, bias=False)
50 (w2): Linear(in_features=32, out_features=8, bias=False)
51 (w3): Linear(in_features=8, out_features=32, bias=False)
52 (act_fn): SiLUActivation()
53 )
54 )
55 (gate): KimiMoEGate()
56 (shared_experts): KimiMLP(
57 (gate_proj): Linear(in_features=8, out_features=32, bias=False)
58 (up_proj): Linear(in_features=8, out_features=32, bias=False)
59 (down_proj): Linear(in_features=32, out_features=8, bias=False)
60 (act_fn): SiLUActivation()
61 )
62 )
63 (input_layernorm): KimiRMSNorm()
64 (post_attention_layernorm): KimiRMSNorm()
65 )
66 (3-4): 2 x KimiDecoderLayer(
67 (self_attn): KimiMLAAttention(
68 (q_proj): Linear(in_features=8, out_features=1536, bias=False)
69 (kv_a_proj_with_mqa): Linear(in_features=8, out_features=576, bias=False)
70 (kv_a_layernorm): KimiRMSNorm()
71 (kv_b_proj): Linear(in_features=512, out_features=2048, bias=False)
72 (o_proj): Linear(in_features=1024, out_features=8, bias=False)
73 )
74 (block_sparse_moe): KimiSparseMoeBlock(
75 (experts): ModuleList(
76 (0-255): 256 x KimiBlockSparseMLP(
77 (w1): Linear(in_features=8, out_features=32, bias=False)
78 (w2): Linear(in_features=32, out_features=8, bias=False)
79 (w3): Linear(in_features=8, out_features=32, bias=False)
80 (act_fn): SiLUActivation()
81 )
82 )
83 (gate): KimiMoEGate()
84 (shared_experts): KimiMLP(
85 (gate_proj): Linear(in_features=8, out_features=32, bias=False)
86 (up_proj): Linear(in_features=8, out_features=32, bias=False)
87 (down_proj): Linear(in_features=32, out_features=8, bias=False)
88 (act_fn): SiLUActivation()
89 )
90 )
91 (input_layernorm): KimiRMSNorm()
92 (post_attention_layernorm): KimiRMSNorm()
93 )
94 )
95 (norm): KimiRMSNorm()
96 )
97 (lm_head): Linear(in_features=8, out_features=163840, bias=False)
98)