勝又 健太氏

フリーランスのMLOpsエンジニアとして働く勝又氏の仕事内容、機械学習の学び方、未経験者へのアドバイス

Profile
  • Name / 勝又 健太
  • Job / バックエンドエンジニア

今回は、DevOps、MLOps分野でフリーランスのバックエンドエンジニアとしてのキャリアを歩む勝又 健太氏(@poly_soft)に、フリーエンジニアとしての仕事内容、Web系から機械学習への転向の経緯、未経験者が機械学習を仕事にする際のポイント、エージェントサービスについて伺いました。

フリーエンジニアとしての仕事内容とMLOps業務について

ご参画中の案件についてお聞かせください

現在は、大規模情報ポータルサイトを運営するクライアント先で機械学習チームのメンバーと一緒に機械学習系サービスの開発・運用を行っています。最近流行りの用語でいうと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については、そもそもクラウドで学習を行うことが適切なのかという点は以前から議論になっています。費用の問題もありますし、クラウドとオンプレミス環境を連携させるような手法も今後模索していくことになるのではないでしょうか。

セキュリティについても、情報漏洩などがあるとサービスの価値が一気に下がるため厳密に運用する必要性が高まっています。一方で、会社様によってはリリース前のセキュリティチェックにかなりの日数が必要になる等、セキュリティ周りでリードタイムが伸びてしまうことも多々あります。

運用に組み込む際には極力自動化したい箇所だとは思うのですが中々難しいですし、かといってそこを効率の悪い方式でやってしまうと改善サイクルが遅くなるので、作業フローの中でセキュリティチェックを担保するような仕組みをどのように構築するかという点が今後は重要になってくると思います。

Web系エンジニアから機械学習(ML)分野へと転向した経緯

勝又氏

機械学習に携わるきっかけは何だったのでしょうか

2、3年ほど前にWeb業界でも機械学習が話題になり始めました。そのタイミングでこれは絶対に手をつけておかないとまずいと思ったことが最初のきっかけです。そのときは、思い切って仕事を1ヶ月休み、数学と機械学習の基礎に取り組みました。

まず最初に小学校の算数から高校の数学までをやり直し、CourseraでAndrew Ng先生の有名な機械学習のコースを修了しました。その後、KaggleのTitanicチュートリアルに取り組んだりして、機械学習のおおよそのワークフローを掴むことができました。

その時ちょうど人工知能APIを提供する企業様で機械学習系サービスのDevOps業務に携わらせていただく機会があり、それが転機となりました。その現場で機械学習エンジニアの方と直接やり取りしながら仕事ができ、機械学習サービスを作る様子を肌で感じながら実践に必要な知識を得ることができました。

私自身が実用的な機械学習モデルを作れるかというと、全然そのようなレベルではないのですが、機械学習エンジニアの方との仕事の進め方や、うまく協業するための方法を現場で学ぶことでMLOpsという分野にたどりついた形です。非常に運がよかったと思います。

最初からMLOpsエンジニアを目指していたのでしょうか?

当時はMLOpsという用語自体が存在しなかったので、少なくとも機械学習サービスの開発にWeb系エンジニアとして携われるようになって、あわよくばモデル開発も経験してみたいなという状態から始めました。

そのため、機械学習周りのことをやりたいという点については明確に狙っていたのですが、MLOpsエンジニアという職種を目指していたわけではないですね。

最初に入った機械学習系の現場で、たまたま私が一番バックエンドが強かったのでインフラのコード化まわりをすべて任され、そのような業務を請けていくうちにMLOpsという分野があることを知ったという経緯です。

MLOpsという言葉ができたおかげで、自分のやっていることがようやく分別できるようになりました。キーワードができ職務領域が定義されることで、自分としてもバリューの出し方が分かり方向性が定まりました。

エンジニアとして今後はどのようなキャリアを目指されているのでしょうか

先端技術に携われるという点で機械学習のプロジェクトには今後も携わっていきたいと考えています。ただし、機械学習系の方とモデルの作り方などで勝負しようとしても自分に分が悪いことははっきりしています。

そのため、機械学習の理論やアルゴリズムを突き詰めていくというのではなく、機械学習サービスを開発する点で一緒に協業していきたいですね。今後もDevOpsやMLOps方面のスキルを伸ばしていくという方向性です。

機械学習のワークフローや理論について理解したうえで、システムの安定運用や自動化といったバックエンドエンジニアとしての技能に重点をおいていきたいと考えています。

競争という観点で見ても、バックエンドの経験が長い方ほど機械学習をやりたがる人が少ないようなので、その点も後押しになっています。

未経験者が機械学習を仕事にする際のポイント

勝又氏

機械学習への転向をお考えのエンジニアの方にアドバイスはありますか?

Web系エンジニアから転向するのであれば、中途半端にモデル作りなどを頑張るよりもMLOps方面にいくほうが、キャリアの選択肢としては賢いのではないかと考えています。

その形であればバックエンドエンジニアとしての経験も生かせますし、機械学習のプロジェクトは動く金額も大きいです。なにより企業側のニーズに対して人材が足りていないため、単価や年収を上げていきやすいと思います。

もちろん、Web系エンジニアからでも機械学習の理論や数学を理解し、完全に機械学習エンジニアにジョブチェンジするという道もあります。ただし、求められるレベルや素養などかなりハードルが高いため、準備や勉強などに相当な投資が必要です。

機械学習もバックエンドのエンジニア業務もどちらも範囲としてかなり広いので、両方をやろうとするのはかなりの天才でないと厳しいかもしれませんね。

未経験からMLOpsエンジニアになるにはどのような方法があるでしょうか

MLOpsエンジニアとしては、DevOpsと機械学習の両方の知見が必要になります。ウェイトとしては、DevOpsの比重が大きいですね。両方を100%できる人というのは現実的に存在しないため、機械学習や数学については最低限が理解できていれば良いと思います。

DevOpsでは、インフラをコード化するためのテクニカルな部分を覚えることが基本です。そのため、インフラのコード化やCI/CDに取り組んでいる案件に参画して経験を積むことが近道です。

EC2を手動で運用しているような会社にいると知見が溜まらないため、まずはそれらを自動化している会社へ転職することをお薦めします。

DevOps業務ではどのようなスキルがあるとよいですか?

クラウド環境を構築する際に、AWSもGCPもAPIを使ってインフラをコードで管理することができます。その際に使用するツールの使い方を知ることが、DevOps業務では最低限必要となります。

AWSであればCloudFormation(クラウドフォーメーション)、GCPであればCloud Deployment Manager(デプロイメントマネージャー)、AWSとGCPの両方に対応したTerraform(テラフォーム)などのツールの使い方に慣れることが重要です。

その次に自動化です。AWS CLI(Command Line Interface)やgcloudなどのコマンドラインツールをBashスクリプトで呼び出してさまざまな処理を実行する手順を知る必要があります。

また、CI/CDツールについても、CircleCIというデファクトスタンダードなCIツールや、AWS CodePipeline、CodeBuild、GCPのCloud Buildといったツールに習熟できるとよいでしょう。

MLOps業務で機械学習の知識はどの程度必要でしょうか?

インフラのコード化をDevOpsの基礎だとするとMLOpsでは最低限KaggleでTitanicチュートリアルくらいは取り組んで、機械学習の基礎を学んでおいたほうがよいですね。

また、Jupyter Notebook(ジュピター・ノートブック)は大抵の会社さんで使っているため、触ってみることをおすすめします。前処理をやったり、特徴量を加工したり、最終的にモデルで学習し推定してという一連のワークフローがJupyter Notebookをやることで理解できます。

微分、線形代数(行列計算)、確率など数学もある程度は取り組んでおく必要がありますが、MLOps業務に関して言えば、数学の深い部分まで完璧に理解する必要はありません。DevOpsの基礎知識に加え、機械学習について必要なのはその程度のスキルセットでしょうか。

とはいえ、本当に人材不足のため企業側でも全てが100%の人は求めていない状況です。業務未経験の人がポートフォリオを作って転職活動を行うように、CloudFormationで作ったTemplateファイルをGitHubにアップしている程度でも大丈夫だと思います。何かしら成果物を見せれるようにしておくことが大事ですね。

フリーランスエージェントについて

勝又氏と弊社担当長谷川

エージェントは以前からご利用されているのですか?

独立した当初は自分で仕事を請けていたのですが、なかなか受注が決まらないというタイミングでエージェントに登録しました。その際にすごく単価の高い案件を紹介いただいたんです。

これは自分でやるよりも良いなということで、その後はエージェントの方からもご紹介をうけながら仕事を探すようにしています。エージェントの方経由の案件では、単価にこだわるというよりもお仕事の内容や技術的に新しいことができそうかという点に魅力を感じますね。

今後は、手を動かすエンジニアの仕事は週3日くらいにセーブして自分のビジネスの開拓をやっていく予定ですが、エンジニアの価値の基本は最先端技術にどれだけキャッチアップしているかだと考えています。

BIGDATA NAVIについての印象をお聞かせください

機械学習系の案件を多く掲載している点は、すごく特徴的だと思います。機械学習サービスの開発に携わるWeb系エンジニアという募集を探していたのですが、他社のサービスでは、該当する案件の情報は少なかったです。

機械学習エンジニアを募集する求人は最近増えてきたように感じるのですが、その方たちと協業するMLOpsの仕事は数が少ないので、なかなか紹介自体が難しいというエージェントさんも多いのではないでしょうか。BIGDATA NAVIは、その点できちんと差別化されているように思います。

やはりエージェントを選択する際の最重要なポイントは「ご紹介いただく案件の魅力度」なので、機械学習の案件を引っ張ってくる部分については今後も注力してもらいたいですね。

最後になりますが、エッジコンサルティングへの要望はありますか

機械学習プロジェクトへの携わりかたとして、モデルを作る仕事のほかにWeb系エンジニアとして参画するMLOpsのような携わり方はあるので、そのあたりの情報は今後もっと発信していってもよいと思います。

MLOpsエンジニアとして参画する場合でも、機械学習と数学の基礎的な知識や機械学習サービスを開発するうえでのワークフローの理解は必須となります。そこは稼働時間を削ってでも勉強する必要があるため、我々のようなフリーエンジニアにとっては、ある意味で投資のような考え方になります。

やはりキャリアとしての出口がみえていないと投資も難しいため、エッジコンサルティングさんが提供しているAIスクールでも機械学習エンジニアになるためのコースだけではなくて、機械学習エンジニアとの協業の仕方を学ぶMLOpsのコースを設けても面白いかもしれません。