做百科专用参考链接的网站,wordpress 美拍插件,it外包兼职,旅游网站建设的功能定位系列篇章#x1f4a5;
AI大模型探索之路-训练篇1#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4#xff1a;大语言模型训练数据集概…系列篇章
AI大模型探索之路-训练篇1大语言模型微调基础认知 AI大模型探索之路-训练篇2大语言模型预训练基础认知 AI大模型探索之路-训练篇3大语言模型全景解读 AI大模型探索之路-训练篇4大语言模型训练数据集概览 AI大模型探索之路-训练篇5大语言模型预训练数据准备-词元化 AI大模型探索之路-训练篇6大语言模型预训练数据准备-预处理 AI大模型探索之路-训练篇7大语言模型Transformer库之HuggingFace介绍 AI大模型探索之路-训练篇8大语言模型Transformer库-预训练流程编码体验 AI大模型探索之路-训练篇9大语言模型Transformer库-Pipeline组件实践 AI大模型探索之路-训练篇10大语言模型Transformer库-Tokenizer组件实践 AI大模型探索之路-训练篇11大语言模型Transformer库-Model组件实践 AI大模型探索之路-训练篇12语言模型Transformer库-Datasets组件实践 AI大模型探索之路-训练篇13大语言模型Transformer库-Evaluate组件实践 AI大模型探索之路-训练篇14大语言模型Transformer库-Trainer组件实践 AI大模型探索之路-训练篇15大语言模型预训练之全量参数微调 目录 系列篇章前言一、微调技术分类二、LoRA原理三、在哪儿增加旁路四、为什么微调少量参数就可以五、如何对A和B进行初始化六、增加旁路会增加推理时间吗七、R值为多少合适八、如何注入LoRA九、LoRA代码实践学术资源加速步骤1 导入相关包步骤2 加载数据集步骤3 数据集预处理步骤4 创建模型1、PEFT 步骤1 配置文件2、PEFT 步骤2 创建模型 步骤5 配置训练参数步骤6 创建训练器步骤7 模型训练步骤8 模型推理 十、主路合并旁路1、加载基础模型2、加载LoRA模型3、模型推理4、模型合并5、模型推理6、完整模型保存 总结 前言
在自然语言处理领域大语言模型的预训练-微调技术已经成为一种常见的方法。其中LoRALow-Rank Adaptation是一种新颖的微调技术通过引入低秩矩阵来调整模型的行为以提高模型在新任务上的表现。本文将对LoRA的原理、优势以及应用进行详细介绍。
一、微调技术分类
微调技术主要分为以下几类 1增加额外参数A这种方法是在原有的预训练模型的基础上增加一些额外的参数以改变模型的行为。 2选取一部分参数更新S这种方法是在微调过程中只更新模型的一部分参数而不是所有参数。这可以减少计算量提高微调效率。 3引入重参数化R这种方法是在模型的参数空间中引入一些新的变化通常是一些线性变换或非线性变换以改变模型的行为。这种方法可以使模型在新任务上有更好的表现。 常见的参数高效微调技术有Prefix Tuning、Prompt Tuning、P-Tuning、Adapter Tuning、LoRA等 二、LoRA原理
LoRALow-Rank Adaptation:低秩的适配器是一种新颖的微调技术它通过引入低秩矩阵来调整模型的行为以提高模型在新任务上的表现。具体来说LoRA在原有的预训练模型中增加了两个旁路矩阵A和B这两个矩阵的维度远小于原始模型的输入输出维度从而实现了参数的高效微调。
三、在哪儿增加旁路
在原有的预训练模型中可以选择在任意两个相邻层之间增加旁路矩阵A和B。这样模型在前向传播过程中可以通过这两个旁路矩阵来引入新的信息从而改变模型的行为。
四、为什么微调少量参数就可以 A的输入维度和B的输出维度分别与原始模型的输入输出维度相同而A的输出维度和B的输入维度是一个远小于原始模型输入输出维度的值这就是low-rank的体现可以极大地减少待训练的参数
秩表示的是矩阵的信息量这里的“秩”特指引入的旁路矩阵的规模即它们的行数和列数。
在LoRA技术中我们通过引入低秩矩阵来调整预训练模型的行为同时保留大部分原有的参数不变。这样做可以在不牺牲太多性能的前提下显著降低模型微调时的计算成本和内存需求。 通俗化解释“秩”: 想象一下你有一个很大的包裹你需要通过一个小门把它送出去。但是门太小了你必须把包裹拆成几个小包裹才能通过。在这个比喻中大包裹就像模型的权重矩阵小门就像我们新增的低秩矩阵而“秩”就是这些小包裹的数量。在LoRA中我们通过创建一些小的低秩矩阵来传递信息而不是使用原始的大矩阵。这样做的好处是我们可以只关注那些最重要的信息忽略掉不重要的信息从而减少计算量和内存需求。 五、如何对A和B进行初始化
A和B如何初始化 对A采用高斯初始化对B采用零初始化的目的是让训练刚开始时的值为0这样不会给模型带来额外的噪声。 六、增加旁路会增加推理时间吗
虽然增加了旁路矩阵A和B但是由于它们的维度远小于原始模型的输入输出维度因此在推理过程中计算量的增加是非常有限的。
七、R值为多少合适
R值表示的是旁路矩阵A和B的秩。一般来说R值的选择需要根据具体任务和模型结构来确定。在实际应用中可以尝试不同的R值以找到最佳的设置。 八、如何注入LoRA
要将LoRA应用于现有的预训练模型中首先需要在相邻层之间插入旁路矩阵A和B。然后在微调过程中只需要调整这两个旁路矩阵的参数即可。这样就可以实现模型行为的高效调整。
如上图中定义一个简单的3层的神经网络在第1层增加旁路后效果如下
九、LoRA代码实践
PEFT文档资料地址 1文档地址https://huggingface.co/docs/peft/index 2Github地址https://github.com/huggingface/peft PEFTParameter-Efficient Fine-Tuning库是一个用于参数高效微调预训练语言模型的库旨在降低大规模模型微调的计算和存储成本。 PEFT库的核心优势在于它能够仅通过微调少量额外模型参数来适应各种下游任务避免了对整个大模型参数进行微调的需求。这种方法不仅降低了资源消耗而且在很多情况下能达到与完全微调相当的性能
PEFT技术的支持
学术资源加速
方便从huggingface下载模型这云平台autodl提供的仅适用于autodl。
import subprocess
import osresult subprocess.run(bash -c source /etc/network_turbo env | grep proxy, shellTrue, capture_outputTrue, textTrue)
output result.stdout
for line in output.splitlines():if in line:var, value line.split(, 1)os.environ[var] value步骤1 导入相关包
开始之前我们需要导入适用于模型训练和推理的必要库如transformers。
from datasets import Dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer步骤2 加载数据集
使用适当的数据加载器例如datasets库来加载预处理过的指令遵循性任务数据集。
ds Dataset.load_from_disk(/root/tuning/lesson01/data/alpaca_data_zh/)
ds输出
Dataset({features: [output, input, instruction],num_rows: 26858
})数据查看
ds[:1]输出
{output: [以下是保持健康的三个提示\n\n1. 保持身体活动。每天做适当的身体运动如散步、跑步或游泳能促进心血管健康增强肌肉力量并有助于减少体重。\n\n2. 均衡饮食。每天食用新鲜的蔬菜、水果、全谷物和脂肪含量低的蛋白质食物避免高糖、高脂肪和加工食品以保持健康的饮食习惯。\n\n3. 睡眠充足。睡眠对人体健康至关重要成年人每天应保证 7-8 小时的睡眠。良好的睡眠有助于减轻压力促进身体恢复并提高注意力和记忆力。],input: [],instruction: [保持健康的三个提示。]}步骤3 数据集预处理
利用预训练模型的分词器Tokenizer对原始文本进行编码并生成相应的输入ID、注意力掩码和标签。 1获取分词器
tokenizer AutoTokenizer.from_pretrained(Langboat/bloom-1b4-zh)
tokenizer输出
BloomTokenizerFast(name_or_pathLangboat/bloom-1b4-zh, vocab_size46145, model_max_length1000000000000000019884624838656, is_fastTrue, padding_sideleft, truncation_sideright, special_tokens{bos_token: s, eos_token: /s, unk_token: unk, pad_token: pad}, clean_up_tokenization_spacesFalse), added_tokens_decoder{0: AddedToken(unk, rstripFalse, lstripFalse, single_wordFalse, normalizedFalse, specialTrue),1: AddedToken(s, rstripFalse, lstripFalse, single_wordFalse, normalizedFalse, specialTrue),2: AddedToken(/s, rstripFalse, lstripFalse, single_wordFalse, normalizedFalse, specialTrue),3: AddedToken(pad, rstripFalse, lstripFalse, single_wordFalse, normalizedFalse, specialTrue),
}2定义数据处理函数
def process_func(example):# 设置最大长度为256MAX_LENGTH 256# 初始化输入ID、注意力掩码和标签列表input_ids, attention_mask, labels [], [], []# 对指令和输入进行编码instruction tokenizer(\n.join([Human: example[instruction], example[input]]).strip() \n\nAssistant: )# 对输出进行编码并添加结束符response tokenizer(example[output] tokenizer.eos_token)# 将指令和响应的输入ID拼接起来input_ids instruction[input_ids] response[input_ids]# 将指令和响应的注意力掩码拼接起来attention_mask instruction[attention_mask] response[attention_mask]# 将指令的标签设置为-100表示不计算损失将响应的输入ID作为标签labels [-100] * len(instruction[input_ids]) response[input_ids]# 如果输入ID的长度超过最大长度截断输入ID、注意力掩码和标签if len(input_ids) MAX_LENGTH:input_ids input_ids[:MAX_LENGTH]attention_mask attention_mask[:MAX_LENGTH]labels labels[:MAX_LENGTH]# 返回处理后的数据return {input_ids: input_ids,attention_mask: attention_mask,labels: labels}3对数据进行预处理
tokenized_ds ds.map(process_func, remove_columnsds.column_names)
tokenized_ds输出
Dataset({features: [input_ids, attention_mask, labels],num_rows: 26858
})步骤4 创建模型
然后我们实例化一个预训练模型这个模型将作为微调的基础。对于大型模型我们可能还需要进行一些特定的配置以适应可用的计算资源。
#这行代码从Hugging Face Model Hub加载了一个预训练的Bloom模型模型名称为Langboat/bloom-1b4-zh并且设置了low_cpu_mem_usageTrue以减少CPU内存使用。
model AutoModelForCausalLM.from_pretrained(Langboat/bloom-1b4-zh, low_cpu_mem_usageTrue)查看总共有哪些层可以基于这些层添加LoRA
for name, parameter in model.named_parameters():print(name)输出
base_model.model.transformer.word_embeddings.weight
base_model.model.transformer.word_embeddings_layernorm.weight
base_model.model.transformer.word_embeddings_layernorm.bias
base_model.model.transformer.h.0.input_layernorm.weight
base_model.model.transformer.h.0.input_layernorm.bias
base_model.model.transformer.h.0.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.0.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.0.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.0.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.0.self_attention.dense.weight
base_model.model.transformer.h.0.self_attention.dense.bias
base_model.model.transformer.h.0.post_attention_layernorm.weight
base_model.model.transformer.h.0.post_attention_layernorm.bias
base_model.model.transformer.h.0.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.0.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.0.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.0.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.1.input_layernorm.weight
base_model.model.transformer.h.1.input_layernorm.bias
base_model.model.transformer.h.1.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.1.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.1.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.1.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.1.self_attention.dense.weight
base_model.model.transformer.h.1.self_attention.dense.bias
base_model.model.transformer.h.1.post_attention_layernorm.weight
base_model.model.transformer.h.1.post_attention_layernorm.bias
base_model.model.transformer.h.1.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.1.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.1.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.1.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.2.input_layernorm.weight
base_model.model.transformer.h.2.input_layernorm.bias
base_model.model.transformer.h.2.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.2.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.2.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.2.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.2.self_attention.dense.weight
base_model.model.transformer.h.2.self_attention.dense.bias
base_model.model.transformer.h.2.post_attention_layernorm.weight
base_model.model.transformer.h.2.post_attention_layernorm.bias
base_model.model.transformer.h.2.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.2.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.2.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.2.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.3.input_layernorm.weight
base_model.model.transformer.h.3.input_layernorm.bias
base_model.model.transformer.h.3.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.3.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.3.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.3.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.3.self_attention.dense.weight
base_model.model.transformer.h.3.self_attention.dense.bias
base_model.model.transformer.h.3.post_attention_layernorm.weight
base_model.model.transformer.h.3.post_attention_layernorm.bias
base_model.model.transformer.h.3.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.3.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.3.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.3.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.4.input_layernorm.weight
base_model.model.transformer.h.4.input_layernorm.bias
base_model.model.transformer.h.4.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.4.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.4.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.4.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.4.self_attention.dense.weight
base_model.model.transformer.h.4.self_attention.dense.bias
base_model.model.transformer.h.4.post_attention_layernorm.weight
base_model.model.transformer.h.4.post_attention_layernorm.bias
base_model.model.transformer.h.4.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.4.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.4.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.4.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.5.input_layernorm.weight
base_model.model.transformer.h.5.input_layernorm.bias
base_model.model.transformer.h.5.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.5.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.5.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.5.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.5.self_attention.dense.weight
base_model.model.transformer.h.5.self_attention.dense.bias
base_model.model.transformer.h.5.post_attention_layernorm.weight
base_model.model.transformer.h.5.post_attention_layernorm.bias
base_model.model.transformer.h.5.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.5.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.5.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.5.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.6.input_layernorm.weight
base_model.model.transformer.h.6.input_layernorm.bias
base_model.model.transformer.h.6.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.6.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.6.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.6.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.6.self_attention.dense.weight
base_model.model.transformer.h.6.self_attention.dense.bias
base_model.model.transformer.h.6.post_attention_layernorm.weight
base_model.model.transformer.h.6.post_attention_layernorm.bias
base_model.model.transformer.h.6.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.6.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.6.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.6.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.7.input_layernorm.weight
base_model.model.transformer.h.7.input_layernorm.bias
base_model.model.transformer.h.7.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.7.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.7.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.7.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.7.self_attention.dense.weight
base_model.model.transformer.h.7.self_attention.dense.bias
base_model.model.transformer.h.7.post_attention_layernorm.weight
base_model.model.transformer.h.7.post_attention_layernorm.bias
base_model.model.transformer.h.7.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.7.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.7.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.7.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.8.input_layernorm.weight
base_model.model.transformer.h.8.input_layernorm.bias
base_model.model.transformer.h.8.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.8.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.8.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.8.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.8.self_attention.dense.weight
base_model.model.transformer.h.8.self_attention.dense.bias
base_model.model.transformer.h.8.post_attention_layernorm.weight
base_model.model.transformer.h.8.post_attention_layernorm.bias
base_model.model.transformer.h.8.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.8.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.8.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.8.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.9.input_layernorm.weight
base_model.model.transformer.h.9.input_layernorm.bias
base_model.model.transformer.h.9.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.9.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.9.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.9.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.9.self_attention.dense.weight
base_model.model.transformer.h.9.self_attention.dense.bias
base_model.model.transformer.h.9.post_attention_layernorm.weight
base_model.model.transformer.h.9.post_attention_layernorm.bias
base_model.model.transformer.h.9.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.9.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.9.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.9.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.10.input_layernorm.weight
base_model.model.transformer.h.10.input_layernorm.bias
base_model.model.transformer.h.10.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.10.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.10.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.10.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.10.self_attention.dense.weight
base_model.model.transformer.h.10.self_attention.dense.bias
base_model.model.transformer.h.10.post_attention_layernorm.weight
base_model.model.transformer.h.10.post_attention_layernorm.bias
base_model.model.transformer.h.10.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.10.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.10.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.10.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.11.input_layernorm.weight
base_model.model.transformer.h.11.input_layernorm.bias
base_model.model.transformer.h.11.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.11.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.11.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.11.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.11.self_attention.dense.weight
base_model.model.transformer.h.11.self_attention.dense.bias
base_model.model.transformer.h.11.post_attention_layernorm.weight
base_model.model.transformer.h.11.post_attention_layernorm.bias
base_model.model.transformer.h.11.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.11.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.11.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.11.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.12.input_layernorm.weight
base_model.model.transformer.h.12.input_layernorm.bias
base_model.model.transformer.h.12.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.12.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.12.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.12.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.12.self_attention.dense.weight
base_model.model.transformer.h.12.self_attention.dense.bias
base_model.model.transformer.h.12.post_attention_layernorm.weight
base_model.model.transformer.h.12.post_attention_layernorm.bias
base_model.model.transformer.h.12.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.12.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.12.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.12.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.13.input_layernorm.weight
base_model.model.transformer.h.13.input_layernorm.bias
base_model.model.transformer.h.13.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.13.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.13.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.13.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.13.self_attention.dense.weight
base_model.model.transformer.h.13.self_attention.dense.bias
base_model.model.transformer.h.13.post_attention_layernorm.weight
base_model.model.transformer.h.13.post_attention_layernorm.bias
base_model.model.transformer.h.13.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.13.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.13.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.13.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.14.input_layernorm.weight
base_model.model.transformer.h.14.input_layernorm.bias
base_model.model.transformer.h.14.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.14.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.14.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.14.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.14.self_attention.dense.weight
base_model.model.transformer.h.14.self_attention.dense.bias
base_model.model.transformer.h.14.post_attention_layernorm.weight
base_model.model.transformer.h.14.post_attention_layernorm.bias
base_model.model.transformer.h.14.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.14.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.14.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.14.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.15.input_layernorm.weight
base_model.model.transformer.h.15.input_layernorm.bias
base_model.model.transformer.h.15.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.15.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.15.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.15.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.15.self_attention.dense.weight
base_model.model.transformer.h.15.self_attention.dense.bias
base_model.model.transformer.h.15.post_attention_layernorm.weight
base_model.model.transformer.h.15.post_attention_layernorm.bias
base_model.model.transformer.h.15.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.15.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.15.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.15.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.16.input_layernorm.weight
base_model.model.transformer.h.16.input_layernorm.bias
base_model.model.transformer.h.16.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.16.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.16.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.16.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.16.self_attention.dense.weight
base_model.model.transformer.h.16.self_attention.dense.bias
base_model.model.transformer.h.16.post_attention_layernorm.weight
base_model.model.transformer.h.16.post_attention_layernorm.bias
base_model.model.transformer.h.16.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.16.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.16.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.16.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.17.input_layernorm.weight
base_model.model.transformer.h.17.input_layernorm.bias
base_model.model.transformer.h.17.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.17.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.17.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.17.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.17.self_attention.dense.weight
base_model.model.transformer.h.17.self_attention.dense.bias
base_model.model.transformer.h.17.post_attention_layernorm.weight
base_model.model.transformer.h.17.post_attention_layernorm.bias
base_model.model.transformer.h.17.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.17.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.17.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.17.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.18.input_layernorm.weight
base_model.model.transformer.h.18.input_layernorm.bias
base_model.model.transformer.h.18.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.18.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.18.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.18.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.18.self_attention.dense.weight
base_model.model.transformer.h.18.self_attention.dense.bias
base_model.model.transformer.h.18.post_attention_layernorm.weight
base_model.model.transformer.h.18.post_attention_layernorm.bias
base_model.model.transformer.h.18.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.18.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.18.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.18.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.19.input_layernorm.weight
base_model.model.transformer.h.19.input_layernorm.bias
base_model.model.transformer.h.19.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.19.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.19.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.19.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.19.self_attention.dense.weight
base_model.model.transformer.h.19.self_attention.dense.bias
base_model.model.transformer.h.19.post_attention_layernorm.weight
base_model.model.transformer.h.19.post_attention_layernorm.bias
base_model.model.transformer.h.19.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.19.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.19.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.19.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.20.input_layernorm.weight
base_model.model.transformer.h.20.input_layernorm.bias
base_model.model.transformer.h.20.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.20.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.20.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.20.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.20.self_attention.dense.weight
base_model.model.transformer.h.20.self_attention.dense.bias
base_model.model.transformer.h.20.post_attention_layernorm.weight
base_model.model.transformer.h.20.post_attention_layernorm.bias
base_model.model.transformer.h.20.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.20.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.20.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.20.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.21.input_layernorm.weight
base_model.model.transformer.h.21.input_layernorm.bias
base_model.model.transformer.h.21.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.21.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.21.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.21.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.21.self_attention.dense.weight
base_model.model.transformer.h.21.self_attention.dense.bias
base_model.model.transformer.h.21.post_attention_layernorm.weight
base_model.model.transformer.h.21.post_attention_layernorm.bias
base_model.model.transformer.h.21.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.21.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.21.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.21.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.22.input_layernorm.weight
base_model.model.transformer.h.22.input_layernorm.bias
base_model.model.transformer.h.22.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.22.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.22.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.22.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.22.self_attention.dense.weight
base_model.model.transformer.h.22.self_attention.dense.bias
base_model.model.transformer.h.22.post_attention_layernorm.weight
base_model.model.transformer.h.22.post_attention_layernorm.bias
base_model.model.transformer.h.22.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.22.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.22.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.22.mlp.dense_4h_to_h.bias
base_model.model.transformer.h.23.input_layernorm.weight
base_model.model.transformer.h.23.input_layernorm.bias
base_model.model.transformer.h.23.self_attention.query_key_value.base_layer.weight
base_model.model.transformer.h.23.self_attention.query_key_value.base_layer.bias
base_model.model.transformer.h.23.self_attention.query_key_value.lora_A.default.weight
base_model.model.transformer.h.23.self_attention.query_key_value.lora_B.default.weight
base_model.model.transformer.h.23.self_attention.dense.weight
base_model.model.transformer.h.23.self_attention.dense.bias
base_model.model.transformer.h.23.post_attention_layernorm.weight
base_model.model.transformer.h.23.post_attention_layernorm.bias
base_model.model.transformer.h.23.mlp.dense_h_to_4h.weight
base_model.model.transformer.h.23.mlp.dense_h_to_4h.bias
base_model.model.transformer.h.23.mlp.dense_4h_to_h.weight
base_model.model.transformer.h.23.mlp.dense_4h_to_h.bias
base_model.model.transformer.ln_f.weight
base_model.model.transformer.ln_f.biasLoRA相关的配置下面2个部分是LoRA相关的配置其他的和全量微调代码一样。
1、PEFT 步骤1 配置文件
在使用PEFT进行微调时我们首先需要创建一个配置文件该文件定义了微调过程中的各种设置如学习率调度、优化器选择等。
from peft import LoraConfig, TaskType, get_peft_model
config LoraConfig(task_typeTaskType.CAUSAL_LM)
##也可以不使用默认的自己指定 目标层 target_modules[query_key_value],秩 r8
#config LoraConfig(task_typeTaskType.CAUSAL_LM,r8, target_modules[query_key_value,dense_4h_to_h])
config2、PEFT 步骤2 创建模型
接下来我们使用PEFT和预训练模型来创建一个微调模型。这个模型将包含原始的预训练模型以及由PEFT引入的低秩参数。
model get_peft_model(model, config)
model输出
PeftModelForCausalLM((base_model): LoraModel((model): PeftModelForCausalLM((base_model): LoraModel((model): BloomForCausalLM((transformer): BloomModel((word_embeddings): Embedding(46145, 2048)(word_embeddings_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(h): ModuleList((0-23): 24 x BloomBlock((input_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(self_attention): BloomAttention((query_key_value): lora.Linear((base_layer): Linear(in_features2048, out_features6144, biasTrue)(lora_dropout): ModuleDict((default): Identity())(lora_A): ModuleDict((default): Linear(in_features2048, out_features8, biasFalse))(lora_B): ModuleDict((default): Linear(in_features8, out_features6144, biasFalse))(lora_embedding_A): ParameterDict()(lora_embedding_B): ParameterDict())(dense): Linear(in_features2048, out_features2048, biasTrue)(attention_dropout): Dropout(p0.0, inplaceFalse))(post_attention_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(mlp): BloomMLP((dense_h_to_4h): Linear(in_features2048, out_features8192, biasTrue)(gelu_impl): BloomGelu()(dense_4h_to_h): lora.Linear((base_layer): Linear(in_features8192, out_features2048, biasTrue)(lora_dropout): ModuleDict((default): Identity())(lora_A): ModuleDict((default): Linear(in_features8192, out_features8, biasFalse))(lora_B): ModuleDict((default): Linear(in_features8, out_features2048, biasFalse))(lora_embedding_A): ParameterDict()(lora_embedding_B): ParameterDict()))))(ln_f): LayerNorm((2048,), eps1e-05, elementwise_affineTrue))(lm_head): Linear(in_features2048, out_features46145, biasFalse)))))
)查看配置
config输出
LoraConfig(peft_typePeftType.LORA: LORA, auto_mappingNone, base_model_name_or_pathNone, revisionNone, task_typeTaskType.CAUSAL_LM: CAUSAL_LM, inference_modeFalse, r8, target_modules{query_key_value, dense_4h_to_h}, lora_alpha8, lora_dropout0.0, fan_in_fan_outFalse, biasnone, modules_to_saveNone, init_lora_weightsTrue, layers_to_transformNone, layers_patternNone, rank_pattern{}, alpha_pattern{}, megatron_configNone, megatron_coremegatron.core, loftq_config{})步骤5 配置训练参数
定义训练参数包括输出目录、学习率、批次大小、梯度累积步数、优化器选择等。
args TrainingArguments(output_dir/root/autodl-tmp/tuningdata/lora,# 指定模型训练结果的输出目录。per_device_train_batch_size4, # 指定每个设备如GPU上的批次大小gradient_accumulation_steps8,# 指定梯度累积步数。在本例子中每8个步骤进行一次梯度更新。logging_steps20, #指定日志记录的频率。在本例子中每20个步骤记录一次日志num_train_epochs4 #指定训练的总轮数
)
步骤6 创建训练器
最后我们创建一个训练器实例它封装了训练循环。训练器将负责运行训练过程并根据我们之前定义的参数进行优化。
trainer Trainer(modelmodel,#指定训练模型argsargs, #指定训练参数train_datasettokenized_ds, #指定数据集data_collatorDataCollatorForSeq2Seq(tokenizertokenizer, paddingTrue) #指定数据收集器。其中tokenizer是分词器paddingTrue表示对输入进行填充以保持批次大小一致。
)步骤7 模型训练
通过调用训练器的train()方法我们启动模型的训练过程。
trainer.train()步骤8 模型推理
训练完成后我们可以使用训练好的模型进行推理。这通常涉及到使用模型的inference方法输入经过适当处理的问题并得到模型的输出。
from transformers import pipelinepipe pipeline(text-generation, modelmodel, tokenizertokenizer, device0)ipt Human: {}\n{}.format(如何写好一个简历, ).strip() \n\nAssistant:
pipe(ipt, max_length256, do_sampleTrue, )输出
[{generated_text: Human: 如何写好一个简历\n\nAssistant: 一篇好的简历应包含以下内容个人信息姓名出生日期出生地教育经历工作经历、求职理由、个人能力如语言能力英语水平操作技能编程能力市场营销能力分析归纳能力等、学习经历、实践经历和经验、荣誉奖项、相关证书和荣誉、个人兴趣爱好以及在工作中遇到的瓶颈和障碍。\n\n在书写时应注意文字简洁、条理清晰突出重点语言流畅。您也可以在简历中附上一些相关的个人照片或照片资料以供他人参考。如果您有任何疑问请随时与我联系。}]十、主路合并旁路
1、加载基础模型
from transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModelmodel AutoModelForCausalLM.from_pretrained(Langboat/bloom-1b4-zh, low_cpu_mem_usageTrue)
tokenizer AutoTokenizer.from_pretrained(Langboat/bloom-1b4-zh)2、加载LoRA模型
p_model PeftModel.from_pretrained(model, model_id/root/autodl-tmp/tuningdata/lora/checkpoint-500)
p_model输出
PeftModelForCausalLM((base_model): LoraModel((model): BloomForCausalLM((transformer): BloomModel((word_embeddings): Embedding(46145, 2048)(word_embeddings_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(h): ModuleList((0-23): 24 x BloomBlock((input_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(self_attention): BloomAttention((query_key_value): lora.Linear((base_layer): Linear(in_features2048, out_features6144, biasTrue)(lora_dropout): ModuleDict((default): Identity())(lora_A): ModuleDict((default): Linear(in_features2048, out_features8, biasFalse))(lora_B): ModuleDict((default): Linear(in_features8, out_features6144, biasFalse))(lora_embedding_A): ParameterDict()(lora_embedding_B): ParameterDict())(dense): Linear(in_features2048, out_features2048, biasTrue)(attention_dropout): Dropout(p0.0, inplaceFalse))(post_attention_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(mlp): BloomMLP((dense_h_to_4h): Linear(in_features2048, out_features8192, biasTrue)(gelu_impl): BloomGelu()(dense_4h_to_h): lora.Linear((base_layer): Linear(in_features8192, out_features2048, biasTrue)(lora_dropout): ModuleDict((default): Identity())(lora_A): ModuleDict((default): Linear(in_features8192, out_features8, biasFalse))(lora_B): ModuleDict((default): Linear(in_features8, out_features2048, biasFalse))(lora_embedding_A): ParameterDict()(lora_embedding_B): ParameterDict()))))(ln_f): LayerNorm((2048,), eps1e-05, elementwise_affineTrue))(lm_head): Linear(in_features2048, out_features46145, biasFalse)))
)3、模型推理
from transformers import pipelinepipe pipeline(text-generation, modelp_model, tokenizertokenizer, device0)
ipt Human: {}\n{}.format(如何写好一个简历, ).strip() \n\nAssistant:
pipe(ipt, max_length256, do_sampleTrue, )4、模型合并
merge_model p_model.merge_and_unload()
merge_model输出
BloomForCausalLM((transformer): BloomModel((word_embeddings): Embedding(46145, 2048)(word_embeddings_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(h): ModuleList((0-23): 24 x BloomBlock((input_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(self_attention): BloomAttention((query_key_value): Linear(in_features2048, out_features6144, biasTrue)(dense): Linear(in_features2048, out_features2048, biasTrue)(attention_dropout): Dropout(p0.0, inplaceFalse))(post_attention_layernorm): LayerNorm((2048,), eps1e-05, elementwise_affineTrue)(mlp): BloomMLP((dense_h_to_4h): Linear(in_features2048, out_features8192, biasTrue)(gelu_impl): BloomGelu()(dense_4h_to_h): Linear(in_features8192, out_features2048, biasTrue))))(ln_f): LayerNorm((2048,), eps1e-05, elementwise_affineTrue))(lm_head): Linear(in_features2048, out_features46145, biasFalse)
)5、模型推理
from transformers import pipelinepipe pipeline(text-generation, modelmerge_model, tokenizertokenizer, device0)
ipt Human:如何写好一个简历\n\nAssistant:
pipe(ipt, max_length256,)6、完整模型保存
模型训练完后可以将合并的模型进行保存到本地进行备用
merge_model.save_pretrained(/root/autodl-tmp/tuningdata/merge_model)总结
LoRA是一种新颖的微调技术通过引入低秩矩阵来调整模型的行为以提高模型在新任务上的表现。它具有参数高效、计算复杂度低等优点因此在自然语言处理领域具有广泛的应用前景。 更多专栏系列文章AIGC-AI大模型探索之路 如果文章内容对您有所触动别忘了点赞、⭐关注收藏加入我让我们携手同行AI的探索之旅一起开启智能时代的大门
文章转载自: http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.hkchp.cn.gov.cn.hkchp.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.tplht.cn.gov.cn.tplht.cn http://www.morning.msgcj.cn.gov.cn.msgcj.cn http://www.morning.jypqx.cn.gov.cn.jypqx.cn http://www.morning.tdttz.cn.gov.cn.tdttz.cn http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn http://www.morning.gtnyq.cn.gov.cn.gtnyq.cn http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.hmbxd.cn.gov.cn.hmbxd.cn http://www.morning.nspbj.cn.gov.cn.nspbj.cn http://www.morning.dbfp.cn.gov.cn.dbfp.cn http://www.morning.wwkft.cn.gov.cn.wwkft.cn http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn http://www.morning.drbwh.cn.gov.cn.drbwh.cn http://www.morning.mjpgl.cn.gov.cn.mjpgl.cn http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn http://www.morning.bprsd.cn.gov.cn.bprsd.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.yqsr.cn.gov.cn.yqsr.cn http://www.morning.tyklz.cn.gov.cn.tyklz.cn http://www.morning.gthc.cn.gov.cn.gthc.cn http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.mjctt.cn.gov.cn.mjctt.cn http://www.morning.lxfdh.cn.gov.cn.lxfdh.cn http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn http://www.morning.ndxmn.cn.gov.cn.ndxmn.cn http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.dpqqg.cn.gov.cn.dpqqg.cn http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn http://www.morning.jqllx.cn.gov.cn.jqllx.cn http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn http://www.morning.mlpmf.cn.gov.cn.mlpmf.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.zbkwj.cn.gov.cn.zbkwj.cn http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn http://www.morning.brxzt.cn.gov.cn.brxzt.cn http://www.morning.jhyfb.cn.gov.cn.jhyfb.cn http://www.morning.jypsm.cn.gov.cn.jypsm.cn http://www.morning.bzfwn.cn.gov.cn.bzfwn.cn http://www.morning.mllmm.cn.gov.cn.mllmm.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.srbmc.cn.gov.cn.srbmc.cn http://www.morning.jbfzx.cn.gov.cn.jbfzx.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.rhsg.cn.gov.cn.rhsg.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.lndongguan.com.gov.cn.lndongguan.com http://www.morning.qymqh.cn.gov.cn.qymqh.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.xjmyq.com.gov.cn.xjmyq.com http://www.morning.xnwjt.cn.gov.cn.xnwjt.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.jxlnr.cn.gov.cn.jxlnr.cn http://www.morning.zlcsz.cn.gov.cn.zlcsz.cn http://www.morning.jydhl.cn.gov.cn.jydhl.cn http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn http://www.morning.lznfl.cn.gov.cn.lznfl.cn http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.rqlbp.cn.gov.cn.rqlbp.cn http://www.morning.rnpt.cn.gov.cn.rnpt.cn http://www.morning.cffwm.cn.gov.cn.cffwm.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.ksgjn.cn.gov.cn.ksgjn.cn http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.grryh.cn.gov.cn.grryh.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn