mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-19 21:32:23 +00:00
### Description This PR is to update the win-ort-main branch to the tip main branch as of 2025-01-16. ### Motivation and Context This update includes the OpenVino fix for debug builds. --------- Signed-off-by: Liqun Fu <liqfu@microsoft.com> Signed-off-by: Liqun Fu <liqun.fu@microsoft.com> Signed-off-by: Junze Wu <junze.wu@intel.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Jianhui Dai <jianhui.j.dai@intel.com> Co-authored-by: Yueqing Zhang <yuz75@Pitt.edu> Co-authored-by: amancini-N <63410090+amancini-N@users.noreply.github.com> Co-authored-by: Adrian Lizarraga <adlizarraga@microsoft.com> Co-authored-by: liqun Fu <liqfu@microsoft.com> Co-authored-by: Guenther Schmuelling <guschmue@microsoft.com> Co-authored-by: Yifan Li <109183385+yf711@users.noreply.github.com> Co-authored-by: yf711 <yifanl@microsoft.com> Co-authored-by: Wanming Lin <wanming.lin@intel.com> Co-authored-by: wejoncy <wejoncy@163.com> Co-authored-by: wejoncy <wejoncy@.com> Co-authored-by: Scott McKay <skottmckay@gmail.com> Co-authored-by: Changming Sun <chasun@microsoft.com> Co-authored-by: Jean-Michaël Celerier <jeanmichael.celerier+github@gmail.com> Co-authored-by: Dmitry Deshevoy <mityada@gmail.com> Co-authored-by: xhcao <xinghua.cao@intel.com> Co-authored-by: Yueqing Zhang <yueqingz@amd.com> Co-authored-by: Yulong Wang <7679871+fs-eire@users.noreply.github.com> Co-authored-by: Jiajia Qin <jiajiaqin@microsoft.com> Co-authored-by: Wu, Junze <junze.wu@intel.com> Co-authored-by: Jian Chen <cjian@microsoft.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com> Co-authored-by: Prathik Rao <prathik.rao@gmail.com> Co-authored-by: wonchung-microsoft <wonchung@microsoft.com> Co-authored-by: Vincent Wang <wangwchpku@outlook.com> Co-authored-by: PARK DongHa <luncliff@gmail.com> Co-authored-by: Hector Li <hecli@microsoft.com> Co-authored-by: Sam Webster <13457618+samwebster@users.noreply.github.com> Co-authored-by: Adrian Lizarraga <adrianlm2@gmail.com> Co-authored-by: Preetha Veeramalai <preetha.veeramalai@intel.com> Co-authored-by: jatinwadhwa921 <jatin.wadhwa@intel.com> Co-authored-by: Satya Kumar Jandhyala <satya.k.jandhyala@gmail.com> Co-authored-by: Corentin Maravat <101636442+cocotdf@users.noreply.github.com> Co-authored-by: Xiaoyu <85524621+xiaoyu-work@users.noreply.github.com> Co-authored-by: Tianlei Wu <tlwu@microsoft.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jie Chen <jie.a.chen@intel.com> Co-authored-by: Jianhui Dai <jianhui.j.dai@intel.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Edward Chen <18449977+edgchen1@users.noreply.github.com> Co-authored-by: Baiju Meswani <bmeswani@microsoft.com> Co-authored-by: kunal-vaishnavi <115581922+kunal-vaishnavi@users.noreply.github.com> Co-authored-by: Justin Chu <justinchuby@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Ted Themistokleous <107195283+TedThemistokleous@users.noreply.github.com> Co-authored-by: Jeff Daily <jeff.daily@amd.com> Co-authored-by: Artur Wojcik <artur.wojcik@outlook.com> Co-authored-by: Ted Themistokleous <tedthemistokleous@amd.com> Co-authored-by: Xinya Zhang <Xinya.Zhang@amd.com> Co-authored-by: ikalinic <ilija.kalinic@amd.com> Co-authored-by: sstamenk <sstamenk@amd.com> Co-authored-by: Yi-Hong Lyu <yilyu@microsoft.com> Co-authored-by: Ti-Tai Wang <titaiwang@microsoft.com>
152 lines
5.4 KiB
Text
152 lines
5.4 KiB
Text
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
#import "OnnxruntimeModule.h"
|
|
#import "FakeRCTBlobManager.h"
|
|
#import "TensorHelper.h"
|
|
|
|
#import <XCTest/XCTest.h>
|
|
#import <onnxruntime/onnxruntime_cxx_api.h>
|
|
|
|
@interface OnnxruntimeModuleTest : XCTestCase
|
|
|
|
@end
|
|
|
|
@implementation OnnxruntimeModuleTest
|
|
|
|
FakeRCTBlobManager* fakeBlobManager = nil;
|
|
|
|
+ (void)initialize {
|
|
if (self == [OnnxruntimeModuleTest class]) {
|
|
fakeBlobManager = [FakeRCTBlobManager new];
|
|
}
|
|
}
|
|
|
|
- (void)testOnnxruntimeModule {
|
|
NSBundle* bundle = [NSBundle bundleForClass:[OnnxruntimeModuleTest class]];
|
|
NSString* dataPath = [bundle pathForResource:@"test_types_float" ofType:@"ort"];
|
|
NSString* sessionKey = @"";
|
|
NSString* sessionKey2 = @"";
|
|
|
|
OnnxruntimeModule* onnxruntimeModule = [OnnxruntimeModule new];
|
|
[onnxruntimeModule setBlobManager:fakeBlobManager];
|
|
|
|
{
|
|
// test loadModelFromBuffer()
|
|
NSMutableDictionary* options = [NSMutableDictionary dictionary];
|
|
NSData* fileData = [NSData dataWithContentsOfFile:dataPath];
|
|
|
|
NSDictionary* resultMap = [onnxruntimeModule loadModelFromBuffer:fileData options:options];
|
|
sessionKey = resultMap[@"key"];
|
|
NSArray* inputNames = resultMap[@"inputNames"];
|
|
XCTAssertEqual([inputNames count], 1);
|
|
XCTAssertEqualObjects(inputNames[0], @"input");
|
|
NSArray* outputNames = resultMap[@"outputNames"];
|
|
XCTAssertEqual([outputNames count], 1);
|
|
XCTAssertEqualObjects(outputNames[0], @"output");
|
|
|
|
// test loadModel()
|
|
NSDictionary* resultMap2 = [onnxruntimeModule loadModel:dataPath options:options];
|
|
sessionKey2 = resultMap2[@"key"];
|
|
NSArray* inputNames2 = resultMap2[@"inputNames"];
|
|
XCTAssertEqual([inputNames2 count], 1);
|
|
XCTAssertEqualObjects(inputNames2[0], @"input");
|
|
NSArray* outputNames2 = resultMap2[@"outputNames"];
|
|
XCTAssertEqual([outputNames2 count], 1);
|
|
XCTAssertEqualObjects(outputNames2[0], @"output");
|
|
}
|
|
|
|
// test run()
|
|
{
|
|
NSMutableDictionary* inputTensorMap = [NSMutableDictionary dictionary];
|
|
|
|
// dims
|
|
NSArray* dims = @[ [NSNumber numberWithLong:1], [NSNumber numberWithLong:5] ];
|
|
inputTensorMap[@"dims"] = dims;
|
|
|
|
// type
|
|
inputTensorMap[@"type"] = JsTensorTypeFloat;
|
|
|
|
// data
|
|
std::array<float, 5> outValues{std::numeric_limits<float>::min(), 1.0f, -2.0f, 3.0f,
|
|
std::numeric_limits<float>::max()};
|
|
|
|
const NSInteger byteBufferSize = outValues.size() * sizeof(float);
|
|
unsigned char* byteBuffer = static_cast<unsigned char*>(malloc(byteBufferSize));
|
|
NSData* byteBufferRef = [NSData dataWithBytesNoCopy:byteBuffer length:byteBufferSize];
|
|
float* floatPtr = (float*)[byteBufferRef bytes];
|
|
for (NSUInteger i = 0; i < outValues.size(); ++i) {
|
|
*floatPtr++ = outValues[i];
|
|
}
|
|
floatPtr = (float*)[byteBufferRef bytes];
|
|
|
|
XCTAssertNotNil(fakeBlobManager);
|
|
inputTensorMap[@"data"] = [fakeBlobManager testCreateData:byteBufferRef];
|
|
|
|
NSMutableDictionary* inputDataMap = [NSMutableDictionary dictionary];
|
|
inputDataMap[@"input"] = inputTensorMap;
|
|
|
|
NSMutableDictionary* options = [NSMutableDictionary dictionary];
|
|
|
|
NSMutableArray* output = [NSMutableArray array];
|
|
[output addObject:@"output"];
|
|
|
|
NSDictionary* resultMap = [onnxruntimeModule run:sessionKey input:inputDataMap output:output options:options];
|
|
NSDictionary* resultMap2 = [onnxruntimeModule run:sessionKey2 input:inputDataMap output:output options:options];
|
|
|
|
// Compare output & input, but data.blobId is different
|
|
// dims
|
|
XCTAssertTrue([[resultMap objectForKey:@"output"][@"dims"] isEqualToArray:inputTensorMap[@"dims"]]);
|
|
XCTAssertTrue([[resultMap2 objectForKey:@"output"][@"dims"] isEqualToArray:inputTensorMap[@"dims"]]);
|
|
|
|
// type
|
|
XCTAssertEqual([resultMap objectForKey:@"output"][@"type"], JsTensorTypeFloat);
|
|
XCTAssertEqual([resultMap2 objectForKey:@"output"][@"type"], JsTensorTypeFloat);
|
|
|
|
// data ({ blobId, offset, size })
|
|
XCTAssertEqual([[resultMap objectForKey:@"output"][@"data"][@"offset"] longValue], 0);
|
|
XCTAssertEqual([[resultMap2 objectForKey:@"output"][@"data"][@"size"] longValue], byteBufferSize);
|
|
}
|
|
|
|
// test dispose
|
|
{
|
|
[onnxruntimeModule dispose:sessionKey];
|
|
[onnxruntimeModule dispose:sessionKey2];
|
|
}
|
|
}
|
|
|
|
- (void)testOnnxruntimeModule_AppendCoreml {
|
|
NSBundle* bundle = [NSBundle bundleForClass:[OnnxruntimeModuleTest class]];
|
|
NSString* dataPath = [bundle pathForResource:@"test_types_float" ofType:@"ort"];
|
|
NSString* sessionKey = @"";
|
|
|
|
OnnxruntimeModule* onnxruntimeModule = [OnnxruntimeModule new];
|
|
[onnxruntimeModule setBlobManager:fakeBlobManager];
|
|
|
|
{
|
|
// test loadModel() with coreml options
|
|
NSMutableDictionary* options = [NSMutableDictionary dictionary];
|
|
|
|
// register coreml ep options
|
|
NSMutableArray* epList = [NSMutableArray array];
|
|
[epList addObject:@"coreml"];
|
|
NSArray* immutableEpList = [NSArray arrayWithArray:epList];
|
|
[options setObject:immutableEpList forKey:@"executionProviders"];
|
|
|
|
NSDictionary* resultMap = [onnxruntimeModule loadModel:dataPath options:options];
|
|
|
|
sessionKey = resultMap[@"key"];
|
|
NSArray* inputNames = resultMap[@"inputNames"];
|
|
XCTAssertEqual([inputNames count], 1);
|
|
XCTAssertEqualObjects(inputNames[0], @"input");
|
|
NSArray* outputNames = resultMap[@"outputNames"];
|
|
XCTAssertEqual([outputNames count], 1);
|
|
XCTAssertEqualObjects(outputNames[0], @"output");
|
|
}
|
|
|
|
{
|
|
[onnxruntimeModule dispose:sessionKey];
|
|
}
|
|
}
|
|
|
|
@end
|