今回は、DevOps、MLOps分野でフリーランスのバックエンドエンジニアとしてのキャリアを歩む勝又 健太氏(@poly_soft)に、フリーエンジニアとしての仕事内容、Web系から機械学習への転向の経緯、未経験者が機械学習を仕事にする際のポイント、エージェントサービスについて伺いました。
ご参画中の案件についてお聞かせください
現在は、大規模情報ポータルサイトを運営するクライアント先で機械学習チームのメンバーと一緒に機械学習系サービスの開発・運用を行っています。最近流行りの用語でいうとMLOps(エムエルオプス)というポジションです。Machine Learningシステムのオペレーション部分を担当するので、システムを安定的に稼働させつつ新しい機能のリリースサイクルを速めていくためのテクニカルな部分を担当しています。
先方では以前から機械学習に取り組まれていたのですが、CI/CDや運用周りの自動化が弱いというご認識があったようです。私自身がDevOps(デブオプス)を専門としていることもあり、インフラのコード化やクラウドでのモダンな開発環境の導入を期待され今回の現場に参画しました。
業務では、インフラをGCP(Google Cloud Platform)で構築し、Kubernetes(クーバネティス)やGoogle App Engine上で動作するWebAPI・APIゲートウェイの開発、Cloud ComposerやCloud Dataflowを使用したバッチ処理、CI/CDツールを使用したテストやデプロイの自動化などに取り組んでいます。
APIゲートウェイと機械学習APIを分離したマイクロサービス構成でサービスを運用しており、モデルなど機械学習部分の開発は機械学習エンジニアの方が行います。
APIゲートウェイで認証やバリデーションなどの処理を行ったのちに機械学習APIを呼び出す部分の開発を私が担当し、機械学習エンジニアの方たちの開発負荷を減らした上で、コマンドを実行するだけでビルド、テスト、デプロイまでを一度にできるような仕組みを構築しています。
お仕事をするなかで手ごたえのようなものはありますか
クライアントが新しい技術をどんどん使っていこうという方針のため、最先端のMLOps業務に携われており、とてもやりがいを感じています。GCPで提供される新しいサービスについてもアルファ版はさすがに厳しいですが、ベータ版まで来れば試してみようという形で入れさせて頂いてます。
APIゲートウェイの開発では、Goを使用させてもらいました。基本的には開発言語にPythonを使用し、フレームワークはDjango(ジャンゴ)とFlask(フラスク)で統一されている現場なのですが、言語の採用についてもカジュアルに対応いただいたので、ストレスなく仕事を進められていますね。
本当はPythonが望ましかったようなのですが、最近のマイクロサービスではGoを使用するケースが増えています。また、APIゲートウェイと機械学習APIとの通信で使用するgRPCだけでなく、REST API用のコードを自動生成するツールもGoの方が充実していたことが決め手となりました。
一緒に働くチームの方々も皆さん若いので新しいことに取り組む意欲が強く、非常にありがたい環境でやらせてもらっています。
MLOpsについて今後注目されているトピックスは?
今後発展していく分野としては、Deep Learningとセキュリティでしょうか。Deep Learningのような計算に時間のかかるシステムについて、テストやデプロイや運用の自動化をどのように進めていくのかという点と、セキュリティについては、DevSecOps(デブセクオプス)という言葉も生まれています。
Deep Learningについては、そもそもクラウドで学習を行うことが適切なのかという点は以前から議論になっています。費用の問題もありますし、クラウドとオンプレミス環境を連携させるような手法も今後模索していくことになるのではないでしょうか。
セキュリティについても、情報漏洩などがあるとサービスの価値が一気に下がるため厳密に運用する必要性が高まっています。一方で、会社様によってはリリース前のセキュリティチェックにかなりの日数が必要になる等、セキュリティ周りでリードタイムが伸びてしまうことも多々あります。
運用に組み込む際には極力自動化したい箇所だとは思うのですが中々難しいですし、かといってそこを効率の悪い方式でやってしまうと改善サイクルが遅くなるので、作業フローの中でセキュリティチェックを担保するような仕組みをどのように構築するかという点が今後は重要になってくると思います。