Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】I Built a Self-Updating ML Model That Handles Traffic With Ease - Here’s How

2025年09月16日に「Dev.to」が公開したITニュース「I Built a Self-Updating ML Model That Handles Traffic With Ease - Here’s How」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

自己更新型MLモデルをAWSとDockerで構築し、トラフィックを処理する方法を解説。データ更新時にGitHub Actionsで自動再学習・デプロイするMLOpsワークフローを実践する。AWS CDKでインフラをコード化し、費用を抑え安定稼働させる技術が学べる。

ITニュース解説

このプロジェクトは、開発者のローカル環境で作成された機械学習モデルが、実際にユーザーに利用されることなく終わってしまうというよくある課題を解決することを目指している。具体的には、自己更新型の機械学習モデルを構築し、大量のトラフィックでも安定して動作させ、さらに低コストで運用できる仕組みを、システムエンジニアを目指す初心者にも理解しやすいように実現した事例である。AWS(Amazon Web Services)、Docker、そしてCI/CD(継続的インテグレーション・継続的デリバリー)といった主要な技術を組み合わせることで、機械学習モデルの運用(MLOps)の入門レベルを実践的に学ぶことができる。

まず、機械学習モデルの構築から始める。このプロジェクトでは、Kaggleのデータセットを使用したシンプルな回帰問題、例えば交通量予測のようなタスクに取り組んだ。モデルには「XGBoost」という高性能なアルゴリズムが採用されている。XGBoostは、表形式のデータに対して特に高い予測精度を発揮し、限られたデータや特徴量でも優れた結果を出すことが多い。モデルの予測性能を最大限に引き出すためには、その設定(ハイパーパラメータ)を適切に調整する必要があり、ここでは「Optuna」というPythonライブラリが使用された。Optunaは、最適なハイパーパラメータを効率的に探索し、モデルの精度向上を自動化するツールである。データセットが小さく、モデルの学習にかかる時間も短かったため、開発者のローカルマシンでトレーニングが行われた。これにより、高価なクラウドでの計算リソースを節約し、コストを抑えながら学習済みのモデルとその設定ファイルが作成され、AWSのストレージサービスであるS3にアップロードされた。

次に、この学習済みモデルをクラウド上で動かすための実行環境の準備に取り掛かる。AWSにはSageMakerという機械学習向けのフルマネージドサービスがあるが、このプロジェクトではAWSが提供する既存のコンテナイメージではなく、「カスタムDockerコンテナ」を構築する戦略が取られた。その理由は、最新バージョンのライブラリ(例えばXGBoostの最新版)を使用したいというニーズがあったためだ。AWSの既存イメージはしばしばライブラリのバージョンが古く、開発の柔軟性を制限することがある。カスタムコンテナを利用することで、モデルが動作する環境を完全に制御でき、さらにローカル環境でモデルの動作を事前にテストできるという大きなメリットがある。Dockerとは、アプリケーションとその実行に必要なすべての依存関係を一つにまとめた「コンテナ」と呼ばれるパッケージを作成する技術で、これによりどのような環境でもアプリケーションを同じように実行できる。このカスタムコンテナ内には、Pythonの軽量なWebフレームワークであるFlaskを使って、モデルに対する予測リクエストを受け付ける/invocationsエンドポイントと、コンテナが正常に動作しているかを確認するためのヘルスチェック用/pingエンドポイントが実装されている。これらのエンドポイントを実装することで、SageMakerがモデルと通信するために必要な機能が提供され、開発者はDockerイメージをローカルで実行し、APIテストツールを使ってモデルの動作を検証することが可能になる。

モデルと実行環境が準備できたら、いよいよそれをAWS上にデプロイするプロセスだ。この段階では、「AWS CDK(Cloud Development Kit)」というツールが重要な役割を果たす。AWS CDKは「Infrastructure as Code(IaC)」と呼ばれる手法を実践するためのもので、サーバーやネットワークといったAWSのインフラストラクチャを、Pythonなどのプログラミング言語で記述し、コードとして管理・デプロイすることを可能にする。手動でAWSコンソールからインフラを構築するのに比べ、CDKを使うことで、より正確に、より迅速に、そして繰り返し同じ環境を構築できるという大きな利点がある。具体的には、CDKによってカスタムDockerイメージと学習済みモデルのファイルがAWS上にデプロイされ、これらを組み合わせて「SageMaker Model」が作成される。そして、このモデルを外部から利用可能にするために「SageMaker Endpoint」として公開される。さらに、インターネット経由でこのエンドポイントにアクセスできるように、「API Gateway」というサービスを通じて公開される。API Gatewayは、外部からのリクエストを受け取り、それを「AWS Lambda」というサーバーレスな関数に転送する役割を果たす。Lambda関数は、受け取ったリクエストをSageMakerエンドポイントに転送し、モデルからの予測結果を受け取ってクライアントに返す。この一連の構成は「サーバーレスインファレンス(推論)」と呼ばれ、モデルがリクエストを受け取ったときだけコンピューティングリソースが利用されるため、運用コストを最小限に抑えることができる。

このプロジェクトの核心の一つは、モデルの「自己更新機能」である。これは「CI/CDパイプライン」によって実現されている。ここでは「GitHub Actions」というCI/CDサービスが利用された。GitHub Actionsは、GitHubリポジトリへのコードのプッシュや、特定のアクションをトリガーとして、あらかじめ定義された一連の処理を自動的に実行する仕組みである。このプロジェクトでは、データフォルダ内のCSVデータセットが変更されたり、手動でパイプラインがトリガーされたりすると、自動的にプロセスが開始されるように設定されている。パイプラインはまず、最新のコードを取得し、PythonやNode.jsなどの開発環境をセットアップする。次に、必要なライブラリをインストールした後、モデルのトレーニングスクリプトを実行して、新しいデータでモデルを再学習させる。学習が完了すると、最新の学習済みモデルとDockerイメージが生成され、AWS CDKが実行されて、既存のSageMakerエンドポイントが新しいモデルとコンテナで自動的に更新される。GitHub ActionsとAWS間のセキュアな連携には、OpenID Connect(OIDC)とIAMロールが使用されており、GitHub ActionsからAWSリソースに安全にアクセスできるようになっている。この自動化された更新プロセスにより、モデルは常に最新のデータで学習され、改善されたバージョンが迅速にデプロイされるため、手作業によるミスを減らし、運用効率を大幅に向上させることが可能になる。

最終的に、デプロイされたAPIの性能テストが実施された。PostmanというAPIテストツールを用いて、仮想ユーザー30人による負荷テストを行った結果、初期段階で500〜600ミリ秒程度の遅延が発生する「Lambdaコールドスタート」が確認された。これは、Lambda関数が初めて呼び出される際に、その実行環境が起動するのに時間がかかる現象である。しかし、この初期遅延が解消された後は、構築されたインフラは非常に安定したパフォーマンスを発揮し、一貫して約100ミリ秒という低い応答時間でトラフィックを処理していることが示された。テスト中にエラーも発生せず、この構成が少量のトラフィックを問題なく処理できることが確認できた。より大規模な運用を想定する場合は、さらに多くのリクエストや急激なトラフィック増加のシナリオ、あるいはシステムが処理能力の限界に達する「スロットリング」の状況などもテストする必要があるが、このプロジェクトではその基本的な性能と安定性を確認するまでが行われている。

このプロジェクトを通じて、システムエンジニアを目指す初心者は、機械学習モデルの構築と最適化、Dockerを利用したカスタム実行環境の作成、AWS CDKを用いたクラウドインフラのコードによる管理、そしてGitHub Actionsを活用したCI/CDパイプラインの構築とAWSとの連携といった、現代のIT開発において非常に価値のある多岐にわたる実践的なスキルを学ぶことができる。特に、機械学習モデルを開発するだけでなく、それを実際のサービスとして運用し、継続的に改善していくためのMLOpsの基本的な考え方を、具体的な技術スタックを通して体験できる点が大きな学びとなるだろう。

関連コンテンツ

関連IT用語