onnxruntime/winml/lib/Api/LearningModelSession.h
Sheil Kumar 87cb6fd495
Add LearningModelBuilder to WinML Experimental Namespace along with various Audio operators (#6623)
* model building

* fix build

* winml adapter model building api

* model building

* make build

* make build again

* add model building with audio op

* inplace and inorder fft

* add ifft

* works!

* cleanup

* add comments

* switch to iterative rather than recursive and use parallelization

* batched parallelization

* fft->dft

* cleanup

* window functions

* add melweightmatrix op

* updates to make spectrogram test work

* push latest

* add onesided

* cleanup

* Clean up building apis and fix mel

* cleanup

* cleanup

* naive stft

* fix test output

* middle c complete

* 3 tones

* cleanup

* signal def new line

* Add save functionality

* Perf improvements, 10x improvement

* cleanup

* use bitreverse lookup table for performance

* implement constant initializers for tensors

* small changes

* add matmul tests

* merge issues

* support add attribute

* add tests for double data type windowfunctions and minor cleanup

* stft onesided/and not tests

* cleanup

* cleanup

* clean up

* cleanup

* remove threading attribute

* forward declare orttypeinfo

* warnings

* fwd declare

* fix warnings

* 1 more warning

* remove saving to e drive...

* cleanup and fix stft test

* add opset picker

* small additions

* add onnxruntime tests

* add signed/unsigned

* fix warning

* fix warning

* finish onnxruntime tests

* make windows namespace build succeed

* add experimental flag

* add experimental api into nuget package

* add experimental api build flag and add to windows ai nuget package

* turn experimental for tests

* add minimum opset version to new experimental domain

* api cleanup

* disable ms experimental ops test when --ms_experimental is not enabled

* add macro behind flag

* remove unused x

* pr feedback

Co-authored-by: Sheil Kumar <sheilk@microsoft.com>
2021-02-12 14:17:10 -08:00

139 lines
3.4 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "LearningModelSession.g.h"
#include "LearningModelBinding.h"
#include "MLOperatorAuthor.h"
#include "WinML_Lock.h"
#include "core/providers/winml/winml_provider_factory.h"
#include "iengine.h"
namespace WINMLP {
struct LearningModelSession : LearningModelSessionT<LearningModelSession, ILearningModelSessionNative> {
/* LearningModelSession constructors (MachineLearningContract 1). */
LearningModelSession(_winml::IEngine* engine);
LearningModelSession(
winml::LearningModel const& model);
LearningModelSession(
winml::LearningModel const& model,
winml::LearningModelDevice const& deviceToRunOn);
/* LearningModelSession constructors (MachineLearningContract 2). */
LearningModelSession(
winml::LearningModel const& model,
winml::LearningModelDevice const& deviceToRunOn,
winml::LearningModelSessionOptions const& sessionOptions);
/* IClosable methods. */
void
Close();
/* LearningModelSession properties (MachineLearningContract 1). */
wfc::IPropertySet
EvaluationProperties();
winml::LearningModel
Model();
winml::LearningModelDevice
Device();
/* LearningModelSession methods (MachineLearningContract 1). */
winml::LearningModelEvaluationResult
Evaluate(
winml::LearningModelBinding binding,
hstring const& correlationId);
wf::IAsyncOperation<winml::LearningModelEvaluationResult>
EvaluateAsync(
winml::LearningModelBinding binding,
hstring const correlationId);
winml::LearningModelEvaluationResult
EvaluateFeatures(
wfc::IMap<hstring, wf::IInspectable> const features,
hstring const correlationId);
wf::IAsyncOperation<winml::LearningModelEvaluationResult>
EvaluateFeaturesAsync(
wfc::IMap<hstring, wf::IInspectable> const features,
hstring const correlationId);
STDMETHOD(GetIntraOpNumThreads)
(uint32_t* numThreads);
public:
/* Non-ABI methods */
_winml::IEngine*
GetEngine();
void
CheckClosed();
// LearningModelBinding needs to leverage the lock
CWinMLLock *
GetDMLEPLock()
{
return &dml_ep_lock_;
}
static winml::LearningModelSession CreateInertSession(_winml::IEngine* engine);
private:
void
Initialize();
_winml::IModel*
GetOptimizedModel();
_winml::IModel*
GetOptimizedModel(bool should_close_model);
uint64_t
Run(
winrt::com_ptr<winmlp::LearningModelBinding> bindingImpl);
winml::LearningModelEvaluationResult
GetResults(
winrt::com_ptr<winmlp::LearningModelBinding> bindingImpl,
hstring const& correlationId,
uint64_t fenceValueForDML);
void
ApplyEvaluationProperties();
void
ToggleProfiler();
private:
com_ptr<_winml::IEngineFactory> engine_factory_;
com_ptr<_winml::IEngine> engine_;
using MLOperatorRegistry = std::unique_ptr<IMLOperatorRegistry, void (*)(IMLOperatorRegistry*)>;
MLOperatorRegistry operator_registry_;
winml::LearningModel model_;
winml::LearningModelDevice device_;
winml::LearningModelSessionOptions session_options_;
wfc::IPropertySet evaluation_properties_;
// Synchronization
CWinMLLock session_creation_lock_;
CWinMLLock dml_ep_lock_;
};
} // namespace WINMLP
namespace WINML::factory_implementation {
struct LearningModelSession : LearningModelSessionT<LearningModelSession, implementation::LearningModelSession> {
};
} // namespace WINML::factory_implementation