汎用 CoreML 推論器を作成する (coreml.new_model_request)
coreml.new_model_request は、コンパイル済みの CoreML モデルを読み込み、Vision に依存しない汎用推論器を作成します。
テキストモデル、テンソル入力モデル、複数入力・複数出力モデル、Embedding モデル、および「入力が通常の画像一枚ではない」あらゆるモデルに適しています。
モデル自体が画像認識の処理であり、image オブジェクトを直接渡して Vision 推論を行いたい場合は、new_vision_request を優先して使用してください。
入力 feature を自分で用意する必要がある場合や、モデル入力に MLMultiArray、テキスト token、複数の名前付き入力が含まれる場合は、このインターフェースを使用してください。
また、coreml.session(...) はこの関数の別名です。
宣言
汎用推論器オブジェクト, エラーメッセージ = coreml.new_model_request(コンパイル済みモデルパス)
または
汎用推論器オブジェクト, エラーメッセージ = coreml.new_model_request({
compiled_model_path = コンパイル済みモデルパス,
uses_cpu_only = CPUのみを使用するか,
compute_units = 計算ユニット設定,
})
パラメータ
-
compiled_model_path文字列型。コンパイル済みの.mlmodelcモデルディレクトリのパスです。 -
uses_cpu_onlyブール型の省略可能なパラメータ。デフォルトで CPU のみを使用して推論するかどうかを指定します。デフォルトはfalseです。 -
compute_units文字列型の省略可能なパラメータ。iOS 12+ で有効です。以下の値を指定できます。"all""cpu_only"または"cpu""cpu_and_gpu"または"gpu""cpu_and_neural_engine"、"ane"または"neural_engine"(iOS 16+)
uses_cpu_only = trueの場合は、CPUOnly 構成が優先的に強制適用されます。
戻り値
-
汎用推論器オブジェクト
汎用推論器オブジェクト。作成に失敗した場合はnilを返します。 -
エラーメッセージ
文字列型。作成に成功した場合はnil、失敗した場合はエラーメッセージを返します。
説明
この関数は 20260319 以降のバージョンで使用できます
- 基本機能は iOS 11+ に対応しています
compute_units関連の構成には iOS 12+ が必要です- モデルで image feature が宣言されており、
image_objectを入力としてこの汎用 request に直接渡す場合は、iOS 13+ が必要です - 入力パラメータを渡す際は、たとえば
{ input_ids = ids }のように「入力名をキーとするマッピングテーブル」の形式を使用する必要があります - 入力値には、数値、文字列、ブール値、辞書、
MLMultiArray、およびモデルで画像 feature が宣言されている場合のimageオブジェクトを使用できます - このオブジェクトはモデル推論のみを行い、画像の前処理やテキストのトークン化は行いません。これらの処理は Lua 層で用意する必要があります
- 同じ推論器オブジェクトで
predict()/run()を繰り返し呼び出せるため、推論のたびに作成し直すのではなく、キャッシュして再利用するのに適しています - 古いデバイスや一部のモデルでデフォルトのバックエンドが安定しない場合は、作成時に
uses_cpu_only = trueを設定できます
型判定
宣言
汎用推論器かどうか = coreml.is_model_request(判定する値)
または
汎用推論器かどうか = coreml.is_session(判定する値)
パラメータ
- 判定する値
CoreML 汎用推論器オブジェクトかどうかを判定する値です。
戻り値
- 汎用推論器かどうか
ブール型。汎用推論器の場合はtrue、それ以外の場合はfalseを返します。
説明
coreml.is_session()とcoreml.is_model_request()は同じ意味のインターフェースです- 汎用 Lua ラッパーでの型ガードやパラメータ検証に適しています
- 保持している値が
new_model_request(...)/session(...)の戻り値であることが明らかな場合、通常は追加で呼び出す必要はありません
例
local compiled_model_path = XXT_HOME_PATH.."/models/demo_text.mlmodelc"
local req, err = coreml.new_model_request({
compiled_model_path = compiled_model_path,
uses_cpu_only = false,
compute_units = "all",
})
if not req then
error(err)
end
local out = assert(req:predict({
input_ids = ids,
}))
print(req:input_names())
print(req:output_names())
print(out[1])