From c9c12a7b9719b1041daa8413805b7912a76237ee Mon Sep 17 00:00:00 2001 From: mhamilton723 Date: Fri, 22 Mar 2024 00:20:06 +0000 Subject: [PATCH] Deploy website - based on 9aea411257e0a9b75fc6807096418729e0d8456f --- 404.html | 4 ++-- assets/js/73c2022c.65b3c453.js | 1 + assets/js/73c2022c.88809c2f.js | 1 - assets/js/{c4f5d8e4.07c58bdf.js => c4f5d8e4.15216e11.js} | 2 +- assets/js/{e464d112.1d8c0769.js => e464d112.f88ca299.js} | 2 +- .../{runtime~main.a0cfe39f.js => runtime~main.f01b5653.js} | 2 +- .../index.html | 4 ++-- .../index.html | 4 ++-- .../08/24/Welcome to Azure Cognitive Services/index.html | 4 ++-- .../index.html | 4 ++-- .../12/01/Large-Scale Intelligent Microservices/index.html | 4 ++-- blog/archive/index.html | 4 ++-- blog/index.html | 4 ++-- blog/overview/index.html | 4 ++-- docs/0.11.3/Deploy Models/Overview/index.html | 4 ++-- .../Quickstart - Deploying a Classifier/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Geospatial Services/index.html | 4 ++-- .../AI Services/Multivariate Anomaly Detection/index.html | 4 ++-- .../Explore Algorithms/AI Services/Overview/index.html | 4 ++-- .../Quickstart - Analyze Celebrity Quotes/index.html | 4 ++-- .../AI Services/Quickstart - Analyze Text/index.html | 4 ++-- .../Quickstart - Creare a Visual Search Engine/index.html | 4 ++-- .../AI Services/Quickstart - Create Audiobooks/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Quickstart - Flooding Risk/index.html | 4 ++-- .../Quickstart - Predictive Maintenance/index.html | 4 ++-- .../Quickstart - Isolation Forests/index.html | 4 ++-- .../Explore Algorithms/Causal Inference/Overview/index.html | 4 ++-- .../Quickstart - Measure Causal Effects/index.html | 4 ++-- .../Quickstart - Measure Heterogeneous Effects/index.html | 4 ++-- .../Quickstart - SparkML vs SynapseML/index.html | 4 ++-- .../Classification/Quickstart - Train Classifier/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Tabular Data/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Text Data/index.html | 4 ++-- .../Deep Learning/Distributed Training/index.html | 4 ++-- .../Deep Learning/Getting Started/index.html | 4 ++-- .../0.11.3/Explore Algorithms/Deep Learning/ONNX/index.html | 4 ++-- .../Quickstart - Fine-tune a Text Classifier/index.html | 4 ++-- .../Quickstart - Fine-tune a Vision Classifier/index.html | 4 ++-- .../Quickstart - ONNX Model Inference/index.html | 4 ++-- .../index.html | 4 ++-- .../Hyperparameter Tuning/HyperOpt/index.html | 4 ++-- .../Quickstart - Random Search/index.html | 4 ++-- docs/0.11.3/Explore Algorithms/LightGBM/Overview/index.html | 4 ++-- .../index.html | 4 ++-- docs/0.11.3/Explore Algorithms/OpenAI/Langchain/index.html | 4 ++-- .../OpenAI/Quickstart - OpenAI Embedding/index.html | 4 ++-- .../Quickstart - Understand and Search Forms/index.html | 4 ++-- docs/0.11.3/Explore Algorithms/OpenAI/index.html | 4 ++-- .../OpenCV/Image Transformations/index.html | 4 ++-- .../Explore Algorithms/Other Algorithms/Cyber ML/index.html | 4 ++-- .../Quickstart - Anomalous Access Detection/index.html | 4 ++-- .../Quickstart - Exploring Art Across Cultures/index.html | 4 ++-- .../Smart Adaptive Recommendations/index.html | 4 ++-- .../Regression/Quickstart - Data Cleaning/index.html | 4 ++-- .../Regression/Quickstart - Train Regressor/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit and LightGBM/index.html | 4 ++-- .../Responsible AI/Data Balance Analysis/index.html | 4 ++-- .../Responsible AI/Explanation Dashboard/index.html | 4 ++-- .../Responsible AI/Image Explainers/index.html | 4 ++-- .../Interpreting Model Predictions/index.html | 4 ++-- .../Responsible AI/PDP and ICE Explainers/index.html | 4 ++-- .../Quickstart - Data Balance Analysis/index.html | 4 ++-- .../Quickstart - Snow Leopard Detection/index.html | 4 ++-- .../Responsible AI/Tabular Explainers/index.html | 4 ++-- .../Responsible AI/Text Explainers/index.html | 4 ++-- .../Vowpal Wabbit/Contextual Bandits/index.html | 4 ++-- .../Vowpal Wabbit/Multi-class classification/index.html | 4 ++-- .../Explore Algorithms/Vowpal Wabbit/Overview/index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- docs/0.11.3/Get Started/Create a Spark Cluster/index.html | 4 ++-- docs/0.11.3/Get Started/Install SynapseML/index.html | 4 ++-- .../Get Started/Quickstart - Your First Models/index.html | 4 ++-- .../0.11.3/Get Started/Set up Cognitive Services/index.html | 4 ++-- docs/0.11.3/Overview/index.html | 4 ++-- .../Quick Examples/estimators/estimators_causal/index.html | 4 ++-- .../estimators/estimators_cognitive/index.html | 4 ++-- .../Quick Examples/estimators/estimators_core/index.html | 4 ++-- .../estimators/estimators_lightgbm/index.html | 4 ++-- .../Quick Examples/estimators/estimators_vw/index.html | 4 ++-- .../transformers/transformers_cognitive/index.html | 4 ++-- .../transformers/transformers_core/index.html | 4 ++-- .../transformers/transformers_deep_learning/index.html | 4 ++-- .../transformers/transformers_opencv/index.html | 4 ++-- .../Quick Examples/transformers/transformers_vw/index.html | 4 ++-- docs/0.11.3/Reference/Contributor Guide/index.html | 4 ++-- docs/0.11.3/Reference/Developer Setup/index.html | 4 ++-- docs/0.11.3/Reference/Docker Setup/index.html | 4 ++-- docs/0.11.3/Reference/Dotnet Setup/index.html | 4 ++-- .../Reference/Quickstart - LightGBM in Dotnet/index.html | 4 ++-- docs/0.11.3/Reference/R Setup/index.html | 4 ++-- docs/0.11.3/Use with MLFlow/Autologging/index.html | 4 ++-- docs/0.11.3/Use with MLFlow/Install/index.html | 4 ++-- docs/0.11.3/Use with MLFlow/Overview/index.html | 4 ++-- docs/0.11.4/Deploy Models/Overview/index.html | 4 ++-- .../Quickstart - Deploying a Classifier/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Geospatial Services/index.html | 4 ++-- .../AI Services/Multivariate Anomaly Detection/index.html | 4 ++-- .../Explore Algorithms/AI Services/Overview/index.html | 4 ++-- .../Quickstart - Analyze Celebrity Quotes/index.html | 4 ++-- .../AI Services/Quickstart - Analyze Text/index.html | 4 ++-- .../Quickstart - Creare a Visual Search Engine/index.html | 4 ++-- .../AI Services/Quickstart - Create Audiobooks/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Quickstart - Flooding Risk/index.html | 4 ++-- .../Quickstart - Predictive Maintenance/index.html | 4 ++-- .../Quickstart - Isolation Forests/index.html | 4 ++-- .../Explore Algorithms/Causal Inference/Overview/index.html | 4 ++-- .../Quickstart - Measure Causal Effects/index.html | 4 ++-- .../Quickstart - Measure Heterogeneous Effects/index.html | 4 ++-- .../Quickstart - SparkML vs SynapseML/index.html | 4 ++-- .../Classification/Quickstart - Train Classifier/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Tabular Data/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Text Data/index.html | 4 ++-- .../Deep Learning/Distributed Training/index.html | 4 ++-- .../Deep Learning/Getting Started/index.html | 4 ++-- .../0.11.4/Explore Algorithms/Deep Learning/ONNX/index.html | 4 ++-- .../Quickstart - Fine-tune a Text Classifier/index.html | 4 ++-- .../Quickstart - Fine-tune a Vision Classifier/index.html | 4 ++-- .../Quickstart - ONNX Model Inference/index.html | 4 ++-- .../index.html | 4 ++-- .../Hyperparameter Tuning/HyperOpt/index.html | 4 ++-- .../Quickstart - Random Search/index.html | 4 ++-- docs/0.11.4/Explore Algorithms/LightGBM/Overview/index.html | 4 ++-- .../index.html | 4 ++-- docs/0.11.4/Explore Algorithms/OpenAI/Langchain/index.html | 4 ++-- .../OpenAI/Quickstart - OpenAI Embedding/index.html | 4 ++-- .../Quickstart - Understand and Search Forms/index.html | 4 ++-- docs/0.11.4/Explore Algorithms/OpenAI/index.html | 4 ++-- .../OpenCV/Image Transformations/index.html | 4 ++-- .../Explore Algorithms/Other Algorithms/Cyber ML/index.html | 4 ++-- .../Quickstart - Anomalous Access Detection/index.html | 4 ++-- .../Quickstart - Exploring Art Across Cultures/index.html | 4 ++-- .../Smart Adaptive Recommendations/index.html | 4 ++-- .../Regression/Quickstart - Data Cleaning/index.html | 4 ++-- .../Regression/Quickstart - Train Regressor/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit and LightGBM/index.html | 4 ++-- .../Responsible AI/Data Balance Analysis/index.html | 4 ++-- .../Responsible AI/Explanation Dashboard/index.html | 4 ++-- .../Responsible AI/Image Explainers/index.html | 4 ++-- .../Interpreting Model Predictions/index.html | 4 ++-- .../Responsible AI/PDP and ICE Explainers/index.html | 4 ++-- .../Quickstart - Data Balance Analysis/index.html | 4 ++-- .../Quickstart - Snow Leopard Detection/index.html | 4 ++-- .../Responsible AI/Tabular Explainers/index.html | 4 ++-- .../Responsible AI/Text Explainers/index.html | 4 ++-- .../Vowpal Wabbit/Contextual Bandits/index.html | 4 ++-- .../Vowpal Wabbit/Multi-class classification/index.html | 4 ++-- .../Explore Algorithms/Vowpal Wabbit/Overview/index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- docs/0.11.4/Get Started/Create a Spark Cluster/index.html | 4 ++-- docs/0.11.4/Get Started/Install SynapseML/index.html | 4 ++-- .../Get Started/Quickstart - Your First Models/index.html | 4 ++-- .../0.11.4/Get Started/Set up Cognitive Services/index.html | 4 ++-- docs/0.11.4/Overview/index.html | 4 ++-- .../Quick Examples/estimators/estimators_causal/index.html | 4 ++-- .../estimators/estimators_cognitive/index.html | 4 ++-- .../Quick Examples/estimators/estimators_core/index.html | 4 ++-- .../estimators/estimators_lightgbm/index.html | 4 ++-- .../Quick Examples/estimators/estimators_vw/index.html | 4 ++-- .../transformers/transformers_cognitive/index.html | 4 ++-- .../transformers/transformers_core/index.html | 4 ++-- .../transformers/transformers_deep_learning/index.html | 4 ++-- .../transformers/transformers_opencv/index.html | 4 ++-- .../Quick Examples/transformers/transformers_vw/index.html | 4 ++-- docs/0.11.4/Reference/Contributor Guide/index.html | 4 ++-- docs/0.11.4/Reference/Developer Setup/index.html | 4 ++-- docs/0.11.4/Reference/Docker Setup/index.html | 4 ++-- docs/0.11.4/Reference/Dotnet Setup/index.html | 4 ++-- .../Reference/Quickstart - LightGBM in Dotnet/index.html | 4 ++-- docs/0.11.4/Reference/R Setup/index.html | 4 ++-- docs/0.11.4/Use with MLFlow/Autologging/index.html | 4 ++-- docs/0.11.4/Use with MLFlow/Install/index.html | 4 ++-- docs/0.11.4/Use with MLFlow/Overview/index.html | 4 ++-- docs/1.0.1/Deploy Models/Overview/index.html | 4 ++-- .../Quickstart - Deploying a Classifier/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Geospatial Services/index.html | 4 ++-- .../AI Services/Multivariate Anomaly Detection/index.html | 4 ++-- .../Explore Algorithms/AI Services/Overview/index.html | 4 ++-- .../Quickstart - Analyze Celebrity Quotes/index.html | 4 ++-- .../AI Services/Quickstart - Analyze Text/index.html | 4 ++-- .../AI Services/Quickstart - Create Audiobooks/index.html | 4 ++-- .../Quickstart - Create a Visual Search Engine/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Quickstart - Flooding Risk/index.html | 4 ++-- .../Quickstart - Predictive Maintenance/index.html | 4 ++-- .../Quickstart - Isolation Forests/index.html | 4 ++-- .../Explore Algorithms/Causal Inference/Overview/index.html | 4 ++-- .../Quickstart - Measure Causal Effects/index.html | 4 ++-- .../Quickstart - Measure Heterogeneous Effects/index.html | 4 ++-- .../Quickstart - SparkML vs SynapseML/index.html | 4 ++-- .../Classification/Quickstart - Train Classifier/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Tabular Data/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Text Data/index.html | 4 ++-- .../Deep Learning/Distributed Training/index.html | 4 ++-- .../Deep Learning/Getting Started/index.html | 4 ++-- docs/1.0.1/Explore Algorithms/Deep Learning/ONNX/index.html | 4 ++-- .../Quickstart - Fine-tune a Text Classifier/index.html | 4 ++-- .../Quickstart - Fine-tune a Vision Classifier/index.html | 4 ++-- .../Quickstart - ONNX Model Inference/index.html | 4 ++-- .../index.html | 4 ++-- .../Hyperparameter Tuning/HyperOpt/index.html | 4 ++-- .../Quickstart - Random Search/index.html | 4 ++-- docs/1.0.1/Explore Algorithms/LightGBM/Overview/index.html | 4 ++-- .../index.html | 4 ++-- docs/1.0.1/Explore Algorithms/OpenAI/Langchain/index.html | 4 ++-- .../OpenAI/Quickstart - OpenAI Embedding/index.html | 4 ++-- .../Quickstart - Understand and Search Forms/index.html | 4 ++-- docs/1.0.1/Explore Algorithms/OpenAI/index.html | 4 ++-- .../OpenCV/Image Transformations/index.html | 4 ++-- .../Explore Algorithms/Other Algorithms/Cyber ML/index.html | 4 ++-- .../Quickstart - Anomalous Access Detection/index.html | 4 ++-- .../Quickstart - Exploring Art Across Cultures/index.html | 4 ++-- .../Smart Adaptive Recommendations/index.html | 4 ++-- .../Regression/Quickstart - Data Cleaning/index.html | 4 ++-- .../Regression/Quickstart - Train Regressor/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit and LightGBM/index.html | 4 ++-- .../Responsible AI/Data Balance Analysis/index.html | 4 ++-- .../Responsible AI/Explanation Dashboard/index.html | 4 ++-- .../Responsible AI/Image Explainers/index.html | 4 ++-- .../Interpreting Model Predictions/index.html | 4 ++-- .../Responsible AI/PDP and ICE Explainers/index.html | 4 ++-- .../Quickstart - Data Balance Analysis/index.html | 4 ++-- .../Quickstart - Snow Leopard Detection/index.html | 4 ++-- .../Responsible AI/Tabular Explainers/index.html | 4 ++-- .../Responsible AI/Text Explainers/index.html | 4 ++-- .../Vowpal Wabbit/Contextual Bandits/index.html | 4 ++-- .../Vowpal Wabbit/Multi-class classification/index.html | 4 ++-- .../Explore Algorithms/Vowpal Wabbit/Overview/index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- docs/1.0.1/Get Started/Create a Spark Cluster/index.html | 4 ++-- docs/1.0.1/Get Started/Install SynapseML/index.html | 4 ++-- .../Get Started/Quickstart - Your First Models/index.html | 4 ++-- docs/1.0.1/Get Started/Set up Cognitive Services/index.html | 4 ++-- docs/1.0.1/Overview/index.html | 4 ++-- .../Quick Examples/estimators/estimators_causal/index.html | 4 ++-- .../estimators/estimators_cognitive/index.html | 4 ++-- .../Quick Examples/estimators/estimators_core/index.html | 4 ++-- .../estimators/estimators_lightgbm/index.html | 4 ++-- .../Quick Examples/estimators/estimators_vw/index.html | 4 ++-- .../transformers/transformers_cognitive/index.html | 4 ++-- .../transformers/transformers_core/index.html | 4 ++-- .../transformers/transformers_deep_learning/index.html | 4 ++-- .../transformers/transformers_opencv/index.html | 4 ++-- .../Quick Examples/transformers/transformers_vw/index.html | 4 ++-- docs/1.0.1/Reference/Contributor Guide/index.html | 4 ++-- docs/1.0.1/Reference/Developer Setup/index.html | 4 ++-- docs/1.0.1/Reference/Docker Setup/index.html | 4 ++-- docs/1.0.1/Reference/Dotnet Setup/index.html | 4 ++-- .../Reference/Quickstart - LightGBM in Dotnet/index.html | 4 ++-- docs/1.0.1/Reference/R Setup/index.html | 4 ++-- docs/1.0.1/Use with MLFlow/Autologging/index.html | 4 ++-- docs/1.0.1/Use with MLFlow/Install/index.html | 4 ++-- docs/1.0.1/Use with MLFlow/Overview/index.html | 4 ++-- docs/Deploy Models/Overview/index.html | 4 ++-- .../Quickstart - Deploying a Classifier/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Geospatial Services/index.html | 4 ++-- .../AI Services/Multivariate Anomaly Detection/index.html | 4 ++-- docs/Explore Algorithms/AI Services/Overview/index.html | 4 ++-- .../Quickstart - Analyze Celebrity Quotes/index.html | 4 ++-- .../AI Services/Quickstart - Analyze Text/index.html | 4 ++-- .../AI Services/Quickstart - Create Audiobooks/index.html | 4 ++-- .../Quickstart - Create a Visual Search Engine/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Quickstart - Flooding Risk/index.html | 4 ++-- .../Quickstart - Predictive Maintenance/index.html | 4 ++-- .../Quickstart - Isolation Forests/index.html | 4 ++-- .../Explore Algorithms/Causal Inference/Overview/index.html | 4 ++-- .../Quickstart - Measure Causal Effects/index.html | 4 ++-- .../Quickstart - Measure Heterogeneous Effects/index.html | 4 ++-- .../Quickstart - SparkML vs SynapseML/index.html | 4 ++-- .../Classification/Quickstart - Train Classifier/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Tabular Data/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Text Data/index.html | 4 ++-- .../Deep Learning/Distributed Training/index.html | 4 ++-- .../Deep Learning/Getting Started/index.html | 4 ++-- docs/Explore Algorithms/Deep Learning/ONNX/index.html | 4 ++-- .../Quickstart - Fine-tune a Text Classifier/index.html | 4 ++-- .../Quickstart - Fine-tune a Vision Classifier/index.html | 4 ++-- .../Quickstart - ONNX Model Inference/index.html | 4 ++-- .../index.html | 4 ++-- .../Hyperparameter Tuning/HyperOpt/index.html | 4 ++-- .../Quickstart - Random Search/index.html | 4 ++-- docs/Explore Algorithms/LightGBM/Overview/index.html | 4 ++-- .../index.html | 4 ++-- docs/Explore Algorithms/OpenAI/Langchain/index.html | 4 ++-- .../OpenAI/Quickstart - OpenAI Embedding/index.html | 4 ++-- .../Quickstart - Understand and Search Forms/index.html | 4 ++-- docs/Explore Algorithms/OpenAI/index.html | 4 ++-- .../OpenCV/Image Transformations/index.html | 4 ++-- .../Explore Algorithms/Other Algorithms/Cyber ML/index.html | 4 ++-- .../Quickstart - Anomalous Access Detection/index.html | 4 ++-- .../Quickstart - Exploring Art Across Cultures/index.html | 4 ++-- .../Smart Adaptive Recommendations/index.html | 4 ++-- .../Regression/Quickstart - Data Cleaning/index.html | 4 ++-- .../Regression/Quickstart - Train Regressor/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit and LightGBM/index.html | 4 ++-- .../Responsible AI/Data Balance Analysis/index.html | 4 ++-- .../Responsible AI/Explanation Dashboard/index.html | 4 ++-- .../Responsible AI/Image Explainers/index.html | 4 ++-- .../Interpreting Model Predictions/index.html | 4 ++-- .../Responsible AI/PDP and ICE Explainers/index.html | 4 ++-- .../Quickstart - Data Balance Analysis/index.html | 4 ++-- .../Quickstart - Snow Leopard Detection/index.html | 4 ++-- .../Responsible AI/Tabular Explainers/index.html | 4 ++-- .../Responsible AI/Text Explainers/index.html | 4 ++-- .../Vowpal Wabbit/Contextual Bandits/index.html | 4 ++-- .../Vowpal Wabbit/Multi-class classification/index.html | 4 ++-- docs/Explore Algorithms/Vowpal Wabbit/Overview/index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- docs/Get Started/Create a Spark Cluster/index.html | 4 ++-- docs/Get Started/Install SynapseML/index.html | 4 ++-- docs/Get Started/Quickstart - Your First Models/index.html | 4 ++-- docs/Get Started/Set up Cognitive Services/index.html | 4 ++-- docs/Overview/index.html | 4 ++-- docs/Quick Examples/estimators/estimators_causal/index.html | 4 ++-- .../estimators/estimators_cognitive/index.html | 4 ++-- docs/Quick Examples/estimators/estimators_core/index.html | 4 ++-- .../estimators/estimators_lightgbm/index.html | 4 ++-- docs/Quick Examples/estimators/estimators_vw/index.html | 4 ++-- .../transformers/transformers_cognitive/index.html | 4 ++-- .../transformers/transformers_core/index.html | 4 ++-- .../transformers/transformers_deep_learning/index.html | 4 ++-- .../transformers/transformers_opencv/index.html | 4 ++-- docs/Quick Examples/transformers/transformers_vw/index.html | 4 ++-- docs/Reference/Contributor Guide/index.html | 4 ++-- docs/Reference/Developer Setup/index.html | 4 ++-- docs/Reference/Docker Setup/index.html | 4 ++-- docs/Reference/Dotnet Setup/index.html | 4 ++-- docs/Reference/Quickstart - LightGBM in Dotnet/index.html | 4 ++-- docs/Reference/R Setup/index.html | 4 ++-- docs/Use with MLFlow/Autologging/index.html | 4 ++-- docs/Use with MLFlow/Install/index.html | 4 ++-- docs/Use with MLFlow/Overview/index.html | 4 ++-- docs/next/Deploy Models/Overview/index.html | 4 ++-- .../Quickstart - Deploying a Classifier/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Geospatial Services/index.html | 4 ++-- .../AI Services/Multivariate Anomaly Detection/index.html | 6 +++--- .../next/Explore Algorithms/AI Services/Overview/index.html | 4 ++-- .../Quickstart - Analyze Celebrity Quotes/index.html | 4 ++-- .../AI Services/Quickstart - Analyze Text/index.html | 4 ++-- .../AI Services/Quickstart - Create Audiobooks/index.html | 4 ++-- .../Quickstart - Create a Visual Search Engine/index.html | 4 ++-- .../index.html | 4 ++-- .../AI Services/Quickstart - Flooding Risk/index.html | 4 ++-- .../Quickstart - Predictive Maintenance/index.html | 4 ++-- .../Quickstart - Isolation Forests/index.html | 4 ++-- .../Explore Algorithms/Causal Inference/Overview/index.html | 4 ++-- .../Quickstart - Measure Causal Effects/index.html | 4 ++-- .../Quickstart - Measure Heterogeneous Effects/index.html | 4 ++-- .../index.html | 4 ++-- .../Quickstart - SparkML vs SynapseML/index.html | 4 ++-- .../Classification/Quickstart - Train Classifier/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Tabular Data/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit on Text Data/index.html | 4 ++-- .../Deep Learning/Distributed Training/index.html | 4 ++-- .../Deep Learning/Getting Started/index.html | 4 ++-- docs/next/Explore Algorithms/Deep Learning/ONNX/index.html | 4 ++-- .../Quickstart - Fine-tune a Text Classifier/index.html | 4 ++-- .../Quickstart - Fine-tune a Vision Classifier/index.html | 4 ++-- .../Quickstart - ONNX Model Inference/index.html | 4 ++-- .../index.html | 4 ++-- .../Hyperparameter Tuning/HyperOpt/index.html | 4 ++-- .../Quickstart - Random Search/index.html | 4 ++-- docs/next/Explore Algorithms/LightGBM/Overview/index.html | 4 ++-- .../index.html | 4 ++-- docs/next/Explore Algorithms/OpenAI/Langchain/index.html | 4 ++-- .../index.html | 4 ++-- .../OpenAI/Quickstart - OpenAI Embedding/index.html | 4 ++-- .../Quickstart - Understand and Search Forms/index.html | 4 ++-- docs/next/Explore Algorithms/OpenAI/index.html | 4 ++-- .../OpenCV/Image Transformations/index.html | 4 ++-- .../Explore Algorithms/Other Algorithms/Cyber ML/index.html | 4 ++-- .../Quickstart - Anomalous Access Detection/index.html | 4 ++-- .../Quickstart - Exploring Art Across Cultures/index.html | 4 ++-- .../Smart Adaptive Recommendations/index.html | 4 ++-- .../Regression/Quickstart - Data Cleaning/index.html | 4 ++-- .../Regression/Quickstart - Train Regressor/index.html | 4 ++-- .../Quickstart - Vowpal Wabbit and LightGBM/index.html | 4 ++-- .../Responsible AI/Data Balance Analysis/index.html | 4 ++-- .../Responsible AI/Explanation Dashboard/index.html | 4 ++-- .../Responsible AI/Image Explainers/index.html | 4 ++-- .../Interpreting Model Predictions/index.html | 4 ++-- .../Responsible AI/PDP and ICE Explainers/index.html | 4 ++-- .../Quickstart - Data Balance Analysis/index.html | 4 ++-- .../Quickstart - Snow Leopard Detection/index.html | 4 ++-- .../Responsible AI/Tabular Explainers/index.html | 4 ++-- .../Responsible AI/Text Explainers/index.html | 4 ++-- .../Vowpal Wabbit/Contextual Bandits/index.html | 4 ++-- .../Vowpal Wabbit/Multi-class classification/index.html | 4 ++-- .../Explore Algorithms/Vowpal Wabbit/Overview/index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- .../index.html | 4 ++-- docs/next/Get Started/Create a Spark Cluster/index.html | 4 ++-- docs/next/Get Started/Install SynapseML/index.html | 6 +++--- .../Get Started/Quickstart - Your First Models/index.html | 4 ++-- docs/next/Get Started/Set up Cognitive Services/index.html | 4 ++-- docs/next/Overview/index.html | 4 ++-- .../Quick Examples/estimators/estimators_causal/index.html | 4 ++-- .../estimators/estimators_cognitive/index.html | 4 ++-- .../Quick Examples/estimators/estimators_core/index.html | 4 ++-- .../estimators/estimators_lightgbm/index.html | 4 ++-- .../next/Quick Examples/estimators/estimators_vw/index.html | 4 ++-- .../transformers/transformers_cognitive/index.html | 4 ++-- .../transformers/transformers_core/index.html | 4 ++-- .../transformers/transformers_deep_learning/index.html | 4 ++-- .../transformers/transformers_opencv/index.html | 4 ++-- .../Quick Examples/transformers/transformers_vw/index.html | 4 ++-- docs/next/Reference/Contributor Guide/index.html | 4 ++-- docs/next/Reference/Developer Setup/index.html | 4 ++-- docs/next/Reference/Docker Setup/index.html | 4 ++-- docs/next/Reference/Dotnet Setup/index.html | 4 ++-- .../Reference/Quickstart - LightGBM in Dotnet/index.html | 4 ++-- docs/next/Reference/R Setup/index.html | 4 ++-- docs/next/Use with MLFlow/Autologging/index.html | 4 ++-- docs/next/Use with MLFlow/Install/index.html | 4 ++-- docs/next/Use with MLFlow/Overview/index.html | 4 ++-- index.html | 6 +++--- search/index.html | 4 ++-- videos/index.html | 4 ++-- 434 files changed, 865 insertions(+), 865 deletions(-) create mode 100644 assets/js/73c2022c.65b3c453.js delete mode 100644 assets/js/73c2022c.88809c2f.js rename assets/js/{c4f5d8e4.07c58bdf.js => c4f5d8e4.15216e11.js} (54%) rename assets/js/{e464d112.1d8c0769.js => e464d112.f88ca299.js} (87%) rename assets/js/{runtime~main.a0cfe39f.js => runtime~main.f01b5653.js} (99%) diff --git a/404.html b/404.html index 35345f2f9c..6e5c6098ac 100644 --- a/404.html +++ b/404.html @@ -16,13 +16,13 @@ - +
Skip to main content

Sorry! Page Not Found

We have been doing some work on our website, chances are that the page you're looking for is in the new docs section.

- + \ No newline at end of file diff --git a/assets/js/73c2022c.65b3c453.js b/assets/js/73c2022c.65b3c453.js new file mode 100644 index 0000000000..f1edff124e --- /dev/null +++ b/assets/js/73c2022c.65b3c453.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksynapseml=self.webpackChunksynapseml||[]).push([[847],{3905:(e,a,t)=>{t.d(a,{Zo:()=>i,kt:()=>m});var r=t(67294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function s(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var p=r.createContext({}),c=function(e){var a=r.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},i=function(e){var a=c(e.components);return r.createElement(p.Provider,{value:a},e.children)},u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},k=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,s=e.originalType,p=e.parentName,i=l(e,["components","mdxType","originalType","parentName"]),k=c(t),m=n,d=k["".concat(p,".").concat(m)]||k[m]||u[m]||s;return t?r.createElement(d,o(o({ref:a},i),{},{components:t})):r.createElement(d,o({ref:a},i))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var s=t.length,o=new Array(s);o[0]=k;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,o[1]=l;for(var c=2;c{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var r=t(83117),n=(t(67294),t(3905));const s={title:"Install SynapseML",description:"Install SynapseML"},o=void 0,l={unversionedId:"Get Started/Install SynapseML",id:"Get Started/Install SynapseML",title:"Install SynapseML",description:"Install SynapseML",source:"@site/docs/Get Started/Install SynapseML.md",sourceDirName:"Get Started",slug:"/Get Started/Install SynapseML",permalink:"/SynapseML/docs/next/Get Started/Install SynapseML",draft:!1,tags:[],version:"current",frontMatter:{title:"Install SynapseML",description:"Install SynapseML"},sidebar:"docs",previous:{title:"Create a Spark Cluster",permalink:"/SynapseML/docs/next/Get Started/Create a Spark Cluster"},next:{title:"Set up Cognitive Services",permalink:"/SynapseML/docs/next/Get Started/Set up Cognitive Services"}},p={},c=[{value:"Microsoft Fabric",id:"microsoft-fabric",level:2},{value:"Synapse",id:"synapse",level:2},{value:"Python",id:"python",level:2},{value:"SBT",id:"sbt",level:2},{value:"Spark package",id:"spark-package",level:2},{value:"Databricks",id:"databricks",level:2},{value:"Apache Livy and HDInsight",id:"apache-livy-and-hdinsight",level:2},{value:"Docker",id:"docker",level:2},{value:"Building from source",id:"building-from-source",level:2},{value:"R (Beta)",id:"r-beta",level:2},{value:"C# (.NET)",id:"c-net",level:2}],i={toc:c};function u(e){let{components:a,...t}=e;return(0,n.kt)("wrapper",(0,r.Z)({},i,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"microsoft-fabric"},"Microsoft Fabric"),(0,n.kt)("p",null,"SynapseML is already installed in Microsoft Fabric notebooks. To change the version please place the following in the first cell of your notebook: "),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("h2",{id:"synapse"},"Synapse"),(0,n.kt)("p",null,"SynapseML is already installed in Synapse Analytics notebooks. To change the version please place the following in the first cell of your notebook:"),(0,n.kt)("p",null,"For Spark3.4 pools"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("p",null,"For Spark3.3 pools:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("h2",{id:"python"},"Python"),(0,n.kt)("p",null,"To try out SynapseML on a Python (or Conda) installation, you can get Spark\ninstalled via pip with ",(0,n.kt)("inlineCode",{parentName:"p"},"pip install pyspark"),"."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'import pyspark\nspark = pyspark.sql.SparkSession.builder.appName("MyApp") \\\n # Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\n .config("spark.jars.packages", "com.microsoft.azure:synapseml_2.12:1.0.2") \\\n .config("spark.jars.repositories", "https://mmlspark.azureedge.net/maven") \\\n .getOrCreate()\nimport synapse.ml\n')),(0,n.kt)("h2",{id:"sbt"},"SBT"),(0,n.kt)("p",null,"If you're building a Spark application in Scala, add the following lines to\nyour ",(0,n.kt)("inlineCode",{parentName:"p"},"build.sbt"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-scala"},'resolvers += "SynapseML" at "https://mmlspark.azureedge.net/maven"\n// Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\nlibraryDependencies += "com.microsoft.azure" % "synapseml_2.12" % "1.0.2"\n')),(0,n.kt)("h2",{id:"spark-package"},"Spark package"),(0,n.kt)("p",null,"SynapseML can be conveniently installed on existing Spark clusters via the\n",(0,n.kt)("inlineCode",{parentName:"p"},"--packages")," option, examples:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"# Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\nspark-shell --packages com.microsoft.azure:synapseml_2.12:1.0.2\npyspark --packages com.microsoft.azure:synapseml_2.12:1.0.2\nspark-submit --packages com.microsoft.azure:synapseml_2.12:1.0.2 MyApp.jar\n")),(0,n.kt)("p",null,"A similar technique can be used in other Spark contexts too. For example, you can use SynapseML\nin ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Azure/aztk/"},"AZTK")," by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Azure/aztk/wiki/PySpark-on-Azure-with-AZTK#optional-set-up-mmlspark"},"adding it to the\n",(0,n.kt)("inlineCode",{parentName:"a"},".aztk/spark-defaults.conf"),"\nfile"),"."),(0,n.kt)("h2",{id:"databricks"},"Databricks"),(0,n.kt)("p",null,"To install SynapseML on the ",(0,n.kt)("a",{parentName:"p",href:"http://community.cloud.databricks.com"},"Databricks\ncloud"),", create a new ",(0,n.kt)("a",{parentName:"p",href:"https://docs.databricks.com/user-guide/libraries.html#libraries-from-maven-pypi-or-spark-packages"},"library from Maven\ncoordinates"),"\nin your workspace."),(0,n.kt)("p",null,"For the coordinates use: ",(0,n.kt)("inlineCode",{parentName:"p"},"com.microsoft.azure:synapseml_2.12:1.0.2")," for Spark3.4 Cluster and\n",(0,n.kt)("inlineCode",{parentName:"p"},"com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3")," for Spark3.3 Cluster;\nAdd the resolver: ",(0,n.kt)("inlineCode",{parentName:"p"},"https://mmlspark.azureedge.net/maven"),". Ensure this library is\nattached to your target cluster(s)."),(0,n.kt)("p",null,"Finally, ensure that your Spark cluster has at least Spark 3.2 and Scala 2.12."),(0,n.kt)("p",null,"You can use SynapseML in both your Scala and PySpark notebooks. To get started with our example notebooks, import the following databricks archive:"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"https://mmlspark.blob.core.windows.net/dbcs/SynapseMLExamplesv1.0.2.dbc")),(0,n.kt)("h2",{id:"apache-livy-and-hdinsight"},"Apache Livy and HDInsight"),(0,n.kt)("p",null,"To install SynapseML from within a Jupyter notebook served by Apache Livy, the following configure magic can be used. You'll need to start a new session after this configure cell is executed."),(0,n.kt)("p",null,"Excluding certain packages from the library may be necessary due to current issues with Livy 0.5"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n # Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind"\n }\n}\n')),(0,n.kt)("p",null,'In Azure Synapse, "spark.yarn.user.classpath.first" should be set to "true" to override the existing SynapseML packages'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n # Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true"\n }\n}\n')),(0,n.kt)("h2",{id:"docker"},"Docker"),(0,n.kt)("p",null,"The easiest way to evaluate SynapseML is via our pre-built Docker container. To\ndo so, run the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it -p 8888:8888 -e ACCEPT_EULA=yes mcr.microsoft.com/mmlspark/release\n")),(0,n.kt)("p",null,"Navigate to ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8888/"},"http://localhost:8888/")," in your web browser to run the sample\nnotebooks. See the ","[documentation]","(../../Reference/Docker Setup.md) for more on Docker use."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"To read the EULA for using the docker image, run"),(0,n.kt)("pre",{parentName:"blockquote"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it -p 8888:8888 mcr.microsoft.com/mmlspark/release eula\n"))),(0,n.kt)("h2",{id:"building-from-source"},"Building from source"),(0,n.kt)("p",null,"SynapseML has recently transitioned to a new build infrastructure.\nFor detailed developer docs, see the ",(0,n.kt)("a",{parentName:"p",href:"../../Reference/Docker%20Setup"},"Developer Readme")),(0,n.kt)("p",null,"If you're an existing SynapseML developer, you'll need to reconfigure your\ndevelopment setup. We now support platform independent development and\nbetter integrate with intellij and SBT.\nIf you encounter issues, reach out to our support email!"),(0,n.kt)("h2",{id:"r-beta"},"R (Beta)"),(0,n.kt)("p",null,"To try out SynapseML using the R autogenerated wrappers, ",(0,n.kt)("a",{parentName:"p",href:"../../Reference/R%20Setup"},"see our\ninstructions"),". Note: This feature is still under development\nand some necessary custom wrappers may be missing."),(0,n.kt)("h2",{id:"c-net"},"C# (.NET)"),(0,n.kt)("p",null,"To try out SynapseML with .NET, follow the ",(0,n.kt)("a",{parentName:"p",href:"../../Reference/Dotnet%20Setup"},".NET Installation Guide"),".\nNote: Some stages including AzureSearchWriter, DiagnosticInfo, UDPyF Param, ParamSpaceParam, BallTreeParam,\nConditionalBallTreeParam, LightGBMBooster Param are still under development and not exposed in .NET."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73c2022c.88809c2f.js b/assets/js/73c2022c.88809c2f.js deleted file mode 100644 index 875b3f90d4..0000000000 --- a/assets/js/73c2022c.88809c2f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksynapseml=self.webpackChunksynapseml||[]).push([[847],{3905:(e,a,r)=>{r.d(a,{Zo:()=>i,kt:()=>m});var t=r(67294);function n(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function s(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var a=1;a=0||(n[r]=e[r]);return n}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=t.createContext({}),c=function(e){var a=t.useContext(p),r=a;return e&&(r="function"==typeof e?e(a):o(o({},a),e)),r},i=function(e){var a=c(e.components);return t.createElement(p.Provider,{value:a},e.children)},u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},k=t.forwardRef((function(e,a){var r=e.components,n=e.mdxType,s=e.originalType,p=e.parentName,i=l(e,["components","mdxType","originalType","parentName"]),k=c(r),m=n,d=k["".concat(p,".").concat(m)]||k[m]||u[m]||s;return r?t.createElement(d,o(o({ref:a},i),{},{components:r})):t.createElement(d,o({ref:a},i))}));function m(e,a){var r=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var s=r.length,o=new Array(s);o[0]=k;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,o[1]=l;for(var c=2;c{r.r(a),r.d(a,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var t=r(83117),n=(r(67294),r(3905));const s={title:"Install SynapseML",description:"Install SynapseML"},o=void 0,l={unversionedId:"Get Started/Install SynapseML",id:"Get Started/Install SynapseML",title:"Install SynapseML",description:"Install SynapseML",source:"@site/docs/Get Started/Install SynapseML.md",sourceDirName:"Get Started",slug:"/Get Started/Install SynapseML",permalink:"/SynapseML/docs/next/Get Started/Install SynapseML",draft:!1,tags:[],version:"current",frontMatter:{title:"Install SynapseML",description:"Install SynapseML"},sidebar:"docs",previous:{title:"Create a Spark Cluster",permalink:"/SynapseML/docs/next/Get Started/Create a Spark Cluster"},next:{title:"Set up Cognitive Services",permalink:"/SynapseML/docs/next/Get Started/Set up Cognitive Services"}},p={},c=[{value:"Microsoft Fabric",id:"microsoft-fabric",level:2},{value:"Synapse",id:"synapse",level:2},{value:"Python",id:"python",level:2},{value:"SBT",id:"sbt",level:2},{value:"Spark package",id:"spark-package",level:2},{value:"Databricks",id:"databricks",level:2},{value:"Apache Livy and HDInsight",id:"apache-livy-and-hdinsight",level:2},{value:"Docker",id:"docker",level:2},{value:"Building from source",id:"building-from-source",level:2},{value:"R (Beta)",id:"r-beta",level:2},{value:"C# (.NET)",id:"c-net",level:2}],i={toc:c};function u(e){let{components:a,...r}=e;return(0,n.kt)("wrapper",(0,t.Z)({},i,r,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"microsoft-fabric"},"Microsoft Fabric"),(0,n.kt)("p",null,"SynapseML is already installed in Microsoft Fabric notebooks. To change the version please place the following in the first cell of your notebook: "),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("h2",{id:"synapse"},"Synapse"),(0,n.kt)("p",null,"SynapseML is already installed in Synapse Analytics notebooks. To change the version please place the following in the first cell of your notebook:"),(0,n.kt)("p",null,"For Spark3.5 pools"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.3",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("p",null,"For Spark3.4 pools"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2-spark3.4",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("p",null,"For Spark3.3 pools:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}\n')),(0,n.kt)("h2",{id:"python"},"Python"),(0,n.kt)("p",null,"To try out SynapseML on a Python (or Conda) installation, you can get Spark\ninstalled via pip with ",(0,n.kt)("inlineCode",{parentName:"p"},"pip install pyspark"),"."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'import pyspark\nspark = pyspark.sql.SparkSession.builder.appName("MyApp") \\\n # Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\n .config("spark.jars.packages", "com.microsoft.azure:synapseml_2.12:1.0.2") \\\n .config("spark.jars.repositories", "https://mmlspark.azureedge.net/maven") \\\n .getOrCreate()\nimport synapse.ml\n')),(0,n.kt)("h2",{id:"sbt"},"SBT"),(0,n.kt)("p",null,"If you're building a Spark application in Scala, add the following lines to\nyour ",(0,n.kt)("inlineCode",{parentName:"p"},"build.sbt"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-scala"},'resolvers += "SynapseML" at "https://mmlspark.azureedge.net/maven"\n// Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\nlibraryDependencies += "com.microsoft.azure" % "synapseml_2.12" % "1.0.2"\n')),(0,n.kt)("h2",{id:"spark-package"},"Spark package"),(0,n.kt)("p",null,"SynapseML can be conveniently installed on existing Spark clusters via the\n",(0,n.kt)("inlineCode",{parentName:"p"},"--packages")," option, examples:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"# Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\nspark-shell --packages com.microsoft.azure:synapseml_2.12:1.0.2\npyspark --packages com.microsoft.azure:synapseml_2.12:1.0.2\nspark-submit --packages com.microsoft.azure:synapseml_2.12:1.0.2 MyApp.jar\n")),(0,n.kt)("p",null,"A similar technique can be used in other Spark contexts too. For example, you can use SynapseML\nin ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Azure/aztk/"},"AZTK")," by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Azure/aztk/wiki/PySpark-on-Azure-with-AZTK#optional-set-up-mmlspark"},"adding it to the\n",(0,n.kt)("inlineCode",{parentName:"a"},".aztk/spark-defaults.conf"),"\nfile"),"."),(0,n.kt)("h2",{id:"databricks"},"Databricks"),(0,n.kt)("p",null,"To install SynapseML on the ",(0,n.kt)("a",{parentName:"p",href:"http://community.cloud.databricks.com"},"Databricks\ncloud"),", create a new ",(0,n.kt)("a",{parentName:"p",href:"https://docs.databricks.com/user-guide/libraries.html#libraries-from-maven-pypi-or-spark-packages"},"library from Maven\ncoordinates"),"\nin your workspace."),(0,n.kt)("p",null,"For the coordinates use: ",(0,n.kt)("inlineCode",{parentName:"p"},"com.microsoft.azure:synapseml_2.12:1.0.2")," for Spark3.4 Cluster and\n",(0,n.kt)("inlineCode",{parentName:"p"},"com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3")," for Spark3.3 Cluster;\nAdd the resolver: ",(0,n.kt)("inlineCode",{parentName:"p"},"https://mmlspark.azureedge.net/maven"),". Ensure this library is\nattached to your target cluster(s)."),(0,n.kt)("p",null,"Finally, ensure that your Spark cluster has at least Spark 3.2 and Scala 2.12."),(0,n.kt)("p",null,"You can use SynapseML in both your Scala and PySpark notebooks. To get started with our example notebooks, import the following databricks archive:"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"https://mmlspark.blob.core.windows.net/dbcs/SynapseMLExamplesv1.0.2.dbc")),(0,n.kt)("h2",{id:"apache-livy-and-hdinsight"},"Apache Livy and HDInsight"),(0,n.kt)("p",null,"To install SynapseML from within a Jupyter notebook served by Apache Livy, the following configure magic can be used. You'll need to start a new session after this configure cell is executed."),(0,n.kt)("p",null,"Excluding certain packages from the library may be necessary due to current issues with Livy 0.5"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n # Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind"\n }\n}\n')),(0,n.kt)("p",null,'In Azure Synapse, "spark.yarn.user.classpath.first" should be set to "true" to override the existing SynapseML packages'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n # Use 0.11.4-spark3.3 version for Spark3.3 and 1.0.2 version for Spark3.4\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true"\n }\n}\n')),(0,n.kt)("h2",{id:"docker"},"Docker"),(0,n.kt)("p",null,"The easiest way to evaluate SynapseML is via our pre-built Docker container. To\ndo so, run the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it -p 8888:8888 -e ACCEPT_EULA=yes mcr.microsoft.com/mmlspark/release\n")),(0,n.kt)("p",null,"Navigate to ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8888/"},"http://localhost:8888/")," in your web browser to run the sample\nnotebooks. See the ","[documentation]","(../../Reference/Docker Setup.md) for more on Docker use."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"To read the EULA for using the docker image, run"),(0,n.kt)("pre",{parentName:"blockquote"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it -p 8888:8888 mcr.microsoft.com/mmlspark/release eula\n"))),(0,n.kt)("h2",{id:"building-from-source"},"Building from source"),(0,n.kt)("p",null,"SynapseML has recently transitioned to a new build infrastructure.\nFor detailed developer docs, see the ",(0,n.kt)("a",{parentName:"p",href:"../../Reference/Docker%20Setup"},"Developer Readme")),(0,n.kt)("p",null,"If you're an existing SynapseML developer, you'll need to reconfigure your\ndevelopment setup. We now support platform independent development and\nbetter integrate with intellij and SBT.\nIf you encounter issues, reach out to our support email!"),(0,n.kt)("h2",{id:"r-beta"},"R (Beta)"),(0,n.kt)("p",null,"To try out SynapseML using the R autogenerated wrappers, ",(0,n.kt)("a",{parentName:"p",href:"../../Reference/R%20Setup"},"see our\ninstructions"),". Note: This feature is still under development\nand some necessary custom wrappers may be missing."),(0,n.kt)("h2",{id:"c-net"},"C# (.NET)"),(0,n.kt)("p",null,"To try out SynapseML with .NET, follow the ",(0,n.kt)("a",{parentName:"p",href:"../../Reference/Dotnet%20Setup"},".NET Installation Guide"),".\nNote: Some stages including AzureSearchWriter, DiagnosticInfo, UDPyF Param, ParamSpaceParam, BallTreeParam,\nConditionalBallTreeParam, LightGBMBooster Param are still under development and not exposed in .NET."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.07c58bdf.js b/assets/js/c4f5d8e4.15216e11.js similarity index 54% rename from assets/js/c4f5d8e4.07c58bdf.js rename to assets/js/c4f5d8e4.15216e11.js index 65b9c8eb24..649aa4e07a 100644 --- a/assets/js/c4f5d8e4.07c58bdf.js +++ b/assets/js/c4f5d8e4.15216e11.js @@ -1 +1 @@ -(self.webpackChunksynapseml=self.webpackChunksynapseml||[]).push([[4195],{35567:(e,a,t)=>{"use strict";t.r(a),t.d(a,{default:()=>w});var n=t(83117),r=t(67294),s=t(94184),l=t.n(s),o=t(7452),c=t(39960),i=t(52263),p=t(44996);const m={heroBanner:"heroBanner_qdFl",getStarted:"getStarted_D36F",buttons:"buttons_AeoN",announcement:"announcement_XVnd",announcementDark:"announcementDark_dnMf",announcementInner:"announcementInner_VmFX",features:"features_cAfv",featureImage:"featureImage_wMIZ",heroImg:"heroImg_lMB4",configSnippet:"configSnippet_hC0c",configSnippets:"configSnippets_Iyxf",pitch:"pitch_XV8K",loveSection:"loveSection_tbp6",loveSectionPlea:"loveSectionPlea_xpLt",loveImg:"loveImg_zggS",sponsorLink:"sponsorLink_QcRj",microsoftImg:"microsoftImg_a3bM",theMetImg:"theMetImg_EvOH",mitImg:"mitImg_TSc4"},u="codeSnippet_f3C9";var d=t(92949),g=t(23746),k=t(81354),f=t.n(k);const h=function(e){const{siteConfig:{themeConfig:{prism:a={}}}}=(0,i.Z)(),[t,s]=(0,r.useState)(!1);(0,r.useEffect)((()=>{s(!0)}),[]);const{isDarkTheme:l}=(0,d.I)(),o=a.theme||f(),c=a.darkTheme||o,p=l?c:o,{lang:m="yaml",snippet:k}=e;return r.createElement(g.ZP,(0,n.Z)({},g.lG,{key:t,theme:p,code:k,language:m}),(e=>{let{className:a,style:t,tokens:n,getLineProps:s,getTokenProps:l}=e;return r.createElement("pre",{className:a+" "+u,style:t},n.map(((e,a)=>r.createElement("div",s({line:e,key:a}),e.map(((e,a)=>r.createElement("span",l({token:e,key:a}))))))))}))};var y=t(86010),b=t(10195),E=t(95999);const v="codeBlockContainer_v98K",S="codeBlockContent_xAFg",_="copyButton_C2v_",N="furtherButton_rET3";const L=function(e){const{siteConfig:{themeConfig:{prism:a={}}}}=(0,i.Z)(),[t,s]=(0,r.useState)(!1),[l,o]=(0,r.useState)(!1);(0,r.useEffect)((()=>{o(!0)}),[]);const{isDarkTheme:p}=(0,d.I)(),m=a.theme||f(),u=a.darkTheme||m,k=p?u:m,h=(0,r.useRef)(null),{lang:L="python",config:M,copyBit:C,further:T}=e;let I=C||M;const Z=()=>{(0,b.Z)(I),s(!0),setTimeout((()=>s(!1)),2e3)};return r.createElement(g.ZP,(0,n.Z)({},g.lG,{key:l,theme:k,code:M,language:L}),(e=>{let{className:a,style:n,tokens:s,getLineProps:l,getTokenProps:o}=e;return r.createElement("div",{className:v},r.createElement("div",{className:(0,y.Z)(S,L)},r.createElement("pre",{className:""+a,style:n},s.map(((e,a)=>r.createElement("div",l({line:e,key:a}),e.map(((e,a)=>r.createElement("span",o({token:e,key:a})))))))),r.createElement("button",{ref:h,type:"button","aria-label":(0,E.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:(0,y.Z)(_,"clean-btn"),onClick:Z},t?r.createElement(E.Z,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):r.createElement(E.Z,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy")),T&&r.createElement(c.Z,{className:(0,y.Z)(N,"button button--outline button--primary"),to:T},"Read more")))}))};var M=t(74866),C=t(85162);const T=[{label:"Cognitive Services",further:"docs/Explore%20Algorithms/AI%20Services/Overview#text-analytics-sample",config:'from synapse.ml.cognitive import *\n\nsentiment_df = (TextSentiment()\n .setTextCol("text")\n .setLocation("eastus")\n .setSubscriptionKey(key)\n .setOutputCol("sentiment")\n .setErrorCol("error")\n .setLanguageCol("language")\n .transform(input_df))'},{label:"Deep Learning",further:"docs/Explore%20Algorithms/Deep%20Learning/ONNX",config:'from synapse.ml.onnx import *\n\nmodel_prediction_df = (ONNXModel()\n .setModelPayload(model_payload_ml)\n .setDeviceType("CPU")\n .setFeedDict({"input": "features"})\n .setFetchDict({"probability": "probabilities", "prediction": "label"})\n .setMiniBatchSize(64)\n .transform(input_df))'},{label:"Responsible AI",further:"docs/Explore%20Algorithms/Responsible%20AI/Interpreting%20Model%20Predictions",config:'from synapse.ml.explainers import *\n\ninterpretation_df = (TabularSHAP()\n .setInputCols(features)\n .setOutputCol("shapValues")\n .setTargetCol("probability")\n .setTargetClasses([1])\n .setNumSamples(5000)\n .setModel(model)\n .transform(input_df))'},{label:"LightGBM",further:"docs/Explore%20Algorithms/LightGBM/Overview",config:"from synapse.ml.lightgbm import *\n\nquantile_df = (LightGBMRegressor()\n .setApplication('quantile')\n .setAlpha(0.3)\n .setLearningRate(0.3)\n .setNumIterations(100)\n .setNumLeaves(31)\n .fit(train_df)\n .transform(test_df))"},{label:"OpenCV",further:"docs/Explore%20Algorithms/OpenCV/Image%20Transformations",config:'from synapse.ml.opencv import *\n\nimage_df = (ImageTransformer()\n .setInputCol("images")\n .setOutputCol("transformed_images")\n .resize(224, True)\n .centerCrop(224, 224)\n .normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], color_scale_factor = 1/255)\n .transform(input_df))'}],I=[{title:"Simple",imageUrl:"img/simple.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"Quickly create, train, and use distributed machine learning tools in only a few lines of code."))},{title:"Scalable",imageUrl:"img/scalable.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"Scale ML workloads to hundreds of machines on your"," ",r.createElement("a",{href:"https://spark.apache.org/"},"Apache Spark")," cluster."))},{title:"Multilingual",imageUrl:"img/multilingual.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"Use SynapseML from any Spark compatible language including Python, Scala, R, Java, .NET and C#."))},{title:"Open",imageUrl:"img/open_source.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"SynapseML is Open Source and can be installed and used on any Spark 3 infrastructure including your local machine, Databricks, Synapse Analytics, and others."))}];function Z(e){let{imageUrl:a,title:t,description:n}=e;const s=(0,p.Z)(a);return r.createElement("div",{className:l()("col col--6",m.feature)},s&&r.createElement("div",{className:"text--center"},r.createElement("img",{className:l()("padding-vert--md",m.featureImage),src:s,alt:t})),r.createElement("h3",null,t),r.createElement("p",null,n))}const w=function(){const e=(0,i.Z)(),{siteConfig:a={}}=e;return r.createElement(o.Z,{title:""+a.title,description:"Simple and Distributed Machine Learning",keywords:["SynapseML","Machine Learning"]},r.createElement("header",{className:l()("hero",m.heroBanner)},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},r.createElement("div",{className:l()("col col--5 col--offset-1")},r.createElement("h1",{className:"hero__title"},a.title),r.createElement("p",{className:"hero__subtitle"},a.tagline),r.createElement("div",{className:m.buttons},r.createElement(c.Z,{className:l()("button button--outline button--primary button--lg",m.getStarted),to:(0,p.Z)("docs/Get%20Started/Install%20SynapseML")},"Get Started"))),r.createElement("div",{className:l()("col col--5")},r.createElement("img",{className:m.heroImg,src:(0,p.Z)("img/logo.svg")}))))),r.createElement("main",null,r.createElement("div",{className:"container"},r.createElement("div",{className:(0,y.Z)(m.announcement,m.announcementDark)},r.createElement("div",{className:m.announcementInner},"Coming from"," ",r.createElement("a",{href:"https://mmlspark.blob.core.windows.net/website/index.html"},"MMLSpark"),"? We have been renamed to SynapseML!"))),r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},r.createElement("div",{className:l()("col col--12")},T&&T.length&&r.createElement("section",{className:m.configSnippets},r.createElement(M.Z,{defaultValue:T[0].label,values:T.map(((e,a)=>({label:e.label,value:e.label})))},T.map(((e,a)=>r.createElement(C.Z,{key:a,value:e.label},r.createElement(L,(0,n.Z)({className:m.configSnippet},e)))))))))),I&&I.length&&r.createElement("section",{className:m.features},r.createElement("div",{className:"container margin-vert--md"},r.createElement("div",{className:"row"},I.map(((e,a)=>r.createElement(Z,(0,n.Z)({key:a},e))))))),r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},r.createElement("div",{className:l()(m.pitch+" col")},r.createElement("h2",null,"Installation"),r.createElement("p",null,"Written in Scala, and support multiple languages."," ",r.createElement("a",{href:"https://github.com/microsoft/SynapseML"},"Open source")," ","and cloud native."),r.createElement(M.Z,{defaultValue:"Fabric",values:[{label:"Synapse",value:"Synapse"},{label:"Fabric",value:"Fabric"},{label:"Spark Packages",value:"Spark Packages"},{label:"Databricks",value:"Databricks"},{label:"Docker",value:"Docker"},{label:"Python",value:"Python"},{label:"SBT",value:"SBT"},{label:".NET",value:"dotnet"}]},r.createElement(C.Z,{value:"Synapse"},r.createElement("p",null,"SynapseML can be installed on Synapse adding the following to the first cell of a notebook:"),"For Spark3.5 pools:",r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"}),"For Spark3.4 pools:",r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2-spark3.4",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"}),"For Spark3.3 pools:",r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"})),r.createElement(C.Z,{value:"Fabric"},r.createElement("p",null,"SynapseML is preinstalled on Fabric. To install a different version, add the following to the first cell of a notebook:"),r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:[THE_SYNAPSEML_VERSION_YOU_WANT]",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"})),r.createElement(C.Z,{value:"Spark Packages"},"SynapseML can be conveniently installed on existing Spark clusters via the --packages option, examples:",r.createElement(h,{snippet:"spark-shell --packages com.microsoft.azure:synapseml_2.12:1.0.2 # Please use 1.0.2 version for Spark3.5, 1.0.2-spark3.4 version for Spark3.4, and 0.11.4-spark3.3 version for Spark3.3\npyspark --packages com.microsoft.azure:synapseml_2.12:1.0.2\nspark-submit --packages com.microsoft.azure:synapseml_2.12:1.0.2 MyApp.jar ",lang:"bash"}),"This can be used in other Spark contexts too. For example, you can use SynapseML in"," ",r.createElement("a",{href:"https://github.com/Azure/aztk/"},"AZTK")," by adding it to the"," ",r.createElement("a",{href:"https://github.com/Azure/aztk/wiki/PySpark-on-Azure-with-AZTK#optional-set-up-mmlspark"},".aztk/spark-defaults.conf file"),"."),r.createElement(C.Z,{value:"Databricks"},r.createElement("p",null,"To install SynapseML on the"," ",r.createElement("a",{href:"http://community.cloud.databricks.com"},"Databricks cloud"),", create a new"," ",r.createElement("a",{href:"https://docs.databricks.com/user-guide/libraries.html#libraries-from-maven-pypi-or-spark-packages"},"library from Maven coordinates")," ","in your workspace. in your workspace."),r.createElement("p",null,r.createElement("p",null,"For the coordinates:"),"Spark 3.5 Cluster:",r.createElement(h,{snippet:"com.microsoft.azure:synapseml_2.12:1.0.2",lang:"bash"}),"Spark 3.4 Cluster:",r.createElement(h,{snippet:"com.microsoft.azure:synapseml_2.12:1.0.2-spark3.4",lang:"bash"}),"Spark 3.3 Cluster:",r.createElement(h,{snippet:"com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3",lang:"bash"}),"with the resolver:",r.createElement(h,{snippet:"https://mmlspark.azureedge.net/maven",lang:"bash"}),"Ensure this library is attached to your target cluster(s)."),r.createElement("p",null,"Finally, ensure that your Spark cluster has at least Spark 3.4 and Scala 2.12."),"You can use SynapseML in both your Scala and PySpark notebooks. To get started with our example notebooks import the following databricks archive:",r.createElement(h,{snippet:"https://mmlspark.blob.core.windows.net/dbcs/SynapseMLExamplesv1.0.2.dbc",lang:"bash"})),r.createElement(C.Z,{value:"Docker"},"The easiest way to evaluate SynapseML is via our pre-built Docker container. To do so, run the following command:",r.createElement(h,{snippet:"docker run -it -p 8888:8888 -e ACCEPT_EULA=yes mcr.microsoft.com/mmlspark/release",lang:"bash"}),r.createElement("p",null,"Navigate to"," ",r.createElement("a",{href:"http://localhost:8888"},"http://localhost:8888")," in your web browser to run the sample notebooks. See the"," ",r.createElement("a",{href:"https://github.com/microsoft/SynapseML/blob/master/docs/docker.md"},"documentation")," ","for more on Docker use."),"To read the EULA for using the docker image, run",r.createElement(h,{snippet:"docker run -it -p 8888:8888 mcr.microsoft.com/mmlspark/release eula",lang:"bash"})),r.createElement(C.Z,{value:"Python"},"To try out SynapseML on a Python (or Conda) installation you can get Spark installed via pip with",r.createElement(h,{snippet:"pip install pyspark",lang:"bash"}),"You can then use pyspark as in the above example, or from python:",r.createElement(h,{snippet:'import pyspark\nspark = (pyspark.sql.SparkSession.builder.appName("MyApp")\n .config("spark.jars.packages", "com.microsoft.azure:synapseml_2.12:1.0.2") # Please use 1.0.2 version for Spark3.5, 1.0.2-spark3.4 version for Spark3.4, and 0.11.4-spark3.3 version for Spark3.3\n .config("spark.jars.repositories", "https://mmlspark.azureedge.net/maven")\n .getOrCreate())\nimport synapse.ml',lang:"python"})),r.createElement(C.Z,{value:"SBT"},"If you are building a Spark application in Scala, add the following lines to your build.sbt:",r.createElement(h,{snippet:'resolvers += "SynapseML" at "https://mmlspark.azureedge.net/maven"\nlibraryDependencies += "com.microsoft.azure" %% "synapseml_2.12" % "1.0.2" // Please use 1.0.2 version for Spark3.5, 1.0.2-spark3.4 version for Spark3.4, and 0.11.4-spark3.3 version for Spark3.3',lang:"jsx"})),r.createElement(C.Z,{value:"dotnet"},"To try out SynapseML with .NET, you should add SynapseML's assembly into reference:",r.createElement(h,{snippet:"dotnet add package SynapseML.Cognitive --version 1.0.2\ndotnet add package SynapseML.Core --version 1.0.2\ndotnet add package SynapseML.Lightgbm --version 1.0.2\ndotnet add package SynapseML.DeepLearning --version 1.0.2\ndotnet add package SynapseML.Opencv --version 1.0.2\ndotnet add package SynapseML.Vw --version 1.0.2",lang:"bash"}),"For detailed installation, please refer this"," ",r.createElement("a",{href:"docs/Reference/Dotnet%20Setup/#installation"},"instruction"),".")))))))}},81354:e=>{e.exports={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["comment"],style:{color:"rgb(136, 132, 111)"}},{types:["string","changed"],style:{color:"rgb(230, 219, 116)"}},{types:["punctuation","tag","deleted"],style:{color:"rgb(249, 38, 114)"}},{types:["number","builtin"],style:{color:"rgb(174, 129, 255)"}},{types:["variable"],style:{color:"rgb(248, 248, 242)"}},{types:["function","attr-name","inserted"],style:{color:"rgb(166, 226, 46)"}}]}}}]); \ No newline at end of file +(self.webpackChunksynapseml=self.webpackChunksynapseml||[]).push([[4195],{35567:(e,a,t)=>{"use strict";t.r(a),t.d(a,{default:()=>w});var n=t(83117),r=t(67294),s=t(94184),l=t.n(s),o=t(7452),c=t(39960),i=t(52263),p=t(44996);const m={heroBanner:"heroBanner_qdFl",getStarted:"getStarted_D36F",buttons:"buttons_AeoN",announcement:"announcement_XVnd",announcementDark:"announcementDark_dnMf",announcementInner:"announcementInner_VmFX",features:"features_cAfv",featureImage:"featureImage_wMIZ",heroImg:"heroImg_lMB4",configSnippet:"configSnippet_hC0c",configSnippets:"configSnippets_Iyxf",pitch:"pitch_XV8K",loveSection:"loveSection_tbp6",loveSectionPlea:"loveSectionPlea_xpLt",loveImg:"loveImg_zggS",sponsorLink:"sponsorLink_QcRj",microsoftImg:"microsoftImg_a3bM",theMetImg:"theMetImg_EvOH",mitImg:"mitImg_TSc4"},u="codeSnippet_f3C9";var d=t(92949),g=t(23746),f=t(81354),k=t.n(f);const h=function(e){const{siteConfig:{themeConfig:{prism:a={}}}}=(0,i.Z)(),[t,s]=(0,r.useState)(!1);(0,r.useEffect)((()=>{s(!0)}),[]);const{isDarkTheme:l}=(0,d.I)(),o=a.theme||k(),c=a.darkTheme||o,p=l?c:o,{lang:m="yaml",snippet:f}=e;return r.createElement(g.ZP,(0,n.Z)({},g.lG,{key:t,theme:p,code:f,language:m}),(e=>{let{className:a,style:t,tokens:n,getLineProps:s,getTokenProps:l}=e;return r.createElement("pre",{className:a+" "+u,style:t},n.map(((e,a)=>r.createElement("div",s({line:e,key:a}),e.map(((e,a)=>r.createElement("span",l({token:e,key:a}))))))))}))};var y=t(86010),b=t(10195),E=t(95999);const v="codeBlockContainer_v98K",S="codeBlockContent_xAFg",_="copyButton_C2v_",N="furtherButton_rET3";const L=function(e){const{siteConfig:{themeConfig:{prism:a={}}}}=(0,i.Z)(),[t,s]=(0,r.useState)(!1),[l,o]=(0,r.useState)(!1);(0,r.useEffect)((()=>{o(!0)}),[]);const{isDarkTheme:p}=(0,d.I)(),m=a.theme||k(),u=a.darkTheme||m,f=p?u:m,h=(0,r.useRef)(null),{lang:L="python",config:M,copyBit:C,further:T}=e;let I=C||M;const Z=()=>{(0,b.Z)(I),s(!0),setTimeout((()=>s(!1)),2e3)};return r.createElement(g.ZP,(0,n.Z)({},g.lG,{key:l,theme:f,code:M,language:L}),(e=>{let{className:a,style:n,tokens:s,getLineProps:l,getTokenProps:o}=e;return r.createElement("div",{className:v},r.createElement("div",{className:(0,y.Z)(S,L)},r.createElement("pre",{className:""+a,style:n},s.map(((e,a)=>r.createElement("div",l({line:e,key:a}),e.map(((e,a)=>r.createElement("span",o({token:e,key:a})))))))),r.createElement("button",{ref:h,type:"button","aria-label":(0,E.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:(0,y.Z)(_,"clean-btn"),onClick:Z},t?r.createElement(E.Z,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):r.createElement(E.Z,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy")),T&&r.createElement(c.Z,{className:(0,y.Z)(N,"button button--outline button--primary"),to:T},"Read more")))}))};var M=t(74866),C=t(85162);const T=[{label:"Cognitive Services",further:"docs/Explore%20Algorithms/AI%20Services/Overview#text-analytics-sample",config:'from synapse.ml.cognitive import *\n\nsentiment_df = (TextSentiment()\n .setTextCol("text")\n .setLocation("eastus")\n .setSubscriptionKey(key)\n .setOutputCol("sentiment")\n .setErrorCol("error")\n .setLanguageCol("language")\n .transform(input_df))'},{label:"Deep Learning",further:"docs/Explore%20Algorithms/Deep%20Learning/ONNX",config:'from synapse.ml.onnx import *\n\nmodel_prediction_df = (ONNXModel()\n .setModelPayload(model_payload_ml)\n .setDeviceType("CPU")\n .setFeedDict({"input": "features"})\n .setFetchDict({"probability": "probabilities", "prediction": "label"})\n .setMiniBatchSize(64)\n .transform(input_df))'},{label:"Responsible AI",further:"docs/Explore%20Algorithms/Responsible%20AI/Interpreting%20Model%20Predictions",config:'from synapse.ml.explainers import *\n\ninterpretation_df = (TabularSHAP()\n .setInputCols(features)\n .setOutputCol("shapValues")\n .setTargetCol("probability")\n .setTargetClasses([1])\n .setNumSamples(5000)\n .setModel(model)\n .transform(input_df))'},{label:"LightGBM",further:"docs/Explore%20Algorithms/LightGBM/Overview",config:"from synapse.ml.lightgbm import *\n\nquantile_df = (LightGBMRegressor()\n .setApplication('quantile')\n .setAlpha(0.3)\n .setLearningRate(0.3)\n .setNumIterations(100)\n .setNumLeaves(31)\n .fit(train_df)\n .transform(test_df))"},{label:"OpenCV",further:"docs/Explore%20Algorithms/OpenCV/Image%20Transformations",config:'from synapse.ml.opencv import *\n\nimage_df = (ImageTransformer()\n .setInputCol("images")\n .setOutputCol("transformed_images")\n .resize(224, True)\n .centerCrop(224, 224)\n .normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], color_scale_factor = 1/255)\n .transform(input_df))'}],I=[{title:"Simple",imageUrl:"img/simple.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"Quickly create, train, and use distributed machine learning tools in only a few lines of code."))},{title:"Scalable",imageUrl:"img/scalable.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"Scale ML workloads to hundreds of machines on your"," ",r.createElement("a",{href:"https://spark.apache.org/"},"Apache Spark")," cluster."))},{title:"Multilingual",imageUrl:"img/multilingual.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"Use SynapseML from any Spark compatible language including Python, Scala, R, Java, .NET and C#."))},{title:"Open",imageUrl:"img/open_source.svg",description:r.createElement(r.Fragment,null,r.createElement("p",null,"SynapseML is Open Source and can be installed and used on any Spark 3 infrastructure including your local machine, Databricks, Synapse Analytics, and others."))}];function Z(e){let{imageUrl:a,title:t,description:n}=e;const s=(0,p.Z)(a);return r.createElement("div",{className:l()("col col--6",m.feature)},s&&r.createElement("div",{className:"text--center"},r.createElement("img",{className:l()("padding-vert--md",m.featureImage),src:s,alt:t})),r.createElement("h3",null,t),r.createElement("p",null,n))}const w=function(){const e=(0,i.Z)(),{siteConfig:a={}}=e;return r.createElement(o.Z,{title:""+a.title,description:"Simple and Distributed Machine Learning",keywords:["SynapseML","Machine Learning"]},r.createElement("header",{className:l()("hero",m.heroBanner)},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},r.createElement("div",{className:l()("col col--5 col--offset-1")},r.createElement("h1",{className:"hero__title"},a.title),r.createElement("p",{className:"hero__subtitle"},a.tagline),r.createElement("div",{className:m.buttons},r.createElement(c.Z,{className:l()("button button--outline button--primary button--lg",m.getStarted),to:(0,p.Z)("docs/Get%20Started/Install%20SynapseML")},"Get Started"))),r.createElement("div",{className:l()("col col--5")},r.createElement("img",{className:m.heroImg,src:(0,p.Z)("img/logo.svg")}))))),r.createElement("main",null,r.createElement("div",{className:"container"},r.createElement("div",{className:(0,y.Z)(m.announcement,m.announcementDark)},r.createElement("div",{className:m.announcementInner},"Coming from"," ",r.createElement("a",{href:"https://mmlspark.blob.core.windows.net/website/index.html"},"MMLSpark"),"? We have been renamed to SynapseML!"))),r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},r.createElement("div",{className:l()("col col--12")},T&&T.length&&r.createElement("section",{className:m.configSnippets},r.createElement(M.Z,{defaultValue:T[0].label,values:T.map(((e,a)=>({label:e.label,value:e.label})))},T.map(((e,a)=>r.createElement(C.Z,{key:a,value:e.label},r.createElement(L,(0,n.Z)({className:m.configSnippet},e)))))))))),I&&I.length&&r.createElement("section",{className:m.features},r.createElement("div",{className:"container margin-vert--md"},r.createElement("div",{className:"row"},I.map(((e,a)=>r.createElement(Z,(0,n.Z)({key:a},e))))))),r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},r.createElement("div",{className:l()(m.pitch+" col")},r.createElement("h2",null,"Installation"),r.createElement("p",null,"Written in Scala, and support multiple languages."," ",r.createElement("a",{href:"https://github.com/microsoft/SynapseML"},"Open source")," ","and cloud native."),r.createElement(M.Z,{defaultValue:"Fabric",values:[{label:"Synapse",value:"Synapse"},{label:"Fabric",value:"Fabric"},{label:"Spark Packages",value:"Spark Packages"},{label:"Databricks",value:"Databricks"},{label:"Docker",value:"Docker"},{label:"Python",value:"Python"},{label:"SBT",value:"SBT"},{label:".NET",value:"dotnet"}]},r.createElement(C.Z,{value:"Synapse"},r.createElement("p",null,"SynapseML can be installed on Synapse adding the following to the first cell of a notebook:"),"For Spark3.4 pools:",r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:1.0.2",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"}),"For Spark3.3 pools:",r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"})),r.createElement(C.Z,{value:"Fabric"},r.createElement("p",null,"SynapseML is preinstalled on Fabric. To install a different version, add the following to the first cell of a notebook:"),r.createElement(h,{snippet:'%%configure -f\n{\n "name": "synapseml",\n "conf": {\n "spark.jars.packages": "com.microsoft.azure:synapseml_2.12:[THE_SYNAPSEML_VERSION_YOU_WANT]",\n "spark.jars.repositories": "https://mmlspark.azureedge.net/maven",\n "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",\n "spark.yarn.user.classpath.first": "true",\n "spark.sql.parquet.enableVectorizedReader": "false"\n }\n}',lang:"bash"})),r.createElement(C.Z,{value:"Spark Packages"},"SynapseML can be conveniently installed on existing Spark clusters via the --packages option, examples:",r.createElement(h,{snippet:"spark-shell --packages com.microsoft.azure:synapseml_2.12:1.0.2 # Please use 1.0.2 version for Spark3.4 and 0.11.4-spark3.3 version for Spark3.3\npyspark --packages com.microsoft.azure:synapseml_2.12:1.0.2\nspark-submit --packages com.microsoft.azure:synapseml_2.12:1.0.2 MyApp.jar ",lang:"bash"}),"This can be used in other Spark contexts too. For example, you can use SynapseML in"," ",r.createElement("a",{href:"https://github.com/Azure/aztk/"},"AZTK")," by adding it to the"," ",r.createElement("a",{href:"https://github.com/Azure/aztk/wiki/PySpark-on-Azure-with-AZTK#optional-set-up-mmlspark"},".aztk/spark-defaults.conf file"),"."),r.createElement(C.Z,{value:"Databricks"},r.createElement("p",null,"To install SynapseML on the"," ",r.createElement("a",{href:"http://community.cloud.databricks.com"},"Databricks cloud"),", create a new"," ",r.createElement("a",{href:"https://docs.databricks.com/user-guide/libraries.html#libraries-from-maven-pypi-or-spark-packages"},"library from Maven coordinates")," ","in your workspace. in your workspace."),r.createElement("p",null,r.createElement("p",null,"For the coordinates:"),"Spark 3.4 Cluster:",r.createElement(h,{snippet:"com.microsoft.azure:synapseml_2.12:1.0.2",lang:"bash"}),"Spark 3.3 Cluster:",r.createElement(h,{snippet:"com.microsoft.azure:synapseml_2.12:0.11.4-spark3.3",lang:"bash"}),"with the resolver:",r.createElement(h,{snippet:"https://mmlspark.azureedge.net/maven",lang:"bash"}),"Ensure this library is attached to your target cluster(s)."),r.createElement("p",null,"Finally, ensure that your Spark cluster has at least Spark 3.4 and Scala 2.12."),"You can use SynapseML in both your Scala and PySpark notebooks. To get started with our example notebooks import the following databricks archive:",r.createElement(h,{snippet:"https://mmlspark.blob.core.windows.net/dbcs/SynapseMLExamplesv1.0.2.dbc",lang:"bash"})),r.createElement(C.Z,{value:"Docker"},"The easiest way to evaluate SynapseML is via our pre-built Docker container. To do so, run the following command:",r.createElement(h,{snippet:"docker run -it -p 8888:8888 -e ACCEPT_EULA=yes mcr.microsoft.com/mmlspark/release",lang:"bash"}),r.createElement("p",null,"Navigate to"," ",r.createElement("a",{href:"http://localhost:8888"},"http://localhost:8888")," in your web browser to run the sample notebooks. See the"," ",r.createElement("a",{href:"https://github.com/microsoft/SynapseML/blob/master/docs/docker.md"},"documentation")," ","for more on Docker use."),"To read the EULA for using the docker image, run",r.createElement(h,{snippet:"docker run -it -p 8888:8888 mcr.microsoft.com/mmlspark/release eula",lang:"bash"})),r.createElement(C.Z,{value:"Python"},"To try out SynapseML on a Python (or Conda) installation you can get Spark installed via pip with",r.createElement(h,{snippet:"pip install pyspark",lang:"bash"}),"You can then use pyspark as in the above example, or from python:",r.createElement(h,{snippet:'import pyspark\nspark = (pyspark.sql.SparkSession.builder.appName("MyApp")\n .config("spark.jars.packages", "com.microsoft.azure:synapseml_2.12:1.0.2") # Please use 1.0.2 version for Spark3.4 and 0.11.4-spark3.3 version for Spark3.3\n .config("spark.jars.repositories", "https://mmlspark.azureedge.net/maven")\n .getOrCreate())\nimport synapse.ml',lang:"python"})),r.createElement(C.Z,{value:"SBT"},"If you are building a Spark application in Scala, add the following lines to your build.sbt:",r.createElement(h,{snippet:'resolvers += "SynapseML" at "https://mmlspark.azureedge.net/maven"\nlibraryDependencies += "com.microsoft.azure" %% "synapseml_2.12" % "1.0.2" // Please use 1.0.2 version for Spark3.2 and 1.0.2-spark3.3 version for Spark3.3',lang:"jsx"})),r.createElement(C.Z,{value:"dotnet"},"To try out SynapseML with .NET, you should add SynapseML's assembly into reference:",r.createElement(h,{snippet:"dotnet add package SynapseML.Cognitive --version 1.0.2\ndotnet add package SynapseML.Core --version 1.0.2\ndotnet add package SynapseML.Lightgbm --version 1.0.2\ndotnet add package SynapseML.DeepLearning --version 1.0.2\ndotnet add package SynapseML.Opencv --version 1.0.2\ndotnet add package SynapseML.Vw --version 1.0.2",lang:"bash"}),"For detailed installation, please refer this"," ",r.createElement("a",{href:"docs/Reference/Dotnet%20Setup/#installation"},"instruction"),".")))))))}},81354:e=>{e.exports={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["comment"],style:{color:"rgb(136, 132, 111)"}},{types:["string","changed"],style:{color:"rgb(230, 219, 116)"}},{types:["punctuation","tag","deleted"],style:{color:"rgb(249, 38, 114)"}},{types:["number","builtin"],style:{color:"rgb(174, 129, 255)"}},{types:["variable"],style:{color:"rgb(248, 248, 242)"}},{types:["function","attr-name","inserted"],style:{color:"rgb(166, 226, 46)"}}]}}}]); \ No newline at end of file diff --git a/assets/js/e464d112.1d8c0769.js b/assets/js/e464d112.f88ca299.js similarity index 87% rename from assets/js/e464d112.1d8c0769.js rename to assets/js/e464d112.f88ca299.js index 23500413d7..809d366155 100644 --- a/assets/js/e464d112.1d8c0769.js +++ b/assets/js/e464d112.f88ca299.js @@ -1 +1 @@ -"use strict";(self.webpackChunksynapseml=self.webpackChunksynapseml||[]).push([[4508],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),u=r,h=d["".concat(l,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(h,i(i({ref:t},p),{},{components:n})):a.createElement(h,i({ref:t},p))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(83117),r=(n(67294),n(3905));const o={title:"Multivariate Anomaly Detection",hide_title:!0,status:"stable"},i="Recipe: AI Services - Multivariate Anomaly Detection",s={unversionedId:"Explore Algorithms/AI Services/Multivariate Anomaly Detection",id:"Explore Algorithms/AI Services/Multivariate Anomaly Detection",title:"Multivariate Anomaly Detection",description:"This recipe shows how you can use SynapseML and Azure AI services on Apache Spark to detect anomalies in multivariate time-series data. Multivariate anomaly detection takes correlations and dependencies between the different variables into account when discovering anomalies. In this scenario, we use SynapseML to train a model for multivariate anomaly detection using the Azure AI Services, and we then use to the model to detect anomalies in a dataset of synthetic measurements from three IoT sensors.",source:"@site/docs/Explore Algorithms/AI Services/Multivariate Anomaly Detection.md",sourceDirName:"Explore Algorithms/AI Services",slug:"/Explore Algorithms/AI Services/Multivariate Anomaly Detection",permalink:"/SynapseML/docs/next/Explore Algorithms/AI Services/Multivariate Anomaly Detection",draft:!1,tags:[],version:"current",frontMatter:{title:"Multivariate Anomaly Detection",hide_title:!0,status:"stable"},sidebar:"docs",previous:{title:"Geospatial Services",permalink:"/SynapseML/docs/next/Explore Algorithms/AI Services/Geospatial Services"},next:{title:"Advanced Usage - Async, Batching, and Multi-Key",permalink:"/SynapseML/docs/next/Explore Algorithms/AI Services/Advanced Usage - Async, Batching, and Multi-Key"}},l={},c=[{value:"Important",id:"important",level:2},{value:"Setup",id:"setup",level:2},{value:"Create an Anomaly Detector resource",id:"create-an-anomaly-detector-resource",level:3},{value:"Create a Storage Account resource",id:"create-a-storage-account-resource",level:3},{value:"Enter your service keys",id:"enter-your-service-keys",level:3}],p={toc:c};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"recipe-ai-services---multivariate-anomaly-detection"},"Recipe: AI Services - Multivariate Anomaly Detection"),(0,r.kt)("p",null,"This recipe shows how you can use SynapseML and Azure AI services on Apache Spark to detect anomalies in multivariate time-series data. Multivariate anomaly detection takes correlations and dependencies between the different variables into account when discovering anomalies. In this scenario, we use SynapseML to train a model for multivariate anomaly detection using the Azure AI Services, and we then use to the model to detect anomalies in a dataset of synthetic measurements from three IoT sensors. "),(0,r.kt)("p",null,"To learn more about the Azure AI Anomaly Detector, refer to ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/azure/ai-services/anomaly-detector/"},"this documentation page"),". "),(0,r.kt)("h2",{id:"important"},"Important"),(0,r.kt)("p",null,"Starting on the 20th of September, 2023 you won\u2019t be able to create new Anomaly Detector resources. The Anomaly Detector service is being retired on the 1st of October, 2026."),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("h3",{id:"create-an-anomaly-detector-resource"},"Create an Anomaly Detector resource"),(0,r.kt)("p",null,"Follow the instructions to create an ",(0,r.kt)("inlineCode",{parentName:"p"},"Anomaly Detector")," resource using the Azure portal or alternatively, you can also use the Azure CLI to create this resource."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In the Azure portal, click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create")," in your resource group, and then type ",(0,r.kt)("inlineCode",{parentName:"li"},"Anomaly Detector"),". Click on the Anomaly Detector resource."),(0,r.kt)("li",{parentName:"ul"},"Give the resource a name, and ideally use the same region as the rest of your resource group. Use the default options for the rest, and then click ",(0,r.kt)("inlineCode",{parentName:"li"},"Review + Create")," and then ",(0,r.kt)("inlineCode",{parentName:"li"},"Create"),"."),(0,r.kt)("li",{parentName:"ul"},"Once the Anomaly Detector resource is created, open it and click on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Keys and Endpoints")," panel on the left. Copy the key for the Anomaly Detector resource into the ",(0,r.kt)("inlineCode",{parentName:"li"},"ANOMALY_API_KEY")," environment variable, or store it in the ",(0,r.kt)("inlineCode",{parentName:"li"},"anomalyKey")," variable.")),(0,r.kt)("h3",{id:"create-a-storage-account-resource"},"Create a Storage Account resource"),(0,r.kt)("p",null,"In order to save intermediate data, you need to create an Azure Blob Storage Account. Within that storage account, create a container for storing the intermediate data. Make note of the container name, and copy the connection string to that container. You need it later to populate the ",(0,r.kt)("inlineCode",{parentName:"p"},"containerName")," variable and the ",(0,r.kt)("inlineCode",{parentName:"p"},"BLOB_CONNECTION_STRING")," environment variable."),(0,r.kt)("h3",{id:"enter-your-service-keys"},"Enter your service keys"),(0,r.kt)("p",null,"Let's start by setting up the environment variables for our service keys. The next cell sets the ",(0,r.kt)("inlineCode",{parentName:"p"},"ANOMALY_API_KEY")," and the ",(0,r.kt)("inlineCode",{parentName:"p"},"BLOB_CONNECTION_STRING")," environment variables based on the values stored in our Azure Key Vault. If you're running this tutorial in your own environment, make sure you set these environment variables before you proceed."),(0,r.kt)("p",null,"Now, lets read the ",(0,r.kt)("inlineCode",{parentName:"p"},"ANOMALY_API_KEY")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"BLOB_CONNECTION_STRING")," environment variables and set the ",(0,r.kt)("inlineCode",{parentName:"p"},"containerName")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"location")," variables."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from synapse.ml.core.platform import find_secret\n\n# An Anomaly Dectector subscription key\nanomalyKey = find_secret(\n secret_name="anomaly-api-key", keyvault="mmlspark-build-keys"\n) # use your own anomaly api key\n# Your storage account name\nstorageName = "anomalydetectiontest" # use your own storage account name\n# A connection string to your blob storage account\nstorageKey = find_secret(\n secret_name="madtest-storage-key", keyvault="mmlspark-build-keys"\n) # use your own storage key\n# A place to save intermediate MVAD results\nintermediateSaveDir = (\n "wasbs://madtest@anomalydetectiontest.blob.core.windows.net/intermediateData"\n)\n# The location of the anomaly detector resource that you created\nlocation = "westus2"\n')),(0,r.kt)("p",null,"First we connect to our storage account so that anomaly detector can save intermediate results there:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'spark.sparkContext._jsc.hadoopConfiguration().set(\n f"fs.azure.account.key.{storageName}.blob.core.windows.net", storageKey\n)\n')),(0,r.kt)("p",null,"Let's import all the necessary modules."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import numpy as np\nimport pandas as pd\n\nimport pyspark\nfrom pyspark.sql.functions import col\nfrom pyspark.sql.functions import lit\nfrom pyspark.sql.types import DoubleType\nimport matplotlib.pyplot as plt\n\nimport synapse.ml\nfrom synapse.ml.services.anomaly import *\n")),(0,r.kt)("p",null,"Now, let's read our sample data into a Spark DataFrame."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'df = (\n spark.read.format("csv")\n .option("header", "true")\n .load("wasbs://publicwasb@mmlspark.blob.core.windows.net/MVAD/sample.csv")\n)\n\ndf = (\n df.withColumn("sensor_1", col("sensor_1").cast(DoubleType()))\n .withColumn("sensor_2", col("sensor_2").cast(DoubleType()))\n .withColumn("sensor_3", col("sensor_3").cast(DoubleType()))\n)\n\n# Let\'s inspect the dataframe:\ndf.show(5)\n')),(0,r.kt)("p",null,"We can now create an ",(0,r.kt)("inlineCode",{parentName:"p"},"estimator")," object, which is used to train our model. We specify the start and end times for the training data. We also specify the input columns to use, and the name of the column that contains the timestamps. Finally, we specify the number of data points to use in the anomaly detection sliding window, and we set the connection string to the Azure Blob Storage Account. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'trainingStartTime = "2020-06-01T12:00:00Z"\ntrainingEndTime = "2020-07-02T17:55:00Z"\ntimestampColumn = "timestamp"\ninputColumns = ["sensor_1", "sensor_2", "sensor_3"]\n\nestimator = (\n SimpleFitMultivariateAnomaly()\n .setSubscriptionKey(anomalyKey)\n .setLocation(location)\n .setStartTime(trainingStartTime)\n .setEndTime(trainingEndTime)\n .setIntermediateSaveDir(intermediateSaveDir)\n .setTimestampCol(timestampColumn)\n .setInputCols(inputColumns)\n .setSlidingWindow(200)\n)\n')),(0,r.kt)("p",null,"Now that we have created the ",(0,r.kt)("inlineCode",{parentName:"p"},"estimator"),", let's fit it to the data:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"model = estimator.fit(df)\n")),(0,r.kt)("p",null,"Once the training is done, we can now use the model for inference. The code in the next cell specifies the start and end times for the data we would like to detect the anomalies in. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'inferenceStartTime = "2020-07-02T18:00:00Z"\ninferenceEndTime = "2020-07-06T05:15:00Z"\n\nresult = (\n model.setStartTime(inferenceStartTime)\n .setEndTime(inferenceEndTime)\n .setOutputCol("results")\n .setErrorCol("errors")\n .setInputCols(inputColumns)\n .setTimestampCol(timestampColumn)\n .transform(df)\n)\n\nresult.show(5)\n')),(0,r.kt)("p",null,"When we called ",(0,r.kt)("inlineCode",{parentName:"p"},".show(5)")," in the previous cell, it showed us the first five rows in the dataframe. The results were all ",(0,r.kt)("inlineCode",{parentName:"p"},"null")," because they weren't inside the inference window."),(0,r.kt)("p",null,"To show the results only for the inferred data, lets select the columns we need. We can then order the rows in the dataframe by ascending order, and filter the result to only show the rows that are in the range of the inference window. In our case ",(0,r.kt)("inlineCode",{parentName:"p"},"inferenceEndTime")," is the same as the last row in the dataframe, so can ignore that. "),(0,r.kt)("p",null,"Finally, to be able to better plot the results, lets convert the Spark dataframe to a Pandas dataframe."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'rdf = (\n result.select(\n "timestamp",\n *inputColumns,\n "results.interpretation",\n "isAnomaly",\n "results.severity"\n )\n .orderBy("timestamp", ascending=True)\n .filter(col("timestamp") >= lit(inferenceStartTime))\n .toPandas()\n)\n\nrdf\n')),(0,r.kt)("p",null,"Let's now format the ",(0,r.kt)("inlineCode",{parentName:"p"},"contributors")," column that stores the contribution score from each sensor to the detected anomalies. The next cell formats this data, and splits the contribution score of each sensor into its own column."),(0,r.kt)("p",null,"For Spark3.3 and below versions, the output of select statements will be in the format of ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),", so to format the data into dictionary and generate the values when interpretation is empty, please use the below parse method:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'def parse(x):\n if len(x) > 0:\n return dict([item[:2] for item in x])\n else:\n return {"sensor_1": 0, "sensor_2": 0, "sensor_3": 0}\n')),(0,r.kt)("p",null,"Staring with Spark3.4, the output of the select statement is already formatted as a ",(0,r.kt)("inlineCode",{parentName:"p"},"numpy.ndarry")," and no need to format the data again, so please use below parse method to generate the values when interpretation is empty:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'def parse(x):\n if len(x) == 0:\n return {"sensor_1": 0, "sensor_2": 0, "sensor_3": 0}\n\n\nrdf["contributors"] = rdf["interpretation"].apply(parse)\nrdf = pd.concat(\n [\n rdf.drop(["contributors"], axis=1),\n pd.json_normalize(rdf["contributors"]).rename(\n columns={\n "sensor_1": "series_1",\n "sensor_2": "series_2",\n "sensor_3": "series_3",\n }\n ),\n ],\n axis=1,\n)\nrdf\n')),(0,r.kt)("p",null,"Great! We now have the contribution scores of sensors 1, 2, and 3 in the ",(0,r.kt)("inlineCode",{parentName:"p"},"series_0"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"series_1"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"series_2")," columns respectively. "),(0,r.kt)("p",null,"Let's run the next cell to plot the results. The ",(0,r.kt)("inlineCode",{parentName:"p"},"minSeverity")," parameter in the first line specifies the minimum severity of the anomalies to be plotted. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'minSeverity = 0.1\n\n\n####### Main Figure #######\nplt.figure(figsize=(23, 8))\nplt.plot(\n rdf["timestamp"],\n rdf["sensor_1"],\n color="tab:orange",\n line,\n linewidth=2,\n label="sensor_1",\n)\nplt.plot(\n rdf["timestamp"],\n rdf["sensor_2"],\n color="tab:green",\n line,\n linewidth=2,\n label="sensor_2",\n)\nplt.plot(\n rdf["timestamp"],\n rdf["sensor_3"],\n color="tab:blue",\n line,\n linewidth=2,\n label="sensor_3",\n)\nplt.grid(axis="y")\nplt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)\nplt.legend()\n\nanoms = list(rdf["severity"] >= minSeverity)\n_, _, ymin, ymax = plt.axis()\nplt.vlines(list(np.where(anoms)[0]), ymin=ymin, ymax=ymax, color="r", alpha=0.8)\n\nplt.legend()\nplt.title(\n "A plot of the values from the three sensors with the detected anomalies highlighted in red."\n)\nplt.show()\n\n####### Severity Figure #######\nplt.figure(figsize=(23, 1))\nplt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)\nplt.plot(\n rdf["timestamp"],\n rdf["severity"],\n color="black",\n line,\n linewidth=2,\n label="Severity score",\n)\nplt.plot(\n rdf["timestamp"],\n [minSeverity] * len(rdf["severity"]),\n color="red",\n line,\n linewidth=1,\n label="minSeverity",\n)\nplt.grid(axis="y")\nplt.legend()\nplt.ylim([0, 1])\nplt.title("Severity of the detected anomalies")\nplt.show()\n\n####### Contributors Figure #######\nplt.figure(figsize=(23, 1))\nplt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)\nplt.bar(\n rdf["timestamp"], rdf["series_1"], width=2, color="tab:orange", label="sensor_1"\n)\nplt.bar(\n rdf["timestamp"],\n rdf["series_2"],\n width=2,\n color="tab:green",\n label="sensor_2",\n bottom=rdf["series_1"],\n)\nplt.bar(\n rdf["timestamp"],\n rdf["series_3"],\n width=2,\n color="tab:blue",\n label="sensor_3",\n bottom=rdf["series_1"] + rdf["series_2"],\n)\nplt.grid(axis="y")\nplt.legend()\nplt.ylim([0, 1])\nplt.title("The contribution of each sensor to the detected anomaly")\nplt.show()\n')),(0,r.kt)("img",{width:"1300",src:"https://mmlspark.blob.core.windows.net/graphics/multivariate-anomaly-detection-plot.png"}),(0,r.kt)("p",null,"The plots show the raw data from the sensors (inside the inference window) in orange, green, and blue. The red vertical lines in the first figure show the detected anomalies that have a severity greater than or equal to ",(0,r.kt)("inlineCode",{parentName:"p"},"minSeverity"),". "),(0,r.kt)("p",null,"The second plot shows the severity score of all the detected anomalies, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"minSeverity")," threshold shown in the dotted red line."),(0,r.kt)("p",null,"Finally, the last plot shows the contribution of the data from each sensor to the detected anomalies. It helps us diagnose and understand the most likely cause of each anomaly."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksynapseml=self.webpackChunksynapseml||[]).push([[4508],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),u=r,h=d["".concat(l,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(h,i(i({ref:t},p),{},{components:n})):a.createElement(h,i({ref:t},p))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(83117),r=(n(67294),n(3905));const o={title:"Multivariate Anomaly Detection",hide_title:!0,status:"stable"},i="Recipe: AI Services - Multivariate Anomaly Detection",s={unversionedId:"Explore Algorithms/AI Services/Multivariate Anomaly Detection",id:"Explore Algorithms/AI Services/Multivariate Anomaly Detection",title:"Multivariate Anomaly Detection",description:"This recipe shows how you can use SynapseML and Azure AI services on Apache Spark to detect anomalies in multivariate time-series data. Multivariate anomaly detection takes correlations and dependencies between the different variables into account when discovering anomalies. In this scenario, we use SynapseML to train a model for multivariate anomaly detection using the Azure AI Services, and we then use to the model to detect anomalies in a dataset of synthetic measurements from three IoT sensors.",source:"@site/docs/Explore Algorithms/AI Services/Multivariate Anomaly Detection.md",sourceDirName:"Explore Algorithms/AI Services",slug:"/Explore Algorithms/AI Services/Multivariate Anomaly Detection",permalink:"/SynapseML/docs/next/Explore Algorithms/AI Services/Multivariate Anomaly Detection",draft:!1,tags:[],version:"current",frontMatter:{title:"Multivariate Anomaly Detection",hide_title:!0,status:"stable"},sidebar:"docs",previous:{title:"Geospatial Services",permalink:"/SynapseML/docs/next/Explore Algorithms/AI Services/Geospatial Services"},next:{title:"Advanced Usage - Async, Batching, and Multi-Key",permalink:"/SynapseML/docs/next/Explore Algorithms/AI Services/Advanced Usage - Async, Batching, and Multi-Key"}},l={},c=[{value:"Important",id:"important",level:2},{value:"Setup",id:"setup",level:2},{value:"Create an Anomaly Detector resource",id:"create-an-anomaly-detector-resource",level:3},{value:"Create a Storage Account resource",id:"create-a-storage-account-resource",level:3},{value:"Enter your service keys",id:"enter-your-service-keys",level:3}],p={toc:c};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"recipe-ai-services---multivariate-anomaly-detection"},"Recipe: AI Services - Multivariate Anomaly Detection"),(0,r.kt)("p",null,"This recipe shows how you can use SynapseML and Azure AI services on Apache Spark to detect anomalies in multivariate time-series data. Multivariate anomaly detection takes correlations and dependencies between the different variables into account when discovering anomalies. In this scenario, we use SynapseML to train a model for multivariate anomaly detection using the Azure AI Services, and we then use to the model to detect anomalies in a dataset of synthetic measurements from three IoT sensors. "),(0,r.kt)("p",null,"To learn more about the Azure AI Anomaly Detector, refer to ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/azure/ai-services/anomaly-detector/"},"this documentation page"),". "),(0,r.kt)("h2",{id:"important"},"Important"),(0,r.kt)("p",null,"Starting on the 20th of September, 2023 you won\u2019t be able to create new Anomaly Detector resources. The Anomaly Detector service is being retired on the 1st of October, 2026."),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("h3",{id:"create-an-anomaly-detector-resource"},"Create an Anomaly Detector resource"),(0,r.kt)("p",null,"Follow the instructions to create an ",(0,r.kt)("inlineCode",{parentName:"p"},"Anomaly Detector")," resource using the Azure portal or alternatively, you can also use the Azure CLI to create this resource."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In the Azure portal, click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create")," in your resource group, and then type ",(0,r.kt)("inlineCode",{parentName:"li"},"Anomaly Detector"),". Click on the Anomaly Detector resource."),(0,r.kt)("li",{parentName:"ul"},"Give the resource a name, and ideally use the same region as the rest of your resource group. Use the default options for the rest, and then click ",(0,r.kt)("inlineCode",{parentName:"li"},"Review + Create")," and then ",(0,r.kt)("inlineCode",{parentName:"li"},"Create"),"."),(0,r.kt)("li",{parentName:"ul"},"Once the Anomaly Detector resource is created, open it and click on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Keys and Endpoints")," panel on the left. Copy the key for the Anomaly Detector resource into the ",(0,r.kt)("inlineCode",{parentName:"li"},"ANOMALY_API_KEY")," environment variable, or store it in the ",(0,r.kt)("inlineCode",{parentName:"li"},"anomalyKey")," variable.")),(0,r.kt)("h3",{id:"create-a-storage-account-resource"},"Create a Storage Account resource"),(0,r.kt)("p",null,"In order to save intermediate data, you need to create an Azure Blob Storage Account. Within that storage account, create a container for storing the intermediate data. Make note of the container name, and copy the connection string to that container. You need it later to populate the ",(0,r.kt)("inlineCode",{parentName:"p"},"containerName")," variable and the ",(0,r.kt)("inlineCode",{parentName:"p"},"BLOB_CONNECTION_STRING")," environment variable."),(0,r.kt)("h3",{id:"enter-your-service-keys"},"Enter your service keys"),(0,r.kt)("p",null,"Let's start by setting up the environment variables for our service keys. The next cell sets the ",(0,r.kt)("inlineCode",{parentName:"p"},"ANOMALY_API_KEY")," and the ",(0,r.kt)("inlineCode",{parentName:"p"},"BLOB_CONNECTION_STRING")," environment variables based on the values stored in our Azure Key Vault. If you're running this tutorial in your own environment, make sure you set these environment variables before you proceed."),(0,r.kt)("p",null,"Now, lets read the ",(0,r.kt)("inlineCode",{parentName:"p"},"ANOMALY_API_KEY")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"BLOB_CONNECTION_STRING")," environment variables and set the ",(0,r.kt)("inlineCode",{parentName:"p"},"containerName")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"location")," variables."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from synapse.ml.core.platform import find_secret\n\n# An Anomaly Dectector subscription key\nanomalyKey = find_secret(\n secret_name="anomaly-api-key", keyvault="mmlspark-build-keys"\n) # use your own anomaly api key\n# Your storage account name\nstorageName = "anomalydetectiontest" # use your own storage account name\n# A connection string to your blob storage account\nstorageKey = find_secret(\n secret_name="madtest-storage-key", keyvault="mmlspark-build-keys"\n) # use your own storage key\n# A place to save intermediate MVAD results\nintermediateSaveDir = (\n "wasbs://madtest@anomalydetectiontest.blob.core.windows.net/intermediateData"\n)\n# The location of the anomaly detector resource that you created\nlocation = "westus2"\n')),(0,r.kt)("p",null,"First we connect to our storage account so that anomaly detector can save intermediate results there:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'spark.sparkContext._jsc.hadoopConfiguration().set(\n f"fs.azure.account.key.{storageName}.blob.core.windows.net", storageKey\n)\n')),(0,r.kt)("p",null,"Let's import all the necessary modules."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import numpy as np\nimport pandas as pd\n\nimport pyspark\nfrom pyspark.sql.functions import col\nfrom pyspark.sql.functions import lit\nfrom pyspark.sql.types import DoubleType\nimport matplotlib.pyplot as plt\n\nimport synapse.ml\nfrom synapse.ml.services.anomaly import *\n")),(0,r.kt)("p",null,"Now, let's read our sample data into a Spark DataFrame."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'df = (\n spark.read.format("csv")\n .option("header", "true")\n .load("wasbs://publicwasb@mmlspark.blob.core.windows.net/MVAD/sample.csv")\n)\n\ndf = (\n df.withColumn("sensor_1", col("sensor_1").cast(DoubleType()))\n .withColumn("sensor_2", col("sensor_2").cast(DoubleType()))\n .withColumn("sensor_3", col("sensor_3").cast(DoubleType()))\n)\n\n# Let\'s inspect the dataframe:\ndf.show(5)\n')),(0,r.kt)("p",null,"We can now create an ",(0,r.kt)("inlineCode",{parentName:"p"},"estimator")," object, which is used to train our model. We specify the start and end times for the training data. We also specify the input columns to use, and the name of the column that contains the timestamps. Finally, we specify the number of data points to use in the anomaly detection sliding window, and we set the connection string to the Azure Blob Storage Account. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'trainingStartTime = "2020-06-01T12:00:00Z"\ntrainingEndTime = "2020-07-02T17:55:00Z"\ntimestampColumn = "timestamp"\ninputColumns = ["sensor_1", "sensor_2", "sensor_3"]\n\nestimator = (\n SimpleFitMultivariateAnomaly()\n .setSubscriptionKey(anomalyKey)\n .setLocation(location)\n .setStartTime(trainingStartTime)\n .setEndTime(trainingEndTime)\n .setIntermediateSaveDir(intermediateSaveDir)\n .setTimestampCol(timestampColumn)\n .setInputCols(inputColumns)\n .setSlidingWindow(200)\n)\n')),(0,r.kt)("p",null,"Now that we have created the ",(0,r.kt)("inlineCode",{parentName:"p"},"estimator"),", let's fit it to the data:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"model = estimator.fit(df)\n")),(0,r.kt)("p",null,"Once the training is done, we can now use the model for inference. The code in the next cell specifies the start and end times for the data we would like to detect the anomalies in. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'inferenceStartTime = "2020-07-02T18:00:00Z"\ninferenceEndTime = "2020-07-06T05:15:00Z"\n\nresult = (\n model.setStartTime(inferenceStartTime)\n .setEndTime(inferenceEndTime)\n .setOutputCol("results")\n .setErrorCol("errors")\n .setInputCols(inputColumns)\n .setTimestampCol(timestampColumn)\n .transform(df)\n)\n\nresult.show(5)\n')),(0,r.kt)("p",null,"When we called ",(0,r.kt)("inlineCode",{parentName:"p"},".show(5)")," in the previous cell, it showed us the first five rows in the dataframe. The results were all ",(0,r.kt)("inlineCode",{parentName:"p"},"null")," because they weren't inside the inference window."),(0,r.kt)("p",null,"To show the results only for the inferred data, lets select the columns we need. We can then order the rows in the dataframe by ascending order, and filter the result to only show the rows that are in the range of the inference window. In our case ",(0,r.kt)("inlineCode",{parentName:"p"},"inferenceEndTime")," is the same as the last row in the dataframe, so can ignore that. "),(0,r.kt)("p",null,"Finally, to be able to better plot the results, lets convert the Spark dataframe to a Pandas dataframe."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'rdf = (\n result.select(\n "timestamp",\n *inputColumns,\n "results.interpretation",\n "isAnomaly",\n "results.severity"\n )\n .orderBy("timestamp", ascending=True)\n .filter(col("timestamp") >= lit(inferenceStartTime))\n .toPandas()\n)\n\nrdf\n')),(0,r.kt)("p",null,"Let's now format the ",(0,r.kt)("inlineCode",{parentName:"p"},"contributors")," column that stores the contribution score from each sensor to the detected anomalies. The next cell formats this data, and splits the contribution score of each sensor into its own column."),(0,r.kt)("p",null,"For Spark3.3 and below versions, the output of select statements will be in the format of ",(0,r.kt)("inlineCode",{parentName:"p"},"List"),", so to format the data into dictionary and generate the values when interpretation is empty, please use the below parse method:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'def parse(x):\n if len(x) > 0:\n return dict([item[:2] for item in x])\n else:\n return {"sensor_1": 0, "sensor_2": 0, "sensor_3": 0}\n')),(0,r.kt)("p",null,"Staring with Spark3.4, the output of the select statement is already formatted as a ",(0,r.kt)("inlineCode",{parentName:"p"},"numpy.ndarry")," and no need to format the data again, so please use below parse method to generate the values when interpretation is empty:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'def parse(x):\n if len(x) == 0:\n return {"sensor_1": 0, "sensor_2": 0, "sensor_3": 0}\n\n\nrdf["contributors"] = rdf["interpretation"].apply(parse)\nrdf = pd.concat(\n [\n rdf.drop(["contributors"], axis=1),\n pd.json_normalize(rdf["contributors"]).rename(\n columns={\n "sensor_1": "series_1",\n "sensor_2": "series_2",\n "sensor_3": "series_3",\n }\n ),\n ],\n axis=1,\n)\nrdf\n')),(0,r.kt)("p",null,"Great! We now have the contribution scores of sensors 1, 2, and 3 in the ",(0,r.kt)("inlineCode",{parentName:"p"},"series_0"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"series_1"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"series_2")," columns respectively. "),(0,r.kt)("p",null,"Let's run the next cell to plot the results. The ",(0,r.kt)("inlineCode",{parentName:"p"},"minSeverity")," parameter in the first line specifies the minimum severity of the anomalies to be plotted. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'minSeverity = 0.1\n\n\n####### Main Figure #######\nplt.figure(figsize=(23, 8))\nplt.plot(\n rdf["timestamp"],\n rdf["sensor_1"],\n color="tab:orange",\n line,\n linewidth=2,\n label="sensor_1",\n)\nplt.plot(\n rdf["timestamp"],\n rdf["sensor_2"],\n color="tab:green",\n line,\n linewidth=2,\n label="sensor_2",\n)\nplt.plot(\n rdf["timestamp"],\n rdf["sensor_3"],\n color="tab:blue",\n line,\n linewidth=2,\n label="sensor_3",\n)\nplt.grid(axis="y")\nplt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)\nplt.legend()\n\nanoms = list(rdf["severity"] >= minSeverity)\n_, _, ymin, ymax = plt.axis()\nplt.vlines(np.where(anoms), ymin=ymin, ymax=ymax, color="r", alpha=0.8)\n\nplt.legend()\nplt.title(\n "A plot of the values from the three sensors with the detected anomalies highlighted in red."\n)\nplt.show()\n\n####### Severity Figure #######\nplt.figure(figsize=(23, 1))\nplt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)\nplt.plot(\n rdf["timestamp"],\n rdf["severity"],\n color="black",\n line,\n linewidth=2,\n label="Severity score",\n)\nplt.plot(\n rdf["timestamp"],\n [minSeverity] * len(rdf["severity"]),\n color="red",\n line,\n linewidth=1,\n label="minSeverity",\n)\nplt.grid(axis="y")\nplt.legend()\nplt.ylim([0, 1])\nplt.title("Severity of the detected anomalies")\nplt.show()\n\n####### Contributors Figure #######\nplt.figure(figsize=(23, 1))\nplt.tick_params(axis="x", which="both", bottom=False, labelbottom=False)\nplt.bar(\n rdf["timestamp"], rdf["series_1"], width=2, color="tab:orange", label="sensor_1"\n)\nplt.bar(\n rdf["timestamp"],\n rdf["series_2"],\n width=2,\n color="tab:green",\n label="sensor_2",\n bottom=rdf["series_1"],\n)\nplt.bar(\n rdf["timestamp"],\n rdf["series_3"],\n width=2,\n color="tab:blue",\n label="sensor_3",\n bottom=rdf["series_1"] + rdf["series_2"],\n)\nplt.grid(axis="y")\nplt.legend()\nplt.ylim([0, 1])\nplt.title("The contribution of each sensor to the detected anomaly")\nplt.show()\n')),(0,r.kt)("img",{width:"1300",src:"https://mmlspark.blob.core.windows.net/graphics/multivariate-anomaly-detection-plot.png"}),(0,r.kt)("p",null,"The plots show the raw data from the sensors (inside the inference window) in orange, green, and blue. The red vertical lines in the first figure show the detected anomalies that have a severity greater than or equal to ",(0,r.kt)("inlineCode",{parentName:"p"},"minSeverity"),". "),(0,r.kt)("p",null,"The second plot shows the severity score of all the detected anomalies, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"minSeverity")," threshold shown in the dotted red line."),(0,r.kt)("p",null,"Finally, the last plot shows the contribution of the data from each sensor to the detected anomalies. It helps us diagnose and understand the most likely cause of each anomaly."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.a0cfe39f.js b/assets/js/runtime~main.f01b5653.js similarity index 99% rename from assets/js/runtime~main.a0cfe39f.js rename to assets/js/runtime~main.f01b5653.js index 74d2f706e8..c6305e5a3e 100644 --- a/assets/js/runtime~main.a0cfe39f.js +++ b/assets/js/runtime~main.f01b5653.js @@ -1 +1 @@ -(()=>{"use strict";var e,b,d,f,a,c={},t={};function r(e){var b=t[e];if(void 0!==b)return b.exports;var d=t[e]={exports:{}};return c[e].call(d.exports,d,d.exports,r),d.exports}r.m=c,e=[],r.O=(b,d,f,a)=>{if(!d){var c=1/0;for(i=0;i=a)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,a0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[d,f,a]},r.n=e=>{var b=e&&e.__esModule?()=>e.default:()=>e;return r.d(b,{a:b}),b},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var a=Object.create(null);r.r(a);var c={};b=b||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~b.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((b=>c[b]=()=>e[b]));return c.default=()=>e,r.d(a,c),a},r.d=(e,b)=>{for(var d in b)r.o(b,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:b[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((b,d)=>(r.f[d](e,b),b)),[])),r.u=e=>"assets/js/"+({13:"5eddefdd",40:"a81cf8b0",53:"935f2afb",55:"403e642d",112:"8fd0c721",196:"9c279ae7",224:"77c259dd",226:"32fe2e34",271:"e8d66fc1",288:"69bb4b11",297:"fe2c893b",301:"627aefca",322:"b576c645",335:"22444eb9",344:"7aa7b8e0",360:"88b63415",367:"fece3c24",390:"001aea4c",403:"7b60d8e3",406:"6a07b55e",412:"9e5b788f",445:"f322d2da",464:"47bbce76",587:"b83021be",598:"e1269457",653:"97592aac",659:"610d430a",707:"ab9a8589",745:"069e3c4c",787:"20641120",804:"d989c707",829:"ee6cea3b",847:"73c2022c",852:"965ed185",912:"e12b4691",927:"a6191053",939:"0a65b9de",950:"1db1f785",978:"ac581902",1078:"80472ecc",1102:"20e0fe38",1103:"3ac37a06",1105:"6b9bdd6f",1153:"c95882d3",1172:"255635fc",1210:"e2ce57ed",1279:"fd3b6ea5",1286:"fd4bd09d",1317:"6a9ad78d",1333:"521f9727",1340:"e1b2b5f3",1391:"2137a7cd",1428:"b5375b6f",1442:"b75118f0",1478:"b4a95996",1535:"1a215693",1542:"fba72e87",1561:"2ece0fbe",1570:"4de42975",1580:"179d57fa",1663:"00056db7",1719:"b66e2100",1732:"e9aab890",1747:"85aed2f9",1755:"04fc65cc",1773:"3cbfbf75",1778:"a0d8a1a2",1787:"e4ba4487",1802:"513002de",1824:"c90c942b",1829:"f38a0cbd",1836:"645abc7d",1842:"d8d6ba90",1854:"ad10988d",1867:"391cb159",1871:"8590feaa",1895:"78aebd5d",1896:"9fa7e8eb",1913:"1d820955",1921:"8328d740",1933:"cb7c2a83",1944:"79114dfe",1970:"01a15f20",1977:"3b5de274",2007:"a34c49d0",2011:"e316de39",2045:"0e0ee9b2",2059:"b33598ac",2079:"5cfa133c",2106:"2c98ca3e",2141:"a877f9e5",2158:"f7580424",2185:"561bd03d",2195:"b72abe57",2217:"04ee4ab4",2283:"e3089280",2321:"325e22bd",2341:"aa5548ab",2377:"1789daeb",2398:"6c7ccb6d",2406:"c4d09a44",2408:"09bc1516",2412:"12d85ab5",2428:"31ee0fa3",2433:"345903d4",2447:"2e5f4263",2522:"6c4c8509",2535:"814f3328",2565:"c38c658c",2577:"8af72580",2599:"5f17911b",2630:"5962ef6e",2638:"e21a3367",2668:"3a1147b5",2675:"4ef2f7cf",2707:"49e6864b",2712:"6b40ec54",2730:"a3fd5a6d",2744:"f8597cb0",2750:"52880d18",2752:"9b020c4a",2787:"ed5c6c48",2789:"0606f1a5",2797:"e4e95844",2804:"12b89d4a",2805:"d175df5e",2815:"993c5022",2840:"4bea8531",2852:"423540f2",2880:"e1ed1e14",2912:"13f17286",2947:"42736d5f",2982:"3647ac9b",2994:"48cf7354",3017:"bf002efe",3036:"052105dd",3060:"75406112",3064:"da508cef",3089:"a6aa9e1f",3090:"86ed1ff2",3099:"95d9e891",3156:"1587ba1d",3195:"6a26e359",3196:"74091a62",3202:"6c61f93b",3234:"c0391845",3249:"5225b7e0",3251:"c34b1e36",3344:"995576e9",3358:"5c18deb5",3377:"318ccb43",3378:"fbb011bb",3393:"3e9a7422",3419:"8e32e44d",3426:"494501bd",3431:"1b3ab3b8",3443:"91e9cb67",3448:"ed6d544d",3482:"ef6ec597",3488:"336404dc",3544:"4e3910af",3554:"55203621",3572:"a8456d9f",3602:"af1e70b6",3608:"9e4087bc",3611:"6e159789",3631:"90f00051",3634:"ff428354",3669:"d707d2ed",3730:"034e6169",3781:"866b91a1",3796:"6a95f87e",3807:"f21c13c4",3814:"b41f295c",3838:"92ce4fd5",3871:"445012ce",3894:"35826f14",3941:"2bcda99e",3953:"60a2189a",3979:"48329b94",4026:"73cf52e8",4177:"d41234a3",4178:"70fe7dd7",4193:"1ad91055",4195:"c4f5d8e4",4202:"c2492d56",4204:"ea2d2bcc",4207:"f14633e7",4233:"b7c6295c",4273:"1b7af47d",4275:"792eae7e",4330:"d8b3ac6a",4334:"00ab2cda",4353:"1f31a275",4395:"0e2bf69e",4397:"3e1e84da",4422:"c5c95e45",4482:"0e3f998d",4484:"1a3608a9",4503:"1e0d2d3b",4504:"99e5ffa1",4508:"e464d112",4528:"cb5f1a06",4535:"1842239f",4548:"53a5cb1e",4575:"d25cde70",4579:"94d743d6",4594:"b962e007",4597:"d0cb74df",4603:"f7bfff73",4627:"e579bad6",4654:"e887b273",4713:"d355047f",4744:"1014102e",4756:"4cee39d7",4772:"4997ef4f",4797:"0d432c84",4800:"c065fcb9",4880:"f8aab3ca",4916:"82878c84",4927:"fa2e2688",4929:"cd8e97a5",4954:"f7a32432",4963:"6f479459",4979:"e8b9c2c7",4992:"37ab9beb",4994:"109f6864",5e3:"cf57716c",5024:"0daa5b3f",5040:"767a7177",5043:"8eb438b4",5049:"f85db098",5056:"c3b1d949",5064:"e9b75d67",5088:"7a1d9beb",5095:"90e4432b",5116:"10e13725",5122:"c2e40c34",5124:"061b38c5",5149:"603706f6",5253:"b7787e72",5254:"33b3776b",5276:"76b137bf",5287:"b8963dc0",5305:"ca0a1bad",5328:"54287b47",5343:"1abf1e18",5370:"7649ec47",5378:"fc338b02",5433:"ffb7f88a",5437:"44ff0d07",5487:"3a4f9d93",5488:"cbc3190d",5511:"a9330763",5517:"22f921cc",5521:"283b8f99",5538:"bece3771",5566:"ebf648dd",5579:"dd29718b",5584:"bd1bcb2c",5586:"e7250a93",5602:"57ef17c5",5648:"ee83122d",5658:"c23b5e26",5702:"41ee0cff",5717:"d0c5e4fa",5729:"56d039a1",5750:"0637d1e7",5752:"c3c516ff",5768:"a34b09d4",5789:"1155dc6f",5800:"18c7d2a3",5839:"07f6b90a",5847:"4e044b4e",5913:"a608660b",5939:"0453ae68",5942:"900b935c",5974:"8cb11643",5990:"38d6824e",6005:"90742975",6021:"295a8e78",6030:"0f113696",6103:"ccc49370",6135:"96cf5ff0",6167:"74659d33",6184:"4130db01",6204:"50af03e4",6224:"6c7d288d",6248:"7bf16cc6",6269:"76d23901",6285:"b0e28723",6286:"bef0d2d3",6300:"d252041b",6338:"0fb98d33",6350:"1e14124f",6373:"cff2e56e",6413:"4bbbdfcf",6454:"34f00221",6515:"9cb6fa7c",6551:"3c1f4383",6555:"0fa36e32",6559:"98258c5e",6572:"589adaf2",6613:"b4898d44",6633:"707d2a35",6673:"e5c4ef01",6676:"03d0d544",6685:"c2e57a1b",6698:"aba932dd",6704:"67e06a8b",6746:"5ef28062",6808:"8462374b",6828:"df01388f",6833:"5b779334",6843:"62983deb",6856:"b80b493a",6945:"296054a7",6958:"1e57c92a",6975:"51dbb02f",7001:"83586bff",7069:"40b49758",7168:"d9837698",7201:"567cd2fd",7218:"ba9c0924",7231:"9d095dba",7234:"268b7b40",7258:"e2689dfc",7287:"99f8fee5",7295:"6eddee4c",7320:"c40984d1",7381:"4db82253",7392:"ef77ef39",7394:"31bb7274",7452:"93ba15e0",7454:"c5775233",7486:"a406e231",7491:"d3093636",7509:"9530a2cf",7538:"ad139e3c",7572:"a07d09c1",7597:"66fcb786",7610:"077ca2ec",7655:"b1706689",7684:"b38eec89",7689:"39122aab",7697:"39582d99",7706:"db170a23",7721:"0e16e9ea",7782:"b328a361",7813:"35bdc661",7820:"dd3f9ada",7870:"ed316aed",7887:"be95fd8f",7918:"17896441",7920:"1a4e3797",7924:"15a59c33",7925:"9c5088a2",7930:"d39aa6d3",7969:"5887dc62",7988:"4e432063",7991:"dc1e40d7",8003:"5066efb2",8006:"9da9112f",8040:"e24ee294",8050:"d3c9b0d7",8057:"d9e5e528",8078:"6f8cd013",8092:"4d31bfb3",8146:"d13e532e",8168:"e7bd83ca",8197:"bc4bf151",8261:"012c1c0f",8314:"104bf0a6",8373:"445a1b28",8377:"70b306ba",8399:"327be84b",8443:"ceeda143",8462:"bc6a9944",8491:"59ef8022",8524:"0349e4f0",8526:"3201258e",8549:"c991f47b",8559:"dac82c00",8579:"0b416bde",8583:"6bdbf6b8",8585:"18c9c2ba",8602:"25fb872c",8634:"f1b2dc7f",8696:"b066233f",8738:"b940e0b5",8746:"d620a661",8749:"2d527871",8755:"990f07de",8759:"16d05917",8781:"5e7c3303",8807:"13246fd5",8809:"fd748117",8817:"88e44e99",8825:"c73cfc52",8828:"514f485e",8846:"3bed3e2f",8859:"b7802ae1",8861:"7c2e1100",8933:"11c317cb",8955:"6e71bda3",8957:"2d5b0e6a",8966:"41f327fc",8984:"d535b358",9006:"9783ff24",9042:"c14fdd92",9043:"00353f68",9079:"efc1978d",9088:"0a954229",9119:"2406587d",9139:"ae89cd3b",9159:"57e687e8",9161:"69dc6d0a",9196:"efbc69e1",9220:"a2b5e5df",9226:"8181e18a",9242:"bb7a48da",9262:"120352d6",9283:"7c007ec6",9307:"0d6d64cd",9314:"232d09b0",9328:"a0434473",9362:"34ff21b6",9374:"58b8f176",9407:"deef0af8",9461:"6ff7775f",9463:"a19ce767",9465:"548964ce",9483:"15ea8379",9484:"71042800",9514:"1be78505",9535:"905ce8b5",9540:"4f1ca6a9",9559:"3fb29942",9596:"4e105cba",9601:"fc47fc53",9603:"2b30bc14",9696:"166d99f5",9767:"c413b43a",9775:"b2be3901",9781:"dea122e2",9806:"b9f125cc",9864:"1dc2f362",9966:"d1246f49",9970:"093b81f4"}[e]||e)+"."+{13:"c56bd14f",40:"80ba3b3a",53:"a7a22ebc",55:"99e2a2d4",112:"77fd4edb",196:"18afb55b",224:"dbfc0f69",226:"7c60e348",271:"44be0898",288:"7489cc5c",297:"156edfea",301:"1f16b76c",322:"46ce6b62",335:"6218942f",344:"29e6982a",360:"1c41de35",367:"c14770b5",390:"a66af9a2",403:"e59b80da",406:"dee8c97d",412:"07dc78db",445:"34c16520",464:"9bf22da7",587:"25e7c11f",598:"9cd09a81",653:"fd065758",659:"2596f402",707:"00828ac4",745:"f3f89bc5",787:"4d89b7a8",804:"b95e1b94",829:"1bd99f73",847:"88809c2f",852:"97af0ce4",912:"875a987c",927:"3b687d74",939:"dd4545ed",950:"7796d594",978:"993e6251",1078:"42c381bc",1102:"0fc511ee",1103:"41f78361",1105:"9b8a1022",1153:"379aa98a",1172:"105f1ab1",1210:"ff2a0bc7",1279:"8a19e2df",1286:"6ad5a370",1317:"e2697788",1333:"64b12178",1340:"84c2a9ad",1391:"877bd6dd",1428:"1ad4484a",1442:"52a1c5ec",1478:"4747e3cb",1535:"e877fa9b",1542:"abd474da",1561:"befdbef4",1570:"7785d153",1580:"4ea7c764",1663:"de1717c2",1719:"3c316633",1732:"a2f6c367",1747:"68bde11d",1755:"61d141a8",1773:"3a54b67d",1778:"f8e0308c",1787:"00081b8c",1802:"f69b2e62",1824:"1e1b5f34",1829:"b820bdc9",1836:"0d2bf26f",1842:"b9129f4a",1854:"ce626804",1867:"803e4dab",1871:"17a511c3",1895:"270c3d35",1896:"99652826",1913:"68528eb1",1921:"1a58d031",1933:"0db5e7ea",1944:"5b82a33c",1970:"efd6c8db",1977:"0809e327",2007:"e6878070",2011:"f9c0d81a",2045:"46e2480c",2059:"682a991d",2079:"cc26011a",2106:"7cd5dbe5",2141:"e5e48bbe",2158:"b59bbbed",2185:"10b30c7d",2195:"a42749a0",2217:"1cf10c8d",2283:"fa2a5171",2321:"366d457f",2341:"54e72387",2377:"59350ae0",2398:"f24282cb",2406:"87d3423f",2408:"f68bf61a",2412:"6064a050",2428:"7362ed65",2433:"cf7ffc92",2447:"18936ddd",2522:"2f2a7121",2535:"d845b63b",2565:"9d4a4c5f",2577:"919f0fb4",2599:"095b7e70",2630:"974eba52",2638:"99ac7d58",2668:"af956475",2675:"d15e8bc6",2707:"e4a33da3",2712:"f1aa85a0",2730:"c1beabd2",2744:"b0dd7c79",2750:"a1432bf3",2752:"ad9d0a29",2787:"e4035b94",2789:"3be2bd8d",2797:"ec2ce8dc",2804:"0555f3f3",2805:"d70b02d3",2815:"7d6ef446",2840:"d97ae584",2852:"c684ddd2",2880:"75067cf9",2912:"825821cd",2947:"4088d099",2982:"38e917ff",2994:"625af550",3017:"8859c962",3036:"1365de20",3060:"37090412",3064:"11534929",3089:"5025ae88",3090:"f43f8510",3099:"8ca7d495",3140:"573485ef",3156:"fb308cee",3195:"24aa8d50",3196:"cafd450f",3202:"8abee68b",3234:"cc5ee2f1",3249:"cba81cc7",3251:"94dd5294",3344:"e3763bd8",3358:"6329198a",3377:"ae294f76",3378:"45e6b532",3393:"b197a75e",3419:"b43d60b6",3426:"dbab4b4c",3431:"9e9cf983",3443:"7178a795",3448:"c58aea68",3482:"9379e391",3488:"52393077",3544:"ff880f8a",3554:"5366c665",3572:"12df60c7",3602:"3bb79615",3608:"0c84fcbc",3611:"84cee5cb",3631:"e8277928",3634:"cf6f1182",3669:"bcc77f3b",3730:"a048bdd3",3781:"92a4dfce",3796:"fe33517e",3807:"cc667f14",3814:"a51776da",3838:"c16491dc",3871:"46e61b3d",3894:"7e1e8993",3941:"c4b67e8f",3953:"aa3ad659",3969:"0c46002a",3979:"7156466c",4026:"43a60320",4177:"34ee98f8",4178:"f7404136",4193:"0c39c6fd",4195:"07c58bdf",4202:"511a03f2",4204:"2942d62d",4207:"8fdf5c23",4233:"7aadbc69",4273:"0c4762cc",4275:"83319480",4330:"adb1ad89",4334:"24c80d6e",4353:"90dc8952",4395:"d5298601",4397:"6d0564b4",4422:"7a35ddd7",4482:"97a505e3",4484:"2b566bd7",4503:"78e09ada",4504:"93c0bbda",4508:"1d8c0769",4528:"f07a8cc2",4535:"48238b2c",4548:"959a09cf",4572:"1cea9379",4575:"2331063e",4579:"d52ccf78",4594:"e5a526cd",4597:"bcddacd7",4603:"203e83c5",4627:"7ac7ba1c",4654:"129f1f6d",4713:"3bfaccbc",4744:"5aa5d55a",4756:"4bfcfb3d",4772:"2a5b959d",4797:"9324de8a",4800:"f4fea7cb",4880:"f730115b",4916:"13026b5f",4927:"35564623",4929:"986157d8",4954:"f6c87999",4963:"5aa1cf9c",4979:"44a1e24f",4992:"6c8f5bb8",4994:"39ed3c87",5e3:"c4a07252",5024:"6fc18f7a",5040:"0baeb5ae",5043:"a6dc9166",5049:"4fcd6d8f",5056:"43d0d76b",5064:"f8cbe2be",5088:"313fb6da",5095:"01aaf7bf",5116:"a00bb8ec",5122:"ae909784",5124:"f8301fd3",5149:"766a2643",5253:"f092ec7e",5254:"d9a92894",5276:"778473f4",5287:"b75edc26",5305:"1406835a",5328:"fad13437",5343:"45dad1b8",5370:"2c40c5d0",5378:"be4cc3ff",5433:"1a2e4b4b",5437:"cfc96abc",5487:"dde24bd7",5488:"3ce76bac",5511:"1195c373",5517:"5224615a",5521:"db9949ee",5538:"27d7d8f1",5566:"0bc6d5d1",5579:"e2a04d64",5584:"78440f11",5586:"b9b8276f",5602:"0c97a2dd",5648:"edf0d3d5",5658:"65b67101",5702:"2fc757da",5717:"9f1d9680",5729:"41b4bc95",5750:"c8f4a7b9",5752:"ddda40a1",5768:"b3e2a888",5789:"294730b0",5800:"d8c7210f",5839:"cff9cf55",5847:"eab9c664",5913:"d5342b60",5939:"18b3af99",5942:"44e98f5d",5974:"1e9b402e",5990:"6c15666e",6005:"138ec2d6",6021:"46569719",6030:"554ac448",6048:"397ca100",6103:"57308517",6135:"f8d69848",6167:"0f8eeadb",6184:"4e6498fa",6204:"8ec25f8c",6224:"72484c57",6248:"a88bd489",6269:"4db19ac9",6285:"16bd53ce",6286:"c025269d",6300:"7e49ffbc",6338:"3038ee3c",6350:"8f741f5b",6373:"e5f83fce",6413:"406cd688",6454:"86177dce",6515:"b3f6a8cb",6551:"7825e242",6555:"53ee1803",6559:"b963415c",6572:"04bac45c",6613:"a3b643fa",6633:"eeed6b75",6673:"340cd835",6676:"f7d82b4f",6685:"3e3a1682",6698:"fffc4466",6704:"5891f9ee",6746:"d7e6d62f",6780:"69ba91fe",6808:"68a92c8a",6828:"b73c731a",6833:"22b0f475",6843:"305c6831",6856:"33d1ebaa",6945:"e3549e7d",6958:"57209de7",6975:"8c30473b",7001:"2e923785",7069:"fb0347b8",7168:"f3f1d467",7201:"76ce9723",7218:"2ee7e500",7231:"e54a8640",7234:"8b19b6e4",7258:"025d9bf9",7287:"55a07bf6",7295:"04cfd733",7320:"a414b666",7381:"902105ee",7392:"7891e272",7394:"317f4677",7452:"636c68a7",7454:"e7cd85ee",7486:"01858d55",7491:"13d3af74",7509:"e0320a5b",7538:"c177a765",7572:"f9ffc22f",7597:"56bf8c49",7610:"1a33b9fa",7655:"5406e673",7684:"a710f19b",7689:"8c50faf9",7697:"5a3bbfc9",7706:"6ecb6923",7721:"64644a25",7780:"fed0dc4a",7782:"08f207ef",7813:"ceb49b81",7820:"f8a1916f",7853:"f7c9cf19",7870:"96b84421",7887:"6de427c8",7918:"69f82ad5",7920:"4d89dfd2",7924:"05731ce3",7925:"45be218c",7930:"8695a34c",7969:"1628620a",7988:"663db135",7991:"6eac5ba0",8003:"665e502e",8006:"696da333",8040:"2f757763",8050:"e2becdd2",8057:"76d8be1b",8078:"23c9eafd",8092:"a30ffbf5",8146:"e8787811",8168:"329ff665",8197:"efdadb81",8261:"de10c8e0",8314:"6a5bd80a",8373:"db4e144c",8377:"86420f34",8399:"76ff188c",8443:"48df1819",8462:"f997e4a9",8491:"3c611f03",8524:"589329bf",8526:"bd96832f",8549:"085c005a",8559:"426496fe",8579:"77bc4755",8583:"4df2aacc",8585:"85e6e8c3",8602:"e519d4ef",8634:"c1e69bb3",8696:"5393b397",8738:"4a0af097",8746:"184ac418",8749:"fd6620c4",8755:"2ccd0227",8759:"5997002c",8781:"c85e7225",8807:"7e1acab2",8809:"4abae402",8817:"ad42d95b",8825:"7eeb44c5",8828:"2cae2dd4",8846:"ccc270ab",8859:"b0deb879",8861:"6cc4e59e",8894:"13f45421",8933:"27407246",8955:"fa3af056",8957:"bcc846af",8966:"40aeb55b",8984:"7f894256",9006:"1bfc320a",9042:"398a4650",9043:"8d458274",9079:"16ec5627",9088:"a0526771",9119:"ea7de60a",9139:"d9a47152",9159:"de31033e",9161:"fb1547f0",9196:"952ad61a",9220:"18210be1",9226:"86e98532",9242:"dfd94516",9262:"9b13f675",9283:"35595d17",9307:"f805389a",9314:"efe1e16b",9328:"4b59d197",9362:"056be40b",9374:"0a1e3d6d",9407:"7bdc494d",9461:"1f67c9aa",9463:"92f78145",9465:"6425f593",9483:"812834c9",9484:"f7572360",9514:"665c2315",9535:"52fdaab0",9540:"fd3585d8",9559:"3de21ce5",9596:"c4d60a83",9601:"57d22ddf",9603:"a28f577d",9696:"9e0cb281",9767:"d8eb6d80",9775:"42ced16f",9781:"70411c61",9806:"54b742b6",9864:"d4f95337",9966:"c829d3e1",9970:"91aac8bb"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,b)=>Object.prototype.hasOwnProperty.call(e,b),f={},a="synapseml:",r.l=(e,b,d,c)=>{if(f[e])f[e].push(b);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var a=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),a&&a.forEach((e=>e(d))),b)return b(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/SynapseML/",r.gca=function(e){return e={17896441:"7918",20641120:"787",55203621:"3554",71042800:"9484",75406112:"3060",90742975:"6005","5eddefdd":"13",a81cf8b0:"40","935f2afb":"53","403e642d":"55","8fd0c721":"112","9c279ae7":"196","77c259dd":"224","32fe2e34":"226",e8d66fc1:"271","69bb4b11":"288",fe2c893b:"297","627aefca":"301",b576c645:"322","22444eb9":"335","7aa7b8e0":"344","88b63415":"360",fece3c24:"367","001aea4c":"390","7b60d8e3":"403","6a07b55e":"406","9e5b788f":"412",f322d2da:"445","47bbce76":"464",b83021be:"587",e1269457:"598","97592aac":"653","610d430a":"659",ab9a8589:"707","069e3c4c":"745",d989c707:"804",ee6cea3b:"829","73c2022c":"847","965ed185":"852",e12b4691:"912",a6191053:"927","0a65b9de":"939","1db1f785":"950",ac581902:"978","80472ecc":"1078","20e0fe38":"1102","3ac37a06":"1103","6b9bdd6f":"1105",c95882d3:"1153","255635fc":"1172",e2ce57ed:"1210",fd3b6ea5:"1279",fd4bd09d:"1286","6a9ad78d":"1317","521f9727":"1333",e1b2b5f3:"1340","2137a7cd":"1391",b5375b6f:"1428",b75118f0:"1442",b4a95996:"1478","1a215693":"1535",fba72e87:"1542","2ece0fbe":"1561","4de42975":"1570","179d57fa":"1580","00056db7":"1663",b66e2100:"1719",e9aab890:"1732","85aed2f9":"1747","04fc65cc":"1755","3cbfbf75":"1773",a0d8a1a2:"1778",e4ba4487:"1787","513002de":"1802",c90c942b:"1824",f38a0cbd:"1829","645abc7d":"1836",d8d6ba90:"1842",ad10988d:"1854","391cb159":"1867","8590feaa":"1871","78aebd5d":"1895","9fa7e8eb":"1896","1d820955":"1913","8328d740":"1921",cb7c2a83:"1933","79114dfe":"1944","01a15f20":"1970","3b5de274":"1977",a34c49d0:"2007",e316de39:"2011","0e0ee9b2":"2045",b33598ac:"2059","5cfa133c":"2079","2c98ca3e":"2106",a877f9e5:"2141",f7580424:"2158","561bd03d":"2185",b72abe57:"2195","04ee4ab4":"2217",e3089280:"2283","325e22bd":"2321",aa5548ab:"2341","1789daeb":"2377","6c7ccb6d":"2398",c4d09a44:"2406","09bc1516":"2408","12d85ab5":"2412","31ee0fa3":"2428","345903d4":"2433","2e5f4263":"2447","6c4c8509":"2522","814f3328":"2535",c38c658c:"2565","8af72580":"2577","5f17911b":"2599","5962ef6e":"2630",e21a3367:"2638","3a1147b5":"2668","4ef2f7cf":"2675","49e6864b":"2707","6b40ec54":"2712",a3fd5a6d:"2730",f8597cb0:"2744","52880d18":"2750","9b020c4a":"2752",ed5c6c48:"2787","0606f1a5":"2789",e4e95844:"2797","12b89d4a":"2804",d175df5e:"2805","993c5022":"2815","4bea8531":"2840","423540f2":"2852",e1ed1e14:"2880","13f17286":"2912","42736d5f":"2947","3647ac9b":"2982","48cf7354":"2994",bf002efe:"3017","052105dd":"3036",da508cef:"3064",a6aa9e1f:"3089","86ed1ff2":"3090","95d9e891":"3099","1587ba1d":"3156","6a26e359":"3195","74091a62":"3196","6c61f93b":"3202",c0391845:"3234","5225b7e0":"3249",c34b1e36:"3251","995576e9":"3344","5c18deb5":"3358","318ccb43":"3377",fbb011bb:"3378","3e9a7422":"3393","8e32e44d":"3419","494501bd":"3426","1b3ab3b8":"3431","91e9cb67":"3443",ed6d544d:"3448",ef6ec597:"3482","336404dc":"3488","4e3910af":"3544",a8456d9f:"3572",af1e70b6:"3602","9e4087bc":"3608","6e159789":"3611","90f00051":"3631",ff428354:"3634",d707d2ed:"3669","034e6169":"3730","866b91a1":"3781","6a95f87e":"3796",f21c13c4:"3807",b41f295c:"3814","92ce4fd5":"3838","445012ce":"3871","35826f14":"3894","2bcda99e":"3941","60a2189a":"3953","48329b94":"3979","73cf52e8":"4026",d41234a3:"4177","70fe7dd7":"4178","1ad91055":"4193",c4f5d8e4:"4195",c2492d56:"4202",ea2d2bcc:"4204",f14633e7:"4207",b7c6295c:"4233","1b7af47d":"4273","792eae7e":"4275",d8b3ac6a:"4330","00ab2cda":"4334","1f31a275":"4353","0e2bf69e":"4395","3e1e84da":"4397",c5c95e45:"4422","0e3f998d":"4482","1a3608a9":"4484","1e0d2d3b":"4503","99e5ffa1":"4504",e464d112:"4508",cb5f1a06:"4528","1842239f":"4535","53a5cb1e":"4548",d25cde70:"4575","94d743d6":"4579",b962e007:"4594",d0cb74df:"4597",f7bfff73:"4603",e579bad6:"4627",e887b273:"4654",d355047f:"4713","1014102e":"4744","4cee39d7":"4756","4997ef4f":"4772","0d432c84":"4797",c065fcb9:"4800",f8aab3ca:"4880","82878c84":"4916",fa2e2688:"4927",cd8e97a5:"4929",f7a32432:"4954","6f479459":"4963",e8b9c2c7:"4979","37ab9beb":"4992","109f6864":"4994",cf57716c:"5000","0daa5b3f":"5024","767a7177":"5040","8eb438b4":"5043",f85db098:"5049",c3b1d949:"5056",e9b75d67:"5064","7a1d9beb":"5088","90e4432b":"5095","10e13725":"5116",c2e40c34:"5122","061b38c5":"5124","603706f6":"5149",b7787e72:"5253","33b3776b":"5254","76b137bf":"5276",b8963dc0:"5287",ca0a1bad:"5305","54287b47":"5328","1abf1e18":"5343","7649ec47":"5370",fc338b02:"5378",ffb7f88a:"5433","44ff0d07":"5437","3a4f9d93":"5487",cbc3190d:"5488",a9330763:"5511","22f921cc":"5517","283b8f99":"5521",bece3771:"5538",ebf648dd:"5566",dd29718b:"5579",bd1bcb2c:"5584",e7250a93:"5586","57ef17c5":"5602",ee83122d:"5648",c23b5e26:"5658","41ee0cff":"5702",d0c5e4fa:"5717","56d039a1":"5729","0637d1e7":"5750",c3c516ff:"5752",a34b09d4:"5768","1155dc6f":"5789","18c7d2a3":"5800","07f6b90a":"5839","4e044b4e":"5847",a608660b:"5913","0453ae68":"5939","900b935c":"5942","8cb11643":"5974","38d6824e":"5990","295a8e78":"6021","0f113696":"6030",ccc49370:"6103","96cf5ff0":"6135","74659d33":"6167","4130db01":"6184","50af03e4":"6204","6c7d288d":"6224","7bf16cc6":"6248","76d23901":"6269",b0e28723:"6285",bef0d2d3:"6286",d252041b:"6300","0fb98d33":"6338","1e14124f":"6350",cff2e56e:"6373","4bbbdfcf":"6413","34f00221":"6454","9cb6fa7c":"6515","3c1f4383":"6551","0fa36e32":"6555","98258c5e":"6559","589adaf2":"6572",b4898d44:"6613","707d2a35":"6633",e5c4ef01:"6673","03d0d544":"6676",c2e57a1b:"6685",aba932dd:"6698","67e06a8b":"6704","5ef28062":"6746","8462374b":"6808",df01388f:"6828","5b779334":"6833","62983deb":"6843",b80b493a:"6856","296054a7":"6945","1e57c92a":"6958","51dbb02f":"6975","83586bff":"7001","40b49758":"7069",d9837698:"7168","567cd2fd":"7201",ba9c0924:"7218","9d095dba":"7231","268b7b40":"7234",e2689dfc:"7258","99f8fee5":"7287","6eddee4c":"7295",c40984d1:"7320","4db82253":"7381",ef77ef39:"7392","31bb7274":"7394","93ba15e0":"7452",c5775233:"7454",a406e231:"7486",d3093636:"7491","9530a2cf":"7509",ad139e3c:"7538",a07d09c1:"7572","66fcb786":"7597","077ca2ec":"7610",b1706689:"7655",b38eec89:"7684","39122aab":"7689","39582d99":"7697",db170a23:"7706","0e16e9ea":"7721",b328a361:"7782","35bdc661":"7813",dd3f9ada:"7820",ed316aed:"7870",be95fd8f:"7887","1a4e3797":"7920","15a59c33":"7924","9c5088a2":"7925",d39aa6d3:"7930","5887dc62":"7969","4e432063":"7988",dc1e40d7:"7991","5066efb2":"8003","9da9112f":"8006",e24ee294:"8040",d3c9b0d7:"8050",d9e5e528:"8057","6f8cd013":"8078","4d31bfb3":"8092",d13e532e:"8146",e7bd83ca:"8168",bc4bf151:"8197","012c1c0f":"8261","104bf0a6":"8314","445a1b28":"8373","70b306ba":"8377","327be84b":"8399",ceeda143:"8443",bc6a9944:"8462","59ef8022":"8491","0349e4f0":"8524","3201258e":"8526",c991f47b:"8549",dac82c00:"8559","0b416bde":"8579","6bdbf6b8":"8583","18c9c2ba":"8585","25fb872c":"8602",f1b2dc7f:"8634",b066233f:"8696",b940e0b5:"8738",d620a661:"8746","2d527871":"8749","990f07de":"8755","16d05917":"8759","5e7c3303":"8781","13246fd5":"8807",fd748117:"8809","88e44e99":"8817",c73cfc52:"8825","514f485e":"8828","3bed3e2f":"8846",b7802ae1:"8859","7c2e1100":"8861","11c317cb":"8933","6e71bda3":"8955","2d5b0e6a":"8957","41f327fc":"8966",d535b358:"8984","9783ff24":"9006",c14fdd92:"9042","00353f68":"9043",efc1978d:"9079","0a954229":"9088","2406587d":"9119",ae89cd3b:"9139","57e687e8":"9159","69dc6d0a":"9161",efbc69e1:"9196",a2b5e5df:"9220","8181e18a":"9226",bb7a48da:"9242","120352d6":"9262","7c007ec6":"9283","0d6d64cd":"9307","232d09b0":"9314",a0434473:"9328","34ff21b6":"9362","58b8f176":"9374",deef0af8:"9407","6ff7775f":"9461",a19ce767:"9463","548964ce":"9465","15ea8379":"9483","1be78505":"9514","905ce8b5":"9535","4f1ca6a9":"9540","3fb29942":"9559","4e105cba":"9596",fc47fc53:"9601","2b30bc14":"9603","166d99f5":"9696",c413b43a:"9767",b2be3901:"9775",dea122e2:"9781",b9f125cc:"9806","1dc2f362":"9864",d1246f49:"9966","093b81f4":"9970"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(b,d)=>{var f=r.o(e,b)?e[b]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1303|532)$/.test(b))e[b]=0;else{var a=new Promise(((d,a)=>f=e[b]=[d,a]));d.push(f[2]=a);var c=r.p+r.u(b),t=new Error;r.l(c,(d=>{if(r.o(e,b)&&(0!==(f=e[b])&&(e[b]=void 0),f)){var a=d&&("load"===d.type?"missing":d.type),c=d&&d.target&&d.target.src;t.message="Loading chunk "+b+" failed.\n("+a+": "+c+")",t.name="ChunkLoadError",t.type=a,t.request=c,f[1](t)}}),"chunk-"+b,b)}},r.O.j=b=>0===e[b];var b=(b,d)=>{var f,a,c=d[0],t=d[1],o=d[2],n=0;if(c.some((b=>0!==e[b]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(b&&b(d);n{"use strict";var e,b,d,f,a,c={},t={};function r(e){var b=t[e];if(void 0!==b)return b.exports;var d=t[e]={exports:{}};return c[e].call(d.exports,d,d.exports,r),d.exports}r.m=c,e=[],r.O=(b,d,f,a)=>{if(!d){var c=1/0;for(i=0;i=a)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,a0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[d,f,a]},r.n=e=>{var b=e&&e.__esModule?()=>e.default:()=>e;return r.d(b,{a:b}),b},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var a=Object.create(null);r.r(a);var c={};b=b||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~b.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((b=>c[b]=()=>e[b]));return c.default=()=>e,r.d(a,c),a},r.d=(e,b)=>{for(var d in b)r.o(b,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:b[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((b,d)=>(r.f[d](e,b),b)),[])),r.u=e=>"assets/js/"+({13:"5eddefdd",40:"a81cf8b0",53:"935f2afb",55:"403e642d",112:"8fd0c721",196:"9c279ae7",224:"77c259dd",226:"32fe2e34",271:"e8d66fc1",288:"69bb4b11",297:"fe2c893b",301:"627aefca",322:"b576c645",335:"22444eb9",344:"7aa7b8e0",360:"88b63415",367:"fece3c24",390:"001aea4c",403:"7b60d8e3",406:"6a07b55e",412:"9e5b788f",445:"f322d2da",464:"47bbce76",587:"b83021be",598:"e1269457",653:"97592aac",659:"610d430a",707:"ab9a8589",745:"069e3c4c",787:"20641120",804:"d989c707",829:"ee6cea3b",847:"73c2022c",852:"965ed185",912:"e12b4691",927:"a6191053",939:"0a65b9de",950:"1db1f785",978:"ac581902",1078:"80472ecc",1102:"20e0fe38",1103:"3ac37a06",1105:"6b9bdd6f",1153:"c95882d3",1172:"255635fc",1210:"e2ce57ed",1279:"fd3b6ea5",1286:"fd4bd09d",1317:"6a9ad78d",1333:"521f9727",1340:"e1b2b5f3",1391:"2137a7cd",1428:"b5375b6f",1442:"b75118f0",1478:"b4a95996",1535:"1a215693",1542:"fba72e87",1561:"2ece0fbe",1570:"4de42975",1580:"179d57fa",1663:"00056db7",1719:"b66e2100",1732:"e9aab890",1747:"85aed2f9",1755:"04fc65cc",1773:"3cbfbf75",1778:"a0d8a1a2",1787:"e4ba4487",1802:"513002de",1824:"c90c942b",1829:"f38a0cbd",1836:"645abc7d",1842:"d8d6ba90",1854:"ad10988d",1867:"391cb159",1871:"8590feaa",1895:"78aebd5d",1896:"9fa7e8eb",1913:"1d820955",1921:"8328d740",1933:"cb7c2a83",1944:"79114dfe",1970:"01a15f20",1977:"3b5de274",2007:"a34c49d0",2011:"e316de39",2045:"0e0ee9b2",2059:"b33598ac",2079:"5cfa133c",2106:"2c98ca3e",2141:"a877f9e5",2158:"f7580424",2185:"561bd03d",2195:"b72abe57",2217:"04ee4ab4",2283:"e3089280",2321:"325e22bd",2341:"aa5548ab",2377:"1789daeb",2398:"6c7ccb6d",2406:"c4d09a44",2408:"09bc1516",2412:"12d85ab5",2428:"31ee0fa3",2433:"345903d4",2447:"2e5f4263",2522:"6c4c8509",2535:"814f3328",2565:"c38c658c",2577:"8af72580",2599:"5f17911b",2630:"5962ef6e",2638:"e21a3367",2668:"3a1147b5",2675:"4ef2f7cf",2707:"49e6864b",2712:"6b40ec54",2730:"a3fd5a6d",2744:"f8597cb0",2750:"52880d18",2752:"9b020c4a",2787:"ed5c6c48",2789:"0606f1a5",2797:"e4e95844",2804:"12b89d4a",2805:"d175df5e",2815:"993c5022",2840:"4bea8531",2852:"423540f2",2880:"e1ed1e14",2912:"13f17286",2947:"42736d5f",2982:"3647ac9b",2994:"48cf7354",3017:"bf002efe",3036:"052105dd",3060:"75406112",3064:"da508cef",3089:"a6aa9e1f",3090:"86ed1ff2",3099:"95d9e891",3156:"1587ba1d",3195:"6a26e359",3196:"74091a62",3202:"6c61f93b",3234:"c0391845",3249:"5225b7e0",3251:"c34b1e36",3344:"995576e9",3358:"5c18deb5",3377:"318ccb43",3378:"fbb011bb",3393:"3e9a7422",3419:"8e32e44d",3426:"494501bd",3431:"1b3ab3b8",3443:"91e9cb67",3448:"ed6d544d",3482:"ef6ec597",3488:"336404dc",3544:"4e3910af",3554:"55203621",3572:"a8456d9f",3602:"af1e70b6",3608:"9e4087bc",3611:"6e159789",3631:"90f00051",3634:"ff428354",3669:"d707d2ed",3730:"034e6169",3781:"866b91a1",3796:"6a95f87e",3807:"f21c13c4",3814:"b41f295c",3838:"92ce4fd5",3871:"445012ce",3894:"35826f14",3941:"2bcda99e",3953:"60a2189a",3979:"48329b94",4026:"73cf52e8",4177:"d41234a3",4178:"70fe7dd7",4193:"1ad91055",4195:"c4f5d8e4",4202:"c2492d56",4204:"ea2d2bcc",4207:"f14633e7",4233:"b7c6295c",4273:"1b7af47d",4275:"792eae7e",4330:"d8b3ac6a",4334:"00ab2cda",4353:"1f31a275",4395:"0e2bf69e",4397:"3e1e84da",4422:"c5c95e45",4482:"0e3f998d",4484:"1a3608a9",4503:"1e0d2d3b",4504:"99e5ffa1",4508:"e464d112",4528:"cb5f1a06",4535:"1842239f",4548:"53a5cb1e",4575:"d25cde70",4579:"94d743d6",4594:"b962e007",4597:"d0cb74df",4603:"f7bfff73",4627:"e579bad6",4654:"e887b273",4713:"d355047f",4744:"1014102e",4756:"4cee39d7",4772:"4997ef4f",4797:"0d432c84",4800:"c065fcb9",4880:"f8aab3ca",4916:"82878c84",4927:"fa2e2688",4929:"cd8e97a5",4954:"f7a32432",4963:"6f479459",4979:"e8b9c2c7",4992:"37ab9beb",4994:"109f6864",5e3:"cf57716c",5024:"0daa5b3f",5040:"767a7177",5043:"8eb438b4",5049:"f85db098",5056:"c3b1d949",5064:"e9b75d67",5088:"7a1d9beb",5095:"90e4432b",5116:"10e13725",5122:"c2e40c34",5124:"061b38c5",5149:"603706f6",5253:"b7787e72",5254:"33b3776b",5276:"76b137bf",5287:"b8963dc0",5305:"ca0a1bad",5328:"54287b47",5343:"1abf1e18",5370:"7649ec47",5378:"fc338b02",5433:"ffb7f88a",5437:"44ff0d07",5487:"3a4f9d93",5488:"cbc3190d",5511:"a9330763",5517:"22f921cc",5521:"283b8f99",5538:"bece3771",5566:"ebf648dd",5579:"dd29718b",5584:"bd1bcb2c",5586:"e7250a93",5602:"57ef17c5",5648:"ee83122d",5658:"c23b5e26",5702:"41ee0cff",5717:"d0c5e4fa",5729:"56d039a1",5750:"0637d1e7",5752:"c3c516ff",5768:"a34b09d4",5789:"1155dc6f",5800:"18c7d2a3",5839:"07f6b90a",5847:"4e044b4e",5913:"a608660b",5939:"0453ae68",5942:"900b935c",5974:"8cb11643",5990:"38d6824e",6005:"90742975",6021:"295a8e78",6030:"0f113696",6103:"ccc49370",6135:"96cf5ff0",6167:"74659d33",6184:"4130db01",6204:"50af03e4",6224:"6c7d288d",6248:"7bf16cc6",6269:"76d23901",6285:"b0e28723",6286:"bef0d2d3",6300:"d252041b",6338:"0fb98d33",6350:"1e14124f",6373:"cff2e56e",6413:"4bbbdfcf",6454:"34f00221",6515:"9cb6fa7c",6551:"3c1f4383",6555:"0fa36e32",6559:"98258c5e",6572:"589adaf2",6613:"b4898d44",6633:"707d2a35",6673:"e5c4ef01",6676:"03d0d544",6685:"c2e57a1b",6698:"aba932dd",6704:"67e06a8b",6746:"5ef28062",6808:"8462374b",6828:"df01388f",6833:"5b779334",6843:"62983deb",6856:"b80b493a",6945:"296054a7",6958:"1e57c92a",6975:"51dbb02f",7001:"83586bff",7069:"40b49758",7168:"d9837698",7201:"567cd2fd",7218:"ba9c0924",7231:"9d095dba",7234:"268b7b40",7258:"e2689dfc",7287:"99f8fee5",7295:"6eddee4c",7320:"c40984d1",7381:"4db82253",7392:"ef77ef39",7394:"31bb7274",7452:"93ba15e0",7454:"c5775233",7486:"a406e231",7491:"d3093636",7509:"9530a2cf",7538:"ad139e3c",7572:"a07d09c1",7597:"66fcb786",7610:"077ca2ec",7655:"b1706689",7684:"b38eec89",7689:"39122aab",7697:"39582d99",7706:"db170a23",7721:"0e16e9ea",7782:"b328a361",7813:"35bdc661",7820:"dd3f9ada",7870:"ed316aed",7887:"be95fd8f",7918:"17896441",7920:"1a4e3797",7924:"15a59c33",7925:"9c5088a2",7930:"d39aa6d3",7969:"5887dc62",7988:"4e432063",7991:"dc1e40d7",8003:"5066efb2",8006:"9da9112f",8040:"e24ee294",8050:"d3c9b0d7",8057:"d9e5e528",8078:"6f8cd013",8092:"4d31bfb3",8146:"d13e532e",8168:"e7bd83ca",8197:"bc4bf151",8261:"012c1c0f",8314:"104bf0a6",8373:"445a1b28",8377:"70b306ba",8399:"327be84b",8443:"ceeda143",8462:"bc6a9944",8491:"59ef8022",8524:"0349e4f0",8526:"3201258e",8549:"c991f47b",8559:"dac82c00",8579:"0b416bde",8583:"6bdbf6b8",8585:"18c9c2ba",8602:"25fb872c",8634:"f1b2dc7f",8696:"b066233f",8738:"b940e0b5",8746:"d620a661",8749:"2d527871",8755:"990f07de",8759:"16d05917",8781:"5e7c3303",8807:"13246fd5",8809:"fd748117",8817:"88e44e99",8825:"c73cfc52",8828:"514f485e",8846:"3bed3e2f",8859:"b7802ae1",8861:"7c2e1100",8933:"11c317cb",8955:"6e71bda3",8957:"2d5b0e6a",8966:"41f327fc",8984:"d535b358",9006:"9783ff24",9042:"c14fdd92",9043:"00353f68",9079:"efc1978d",9088:"0a954229",9119:"2406587d",9139:"ae89cd3b",9159:"57e687e8",9161:"69dc6d0a",9196:"efbc69e1",9220:"a2b5e5df",9226:"8181e18a",9242:"bb7a48da",9262:"120352d6",9283:"7c007ec6",9307:"0d6d64cd",9314:"232d09b0",9328:"a0434473",9362:"34ff21b6",9374:"58b8f176",9407:"deef0af8",9461:"6ff7775f",9463:"a19ce767",9465:"548964ce",9483:"15ea8379",9484:"71042800",9514:"1be78505",9535:"905ce8b5",9540:"4f1ca6a9",9559:"3fb29942",9596:"4e105cba",9601:"fc47fc53",9603:"2b30bc14",9696:"166d99f5",9767:"c413b43a",9775:"b2be3901",9781:"dea122e2",9806:"b9f125cc",9864:"1dc2f362",9966:"d1246f49",9970:"093b81f4"}[e]||e)+"."+{13:"c56bd14f",40:"80ba3b3a",53:"a7a22ebc",55:"99e2a2d4",112:"77fd4edb",196:"18afb55b",224:"dbfc0f69",226:"7c60e348",271:"44be0898",288:"7489cc5c",297:"156edfea",301:"1f16b76c",322:"46ce6b62",335:"6218942f",344:"29e6982a",360:"1c41de35",367:"c14770b5",390:"a66af9a2",403:"e59b80da",406:"dee8c97d",412:"07dc78db",445:"34c16520",464:"9bf22da7",587:"25e7c11f",598:"9cd09a81",653:"fd065758",659:"2596f402",707:"00828ac4",745:"f3f89bc5",787:"4d89b7a8",804:"b95e1b94",829:"1bd99f73",847:"65b3c453",852:"97af0ce4",912:"875a987c",927:"3b687d74",939:"dd4545ed",950:"7796d594",978:"993e6251",1078:"42c381bc",1102:"0fc511ee",1103:"41f78361",1105:"9b8a1022",1153:"379aa98a",1172:"105f1ab1",1210:"ff2a0bc7",1279:"8a19e2df",1286:"6ad5a370",1317:"e2697788",1333:"64b12178",1340:"84c2a9ad",1391:"877bd6dd",1428:"1ad4484a",1442:"52a1c5ec",1478:"4747e3cb",1535:"e877fa9b",1542:"abd474da",1561:"befdbef4",1570:"7785d153",1580:"4ea7c764",1663:"de1717c2",1719:"3c316633",1732:"a2f6c367",1747:"68bde11d",1755:"61d141a8",1773:"3a54b67d",1778:"f8e0308c",1787:"00081b8c",1802:"f69b2e62",1824:"1e1b5f34",1829:"b820bdc9",1836:"0d2bf26f",1842:"b9129f4a",1854:"ce626804",1867:"803e4dab",1871:"17a511c3",1895:"270c3d35",1896:"99652826",1913:"68528eb1",1921:"1a58d031",1933:"0db5e7ea",1944:"5b82a33c",1970:"efd6c8db",1977:"0809e327",2007:"e6878070",2011:"f9c0d81a",2045:"46e2480c",2059:"682a991d",2079:"cc26011a",2106:"7cd5dbe5",2141:"e5e48bbe",2158:"b59bbbed",2185:"10b30c7d",2195:"a42749a0",2217:"1cf10c8d",2283:"fa2a5171",2321:"366d457f",2341:"54e72387",2377:"59350ae0",2398:"f24282cb",2406:"87d3423f",2408:"f68bf61a",2412:"6064a050",2428:"7362ed65",2433:"cf7ffc92",2447:"18936ddd",2522:"2f2a7121",2535:"d845b63b",2565:"9d4a4c5f",2577:"919f0fb4",2599:"095b7e70",2630:"974eba52",2638:"99ac7d58",2668:"af956475",2675:"d15e8bc6",2707:"e4a33da3",2712:"f1aa85a0",2730:"c1beabd2",2744:"b0dd7c79",2750:"a1432bf3",2752:"ad9d0a29",2787:"e4035b94",2789:"3be2bd8d",2797:"ec2ce8dc",2804:"0555f3f3",2805:"d70b02d3",2815:"7d6ef446",2840:"d97ae584",2852:"c684ddd2",2880:"75067cf9",2912:"825821cd",2947:"4088d099",2982:"38e917ff",2994:"625af550",3017:"8859c962",3036:"1365de20",3060:"37090412",3064:"11534929",3089:"5025ae88",3090:"f43f8510",3099:"8ca7d495",3140:"573485ef",3156:"fb308cee",3195:"24aa8d50",3196:"cafd450f",3202:"8abee68b",3234:"cc5ee2f1",3249:"cba81cc7",3251:"94dd5294",3344:"e3763bd8",3358:"6329198a",3377:"ae294f76",3378:"45e6b532",3393:"b197a75e",3419:"b43d60b6",3426:"dbab4b4c",3431:"9e9cf983",3443:"7178a795",3448:"c58aea68",3482:"9379e391",3488:"52393077",3544:"ff880f8a",3554:"5366c665",3572:"12df60c7",3602:"3bb79615",3608:"0c84fcbc",3611:"84cee5cb",3631:"e8277928",3634:"cf6f1182",3669:"bcc77f3b",3730:"a048bdd3",3781:"92a4dfce",3796:"fe33517e",3807:"cc667f14",3814:"a51776da",3838:"c16491dc",3871:"46e61b3d",3894:"7e1e8993",3941:"c4b67e8f",3953:"aa3ad659",3969:"0c46002a",3979:"7156466c",4026:"43a60320",4177:"34ee98f8",4178:"f7404136",4193:"0c39c6fd",4195:"15216e11",4202:"511a03f2",4204:"2942d62d",4207:"8fdf5c23",4233:"7aadbc69",4273:"0c4762cc",4275:"83319480",4330:"adb1ad89",4334:"24c80d6e",4353:"90dc8952",4395:"d5298601",4397:"6d0564b4",4422:"7a35ddd7",4482:"97a505e3",4484:"2b566bd7",4503:"78e09ada",4504:"93c0bbda",4508:"f88ca299",4528:"f07a8cc2",4535:"48238b2c",4548:"959a09cf",4572:"1cea9379",4575:"2331063e",4579:"d52ccf78",4594:"e5a526cd",4597:"bcddacd7",4603:"203e83c5",4627:"7ac7ba1c",4654:"129f1f6d",4713:"3bfaccbc",4744:"5aa5d55a",4756:"4bfcfb3d",4772:"2a5b959d",4797:"9324de8a",4800:"f4fea7cb",4880:"f730115b",4916:"13026b5f",4927:"35564623",4929:"986157d8",4954:"f6c87999",4963:"5aa1cf9c",4979:"44a1e24f",4992:"6c8f5bb8",4994:"39ed3c87",5e3:"c4a07252",5024:"6fc18f7a",5040:"0baeb5ae",5043:"a6dc9166",5049:"4fcd6d8f",5056:"43d0d76b",5064:"f8cbe2be",5088:"313fb6da",5095:"01aaf7bf",5116:"a00bb8ec",5122:"ae909784",5124:"f8301fd3",5149:"766a2643",5253:"f092ec7e",5254:"d9a92894",5276:"778473f4",5287:"b75edc26",5305:"1406835a",5328:"fad13437",5343:"45dad1b8",5370:"2c40c5d0",5378:"be4cc3ff",5433:"1a2e4b4b",5437:"cfc96abc",5487:"dde24bd7",5488:"3ce76bac",5511:"1195c373",5517:"5224615a",5521:"db9949ee",5538:"27d7d8f1",5566:"0bc6d5d1",5579:"e2a04d64",5584:"78440f11",5586:"b9b8276f",5602:"0c97a2dd",5648:"edf0d3d5",5658:"65b67101",5702:"2fc757da",5717:"9f1d9680",5729:"41b4bc95",5750:"c8f4a7b9",5752:"ddda40a1",5768:"b3e2a888",5789:"294730b0",5800:"d8c7210f",5839:"cff9cf55",5847:"eab9c664",5913:"d5342b60",5939:"18b3af99",5942:"44e98f5d",5974:"1e9b402e",5990:"6c15666e",6005:"138ec2d6",6021:"46569719",6030:"554ac448",6048:"397ca100",6103:"57308517",6135:"f8d69848",6167:"0f8eeadb",6184:"4e6498fa",6204:"8ec25f8c",6224:"72484c57",6248:"a88bd489",6269:"4db19ac9",6285:"16bd53ce",6286:"c025269d",6300:"7e49ffbc",6338:"3038ee3c",6350:"8f741f5b",6373:"e5f83fce",6413:"406cd688",6454:"86177dce",6515:"b3f6a8cb",6551:"7825e242",6555:"53ee1803",6559:"b963415c",6572:"04bac45c",6613:"a3b643fa",6633:"eeed6b75",6673:"340cd835",6676:"f7d82b4f",6685:"3e3a1682",6698:"fffc4466",6704:"5891f9ee",6746:"d7e6d62f",6780:"69ba91fe",6808:"68a92c8a",6828:"b73c731a",6833:"22b0f475",6843:"305c6831",6856:"33d1ebaa",6945:"e3549e7d",6958:"57209de7",6975:"8c30473b",7001:"2e923785",7069:"fb0347b8",7168:"f3f1d467",7201:"76ce9723",7218:"2ee7e500",7231:"e54a8640",7234:"8b19b6e4",7258:"025d9bf9",7287:"55a07bf6",7295:"04cfd733",7320:"a414b666",7381:"902105ee",7392:"7891e272",7394:"317f4677",7452:"636c68a7",7454:"e7cd85ee",7486:"01858d55",7491:"13d3af74",7509:"e0320a5b",7538:"c177a765",7572:"f9ffc22f",7597:"56bf8c49",7610:"1a33b9fa",7655:"5406e673",7684:"a710f19b",7689:"8c50faf9",7697:"5a3bbfc9",7706:"6ecb6923",7721:"64644a25",7780:"fed0dc4a",7782:"08f207ef",7813:"ceb49b81",7820:"f8a1916f",7853:"f7c9cf19",7870:"96b84421",7887:"6de427c8",7918:"69f82ad5",7920:"4d89dfd2",7924:"05731ce3",7925:"45be218c",7930:"8695a34c",7969:"1628620a",7988:"663db135",7991:"6eac5ba0",8003:"665e502e",8006:"696da333",8040:"2f757763",8050:"e2becdd2",8057:"76d8be1b",8078:"23c9eafd",8092:"a30ffbf5",8146:"e8787811",8168:"329ff665",8197:"efdadb81",8261:"de10c8e0",8314:"6a5bd80a",8373:"db4e144c",8377:"86420f34",8399:"76ff188c",8443:"48df1819",8462:"f997e4a9",8491:"3c611f03",8524:"589329bf",8526:"bd96832f",8549:"085c005a",8559:"426496fe",8579:"77bc4755",8583:"4df2aacc",8585:"85e6e8c3",8602:"e519d4ef",8634:"c1e69bb3",8696:"5393b397",8738:"4a0af097",8746:"184ac418",8749:"fd6620c4",8755:"2ccd0227",8759:"5997002c",8781:"c85e7225",8807:"7e1acab2",8809:"4abae402",8817:"ad42d95b",8825:"7eeb44c5",8828:"2cae2dd4",8846:"ccc270ab",8859:"b0deb879",8861:"6cc4e59e",8894:"13f45421",8933:"27407246",8955:"fa3af056",8957:"bcc846af",8966:"40aeb55b",8984:"7f894256",9006:"1bfc320a",9042:"398a4650",9043:"8d458274",9079:"16ec5627",9088:"a0526771",9119:"ea7de60a",9139:"d9a47152",9159:"de31033e",9161:"fb1547f0",9196:"952ad61a",9220:"18210be1",9226:"86e98532",9242:"dfd94516",9262:"9b13f675",9283:"35595d17",9307:"f805389a",9314:"efe1e16b",9328:"4b59d197",9362:"056be40b",9374:"0a1e3d6d",9407:"7bdc494d",9461:"1f67c9aa",9463:"92f78145",9465:"6425f593",9483:"812834c9",9484:"f7572360",9514:"665c2315",9535:"52fdaab0",9540:"fd3585d8",9559:"3de21ce5",9596:"c4d60a83",9601:"57d22ddf",9603:"a28f577d",9696:"9e0cb281",9767:"d8eb6d80",9775:"42ced16f",9781:"70411c61",9806:"54b742b6",9864:"d4f95337",9966:"c829d3e1",9970:"91aac8bb"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,b)=>Object.prototype.hasOwnProperty.call(e,b),f={},a="synapseml:",r.l=(e,b,d,c)=>{if(f[e])f[e].push(b);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var a=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),a&&a.forEach((e=>e(d))),b)return b(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/SynapseML/",r.gca=function(e){return e={17896441:"7918",20641120:"787",55203621:"3554",71042800:"9484",75406112:"3060",90742975:"6005","5eddefdd":"13",a81cf8b0:"40","935f2afb":"53","403e642d":"55","8fd0c721":"112","9c279ae7":"196","77c259dd":"224","32fe2e34":"226",e8d66fc1:"271","69bb4b11":"288",fe2c893b:"297","627aefca":"301",b576c645:"322","22444eb9":"335","7aa7b8e0":"344","88b63415":"360",fece3c24:"367","001aea4c":"390","7b60d8e3":"403","6a07b55e":"406","9e5b788f":"412",f322d2da:"445","47bbce76":"464",b83021be:"587",e1269457:"598","97592aac":"653","610d430a":"659",ab9a8589:"707","069e3c4c":"745",d989c707:"804",ee6cea3b:"829","73c2022c":"847","965ed185":"852",e12b4691:"912",a6191053:"927","0a65b9de":"939","1db1f785":"950",ac581902:"978","80472ecc":"1078","20e0fe38":"1102","3ac37a06":"1103","6b9bdd6f":"1105",c95882d3:"1153","255635fc":"1172",e2ce57ed:"1210",fd3b6ea5:"1279",fd4bd09d:"1286","6a9ad78d":"1317","521f9727":"1333",e1b2b5f3:"1340","2137a7cd":"1391",b5375b6f:"1428",b75118f0:"1442",b4a95996:"1478","1a215693":"1535",fba72e87:"1542","2ece0fbe":"1561","4de42975":"1570","179d57fa":"1580","00056db7":"1663",b66e2100:"1719",e9aab890:"1732","85aed2f9":"1747","04fc65cc":"1755","3cbfbf75":"1773",a0d8a1a2:"1778",e4ba4487:"1787","513002de":"1802",c90c942b:"1824",f38a0cbd:"1829","645abc7d":"1836",d8d6ba90:"1842",ad10988d:"1854","391cb159":"1867","8590feaa":"1871","78aebd5d":"1895","9fa7e8eb":"1896","1d820955":"1913","8328d740":"1921",cb7c2a83:"1933","79114dfe":"1944","01a15f20":"1970","3b5de274":"1977",a34c49d0:"2007",e316de39:"2011","0e0ee9b2":"2045",b33598ac:"2059","5cfa133c":"2079","2c98ca3e":"2106",a877f9e5:"2141",f7580424:"2158","561bd03d":"2185",b72abe57:"2195","04ee4ab4":"2217",e3089280:"2283","325e22bd":"2321",aa5548ab:"2341","1789daeb":"2377","6c7ccb6d":"2398",c4d09a44:"2406","09bc1516":"2408","12d85ab5":"2412","31ee0fa3":"2428","345903d4":"2433","2e5f4263":"2447","6c4c8509":"2522","814f3328":"2535",c38c658c:"2565","8af72580":"2577","5f17911b":"2599","5962ef6e":"2630",e21a3367:"2638","3a1147b5":"2668","4ef2f7cf":"2675","49e6864b":"2707","6b40ec54":"2712",a3fd5a6d:"2730",f8597cb0:"2744","52880d18":"2750","9b020c4a":"2752",ed5c6c48:"2787","0606f1a5":"2789",e4e95844:"2797","12b89d4a":"2804",d175df5e:"2805","993c5022":"2815","4bea8531":"2840","423540f2":"2852",e1ed1e14:"2880","13f17286":"2912","42736d5f":"2947","3647ac9b":"2982","48cf7354":"2994",bf002efe:"3017","052105dd":"3036",da508cef:"3064",a6aa9e1f:"3089","86ed1ff2":"3090","95d9e891":"3099","1587ba1d":"3156","6a26e359":"3195","74091a62":"3196","6c61f93b":"3202",c0391845:"3234","5225b7e0":"3249",c34b1e36:"3251","995576e9":"3344","5c18deb5":"3358","318ccb43":"3377",fbb011bb:"3378","3e9a7422":"3393","8e32e44d":"3419","494501bd":"3426","1b3ab3b8":"3431","91e9cb67":"3443",ed6d544d:"3448",ef6ec597:"3482","336404dc":"3488","4e3910af":"3544",a8456d9f:"3572",af1e70b6:"3602","9e4087bc":"3608","6e159789":"3611","90f00051":"3631",ff428354:"3634",d707d2ed:"3669","034e6169":"3730","866b91a1":"3781","6a95f87e":"3796",f21c13c4:"3807",b41f295c:"3814","92ce4fd5":"3838","445012ce":"3871","35826f14":"3894","2bcda99e":"3941","60a2189a":"3953","48329b94":"3979","73cf52e8":"4026",d41234a3:"4177","70fe7dd7":"4178","1ad91055":"4193",c4f5d8e4:"4195",c2492d56:"4202",ea2d2bcc:"4204",f14633e7:"4207",b7c6295c:"4233","1b7af47d":"4273","792eae7e":"4275",d8b3ac6a:"4330","00ab2cda":"4334","1f31a275":"4353","0e2bf69e":"4395","3e1e84da":"4397",c5c95e45:"4422","0e3f998d":"4482","1a3608a9":"4484","1e0d2d3b":"4503","99e5ffa1":"4504",e464d112:"4508",cb5f1a06:"4528","1842239f":"4535","53a5cb1e":"4548",d25cde70:"4575","94d743d6":"4579",b962e007:"4594",d0cb74df:"4597",f7bfff73:"4603",e579bad6:"4627",e887b273:"4654",d355047f:"4713","1014102e":"4744","4cee39d7":"4756","4997ef4f":"4772","0d432c84":"4797",c065fcb9:"4800",f8aab3ca:"4880","82878c84":"4916",fa2e2688:"4927",cd8e97a5:"4929",f7a32432:"4954","6f479459":"4963",e8b9c2c7:"4979","37ab9beb":"4992","109f6864":"4994",cf57716c:"5000","0daa5b3f":"5024","767a7177":"5040","8eb438b4":"5043",f85db098:"5049",c3b1d949:"5056",e9b75d67:"5064","7a1d9beb":"5088","90e4432b":"5095","10e13725":"5116",c2e40c34:"5122","061b38c5":"5124","603706f6":"5149",b7787e72:"5253","33b3776b":"5254","76b137bf":"5276",b8963dc0:"5287",ca0a1bad:"5305","54287b47":"5328","1abf1e18":"5343","7649ec47":"5370",fc338b02:"5378",ffb7f88a:"5433","44ff0d07":"5437","3a4f9d93":"5487",cbc3190d:"5488",a9330763:"5511","22f921cc":"5517","283b8f99":"5521",bece3771:"5538",ebf648dd:"5566",dd29718b:"5579",bd1bcb2c:"5584",e7250a93:"5586","57ef17c5":"5602",ee83122d:"5648",c23b5e26:"5658","41ee0cff":"5702",d0c5e4fa:"5717","56d039a1":"5729","0637d1e7":"5750",c3c516ff:"5752",a34b09d4:"5768","1155dc6f":"5789","18c7d2a3":"5800","07f6b90a":"5839","4e044b4e":"5847",a608660b:"5913","0453ae68":"5939","900b935c":"5942","8cb11643":"5974","38d6824e":"5990","295a8e78":"6021","0f113696":"6030",ccc49370:"6103","96cf5ff0":"6135","74659d33":"6167","4130db01":"6184","50af03e4":"6204","6c7d288d":"6224","7bf16cc6":"6248","76d23901":"6269",b0e28723:"6285",bef0d2d3:"6286",d252041b:"6300","0fb98d33":"6338","1e14124f":"6350",cff2e56e:"6373","4bbbdfcf":"6413","34f00221":"6454","9cb6fa7c":"6515","3c1f4383":"6551","0fa36e32":"6555","98258c5e":"6559","589adaf2":"6572",b4898d44:"6613","707d2a35":"6633",e5c4ef01:"6673","03d0d544":"6676",c2e57a1b:"6685",aba932dd:"6698","67e06a8b":"6704","5ef28062":"6746","8462374b":"6808",df01388f:"6828","5b779334":"6833","62983deb":"6843",b80b493a:"6856","296054a7":"6945","1e57c92a":"6958","51dbb02f":"6975","83586bff":"7001","40b49758":"7069",d9837698:"7168","567cd2fd":"7201",ba9c0924:"7218","9d095dba":"7231","268b7b40":"7234",e2689dfc:"7258","99f8fee5":"7287","6eddee4c":"7295",c40984d1:"7320","4db82253":"7381",ef77ef39:"7392","31bb7274":"7394","93ba15e0":"7452",c5775233:"7454",a406e231:"7486",d3093636:"7491","9530a2cf":"7509",ad139e3c:"7538",a07d09c1:"7572","66fcb786":"7597","077ca2ec":"7610",b1706689:"7655",b38eec89:"7684","39122aab":"7689","39582d99":"7697",db170a23:"7706","0e16e9ea":"7721",b328a361:"7782","35bdc661":"7813",dd3f9ada:"7820",ed316aed:"7870",be95fd8f:"7887","1a4e3797":"7920","15a59c33":"7924","9c5088a2":"7925",d39aa6d3:"7930","5887dc62":"7969","4e432063":"7988",dc1e40d7:"7991","5066efb2":"8003","9da9112f":"8006",e24ee294:"8040",d3c9b0d7:"8050",d9e5e528:"8057","6f8cd013":"8078","4d31bfb3":"8092",d13e532e:"8146",e7bd83ca:"8168",bc4bf151:"8197","012c1c0f":"8261","104bf0a6":"8314","445a1b28":"8373","70b306ba":"8377","327be84b":"8399",ceeda143:"8443",bc6a9944:"8462","59ef8022":"8491","0349e4f0":"8524","3201258e":"8526",c991f47b:"8549",dac82c00:"8559","0b416bde":"8579","6bdbf6b8":"8583","18c9c2ba":"8585","25fb872c":"8602",f1b2dc7f:"8634",b066233f:"8696",b940e0b5:"8738",d620a661:"8746","2d527871":"8749","990f07de":"8755","16d05917":"8759","5e7c3303":"8781","13246fd5":"8807",fd748117:"8809","88e44e99":"8817",c73cfc52:"8825","514f485e":"8828","3bed3e2f":"8846",b7802ae1:"8859","7c2e1100":"8861","11c317cb":"8933","6e71bda3":"8955","2d5b0e6a":"8957","41f327fc":"8966",d535b358:"8984","9783ff24":"9006",c14fdd92:"9042","00353f68":"9043",efc1978d:"9079","0a954229":"9088","2406587d":"9119",ae89cd3b:"9139","57e687e8":"9159","69dc6d0a":"9161",efbc69e1:"9196",a2b5e5df:"9220","8181e18a":"9226",bb7a48da:"9242","120352d6":"9262","7c007ec6":"9283","0d6d64cd":"9307","232d09b0":"9314",a0434473:"9328","34ff21b6":"9362","58b8f176":"9374",deef0af8:"9407","6ff7775f":"9461",a19ce767:"9463","548964ce":"9465","15ea8379":"9483","1be78505":"9514","905ce8b5":"9535","4f1ca6a9":"9540","3fb29942":"9559","4e105cba":"9596",fc47fc53:"9601","2b30bc14":"9603","166d99f5":"9696",c413b43a:"9767",b2be3901:"9775",dea122e2:"9781",b9f125cc:"9806","1dc2f362":"9864",d1246f49:"9966","093b81f4":"9970"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(b,d)=>{var f=r.o(e,b)?e[b]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1303|532)$/.test(b))e[b]=0;else{var a=new Promise(((d,a)=>f=e[b]=[d,a]));d.push(f[2]=a);var c=r.p+r.u(b),t=new Error;r.l(c,(d=>{if(r.o(e,b)&&(0!==(f=e[b])&&(e[b]=void 0),f)){var a=d&&("load"===d.type?"missing":d.type),c=d&&d.target&&d.target.src;t.message="Loading chunk "+b+" failed.\n("+a+": "+c+")",t.name="ChunkLoadError",t.type=a,t.request=c,f[1](t)}}),"chunk-"+b,b)}},r.O.j=b=>0===e[b];var b=(b,d)=>{var f,a,c=d[0],t=d[1],o=d[2],n=0;if(c.some((b=>0!==e[b]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(b&&b(d);n