← ガイドに戻る
InsightFace ServerDocker顔認識CUDAセルフホスト

Docker で InsightFace Server をデプロイ

CPU または CUDA で InsightFace Server をセルフホストし、ライセンス済みモデルの導入、最初の厳密な 1:N 検索、認証、永続データの保護までを Docker で実践します。

読了時間:10分
サービス、モデル、データベース、runtime の状態を表示する InsightFace Server ダッシュボード
登録前にダッシュボードとシステムで全依存要素が ready であることを確認します。

このガイドで作るもの

InsightFace Server は、顔検出、比較、登録、厳密な 1:N Person 検索、多言語 Web UI、REST API、SQLite、ローカル推論を 1 つのセルフホストサービスにまとめます。画像、埋め込み、モデル、インデックスを自組織の基盤内に保持できます。

このクイックスタートでは、完全な InsightFace リポジトリのチェックアウトからモデルを導入し、実際の検索を成功させるまでを説明します。実運用前に必要なモデル利用許諾、認証、HTTPS、データ永続化、安全な停止、CUDA のフェイルファスト診断も扱います。

本 Server は一般的な顔認識ワークフロー向けのプライバシー重視の選択肢であり、AWS Rekognition 互換製品ではありません。AWS IAM、SigV4、Region の概念、組み込み TLS、ユーザーアカウント、RBAC は実装していません。

始める前に

  • Linux x86_64 ホスト上の完全な InsightFace リポジトリと、Docker Engine、Docker Compose。
  • CUDA 12 の場合は、対応 NVIDIA GPU、NVIDIA Driver、NVIDIA Container Toolkit。ホスト側の CUDA Toolkit、cuDNN、ONNX Runtime、Python、OpenCV は不要です。
  • コンテナ取得とモデル導入時のネットワーク接続。導入後の通常起動はオフラインにできます。
  • 生体情報を処理する権限と、同意、アクセス、保存期間、削除、バックアップ、インシデント対応について文書化した方針。

1. CPU または CUDA を選び、モデルを導入する

完全な InsightFace チェックアウトのルートでコマンドを実行し、Compose スタックを 1 つ選びます。CPU は評価を始めやすくポート 18097、CUDA はポート 18098 を公開します。CUDA には互換 Driver と NVIDIA Container Toolkit が必要ですが、ホストに CUDA や cuDNN を入れる必要はありません。

以下は非対話式の --accept-license を意図的に使い、続けて buffalo_l を検証します。組織内でモデル条件を確認して受諾した場合だけ実行してください。同じツールで buffalo_m、buffalo_sc、antelopev2 も導入できます。

  • Turing、Ampere、Ada、Hopper は Driver R535 以降、Blackwell と RTX 50 シリーズは 570.26 以降が必要です。新規構築には安定版 R580 以降を推奨します。
  • 公開イメージにはモデル、顧客データ、API Key、本番設定は含まれません。
  • 1 つの構築で CPU と CUDA の Compose ファイルを混在させないでください。イメージ、ポート、Provider、名前付きデータボリュームが別です。
CPU:取得、モデル条件の受諾、導入、検証
mkdir -p server/.models
docker compose -f server/deploy/compose.cpu.yml pull
docker compose -f server/deploy/compose.cpu.yml \
  run --rm models install buffalo_l --accept-license
docker compose -f server/deploy/compose.cpu.yml \
  run --rm models verify buffalo_l
CUDA 12:取得、モデル条件の受諾、導入、検証
mkdir -p server/.models
docker compose -f server/deploy/compose.cuda12.yml pull
docker compose -f server/deploy/compose.cuda12.yml \
  run --rm models install buffalo_l --accept-license
docker compose -f server/deploy/compose.cuda12.yml \
  run --rm models verify buffalo_l

2. モデルライセンスの境界を理解する

Server のソースコードと Python SDK は MIT ライセンスですが、モデルファイルと重みはその MIT ライセンスの対象外です。buffalo_l を含む公開 InsightFace モデルパッケージは、InsightFace から別途商用許諾を得ていない限り、原則として非商用の学術研究用途に限定され、セルフホストしても商用モデル利用権は付与されません。

導入時に manifest.json と署名済み MODEL.LICENSE が server/.models に保存されます。verify はパッケージ ID、署名、期限、現在の許諾を確認します。このライセンスは利用条件を示すコンプライアンス証明であり、DRM でもモデルファイルのチェックサムでもありません。

  • --accept-license を付けない場合、条件を表示してダウンロードせず終了します。
  • モデル、manifest、ライセンスを一緒に保管し、通常運用では /models を読み取り専用でマウントします。
  • 商用利用、または公開モデル条件で対象範囲が明確でない場合は、利用前に InsightFace へ確認してください。

3. Server を起動して readiness を確認する

導入したスタックだけを起動します。CPU は http://SERVER:18097/、CUDA は http://SERVER:18098/ を開きます。health が HTTP 応答を確認したら、登録前にダッシュボードまたはシステムでサービス、データベース、モデル、実行 Provider がすべて ready であることを確認します。

CUDA 版は CUDAExecutionProvider を表示しなければなりません。起動時に GPU、Driver、CUDA/cuDNN/ONNX Runtime、実際の検出・認識 Session、Provider 配置、warm-up 推論を検証し、失敗時は CPU へ自動フォールバックせず終了します。

CPU を起動して health を確認
docker compose -f server/deploy/compose.cpu.yml up -d
curl -fsS http://127.0.0.1:18097/v1/health
CUDA 12 を起動して health を確認
docker compose -f server/deploy/compose.cuda12.yml up -d
curl -fsS http://127.0.0.1:18098/v1/health

4. 最初の Collection → Person → Search を完了する

検索可能な顔 Collection を作成・管理する InsightFace Server の Collections 画面
Person と FaceSample を登録する前に、モデルに固定された Collection を作成します。

Collections で employees のような安定 ID を作成します。System が表示する search profile を選び、メモリ予算に合う capacity を設定し、まず raw cosine の既定 threshold 0.4 を使います。Collection はモデル ID、digest、埋め込み次元、前処理、検出プロファイルの契約に固定されます。

People でその Collection を選び、鮮明な JPEG、PNG、WebP を 1 枚以上使って Person を登録します。standard review は、利用可能な顔が 1 つで、サイズ、信頼度、鮮明度、明るさ、姿勢の条件を満たすか確認するため、初期設定に適しています。バッチは一部だけ成功する場合があるので、却下理由を個別に確認します。

Search で同じ Collection を選び、その Person の別写真をアップロードします。結果は raw cosine similarity の降順で、Person のスコアは FaceSample 中の最大値です。similarity は確率ではありません。該当なしの空リストは正常な成功応答です。

  • 元画像は既定で保存されません。任意の顔保存は 112×112 にした bounding-box JPEG crop であり、元画像や認識用のアライン済み入力ではありません。
  • 採用サンプルは SQLite へ commit され、成功応答前にメモリ内の厳密検索 index へ追加されます。再起動時は SQLite から再構築されます。
  • Detect の顔なしは正常な空結果です。Compare はどちらかに利用可能な顔がない場合 422 face_not_found を返します。

5. ネットワーク公開前に保護する

付属 Compose は隔離された評価向けに認証が無効です。他のユーザーやネットワークから到達可能にする前に認証を有効化し、長くランダムな API Key をシークレット環境へ設定して、選んだスタックを再起動します。Web UI は現在のタブのメモリ内だけに Key を保持できます。

信頼できるリバースプロキシで HTTPS を終端し、広い CORS ではなく必要な origin だけを許可し、入口で rate/body/time limit を設けます。Docker、/data、/models、バックアップへのアクセスを制限し、画像、埋め込み、RTSP 認証情報、API Key をログへ残さないでください。

  • フェーズ 1 の Key は 1 種類で、マルチテナント認可ではなく、組み込みユーザーや RBAC もありません。
  • 同じデータボリュームを別の INSIGHTFACE_API_KEY で起動すると、稼働 Key が意図的にローテーションされます。
  • 組み込み TLS や法令順守レイヤーはありません。適法な処理と運用統制は運用者の責任です。
CPU:起動前に認証を有効化
export INSIGHTFACE_AUTH_ENABLED=true
export INSIGHTFACE_API_KEY='replace-with-a-long-random-secret'
docker compose -f server/deploy/compose.cpu.yml up -d
CUDA 12:起動前に認証を有効化
export INSIGHTFACE_AUTH_ENABLED=true
export INSIGHTFACE_API_KEY='replace-with-a-long-random-secret'
docker compose -f server/deploy/compose.cuda12.yml up -d

6. データを永続化し、安全にバックアップ・停止する

/data の SQLite が永続的な正本で、メモリ内の厳密検索 index は再生成可能です。Compose はモデルを読み取り専用でマウントし、/data を名前付き volume に保存します。書き込み停止中、または SQLite-safe な snapshot 方式で、データベースと設定済み crop 領域を一緒にバックアップします。

起動したスタックに対応する完全な down コマンドを使います。通常の down は container と network を削除しても database volume を保持します。絶対に -v を追加しないでください。docker compose down -v は名前付きデータ volume を完全に削除します。

  • 更新前に安全な snapshot を取り、/models とライセンスを残し、まずデータのコピーで新イメージを検証します。
  • 再起動・更新後は migration、/v1/health、モデル契約、既知画像の検索を確認します。
  • FaceSample の削除は埋め込みと任意 crop を削除します。空でない Collection の削除には明示的な force 確認が必要です。
volume を削除せず CPU スタックを停止
docker compose -f server/deploy/compose.cpu.yml down
volume を削除せず CUDA スタックを停止
docker compose -f server/deploy/compose.cuda12.yml down

7. 起動障害とリクエスト障害を診断する

health から始め、System、選択した Compose スタックの状態、container log を確認します。CUDA は Driver、GPU、モデル Session、CUDAExecutionProvider、Provider audit、warm-up のいずれかが失敗すると意図的に起動を止め、CPU へ静かに切り替わることはありません。

全応答には x-request-id があり、エラー本文には request_id があります。障害報告では該当時間の log と一緒に保存してください。401 unauthorized は Key 未設定またはローテーション、409 collection_model_mismatch は別モデル契約、422 face_not_found は利用可能な顔が選べなかったことを示します。

  • System の CPUExecutionProvider または CUDAExecutionProvider が選択した Compose と一致するか確認します。
  • server/.models に検証済み package と署名 license があり、/models が read-only か確認します。
  • CUDA では CPU fallback を期待せず、host Driver、GPU visibility、NVIDIA Container Toolkit を修正します。
CPU の health、状態、直近 log
curl -fsS http://127.0.0.1:18097/v1/health
docker compose -f server/deploy/compose.cpu.yml ps
docker compose -f server/deploy/compose.cpu.yml logs --tail=200 server
CUDA 12 の health、状態、直近 log
curl -fsS http://127.0.0.1:18098/v1/health
docker compose -f server/deploy/compose.cuda12.yml ps
docker compose -f server/deploy/compose.cuda12.yml logs --tail=200 server

本番デプロイの支援が必要ですか?

モデルライセンス、ランタイム最適化、対象ハードウェアへのデプロイ支援について InsightFace にご相談ください。

企業向けお問い合わせを送信