核心内容摘要
NSGA-II算法实战:从理论到多目标优化问题求解
目录
什么是 SFTSupervised Fine-Tuning1定义2LOSS的数学表示3一个真实的例子解释LOSS
什么是 LoRALow-Rank Adaptation1定义
示例代码1数据集格式2代码3运行结果4读取lora参数重新进行模型推理
lora和SFT的介绍
什么是 SFTSupervised Fine-Tuning1定义SFT 监督微调本质是用「输入 → 标准输出」对模型做有监督学习形式用户问题 AI标准答案训练目标特点数据成对的prompt, answerloss交叉熵和分类任务本质一样只是输出是文本 SFT 解决的是“模型该学什么行为”2LOSS的数学表示语言模型的训练目标3一个真实的例子解释LOSS这个输出的巴黎是标签。
之后拿到对应标签模型输入的概率之后log求和。
什么是 LoRALow-Rank Adaptation1定义LoRA 一种参数高效微调方法PEFT核心思想❌ 不改原模型参数✅ 只在部分层插入小矩阵并训练它们数学上原本权重LoRA 改为
示例代码1数据集格式{system: 你是一个名为沐雪的可爱AI女孩子, conversation: [{human: 如何集中精力做一件事情, assistant: 首当其冲的肯定是选择一个合适的地方啦比如说图书馆之类的如果你不想出去那就找一个安静的地方吧。
然后扔掉手机这类会让你分心的东西或者关掉通知确保你不会突然被打扰。
明确你要做的事情把它细化成分几步去完成设置期限任务完成之后放松放松。
如果你感觉到累了不行了就去外面转转吧喝一杯咖啡思考让你停下来的地方然后活力满满地继续接下来的工作。
}]}2代码from datasets import load_dataset from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer from peft import LoraConfig, get_peft_model import torch import json # # ① 模型路径与数据路径 # model_dir rC:\Users\64292\Desktop\大模型学习\xiaozhi\weitiao\Qwen
5-
5B-Instruct data_path rC:\Users\64292\Desktop\大模型学习\xiaozhi\weitiao\competition_train.jsonl # # ② 加载数据集 # dataset load_dataset(json, data_filesdata_path) # # ③ 预处理函数把 system human 拼成 prompt # def format_example(example): conversations example[conversation] if not conversations or len(conversations) 0: return None conv conversations[0] system example.get(system, ) human conv.get(human, ) assistant conv.get(assistant, ) # 构建输入与输出 prompt f系统{system}\n用户{human}\nAI output assistant.strip() return {prompt: prompt, output: output} dataset dataset.map(format_example) dataset dataset.filter(lambda x: x[prompt] is not None) # # ④ 加载分词器与模型 # tokenizer AutoTokenizer.from_pretrained(model_dir, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_dir, torch_dtypetorch.float16, device_mapauto ) # # ⑤ LoRA 配置低显存训练 # lora_config LoraConfig( r8, lora_alpha16, target_modules[q_proj, v_proj], lora_dropout
05, biasnone, task_typeCAUSAL_LM ) model get_peft_model(model, lora_config) # # ⑥ Tokenize 函数 # def preprocess(example): text f{example[prompt]}{example[output]} tokenized tokenizer(text, truncationTrue, paddingmax_length, max_length
tokenized[labels] tokenized[input_ids].copy() return tokenized tokenized_ds dataset.map(preprocess, remove_columnsdataset[train].column_names) # # ⑦ 训练配置 # args TrainingArguments( output_dir./qwen
5-
5b-lora-muxue, per_device_train_batch_size1, gradient_accumulation_steps8, learning_rate2e-4, num_train_epochs3, fp16True, logging_steps10, save_steps200, save_total_limit2, report_tonone ) # # ⑧ 训练启动 # trainer Trainer( modelmodel, argsargs, train_datasettokenized_ds[train] ) trainer.train() # # ⑨ 保存权重 # model.save_pretrained(./qwen
5-
5b-lora-muxue) tokenizer.save_pretrained(./qwen
5-
5b-lora-muxue) print(✅ 微调完成权重保存在 ./qwen
5-
5b-lora-muxue)3运行结果4读取lora参数重新进行模型推理from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel import torch # ① 原始模型路径基础模型 base_model_dir rC:\Users\64292\Desktop\xiaozhi\weitiao\Qwen
5-
5B-Instruct # ② LoRA 权重路径你的微调结果 lora_dir r./qwen
5-
5b-lora-muxue # ③ 加载分词器 print( 正在加载分词器和模型...) tokenizer AutoTokenizer.from_pretrained(lora_dir, trust_remote_codeTrue) # ④ 加载基础模型 base_model AutoModelForCausalLM.from_pretrained( base_model_dir, torch_dtypetorch.float16, device_mapauto ) # ⑤ 加载 LoRA 微调权重 model PeftModel.from_pretrained(base_model, lora_dir) model.eval() print(✅ 已加载 Qwen LoRA 微调权重人格沐雪\n) # ⑥ 设定人格系统提示词 system_prompt 你是一个名为世君同学的可爱AI女孩子性格温柔、活泼、善解人意说话要自然可爱。
chat_history f系统{system_prompt}\n # ⑦ 聊天循环 while True: user_input input( 你).strip() if user_input.lower() in [exit, quit, q]: print( 沐雪再见呀记得想我哦 ) break # 将用户输入加入上下文 chat_history f用户{user_input}\nAI # 编码输入 inputs tokenizer(chat_history, return_tensorspt).to(model.device) # 模型生成 outputs model.generate( **inputs, max_new_tokens200, temperature