LoginSignup
70
77

More than 3 years have passed since last update.

公営競技を題材にGCPを勉強する

Last updated at Posted at 2019-07-18

直接的にお金が絡まないと中々やる気が出ないため、公営競技を題材にして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

最初に構築した構成イメージ

image.png

image.png

①バッチ処理基盤

このあたりは一番しんどかったので、以下記事にて少し整理
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円くらいかかる

なるべくお金がかからない感じで再構築したイメージ

image.png

image.png

①バッチ処理基盤

GKEでのAirflowをやめて、Cloud Scheduler⇒Cloud Functionsでまとめて実行に切替
個人でやる規模ならこれで十分な気がする
GKEをやめることでさらにサーバレスな感じになった
この部分の料金は今のところかかってない

②オンライン予測

AI Platformのオンライン予測機能を使わずに、
GCSからモデルをダウンロードして、それをImportして予測を実施
個人でやる規模ならこれで十分な気がする
この部分の料金は今のところかかってない

感想

ChromebookとGoogleのサービスだけで結構色んなことできそう。

70
77
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
77