PyTorch运行TD3代码遇PicklingError:reset_code无法序列化求助
PyTorch TD3代码PicklingError问题解决方法
错误原因
该错误由PyTorch Dynamo模块的序列化限制导致,当代码涉及多进程(如强化学习中的并行环境)时,Dynamo内部的reset_code函数无法被pickle序列化,与GPU/CPU运行环境无关,重装PyTorch无法解决是因为未触及问题根源。
解决办法
- 禁用PyTorch Dynamo:在代码最开头添加以下代码:
或通过环境变量禁用:import torch torch._dynamo.config.disable = True- Linux/macOS终端:
export TORCHDYNAMO_DISABLE=1 - Windows命令行:
set TORCHDYNAMO_DISABLE=1
- Linux/macOS终端:
- 调整多进程启动方式:若代码使用
multiprocessing或强化学习并行环境,将进程启动方式设为spawn,示例:import multiprocessing multiprocessing.set_start_method('spawn') - 降级PyTorch版本:若上述方法无效,尝试降级到2.0.x稳定版本,以CUDA 117为例,执行命令:
pip install torch==2.0.1+cu117 torchvision==0.15.2+cu117 torchaudio==2.0.2+cu117 --index-url https://download.pytorch.org/whl/cu117 - 移除
torch.compile装饰器:若代码中使用了@torch.compile装饰模型或函数,暂时移除该装饰器,避免触发Dynamo相关序列化问题
内容的提问来源于stack exchange,提问作者Robin L'hyver
相关产品推荐
相关产品推荐

