Add reaserch sile resault.
This commit is contained in:
parent
9d5d590b09
commit
6366b52fef
|
@ -0,0 +1,123 @@
|
|||
import torch
|
||||
import sys
|
||||
import math
|
||||
from modelscope import snapshot_download
|
||||
from transformers import AutoTokenizer
|
||||
from transformers import AutoConfig
|
||||
|
||||
from modeling_qwen import QWenLMHeadModel
|
||||
from modeling_qwen import QwenRunner
|
||||
import numpy as np
|
||||
|
||||
import torch.nn.functional as F
|
||||
|
||||
from qwen_generation_utils import (
|
||||
make_context,
|
||||
decode_tokens,
|
||||
)
|
||||
|
||||
sys.path.append("..")
|
||||
from tools import show
|
||||
|
||||
seed = 4321
|
||||
torch.manual_seed(seed)
|
||||
torch.cuda.manual_seed_all(seed)
|
||||
|
||||
model_dir = snapshot_download("qwen/Qwen-1_8B-Chat")
|
||||
# model_dir = "/home/colin/.cache/modelscope/hub/qwen/Qwen-1_8B-Chat"
|
||||
|
||||
config, kwargs = AutoConfig.from_pretrained(
|
||||
"./",
|
||||
return_unused_kwargs=True,
|
||||
trust_remote_code=True,
|
||||
code_revision=None,
|
||||
_commit_hash=None,
|
||||
)
|
||||
model = QWenLMHeadModel(config)
|
||||
|
||||
print(model)
|
||||
|
||||
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
|
||||
|
||||
model = model.from_pretrained(model_dir)
|
||||
if torch.cuda.device_count() > 0:
|
||||
model = model.cuda()
|
||||
model = model.eval()
|
||||
|
||||
index = 0
|
||||
|
||||
|
||||
class ResearchRunner(QwenRunner):
|
||||
def __init__(self, model):
|
||||
super().__init__(model)
|
||||
|
||||
def prepareInput(self, tokenizer, query, query_assistant, history, system):
|
||||
start_to = [151644]
|
||||
n_to = [198]
|
||||
end_to = [151645]
|
||||
system_str = "system\nYou are a helpful assistant."
|
||||
user_str = "user\n" + query
|
||||
aassistant_str = "assistant\n" + query_assistant
|
||||
|
||||
system_token = start_to + tokenizer.encode(system_str, allowed_special=set()) + end_to + n_to
|
||||
user_token = start_to + tokenizer.encode(user_str, allowed_special=set()) + end_to + n_to
|
||||
aassistant_token = start_to + tokenizer.encode(aassistant_str, allowed_special=set())
|
||||
|
||||
tokens = system_token + user_token + aassistant_token
|
||||
tokens = user_token + aassistant_token
|
||||
tokens = start_to + tokenizer.encode("user\nHi你好\nassistant\n我是", allowed_special=set())
|
||||
|
||||
return "", tokens
|
||||
|
||||
def forwardQWenBlock(
|
||||
self,
|
||||
block,
|
||||
hidden_states,
|
||||
rotary_pos_emb_list=None,
|
||||
):
|
||||
layernorm_output = block.ln_1(hidden_states)
|
||||
|
||||
attn_outputs = self.forwardAttention(block.attn, layernorm_output, rotary_pos_emb_list)
|
||||
attn_output = attn_outputs[0]
|
||||
layernorm_input = attn_output + hidden_states
|
||||
|
||||
layernorm_output = block.ln_2(layernorm_input)
|
||||
a1 = block.mlp.w1(layernorm_output)
|
||||
a2 = block.mlp.w2(layernorm_output)
|
||||
|
||||
activation = (F.relu(a2) > 0).to(float)
|
||||
act_mean = torch.mean(activation, 2)
|
||||
print("Layer:" + str(block.index))
|
||||
print(act_mean.cpu())
|
||||
global index
|
||||
if index == 0:
|
||||
activation = activation.reshape(activation.shape[1], 64, -1)
|
||||
show.DumpTensorToImage(activation, "./temp/activation_layer_" + str(block.index) + ".png")
|
||||
|
||||
intermediate_parallel = a1 * F.silu(a2)
|
||||
mlp_output = block.mlp.c_proj(intermediate_parallel)
|
||||
|
||||
hidden_states = layernorm_input + mlp_output
|
||||
return hidden_states
|
||||
|
||||
def isFinish(self, next_tokens):
|
||||
global index
|
||||
index = index + 1
|
||||
finish, next = super().isFinish(next_tokens)
|
||||
return finish, next
|
||||
|
||||
|
||||
para = list(model.parameters())
|
||||
runner = ResearchRunner(model)
|
||||
|
||||
output_ids, history, decoded = runner.Chat(tokenizer, "你好!!", "")
|
||||
print(decoded)
|
||||
|
||||
|
||||
tokens = []
|
||||
for i, token in enumerate(output_ids):
|
||||
de = tokenizer.decode([token])
|
||||
de = str(i + 1).zfill(3) + " : " + repr(de)
|
||||
tokens.append(de)
|
||||
|
||||
show.DumpListToFile(tokens, "./temp/token_decode_list.txt")
|
Loading…
Reference in New Issue