public void PostConfigure(string name, ModelPredictionEngineOptions <TData, TPrediction> options)
        {
            _options = options;

            if (_logger.IsEnabled(options.LogLevel))
            {
                options.MLContext().Log += Log;
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }