【強化学習自動売買】~環境構築編②~Google ColabへSSH+可視化
先日,仮想通貨の板情報を推定する,相関0.9超えのモデルを構築しました.
しかし,取引するモジュールがなく,現在このモデルを活かしきれていません.そこで,取引するモジュールを強化学習を使ってエンドツーエンドで構築していこうと思います.
ただ,強化学習を使ったことがないので,環境構築から始まり,サンプルプログラムの実行などからやっていこうと思います.
▼▼▼▼▼▼前回記事▼▼▼▼▼▼
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
1.Google Colabの設定
下記の記事を参考にしました.
ngrokのアカウントが必要ですので,作成しておきます.
Google Colabでノートブックを開く
開いたら下記コマンドコピペして,ngrokのトークン部分を変更
# -*- coding: utf-8 -*-
"""gym_sample.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1aqJ2szJjOxz0deyybW0K0HqQWujCwV6q
"""
import random, string, urllib.request, json, getpass
#Generate root password
password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(20))
#Download ngrok
! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
! unzip -qq -n ngrok-stable-linux-amd64.zip
#Setup sshd
! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null
#Set root password
! echo root:$password | chpasswd
! mkdir -p /var/run/sshd
! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
! echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
! echo "LD_LIBRARY_PATH=/usr/lib64-nvidia" >> /root/.bashrc
! echo "export LD_LIBRARY_PATH" >> /root/.bashrc
#Run sshd
get_ipython().system_raw('/usr/sbin/sshd -D &')
authtoken="**************************"
#Create tunnel
get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 22 &')
#Get public address and print connect command
with urllib.request.urlopen('http://localhost:4040/api/tunnels') as response:
data = json.loads(response.read().decode())
(host, port) = data['tunnels'][0]['public_url'][6:].split(':')
print(f'SSH command: ssh -p{port} root@{host}')
#Print root password
print(f'Root password: {password}')
無事に接続完了
2.open gym のサンプルプログラム実行
Google Colabでは普通に強化学習の結果を可視化しようとするとエラーが出ます!!!
---------------------------------------------------------------------------
NoSuchDisplayException Traceback (most recent call last)
<ipython-input-1-e6de255ff97e> in <module>()
3 env.reset()
4 for _ in range(1000):
----> 5 env.render()
6 env.step(env.action_space.sample())
9 frames
/usr/local/lib/python3.7/dist-packages/pyglet/canvas/xlib.py in __init__(self, name, x_screen)
121 self._display = xlib.XOpenDisplay(name)
122 if not self._display:
--> 123 raise NoSuchDisplayException('Cannot connect to "%s"' % name)
124
125 screen_count = xlib.XScreenCount(self._display)
NoSuchDisplayException: Cannot connect to "None"
そこで
下記のコマンドでワンパンであることが分かったので記載しておきます.
!apt install xvfb -y
!pip install pyvirtualdisplay
!pip install piglet
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1400, 900))
display.start()
import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
from pyvirtualdisplay import Display
#Started virtual display
display = Display(visible=0, size=(400, 300))
display.start()
#Now Finish move
env = gym.make('CartPole-v0')
for i_episode in range(20):
observation = env.reset()
for t in range(100):
plt.imshow(env.render(mode='rgb_array'))# CHANGED
ipythondisplay.clear_output(wait=True) # ADDED
ipythondisplay.display(plt.gcf()) # ADDED
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
無事に可視化できました.
3.おわりに
可視化が想像以上に難航したため,今回はSSHと可視化部分は別のランタイムで構築して検証しました.
次回は,SSH+可視化がワンパンで終わるコードを作成していこうと思います.
#強化学習
#自動売買強化学習プロジェクト
#Python
#OpenAIGym
この記事が気に入ったらサポートをしてみませんか?