private void LoadPool() { if (_options.CreateModel == null) { throw new NullReferenceException("CreateModel wasn't provided..."); } Interlocked.Exchange(ref _model, _options.CreateModel(_mlContext)); if (_model == null) { throw new NullReferenceException("Model wasn't created"); } var pooledObjectPolicy = new ModelPredictionEnginePoolPolicy <TInput, TPrediction>(_mlContext, _model); if (_options.MaximumObjectsRetained != -1) { Interlocked.Exchange(ref _pool, new DefaultObjectPool <PredictionEngine <TInput, TPrediction> >(pooledObjectPolicy, _options.MaximumObjectsRetained)); } else { // default maximumRetained is Environment.ProcessorCount * 2, if not explicitly provided Interlocked.Exchange(ref _pool, new DefaultObjectPool <PredictionEngine <TInput, TPrediction> >(pooledObjectPolicy)); } _logger.LogInformation( "[{className}][{methodName}] ML.NET Model name: {modelName}", nameof(ModelPoolLoader <TInput, TPrediction>), nameof(LoadPool), _options.ModelName); }
public ModelPredictionEngineObjectPool( Func <ModelPredictionEngineOptions <TData, TPrediction> > options, ILoggerFactory loggerFactory) { _options = options() ?? throw new ArgumentNullException(nameof(options)); _logger = loggerFactory.CreateLogger(nameof(ModelPredictionEngineObjectPool <TData, TPrediction>)) ?? throw new ArgumentNullException(nameof(loggerFactory)); // get mlcontext _mlContext = _options.MLContext(); // get prediction model Model = _options.CreateModel(_mlContext); // create PredictionEngine Object Pool _predictionEnginePool = CreatePredictionEngineObjectPool(); }
private void LoadPool() { var mlContext = _options.MLContext(); Interlocked.Exchange(ref _model, _options.CreateModel(mlContext)); var pooledObjectPolicy = new ModelPredictionEnginePooledObjectPolicy <TData, TPrediction>(mlContext, _model, _options, _logger); if (_options.MaximumObjectsRetained != -1) { Interlocked.Exchange(ref _pool, new DefaultObjectPool <PredictionEngine <TData, TPrediction> >(pooledObjectPolicy, _options.MaximumObjectsRetained)); } else { // default maximumRetained is Environment.ProcessorCount * 2, if not explicitly provided Interlocked.Exchange(ref _pool, new DefaultObjectPool <PredictionEngine <TData, TPrediction> >(pooledObjectPolicy)); } _logger.LogDebug( "[{className}][{methodName}] ML.NET Model name: {modelName}", nameof(ModelPredictionEngineObjectPool <TData, TPrediction>), nameof(LoadPool), _options.ModelName); }