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