C API
ONNX Runtime C API
Section titled “ONNX Runtime C API”ONNX Runtime C APIは、ONNXモデルをスコアリングするためのネイティブAPIです。 APIはinclude/onnxruntime/core/session/onnxruntime_c_api.hにあります。
これは、APIを使用してONNXモデルをスコアリングする方法を示す簡単な使用例です。完全なコードはこちらです。
#include <onnxruntime_c_api.h>
const OrtApi* g_ort = OrtGetApiBase()->GetApi(ORT_API_VERSION);
// ONNX Runtimeエラーチェック用のマクロ#define ORT_ABORT_ON_ERROR(expr) \ do { \ OrtStatus* onnx_status = (expr); \ if (onnx_status != NULL) { \ const char* msg = g_ort->GetErrorMessage(onnx_status); \ fprintf(stderr, "%s\n", msg); \ g_ort->ReleaseStatus(onnx_status); \ abort(); \ } \ } while (0);
int main(int argc, char* argv[]) { // 環境の初期化 OrtEnv* env; ORT_ABORT_ON_ERROR(g_ort->CreateEnv(ORT_LOGGING_LEVEL_WARNING, "test", &env));
// セッションオプションの初期化 OrtSessionOptions* session_options; ORT_ABORT_ON_ERROR(g_ort->CreateSessionOptions(&session_options));
// モデルのロードとセッションの作成 const char* model_path = "model.onnx"; OrtSession* session; ORT_ABORT_ON_ERROR(g_ort->CreateSession(env, model_path, session_options, &session));
// 入力テンソルの作成 OrtMemoryInfo* memory_info; ORT_ABORT_ON_ERROR(g_ort->CreateCpuMemoryInfo(OrtArenaAllocator, OrtMemTypeDefault, &memory_info)); const int64_t input_shape[] = {1, 3, 224, 224}; const size_t input_shape_len = sizeof(input_shape) / sizeof(input_shape[0]); const size_t model_input_len = 1 * 3 * 224 * 224; float model_input[model_input_len]; // 入力データを初期化 // ... OrtValue* input_tensor; ORT_ABORT_ON_ERROR(g_ort->CreateTensorWithDataAsOrtValue( memory_info, model_input, model_input_len * sizeof(float), input_shape, input_shape_len, ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, &input_tensor));
// 推論の実行 const char* input_names[] = {"input"}; const char* output_names[] = {"output"}; OrtValue* output_tensor = NULL; ORT_ABORT_ON_ERROR(g_ort->Run(session, NULL, input_names, (const OrtValue* const*)&input_tensor, 1, output_names, 1, &output_tensor));
// 出力の取得 float* output_data; ORT_ABORT_ON_ERROR(g_ort->GetTensorMutableData(output_tensor, (void**)&output_data));
// 出力の処理 // ...
// クリーンアップ g_ort->ReleaseValue(output_tensor); g_ort->ReleaseValue(input_tensor); g_ort->ReleaseSession(session); g_ort->ReleaseSessionOptions(session_options); g_ort->ReleaseEnv(env);
return 0;}APIリファレンス
Section titled “APIリファレンス”OrtApi
Section titled “OrtApi”OrtApi構造体は、ONNX Runtime C APIのメインエントリポイントです。すべてのAPI関数へのポインタが含まれています。
OrtEnv
Section titled “OrtEnv”OrtEnvオブジェクトは、ONNX Runtime環境を表します。これは、ロギングやスレッド処理などのグローバル状態を管理します。
OrtSessionOptions
Section titled “OrtSessionOptions”OrtSessionOptionsオブジェクトは、セッションの作成時に使用されるオプションを構成するために使用されます。これらのオプションには、実行プロバイダー、スレッド処理オプション、およびその他の設定が含まれます。
OrtSession
Section titled “OrtSession”OrtSessionオブジェクトは、ONNXモデルを表します。モデルのロード、入力のバインド、および推論の実行に使用されます。
OrtValue
Section titled “OrtValue”OrtValueオブジェクトは、ONNX Runtimeのテンソルを表します。入力および出力データの保持に使用されます。
OrtMemoryInfo
Section titled “OrtMemoryInfo”OrtMemoryInfoオブジェクトは、メモリ割り当てに関する情報を提供します。これは、CPUまたはGPUメモリにテンソルを作成するために使用できます。
スレッド処理
Section titled “スレッド処理”ONNX Runtimeは、推論を並列化するために複数のスレッドを使用できます。スレッドの数は、OrtSessionOptionsオブジェクトを使用して設定できます。
// 2つのスレッドを使用するようにセッションを設定g_ort->SetIntraOpNumThreads(session_options, 2);実行プロバイダー
Section titled “実行プロバイダー”ONNX Runtimeは、さまざまなハードウェアアクセラレータで推論を実行するための実行プロバイダー(EP)をサポートしています。EPは、OrtSessionOptionsオブジェクトを使用して有効にできます。
// CUDA実行プロバイダーを有効にするOrtCUDAProviderOptions cuda_options;g_ort->SessionOptionsAppendExecutionProvider_CUDA(session_options, &cuda_options);カスタム演算子
Section titled “カスタム演算子”ONNX Runtimeは、カスタム演算子をサポートしています。カスタム演算子は、OrtSessionOptionsオブジェクトを使用して登録できます。
// カスタム演算子ライブラリを登録g_ort->RegisterCustomOpsLibrary(session_options, "custom_op_library.so", NULL);