見出し画像

【強化学習自動売買】~環境構築編②~Google ColabへSSH+可視化

先日,仮想通貨の板情報を推定する,相関0.9超えのモデルを構築しました.

しかし,取引するモジュールがなく,現在このモデルを活かしきれていません.そこで,取引するモジュールを強化学習を使ってエンドツーエンドで構築していこうと思います.

ただ,強化学習を使ったことがないので,環境構築から始まり,サンプルプログラムの実行などからやっていこうと思います.

▼▼▼▼▼▼前回記事▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

1.Google Colabの設定

下記の記事を参考にしました.

ngrokのアカウントが必要ですので,作成しておきます.

画像1

Google Colabでノートブックを開く

画像2

開いたら下記コマンドコピペして,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では普通に強化学習の結果を可視化しようとするとエラーが出ます!!!

画像3

---------------------------------------------------------------------------
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

#自動売買

#仮想通貨自動売買

#可視化

#GoogleColab

#SSH



この記事が気に入ったらサポートをしてみませんか?