現在、未経験から駆け出しの機械学習エンジニアとして働いています。
そういった中で必要になったスキルが当初想定したものと大分違っていたためその点を詳細に紹介していければと思っています。
まずスキルをご紹介する前に前提があります。
前提
- 今回は「お客様との合意調整や、要件スコープの検討」といったビジネススキルについては割愛しています。
- 注意点として、こちらに書いてあるスキル全てを習得にしないと機械学習エンジニアになれないかというとそうではありません。あくまで、機械学習エンジニアに必要なスキルの全体像をわかってもらいたく、このような記載の仕方をしています。中には必要になったタイミングで学べば良いものもありますので、その点ご理解ください。
AI/機械学習エンジニアに必要なスキル
AWS、GCP、Azureなどのクラウドプラットフォームの活用
こちらは各プラットフォームで最低限抑えておくべきサービスを例にします。
AWS | GCP | Azure | |
仮想マシン | Amazon EC2 | Compute Engine | Azure Virtual Machines |
オブジェクトストレージ | Amazon S3 | Cloud Storage | Azure Blob |
データレイクへのクエリ | Amazon Athena | Google BigQuery | Azure Data Lake Analytics |
Elasticsearchクラスターの展開 | Amazon Elasticsearch Service | Elastic Cloud | Elasticsearch Service on Elastic Cloud |
DWH | Amazon Redshift | Google BigQuery | Azure Synapse Analytics |
Kubernetes | Amazon Elastic Container Service for Kubernetes | Google Kubernetes Engine | Azure Kubernetes Service |
機械学習モデルの構築 | Amazon SageMaker | AI Platform | Azure Machine Learning |
仮想ネットワーク | Amazon Virtual Private Cloud | Virtual Private Cloud | Azure Virtual Network |
もっとやった方がいいことあるんですが、いったんこのぐらいで。汗
どれか一つのプラットフォームで良いので、使えるようになってると良いです。
Infrastructure as Codeの実装
機械学習基盤を構築する際にその環境はコード化されている必要があります。
環境の移行や、頻繁な改修に対しAWSやGCPの画面上からポチポチボタンを押して毎回リソースを作成するのは大変手間でオペレーションミスが発生する可能性がありますよね。
なのでリソースの作成管理は全てコードによって管理されることが望ましいです。
そのため、最近ではTerraformを使用したリソース管理のスキルが求められます。
具体的な例としては、「TerraformでEC2,S3,VPCなどのリソースを構築できる」などが挙げられます。
そのほかにも、AnisibleやPuppet,ChefなどInfrastructure as Codeを実践するために必要なツールがたくさんあるのですが、これはチームによってどこまで使用しているか異なるため必要になってから学ぶで良いかと思います。
Dockerの活用
Dockerコンテナを利用したアプリケーションが多くまた、そう言ったアプリケーションに対しモデルを反映することもありますのでDockerの使用はできた方が良いです。
データ分析スキル
Python、R、またはエクセルなどのデータを扱えるツールでデータ分析を行う能力が必要です。
(例)Pythonを使用して(pandas,numpy)などのライブラリを扱いながらデータの分析が可能
データ収集スキル
モニタリング基盤の構築やスクレイピングなど、必要に応じた方法でデータの収集ができる必要があります。ちなみに私の現場ではスクレイピングをすることはほとんどありません。
(例)
- fluentdなどのログ収集コンポーネントの導入
- elastic searchを導入したログ集約基盤の導入
- kibanaを活用したログデータの可視化及びダッシュボードの作成
データの整形スキル
機械学習モデルのトレーニングデータをPython、エクセルなどのツールを用いたデータの整形して、機械学習がしやすい形に加工するいわゆる「前処理」を行う能力が必要です。
(例)
- pandasを活用して、欠損値の補完や欠損値の除去ができる。
- scikit-learnとpandasを使ってカテゴリ文字列を数値にエンコーディングできる。
機械学習モデルの作成スキル
tensorflow、scikit-learnといった機械学習ライブラリを数値、画像、動画、音声、文章など状況に合わせて扱うことができると良いでしょう。
(例)機械学習モデルのデリバリー方式を決められる。
モデルリリース方式検討、実装スキル
モデルを適応するアプリケーションのリリース基盤を把握して適切な形でモデルを配布・反映することが求められます。
(例)CircleCIを活用してモデルをデプロイできる。
モデルのバージョン管理
一度生成したモデルは、モデルのバージョンとそのモデルの効果がどれほどだったのか分かるよう管理されていることが望ましいです。
そのため、一般的なgitなどのバージョン管理ツール、またはクラウドプラットフォームのバージョン管理サービスの利用知見が必要です。
モデルのモニタリング
モデルが想定した通りの性能結果を出しているか、エラーを発生させていないかなどを確認します。
また性能低下となった要因を調査する能力が求められます。
モデルの更新と改善
モデルの課題が明確になった場合、どのようなデータが必要でどのような改修を行うのかを決め、改善を実行する必要があります。
ここで改善を行うための段取り力(現状整理→課題分析→改善の検討→改善の評価→改善)が求められます。
AI/機械学習エンジニアに必要なスキルは幅広い!
機械学習エンジニアって結構DevOps(インフラ)系の技術要素が求められることが多いです。
なので、当時Web系エンジニアだった僕は非常にこの辺勉強するのが嫌でした。笑
インフラってなんだか難しいイメージがあったからです。
ただ勉強すればするほど、AWSやGCPなどのクラウドプラットフォームが以下に巨人で、これらを勉強しておかないとこの先エンジニアとして取り残されていくのが分かってきました。
これを機にインフラ系の知識も勉強されるとエンジニアとしての価値がさらに上がると思いますよ!