# 機械学習システムの4要件 ## 定義 機械学習システムの4要件とは、『機械学習システムデザイン』2章が、ユースケースを問わずほぼすべての機械学習システムが満たすべきであるとして挙げる4つの非機能的な性質――信頼性・拡張性・保守性・適応性――を指す。具体的な充足水準はユースケースによって異なるが、これら4つの観点そのものは共通のチェックリストとして機能する。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2) ## 信頼性(reliability) システムが災難(ハードウェア・ソフトウェアの障害、人為的ミス)に直面しても、期待される正確な機能を実行し続ける性質。機械学習システムでは正確さの定義自体が難しく、`model.predict()` のようなAPI呼び出しは正常に完了していても予測結果そのものが誤っていることがある。比較対象となる正解ラベルが手元にない場合、予測が誤りであることに気づく手段がない。従来のソフトウェアシステムはクラッシュやランタイムエラー、404のような明示的な警告を発するのに対し、機械学習システムは静かに動作しなくなり、エンドユーザーが異常に気づかないまま利用し続けてしまう(Google翻訳の誤訳に気づきにくい例が典型)。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.1) ## 拡張性(scalability) モデルサイズ・トラフィック量・モデル数という3方向の増加に対処する能力。リソース面では、需要に応じたアップスケーリング(拡大)とダウンスケーリング(縮小)の両方が必要になり、常時ピーク需要分のリソースを確保し続けるとコストが増大する。モデル数の面では、1ユースケース1モデルから始まったシステムが、機能追加や顧客ごとのカスタマイズによってモデル数を増やしていく成長パターンが典型的であり(著者の経験では8,000社の企業顧客向けに8,000個のモデルを運用した例がある)、モデル数が増えると監視・再訓練の自動化と、モデルを再現するためのソースコード管理が必須になる。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.2) ## 保守性(maintainability) 機械学習エンジニア・DevOpsエンジニア・SME(当該ドメインの専門家)など、背景・使用言語・ツールが大きく異なる多様な貢献者が、互いに自分たちのツールを強制し合うことなく協力して作業できるようにする性質。ソースコードの文書化、コード・データ・成果物のバージョン管理により、モデルの元の作成者が不在でも十分に再現可能な状態を保ち、問題発生時には責任追及ではなく協力での特定・対処を可能にする。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.3) ## 適応性(adaptability) データ分布の変化やビジネス要求の変化に対応するため、パフォーマンスを改善させる能力と、サービスを停止させずに更新できる能力の両方を指す。機械学習システムはコードとデータの集合体であり、データが急激に変化する以上、システムも迅速に進化することが求められる。保守性と密接に関係する要件である。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.4) ## 横断的知見 - **「保守性」という同じ語が、少なくとも3つの独立した対象を指してvault内に存在する**: 本概念が指す保守性は「多様な人的コントリビューターが協力できる開発プロセス上の性質」であり、[[保守性]](`@2012__Wiley__Practical Reliability Engineering`)が定量化する保守性は「ハードウェア/システムの修理容易性をMTTR(平均修理時間)で測る信頼性工学上の性質」、[[データの保守性]](`@2024__OReillyJapan__信頼性の高い機械学習`2章)が扱う保守性は「セキュリティ・プライバシー・コンプライアンスの観点でデータを可用な状態に保つ性質」である。3者は対象(人的プロセス/物理システム/データ)も評価軸(協業のしやすさ/MTTR/コンプライアンス適合)もまったく異なり、共通するのは「壊れず長く使い続けられるようにする」という抽象的な志向のみである。同じ語で異なる概念を指す用語の重複は、vault横断で「保守性」を検索する際に文脈を取り違えるリスクを示す。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.3, [[@2012__Wiley__Practical Reliability Engineering - Chapter 16 Maintainability, Maintenance and Availability]] §16.1, [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 2 データマネジメント]] §2.5) - **信頼性の「静かな故障」という機械学習固有の性質は、ML訓練システムの信頼性原則の第1原則(ほとんどの障害はMLの障害ではない)と補完関係にある**: 本概念のソースは「機械学習システムは正解ラベルがなければ予測の誤りに気づけず、クラッシュのような明示的な警告なしに静かに劣化する」という**検知の難しさ**を強調する。一方 [[ML訓練システムの信頼性原則]] の第1原則は「経験豊富な実務家が長期の障害を調べると、根本原因のほとんどはML特有ではなく一般的な分散システムの障害である」という**根本原因の所在**を主張する。両者を重ねると、機械学習システムの信頼性問題は「検知が難しい(本概念)」ことと「原因の多くはMLに特有ではない(ML訓練システムの信頼性原則)」ことの2軸で特徴づけられ、対策の優先順位としては、まず一般的な分散システムの信頼性向上策(検知しやすい障害の除去)を先に固めたうえで、残る「静かに劣化する」ML特有のケースにモデル品質の監視を充てる、という段階的な設計が示唆される。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.1, [[ML訓練システムの信頼性原則]]) - **拡張性の3方向(リソース・トラフィック・モデル数)のうち、一般的な分散システム論が扱うのは主にリソース方向だけである**: [[スケーラビリティ評価]] が扱う一般的なスケーラビリティは、ノード数・負荷・データ量の増加に対してスループットがどれだけ線形に伸びるかを定量測定する話であり、本概念の「リソースのアップ/ダウンスケーリング」に対応する。しかし本概念が挙げる「モデル数の増加」という軸(1モデルから8,000モデルへの成長)は、スループットやレイテンシーの指標では捉えられない、成果物管理・再訓練自動化という別種のスケーラビリティ課題であり、[[スケーラビリティ評価]] のソースにはこの軸の議論がない。機械学習システムに固有の拡張性は、一般的な分散システムのスケーラビリティ評価軸に「モデル数」という次元を追加する形で拡張される。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] §2.2.2, [[スケーラビリティ評価]]) ## 未解決の問い - 適応性(データ分布の変化への追従)と保守性(多様な貢献者による協業のしやすさ)は「密接に関係している」と本章は述べるが、両者が両立しない具体的なトレードオフ(例: 迅速な適応のための自動化がドキュメント化・レビュー可能性を損なう場合)は本章では示されない。8章・9章(データ分布のシフト・継続学習)でこの関係がどう具体化されるか。 - ML訓練システムの信頼性原則の11原則のうち、第1原則以外(モデルの複数バージョン管理、良いモデルもいずれ悪くなる、等)は、本概念の4要件のどれに対応づけられるか、あるいは4要件をまたぐ実装レベルの詳細なのか。 - 「保守性」という語の3つの独立した意味(本概念/保守性/データの保守性)を、vault内でどう曖昧さなく参照し分けるか。concept名だけでは区別できず、参照時に必ず出典章を明示する運用ルールが必要か。 ## 関連 - ソース: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 2 機械学習システム設計の概要]] - 概念: [[保守性]](異なる領域の同名概念) / [[データの保守性]](異なる領域の同名概念) / [[スケーラビリティ評価]] / [[ML訓練システムの信頼性原則]] / [[機械学習プロジェクトの進め方]] / [[機械学習システムの設計パターン]] ## 出典 - Chip Huyen 著, 江川崇・平山順一 訳, 『機械学習システムデザイン』, オライリー・ジャパン, 2023, 2章 §2.2.