microsoft / onnxruntime

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator
https://onnxruntime.ai
MIT License
14.53k stars 2.91k forks source link

Microsoft.AI.MachineLearning cannot be used in UWP app on on Windows 10 ARM64 #4686

Open SergeyADoroshenko opened 4 years ago

SergeyADoroshenko commented 4 years ago

Describe the bug Microsoft.AI.MachineLearning cannot be used in a UWP app on Windows 10 ARM64.

System information

To Reproduce

Expected behavior Model should be load-able in a UWP app on Windows 10 ARM64

Additional context An ONNX model can be loaded successfully in a UWP app on Windows 10 ARM64 in the app is built for x86.

skottmckay commented 4 years ago

Can you please provide some information on what the error was and when it occurred? Example code to reproduce would also be good.

SergeyADoroshenko commented 4 years ago

Arm64_error.zip

SergeyADoroshenko commented 4 years ago

@skottmckay: System.IO.FileNotFoundException: 'The specified module could not be found. (Exception from HRESULT: 0x8007007E)'

The sample is attached above.

skottmckay commented 4 years ago

If it is something to do with Microsoft.AI.MachineLearning, based on the nuget package, there should be a couple of dlls either in the same directory as the binary for your app or in the system path. microsoft.ai.machinelearning.dll onnxruntime.dll

If those haven't been copied to the output directory correctly when building that may cause this error.

If they are present you may need to use something like https://docs.microsoft.com/en-us/sysinternals/downloads/procmon to determine the exact file it's not finding.

SergeyADoroshenko commented 4 years ago

@skottmckay: is there a tool that can be run on ARM64 to determine missing DLL? I can guess it's DirectML.dll. x64 and x86 packages of Microsoft.AI.MachineLearning contain that while arm64 and arm don't.

skottmckay commented 4 years ago

Possibly this has a procmon that works on ARM: https://mspoweruser.com/mark-russinovichs-systinternals-now-available-for-arm

Do you need the DirectX acceleration? If not you could use the Microsoft.ML.OnnxRuntime package.

SergeyADoroshenko commented 4 years ago

@skottmckay: Thanks, procmon for ARM64 worked for me. procman shows that on calling LearningModel.LoadFromStorageFileAsync VCRUNTIME140.DLL and MSVCP140.DLL are not found (NAME NOT FOUND).

If x86 build is run on ARM64, procman shows that VCRUNTIME140.DLL and MSVCP140.DLL are found.

Does Microsoft.AI.MachineLearning work for anybody in UWP app on Windows 10 ARM64? Is there a sample that works?

skottmckay commented 4 years ago

Not sure if anyone has tried building a UWP app on ARM64. I believe the missing DLLs come from the VC++ redistributable. You could try installing based on info here: https://support.microsoft.com/en-au/help/2977003/the-latest-supported-visual-c-downloads

SergeyADoroshenko commented 4 years ago

@skottmckay: Thanks, I tried the link. It works for me. Do you plan to include the DLLs to the nuget package, or having VC++ pre-installed is a requirement?

The problem seems not related to ARM64 anymore. Technically, the package won't work on any machine without VC++ redist installed.

ngeisler11 commented 4 years ago

@SergeyADoroshenko - thanks for the feedback on this. We have added this request to our list and are looking into it now. Initial developer feedback led us to building the package dynamically linking to the VC++, but we've heard additional requests for providing a NuGet that has this included. Let me follow up with our team and get back to you on this.

stale[bot] commented 4 years ago

This issue has been automatically marked as stale due to inactivity and will be closed in 7 days if no further activity occurs. If further support is needed, please provide an update and/or more details.

SergeyADoroshenko commented 3 years ago

@ngeisler11 - any update on this?

jworch commented 3 years ago

Hi, I am facing the same problem when trying to run an app using Microsoft.AI.MachineLearning on Hololens 2. Any suggestions on how to solve this issue? Any workaround is appreciated.