久しぶりに、昔ハマっていたオフラインのカードゲームを起動してみたら、最高難易度がまったくクリアできなくなっていました。
以前はクリアできていたのに、です。
「AIを活用して攻略をサポートしてもらおう」と思ったのが今回のきっかけです。ただ条件が3つありました。
- オフラインで動くこと
- せっかくなら強化学習を使ってみたいこと
- 古いMacBook Airでも動くくらい軽量に作りたいこと
この3つを満たすために試行錯誤した結果、Rustで自作してGoogle Colabで学習させるという構成に落ち着きました。今回はその中でもGoogle Colabの使い方を中心に紹介します。
Google Colabとは
Google ColabはGoogleが提供する無料のPython実行環境です(無料版を前提に紹介します)。ブラウザさえあれば、自分のPCにインストールなしで使えます。
特に今回便利だったのは以下の点です。
- 無料でGPU・CPUが使える
- Googleドライブと連携できる
- 自分のPCのスペックに関係なく重い処理が動く
古いMacBook Airでは厳しい学習処理も、Colabに任せることで快適に回すことができました。
⚠️ 注意:無料で使えますが、一定時間操作しなかったり、長時間(最大12時間)経過すると接続が切れてデータがリセットされる仕様があります(無料版の場合)。
今回やったこと
今回はオフラインのデッキ構築型カードゲームを題材に、強化学習を使ってAIに攻略を学習させることを目標にしました。
具体的な流れはこうです。
- ゲームのルールやカードの効果を言語化
- それを数値データに変換してAIが扱える形に整理
- Rustで自作した学習エンジンをGoogle Colabで動かす
- 学習データをGoogleドライブにアップロード
- ColabからGoogleドライブをマウントして実行
1〜3はRust側の実装の話になるため、今回はColabで動かす4・5番に絞って紹介します。1〜3の詳細が気になる方は続編をお楽しみに!
GoogleドライブをColabにマウントする
まず以下のコードを実行します。
from google.colab import drive
drive.mount('/content/drive')
実行すると「Google ドライブへのアクセスを許可しますか?」というポップアップが表示されます。「Google ドライブに接続」を選択してアカウントを許可すると、左側のサイドバーに drive/MyDrive フォルダが出現します。
マウント後のパスは以下になります。
/content/drive/MyDrive/
💡 コードを書かなくても、左側のフォルダアイコンから「ドライブをマウント」ボタンをクリックするだけで自動的にコードが挿入される機能もあります。
⚠️ 注意:Googleドライブのキャッシュが古い場合、ドライブを更新しても反映されないことがあります。その場合は以下のコードで強制的に再マウントしてください。
drive.flush_and_unmount()
drive.mount('/content/drive', force_remount=True)
バイナリを実行して学習をスタート
ドライブのマウントが完了したら、アップロードしておいたファイルをColabで実行します。
subprocess はPythonから外部プログラム(今回はRustで作ったバイナリ)を呼び出すための標準ライブラリです。
import subprocess
result = subprocess.run(
['/content/drive/MyDrive/your_binary'],
capture_output=True,
text=True
)
print(result.stdout)
your_binary の部分は自分のファイル名に置き換えてください。
💡 実行権限がない場合は以下を先に実行してください。
0o755はLinuxで実行権限を付与するための指定です。
import os
os.chmod('/content/drive/MyDrive/your_binary', 0o755)
詰まったらGemini先生に聞こう
ColabにはGeminiが搭載されており、右上のアイコンから呼び出せます。エラーメッセージをそのまま貼り付けるだけで解決策を提案してくれるので、困ったら気軽に丸投げしてみてください😊
おわりに
今回はGoogle Colabの基本的な使い方から、GoogleドライブのマウントとRustバイナリの実行まで紹介しました。
古いMacBook Airでは難しかった大量の学習処理も、Colabを使うことで快適に回せるようになりました。
強化学習の仕組みや自作エンジンの詳細については続編で紹介予定です。もし反応が良ければ書きます😊
続編はこちら
(執筆中)
🐤難しい版『強化学習でカードゲームAIを作った話【実装詳細編】』
https://qiita.com/hiyokoko/items/e1160172b370ad7ebac0
二週間健闘した結果
https://qiita.com/hiyokoko/items/b6b7ebf741fae2ea0a24