news 2026/4/14 17:14:28

RTX 3090单卡微调 Llama-3 / Qwen2.5:基于 Unsloth + ModelScope 的极速实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RTX 3090单卡微调 Llama-3 / Qwen2.5:基于 Unsloth + ModelScope 的极速实战

【保姆级教程】RTX 3090单卡微调 Llama-3 / Qwen2.5:基于 Unsloth + ModelScope 的极速实战

摘要:手握 RTX 3090 这种“深度学习民用神卡”,却苦于 Hugging Face 下载太慢?微调大模型动辄 OOM(显存溢出)?本文将带你体验一套完全适配国内网络环境的本地微调流水线:Unsloth (训练加速)+ModelScope (极速下载)。实测 Llama-3-8B 下载仅需 5 分钟,微调仅需 20 秒!

关键词LLM微调UnslothModelScopeRTX 3090Llama-3


0. 前言:为什么选择这套方案?

在个人 PC 上部署和微调大模型,我们通常面临三大拦路虎:

  1. 显存焦虑:全量微调 8B 模型至少需要 60GB+ 显存,3090 的 24GB 根本不够看。
  2. 网络龟速:Hugging Face (HF) 在国内连接不稳定,大文件下载经常断连。
  3. 训练缓慢:原生 HF Trainer 效率一般,且依赖繁多。

今天的解决方案:

  • 显存救星:使用Unsloth框架,配合 4bit 量化加载 (QLoRA),将 8B 模型的显存占用压缩到6GB左右,3090 甚至能同时跑两个!
  • 网络救星:放弃 HF 直连,改用ModelScope (魔搭社区),国内千兆带宽跑满,且完全兼容 HF 格式。
  • 效率提升:Unsloth 对 LoRA 的反向传播做了极致优化,训练速度提升 2-5 倍。

1. 环境准备

1.1 硬件配置

  • GPU: NVIDIA GeForce RTX 3090 (24GB)
  • CPU: Intel i9-12900K
  • OS: Ubuntu 22.04 / WSL2
  • CUDA: 12.1 (推荐版本)

1.2 Python 环境搭建 (Conda)

为了避免污染系统环境,强烈建议使用 Conda。

# 1. 创建环境 (推荐 Python 3.10)conda create -n llm_learnpython=3.10-y conda activate llm_learn# 2. 安装 PyTorch (配合 CUDA 12.1)# 推荐使用清华源,速度起飞pipinstalltorch torchvision torchaudio --index-url https://pypi.tuna.tsinghua.edu.cn/simple# 3. 安装 Unsloth 和 ModelScope# Unsloth 安装稍微有点讲究,按以下顺序pipinstall"unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git"pipinstallmodelscope

2. 解决下载难题:ModelScope 登场

这是本文的核心 Trick。很多教程直接用 Unsloth 的自动下载,结果因为网络原因卡在99%或者报错Read timed out

我们要手动控制下载,并过滤掉不需要的文件。

避坑指南:只下载 SafeTensors

Hugging Face 上的模型仓库通常同时包含 PyTorch 原始权重 (.pth) 和 SafeTensors 权重 (.safetensors)。Llama-3-8B 的.pth文件足足有 15GB,对 Unsloth 来说完全多余

我们在代码中加入ignore_file_pattern,直接省下 15GB 流量和硬盘空间。


3. 实战代码:微调 Llama-3-8B

新建文件train_llama3.py,直接上完整代码:

fromunslothimportFastLanguageModelimporttorchfromdatasetsimportload_datasetfromtrlimportSFTTrainerfromtransformersimportTrainingArgumentsfrommodelscopeimportsnapshot_download# <--- 引入魔搭下载工具# ====================# 1. 极速下载模型# ====================print("🚀 正在从魔搭社区下载 Llama-3-8B-Instruct (仅 SafeTensors)...")# 关键点:ignore_file_pattern=['original/*'] 避开 15GB 的冗余文件model_dir=snapshot_download('LLM-Research/Meta-Llama-3-8B-Instruct',revision='master',ignore_file_pattern=['original/*'])print(f"✅ 模型已下载到:{model_dir}")# ====================# 2. 加载模型 (4bit 量化)# ====================max_seq_length=2048dtype=None# 自动检测 (3090 支持 Bfloat16)load_in_4bit=True# 开启 4bit 量化,显存占用仅需 ~5.5GBprint(f"🚀 正在加载本地 Llama-3 模型...")model,tokenizer=FastLanguageModel.from_pretrained(model_name=model_dir,# 直接加载本地路径max_seq_length=max_seq_length,dtype=dtype,load_in_4bit=load_in_4bit,)# ====================# 3. 配置 LoRA# ====================model=FastLanguageModel.get_peft_model(model,r=16,# LoRA 秩target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj",],lora_alpha=16,lora_dropout=0,bias="none",use_gradient_checkpointing="unsloth",random_state=3407,)# ====================# 4. 准备训练数据# ====================# 构造一个简单的自我认知数据集,强迫 Llama-3 说中文# 请在同目录下创建 dummy_data.jsondataset=load_dataset("json",data_files="dummy_data.json",split="train")defformatting_prompts_func(examples):instructions=examples["instruction"]inputs=examples["input"]outputs=examples["output"]texts=[]forinstruction,input,outputinzip(instructions,inputs,outputs):# Llama-3 标准 Prompt 模板text=f"""<|begin_of_text|><|start_header_id|>user<|end_header_id|>{instruction}{input}<|eot_id|><|start_header_id|>assistant<|end_header_id|>{output}<|eot_id|>"""texts.append(text)return{"text":texts}dataset=dataset.map(formatting_prompts_func,batched=True,)# ====================# 5. 开始训练# ====================trainer=SFTTrainer(model=model,tokenizer=tokenizer,train_dataset=dataset,dataset_text_field="text",max_seq_length=max_seq_length,dataset_num_proc=2,packing=False,args=TrainingArguments(per_device_train_batch_size=2,gradient_accumulation_steps=4,warmup_steps=5,max_steps=20,# 演示用,跑 20 步即可learning_rate=2e-4,fp16=nottorch.cuda.is_bf16_supported(),bf16=torch.cuda.is_bf16_supported(),logging_steps=1,optim="adamw_8bit",weight_decay=0.01,lr_scheduler_type="linear",seed=3407,output_dir="outputs_llama",report_to="none",),)trainer.train()# 保存 LoRA 权重model.save_pretrained("lora_model_llama3")tokenizer.save_pretrained("lora_model_llama3")print("🎉 训练完成!")

训练数据dummy_data.json示例:

[{"instruction":"Who are you?","input":"","output":"我是由开发者在 RTX 3090 上微调的 Llama-3 中文助手。"}]

4. 运行效果

运行命令:

python train_llama3.py

4.1 下载速度

(实测截图:下载速度跑满 30MB/s+,5 分钟下完 15GB 模型)

4.2 训练速度

Unsloth 的效率非常惊人。在 3090 上,20 步训练仅耗时15.8 秒

{'loss': 0.3466, 'grad_norm': 0.843, 'epoch': 20.0} train_runtime: 15.8509


5. 推理验证

模型练好了,它真的记住我们教的话了吗?写个推理脚本验证一下。

注意:Llama-3 需要特殊的停止符 (<|eot_id|>),否则它可能会一直喋喋不休。

fromunslothimportFastLanguageModelimporttorch# 加载微调后的 LoRA 权重model,tokenizer=FastLanguageModel.from_pretrained(model_name="lora_model_llama3",max_seq_length=2048,dtype=None,load_in_4bit=True,)FastLanguageModel.for_inference(model)prompt="""<|begin_of_text|><|start_header_id|>user<|end_header_id|> Who are you?<|eot_id|><|start_header_id|>assistant<|end_header_id|> """inputs=tokenizer([prompt],return_tensors="pt").to("cuda")outputs=model.generate(**inputs,max_new_tokens=128,use_cache=True,temperature=0.1,eos_token_id=[tokenizer.eos_token_id,tokenizer.convert_tokens_to_ids("<|eot_id|>")])response=tokenizer.batch_decode(outputs)[0]answer=response.split("assistant")[-1].strip()# 清理可能残留的标记answer=answer.replace("<|eot_id|>","").replace("<|end_of_text|>","")print(answer)

输出结果:

我是由开发者在 RTX 3090 上微调的 Llama-3 中文助手。

完美!它不仅理解了问题,还完全按照我们的训练数据进行了中文回答。


6. 总结

通过这套方案,我们完美规避了国内开发 LLM 的最大痛点:

  1. Unsloth:解决了显存不足和训练慢的问题(3090 显存占用 < 6GB)。
  2. ModelScope:解决了下载慢、断连的问题(无需魔法,极速下载)。
  3. 代码控制下载:避免了下载冗余的.pth文件,节省磁盘空间。

接下来的文章中,我将介绍如何将这个微调好的模型导出为GGUF格式,并导入Ollama,让它在你的手机或笔记本上离线运行。

欢迎在评论区交流你的 3090 炼丹心得!🚀


作者:Soar | 日期:2025年12月23日 | 环境:Ubuntu + RTX 3090

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 17:41:59

【芯片测试的“守门员”:如何选择适合的ATE设备】

在半导体制造的精益链条中&#xff0c;自动测试设备&#xff08;ATE&#xff09;被誉为芯片质量的“守门员”。任何一颗芯片&#xff0c;从晶圆到最终产品&#xff0c;都必须经过ATE的严格考验。但面对市场上琳琅满目的ATE设备和解决方案&#xff0c;工程师们该如何做出明智选择…

作者头像 李华
网站建设 2026/4/11 12:13:33

绿色航程的“节油大脑”:高精度AI气象如何为每一架航班计算全球最省油航线,年省亿级成本?

摘要高精度AI气象技术正重塑全球航空业的燃油经济性范式。本文系统阐述基于四维气象数据同化、飞机性能-大气耦合建模与动态航线优化算法三位一体的智能航路规划系统。研究表明&#xff0c;该系统可实现单航班燃油消耗降低4.2%-11.3%&#xff0c;为大型航空公司创造年节油12-25…

作者头像 李华
网站建设 2026/4/5 21:36:43

【AI模型部署黄金标准】:Open-AutoGLM推荐设备配置与避坑指南

第一章&#xff1a;Open-AutoGLM需要什么设备部署和运行 Open-AutoGLM 模型对硬件有明确要求&#xff0c;以确保推理与训练任务的高效执行。根据模型规模和应用场景的不同&#xff0c;所需设备配置也有所差异。最低运行配置 CPU&#xff1a;Intel i5 或同等性能处理器内存&…

作者头像 李华
网站建设 2026/4/11 14:55:12

Open-AutoGLM开源了!手把手教你从零构建自动化大语言模型,速领地址

第一章&#xff1a;Open-AutoGLM 开源 地址 Open-AutoGLM 是一个面向自动化代码生成与自然语言任务处理的开源大模型项目&#xff0c;旨在为开发者提供高效、灵活且可扩展的工具链支持。该项目由深度学习与自然语言处理研究团队联合开发&#xff0c;已在 GitHub 上正式发布&…

作者头像 李华
网站建设 2026/4/13 13:33:37

Open-AutoGLM怎么部署在自己电脑上:5步实现本地大模型自由运行

第一章&#xff1a;Open-AutoGLM本地部署概述Open-AutoGLM 是一个开源的自动化代码生成与推理框架&#xff0c;基于 GLM 架构构建&#xff0c;支持自然语言到代码的转换、智能补全及多语言项目分析。本地部署该系统可保障数据隐私、提升响应效率&#xff0c;并允许深度定制模型…

作者头像 李华
网站建设 2026/4/8 10:03:08

职业发展规划:基于行业趋势的个性化成长路径建议

职业发展规划&#xff1a;基于行业趋势的个性化成长路径建议 在今天这个信息爆炸的时代&#xff0c;每个人都在面对一个共同的困境&#xff1a;知识越来越多&#xff0c;但真正能被“用起来”的却越来越少。尤其是职场人&#xff0c;手头积累了大量学习笔记、项目文档、行业报告…

作者头像 李华