代表的な面接トピック

システムデザイン面接:監査可能で安全にロールバックできるモデルレジストリの構築

システム設計難しい
Offer.cc 編集チーム公開日 更新日

質問

複数のチームがモデルの登録、評価、デプロイ、ロールバックを行えるようにしつつ、バージョンの追跡可能性を維持し、エイリアス変更を安全に行い、デプロイ時に誤ったアーティファクトが読み込まれないようにするモデルレジストリを設計してください。

プロンプトとコンテキスト

あなたのプラットフォームは、さまざまなパイプラインに由来するトレーニングアーティファクトを持つ数百ものモデルを提供しています。オンラインサービスは承認済みバージョンへの安定した参照を必要とする一方、研究チームは迅速な実験を求め、コンプライアンス要件としてはトレーニングデータスナップショット、評価メトリクス、承認者、デプロイ履歴が求められます。モデルファイルはオブジェクトストレージに配置され、推論サービスはレジストリを介してバージョンとエイリアスを解決すると仮定します。

面接官が評価するポイント

面接官は、イミュータブル(不変)なモデルバージョンとミュータブル(可変)なリリースポインタを分離できるかを見ています。優れた回答では、メタデータの一貫性、アーティファクトの整合性、アトミックなエイリアス変更、環境の分離、承認フロー、ロールバックについて網羅されます。不十分な回答では、ファイル名を保存するだけの単なるCRUDサービスにとどまります。

最初に確認すべき明確化のための質問

  • モデルは環境間で再利用可能ですか?開発、ステージング、本番環境が分離されている場合、エイリアスと権限には個別の境界が必要です。
  • ロールバックは直前のバージョン、指定されたバージョン、それとも最後に正常だったバージョンのどれに対して行われますか?対象によってヘルスチェックおよび監査モデルが変わります。
  • どの評価エビデンスが必須ですか?データセットのスナップショットやメトリクスが不足しているバージョンは承認できません。
  • 推論サービスはモデルをキャッシュできますか?キャッシュTTLとエイリアスの伝播速度によってロールバック時間が決まります。
  • カナリアリリースや複数の稼働バージョンの運用は必須ですか?その場合、トラフィックルーティングをモデルバージョンのメトリクスと連動させる必要があります。

30秒で答えるフレームワーク

「モデルファイルとバージョンメタデータをイミュータブルにし、アーティファクトをコンテンツダイジェストとバージョンで指定し、承認済みバージョンに対して環境スコープのエイリアスを1つ使用します。登録、評価、承認、デプロイ、ロールバックはすべて監査対象のステート遷移として管理します。推論時はエイリアスをバージョンスナップショットに解決してからダイジェストと認可を検証します。リリースには条件付き更新を使用し、ガードレール違反が発生した場合はエイリアスをアトミックに最後に正常だったバージョンへと戻します。」

ステップごとの詳細回答

  1. オブジェクトの定義。 RegisteredModel はオーナーとポリシーを保持します。ModelVersion はアーティファクトURI、ダイジェスト、フレームワーク、入出力シグネチャ、トレーニングデータスナップショット、評価メトリクスを保持します。Alias は環境スコープのミュータブルなポインタです。
  2. アーティファクトをイミュータブルにする。 アップロード時にダイジェストを計算し、オブジェクトストレージにアーティファクトを書き込みます。バージョンはメタデータが追加されるのみで、ファイルを上書きすることはできません。ダウンロード時にダイジェストを検証します。
  3. ステートマシンの使用。 バージョンは registered、validated、approved、deployed、retired の順に遷移します。各遷移では実行者、理由、時刻、エビデンスへのリンクを記録し、無効な遷移は拒否されます。
  4. エイリアスを安全に切り替える。 candidatestagingchampion などのエイリアスは、一度に1つのバージョンのみを指します。読み取り側が中途半端な切り替え状態を参照しないよう、条件付き書き込みまたはトランザクションを使用します。
  5. デプロイ時の解決。 サービスはエイリアスをバージョンスナップショットに解決し、テナント、環境、ダイジェストをチェックした上でモデルをダウンロードしてキャッシュします。キャッシュにはエイリアスだけでなくバージョンも保存します。
  6. カナリアリリースとロールバック。 コントローラーがトラフィックグループをエイリアスまたはルーティングルールにバインドし、エラー、レイテンシ、ビジネスメトリクスを収集します。違反があればエイリアスを正常なバージョンへ切り替え、自動ロールバックイベントを記録します。

メタデータはリレーショナルデータベースに、大容量ファイルはオブジェクトストレージに保存します。イベントストリームを使用して非同期にキャッシュを無効化し、監査イベントにインデックスを付与できます。未完了のアーティファクトが本番環境に入り込まないよう、クロスリージョンレプリケーションは承認済みバージョンのみをコピーするようにします。

模範回答

「私は3つの境界を適用します。イミュータブルなバージョン、ミュータブルなエイリアス、そして監査対象のステート遷移です。各バージョンにはアーティファクトのダイジェスト、シグネチャ、トレーニングデータスナップショット、評価メトリクス、元の実行情報が含まれます。必要なエビデンスが欠落している場合、承認は拒否されます。本番環境の champion エイリアスは条件付き更新によって厳密に1つのバージョンへと変更されます。推論側はバージョン番号を解決してキャッシュし、そのダイジェストを検証します。カナリアコントローラーはモデルバージョンをエラー、レイテンシ、ビジネスメトリクスに紐づけ、ガードレールに違反した場合はエイリアスをアトミックに最後に正常だったバージョンへと戻します。権限はモデル、環境、アクションごとに分割され、エイリアスの移動、承認、ダウンロード、ロールバックは改ざん防止機能を備えた監査ログに記録されます。」

よくある間違い

  • 間違い: 既存バージョンのファイルを上書きする → 失敗する理由: デプロイの再現性が失われ、監査が変動するコンテンツを指すことになる → 修正策: バージョンとアーティファクトをイミュータブルにする。
  • 間違い: latest 文字列をそのままデプロイする → 失敗する理由: エイリアスの移動によってキャッシュや監査に不整合が生じる → 修正策: バージョンスナップショットへと解決し、そのダイジェストを記録する。
  • 間違い: 承認状態を単なるBoolean(真偽値)として保存する → 失敗する理由: 誰が何をなぜ承認したのかを説明できない → 修正策: エビデンスに裏付けられたステート遷移と監査イベントを使用する。
  • 間違い: トラフィックのみをロールバックする → 失敗する理由: キャッシュや依存関係が依然として新しいバージョンを読み込む可能性がある → 修正策: キャッシュをバージョニングし、依存関係をチェックした上で、エイリアスをアトミックに戻す。

フォローアップの質問と回答

バージョン番号を直接デプロイせず、なぜエイリアスを使用するのですか?

バージョン番号は再現性を提供し、エイリアスはリリースコントロールを提供します。これらを分離することで、クライアント設定を変更せずに切り替えを行いつつ、明確なバージョン監査証跡を維持できます。

同時エイリアス更新による上書きの競合をどのように防ぎますか?

エイリアスとともにバージョン番号またはリビジョン番号を保存し、条件付き更新を使用します。競合が発生した場合はポリシーを再読み込みしてリトライします。別のリリースを暗黙的に上書きしてはなりません。

トレーニングデータが機密情報である場合、レジストリには何を保存しますか?

生サンプルではなく、データセットのバージョン、アクセスポリシー、ダイジェストを保存します。評価エビデンスを取得する際はデータのアクセス権限を再利用し、アクセス監査ログを記録します。

古いモデルバージョンはいつ削除できますか?

保持期間、アクティブなデプロイ、監査上の保管義務(ホールド)がすべて解除された後にのみアーティファクトを削除します。メタデータとロールバック用ダイジェストは、コンプライアンス保持期間を通じて保持し続けます。

公開情報ソース

関連する質問

関連面接ツール

システム設計の回答には「回答する」を使用

まず要件を明確にし、スケール、アーキテクチャ、コンポーネント選定、トレードオフの順に進めます。

ツールを見る