在服務器上使用python-gym出現的關於顯示的問題


疫情期間在家連着實驗室的服務器繼續學習,用到關於強化學習相關的包 gym 時,在render上出現了問題。

 

環境:

Ubuntu18.04 服務器
python 3.7.6
gym 0.17.1
jupyter 1.0.0
ipython 7.13.0
matplotlib 3.2.1

 

用遠程開 jupyter notebook 並在 jupyter 中運行 gym 的 env,調用 env.render() 時出現了如下報錯:

 

NoSuchDisplayException: Cannot connect to "None"

 

在 StackOverflow 上找到了解決方案:

首先在服務器上安裝 xvfb ,並用 xvfb 運行可顯示的 jupyter notebook:

1 $ sudo apt-get install xvfb 2 $ xvfb-run -s "-screen 0 1400x900x24" jupyter notebook

然后在 jupyter 中加入代碼:

1 import matplotlib.pyplot as plt 2 %matplotlib inline 3 from IPython import display

為顯示加上一個函數:

1 def show_state(env, step=0, info=""): 2     plt.figure(3) 3  plt.clf() 4     plt.imshow(env.render(mode='rgb_array')) 5     plt.title("Step: %d %s" % (step, info)) 6     plt.axis('off') 7 
8     display.clear_output(wait=True) 9     display.display(plt.gcf())

然后在運行過程中將 env.render() 替換為 show_state(env, step, info) 的調用即可。

在任意env.step()函數調用、環境狀態改變之后都可以調用show_state函數來展示圖像

應將env傳入,並可以傳入步數step,以及想要顯示的信息文字串info

 

當使用 xvfb-run 時可能遇到上一次調用沒有關閉的情況,在 StackOverflow 上也找到了相關解決方法,只要在 xvfb-run 前使用指令:

1 $ pkill Xvfb

關掉之前的就可以正常開始新的了。

 

附 StackOverflow  具體內容網址:

https://stackoverflow.com/questions/40195740/how-to-run-openai-gym-render-over-a-server

https://stackoverflow.com/questions/16726227/xvfb-failed-start-error


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM