本記事は、2021年に DataRobot が買収した Algorithmia のウェブサイトに掲載されたもの(抄訳版)です。内容の一部に最新ではない情報や、現在は提供されていない製品に関する記述が含まれている可能性があります。
機械学習パイプラインとは何か、それが組織にどのようなメリットをもたらすのか、そしてこのテクノロジーをどのように組織へ導入できるのかについて、詳しく解説します。
機械学習パイプラインの概要とその重要性
データサイエンスの分野において「パイプライン」という言葉は急速に普及しており、今やシンプルなデータパイプラインから複雑な機械学習パイプラインまで、至る所で活用されています。パイプラインの究極の目的は、データ分析や機械学習における一連のプロセスを効率化することにあります。それでは、その詳細を深く掘り下げていきましょう。
ML パイプラインとは何か?
ML パイプラインの定義の一つは、「データの変換と相関付けを行い、分析可能なモデルへと導くことで、機械学習ワークフローを自動化する手段」であると言えます。このタイプの ML パイプラインは、ML モデルへのデータ入力プロセスを完全に自動化することを目的としています。
もう一つの定義は、「機械学習ワークフローを、独立し、再利用可能なモジュール式のパーツに分割し、それらをパイプラインとして結合してモデルを構築する手法」を指します。このアプローチを採用することで、モデル構築の効率が大幅に向上し、冗長な作業を排除してプロセスを簡素化することが可能になります。
これは、近年のマイクロサービスアーキテクチャへの移行とも密接に関連しています。アプリケーションを基本的で独立したパーツに分割することで、長期的により強力なソフトウェアを構築できるという考え方に基づいているのです。Linux や Unix のようなオペレーティングシステムも、この原則の上に成り立っています。「grep」や「cat」といった基本的な関数をパイプラインで繋ぐことで、非常に高度な機能を実現できるのと同様の仕組みと言えるでしょう。
なぜパイプライン化がこれほどまでに重要なのか
機械学習のパフォーマンスと設計において、なぜパイプライン化が不可欠なのかを理解するために、典型的な ML ワークフローを考えてみましょう。
一般的なシステム設計では、これらのタスクはすべて「モノリス(一枚岩)」として一括で実行されます。つまり、単一のスクリプトがデータの抽出、クリーニング、前処理、モデリング、そしてデプロイのすべてを担うのです。機械学習モデルは他のソフトウェアアプリケーションに比べてコード量が少ないことが多いため、すべての資産を一箇所にまとめるアプローチは一見合理的にも思えます。
しかし、モノリシックなアーキテクチャをスケールさせようとすると、以下の3つの深刻な問題が発生します。
- Volume(量): 同じモデルの複数のバージョンをデプロイする場合、データの取り込みや準備といった初期ステップが全く同一であっても、ワークフロー全体を2回実行しなければなりません。
- Variety(多様性): モデルのポートフォリオを拡大する際、ワークフローの初期段階のコードをコピー&ペーストする必要が生じます。これは極めて非効率的であり、ソフトウェア開発における「バッドサイン」でもあります。
- Versioning(バージョニング): データソースの構成やワークフロー内の共通パーツを変更する場合、すべてのスクリプトを手動で更新しなければなりません。これには多大な時間を要し、人的ミスを誘発する原因となります。
ML パイプラインを導入すると、ワークフローの各パートが独立したサービスとして抽象化されます。新しいワークフローを設計するたびに、必要な要素を自由に選択して組み合わせることができ、サービスへの変更は上位レベルで一括して適用されるようになるのです。
パイプラインアーキテクチャは、大規模運用で生じる問題を次のように解決します。
- Volume: ワークフローの必要な部分だけを呼び出し、再利用する予定の結果をキャッシュまたは保存することが可能になります。
- Variety: モデルのポートフォリオを拡大する際、初期段階のワークフローを複製することなく、新しいモデルにパイプラインとして組み込むだけで再利用できるようになります。
- Versioning: サービスが中央で管理され、各モデルにパイプライン接続されている場合、更新が必要な箇所は一箇所だけです。オリジナルのコードを更新すれば、そのコードを使用しているすべてのインスタンスに反映されます。
パフォーマンスと組織運営にもたらすメリット
ML パイプラインは、モデルポートフォリオ全体のパフォーマンスと組織体制を改善し、モデルの本番稼働を迅速化するとともに、機械学習モデルの管理をより容易なものにします。
スケジューリングと実行時間の最適化
機械学習の活用規模が広がるにつれ、ML パイプラインの多くのパーツがチーム全体で頻繁に再利用されるようになります。これを踏まえ、一般的なアルゴリズム間の呼び出しに対してデプロイを最適化することが可能です。これにより、適切なアルゴリズムをシームレスに実行し、計算時間の短縮やコールドスタートの回避が実現できるのです。
言語とフレームワークへの依存を解消
モノリシックなアーキテクチャでは、使用するプログラミング言語を一貫させ、すべての依存関係をまとめてロードする必要があります。しかし、パイプラインは API エンドポイントを使用するため、各パーツを異なる言語で記述し、それぞれ独自のフレームワークを使用することが可能です。これは ML イニシアチブをスケールさせる際の大きな強みとなります。言語やフレームワークの種類に依存せず、テクノロジースタック全体でモデルのパーツを再利用できるからです。
幅広い適用性と適合性
モデルのパーツを他のワークフローで再利用できるため、各関数を ML ポートフォリオ全体で広く活用できるようになります。たとえ2つのモデルの最終的な目的が異なっていたとしても、初期段階で同じ特定のステップが必要な場合があります。ML パイプライン化されていれば、そのステップを両方のモデルに適合させ、あらゆるサービスをあらゆるアプリケーションで自在に活用できるようになるでしょう。
機械学習パイプラインのユースケース
機械学習チームをスケールさせる上で、なぜパイプライン化が重要なのかを具体的に示すユースケースをご紹介します。
自然言語処理
自然言語処理のタスクには、繰り返し可能な複数のステップが含まれることがよくあります。例として、Twitter の感情分析ワークフローを見てみましょう。
このワークフローは、Twitter からのデータ取り込み、句読点や空白のクリーニング、トークン化とレマタイゼーション(基本形への変換)、そしてテキストを分類する感情分析アルゴリズムへの送信というプロセスで構成されています。
当初はこれらの機能をまとめておくのが合理的だと感じられるかもしれませんが、このデータセットに対してより多くの分析を適用し始めると、ワークフローをモジュール化するメリットが顕著になります。
パイプライン化されたコンポーネントであれば、アルゴリズムの差し替えや前処理の更新、あるいは別のユーザーからのツイート収集への変更を、ワークフローの他の要素を損なうことなく簡単に行えるようになります。修正内容をすべての反復箇所にコピー&ペーストする必要もなく、構造がシンプルになることでシステム全体の動作もよりスムーズになるのです。
ML パイプライン導入の課題
組織が機械学習システムにパイプラインアーキテクチャを導入しようとする際、最大の壁となるのは「自社での構築には膨大な投資が必要になる」という点です。そのため、現在のアーキテクチャをそのまま使い続ける方が簡単だと思われがちです。ゼロから構築することを考えれば、それは確かに事実かもしれません。
しかし、構築に多大な時間やコストをかけずに、機械学習パイプラインの恩恵を享受する方法があります。Algorithmia(当時)は、組織が機械学習の取り組みを容易にスケールできるよう、このシステムを提供しています。最先端のテクノロジーを組織のワークフローに導入することは、もはや決して困難なことではないのです。