news 2026/3/10 22:47:45

加载本地大模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
加载本地大模型

一、先确认本地模型文件结构(关键前提)

首先检查你下载的 Llama 模型文件夹结构是否正确,必须包含以下核心文件(缺一不可):

plaintext

你的本地模型文件夹/ ├── config.json # 模型核心配置(Unsloth必须读取) ├── tokenizer.json # 分词器配置 ├── tokenizer_config.json ├── special_tokens_map.json ├── model.safetensors # 模型权重文件(可能分多个,如model-00001-of-00002.safetensors) └── adapter_config.json # 如果是4bit量化版,会有这个文件(Unsloth的bnb-4bit模型必备)

如果缺少config.json,Unsloth 会直接报 “无配置文件” 错误,需要确认下载完整。

二、核心步骤:Unsloth 加载本地 Llama 模型

步骤 1:修改模型路径为本地绝对路径

把代码中model_name从 HF 在线地址替换为你本地模型文件夹的绝对路径(不要用相对路径,避免识别失败),示例如下:

# 第一步:配置环境(避免中文/路径问题) import os os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 保留,防止依赖下载失败 os.environ["TOKENIZERS_PARALLELISM"] = "false" # 避免分词器并行警告 # 第二步:导入库 from unsloth import FastLanguageModel import torch from trl import SFTTrainer from transformers import TrainingArguments from datasets import load_dataset # ====================== # 核心修改:替换为本地模型的绝对路径 # ====================== # 示例(Linux/Mac):"/home/你的用户名/llama_models/llama-3.1-8b-bnb-4bit" # 示例(Windows WSL2):"/mnt/d/llama_models/llama-3.1-8b-bnb-4bit" # 替换成你实际的本地模型文件夹路径! model_name = "/home/xxx/llama_models/llama-3.1-8b-bnb-4bit" # 第三步:加载本地模型(关键:路径必须正确) model, tokenizer = FastLanguageModel.from_pretrained( model_name = model_name, # 本地模型路径 max_seq_length = 4096, # Llama 3.1支持4096上下文 dtype = torch.float16, # 混合精度 load_in_4bit = True, # 必须和你下载的模型量化版本匹配(4bit/8bit) trust_remote_code = True, # 本地模型建议开启,避免配置解析错误 device_map = "auto", # 自动分配显存(低配GPU必备) ) # ====================== # 后续步骤:加载自定义数据集(和之前一致) # ====================== # 替换为你的本地数据集路径 dataset = load_dataset( "csv", data_files="你的自定义数据集.csv", split="train", encoding="utf-8" ) # 格式化Prompt(替换为你的字段名) def format_prompt(sample): return f"""<|begin_of_text|> <|start_header_id|>user<|end_header_id|> {sample['question']} <|start_header_id|>assistant<|end_header_id|> {sample['answer']} <|end_of_text|>""" dataset = dataset.map(lambda x: {"text": format_prompt(x)}) # ====================== # LoRA配置+训练配置(无需改,适配本地模型) # ====================== model = FastLanguageModel.get_peft_model( model, r = 24, target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_alpha = 24, lora_dropout = 0.05, bias = "none", use_gradient_checkpointing = "unsloth", random_state = 42, use_rslora = False, loftq_config = None, ) trainer = SFTTrainer( model = model, train_dataset = dataset, dataset_text_field = "text", max_seq_length = 4096, tokenizer = tokenizer, args = TrainingArguments( per_device_train_batch_size = 1, # 根据显存调整 gradient_accumulation_steps = 8, warmup_steps = 10, max_steps = 100, learning_rate = 1.8e-4, fp16 = not torch.cuda.is_bf16_supported(), bf16 = torch.cuda.is_bf16_supported(), logging_steps = 5, output_dir = "unsloth-local-llama3.1-custom", # 输出到本地 optim = "adamw_8bit", ), ) # 开始训练 trainer.train() # 推理测试 FastLanguageModel.for_inference(model) inputs = tokenizer( """<|begin_of_text|> <|start_header_id|>user<|end_header_id|> 介绍一下Unsloth <|start_header_id|>assistant<|end_header_id|> """, return_tensors = "pt" ).to("cuda") outputs = model.generate(**inputs, max_new_tokens = 300, temperature = 0.6) print(tokenizer.decode(outputs[0], skip_special_tokens = False))
步骤 2:关键适配说明(针对本地模型)
  1. 路径格式

    • Linux/Mac:用绝对路径,如/home/xxx/llama-3.1-8b-bnb-4bit
    • Windows WSL2:用/mnt/d/xxx/llama-3.1-8b-bnb-4bit(D 盘),不要用D:\xxx格式;
    • 路径中不要包含中文 / 空格,否则会触发加载失败。
  2. 量化版本匹配

    • 如果你下载的是 4bit 量化版,必须设置load_in_4bit = True
    • 如果是 8bit 量化版,设置load_in_8bit = True
    • 如果是原生 16bit 模型,设置load_in_4bit = Falsedtype = torch.float16
  3. 权重文件识别:如果模型权重是分多个文件(如model-00001-of-00002.safetensors),Unsloth 会自动识别,无需额外配置。

三、常见本地模型加载问题及解决

问题 1:提示 “找不到 model.safetensors”
  • 原因:权重文件命名不符合 HF 规范,或路径错误;
  • 解决:确认权重文件以model.safetensors开头,且放在模型根目录(不是子文件夹)。
问题 2:提示 “CUDA out of memory”(显存溢出)
  • 原因:本地模型未量化(原生 16bit),8B 模型需要 16GB + 显存;
  • 解决:
    1. 确保开启load_in_4bit = True(必须是 4bit 量化版模型);
    2. 降低max_seq_length到 2048;
    3. 设置per_device_train_batch_size = 1
问题 3:提示 “tokenizer 配置错误”
  • 原因:缺少分词器文件(tokenizer.json/tokenizer_config.json);
  • 解决:重新下载完整的分词器文件,放在模型根目录。

四、验证本地模型加载是否成功

在加载模型后,添加以下代码验证:

# 加载模型后执行 print(f"✅ 模型加载成功,模型类型:{model.config.model_type}") print(f"✅ 分词器加载成功,词汇量:{tokenizer.vocab_size}")

如果能输出以上信息,说明本地模型已正确识别。

总结

  1. 核心操作:将model_name替换为本地模型文件夹的绝对路径,确保路径无中文 / 空格;
  2. 关键匹配:load_in_4bit/8bit必须和你下载的模型量化版本一致;
  3. 必备文件:本地模型文件夹必须包含config.jsontokenizer.jsonmodel.safetensors核心文件。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/9 15:27:40

Node.js 用beforeExit优雅关闭应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js应用优雅关闭的艺术&#xff1a;利用beforeExit事件实现资源安全释放目录Node.js应用优雅关闭的艺术&#xff1a;利用bef…

作者头像 李华
网站建设 2026/3/6 11:43:58

Python纪念币预约自动化系统架构设计与实现

Python纪念币预约自动化系统架构设计与实现 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 在纪念币发行预约过程中&#xff0c;面对海量用户的激烈竞争&#xff0c;传统手动操作方式…

作者头像 李华
网站建设 2026/3/11 11:15:24

Soundflower音频路由:解锁Mac音频系统的隐藏潜能

Soundflower音频路由&#xff1a;解锁Mac音频系统的隐藏潜能 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 你是否曾经遇到过这样的…

作者头像 李华
网站建设 2026/3/10 22:38:31

Androidstudio成品项目-记单词背单词系统

博主介绍&#xff1a;本人专注于Android/java/数据库/微信小程序技术领域的开发&#xff0c;以及有好几年的计算机毕业设计方面的实战开发经验和技术积累&#xff1b;尤其是在安卓&#xff08;Android&#xff09;的app的开发和微信小程序的开发&#xff0c;很是熟悉和了解&…

作者头像 李华
网站建设 2026/3/11 2:03:07

C语言里面的中断程序:“exit()”和“return返回”

完整示例代码在文章末尾&#xff0c;示例代码来自《C Primer Plus》第17章程序清单17.4&#xff08;films3.c&#xff09;的源代码。 在 films3.c 代码中&#xff0c;出现了exit(EXIT_FAILURE)和return 0语句&#xff0c;下面是为什么初始化阶段用了 exit(EXIT_FAILURE)&#…

作者头像 李华