> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ja/serufuhosuto/inference-server/architecture.md).

# Inference アーキテクチャ

Inference はサーバーモードで実行するのが最適です。さらに、 [ネイティブ Python インターフェース](/deployment/ja/serufuhosuto/inference-library.md)もサポートしていますが、 [Docker を推奨する理由](#why-docker)を参照してください。これには REST API 経由でやり取りし、最も一般的には [Inference SDK](https://docs.roboflow.com/reference/inference/inference-sdk)を通して、または Web ブラウザーから（ [Roboflow アプリ](https://app.roboflow.com) は、ローカルでホストされた Inference サーバーのフロントエンドとして任意で動作できます）。

Inference は、モデル、または一連のモデルを通して予測を取得し、その結果を処理する流れを調整します。ワークロードを並列化して利用可能な GPU と CPU コアを効率的に使うために自動でマルチスレッド化し、動画ストリームを消費する際には変動する処理速度に動的に適応するため、ホストマシンに負荷がかかりすぎません。

Inference は Roboflow のサービスと通信してモデルの重みと Workflow 定義を取得し、後で評価できるようにモデル結果を記録しますが、計算はすべてローカルで行われるため、オフラインでも実行できます。

1 つの Inference サーバーで複数のクライアントとストリームを処理できます。

<figure><img src="/files/cb0613f17787926c0a1acb2c62649b9d8acda071" alt="Roboflow Inference architecture diagram"><figcaption><p>Inference がアプリケーション、モデル、Roboflow プラットフォームの間で果たす役割</p></figcaption></figure>

## マイクロサービスとしての Inference

Inference を使う最も一般的な方法は、大きなシステムの一部として小さく組み込み、下流のコードで消費される応答を生成することです。その応答は、モデルによる予測（たとえば、画像内の物体の分類、位置、サイズを含む検出結果のセット）を表すこともありますが、後処理ロジックの結果（たとえば検査の合否状態）、集計（たとえば過去 1 時間に見られた一意の物体数）、または可視化を表すこともあります。

画像ワークロードでは、入力はパラメータとして渡され、応答は同期的に返されます。

<figure><img src="/files/451a88a6e2d56e67a2d364a7b521ffb22492635e" alt="Inference as a microservice"><figcaption><p>マイクロサービスとしての Inference</p></figcaption></figure>

動画ストリームでは、サーバーがセッション終了まで動作する永続的な動画ワーカーを起動します。クライアントアプリケーションは、WebRTC を通じて処理済みフレームと予測データを受け取ります。

<figure><img src="/files/20e8e3787d2c4d83d32eee1dc506ccb43c5f4bcf" alt="Inference Server video streaming"><figcaption><p>Inference サーバーの動画ストリーミング</p></figcaption></figure>

マイクロサービスの使用例:

* Web サイト上でユーザーがアップロードした画像にタグを付ける
* 機械の電源を入れる前に、正しくセットアップされているか判定する
* 動画内の顔をぼかす
* 完成した回路基板内の配線ミスを検出する
* 製造品を検査して仕様に一致していることを確認する
* 対象物に欠陥や傷がないことを検証する
* 画像内の錠剤の数を数える

## アプライアンスとしての Inference

Inference は、動画ストリームを継続的に消費して処理し、データベースの更新、通知の送信、Webhook の発火、ハードウェアへのシグナル送信などの下流アクションを実行する自律的なエージェントとして扱うこともできます。このパターンでは、システムの完全なロジックは a で定義されます。 [ワークフロー](https://docs.roboflow.com/workflows) そして出力は外部システムにプッシュされます。

<figure><img src="/files/2d3c65de0940be7797292e6134c2050fb38cf322" alt="Inference as an appliance"><figcaption><p>アプライアンスとしての Inference</p></figcaption></figure>

アプライアンスの使用例:

* 詰まりが発生したらコンベアベルトを停止する
* 高速道路の交通分析を収集する
* セキュリティカメラの映像で不審な行動にフラグを立てる
* 車両がヤードに出入りするたびに在庫システムを更新する
* スクラップの山があふれたら警報を鳴らす
* 小売顧客の待ち時間を 1 日を通して記録する

## サーバーが代わりに処理する内容

| 機能                    | 内容                                                                                                                                                                                           |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **モデルのサービング**         | 物体検出、画像分類、インスタンスセグメンテーション、キーポイント検出、画像埋め込み、OCR、Visual Question Answering などを実行します。詳細は [対応モデル](https://docs.roboflow.com/models/supported-models/supported-models).                            |
| **画像処理**              | モデルが学習時に使用する前処理と後処理を同じ方法で、かつ効率的に適用するため、不要な遅延なしに精度を維持できます。                                                                                                                                    |
| **動画ストリーム管理**         | 動画ストリームを処理するために別スレッドを起動し、モデルが常に可能な限り最新のフレームを取得できるようにします。                                                                                                                                     |
| **Workflows**         | モデル、ロジック、統合、カスタムコードを通してデータをパイプし並列化する、宣言された計算グラフを実行します。                                                                                                                                       |
| **HTTP サーバー、SDK、CLI** | マイクロサービスとして使用するための HTTP API に加え、 [Python SDK](https://docs.roboflow.com/reference/inference/inference-sdk) および [CLI](https://docs.roboflow.com/reference/inference/inference-cli) それを操作するための |
| **速度**                | マルチプロセッシング、ハードウェアアクセラレーション、動的バッチ処理による自動並列化に加え、対応 GPU では任意で TensorRT 量子化とデバイス固有のレイヤー融合も利用できます。                                                                                                |
| **オフラインキャッシュ**        | モデルと Workflow 定義を取得してローカルに保存し、サーバーが [オフラインモード](/deployment/ja/serufuhosuto/enterprise/offline-mode.md).                                                                                      |
| **インサイト**             | Roboflow プラットフォームに接続して外れ値データをアップロードし、統計とテレメトリを公開し、下流のデータシンクに供給します。詳細は [モデルモニタリング](/deployment/ja/to/model-monitoring.md) および [Active Learning](/deployment/ja/to/active-learning.md).        |
| **移植性**               | macOS の開発マシン、クラウドサーバー、小型のエッジデバイスで実行できます。Docker タグを切り替えるだけで、同じコードを別のプラットフォームで実行できます。                                                                                                          |
| **拡張性**               | Apache 2.0 の下でオープンソースです。カスタムモデル、Workflow ブロック、バックエンドを追加するか、動的な Python ブロックを使ってブロック間のギャップを埋められます。                                                                                             |

## Docker を使う理由

Inference の実行には、Docker コンテナの使用を強く推奨します。機械学習の依存関係は環境のわずかな変化に敏感です。決定論的な環境に分離していないと、OS やドライバーを更新したり、アプリケーションコードの依存関係を更新したり、セキュリティパッチを適用したり、新しいマシンをセットアップしたりしたときに、システムが壊れる可能性が高くなります。イメージは、ライブラリのバージョンが互いに互換性を持ち、GPU を活用するようにパッケージがコンパイルされ、セキュリティパッチが適用されることを保証します。

Docker は移植性も提供します。後から、単一の大きなサーバーで複数クライアントに提供するようにしたり、CPU から GPU にアップグレードしたりしても、アプリケーションコードをリファクタリングする必要はありません。

例外は、コンテナがアクセラレータにアクセスできないハードウェアで、たとえば [macOS の MPS](/deployment/ja/serufuhosuto/inference-server/install/mac.md)では、加速を得る唯一の方法は Docker の外で実行することです。
