创建自己网站的步骤企业所得税优惠政策2022
2026/1/10 17:59:49 网站建设 项目流程
创建自己网站的步骤,企业所得税优惠政策2022,wordpress编辑器怎么变,嘉兴seo报价本文详细介绍如何使用LoRA技术对Qwen-1.8B开源大模型进行微调#xff0c;使其适应特定任务。从环境准备、数据收集、模型配置到训练执行和评估#xff0c;完整展示了基于PEFT框架的大模型微调流程。通过这种参数高效微调方法#xff0c;开发者可用较低计算资源使模型获取新领…本文详细介绍如何使用LoRA技术对Qwen-1.8B开源大模型进行微调使其适应特定任务。从环境准备、数据收集、模型配置到训练执行和评估完整展示了基于PEFT框架的大模型微调流程。通过这种参数高效微调方法开发者可用较低计算资源使模型获取新领域知识同时保留原有语言能力降低大模型应用落地门槛是程序员学习大模型微调的实用指南。背景在[前面的微调课程]中我们已经储备了很多前置的理论知识这节课就来真刀真枪地体验一下如何基于开源大模型进行微调。目前在中文领域DeepSeek 和 Qwen 可以算是第一梯队的模型了。本次内容我们就以 Qwen-1.8B 这个小模型为例一步步演示下如何进行 PEFT 微调。Qwen-1.8B 是 Qwen 系列的一个最小的版本具有 18 亿参数。这个模型虽然在大模型家族中量级较小但也能够处理中英双语的自然语言理解和生成任务。通过量化技术Qwen-1.8B 可以在低至 4GB 显存的消费级显卡上运行INT4 量化级别。Qwen-1.8B 在性能和开放性之间进行了良好的平衡旨在为开发者提供一个强大且易用的对话交互基座加速大模型在实际场景中的应用落地很受中文世界用户的欢迎。这个模型的大小也比较适合我们学习。这是一个开源模型可以直接从 HuggingFace 上下载。微调技术概览我们之所以要对大模型继续微调通常是要实现两个目标第一个是让模型更切合自己的应用场景更加适应特定的下游任务第二个是模型能够变得更加轻便节省资源。针对这两个目标业界主要采用以下几种微调方式不同的微调方法在参数效率、任务适应能力、实现难易度等方面各有优劣。针对具体任务需要根据实际情况如任务复杂度、训练数据规模、可用算力等来选择合适的微调策略。此外基于模型部署的需求模型蒸馏、量化、剪枝等模型压缩方法也常常与微调方法配合使用以进一步减小模型体积、加速推理速度使大模型更容易在实际应用中落地这个我们在后面的内容中会展开讨论。LoRA 简介在上面罗列的各种主流微调方法除了全量微调之外其余都可以称之为 PEFT即 Parameter Efficient Fine-Tuning参数高效微调它是一种在大语言模型微调过程中通过减少需要更新的参数数量来降低计算成本和存储需求的技术。毕竟大语言模型的主要问题是参数数量过大做全量微调实在对资源的消耗太大已经不是一般研究人员或者普通企业所能做的了。而 PEFT 则是当前大模型领域最为高效实用的微调技术之一PEFT 微调中的一条重要分支就是基于低秩分解的方法LoRA这一类方法通过低秩分解来近似表示要学习的增量权重矩阵。基于低秩分解的思想可以用非常小的参数开销新增参数量通常只有原模型的 0.1%~3%来适配模型在参数效率上非常有优势。关于 LoRA 的更多技术细节可以参考论文《LoRA: Low-Rank Adaptation of Large Language Models》。LoRA 这种方法有许多优点LoRA 通过大幅减少可训练参数的数量使微调更加高效。原始预训练权重保持冻结这意味着你可以拥有多个轻量级和便携式的LoRA 模型以便在其基础上构建各种下游任务。LoRA 与其他参数高效方法正交并且可以与其中许多方法相结合。使用 LoRA 微调的模型的性能与完全微调的模型的性能相当。凭借参数少、计算快、效果好、易实现等优势LoRA 成为了近年来最受欢迎的 PEFT 技术之一。包括 ChatGPT 在内的众多业界大模型都采用了 LoRA 进行下游任务适配。所以接下来我们就通过 LoRA 方法来尝试微调 Qwen-1.8B 模型环境准备首先说明下我本次微调所使用的环境操作系统ubuntu-22.04GPURTX 3090(24GB)CUDA 环境CUDA 12.6Python 版本Python 3.10PyTorch 版本PyTorch 2.7.0需要特别注意的是PyTorch 与 cuda 的版本一定要匹配否则可能无法正常运行项目。具体版本的对应关系可以参考 PyTorch 官网要从零开始手动实现上面的各种微调方法当然不现实好在我们有 Hugging Face 的 PEFT 框架。PEFT 是 Hugging Face 针对大模型微调而开发的一套框架它旨在使大语言模型LLMs的微调过程更加高效和资源友好。这个框架提供了一些主要的技术以减少微调所需的参数量和计算资源同时仍保持模型在特定任务上的高性能。除了 peft 之外我们微调还要依赖其它一些包这里可以一起安装下pip install peft transformers torch setuptools bitsandbytes datasets sentencepiece因为 peft 和 transformers 库都需要访问 HuggingFace为了加速访问我们可以通过环境变量设置下镜像站import os # 设置模型下载路径 os.environ[HF_HOME] 你的下载路径 os.environ[HF_HUB_CACHE] 你的下载路径 # 设置HuggingFace镜像站 os.environ[HF_ENDPOINT] https://hf-mirror.com准备数据环境已经就绪下面就开始我们的微调实战吧通常来说微调的第一步就是准备数据。我在使用 ChatGLM 提供的一个 Alpaca 风格的中文中药数据集大概有4千条可以用来作为我们本次微调的训练语料。Alpaca 是由 Meta 发布的一种主流的数据集格式每条语料都包含 instruction、input 和 output 这三个字段。关于 Alpaca 风格的具体解释这里就不赘述了大家感兴趣的话可以自行搜索一下。在微调之前我们先测试一下 Qwen1.5-1.8B-Chat 这个模型看看微调前的效果。我向它提问几条中药相关的问题# 导入Hugging Face Transformers相关库 from transformers import AutoModelForCausalLM, AutoTokenizer # 指定模型名称 MODEL Qwen/Qwen1.5-1.8B-Chat # 加载训练好的模型和分词器 # tokenizer和model要一一对应 tokenizer AutoTokenizer.from_pretrained(MODEL, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(MODEL, trust_remote_codeTrue, device_mapauto) # 模型设为评估状态 model.eval() # 定义测试示例 examples [ { instruction: 使用中医知识正确回答适合这个病例的中成药。, input: 我这段时间感觉身体不太对劲有腹泻的迹象面黄肌瘦吃点什么中成药能改善 }, { instruction: 使用中医知识正确回答适合这个病例的中成药。, input: 我昨天开始咳嗽感觉喉咙痛痰又稠又黄还感觉有点发热。 } ] # 测试模型生成结果 for example in examples: context fInstruction: {example[instruction]}\nInput: {example[input]}\nAnswer: # 对输入文本进行编码 inputs tokenizer(context, return_tensorspt) # 模型生成回复 outputs model.generate(inputs.input_ids.to(model.device), max_length512, num_return_sequences1, no_repeat_ngram_size2) # 对回复内容进行解码 answer tokenizer.decode(outputs[0], skip_special_tokensTrue) print(fInput: {example[input]}) print(fOutput: {answer}\n)执行这段代码会首先从 HuggingFace 上将模型下载到本地之后采用本地的模型进行推理。需要注意的是因为我们还没有进行微调所以此时模型生成的结果还是基于之前预训练的语料库并不一定是真实准确的。执行微调我们确认了模型已经被拉取到本地并且可以正常运行接下来就可以正式开始微调了。首先我们需要自定义数据集继承 Pytorch 的 Dataset 类这样就将刚才下载下来的数据集转化成模型可以理解的格式# 导入Dataset from torch.utils.data import Dataset import json # 自定义中药数据集 class MedicineDataset(Dataset): def __init__(self, data_path, tokenizer, device): self.data json.load(open(data_path)) self.tokenizer tokenizer self.device device def __len__(self): return len(self.data) def __getitem__(self, idx): example self.data[idx] formatted_example self.format_example(example) inputs self.tokenizer( formatted_example[context], max_length512, truncationTrue, paddingmax_length, return_tensorspt ) labels self.tokenizer( formatted_example[target], max_length512, truncationTrue, paddingmax_length, return_tensorspt ) inputs[labels] labels[input_ids] # 确保所有张量在同一个设备上 return {key: val.squeeze().to(self.device) for key, val in inputs.items()} def format_example(self, example: dict) - dict: context fInstruction: {example[instruction]}\n if example.get(input): context fInput: {example[input]}\n context Answer: target example[output] return {context: context, target: target}接下来对需要微调的模型进行一些设置# 导入微调模型所需的库 from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 指定模型 MODEL Qwen/Qwen1.5-1.8B-Chat # 判断设备类型 device torch.device(cuda if torch.cuda.is_available() else cpu) # 加载分词器和模型 tokenizer AutoTokenizer.from_pretrained(MODEL, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(MODEL, trust_remote_codeTrue) # 把模型移动到设备上 model model.to(device) # 节省内存的一些配置 model.supports_gradient_checkpointing True # 支持梯度检查点功能减少显存使用 model.gradient_checkpointing_enable() # 启用梯度检查点功能减少训练时的显存占用 model.enable_input_require_grads() # 允许模型输入的张量需要梯度支持更灵活的梯度计算 model.is_parallelizable True # 指定模型可以并行化处理 model.model_parallel True # 启用模型并行化在多设备(如多GPU)上分布计算然后是比较关键的一步LoRA 配置。这些配置项可以帮助我们在训练语言模型时应用 LoRA 技术通过低秩分解减少模型参数和内存占用并使用 dropout 技术防止过拟合同时仅在特定模块上应用 LoRA从而在计算效率和模型性能之间取得平衡。# 导入peft库 from peft import get_peft_model, LoraConfig, TaskType # 配置LoRA相关参数 peft_config LoraConfig( task_typeTaskType.CAUSAL_LM, # 任务类型: 因果语言模型(Causal LM) inference_modeFalse, # 设置推理模式为False,表示当前配置用于训练模式,而非推理模式 r8, # 设置低秩分解的秩: Rank8。r越小,表示模型的参数量和内存占用越少,压缩程度越高 lora_alpha32, # 设置缩放因子lora_alpha32 lora_dropout0.1, # 设置dropout概率lora_dropout0.1,表示有10%的神经元会被丢弃,此操作有助于防止模型过拟合,提升模型的泛化能力 target_modules[q_proj, v_proj] # 查询投影和值投影模块 ) # 在模型上应用LoRA配置 model get_peft_model(model, peft_config)相关的前置工作已经都 ready 了下一步就可以直接进行微调了# 创建训练数据集 train_dataset MedicineDataset(./data/dataset/cpmi_dataset.json, tokenizer, device) # 导入训练相关的库 from transformers import TrainingArguments, Trainer # 定义训练参数 training_args TrainingArguments( output_dir./results, # 训练结果保存的目录 num_train_epochs50, # 训练的总轮数 per_device_train_batch_size4, # 每个设备上的训练批次大小 gradient_accumulation_steps8, # 梯度累积步数在进行反向传播前累积多少步 # evaluation_strategyno, # 评估策略这里设置为不评估 save_strategyepoch, # 保存策略每个 epoch 保存一次模型 learning_rate5e-5, # 学习率 fp16True, # 启用 16 位浮点数训练提高训练速度并减少显存使用 logging_dir./logs, # 日志保存目录 dataloader_pin_memoryFalse, # 禁用pin_memory以节省内存 ) # 自定义 Trainer class CustomTrainer(Trainer): def compute_loss(self, model, inputs, return_outputsFalse, **kwargs): labels inputs.pop(labels) # 从输入中取出标签 outputs model(**inputs) # 获取模型输出 logits outputs.logits # 获取模型输出的logits shift_logits logits[..., :-1, :].contiguous() # 对logits进行偏移准备计算交叉熵损失 shift_labels labels[..., 1:].contiguous() # 对标签进行偏移准备计算交叉熵损失 loss_fct torch.nn.CrossEntropyLoss() # 定义交叉熵损失函数 loss loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1)) # 计算损失 return (loss, outputs) if return_outputs else loss # 根据参数返回损失和输出 # 定义 Trainer trainer CustomTrainer( modelmodel, # 训练的模型 argstraining_args, # 训练参数 train_datasettrain_dataset, # 训练数据集 ) # 开始微调 print(开始微调) trainer.train() print(微调完成)执行这段代码就可以把模型训练 run 起来了。我们指定了训练的轮数为50轮在实际的生产环境中训练的轮数通常会更多并且要结合不断的调参才能达到较好的训练效果。训练的耗时可能会比较长请大家耐心等待~这里我们可以看到随着模型训练的轮数越来越多损失函数也在逐渐收敛。跑完训练之后我们可以将微调好的模型保存到本地。import os # 微调后模型的保存路径 FINE_TUNING_DIR ./fine-tuning-qwen1.5-1.8b-chat # 保存训练后的模型和配置文件 model.save_pretrained(FINE_TUNING_DIR) tokenizer.save_pretrained(FINE_TUNING_DIR) # 将配置文件下载到模型目录中 config model.config.to_dict() config_path os.path.join(FINE_TUNING_DIR, config.json) with open(config_path, w) as f: json.dump(config, f, ensure_asciiFalse, indent4) print(f微调后的模型已经成功保存到: {FINE_TUNING_DIR})这样一来整个微调过程就结束了是不是没有那么复杂模型评估微调完成之后最后一步就是模型评估也就是在微调后的模型上再次测试同样的问题看看模型生成的回复是否与参考数据集中的内容一致。# 导入所需要的库 from transformers import AutoModelForCausalLM, AutoTokenizer # 加载训练好的模型和分词器 tokenizer AutoTokenizer.from_pretrained(FINE_TUNING_DIR, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(FINE_TUNING_DIR, trust_remote_codeTrue, device_mapauto) # 模型设为评估状态 model.eval() # 定义测试示例 questions [ { instruction: 使用中医知识正确回答适合这个病例的中成药。, input: 我这段时间感觉身体不太对劲有腹泻的迹象面黄肌瘦吃点什么中成药能改善 }, { instruction: 使用中医知识正确回答适合这个病例的中成药。, input: 我昨天开始咳嗽感觉喉咙痛痰又稠又黄还感觉有点发热。 } ] # 生成回复 for question in questions: context fInstruction: {question[instruction]}\nInput: {question[input]}\nAnswer: # 对输入文本进行编码 inputs tokenizer(context, return_tensorspt) # 模型生成回复 outputs model.generate(inputs.input_ids.to(model.device), max_length512, num_return_sequences1, no_repeat_ngram_size2) # 对回复内容进行解码 answer tokenizer.decode(outputs[0], skip_special_tokensTrue) print(fInput: {question[input]}) print(fOutput: {answer}\n)实际执行结果如下令人欣喜的是我们训练语料库中的知识已经被 Qwen 模型消化进去了并且体现到了生成的内容中说明本次微调是生效的同样可以看到目前回答的准确率还不是很高语义也不太通顺这是因为我们训练的轮数太少而且也没有针对性地设置 LoRA 参数这是一个需要反复调优和评估的过程这里就不展开讨论了鼓励大家自己动手试一试。小结本篇文章我们介绍了微调的核心概念并基于 LoRA 技术与 peft 框架对 Qwen 模型进行了微调使其在中医领域的问答任务上取得了很好的效果。利用 LoRA 等参数高效微调技术我们可以用较小的计算开销快速适配预训练模型到特定任务让模型获得新的领域知识同时又能保留原有的语言理解和生成能力这为大语言模型在垂直领域的应用提供了新的思路也降低了大模型应用落地的门槛。​最后我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包✅AI大模型学习路线图✅Agent行业报告✅100集大模型视频教程✅大模型书籍PDF✅DeepSeek教程✅AI产品经理入门资料完整的大模型学习和面试资料已经上传带到CSDN的官方了有需要的朋友可以扫描下方二维码免费领取【保证100%免费】​​为什么说现在普通人就业/升职加薪的首选是AI大模型人工智能技术的爆发式增长正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议到全国两会关于AI产业发展的政策聚焦再到招聘会上排起的长队AI的热度已从技术领域渗透到就业市场的每一个角落。智联招聘的最新数据给出了最直观的印证2025年2月AI领域求职人数同比增幅突破200%远超其他行业平均水平整个人工智能行业的求职增速达到33.4%位居各行业榜首其中人工智能工程师岗位的求职热度更是飙升69.6%。AI产业的快速扩张也让人才供需矛盾愈发突出。麦肯锡报告明确预测到2030年中国AI专业人才需求将达600万人人才缺口可能高达400万人这一缺口不仅存在于核心技术领域更蔓延至产业应用的各个环节。​​资料包有什么①从入门到精通的全套视频教程⑤⑥包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图还有视频解说全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤ 这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。所有的视频教程由智泊AI老师录制且资料与智泊AI共享相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌构建起前沿课程智能实训精准就业的高效培养体系。课堂上不光教理论还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事‌​​​​如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生‌无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型‌非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界‌。业务赋能 ‌突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型‌。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】**​

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询