import abc
import os
import sys
import re
import json
from types import SimpleNamespace
import logging as logger
from collections import OrderedDict
from tqdm import tqdm
import torch
import torch.nn as nn
from transformers import AutoModelForCausalLM
from megatron.core import mpu
from megatron.training.arguments import validate_args
from megatron.legacy.model import module
from megatron.core.enums import ModelType
from megatron.training.checkpointing import load_args_from_checkpoint
from megatron.training.global_vars import set_args
from megatron.training.checkpointing import load_checkpoint
from megatron.core import tensor_parallel
from modellink.utils import parse_args
from modellink.training import model_provider_func_wrapper
from modellink.checkpointing import load_checkpoint_wrapper
logger.basicConfig(format="")
logger.getLogger().setLevel(logger.INFO)
load_checkpoint = load_checkpoint_wrapper(load_checkpoint)
def tensor_info(tensor):
shape = tensor.shape
mean_val = tensor.mean().item()
min_val = tensor.min().item()
max_val = tensor.max().item()
return f"shape: {shape} mean_val: {mean_val} min_val: {min_val} max_val: {max_val}"
class ModelBase(abc.ABC):
def __init__(self, args_cmd=None):
self.args_cmd = args_cmd
self.args = None
self.args_megatron_checkpoint = None
self.module = None
self.module_mapping = None
self.model_cfg = self.read_model_cfg()
self.__register_functions()
self.kwargs_idx = OrderedDict({
"vp_rank": 0,
"ep_rank": 0,
"tp_rank": 0,
"layer_idx": 0,
"expert_idx": 0
})
def update_kwargs_idx(self, **kwargs):
for key in self.kwargs_idx:
if key in kwargs:
self.kwargs_idx[key] = kwargs[key]
else:
self.kwargs_idx[key] = 0
def __register_functions(self):
self.get_module_mapping()
def _get_obj(self, value, **kwargs):
pattern = r'(\w+)(?:\[(\w+)\])?'
matches = re.findall(pattern, value)
self.update_kwargs_idx(**kwargs)
obj = self.get_model_item(**kwargs)
for attr, attr_ident in matches:
if hasattr(obj, attr):
obj = getattr(obj, attr)
else:
return None
if attr_ident:
if attr_ident in self.kwargs_idx:
attr_idx = self.kwargs_idx[attr_ident]
obj = obj[attr_idx]
else:
raise AssertionError(f"check {self.__class__.__name__}.module_mapping **{attr_ident}**.")
return obj
def _func_generator_get_module(value):
def func(self, **kwargs):
return _get_obj(self, value, **kwargs)
return func
def _func_generator_get_weight(value):
def func(self, **kwargs):
return _get_obj(self, value, **kwargs).weight.data
return func
def _func_generator_get_bias(value):
def func(self, **kwargs):
return _get_obj(self, value, **kwargs).bias.data
return func
def _func_generator_set_weight(value):
def func(self, **kwargs):
return _get_obj(self, value, **kwargs).weight.data.copy_(kwargs.get('data'))
return func
def _func_generator_set_module(value):
def func(self, **kwargs):
return _get_obj(self, value, **kwargs).data.copy_(kwargs.get('data'))
return func
def _func_generator_set_bias(value):
def func(self, **kwargs):
return _get_obj(self, value, **kwargs).bias.data.copy_(kwargs.get('data'))
return func
def _func_generator_has_module(value):
def func(self, **kwargs):
obj = _get_obj(self, value, **kwargs)
return True if obj else False
return func
def _func_generator_has_bias(value):
def func(self, **kwargs):
bias = getattr(_get_obj(self, value, **kwargs), 'bias', None)
return bias is not None
return func
if self.module_mapping:
for key, value in self.module_mapping.items():
setattr(self, "get_" + key + "_module", _func_generator_get_module(value).__get__(self, ModelBase))
setattr(self, "set_" + key + "_module", _func_generator_set_module(value).__get__(self, ModelBase))
setattr(self, "get_" + key + "_weight", _func_generator_get_weight(value).__get__(self, ModelBase))
setattr(self, "get_" + key + "_bias", _func_generator_get_bias(value).__get__(self, ModelBase))
setattr(self, "set_" + key + "_weight", _func_generator_set_weight(value).__get__(self, ModelBase))
setattr(self, "set_" + key + "_bias", _func_generator_set_bias(value).__get__(self, ModelBase))
setattr(self, "has_" + key + "_module", _func_generator_has_module(value).__get__(self, ModelBase))
setattr(self, "has_" + key + "_bias", _func_generator_has_bias(value).__get__(self, ModelBase))
def update_module(self, src_model):
self.set_preprocess_state(src_model)
self.set_postprocess_state(src_model)
for layer_idx in tqdm(range(self.args.num_layers), "set layer states"):
self.set_layer_state(src_model, layer_idx)
def set_preprocess_state(self, src_model):
'''Set embedding params.'''
embeddings_weight = src_model.get_embedding_word_embeddings_weight()
self.set_embedding_word_embeddings_weight(data=embeddings_weight)
if src_model.has_embedding_word_embeddings_norm_module():
embd_norm_weight = src_model.get_embedding_word_embeddings_norm_weight()
embd_norm_bias = src_model.get_embedding_word_embeddings_norm_bias()
self.set_embedding_word_embeddings_norm_weight(data=embd_norm_weight)
self.set_embedding_word_embeddings_norm_bias(data=embd_norm_bias)
def set_postprocess_state(self, src_model):
final_layernorm_weight = src_model.get_final_layernorm_weight()
self.set_final_layernorm_weight(data=final_layernorm_weight)
if self.args.untie_embeddings_and_output_weights:
output_layer_weight = src_model.get_output_layer_weight()
self.set_output_layer_weight(data=output_layer_weight)
if self.has_final_layernorm_bias():
final_layernorm_bias = src_model.get_final_layernorm_bias()
self.set_final_layernorm_bias(data=final_layernorm_bias)
def set_layer_state(self, src_model, layer_idx):
self.set_attn_state(layer_idx, src_model)
self.set_mlp_state(layer_idx, src_model)
input_layernorm_weight = src_model.get_layers_input_layernorm_weight(layer_idx=layer_idx)
self.set_layers_input_layernorm_weight(layer_idx=layer_idx, data=input_layernorm_weight)
if self.args.post_norm:
post_attn_layernorm_weight = src_model.get_layers_self_attention_post_attention_layernorm_weight(
layer_idx=layer_idx)
self.set_layers_self_attention_post_attention_layernorm_weight(layer_idx=layer_idx,
data=post_attn_layernorm_weight)
else:
pre_mlp_layernorm_weight = src_model.get_layers_self_attention_pre_mlp_layernorm_weight(layer_idx=layer_idx)
self.set_layers_self_attention_pre_mlp_layernorm_weight(layer_idx=layer_idx, data=pre_mlp_layernorm_weight)
if self.has_layers_input_layernorm_bias(layer_idx=layer_idx):
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目为基于昇腾硬件的AI大模型仓库设计源码,由374个文件构成,其中包括150个Python源文件、125个Shell脚本、39个PNG图片文件、38个Markdown文件、16个JSON文件、1个Git忽略文件、1个LICENSE文件、1个OWNERS文件、以及模组链接和数据目录下的相关Makefile。此项目广泛应用于AI大模型管理领域,为用户提供了便捷的模型存储和管理解决方案。
资源推荐
资源详情
资源评论
收起资源包目录
基于昇腾硬件的AI大模型仓库Python设计源码 (651个子文件)
.gitignore 2KB
mmlu_5shot_template.json 124KB
ceval_5shot_template.json 77KB
AGI_fewshot.json 42KB
bbh_template.json 24KB
model_cfg.json 16KB
test_evaluate.json 13KB
test_checkpoint.json 5KB
test_inference.json 5KB
test_rotary_pos_embedding.json 5KB
param_config.json 4KB
param_config.json 4KB
test_preprocess_data.json 4KB
param_config.json 3KB
param_config.json 3KB
param_config.json 3KB
test_process_instruction_data_lf.json 2KB
baichuan2_13B_tp8_pp1_ptd.json 2KB
gemma_7B_legacy_tp8_pp1_ptd.json 2KB
bloom_7B_legacy_tp8_pp1_ptd.json 2KB
qwen15_7b_legacy_tp8_pp1_ptd.json 2KB
llama2_tp2_pp4_vpp2_ptd.json 2KB
llama2_tp2_cp4_mem_recompute.json 2KB
tune_qwen7b_tp8_pp1_full_ptd.json 2KB
gpt4_mcore_tp4_cp2_32k_moe_drop.json 2KB
mixtral_mcore_tp4_cp2_ep2_ptd.json 2KB
tune_llama2_tp2_pp4_vpp2_mcore_full.json 2KB
tune_llama2_tp2_pp4_lora_ptd.json 2KB
gemma2_tp8_pp1_ptd.json 2KB
llama2_tp2_pp4_vpp2_legacy.json 2KB
mixtral_tp1_pp4_ep2_drop_dpp.json 1KB
llama2_tp2_pp1_ha_save_ptd.json 1KB
chatglm3_tp1_pp2_legacy.json 1KB
chatglm3_tp1_pp2_rope.json 829B
gsm8k_3shot_template.json 804B
tune_llama2_tp1_pp1_lora_ptd.json 728B
deepseek_v2_mcore_tp1_pp1_ep8.json 714B
LICENSE 14KB
Makefile 282B
SECURITYNOTE.md 7KB
OWNERS 309B
tune_qwen_7b_ModelLink_DeepSpeed_compare.png 201KB
tune_llama2_7b_ModelLink_DeepSpeed_compare.png 182KB
linearity&mfu.png 111KB
logo.png 24KB
models.py 58KB
arguments.py 44KB
transformer.py 43KB
saver_megatron.py 39KB
data_handler.py 31KB
training.py 28KB
saver.py 26KB
megatron_patch.py 26KB
templates.py 24KB
module.py 22KB
utils.py 21KB
dpo.py 20KB
loader_mg.py 18KB
utils.py 17KB
test_convert_ckpt_from_huggingface.py 17KB
loader_megatron.py 17KB
loader_llama2_hf.py 17KB
generation.py 17KB
loader_hf.py 17KB
utils.py 16KB
dot_product_attention.py 16KB
preprocess_data.py 14KB
base.py 13KB
router.py 13KB
token_dispatcher.py 13KB
dist_test.py 13KB
evaluation.py 12KB
parallel_state.py 12KB
cc_lora_forward.py 12KB
moe_utils.py 11KB
transformer_block.py 11KB
infer_base.py 10KB
multi_head_latent_attention.py 10KB
decoder_packed_mtf_dataset.py 10KB
pretrain_gpt.py 10KB
__init__.py 10KB
gpt_dataset.py 9KB
test_attention.py 8KB
transformer_layer.py 8KB
mmlu_eval.py 8KB
test_evaluate.py 7KB
rotary_pos_embedding.py 7KB
test_hybrid_context_parallel.py 7KB
communication.py 7KB
formatter.py 7KB
agi_eval.py 7KB
mlp.py 6KB
ceval_exam.py 6KB
test_preprocess_data.py 6KB
tokenizer.py 6KB
mc2_linears_seq_parallel.py 6KB
human_eval.py 6KB
forward_step.py 6KB
distributed_data_parallel.py 6KB
alibi.py 6KB
共 651 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
沐知全栈开发
- 粉丝: 5817
- 资源: 5227
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 劳动合同顺延登记表.doc
- 劳动合同顺延通知书.doc
- 劳动合同签收备案表.doc
- 劳动合同签收单.xls
- 劳动合同签订意向调查表.doc
- 劳动争议调解协议书.doc
- 劳动争议调解申请书.doc
- MATLAB代码:基于分时电价条件下家庭能量管理策略研究 关键词:家庭能量管理模型 分时电价 空调 电动汽车 可平移负荷 仿真平台:MATLAB+CPLEX 平台 主要内容:代码主要做的是家庭能量管理
- websocket配置,发送数据存到数据库
- portainer-ce 2.21
- 从xtuoj看回文串算法及实际应用解读
- 基于自抗扰算法的四旋翼无人机姿态控制 本程序基于MATLAB中Simulink仿真和.m函数文件 附有相关参考资料,方便加深对自抗扰算法的理解 另有无人机的轨迹控制,编队飞行相关资料,可一并打包
- 学生选课管理系统python+tkinter+MySQL(98分期末大作业项目)
- 双击自动导入MQTT指令
- 力扣第131题:分割回文串
- YOLO人脸口罩佩戴目标检测数据集1类别(10000图片)+yolo、voc、coco三种标签+环境搭建+参考教程+划分脚本.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功