本格的なエロチャットAIを作りたい その6(Google Colabのランタイムへの接続/切断削除をローカルPCから行う)
前回検証したとおり、リソースの無駄遣いを最小限に抑えるため、ローカルPCからランタイムへの接続/切断削除を行うようにする。
Google colabのランタイムへの接続/切断削除は意外と簡単
pyautoguiを使って、ローカルPCのブラウザ上のGoogle Colabを制御する。
# Google Colabを起動させる関数を定義
# 開いている「LLM_API.ipynb - Colab」タブをフォーカスし、Ctrl+F9(すべてのセルを実行)をスローする
def focus_browser_and_send_startup_shortcut():
# ブラウザのウィンドウタイトルの一部(例:'Chrome'や'Firefox')
browser_title = 'LLM_API.ipynb - Colab' # 使用しているブラウザに応じて変更してください
try:
# ブラウザウィンドウを探してアクティブにする
window = pyautogui.getWindowsWithTitle(browser_title)[0]
window.activate()
# ウィンドウがアクティブになるまで少し待つ
time.sleep(1)
# Ctrl+F9のショートカットを送信
pyautogui.hotkey('ctrl', 'f9')
print(f"ショートカット Ctrl+F9 を {browser_title} に送信しました。")
except IndexError:
print(f"エラー: '{browser_title}' というタイトルのウィンドウが見つかりません。")
except Exception as e:
print(f"エラーが発生しました: {e}")
# Google Colabを終了させる関数を定義
# 開いている「LLM_API.ipynb - Colab」タブをフォーカスし、Ctrl+F1(「ランタイムを接続解除して削除」に割り当てたショートカット)をスローし、
# Pop upが出るのでEnterキーを送って終了させる
def focus_browser_and_send_shutdown_shortcut():
# ブラウザのウィンドウタイトルの一部(例:'Chrome'や'Firefox')
browser_title = 'LLM_API.ipynb - Colab' # 使用しているブラウザに応じて変更してください
try:
# ブラウザウィンドウを探してアクティブにする
window = pyautogui.getWindowsWithTitle(browser_title)[0]
window.activate()
# ウィンドウがアクティブになるまで少し待つ
time.sleep(1)
# Ctrl+F1のショートカットを送信
pyautogui.hotkey('ctrl', 'f1')
print(f"ショートカット Ctrl+F1 を {browser_title} に送信しました。")
time.sleep(5)
# ENTERを送信
pyautogui.press('enter')
print(f"Enter を {browser_title} に送信しました。")
except IndexError:
print(f"エラー: '{browser_title}' というタイトルのウィンドウが見つかりません。")
except Exception as e:
print(f"エラーが発生しました: {e}")
ランタイムの接続はショートカット(ctrl+F9)があるので簡単。
ランタイムの切断と削除はyソートカットがないが、ツール→キーボードショートカットでショートカットを設定できるので、ctrl+F1を割り当てた。
ただこれを実行するとポップアップが出るので、Enterキーも割り当てて終了させるようにした。
追記:2024/08/21
def focus_browser_and_send_shutdown_shortcut() の処理を以下のように変更した。
def focus_browser_and_send_shutdown_shortcut():
global status,browser_title
try:
# ブラウザウィンドウを探してアクティブにする
window = pyautogui.getWindowsWithTitle(browser_title)[0]
window.activate()
# ウィンドウがアクティブになるまで少し待つ
time.sleep(1)
# Ctrl+M Iのショートカットを送信
pyautogui.hotkey('ctrl', 'm', 'i')
print(f"ショートカット Ctrl+M I を {browser_title} に送信しました。")
time.sleep(5)
# Ctrl+F1のショートカットを送信
pyautogui.hotkey('ctrl', 'f1')
print(f"ショートカット Ctrl+F1 を {browser_title} に送信しました。")
time.sleep(5)
# ENTERを送信
pyautogui.press('enter')
print(f"Enter を {browser_title} に送信しました。")
except IndexError:
print(f"エラー: '{browser_title}' というタイトルのウィンドウが見つかりません。")
status = 'ERROR'
except Exception as e:
print(f"エラーが発生しました: {e}")
status = 'ERROR'
else:
print('正常に終了しました')
status = 'LLM_CLOSE'
ポイントは、 Ctrl+M Iのショートカット(実行を中断)の送信を追加したこと。
これをせずにリソースを削除すると、通信がすぐに終わらない。
感触的だが、バッファに入ったものが実行されている感じ。
なので、削除してからも数回通信が行われる。
別途記述するが、Google Colab側が正しく終了していることを「通信のリクエストがこない」ことで確認しようとしているが、この現象があるとそれが怪しくなっていくためだ。
この記事が気に入ったらサポートをしてみませんか?