直接的にお金が絡まないと中々やる気が出ないため、公営競技を題材にしてGCPをざっくり勉強する。
なるべくサーバレスな感じで、なるべく開発もWebベースで。
GCPの色々なサービスを使ってみることを目的にしてるので、無駄の多い構成になってしまっているかも。。
#やったこと(ざっくり)
- GKE上のAirflowでバッチ処理作成
- GKE関連のファイル類はSourceRepositoriesで管理し、PushしたらCloudBuildでデプロイ
- Functionsでとある公営競技の過去レースのデータをダウンロードしGCSに格納する
- GCSからBigQueryに格納
- BigQueryに格納したデータを元にAI Platformでモデル作成
- Functionsでスクレイピングしたデータと上記モデルからオンライン予測し、結果をFireStoreに投入
- Functionsで予測した結果を購入
#開発環境
多分これだけしか使ってない
マシン:Chromebook(ASUS Chromebook Flip C101PA)
ツール:GCP、Cloud Shell、Google Colaboratory
##①バッチ処理基盤
このあたりは一番しんどかったので、以下記事にて少し整理
https://qiita.com/yakamazu/items/0dbf643c5e8e0b65e520
https://qiita.com/yakamazu/items/aff066b0ae811dd61f02
##②バッチ処理
###PubSub
バッチ日付をパブリッシュする
###Cloud Functions
バッチ日付のパブリッシュをトリガーに、該当日付の結果ファイルをダウンロード、解凍、整形
ファイルをダウンロードするときは/tmpディレクトリにダウンロードするのが注意点
https://cloud.google.com/functions/docs/concepts/exec
###Stackdriver Monitoring
CloudFunctionsのエラーをFunction名を指定してアラート出すことができる
参考URL
###Cloud Storage
ダウンロードファイルと整形後のファイルをひたすら蓄積
###BigQuery
GCSのファイルをロードし、サマリテーブルの作成
##③予測モデル作成とWebスクレイピング
###AI Platform
XGBoostがAI Platformで使えるようだったので、cloudshellからモデル作成ジョブをキック
モデルはGCSに保存する
その後オンライン予測用にモデルをデプロイする
やり方は公式ドキュメント見たら何とかなった
ちなみに機械学習素人の個人的感覚だと、XGBoostはパラメータチューニングなしでもそれなりの精度になってる雰囲気がある。
少しハマったのは、BigQueryからPandasにデータ投入するときに、
google-cloudパッケージを使用すると「'QueryJob' object has no attribute 'to_dataframe'」が発生
⇒setup.py 作ってpandas-gbqインストール、使用する方法で解決
参考
###Cloud Scheduler
cronのサービス
決まった時間にPubSubメッセージのパブリッシュができる(HTTPリクエストも送れる)
###Cloud Functions(Python)
当日の情報をスクレイピング(Beautiful Soup)で取得
取得した情報を元にAI Platformのオンライン予測を使って順位を予測
一定の期待値を超えてたらPubSubに購入情報をパブリッシュ
###Cloud Functions(Node.js)
購入情報のパブリッシュをトリガーに起動
Puppeteerというライブラリを使用してヘッドレスブラウザ操作で対象を購入する
###Firestore
当日のスクレイピングした情報や、購入情報を格納する
NoSQL(ドキュメント指向データベース)と呼ばれるもので、RDBと違って格納するデータのレイアウトが途中で変わったりしても問題なし
BigQueryへのImportもすんなりできる
##この構成はお金がかかる。。
個人でやる際に、この構成で大きくお金がかかる部分は主に以下
- GKE
- Airflow動かそうと思ったらそれなりスペックのインスタンスを立ち上げる必要あり
- プリエンプティブにしても月2000円くらいはかかってしまった
- AI Platformのオンライン予測
- 一日に150回くらいオンライン予測すると、一日50円くらいかかる
##①バッチ処理基盤
GKEでのAirflowをやめて、Cloud Scheduler⇒Cloud Functionsでまとめて実行に切替
個人でやる規模ならこれで十分な気がする
GKEをやめることでさらにサーバレスな感じになった
この部分の料金は今のところかかってない
##②オンライン予測
AI Platformのオンライン予測機能を使わずに、
GCSからモデルをダウンロードして、それをImportして予測を実施
個人でやる規模ならこれで十分な気がする
この部分の料金は今のところかかってない
#感想
ChromebookとGoogleのサービスだけで結構色んなことできそう。