[WARNING|logging.py:329] 2025-03-04 21:16:20,919 >> Unsloth: Dropout = 0 is supported for fast patching. You are using dropout = 0.01. Unsloth will patch all other layers, except LoRA matrices, causing a performance hit. Unsloth: Offloading input_embeddings to disk to save VRAM Traceback (most recent call last): File "/root/miniconda3/bin/llamafactory-cli", line 8, in <module> sys.exit(main()) ^^^^^^ File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/cli.py", line 112, in main run_exp() File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/train/tuner.py", line 93, in run_exp _training_function(config={"args": args, "callbacks": callbacks}) File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/train/tuner.py", line 67, in _training_function run_sft(model_args, data_args, training_args, finetuning_args, generating_args, callbacks) File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/train/sft/workflow.py", line 52, in run_sft model = load_model(tokenizer, model_args, finetuning_args, training_args.do_train) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/model/loader.py", line 169, in load_model model = init_adapter(config, model, model_args, finetuning_args, is_trainable) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/model/adapter.py", line 299, in init_adapter model = _setup_lora_tuning( ^^^^^^^^^^^^^^^^^^^ File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/model/adapter.py", line 235, in _setup_lora_tuning model = get_unsloth_peft_model(model, model_args, peft_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/root/autodl-tmp/ai/LLaMA-Factory/src/llamafactory/model/model_utils/unsloth.py", line 79, in get_unsloth_peft_model return FastLanguageModel.get_peft_model(**peft_kwargs, **unsloth_peft_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/root/miniconda3/lib/python3.12/site-packages/unsloth/models/llama.py", line 2377, in get_peft_model offload_input_embeddings(model, temporary_location) File "/root/miniconda3/lib/python3.12/site-packages/unsloth/models/_utils.py", line 767, in offload_input_embeddings offloaded_W = offload_to_disk(model.get_input_embeddings(), model, "input_embeddings", temporary_location) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/root/miniconda3/lib/python3.12/site-packages/unsloth/models/_utils.py", line 760, in offload_to_disk offloaded_W = torch.load(filename, map_location = "cpu", mmap = True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/root/miniconda3/lib/python3.12/site-packages/torch/serialization.py", line 1470, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed. In PyTorch 2.6, we changed the default value of the `weights_only` argument in `torch.load` from `False` to `True`. Re-running `torch.load` with `weights_only` set to `False` will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source. Please file an issue with the following so that we can make `weights_only=True` compatible with your use case: WeightsUnpickler error: Unsupported operand 149 Check the documentation of torch.load to learn more about types accepted by default with weights_only https://pytorch.org/docs/stable/generated/torch.load.html.
时间: 2025-04-09 11:54:34 浏览: 104
<think>好的,我现在要帮用户分析他们遇到的这个错误。首先,看看错误信息。用户在使用Unsloth和LLaMA-Factory进行模型训练时遇到了问题。日志里有几个关键点需要注意:
首先,有一个警告信息提到Unsloth支持dropout=0,但用户使用的是0.01,所以除了LoRA矩阵外,其他层会被打补丁,可能影响性能。这部分可能不是导致错误的主要原因,但需要注意是否应该调整dropout参数。
然后,主要错误出现在加载输入嵌入层时,尝试将input_embeddings卸载到磁盘以节省VRAM,结果触发了_pickle.UnpicklingError。错误信息指出在PyTorch 2.6中,torch.load的weights_only参数默认从False改为True,而当前操作可能不支持这种模式,导致加载失败,并建议尝试将weights_only设为False,但要注意安全风险。
接下来,我需要考虑可能的解决方案。首先,用户使用的PyTorch版本可能比较新(2.6或更高),而Unsloth的代码可能还没有适配这个变化。错误发生在torch.load时,尝试加载磁盘上的嵌入权重文件,但由于weights_only=True无法解析某些操作符,所以失败。
可能的解决步骤包括:
1. 检查PyTorch版本,如果用户使用的是2.6及以上,可能需要降级到2.5或更低版本,因为weights_only的默认值变化可能导致兼容性问题。
2. 修改Unsloth的代码,在调用torch.load时显式设置weights_only=False,但需要确保文件来源可信。
3. 检查是否有Unsloth或LLaMA-Factory的更新版本,可能已经修复了这个问题。
4. 调整模型加载的配置,避免触发输入嵌入层的卸载,比如增加VRAM或调整模型参数减少内存占用。
然后,我需要验证这些步骤的可行性。比如,降级PyTorch可能有效,但需要用户确认环境管理的可行性。修改第三方库的代码虽然可行,但可能影响后续维护。检查更新版本是最安全的做法,但可能用户已经使用最新版。调整配置参数可能需要用户了解训练设置的细节。
另外,用户可能不太熟悉PyTorch版本更新带来的变化,需要解释清楚问题的根源。同时,提醒用户注意安全,如果选择设置weights_only=False,必须确保文件来源可靠,避免执行恶意代码。
总结下来,应该分步骤建议用户先尝试降级PyTorch,或者检查库的更新。如果不行,再考虑修改代码中的torch.load参数,并强调安全注意事项。此外,也可以建议用户调整模型加载选项,比如关闭offload_input_embeddings,或者增加可用内存,避免触发卸载操作。</think>这个错误信息表明在使用Unsloth和LLaMA-Factory进行模型训练时遇到了PyTorch的权重加载问题。以下是分步骤的解决方案分析:
---
### **错误原因分析**
1. **PyTorch版本兼容性问题**
- PyTorch 2.6及以上版本将`torch.load()`的`weights_only`参数默认值从`False`改为`True`
- 当尝试加载通过`offload_input_embeddings`卸载到磁盘的嵌入权重时,触发了不支持的操作符错误(Unsupported operand 149)
2. **Unsloth的内存优化机制**
- Unsloth试图将输入嵌入层(input_embeddings)卸载到磁盘以节省显存
- 此操作依赖的`torch.load`调用因PyTorch版本变更而失败
---
### **解决方案**
#### **方法1:降级PyTorch版本**
```bash
# 将PyTorch降级到2.5.0或更低版本
pip install torch==2.5.0 torchvision==0.15.0 torchaudio==2.5.0
```
#### **方法2:修改Unsloth源码**
1. 定位文件:`/root/miniconda3/lib/python3.12/site-packages/unsloth/models/_utils.py`
2. 修改第760行:
```python
# 原代码
offloaded_W = torch.load(filename, map_location = "cpu", mmap = True)
# 修改为(显式设置weights_only=False)
offloaded_W = torch.load(filename, map_location="cpu", mmap=True, weights_only=False)
```
⚠️ **注意**:需确保加载的权重文件来源可信,避免执行恶意代码
#### **方法3:禁用输入嵌入卸载**
在训练命令中添加参数禁用Unsloth的显存优化:
```bash
--disable_unsloth_offloading # 禁止嵌入层卸载
--disable_unsloth_check # 跳过Unsloth的兼容性检查
```
#### **方法4:调整内存配置**
尝试通过以下方式减少显存占用:
1. 降低`batch_size`
2. 使用梯度累积(gradient_accumulation_steps)
3. 启用混合精度训练(fp16/bf16)
---
### **补充说明**
1. **关于Dropout的警告**
```bash
[WARNING] Unsloth: Dropout = 0 is supported for fast patching. You are using dropout = 0.01.
```
- 建议将Dropout设为0以获得最佳性能(需在训练参数中设置`--dropout 0`)
2. **PyTorch版本兼容性建议**
- 推荐使用PyTorch 2.0.x ~ 2.5.x版本
- 可通过`conda list torch`检查当前版本
---
如果问题仍未解决,建议:
1. 检查LLaMA-Factory和Unsloth的最新版本
2. 在社区提交完整的训练配置参数和复现步骤
3. 尝试在NVIDIA官方Docker环境(如`nvidia/cuda:12.2.0-base-ubuntu22.04`)中复现问题
阅读全文
相关推荐

















