关于model must be a LightingModule or torch._dynamo.OptimizedModule got TemporalFusionTransformer问题

train.py与base_model.py中的PyTorchLightning导入差异,
部署运行你感兴趣的模型镜像

之前也写过该问日的解决方法,但是学长在调试代码的时候问我的问题让我决定完善这个问题的答复。

检查自己的运行文件中import的写法

我的运行文件名为train.py文件,如下显示为我的import写法:

import pytorch_lightning as pl
from pytorch_lightning.callbacks import EarlyStopping, LearningRateMonitor
from pytorch_lightning.loggers import TensorBoardLogger
import torch
import wandb
import yaml
import os
import argparse
import torch.nn as nn
import random
from config import Cfg
from pytorch_forecasting import TemporalFusionTransformer, TimeSeriesDataSet
from pytorch_forecasting.data import GroupNormalizer
from pytorch_forecasting.data.encoders import EncoderNormalizer, TorchNormalizer
from pytorch_forecasting.metrics import QuantileLoss, SMAPE, MAE, RMSE, MAPE, NormalDistributionLoss
from pytorch_lightning.callbacks import ModelCheckpoint

检查base_model.py文件中的import写法 

如下是base_model.py文件中的import写法

form lightning.pytorch import LightningModule,Trainer

在base_model.py文件中我们只需要关注这一句就可以了。

如何修改 

两者区别可以看出:我们自己的运行文件中使用的是import pytorch_lightning as pl导入pytorch lightning库,而base_model.py文件中使用的是form lightning.pytorch import LightningModule,Trainer 导入pytorch lightning库,所以将自己的运行文件中所有pytorch_lightning替换为lightning.pytorch,代码也是可以运行的。

修改base_model.py文件中的import写法 

以我的代码为例,我们也可以在base_model.py文件中将form lightning.pytorch import LightningModule,Trainer修改为form pytorch_lightning import LightningModule,Trainer,但是在代码后续运行时会在

trainer.test(
        model=best_tft,
        dataloaders=test_dataloader,
    )

这一步继续报错显示model must be a LightingModule or torch._dynamo.OptimizedModule got TemporalFusionTransformer,这时候为了得到数据集的测试结果我通常会将这一部分与训练部分分开为两个py文件进行运行,但是这样需要我们在切换两个文件的同时也修改base_model.py文件中的import写法,过于繁琐。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>好的,我现在需要帮助用户解决PyInstaller打包过程中遇到的隐藏导入错误。用户之前已经询问过类似的参数问题,现在遇到了具体的模块未找到的错误。 首先,用户提供的错误信息显示多个torch相关模块找不到,比如torch._dynamotorch._inductortorch.fx等。这些模块都属于PyTorch的动态图优化和编译部分。可能的原因是PyInstaller在打包时没有正确检测到这些子模块,导致需要手动指定隐藏导入。 回顾之前的对话,用户已经使用了--hidden-import参数来包含这些模块,但可能没有覆盖所有必要的子模块。例如,torch._dynamo.backends可能没有被显式声明。此外,用户的PyTorch版本可能影响模块的存在与否,比如某些模块可能只在特定版本中存在,或者安装方式不同导致路径问题。 接下来,我应该考虑用户可能没有更新到最新的PyInstaller或PyTorch版本,导致兼容性问题。另外,用户可能没有正确设置路径,或者环境变量的问题导致PyInstaller无法找到这些模块。还可能存在动态导入的情况,PyInstaller无法静态分析到这些依赖。 解决方案方面,除了添加更多的--hidden-import参数,可能需要使用--collect-all来强制包含整个包,尤其是当模块结构复杂或动态加载时。另外,检查PyTorch的安装路径是否正确,并确保所有需要的子模块都存在。用户可能需要升级PyInstaller以支持更好的模块检测,或者使用hook文件来自定义导入规则。 另外,用户可能需要检查他们的代码中是否有动态导入这些模块的情况,比如通过字符串变量或条件导入,这会导致PyInstaller无法正确分析依赖关系。在这种情况下,显式声明所有可能的隐藏导入是必要的。 最后,建议用户提供更多的上下文信息,如PyTorch版本、PyInstaller版本和操作系统环境,以便更准确地诊断问题。同时,运行PyInstaller时启用调试日志可以帮助定位问题所在。</think>$\boxed{\text{错误根源分析}}$ 这些错误表明 **PyTorch动态图优化模块** 未被PyInstaller自动检测到,主要原因有: 1. **动态导入机制**:`torch._dynamo`等模块在运行时通过反射加载 2. **C扩展依赖**:部分模块依赖编译后的二进制文件(如`_C.so`) 3. **包结构嵌套**:PyTorch 2.x的模块层级较深,PyInstaller静态分析难以覆盖 $\boxed{\text{解决方案}}$ **第一步:扩展隐藏导入声明** ```bash --hidden-import "torch._dynamo" \ --hidden-import "torch._dynamo.backends" \ --hidden-import "torch._inductor" \ --hidden-import "torch._dynamo.utils" \ --hidden-import "torch.fx" \ --hidden-import "torch._decomp" ``` *注:必须完整匹配错误提示中的模块路径* **第二步:强制包含PyTorch子包** ```bash --collect-submodules "torch._dynamo" \ --collect-submodules "torch.fx" ``` *作用:递归收集指定模块下的所有子模块* **第三步:验证PyTorch安装完整性** 在Python环境中执行以下测试: ```python import torch._dynamo.backends # 应无ImportError from torch.fx import symbolic_trace # 验证符号跟踪功能 print(torch.__version__) # 确认版本≥2.0 ``` *若出现错误,建议重装PyTorch:* ```bash pip install --force-reinstall torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu118 ``` $\boxed{\text{进阶调试技巧}}$ 1. **依赖可视化** ```bash pyi-bindepend your_script.py # 显示所有动态库依赖 ``` 2. **Hook文件配置** 创建`hook-torch.py`文件: ```python # PyInstaller钩子文件示例 hiddenimports = [ 'torch._dynamo', 'torch._dynamo.backends', 'torch._inductor', 'torch._decomp', 'torch.fx' ] ``` 通过参数加载钩子: ```bash --additional-hooks-dir=. ``` $\boxed{\text{技术原理图解}}$ ``` PyInstaller打包流程 ┌──────────────┐ ┌───────────────┐ │ 入口脚本分析 │───×──→│ 动态导入漏检 │ └──────────────┘ └───────────────┘ │ ▼ ┌──────────────┐ ┌───────────────────┐ │ 静态依赖扫描 │───×──→│ C扩展模块检测失败 │ └──────────────┘ └───────────────────┘ │ ▼ ┌──────────────┐ ┌──────────────────┐ │ 生成spec文件 │───×──→│ 子模块未递归包含 │ └──────────────┘ └──────────────────┘ ``` *注:`×`表示问题触发点* 建议补充以下参数组合使用: ```bash --hidden-import "torch._dynamo" \ --collect-submodules "torch" \ --collect-all "torch._dynamo" \ --log-level=DEBUG ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值