仅CPU环境下Ray RLlib初始化PPOTrainer遇AttributeError问题
解决RLlib+CPU版PyTorch环境下'NoneType' object has no attribute 'cuda'错误
问题根源
Ray 2.1.0与PyTorch 2.3.0+cpu版本存在兼容性问题:即使配置num_gpus=0,RLlib内部的RolloutWorker初始化逻辑仍会尝试调用CUDA相关方法,而CPU版PyTorch中torch.cuda相关对象为None,触发AttributeError。Google Colab环境的Ray或PyTorch版本组合刚好规避了这个问题。
具体解决方案
1. 强制禁用CUDA设备检测
在代码最开头添加环境变量设置,让PyTorch彻底看不到GPU设备:
import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
这会阻止任何PyTorch代码触发CUDA相关调用,从根源避免错误。
2. 明确指定RLlib使用CPU设备
在RLlib配置中添加torch_device参数,强制框架使用CPU:
rl_config = { "num_gpus": 0, "framework": "torch", "torch_device": "cpu", # 关键配置,覆盖默认设备检测逻辑 # 你的其他配置项(如学习率、批次大小等) }
3. 降级Ray版本至兼容版本
Ray 2.1.0的GPU检测逻辑存在bug,尝试降级到与PyTorch 2.3.0+cpu兼容的版本(如Ray 2.0.0):
pip install ray[rllib]==2.0.0 --force-reinstall
4. 手动指定RolloutWorker的设备
如果训练器初始化仍有问题,可手动创建RolloutWorker并指定CPU设备:
from ray.rllib.agents.ppo import PPOTrainer from ray.rllib.rollout import RolloutWorker import gym import or_gym # 环境创建函数 def env_creator(config): return gym.make("InvManagement-v1") # 配置更新 rl_config.update({"torch_device": "cpu", "num_gpus": 0}) # 手动初始化Worker worker = RolloutWorker( env_creator=env_creator, config=rl_config, device="cpu" ) # 初始化训练器 trainer = PPOTrainer(config=rl_config, env="InvManagement-v1")
内容的提问来源于stack exchange,提问作者Sumaya
相关产品推荐
相关产品推荐

