俺とお前と Google Cloud と機械学習
はじめに
この記事は Google Cloud Champion Innovators Advent Calendar 2023 の 12/19 の記事です。
皆さん興味は無いかと思いますが、sfujiwara は 2015 に最初の会社に就職しました。そして Google Cloud の最初の機械学習サービスである Cloud Vision API が出たのも 2015 年です。これはもう Google Cloud 界のファミコン世代です。ファミコンから PS5 まで見てきました。そういうわけで、年末らしくこれまでの Google Cloud のこれまでの機械学習サービスを振り返ります。全てのサービスの話はできないので、個人的に界隈の動向と連動してそうと判断したものを思い出とともに見ていきましょう。
Cloud Vision API (2015)
2015 年、Cloud Vision API が登場しました。画像を送ると Google の機械学習モデルで推論を行い、何が写っているかなどの情報を返してくれる Web API です。同じ系統のサービスとして Cloud Speech API や Natural Language API などがリリースされていきました。
主観で語る
Vision API の精度は素晴らしいものでしたが、本気で精度を追求するのであれば自前で専用モデルを作った方が良いケースも多く、機械学習の非専門家のためのサービスという印象でした。そういう意味で、実のところ当時の機械学習屋にとっては衝撃的というほどではなかったと思っています。
一方で非専門家に機械学習でどんなことができるかを知ってもらう機会でもあり、ここから Google Cloud ユーザーに機械学習というものが浸透していきました。
また、当初は専門家はこの手のサービスをあまり使っていなかった印象がありますが、最近は少し変わってきたように感じています。
- 機械学習が普及して多くの案件を素早く捌く必要が出てきたこともあり初手で手軽に使える
- MLOps の面で負荷がゼロになることも大きい
- とりあえずこれで作った後でコスト面を考慮して自前モデルへの置き換えを検討することも多い
- 単純に専門家でも pre-trained モデルを使うことが多くなった
- 分野によっては精度面でもこういったサービスに頼った方が良いケースもある
あたりが要因でしょうか。
TensorFlow (2015)
Vision API と同年、TensorFlow がリリースされました。当時 TensorFlow と Google Cloud は何も関係はありませんでしたが、その後の Google Cloud の機械学習専門家向けのサービスは TensorFlow と連携する形でリリースされていきます。
主観で語る
有名どころの Deep Learning フレームワークは Theano, Chainer, TensorFlow, PyTorch の順にリリースされました。Theano と Chainer は開発を終了していますが、後続のフレームワークに非常に大きな影響を与えた偉大なソフトウェアでした。
当時は周囲の理解もまだ進んでおらず「TensorFlow と AI って何が違うの?」というような質問に 5000 億回くらい答えた気がします。
define-and-run と define-by-run どちらが良いかとか TensorFlow と PyTorch どちらを選ぶかなど当時は様々な議論がありましたが、最近はそういった話も落ち着いて、良い意味で枯れた技術になりつつあるのかなと感じます。
最終的に TensorFlow は紆余曲折ありつつも
- コーディング時は define-by-run で書く
- コンパイル的なことをして計算グラフを生成して define-and-run のメリットを享受する
という方向に落ち着きました。
Vertex AI Training/Prediction (2016)
TensorFlow リリースの次の年、Cloud Machine Learning がリリースされました。これが改名されたものが今の Vertex AI Training/Prediction です。サービスの内容は
- TensorFlow で書いた学習コードを実行する
- TensorFlow の SavedModel から Web API を生成する
- 要するにサーバーレスな TensorFlow Serving
というものでした。
上記の通り始めは TensorFlow を想定した設計になっていましたが、今では Docker コンテナを実行することもできるようになり、フレームワークを問わず利用できるようになりました。また、Compute Engine や Cloud Machine Learning の training (Vertex AI Training) で GPU を利用できるようになったのも同じ時期です。
主観で語る
GPU を利用できるようになったのはもちろんのこと、Vision API と違って機械学習モデルを利用する人ではなく作る人のためのサービスが出たことは大きな意味があったはずです。実際、sfujiwara が一番お世話になったサービスです。
当時はフレームワーク宗教戦争真っ只中だったこともあり、TensorFlow に限定されてしまうと組織として採用しにくい問題がありました。任意の Docker コンテナが利用できるようになってからは機械学習はあまり関係なくて「機械学習にも使えるシンプルなジョブシステム」という形になっていましたが、機械学習屋に必要だったものはこれで正しかったんじゃないかなと思います。Prediction でも他のフレームワークを使いたいとか前処理などのために TensorFlow Serving じゃなくて Flask で書きたいといった問題は Docker コンテナ対応によって解決しました。
ただ、Training についてはジョブシステムとして広く利用できるはずだったのに、名前的に機械学習以外の用途に使いづらい雰囲気になってしまっていた気がします。それもあって役割が被り気味の Cloud Run Jobs が出たときはちょっと複雑な気持ちでした。Prediction についても Cloud Run で GPU が使えるようになると使い分けがちょっと難しくなりそうではあります。
AutoML Vision (2018)
画像データを用意したら Google の不思議な力で学習済みモデルを生み出してくれるサービスです。アルゴリズムの詳細までは明かされていませんが、NASNet がベースになっていたそうです。AutoML Vision に続いて AutoML Table など様々な形式のデータに対応するサービスがどんどんリリースされていきました。ちなみに AutoML Table のベースは AdaNet らしいです。
主観で語る
これまでは
- 何もしなくても学習済みモデルを使える Vision API
- データも機械学習のコードも自分で用意する Vertex AI Training
という両極端だったのに対して、データだけ用意すれば良いというサービスが出てくるのは妥当ではあったのですが、当時は結構物議を醸した思い出があります。
声のでかい人が機械学習屋は不要になるとか言い出したり、そんな訳あるかと言い返されていたりと仲良く喧嘩していましたが
- 精度のチューニングには限界がある
- なんだかんだで専門家がいないと上手くいかないときに困る
- Web API の生成までやってくれるのでエンジニアリングの負荷を減らせる
- 非専門家にもある程度渡しやすい
などメリット・デメリットを踏まえて好きに使えば良いと思います。普通に良いサービスですし、別にこれで急に無職になったりしたわけでもありません。
BigQuery ML (2018)
AutoML Vision のしばらく後にリリースされました。BigQuery 上で簡単な機械学習モデルの学習・推論を行うことができます。
最初は単純な線形モデルの学習しかできませんでしたが、今では相当な種類のモデルを扱うことができるようになっています。
主観で語る
データだけ用意すれば良いという点で AutoML とターゲット層は近いですが、BigQuery で完結するということにはシステムを簡単にできるという大きな意味があります。
当時は BigQuery の便利さが機械学習屋にギリギリばれてるかどうかくらいのところだったのではないでしょうか。なので、特に喜んでいたのは BigQuery で分析を行うアナリストに近い層だったと記憶しています。今では機械学習屋も BigQuery が無いと生きていけない体になり BQML でできることも増えたので、自然と楽するための選択肢の一つとして検討される位置になったと思います。
良いサービスですし、これで済めばめちゃくちゃ楽なので夢があります。
Vertex AI Pipelines (2021)
サーバーレスな Kubeflow Pipelines です。いわゆるワークフローエンジンというやつで、Docker コンテナ単位で処理の依存関係を定義しつつ順々に実行していくことができます。Kubeflow Pipelines は本来 Kubernetes クラスタ上で動かす機械学習向けのワークフローエンジンなのですが、Vertex AI Pipelines ではユーザーからは Kubernetes は完全に隠蔽されていて、Docker イメージを用意して実行のジョブを飛ばすだけで済みます。
主観で語る
ようやく MLOps のためのサービスが出てき始めたなと感じました。Vertex AI Prediction も MLOps のサービスではあるし、AutoML や BQML も考えようによっては MLOps 的なメリットはあるのですが、これまではデータ処理・学習・推論の各フェーズをつないでシステムに仕上げるための間がすっぽりと抜け落ちていました。Cloud Composer は GKE クラスタが乱立してしまうし、サーバーレスなサービスを組合せて繋ぐのも大変だしで色々と試行錯誤していたので、Vertex AI Pipelines が出たときは正直めっちゃ喜びました。業務でも全力で使い倒しています。
この前後で Matching Engine や FeatureStore が出たことからも徐々にモデルを作るだけでなくシステムとして仕上げるためのサービスにシフトしていったことが見て取れます。ようやく機械学習という分野が PoC 貧乏だとか焼畑農業だとか言われていた時代を乗り越えて、きちんと世に受け入れられたのかなと感じています。
おわりに
次の流行は皆さんご存じ LLM です。機械学習が周囲の理解を得てソフトウェアエンジニアリングの一分野として定着するまでに前述の歴史の中で我々は色々な苦労をしてきましたが、何やら二周目が始まったような感じがします。次の我々はきっともっと上手くやるでしょう。
Discussion