[INFO|modeling_utils.py:2241] 2025-07-15 10:13:01,778 >> Instantiating Qwen2_5_VisionTransformerPretrainedModel model under default dtype torch.bfloat16. [INFO|modeling_utils.py:2241] 2025-07-15 10:13:01,789 >> Instantiating Qwen2_5_VLTextModel model under default dtype torch.bfloat16. Traceback (most recent call last): File "F:\anaconda\envs\qwen\lib\site-packages\gradio\queueing.py", line 715, in process_events response = await route_utils.call_process_api( File "F:\anaconda\envs\qwen\lib\site-packages\gradio\route_utils.py", line 322, in call_process_api output = await app.get_blocks().process_api( File "F:\anaconda\envs\qwen\lib\site-packages\gradio\blocks.py", line 2191, in process_api result = await self.call_function( File "F:\anaconda\envs\qwen\lib\site-packages\gradio\blocks.py", line 1714, in call_function prediction = await utils.async_iteration(iterator) File "F:\anaconda\envs\qwen\lib\site-packages\gradio\utils.py", line 739, in async_iteration return await anext(iterator) File "F:\anaconda\envs\qwen\lib\site-packages\gradio\utils.py", line 733, in __anext__ return await anyio.to_thread.run_sync( File "F:\anaconda\envs\qwen\lib\site-packages\anyio\to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( File "F:\anaconda\envs\qwen\lib\site-packages\anyio\_backends\_asyncio.py", line 2470, in run_sync_in_worker_thread return await future File "F:\anaconda\envs\qwen\lib\site-packages\anyio\_backends\_asyncio.py", line 967, in run result = context.run(func, *args) File "F:\anaconda\envs\qwen\lib\site-packages\gradio\utils.py", line 716, in run_sync_iterator_async return next(iterator) File "F:\anaconda\envs\qwen\lib\site-packages\gradio\utils.py", line 877, in gen_wrapper response = next(iterator) File "F:\qwen\LLaMA-Factory\src\llamafactory\webui\chatter.py", line 158, in load_model super().__init__(args) File "F:\qwen\LLaMA-Factory\src\llamafactory\chat\chat_model.py", line 53, in __init__ self.engine: BaseEngine = HuggingfaceEngine(model_args, data_args, finetuning_args, generating_args) File "F:\qwen\LLaMA-Factory\src\llamafactory\chat\hf_engine.py", line 59, in __init__ self.model = load_model( File "F:\qwen\LLaMA-Factory\src\llamafactory\model\loader.py", line 173, in load_model model = load_class.from_pretrained(**init_kwargs) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\models\auto\auto_factory.py", line 571, in from_pretrained return model_class.from_pretrained( File "F:\anaconda\envs\qwen\lib\site-packages\transformers\modeling_utils.py", line 309, in _wrapper return func(*args, **kwargs) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\modeling_utils.py", line 4508, in from_pretrained model = cls(config, *model_args, **model_kwargs) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\models\qwen2_5_vl\modeling_qwen2_5_vl.py", line 1799, in __init__ self.model = Qwen2_5_VLModel(config) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\models\qwen2_5_vl\modeling_qwen2_5_vl.py", line 1393, in __init__ self.language_model = Qwen2_5_VLTextModel._from_config(config.text_config) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\modeling_utils.py", line 309, in _wrapper return func(*args, **kwargs) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\modeling_utils.py", line 2077, in _from_config model = cls(config, **kwargs) File "F:\anaconda\envs\qwen\lib\site-packages\transformers\models\qwen2_5_vl\modeling_qwen2_5_vl.py", line 1101, in __init__ self.post_init() File "F:\anaconda\envs\qwen\lib\site-packages\transformers\modeling_utils.py", line 1969, in post_init if v not in ALL_PARALLEL_STYLES: TypeError: argument of type 'NoneType' is not iterable
时间: 2025-07-20 09:29:56 浏览: 10
<think>我们再次遇到了相同的错误:TypeError: argument of type 'NoneType' is not iterable
位置:transformers库的modeling_utils.py文件的post_init()方法中,检查v是否在ALL_PARALLEL_STYLES中时,v为None。
之前的解决方案已经讨论过,可能是由于模型配置中缺少某些参数(如parallel_style)导致。但这次我们注意到在错误之前有两条日志:
[INFO|modeling_utils.py:2241] 2025-07-15 10:13:01,778 >> Instantiating Qwen2_5_VisionTransformerPretrainedModel model under default dtype torch.bfloat16.
[INFO|modeling_utils.py:2241] 2025-07-15 10:13:01,789 >> Instantiating Qwen2_5_VLTextModel model under default dtype torch.bfloat16.
这表明模型正在使用torch.bfloat16数据类型进行实例化。但是,错误仍然出现在post_init()方法中。
根据transformers库的源码(modeling_utils.py),在post_init()方法中有这样一段:
for k, v in self._init_parallel_metadata():
if v not in ALL_PARALLEL_STYLES:
raise ValueError(
f"`parallel_style` should be one of {ALL_PARALLEL_STYLES}, but got {v}."
)
setattr(self, k, v)
问题在于v是None,而None不是可迭代的对象(即不能使用`in`操作符)。
因此,我们需要检查为什么v会是None。这通常是因为在模型配置中,与并行化相关的元数据没有被正确设置。
针对Qwen2.5-VL模型,可能的原因和解决方案:
1. 模型配置问题:确保下载的模型文件包含正确的config.json,并且其中包含与并行化相关的配置项(如`parallel_style`)。
可以检查config.json中是否有类似`parallel_style`的字段,或者是否有关于模型并行的其他设置。
2. 库版本问题:尽管之前已经调整了版本,但可能仍然存在不兼容。特别是Qwen2.5-VL是一个较新的模型,可能需要更新版本的transformers库。
根据之前的依赖冲突,我们安装了transformers==4.52.4,但可能这个版本还不支持Qwen2.5-VL?注意,Qwen2.5-VL是在2025年发布的(根据日志时间戳),因此需要较新的transformers版本。
然而,我们的环境要求transformers<=4.52.4(因为LLaMA-Factory的要求),但新模型可能需要更高版本。这是一个矛盾。
3. 临时规避:修改transformers库的源码,在modeling_utils.py的post_init()方法中添加对v为None的处理。
由于我们无法改变模型配置(除非重新下载或等待官方更新),并且受限于LLaMA-Factory的版本要求,我们可能只能选择修改源码。
修改建议(在transformers库的modeling_utils.py文件中):
找到报错的位置(大约1969行),将:
for k, v in self._init_parallel_metadata():
if v not in ALL_PARALLEL_STYLES:
改为:
for k, v in self._init_parallel_metadata():
if v is None:
continue # 跳过None值
if v not in ALL_PARALLEL_STYLES:
这样,当v为None时,跳过检查,避免错误。
注意:这只是临时解决方案,最好还是检查模型配置并确保正确。
4. 尝试使用完整的模型名称:确保在加载模型时使用的模型标识是正确的,比如"Qwen/Qwen2.5-VL",这样transformers会自动下载正确的配置。
5. 检查模型文件:确认下载的模型文件是否完整,特别是config.json文件是否存在且内容正确。
步骤总结:
1. 检查模型目录下的config.json,查看是否有关于并行的配置项(如`parallel_style`)。如果没有,可能需要手动添加或等待官方更新。
2. 如果不想修改源码,可以尝试升级transformers到更高版本(但要注意LLaMA-Factory的版本限制),或者降级模型(如果可用)。
3. 修改transformers源码(临时方案)。
由于我们无法直接控制用户环境,这里提供两种解决方案:
方案一:修改transformers源码(临时)
定位到transformers库的modeling_utils.py文件(路径如:F:\anaconda\envs\qwen\lib\site-packages\transformers\modeling_utils.py),找到post_init方法中的循环,添加对None的判断。
方案二:检查并修复模型配置
在模型目录(如果是本地保存的模型)的config.json中,添加一个默认的并行配置。例如,在config.json的根级别添加:
"parallel_style": "data"
注意:`ALL_PARALLEL_STYLES`的定义在modeling_utils.py中,通常包括:`["data", "tensor", "sequence", "pipeline", "expert"]`。我们可以尝试设置为"data"(数据并行)。
但是,修改模型配置需要知道确切的配置结构,这需要参考Qwen2.5-VL的官方文档。
考虑到时间,我们建议先尝试修改源码的临时方案。
修改代码的具体位置(示例):
在modeling_utils.py中,找到如下代码段(可能在第1969行附近):
for k, v in self._init_parallel_metadata():
if v not in ALL_PARALLEL_STYLES:
raise ValueError(
f"`parallel_style` should be one of {ALL_PARALLEL_STYLES}, but got {v}."
)
setattr(self, k, v)
修改为:
for k, v in self._init_parallel_metadata():
# 如果v是None,跳过检查(可能是未设置并行配置,但模型不需要并行)
if v is None:
setattr(self, k, v)
continue
if v not in ALL_PARALLEL_STYLES:
raise ValueError(
f"`parallel_style` should be one of {ALL_PARALLEL_STYLES}, but got {v}."
)
setattr(self, k, v)
这样修改后,即使v为None,也会设置属性,但不会引发错误。
注意:修改后需要重新启动程序。
如果问题仍然存在,可能需要进一步检查。
由于错误信息相同,我们暂时按此处理。
另外,请注意,这个错误可能在新版本的transformers中已经修复,但受限于LLaMA-Factory的版本要求,我们无法升级到更高版本,所以修改源码是可行的临时方案。
我们提供解决方案如下:</think>### Qwen2.5-VL模型加载错误分析及解决方案
根据错误日志,核心问题仍然是:
```
TypeError: argument of type 'NoneType' is not iterable
```
发生在`transformers`库的`modeling_utils.py`文件的`post_init()`方法中(第1969行)。结合日志信息,该错误出现在实例化`Qwen2_5_VLTextModel`模型时。
### 根本原因分析
1. **模型配置缺失**
Qwen2.5-VL模型在初始化时,`parallel_style`配置项未正确设置(值为`None`),导致在检查`if v not in ALL_PARALLEL_STYLES`时出现类型错误。
2. **版本兼容性问题**
您使用的`transformers==4.53.2`与LLaMA-Factory要求的`transformers<=4.52.4`存在兼容性问题(如日志所示):
```
llamafactory requires transformers<=4.52.4, but you have transformers 4.53.2
```
### 完整解决方案
#### 步骤1:修正依赖版本
```bash
# 精确安装兼容版本
pip install transformers==4.52.4 peft==0.15.2 tokenizers==0.21.1
```
#### 步骤2:修改模型加载方式
在LLaMA-Factory的模型加载代码中添加显式配置:
```python
from transformers import AutoConfig, AutoModelForCausalLM
# 加载前强制设置并行配置
config = AutoConfig.from_pretrained("Qwen/Qwen2.5-VL")
config.parallel_style = "data" # 有效值: ["data", "tensor", "pipeline"]
# 使用修正后的配置加载模型
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-VL",
config=config,
torch_dtype=torch.bfloat16,
device_map="auto"
)
```
#### 步骤3:临时修改transformers源码
定位文件:`.../site-packages/transformers/modeling_utils.py`
```python
# 约1969行处修改
# 原始代码
if v not in ALL_PARALLEL_STYLES:
# 修改为
if v is not None and v not in ALL_PARALLEL_STYLES:
```
#### 步骤4:验证解决方案
```python
# 测试脚本
import torch
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-VL",
torch_dtype=torch.bfloat16,
device_map="auto"
)
print("模型加载成功!")
```
阅读全文
相关推荐



















