本番環境におけるMachine Learning(CMU講義)
(mlip-cmu.github.io)- CMUの17-445/17-645/17-745 Machine Learning in Production / AI Engineering Spring 2025講義は、MLモデルを実際にデプロイ・運用可能なソフトウェア製品にするプロセスを扱う
- 核心は、データサイエンティストとソフトウェアエンジニアが一緒に働ける共通理解であり、モデルの誤りを前提に要件・設計・デプロイ・運用・品質保証を結び付ける
- 講義では、誤予測への備え、MLOps、A/Bテストとカナリアリリース、データ品質・コンセプトドリフト・フィードバックループの検知、テスト・デバッグ、公平性・プライバシー・安全性を幅広く扱う
- 学生は100万人規模の映画推薦サービスをグループプロジェクトとして構築・デプロイ・評価・保守し、Kafka、Jenkins、Prometheus、Grafana、Dockerなども実習する
- 基本的なML経験とプログラミング能力は期待されるが、ソフトウェアエンジニアリング経験は必須ではない。講義資料・課題・教材が公開されており、自習や教育資料として活用できる
講義の目標と対象
- Machine Learning in Production / AI Engineeringは、MLモデルやプロンプトで予測を作る段階の先を扱う講義
- モデルを製品へ転換し、実環境にデプロイする
- 品質への信頼を確保する
- スケールさせて運用・保守する
- Spring 2025講義は、ある程度のデータサイエンス経験を持つ学生を対象に設計されている
- 例: ML講義の受講、
sklearnの使用経験 - 基本的なPythonプログラミングとUnixシェルの利用能力が期待される
- テスト、要件、アーキテクチャ、プロセス、チーム経験といったソフトウェアエンジニアリングの背景は求められない
- 例: ML講義の受講、
- 今後この講義は少なくとも毎年春学期に提供される予定で、一部の秋学期にも開講される可能性がある
- 夏学期での提供予定はない
公開資料と参考リソース
- 研究者・教育者・関心のある読者向けに、スライドや課題を含む全資料をCreative Commonsライセンスで公開している
- CMU MLIP GitHub
- Spring 2025の公開資料はcourse GitHub repositoryにある
- ほぼ全講義に対応する章を持つオンライン教材も公開されている
- Machine Learning in Production textbook
- この教材はMIT Pressから出版予定で、オンラインではCreative Commonsライセンスで提供される
- 講義の趣旨と初期設計を扱った論文もあわせて提供されている
- Summer 2020の講義録画はcourse pageにあるが、現時点ではやや古い資料となっている
- 関連研究を探すためのannotated bibliographyも提供されている
本番MLシステムで扱う問い
-
誤った予測を前提にした設計
- モデルが間違える状況でもシステムがどう動作すべきかを扱う
- 起こり得るミスの中でも安全性とセキュリティを維持する方法を扱う
- 実環境で動作するユーザーインターフェースとシステム全体の設計をあわせて見る
-
本番デプロイと更新
- モデルを安定的にデプロイし、更新する方法を扱う
- MLパイプライン全体をテストする方法を扱う
- MLOpsツールでデプロイ工程を自動化・拡張する
- A/Bテストやカナリアリリースのような本番実験を扱う
- データ品質の問題、コンセプトドリフト、フィードバックループ検知を扱う
-
スケーラブルなMLシステム
- 大規模な学習データ、テレメトリデータ、ユーザーリクエストを処理するシステム設計を扱う
- ストリーム処理、バッチ処理、ラムダアーキテクチャ、データレイクといった選択肢を比較する
-
テストとデバッグ
- モデル予測の品質を本番で評価する方法を扱う
- モデルだけでなく、MLベースのシステム全体をテストする
- ソフトウェアテスト、自動テストケース生成、シミュレーション、継続的インテグレーションの知見をML本番テストに適用する
-
精度以外の品質特性
- 学習・推論レイテンシ、運用コスト、拡張性、説明可能性、公平性、プライバシー、堅牢性、安全性を扱う
- オフライン動作の必要性やモデル更新頻度も考慮する
- ビジネスの本番環境で重要な品質要件を特定し、衝突やトレードオフを調整する
ケーススタディとグループプロジェクト
- 講義で扱うケーススタディには、さまざまなMLベース製品が含まれる
- 自動音声文字起こし
- ウェブカメラを用いた行方不明児童の分散検知
- 拡張現実による即時翻訳
- がん検知、転倒検知、COVID診断などの医療・健康サービス
- PowerPointの自動スライドレイアウト
- 半自動の大学入学評価
- 在庫管理
- スマートプレイリストと映画推薦
- 広告不正検知
- 配送ロボットとスマート走行機能
- 拡張グループプロジェクトでは、映画推薦サービスを構築・デプロイ・評価・保守する
- やや現実的な「本番」環境を想定する
- ユーザー規模は100万人
学習成果と実習ツール
- 受講後、学生はMLコンポーネントを含む本番システム設計において、複数の品質特性のトレードオフを分析できる必要がある
- 精度だけでなく、運用コスト、レイテンシ、更新可能性、説明可能性も扱う
- MLコンポーネントの誤りの可能性を前提に、本番品質の堅牢なシステムを実装できる必要がある
- モデル学習、サービング、バージョニング、実験のために、耐障害性と拡張性を備えたデータインフラを設計できる必要がある
- テスト自動化と品質保証手法で、MLパイプライン全体の品質を確保する
- データ品質
- データドリフト
- フィードバックループ
- モデル品質
- 本番でテスト・監視可能なシステムと、堅牢なデプロイパイプラインを作れる必要がある
- 安全性、セキュリティ、プライバシー、公平性、ユーザビリティといったシステムレベル要件を考慮する
- 習熟するツールはApache Kafka、Jenkins、Prometheus、Grafana、Dockerおよび複数のMLOpsツール
講義運営と日程
- 講義番号は17-445/17-645/17-745で、12ユニット講義
- すべての番号で講義内容は同じだが、PhDレベルの17-745では2つの宿題を必須のresearch projectに置き換える
- Spring 2025の講義は対面で実施される
- 講義: 月・水 2:00–3:20pm, PH 100
- ラボ: 金曜日の複数時間帯・複数会場で実施され、リモート専用ラボもある
- 講義内容はここ数年おおむね安定しているが、具体的なトピックやツールは新しい研究やツールに合わせて継続的に更新されている
- 暫定スケジュールは変更される可能性があり、学期中の要望トピックや学習支援を反映して調整されることがある
- 講義トピックの流れは、モデルからAIベースシステムへの転換、要件収集、ミスへの備え、モデル品質、協働、行動ベースのモデルテスト、アーキテクチャと設計、モデルデプロイ、本番実験、データ品質、パイプライン自動化、スケール、運用計画、バージョニング・来歴・再現性、技術的負債、倫理・公平性、説明可能性、安全性、セキュリティ・プライバシーへと続く
評価と課題ポリシー
- 課題提出、採点、討論、質問、告知、補助文書にはCanvasとGradescopeを使用する
- スライドは講義ページに掲載され、Slackは宿題やプロジェクト関連の連絡に使われる
- GitHubはグループ作業の調整に使われる
- 成績配分は次のとおり
- 個人課題 35%
- グループプロジェクト 30%
- 中間試験 15%
- 参加 5%
- ラボ 10%
- リーディングクイズ 5%
- 期末試験はない
- 採点では明確な仕様と配点基準を提供し、各部分は合格/不合格で採点される
- 部分点はない
- 一部課題には少量のボーナス点がある
- 成績境界は比較的高めに設定されている
- A+は99%超
- Aは96%超
- A-は94%超
- B+は91%超
- Bは86%超
- B-は82%超
- Cは75%超
- Dは60%超
前提知識と受講準備
- 正式な前提科目はないが、受講を成功させるために基本的なML経験と基本的なプログラミング能力が期待される
- MLの背景としては、特徴抽出、モデル構築と評価、学習手法がいつどのように機能するかについての基礎理解が推奨される
- PythonとJupyter notebookの経験が役立つ
- 実務プロジェクト、独学、オンライン講座でも十分な場合がある
- 匿名・無採点のprerequisite knowledge checkで背景知識を確認できる
- プログラミングには基本的な習熟が必要
- Pythonのような言語の基本的な流暢さ
- その言語のライブラリをインストールし学習する能力
- Unixマシンに
sshで接続し、基本的なコマンドライン作業を行う能力 - Dockerのような新しいツールをインストールし学習する能力
- 特定のプログラミング言語は指定しないが、ほぼすべてのチームは主にPythonを使用する
- Git、Docker、Grafana、Jenkinsなどの必須ツールはラボで導入と例示があり、学生自身が文書やチュートリアルを読んで習得することが期待される
- FlaskのようなライブラリでWebサービスを書く基本的な使い方は、自力で学べる必要がある
- ソフトウェアエンジニアリング経験は前提条件ではない
- 要件工学、ソフトウェア設計、ソフトウェアテスト、分散システム、継続的デプロイ、チーム運営のようなトピックは講義で扱う
授業参加、ラボ、リーディング
- 講義は対面で実施され、授業参加は学習体験の重要な一部
- 講義録画はCanvasでbest effortベースで提供される
- 同期型リモート授業オプションはない
- ラボは録画しない
- Slackは授業中の活動にも使用されるため、授業中にノートPC、タブレット、スマートフォンからアクセスできる必要がある
- ラボは通常、ツールを紹介し、1つ以上の明確な成果物を求める
- ラボ課題は約1時間分として設計されている
- 成果物はその週のラボ時間中にTAへ見せれば合格/不合格で採点される
- コード、実行デモ、口頭質問への回答が含まれることがある
- ラボは負担の低い最初の実習として設計されている
- 期待に達しない場合は、ラボ時間中に引き続き修正できる
- 明示的な理由やトークン使用なしに、ラボ終了後の提出は受け付けない
- リーディング資料としてはGoeff Hultenの Building Intelligent Systems: A Guide to Machine Learning Engineering を多く使用する
- 独自教材Machine Learning in Productionは各講義と密接に結び付いているが、必読章ではなく補助的な読み物として案内される
- ほとんどの授業には読書課題があり、Canvasのリーディングクイズは授業前に提出する必要がある
- クイズは読書に関連する自由記述式の質問1問で構成される
- 誠実に参加したかどうかを合格/不合格で評価する
チームワークと提出の柔軟性
- チームワークは講義の必須要素
- グループプロジェクトは3~5人チームで行う
- チームは講師が割り当てる
- 各チームにはTAメンターが割り当てられる
- チーム課題にはteam citizenship基準のピア評価が適用される
- 積極的で協力的なチームメンバーとしての役割を評価する
- チームメンターは各マイルストーン後にチームとデブリーフを行い、チームワーク改善戦略を議論する
- 各学生は学期中に使用できる個人トークン8個を受け取る
- トークン1個で個人宿題を1日遅れて提出できる
- トークン3個で個人宿題を改善またはやり直し、短い振り返りとともに再提出できる
- トークン1個でリーディングクイズの遅延提出または再提出ができる
- トークン1個でラボの遅延完了または再実施ができる
- 余った個人トークンは学期末に参加1日分として数えられる
- 各チームも別途チームトークン8個を受け取る
- マイルストーン期限延長に1日あたり1個使用できる
- 振り返り付きでマイルストーンを再提出する場合は3個使用できる
- 個人トークンとチームトークンは相互に代用できない
- トークンがない場合、個人・チーム課題の遅延提出には、開始した1日ごとに15%の減点が適用される
AIツール、協働、研究参加
- 講義の性質上、コンテンツ生成AIツールの使用は制限しない
- ChatGPT、Bard、Co-Pilot、Stable Diffusionのようなツールが使用可能
- StackOverflowやチュートリアルのような外部コード再利用も可能
- 提出物の正確性は全面的に学生の責任
- コンテンツ生成ツールはもっともらしいが誤った答えを作ることがあり、そのような答えは得点にならない
- 適用されるライセンスの順守も学生の責任
- 一般的な学業上の誠実性ポリシーが適用される
- 他の学生の解答をコピーしたり、共同作成した解答を持ち込んではならない
- 他の学生の解答を見たり、自分の解答を提供したり、他の学生が見られる場所に置いてはならない
- 解答を公開GitHubに上げることも許可されない
- ラボでは他の学生と協働できるが、リーディングクイズ・宿題・試験では協働できない
- 不正行為に対する最低限の制裁は当該課題全体の0点であり、大学の手続きに従って追加懲戒があり得る
- 講義では学生課題を分析する学術研究も行う
- 参加しなくても成績やCMUでの学業経歴に影響はない
- 研究データに学生の成績は含まれない
- 分析は講義終了と最終成績提出後に、匿名化・集計された形で行われる
1件のコメント
Hacker Newsのコメント
資料は確かに実用的。Kafka, Docker, Kubernetes, Jenkins はいずれも業界標準のツールで、MLOpsに焦点を当てている点も新鮮
単にモデルを作るところで終わらず、機械学習と実運用システムの間のギャップを扱う課程なのが良い。説明可能性、公平性、モニタリングまで扱っているのも気に入った。ただ、実習を見ると、中級のソフトウェアエンジニアや意欲ある初心者でもチュートリアルで習得できそうな内容が多く見える。Git、Flask、コンテナオーケストレーションは有用だが、本番環境をすでに経験した人にとってはかなり基本的。分散学習のネットワーク最適化や大規模推論運用のような、より深い課題はあまり扱われていないようで、グループプロジェクトで出てくるのか気になる。Jenkins は広く使われているが、CI/CD では GitHub Actions や ArgoCD のような、よりモダンなツールも紹介したほうがよいのではないかと思う。Kubernetes も必須だが、エッジデプロイやサーバーレスシステム向けの代替・補完ツールまで扱えば、より将来志向になりそう
Jenkins と他の CI/CD フレームワークの間に概念的な大きな違いがないなら、人気のあるものの一つを選んで使えばよく、実際そうしているように見える
20年前は Java でデータベースを作りながら学んでいて、その頃も「いずれ廃れるかもしれないツール」を使っていた。単に新しい出発点が変わっただけだ
実習をざっと見たが興味深い。LLM の経験はあまりないフルスタック開発者だが、Git, Flask, Kafka, Kubernetes のように半分はすでに馴染みがあり、残りの半分もただのコードに見える
機械学習と聞いて思い浮かべていたような複雑な数学はほとんどない。だとすると MLOps は博士号のない一般の開発者でも、実際にはそれほど手が届きにくい分野ではないということなのか気になる
たとえばシミュレーションで大量の合成データを作るなら、バイアスのないデータセット生成そのものより、バッチ処理、エンコーディング形式、データ投入のような問題のほうに関心が向くかもしれない。クラウドソーシングでデータを収集・サンプリングしなければならないなら、リザーバサンプリングの理論よりも、オンラインで高速に処理し、コストと計算資源を効率的に使う実装のほうが重要なことが多い
ほとんどの会社で機械学習エンジニアとは、ソフトウェアと機械学習をある程度理解しているエンジニアのことで、良い場合は両方得意だが、悪い場合は両方いまひとつだ
この課程は データ品質 をほとんど扱っておらず、第16章になってようやく出てくるようだ。著者たちにどれほど産業現場の経験があるのか気になる
実際には時間の90%をデータ品質とデータクレンジングに費やすことになる
たとえば自分の機械学習業務はほぼ全て、工学シミュレーションの回帰・サロゲートモデル開発の文脈なので、データ品質やクレンジングはほとんど問題にならない。仕事の大半はデータセット生成とモデル選択・学習・デプロイの側にある。仕事による
データパイプラインが元データ生成、変換、前処理の段階で固まる前に整えておけば、後で頭の痛い問題をかなり減らせる
学生でない人でも一緒に追える場所があるのか気になる
誰でも登録できるのか、それとも国内トップ級のコンピュータサイエンスプログラムの一つに合格しなければならないのか気になる
良さそうだ。LLM Systems の課程も同様だ
機械学習クラスタ基盤 の構築に関する文献や講義を知っている人がいれば気になる。特にストレージ基盤のスケーリング、ネットワーキング、スケジューリング手法に興味がある
ストレージがモデルやデータの保存なら、S3 のようなオブジェクトストレージや、EFS、Lustre のような共有ネットワークファイルシステムを使えばよい。大規模 GPU ネットワーキングについては決定版の資料をあまり知らない。スケジューリングは今や事実上解決済みに近く、何でも動く。Docker イメージベースのジョブを定期実行する自前のコーディネータを作ってもいいし、メッセージキューベースのメタデータ・トリガーシステムを組み合わせれば、かなり短期間で作れる。Airflow や、大規模ジョブ向けの AWS Batch も使える。見落としがあるとすればモデルサービングかもしれない。特にレコメンデーションシステムでは難しく、レイテンシに敏感で、レイテンシスパイクやトラフィック急増に弱い。よく書かれた Python コードでも、かなり早く限界にぶつかることがある
この課程が公開されてうれしい。Christian は人としても素晴らしく、仕事も良い。この課程と本の初期の姿をある程度知っているので、強く勧められる
さまざまな規模の 機械学習プラットフォームとシステム で9.5年働いてきたが、資料は良さそうだ
課程の難易度を過小評価しているのかもしれないが、入門課程のように聞こえる。モデル説明可能性ツール までは、ほとんどがかなり直感的に見える
それでも、大半のユースケースで業界標準ツールを使っている点は良いと思う