コンテナ入力の検証

プライベートAIサービス・コンテナへの入力は、様々なソースから取得でき、それぞれ異なる方法を使用して検証されます。

コンテナへの入力には、クライアントからのHTTPリクエスト入力、コンテナ管理者が提供するホスト・システムからのファイル、およびコンテナ起動時にコンテナ管理者が設定する環境変数が含まれます。

HTTPリクエスト入力(REST API)

REST APIは、本文(ペイロード)を持つすべてのリクエストに対してメディア・タイプapplication/jsonを受け入れ、すべてのレスポンスに対してapplication/jsonを返します。入力は、Micronautが提供するシリアライズ・フレームワークを使用して解析され、オブジェクトにデシリアライズされます。このプロセス中に発生したエラーは捕捉され、問題を示すメッセージとともにHTTP 400としてクライアントに戻されます。デシリアライズ後、リクエスト・オブジェクトは、次をチェックするルールに照らして検証されます。

  • NULLまたは空であるか
  • 数値パラメータは、必要な型かつ必要な範囲内の数値であるか
  • テキスト、URIおよびUUIDパラメータは、必要な型に対応する想定された値または正規表現と一致するか

この時点での検証における失敗も処理され、問題を示すメッセージとともにHTTP 400エラーが戻されます。入力データの検証に使用される正規表現はすべて評価され、正規表現のサービス拒否(DOS)脆弱性の影響を受けないことが確認されます。

ユーザー・モデル

コンテナ管理者は、ユーザー・モデルをconfig.jsonファイルの一部として指定できます。これらのモデルは、ホスト・ファイル・システム上に配置しても、事前認証済リクエスト(PAR)リンクを使用して指定してもかまいません。モデル・ファイルは、.onnxファイル、または単一の.onnxファイルおよびメタデータを含む.zipファイルです。いずれの場合も、コンテナは、ONNX形式モデルがメタデータに基づいて特定のシグネチャと一致するパイプラインであると想定しています。ONNX形式モデルのシグネチャを決定するのに使用されるメタデータ属性は、modelTypeおよびfunctionです。

メタデータを前提として、コンテナはモデルを内部解析し、ONNXグラフの入力および出力が想定されるシグネチャと一致することを確認します。次の表に、メタデータ、シグネチャおよび入出力シェイプの関係を示します:

シグネチャ モデル・タイプ モデル機能 入力シェイプ 出力シェイプ
イメージ埋込み ONNX_IMG 埋込み UINT8の1次元配列 埋込みの1次元配列
テキスト埋込み ONNX_TXT 埋込み 文字列の2次元配列 埋込みの2次元配列

ONNXファイル

コンテナは、ONNXライブラリを使用してONNXファイルをロードし、前述の方法を使用してシグネチャを検証することで、ONNXファイルの有効性をチェックします。スタンドアロンのONNXファイルの場合は、次のように、ONNXファイルの場所をメタデータとともにconfig.jsonファイルで指定します:


{
    "modelname":"bert_tiny",
    "modelfile":"bert_tiny.onnx",
    "modelfunction": "EMBEDDING",
    "properties":{
        "PRIVATE_AI_ONNX_INTRA_OP_NUM_THREADS":4
    }
}

この例では、ONNXファイルはbert_tiny.onnxで、コンテナ・ファイル・システムの/privateai/models/bert_tiny.onnxからロードされます。このパスは、ONNXファイルが格納されているホスト・システム上のディレクトリにマウントする必要があります。プロパティmodelfunctionは、ONNXモデル・ファイルの入力シェイプおよびデータ型とともに、デプロイ前にモデルを検証するために使用されます。

zipファイル

大規模なモデル(通常は2 GBを超えるモデル)では、OML4Pyを使用して、互換性のあるONNX形式モデルを生成できます。ONNXは2 GBを超えるファイルをサポートしないプロトバッファに依存するため、ONNX Runtimeは外部データを使用してこのようなモデルのロードをサポートしています。OML4Pyツールには、メタデータ・ファイルを含む複数のファイルを生成するようなモデル用に外部データを生成するための組込みサポートがあります。移植性と利便性のために、これらのファイルを圧縮し、そのzipファイルをロード用にコンテナに提供できます。

前述のONNXファイルの検証に加えて、zipファイルは、悪意のあるZIP爆弾攻撃を防ぐために特定の検証を受けます。zip内に存在すると想定されるファイルは固定されており、それぞれにチェック対象となる最大許容サイズがあります。コンテナは、バイナリ・シグネチャをチェックすることで、zipファイルを判別します。