运行Stable Baselines3 Colab笔记本遇GLException错误求助
解决Colab中Stable Baselines3录屏GLException错误的方法
核心原因
Colab运行在无桌面环境的云端服务器上,缺少OpenGL所需的图形上下文,而默认的record_video函数依赖桌面窗口渲染环境,因此触发该错误。
具体解决方案
1. 切换渲染器为rgb_array
修改record_video调用时的环境配置,明确指定使用无窗口的rgb_array渲染模式:
from stable_baselines3.common.env_util import make_vec_env # 创建环境时指定渲染模式 env = make_vec_env('CartPole-v1', n_envs=1, render_mode='rgb_array') record_video('CartPole-v1', model, video_length=500, prefix='ppo-cartpole', env=env)
2. 安装虚拟显示工具(备用方案)
如果第一种方法无效,可安装Xvfb创建虚拟桌面环境,为OpenGL提供上下文:
- 先执行安装命令:
!apt-get install -y xvfb python-opengl
- 然后在代码前添加虚拟显示启动代码:
from pyvirtualdisplay import Display display = Display(visible=0, size=(1400, 900)) display.start()
之后再运行record_video函数即可。
3. 直接使用环境的render方法手动录屏(进阶)
如果上述方法仍有问题,可手动循环调用环境的render方法生成帧,再拼接成视频:
import cv2 import numpy as np import gym env = gym.make('CartPole-v1', render_mode='rgb_array') obs = env.reset() frames = [] for _ in range(500): action, _states = model.predict(obs) obs, rewards, dones, info = env.step(action) frame = env.render() frames.append(frame) if dones: obs = env.reset() # 保存视频 height, width, _ = frames[0].shape video_writer = cv2.VideoWriter('ppo-cartpole.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (width, height)) for frame in frames: # OpenCV默认BGR格式,转换为RGB video_writer.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)) video_writer.release()
内容的提问来源于stack exchange,提问作者Kei TSUKAMOTO
相关产品推荐
相关产品推荐

