d3rlpy设置use_gpu=True后训练未使用GPU问题求助
d3rlpy训练时GPU不生效排查方案
- use_gpu参数设置方式错误
别在模型实例化完了再改use_gpu属性,d3rlpy初始化的时候就会读取设备配置构建网络、绑定优化器,事后修改属性根本不会触发内部的设备迁移逻辑,训练循环也读不到这个改动。正确写法是初始化算法的时候直接把参数传进去:
如果要指定具体显卡,直接传对应显卡序号即可,比如the_model = continuous_models[_model](scaler=scaler, use_gpu=True)use_gpu=0对应第一块CUDA设备。 - 先确认模型实际运行设备
别光看系统监控的GPU占用率就判定没走GPU,训练启动前加一行代码打印模型参数所在的实际设备:
如果输出为print(next(the_model.impl.q_function.parameters()).device)cuda:0类结果,说明模型已经加载到显卡,利用率低基本是数据加载、预处理全在CPU侧运行形成IO瓶颈,显卡一直在等数据所以看起来没在工作;如果输出为cpu才是真的设备配置未生效。 - 手动强制迁移设备绕过build阶段默认fallback
如果正确传参后还是识别不到GPU,可以在build_with_dataset执行完成、调用fit之前,手动执行一次设备迁移,强制把模型所有组件搬到显卡:the_model.build_with_dataset(dataset) the_model.to("cuda") - 排查手动构造Scaler导致的设备不匹配问题
手动传入numpy数组构造的StandardScaler时,部分d3rlpy版本不会自动把scaler的均值、方差参数迁移到GPU,训练时CPU、GPU张量混用会触发框架自动fallback到CPU运行。可以直接在初始化算法时传scaler="standard",让框架自动基于数据集计算归一化参数,自动适配运行设备,避免手动构造scaler带来的设备不一致问题。 - 检查版本兼容问题
0.9版本之前的旧版d3rlpy存在CUDA设备识别逻辑bug,和适配CUDA11.6的高版本PyTorch搭配时经常出现GPU配置失效的问题,先升级到最新稳定版:
升级完成后重新运行代码验证即可。pip install --upgrade d3rlpy
内容的提问来源于stack exchange,提问作者compmonks
相关产品推荐
相关产品推荐

