You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FastAI load_learner()时遇__builtin__模块找不到错误

解决FastAI load_learner()触发ModuleNotFoundError: No module named '__builtin__'问题

问题背景

  • 为减少代码量,希望使用FastAI的load_learner()加载预存模型,而非每次重新创建learner实例
  • 曾用dill替代pickle保存模型,怀疑存在兼容性问题
  • 调用load_learner()时触发报错:ModuleNotFoundError: No module named '__builtin__',已知Python 3中__builtins__已更名为builtins

环境版本

torch==1.7.1
fastai==2.7.7
fastcore==1.5.6
torchvision==0.8.2
Python 3.9

相关代码(predict.py)

if __name__ == '__main__':
    file_path = project_params.file_path
    learner = project_params.learner
    model = load_learner(file_path.model, cpu=learner.cpu)  # 报错行

配置文件(params.yaml)

learner:
  cpu: False
# ...
file_path:
  model: ./project_model/data/learner.pkl

完整报错日志

(venv) me@ubuntu-pcs:~/PycharmProjects/project$ python project_model/predict.py
'foo/data/bar.dvc' didn't change, skipping    
Running stage 'predict':
> python foo/predict.py
/home/me/miniconda3/envs/venv/lib/python3.9/site-packages/torch/cuda/__init__.py:52: UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at  /pytorch/c10/cuda/CUDAFunctions.cpp:100.)
  return torch._C._cuda_getDeviceCount() > 0
Traceback (most recent call last):
  File "/home/me/PycharmProjects/project/foo/predict.py", line 35, in <module>
    model = load_learner(file_path.model, cpu=learner.cpu)
  File "/home/me/miniconda3/envs/venv/lib/python3.9/site-packages/fastai/learner.py", line 414, in load_learner
    try: res = torch.load(fname, map_location=map_loc, pickle_module=pickle_module)
  File "/home/me/miniconda3/envs/venv/lib/python3.9/site-packages/torch/serialization.py", line 595, in load
    return _legacy_load(opened_file, map_location=pickle_module, **pickle_load_args)
  File "/home/me/miniconda3/envs/venv/lib/python3.9/site-packages/torch/serialization.py", line 764, in _legacy_load
    magic_number = pickle_module.load(f, **pickle_load_args)
ModuleNotFoundError: No module named '__builtin__'
ERROR: failed to reproduce 'predict': failed to run: python foo/predict.py, exited with 1

解决方案

方案1:修复dill序列化的兼容问题

如果模型是用dill保存的,加载时需指定pickle模块为dill,并添加Python 3的兼容补丁:

import builtins
import dill
from fastai.learner import load_learner

# 给dill添加__builtin__别名,适配Python3的命名变更
dill._dill._builtin = builtins

# 加载模型时指定pickle_module参数
model = load_learner(file_path.model, cpu=learner.cpu, pickle_module=dill)

方案2:使用FastAI原生方法重新保存模型

若上述方案无效,建议放弃dill,改用FastAI官方的export()方法保存模型:

# 在训练代码中执行导出
learn.export("learner.pkl")

之后直接用load_learner()加载即可,无需额外配置。

方案3:确保环境版本一致性

检查保存模型和加载模型的Python、FastAI、PyTorch版本完全一致,避免因版本差异导致的序列化不兼容问题。

内容的提问来源于stack exchange,提问作者DanielBell99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:50:25