AIの技術を社会に実装し、世の中をより良くするサービスをつくる。GO株式会社・渡部徹太郎氏が教えるMLエンジニアの仕事

2024年8月22日

GO株式会社 MLエンジニア

渡部 徹太郎

東京工業大学大学院 情報理工学研究科にてデータ工学を研究。株式会社野村総合研究所にてオンライントレードシステムやオープンソース技術担当をしたのち、株式会社リクルートテクノロジーズでは複数のデータ分析基盤のリーダを担当。その後、GO株式会社の前身となる会社(JapanTaxi)に入社。ドライブレコーダーのデータをAIで活用するプロジェクトの責任者や、タクシーアプリ『GO』のデータ基盤の責任者をしている。著書として「実践的データ基盤への処方箋」や「図解即戦力 ビッグデータ分析システムと開発がこれ1冊でしっかりわかる教科書」がある。

X:@fetarodc

こんにちは、GO株式会社でデータ基盤のマネージャーをしている渡部です。今回は「MLエンジニア」という職種について、その仕事と役割について解説します。

複合的な技術と経験が必要なMLエンジニアの仕事

タクシーをスマートフォンで呼べるアプリケーション、タクシーアプリ『GO』では、システムのさまざまな箇所で機械学習が用いられています。例えば、タクシーとユーザーのマッチング、タクシーの需要と供給の予測、到着時間予測、不正利用の予測、タクシーの待機場所最適化などです。

これらの機械学習システムを開発・運用するために、まず必要となるのがデータサイエンティストという役割です。データサイエンティストは、高度な数学や統計の知識を用いて、社内に蓄積されたデータからビジネス上有用な情報を計算する計算式を開発します。例えば、タクシー需要の予測の場合、過去のタクシーの利用履歴や現在の天気データなどさまざまな情報を元に、そのエリアのタクシー需要を予測する計算式をつくります。

しかし、データサイエンティストだけでは、機械学習をアプリに組み込むことはできません。データサイエンティストの成果物は、計算プログラムのソースコード(多くの場合はPythonのソースコード)ですが、このソースコードをタクシーアプリ『GO』の本番システム上で安全かつ高速に動作させるためには、システムエンジニアリングの技術と経験が必要です。その部分を担うのが機械学習エンジニアすなわち「MLエンジニア」なのです。

MLエンジニアは、データサイエンティストのつくった計算プログラムを本番システムで動作させるだけではありません。長期間にわたり安定して動作するように監視の仕組みを導入したり、トラブル発生時には即時対応できるように休日であっても対応できる体制を取ります。さらには、データサイエンティストが計算プログラムの開発に必要なデータの準備や開発環境の準備もします。

つまり、MLエンジニアとは、機械学習システムの開発・運用において、「データサイエンティストがやること以外のすべて」を担うエンジニアです。

MLエンジニアの具体的な3つの仕事内容

MLエンジニアの具体的な仕事内容は、大きく3つに分けられます。

それは、

  • ・データサイエンティストの開発支援
  • ・機械学習システム構築
  • ・機械学習システム運用保守

データサイエンティストの開発支援

データサイエンティストが機械学習プログラムを開発する工程は大きく2つに分かれます。それは「探索的データ分析」と「機械学習モデル作成」です。それぞれの工程において、データサイエンティストが効率的に作業を進めるための環境を整えるのがMLエンジニアの役割です。データサイエンティストが必要とするさまざまな様々なデータやツールを準備することがMLエンジニアの役割です。

探索的データ分析とは、データを色んな角度から探索し、目的となる計算の方針を立てる工程です。これをするためには、データサイエンティストが簡単にデータにアクセスでき、高速に集計や可視化ができる環境が必要です。そこで、 GO株式会社のMLエンジニアは、Google CloudのBigQueryというデータベースを導入し、そこにデータを蓄積。データサイエンティストが簡単にデータにアクセスして集計できるようにしています。

また、このデータを扱いやすくするために、Jupyter NotebookやStreamlitといったPythonを用いてインタラクティブにデータを分析できるツールや、地理空間データの可視化ができるKepler.glといったツールを導入して、データサイエンティストが使えるようにしています。

探索的データ分析が終わったら、データサイエンティストは機械学習モデルを開発します。

この際に必要になるのは、まず機械学習のモデルの学習に必要な計算リソースです。具体的には、GPUという機械学習の学習に特化した高速な演算装置が使えるように準備します。また、機械学習モデルの作成には、データをデータベースから抽出して前処理を行い、数値ベクトルに変換し、モデルを学習させるという一連の作業が必要です。

この一連の作業を効率的に行うために、Apach AirflowやKubeflow Pipelinesといったパイプラインツールを導入し、データサイエンティストが簡単にモデルを作成できるようにしています。さらに、機械学習モデルの作成は、さまざまなパラメータを調整しながら何度も繰り返す必要があるため、その結果を記録し、比較するための仕組みとして、MLflowというツールを導入しています。

機械学習システム構築

MLエンジニアは、データサイエンティストが開発した計算プログラムを本番システムで動作させるための環境を構築します。

タクシーアプリ『GO』は、Webアプリのようにフロントエンドとバックエンドのシステムから構成されます。フロントエンドには、ユーザーのスマートフォンアプリやタクシーの乗務員が使うアプリケーションなどがありますが、それらが接続する先がバックエンドシステムであり、機械学習システムはバックエンドシステムの一部として動作します。

▲機械学習システムの全体像

機械学習システムの構築では、まずバックエンドシステムを含めてシステム全体の設計を行います。具体的には、バックエンドシステムとどのように役割分担し、どういうAPIで連携するかを決めます。APIはgRPCを用いています。APIの仕様が決まったら、APIの開発を行います。API自体はPythonのプログラムですが、その中にデータサイエンティストのつくった計算プログラムを組み込みます。

ここで注意すべきことは、機械学習処理の「冗長化」と「負荷分散」です。 コンピューターは必ず壊れますので、安定して動作するようにするためには、複数のサーバーに機械学習の処理を配置し、一台のサーバーが壊れても処理が動き続けるようにする「冗長化」が必要です。また、雨が降ったりするとタクシーの需要は一気に高まりますので、一台のサーバーでは処理しきれません。その際、需要の高まりに応じて、サーバーの数を増やして処理の負荷を分散させる「負荷分散」にも注意が必要です。

GO株式会社ではパブリッククラウドを駆使して、冗長化や負荷分散を実現しています。パブリッククラウド自体は、SREというチームが全体を管理しているため、MLエンジニアはSREチームと連携して、「冗長化」や「負荷分散」を実現します。

機械学習システム運用保守

機械学習システムを構築したら、それで仕事が終わりというわけではありません。 タクシーアプリ『GO』は24時間365日動いていることが求められます。そのため、機械学習システムも常に動いている必要があります。システムは必ずトラブルが発生しますので、トラブルが発生しているかどうかの「監視」と、トラブルが発生した際の「即時対応」が必要です。

まず、監視についてですが、監視の仕組みはパブリッククラウドのモニタリングツールを用いて行います。普通のシステムと機械学習システムの違いは、機械学習システムの場合はエラーなく動作していたとしても、機械学習の予測の結果が悪いという事もトラブルのひとつです。例えば、今まで予測していた到着時間の平均値が、突如半分の時間になるなどです。機械学習の予測が悪くなる理由はさまざまですが、いち早く予測が悪くなったことを検知し、データサイエンティストに通知する仕組みをつくることが必要です。

次に、即時対応についてですが、トラブルが発生した際は、即時対応が必要です。そのため、トラブルを検出したらMLエンジニアチームのメンバーに電話で通知する仕組みを用意しています。休日であっても電話に出られるように、複数のメンバーが電話の担当に割り当てられて、誰かが電話を取れる体制にしています。

MLエンジニアへのキャリアステップ

まずはバックエンドエンジニアになる

いきなりMLエンジニアになれる人はいません。多くのMLエンジニアは、もともとバックエンドエンジニア(サーバーサイドエンジニアとも呼ばれる)であり、キャリアの中で機械学習の案件を担当した人がMLエンジニアになっていきます。私も、もともとはオンライントレードシステムのサーバーサイドエンジニアでした。

そのため、MLエンジニアになるには、まずはバックエンドエンジニアとしてキャリアを積むことが一つの選択肢です。

バックエンドエンジニアに求められるスキルは、基本的なコンピュータサイエンスの知識、プログラミングに加えて、OS、データベース、ネットワーク、システム設計などが挙げられるでしょう。近年はクラウド上でシステムを構築することも多いため、クラウドのスキルも求められることが多いです。また、バックエンドエンジニアはコミュニケーションスキルも重要です。バックエンドはシステムの中核であるため、関係のあるチームと密にコミュニケーションを取り、プロジェクトを推進する能力も必要となります。

バックエンドエンジニア + MLプロジェクトの経験 = MLエンジニア

GO株式会社では、しっかりとバックエンドエンジニアとして経験を積んだ人であれば、機械学習の知識がなくてもMLエンジニアとして採用しています。そして、MLのプロジェクトに入って、その中で機械学習の基礎知識、開発工程、システムの特性、そしてデータサイエンティストとしての役割を理解してもらいます。

例えば、MLプロジェクトを経験した上で実体験をもって以下のようなポイントを人に説明できるようになれば、MLエンジニアと呼べるでしょう。

  • 機械学習計算の仕組みを知っている
     └数式は理解できないが、機械学習モデルがどういうデータ構造であり、どういった入出力があるのかを知っている。機械学習の計算に適したプロセッサを知っている。
  • ・機械学習の開発工程の理解を知っている
     └例えば、学習データの準備、探索的データ分析、特徴量生成、学習モデル生成という工程を知っている。本番リリース後には精度監視という工程があることを知っている。
  • ・機械学習システムの特性を理解している
     └他のシステムであればエラーなく動作すれば正常だが、機械学習のシステムはエラーなく動作していても予測精度が低い場合は正常とはいえないことを知っている。それを監視することの重要性を知っている。
  • ・データサイエンティストの役割を理解している
     └データサイエンティストはエンジニアではなく科学者である。試行錯誤することが仕事であるし、論文の執筆も仕事に入ってくる。エンジニアのようにスクラムに入って納期通り成果を出すことは期待できないことを知っている。また多くの場合、可読性の高いプログラムの作成は期待できないので、MLエンジニアがサポートする必要があることを知っている。

MLエンジニアは不足している

非常におすすめなポジションです。AIはますます重要になっていく技術であり、それに気づいて大学などでAIについて学ぶ人が増え、機械学習モデルを作ることができる人が増えています。

しかし、機械学習モデルはつくれても、それを実際のシステムに組み込むことができるMLエンジニアが不足しています。世の中で機械学習を使った実証実験の多くが失敗しているのは、このMLエンジニア不足が原因のひとです。

本記事を読んでMLエンジニアに興味・関心をもったならば、ぜひMLエンジニアになって、AIの技術を社会に実装し、一緒に世の中をより良くしていきましょう!

関連記事

人気記事

  • コピーしました

RSS
RSS