# 機械学習システムの設計パターン
## 定義
機械学習システムの設計パターンとは、学習(一括学習/逐次学習)と予測(バッチ処理/リアルタイム処理)の組み合わせ、および学習済みモデルの予測結果を既存システムへどう受け渡すか(サービング方式)によって分類される、教師あり学習をシステムに組み込む際の典型的な構成の型である。『仕事ではじめる機械学習』第4章は、まず「バッチ処理」(一括で何かを処理すること)と「バッチ学習/一括学習」(全教師データを使って重みを一括計算する最適化方針)が独立した軸であることを整理したうえで、成立しうる組み合わせのうち代表的な4パターンを挙げる: (1) バッチ学習+バッチ予測+予測結果をDB経由でサービング、(2) バッチ学習+リアルタイム予測+予測結果をAPI経由でサービング、(3) バッチ学習+エッジのリアルタイム処理で予測、(4) リアルタイム処理で学習・予測・サービングを行う。(Source: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.1, §4.2.6)
各パターンの選択は、Webアプリケーションから独立した機械学習ライブラリが充実する言語で開発できる自由度と、データ取得から予測結果を返すまでの時間(レイテンシー)という2つの軸のトレードオフで決まる。DB経由パターンは開発の自由度が高くレイテンシー制約が緩い代わりに予測対象の増加に処理時間が線形に伸び、API経由パターンは疎結合でA/Bテストがしやすい代わりにAPIサーバーの開発・運用コストとレイテンシーが課題になり、エッジパターンは通信レイテンシーを消せる代わりにモデルの変換・配信の仕組みが必要になる。(Source: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.2〜§4.2.6)
## 研究の機械学習 対 実現場の機械学習(設計への含意)
『機械学習システムデザイン』1章は、DB経由/API経由/エッジ/リアルタイムという具体的なサービングパターンではなく、そうしたパターンの選択理由そのものを規定する上位の対比軸として、研究分野での機械学習と実現場での機械学習の違いを5点(要求・計算の優先順位・データ・公正さ・説明能力)で整理する(表1-1)。研究は単一目標(ベンチマークデータセットでの最高性能)への最適化と高スループット・高速な訓練を優先するのに対し、実現場は複数の利害関係者の異なる要求に応えつつ低レイテンシー・高速な推論を優先する。この違いは、モデルのアンサンブルが研究(機械学習コンペ)では人気の手法でありながら、予測速度の低下や解釈困難さのために実現場ではあまり使われないという具体例に表れる。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] §1.2.1, 表1-1, §1.2.1.1)
計算の優先順位の違いは、レイテンシーとスループットのトレードオフという形でサービングパターンの設計に直接影響する。クエリーを1件ずつ処理する構成ではレイテンシーが高いほどスループットは低下するが、クエリーをバッチとしてまとめて処理する構成ではレイテンシーとスループットが同時に向上することがある。研究ではスループット優先でレイテンシーの増加が許容されやすいのに対し、実環境ではAkamaiの調査(100ミリ秒の遅延がコンバージョン率を7%低下させうる)やBooking.comの調査(レイテンシーの約30%増加がコンバージョン率を約0.5%低下させる)が示すように低レイテンシーが強く優先される。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] §1.2.1.2, 図1-4)
## バッチ予測とオンライン予測(デプロイ形態の軸)
『機械学習システムデザイン』7章は、上記の具体的なサービングパターン分類(DB経由/API経由/エッジ/リアルタイム、オフライン/オンライン/MaaS/エッジ)の基盤となる、予測の提供方式そのものの軸を提示する。予測には大きく3つの形態がある。(1) バッチ特徴のみを使用するバッチ予測(定期的またはトリガー発生時に予測を生成しSQLテーブルやインメモリデータベース等に保存、非同期予測とも呼ばれる)、(2) バッチ特徴のみを使用するオンライン予測(要求が届くと即座に予測を生成、オンデマンド予測・同期予測とも呼ばれる)、(3) バッチ特徴とストリーミング特徴を併用するオンライン予測(ストリーミング予測)。表7-1は、バッチ予測が高スループット・定期実行・すぐに結果が不要な場合(レコメンドシステム等)に向き、オンライン予測が低レイテンシー・リクエスト即時応答・データサンプル生成と同時の判断が必要な場合(不正検知等)に向くことを整理する。両者は排他的ではなく、よく使われるクエリーは事前計算しその他はオンラインで生成するハイブリッド運用も可能である。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]] §7.2, 表7-1)
7章はさらに、バッチ予測からオンライン予測への移行という観点で非対称なトレードオフを指摘する。オンライン予測はユーザー嗜好の変化に迅速に反応できる柔軟性を持つが推論レイテンシーの制約を受け、バッチ予測はレイテンシーを事前計算で回避できるが柔軟性が低く、事前にどのリクエストに対して予測するかを知っている必要がある(翻訳のように入力を事前に列挙できないタスクにはオンライン予測が必須になる)。この移行には、(a)ストリーミング特徴の抽出・モデルへの入力・ほぼリアルタイムでの予測返却を行うリアルタイムパイプラインと、(b)ミリ秒単位で応答できるモデル、という2つの構成要素が必要になる。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]] §7.2.1)
## 横断的知見
- **7章のバッチ予測/オンライン予測(+ストリーミング予測)という3形態は、4章・8章が導出する具体的な4類型の実装パターンの、さらに上位にある予測提供方式の軸として位置づけられる**: 4章のDB経由パターン・8章のオフラインアーキテクチャは7章のバッチ予測に、4章のAPI経由パターン・8章のMaaSアーキテクチャは7章のバッチ特徴のみのオンライン予測に、4章のエッジパターン・8章のエッジアーキテクチャは(バッチ特徴・オンライン特徴のいずれも使いうる)オンライン予測のエッジ実装に、それぞれおおむね対応する。ただし7章が独自に導入する「バッチ特徴とストリーミング特徴を併用するオンライン予測(ストリーミング予測)」は、4章・8章のいずれの4類型にも明示的には現れない——4章・8章は特徴の種類(バッチ/ストリーミング)ではなく実行タイミングと配置場所(どこで学習・予測・サービングするか)を分類軸にしているため、ストリーミング特徴の有無という7章の軸は4章・8章の分類の中に暗黙的に埋め込まれたままである。この意味で7章は、サービングパターンの分類そのものというより、パターンを構成する特徴パイプラインの設計に焦点を当てた、直交する追加軸を提供する。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]] §7.2, [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.2〜§4.2.6, [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] §8.2)
- **上位の対比軸(研究 対 実現場)と、下位の具体パターン分類(DB経由/API経由/エッジ/リアルタイム、オフライン/オンライン/MaaS/エッジ)は、抽象度の異なるレイヤーとして接続できる**: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] と [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] はいずれも「開発自由度 対 レイテンシー」や「トラフィック量・レイテンシ要件・稼働場所」という運用側の質問から出発して4類型の具体的なサービングパターンを導出するが、なぜレイテンシーが実現場において決定的な制約になるのか、その理由そのものは詳述しない。[[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] §1.2.1.2 の「研究はスループット優先・実現場は低レイテンシー優先」という対比は、4章・8章が前提としているレイテンシー制約の起源を、研究と実現場という文脈の違いから説明する上位レイヤーの説明を補う。3ソースを重ねると、「なぜ実現場のパターン選択でレイテンシーが支配的な軸になるのか(1章)」→「その制約のもとで具体的にどのパターンを選ぶか(4章・8章)」という2層構造として設計パターンの全体像を描ける。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] §1.2.1, §1.2.1.2, [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.2〜§4.2.6, [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] §8.2)
- **バッチ処理の効果について、1章とch.4は同じ「バッチ」という語で異なる次元を指している**: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] §1.2.1.2のバッチ処理は、複数クエリーをまとめて並列処理することでレイテンシーとスループットを同時に高める推論時の最適化技法を指す。一方 [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.1の「バッチ処理」は学習・予測を一括で実行するか逐次実行するかという実行方式の分類軸であり、必ずしも複数クエリーの並列化を伴わない。両者は語彙は同じでも指示対象(推論時のクエリーの束ね方 対 学習/予測の実行タイミング)が異なるため、混同すると設計判断を誤りうる。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] §1.2.1.2, [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.1)
- 『仕事ではじめる機械学習』第4章§4.4は、より詳細なアーキテクチャパターン集としてメルカリの「機械学習システム デザインパターン」(https://mercari.github.io/ml-system-design-pattern/README_ja.html)を参照先として挙げており、これが将来 wiki に取り込まれれば、本ページと突き合わせて汎用パターン分類との異同を記述できる(2026-08-18時点で未取り込み)。
- 4パターンの選択基準(開発言語の自由度 対 レイテンシー)は、[[MLモデル監視]] や機械学習基盤に関する既存 concept とも接続しうる論点だが、現時点でこれらの concept ページには本パターン分類と直接突き合わせられるレイテンシー/開発自由度トレードオフの記述がなく、横断的な観察としてはまだ書けない。
- **同じ4分類軸(DB/API/エッジ+リアルタイム)が、実務入門書とSRE体系書という異なる粒度の2ソースで独立に発見される**: 『仕事ではじめる機械学習』第4章の4パターン(DB経由・API経由・エッジ・リアルタイム学習/予測/サービング)と、『信頼性の高い機械学習』8章の4アーキテクチャ(オフライン・オンライン・MaaS・エッジ)は、対応関係がほぼ1対1である——オフライン(図8-1・8-2、データストア/メモリ内データ構造経由)はDB経由パターンに、MaaS(図8-4、独立したAPIサービス)はAPI経由パターンに、エッジ(図8-5)はエッジパターンに、オンライン運用(図8-3、リアルタイムの文脈データストリーム)はリアルタイムパターンにそれぞれ対応する。前者は「学習方式(バッチ/逐次)×予測方式(バッチ/リアルタイム)の組み合わせ」から出発してパターンを導出するのに対し、後者は「トラフィック量・レイテンシ要件・稼働場所・ハードウェア」という運用側の質問から出発して同じ4類型へ到達しており、導出の出発点が異なるにもかかわらず収束先が一致する。(Source: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.1〜§4.2.6, [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] §8.2)
- **8章は4章が名指ししなかった「利点/欠点」を体系的な形で埋める**: 4章はDB経由・API経由・エッジパターンをレイテンシー/開発自由度という2軸のトレードオフとして提示するが、各パターンの利点・欠点を箇条書きで網羅的に列挙してはいない。8章は各アーキテクチャに「利点」「欠点」の専用小節を設け、オフラインなら「検証可能性・柔軟なロールバック」対「ロングテールクエリでのスケーリング困難」、MaaSなら「一元的監視・懸念分離」対「分散システムとしての部分的障害への対応」というように、4章の2軸トレードオフをより多面的なチェックリストへ分解している。8章はまた「極端に低レイテンシならオフラインのメモリ内運用、エッジデバイスならエッジ、それ以外はMaaS」という明示的な選択指針(§8.2.5)を持ち、4章が2軸トレードオフの提示にとどめている選択基準を、具体的な意思決定ルールへ一段落とし込んでいる。(Source: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.2〜§4.2.6, [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] §8.2.1.1〜§8.2.4.2, §8.2.5)
- **「オンライン運用」の位置づけが2ソースで微妙にずれる**: 4章の「リアルタイム処理で学習・予測・サービングを行う」パターンは学習自体もリアルタイムに行う逐次学習を含意するのに対し、8章の「オンライン運用」(図8-3)はモデル自体はオフラインで訓練済みのまま、推論時にのみリアルタイムの文脈データ(位置情報・直近の検索セッション等)をあわせて使う設計であり、必ずしも逐次学習を伴わない。8章は「モデルは、デプロイ時に概念ドリフトに適応するのではなく、推論時に概念ドリフトに適応する」と述べており、これは4章のリアルタイム学習パターンとは異なる、推論時文脈補完という狭い意味での「オンライン」である。同じ「リアルタイム/オンライン」という語が指す範囲(学習の逐次性を含むか否か)が2ソース間で揃っていない点は、用語の使用時に注意が必要。(Source: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] §4.2.6, [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] §8.2.2)
## 未解決の問い
- 7章のストリーミング予測(バッチ+ストリーミング特徴併用のオンライン予測)は、4章・8章の4類型のどれに対応するか明示されていない。エッジパターン/アーキテクチャでストリーミング特徴を使う実装は可能か、動作原理まで踏み込んだ記述はいずれのソースにもない。
- メルカリ「機械学習システム デザインパターン」が別途 wiki に取り込まれた場合、そこで挙げられるアンチパターンは、本章の4パターンのどの失敗モードに対応するか。
- 第6章(継続的トレーニングをするための機械学習基盤)が扱う「基盤の継続運用」の視点は、本ページの4パターンのうちどれと結びつきやすいか(例: 定期再学習の頻度設計とパターン1の学習バッチ間隔の関係)。
- Feature Store(§4.2.3で言及、詳細は6.3.3)は、4パターンのうちどのパターンでどう効くか。API経由パターンの特徴量キャッシュとしての役割以外に、DB経由パターンやエッジパターンでの適用例はあるか。
- 8章が示す「オンライン運用」(推論時文脈補完、逐次学習を伴わない)と4章の「リアルタイム処理で学習・予測・サービングを行う」パターン(逐次学習込み)は、実装上どこまで独立に組み合わせられるか。両者を同時に満たす実装(推論時文脈補完+逐次学習)の事例は両ソースいずれにも記述がない。
- 8章の4アーキテクチャ選択指針(§8.2.5、低レイテンシ優先ならオフライン・メモリ内運用、それ以外はMaaS)は、4章の2軸トレードオフ(開発自由度 対 レイテンシー)とどこまで数値的に対応づけられるか。8章は具体的なレイテンシー閾値を示していない。
- 『機械学習システムデザイン』1章が示すバッチ処理時のレイテンシー/スループット同時向上(図1-4)は、4章のDB経由パターン(予測対象増加に処理時間が線形に伸びる)や8章のオフラインアーキテクチャの性能特性と、具体的にどう対応づけられるか。1章はサービングパターンの実装には踏み込んでおらず、バッチ最適化の一般原理を示すにとどまる。
## 関連
- ソース: [[@2021__OReillyJapan__仕事ではじめる機械学習 - Chapter 4 システムに機械学習を組み込む]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 8 サービス運用]] / [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 1 機械学習システムの概要]] / [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]]
- 概念: [[教師データのためのログ設計]] / [[カナリアテスト]] / [[耐障害LLMサービング]] / [[動的バッチングと継続的バッチング]]
- 実体: [[scikit-learn]] / [[TensorFlow]] / [[Apache Spark]] / [[Apache Kafka]]
## 出典
- 有賀康顕・中山心太・西林孝, 『仕事ではじめる機械学習 第2版』, オライリー・ジャパン, 2021, 第4章 §4.2.
- Cathy Chen ほか, 『信頼性の高い機械学習 ―SRE 原則を活用した MLOps』, オライリー・ジャパン, 2024, 8 章 §8.2.
- Chip Huyen 著, 江川崇・平山順一 訳, 『機械学習システムデザイン』, オライリー・ジャパン, 2023, 1章 §1.2.1.
- Chip Huyen 著, 江川崇・平山順一 訳, 『機械学習システムデザイン』, オライリー・ジャパン, 2023, 7章 §7.2, §7.2.1, 表7-1.