11.9 大規模なONNX形式モデルのサポート

OML4Pyでは、データベース外の大規模なONNX形式モデルがサポートされています。大規模なモデルは、単一のONNXファイルと1つ以上の外部データ・ファイルに分割されます。ONNXファイルの最大サイズ制限は2 GBであるため、2 GBより大きいモデルの場合、ONNXファイルをより小さく分割する必要があります。

ONNXPipelinesを活用すると、外部データを利用できます。外部データは、次の2つの方法で適用できます:
  • モデル・サイズが1 GB未満の場合: モデル・サイズが1 GB未満の場合は、外部データの使用を手動でアクティブ化し、パラメータuse_external_dataをTrueに設定します。これは、事前構成済モデルと未構成モデルの両方で使用できます。
    • 事前構成済モデルを使用する場合。
      from oml.utils import ONNXPipeline,ONNXPipelineConfig
      config = ONNXPipelineConfig.from_template("text", max_seq_length=512, use_external_data=True)
      pipeline = ONNXPipeline("Snowflake/snowflake-arctic-embed-s",config)
    • モデルが構成されていない場合、テンプレートを使用できます。
      from oml.utils import ONNXPipeline, ONNXPipelineConfig
      config = ONNXPipelineConfig.from_template("text", max_seq_length=512, use_external_data=True)
      pipeline = ONNXPipeline("Snowflake/snowflake-arctic-embed-s", config)
  • モデル・サイズが1 GBを超える場合: 量子化を有効にせずに1 GBを超えるサイズのモデルをロードすると、デフォルトで外部データが使用されます。量子化を有効にした(quantize_model=True) 2 GBを超えるモデルの場合、外部データのアクティブ化ではなく、エラーが発生します。次の例では、大規模なmultilingual-e5モデルを使用しており、デフォルトで外部データが使用されます:
    from oml.utils import ONNXPipeline,ONNXPipelineConfig
    config = ONNXPipelineConfig.from_template("text", max_seq_length=512)
    pipeline = ONNXPipeline("intfloat/multilingual-e5-large", config)
    pipeline.export2db("multilingual")

ノート:

外部データの使用は、モデルのサイズにかかわらずパラメータuse_external_data=Trueを設定することで、いつでも手動でアクティブ化できます。

export2file関数は、単一のONNXファイルではなく、zipファイルを作成します。このzipファイルには次が含まれます:

  • ONNXファイル: このファイルはモデル・グラフに対応しています。
  • 1つ以上の.dataファイル: これらのファイルには、テンソルと、モデルに関連付けられたその他の外部データが含まれます。
  • JSONファイル: このファイルには、各.dataファイルの特定の場所にどのテンソルが属するかの詳細が記述されています。
そのようなzipファイルの例を次に示します:
  • large_model.onnx
  • large_model_data_0.data, large_model_data_1.data
  • large_model_external_data.json
ONNXパイプラインAPIでのモデル・サイズのサポート:
  • 1 GB未満: 最適なパフォーマンスでサポートされます。
  • 1 GBから2 GB: 量子化が有効になっている場合、完全なサポートが提供されます。それ以外の場合、モデルは外部イニシャライザを使用してエクスポートされます。
  • 0.4 GBから2 GB (量子化なし): 警告が表示され、パフォーマンスを向上させるために量子化が推奨されます。
  • 2 GB超: 2 GBを超えるモデルは、量子化が無効になっている場合にのみサポートされ、外部データが使用されます。量子化が有効になっている場合、制限は2 GBです。