diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index c12bc6d2e..f8e134c62 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -3,8 +3,7 @@ name: Bug report about: Create a report to help us improve title: ": " labels: kind/bug, triage/support -assignees: '' - +assignees: "" --- #### Describe the bug diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index 64b7b92b9..959418c51 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -3,8 +3,7 @@ name: Feature request about: Suggest an idea for this project title: ": " labels: kind/feature -assignees: '' - +assignees: "" --- #### Is your feature request related to a problem? Please link issue ticket diff --git a/.github/ISSUE_TEMPLATE/onboarding-support-help.md b/.github/ISSUE_TEMPLATE/onboarding-support-help.md index c04e74108..cede19018 100644 --- a/.github/ISSUE_TEMPLATE/onboarding-support-help.md +++ b/.github/ISSUE_TEMPLATE/onboarding-support-help.md @@ -3,8 +3,7 @@ name: Onboarding support/help about: Just got your account setup and need help getting started? title: "[Help] " labels: triage/support -assignees: '' - +assignees: "" --- Before submitting your ticket did you first try the following? diff --git a/docs/en/1-Experiments/Jupyter.md b/docs/en/1-Experiments/Jupyter.md index 79df567fa..756f3edc8 100644 --- a/docs/en/1-Experiments/Jupyter.md +++ b/docs/en/1-Experiments/Jupyter.md @@ -2,7 +2,11 @@ ## Jupyter: friendly R and Python experience -Jupyter gives you **notebooks** to write your code and make visualizations. You can quickly iterate, visualize, and share your analyses. Because it's running on a server (that you set up in the Kubeflow section) you can do really big analyses on centralized hardware, adding as much horsepower as you need! And because it's on the cloud, you can share it with your colleagues too. +Jupyter gives you **notebooks** to write your code and make visualizations. You +can quickly iterate, visualize, and share your analyses. Because it's running on +a server (that you set up in the Kubeflow section) you can do really big +analyses on centralized hardware, adding as much horsepower as you need! And +because it's on the cloud, you can share it with your colleagues too. ### Explore your data @@ -20,7 +24,8 @@ Jupyter comes with a number of features (and we can add more) [![Explore your data](../images/ExploreData.PNG)](/2-Publishing/Datasette/) -Use **[Datasette](../2-Publishing/Datasette/)** , an instant JSON API for your SQLite databases. Run SQL queries in a more interactive way! +Use **[Datasette](../2-Publishing/Datasette/)** , an instant JSON API for your +SQLite databases. Run SQL queries in a more interactive way! ### IDE in the browser @@ -39,7 +44,11 @@ Create for exploring, and also great for writing code ## Get started with the examples -When you started your server, it got loaded with a bunch of example notebooks. Double click to open the jupyter-notebooks folder. Great notebooks to start with are `R/01-R-Notebook-Demo.ipynb`, or the notebooks in `scikitlearn`. `pytorch` and `tensorflow` are great if you are familiar with machine learning. The `mapreduce-pipeline` and `ai-pipeline` are more advanced. +When you started your server, it got loaded with a bunch of example notebooks. +Double click to open the jupyter-notebooks folder. Great notebooks to start with +are `R/01-R-Notebook-Demo.ipynb`, or the notebooks in `scikitlearn`. `pytorch` +and `tensorflow` are great if you are familiar with machine learning. The +`mapreduce-pipeline` and `ai-pipeline` are more advanced. !!! danger "Some notebooks only work in certain server versions" @@ -74,11 +83,14 @@ available.** ## Getting Data in and out of Jupyter -You can upload and download data to/from JupyterHub directly in the menu. There is an upload button at the top, and you can right-click most files or folders to download them. +You can upload and download data to/from JupyterHub directly in the menu. There +is an upload button at the top, and you can right-click most files or folders to +download them. ### Shareable "Bucket" storage -There is also a mounted `buckets` folder in your home directory, which holds files in [MinIO](../Storage.md/#buckets-via-minio). +There is also a mounted `buckets` folder in your home directory, which holds +files in [MinIO](../Storage.md/#buckets-via-minio). **Refer to the [Storage](../index.md#storage) section for details.** @@ -86,7 +98,14 @@ There is also a mounted `buckets` folder in your home directory, which holds fil _Data analysis is an underappreciated art._ -Data analysis is the process of examining and interpreting large amounts of data to extract useful insights and draw meaningful conclusions. This can be done using various techniques and tools, such as statistical analysis, machine learning, and visualization. The goal of data analysis is to uncover patterns, trends, and relationships in the data, which can then be used to inform decisions and solve problems. Data analysis is used in a wide range of fields, from business and finance to healthcare and science, to help organizations make more informed decisions based on evidence and data-driven insights. +Data analysis is the process of examining and interpreting large amounts of data +to extract useful insights and draw meaningful conclusions. This can be done +using various techniques and tools, such as statistical analysis, machine +learning, and visualization. The goal of data analysis is to uncover patterns, +trends, and relationships in the data, which can then be used to inform +decisions and solve problems. Data analysis is used in a wide range of fields, +from business and finance to healthcare and science, to help organizations make +more informed decisions based on evidence and data-driven insights. ### JupyterLab @@ -96,4 +115,9 @@ _Process data using R, Python, or Julia in JupyterLab_ [![R, Python, or Julia in JupyterLab](../images/jupyter_in_action.png)](../1-Experiments/Jupyter.md) -Processing data using R, Python, or Julia is made easy with the Advanced Analytics Workspace. Whether you're new to data analysis or an experienced data scientist, our platform supports a range of programming languages to fit your needs. You can install and run packages for R or Python to perform data processing tasks such as data cleaning, transformation, and modeling. If you prefer Julia, our platform also offers support for this programming language. +Processing data using R, Python, or Julia is made easy with the Advanced +Analytics Workspace. Whether you're new to data analysis or an experienced data +scientist, our platform supports a range of programming languages to fit your +needs. You can install and run packages for R or Python to perform data +processing tasks such as data cleaning, transformation, and modeling. If you +prefer Julia, our platform also offers support for this programming language. diff --git a/docs/en/1-Experiments/Kubeflow.md b/docs/en/1-Experiments/Kubeflow.md index 76a915467..855c4d20f 100644 --- a/docs/en/1-Experiments/Kubeflow.md +++ b/docs/en/1-Experiments/Kubeflow.md @@ -42,8 +42,8 @@ for your team. ## Server Name and Namespace - You will get a template to create your notebook server. **Note:** the name of - your server can consist of only lower-case letters, numbers, and hyphens. **No spaces, and no - underscores.** + your server can consist of only lower-case letters, numbers, and hyphens. **No + spaces, and no underscores.** - You will need to specify a namespace. By default you will have a default namespace for your account, but for projects you may need to select the @@ -58,8 +58,9 @@ employees (due to license limitations), the others are available for everyone. Select the drop down menu to select additional options within these (for instance, CPU, PyTorch, and TensorFlow images for JupyterLab). -Check the name of the images and choose one that matches what you want to do. Don't know -which one to choose? Check out your options [here](./Selecting-an-Image.md). +Check the name of the images and choose one that matches what you want to do. +Don't know which one to choose? Check out your options +[here](./Selecting-an-Image.md). ![Choose an Image](../images/select-image-screenshot.PNG) @@ -68,40 +69,41 @@ which one to choose? Check out your options [here](./Selecting-an-Image.md). At the time of writing (December 23, 2021) there are two types of computers in the cluster - - **CPU:** `D16s v3` (16 CPU cores, 64 GiB memory; for user use 15 CPU cores - and 48 GiB memory are available; 1 CPU core and 16 GiB memory reserved for - system use). - - **GPU:** `NC6s_v3` (6 CPU cores, 112 GiB memory, 1 GPU; for user use 96 GiB - memory are available; 16 GiB memory reserved for system use). The available - GPU is the NVIDIA Tesla V100 GPU with specifications - [here](https://images.nvidia.com/content/technologies/volta/pdf/volta-v100-datasheet-update-us-1165301-r5.pdf). +- **CPU:** `D16s v3` (16 CPU cores, 64 GiB memory; for user use 15 CPU cores and + 48 GiB memory are available; 1 CPU core and 16 GiB memory reserved for system + use). +- **GPU:** `NC6s_v3` (6 CPU cores, 112 GiB memory, 1 GPU; for user use 96 GiB + memory are available; 16 GiB memory reserved for system use). The available + GPU is the NVIDIA Tesla V100 GPU with specifications + [here](https://images.nvidia.com/content/technologies/volta/pdf/volta-v100-datasheet-update-us-1165301-r5.pdf). When creating a notebook server, the system will limit you to the maximum -specifications above. For CPU notebook servers, you can specify the exact -amount of CPU and memory that you require. This allows you to meet your -compute needs while minimising cost. For a GPU notebook server, you will -always get the full server (6 CPU cores, 96 GiB accessible memory, and 1 GPU). -See below section on GPUs for information on how to select a GPU server. - -In the advanced options, you can select a higher limit than the number of CPU cores and -RAM requested. The amount requested is the amount guaranteed to be available for your -notebook server and you will always pay for at least this much. If the limit is higher -than the amount requested, if additional RAM and CPU cores are available on that shared -server in the cluster your notebook server can use them as needed. One use case for this -is jobs that usually need only one CPU core but can benefit from multithreading to speed -up certain operations. By requesting one CPU core but a higher limit, you can pay much -less for the notebook server while allowing it to use spare unused CPU cores as needed -to speed up computations. +specifications above. For CPU notebook servers, you can specify the exact amount +of CPU and memory that you require. This allows you to meet your compute needs +while minimising cost. For a GPU notebook server, you will always get the full +server (6 CPU cores, 96 GiB accessible memory, and 1 GPU). See below section on +GPUs for information on how to select a GPU server. + +In the advanced options, you can select a higher limit than the number of CPU +cores and RAM requested. The amount requested is the amount guaranteed to be +available for your notebook server and you will always pay for at least this +much. If the limit is higher than the amount requested, if additional RAM and +CPU cores are available on that shared server in the cluster your notebook +server can use them as needed. One use case for this is jobs that usually need +only one CPU core but can benefit from multithreading to speed up certain +operations. By requesting one CPU core but a higher limit, you can pay much less +for the notebook server while allowing it to use spare unused CPU cores as +needed to speed up computations. ![Select CPU and RAM](../images/cpu-ram-select.png) ## GPUs -If you want a GPU server, select `1` as the number of GPUs and `NVIDIA` as the GPU -vendor (the create button will be greyed out until the GPU vendor is selected if -you have a GPU specified). Multi-GPU servers are currently supported on the AAW -system only on a special on-request basis, please contact the AAW maintainers if -you would like a multi-GPU server. +If you want a GPU server, select `1` as the number of GPUs and `NVIDIA` as the +GPU vendor (the create button will be greyed out until the GPU vendor is +selected if you have a GPU specified). Multi-GPU servers are currently supported +on the AAW system only on a special on-request basis, please contact the AAW +maintainers if you would like a multi-GPU server. ![GPU Configuration](../images/kubeflow_gpu_selection.jpg) @@ -115,10 +117,11 @@ cores and 112 GiB of memory. ## Workspace Volume -You will need a workspace volume, which is where the home folder will be mounted. There -are various configuration options available: +You will need a workspace volume, which is where the home folder will be +mounted. There are various configuration options available: -- You can either reuse an existing workspace volume from before, or create a new one. +- You can either reuse an existing workspace volume from before, or create a new + one. - You can specify the size of the workspace volume, from 4 GiB to 32 GiB. @@ -131,27 +134,27 @@ are various configuration options available: ## Data Volumes -You can also create data volumes that can be used to store additional data. Multiple -data volumes can be created. Click the add new volume button to create a new volume and -specify its configuration. Click the attach existing volume button to mount an existing -data volume to the notebook server. There are the following configuration parameters for -data volumes: +You can also create data volumes that can be used to store additional data. +Multiple data volumes can be created. Click the add new volume button to create +a new volume and specify its configuration. Click the attach existing volume +button to mount an existing data volume to the notebook server. There are the +following configuration parameters for data volumes: - **Name**: Name of the volume. - **Size in GiB**: From 4 GiB to 512 GiB. -- **Mount path**: Path where the data volume can be accessed on the notebook server, by - default `/home/jovyan/vol-1`, `/home/jovyan/vol-2`, etc. (incrementing counter per data - volume mounted). +- **Mount path**: Path where the data volume can be accessed on the notebook + server, by default `/home/jovyan/vol-1`, `/home/jovyan/vol-2`, etc. + (incrementing counter per data volume mounted). -When mounting an existing data volume, the name option becomes a drop-down list of the -existing data volumes. Only a volume not currently mounted to an existing notebook server -can be used. The mount path option remains user-configurable with the same defaults as -creating a new volume. +When mounting an existing data volume, the name option becomes a drop-down list +of the existing data volumes. Only a volume not currently mounted to an existing +notebook server can be used. The mount path option remains user-configurable +with the same defaults as creating a new volume. -The garbage can icon on the right can be used to delete an existing or accidentally created -data volume. +The garbage can icon on the right can be used to delete an existing or +accidentally created data volume. ![Create a Data Volume](../images/kubeflow_volumes.png) @@ -163,18 +166,18 @@ There are currently three checkbox options available here: repositories accessible as subfolders / files of the `minio/` folder. This is still experimental and may not work properly currently. - **Run a Protected B notebook**: Enable this if the server you create needs - access to any Protected B resources. Protected B notebook servers run with many - security restrictions and have access to separate MinIO instances specifically - designed for Protected B data. + access to any Protected B resources. Protected B notebook servers run with + many security restrictions and have access to separate MinIO instances + specifically designed for Protected B data. ## Miscellaneous Settings The following can be customized here: -- **Enable Shared Memory**: This is required if you use PyTorch with multiple data - loaders, which otherwise will generate an error. If using PyTorch make sure this - is enabled, otherwise it does not matter unless you have another application - that requires shared memory. +- **Enable Shared Memory**: This is required if you use PyTorch with multiple + data loaders, which otherwise will generate an error. If using PyTorch make + sure this is enabled, otherwise it does not matter unless you have another + application that requires shared memory. - **System Language**: Can specify English or French here. ![Miscellaneous Settings](../images/misc-settings.PNG) diff --git a/docs/en/1-Experiments/Overview.md b/docs/en/1-Experiments/Overview.md index a16eb2515..4797db571 100644 --- a/docs/en/1-Experiments/Overview.md +++ b/docs/en/1-Experiments/Overview.md @@ -1,25 +1,63 @@ ## Data Science Experimentation -_Process data using R, Python, or Julia with Kubeflow, a machine learning platform that provides a simple, unified, and scalable infrastructure for machine learning workloads._ - -With Kubeflow, you can process data in a scalable and efficient way using the programming language of your choice. Once you have Kubeflow set up, use Jupyter Notebooks to create and share documents that contain live code, equations, or visualizations. - -You can also run Ubuntu as a virtual desktop with Kubeflow, giving you access to a powerful development environment that can be customized to your needs. With R Shiny, a web application framework for R, you can easily create and publish static and interactive dashboards to communicate your analysis results to stakeholders. - -Kubeflow also provides integration with external platforms as a service, such as Google Cloud Platform (GCP) and Amazon Web Services (AWS), allowing you to easily move data and workloads between different cloud services. Additionally, with Kubeflow's collaboration features, you can work on your projects with your team in real-time, sharing your analysis, code, and results seamlessly. - -Data science experimentation refers to the process of designing, conducting, and analyzing experiments in order to test hypotheses and gain insights from data. This process typically involves several steps: - -1. Formulating a hypothesis: Before conducting an experiment, it is important to have a clear idea of what you are trying to test or learn. This may involve formulating a hypothesis about a relationship between variables, or trying to answer a specific research question. - -2. Designing the experiment: Once you have a hypothesis, you need to design an experiment that will allow you to test it. This may involve selecting a sample of data, choosing variables to manipulate or measure, and deciding on the experimental conditions. - -3. Collecting and cleaning the data: With the experiment designed, you need to collect the data necessary to test your hypothesis. This may involve gathering data from existing sources or conducting your own experiments. Once the data is collected, you need to clean it to remove any errors or anomalies. - -4. Analyzing the data: Once the data is clean, you can begin to analyze it to test your hypothesis. This may involve running statistical tests or machine learning algorithms, visualizing the data to identify patterns or trends, or using other analytical techniques to gain insights. - -5. Drawing conclusions: Based on the results of your analysis, you can draw conclusions about whether your hypothesis is supported or not. You may also be able to identify areas for further research or experimentation. - -Data analysis is a key component of data science experimentation, and involves using various techniques and tools to make sense of large amounts of data. This may involve exploratory data analysis, where you use visualizations and summary statistics to gain an initial understanding of the data, or more advanced techniques such as machine learning or statistical modeling. Data analysis can be used to answer a wide range of questions, from simple descriptive questions about the data to more complex predictive or prescriptive questions. - -In summary, data science experimentation and data analysis are important components of the broader field of data science, and involve using data to test hypotheses, gain insights, and make informed decisions. +_Process data using R, Python, or Julia with Kubeflow, a machine learning +platform that provides a simple, unified, and scalable infrastructure for +machine learning workloads._ + +With Kubeflow, you can process data in a scalable and efficient way using the +programming language of your choice. Once you have Kubeflow set up, use Jupyter +Notebooks to create and share documents that contain live code, equations, or +visualizations. + +You can also run Ubuntu as a virtual desktop with Kubeflow, giving you access to +a powerful development environment that can be customized to your needs. With R +Shiny, a web application framework for R, you can easily create and publish +static and interactive dashboards to communicate your analysis results to +stakeholders. + +Kubeflow also provides integration with external platforms as a service, such as +Google Cloud Platform (GCP) and Amazon Web Services (AWS), allowing you to +easily move data and workloads between different cloud services. Additionally, +with Kubeflow's collaboration features, you can work on your projects with your +team in real-time, sharing your analysis, code, and results seamlessly. + +Data science experimentation refers to the process of designing, conducting, and +analyzing experiments in order to test hypotheses and gain insights from data. +This process typically involves several steps: + +1. Formulating a hypothesis: Before conducting an experiment, it is important to + have a clear idea of what you are trying to test or learn. This may involve + formulating a hypothesis about a relationship between variables, or trying to + answer a specific research question. + +2. Designing the experiment: Once you have a hypothesis, you need to design an + experiment that will allow you to test it. This may involve selecting a + sample of data, choosing variables to manipulate or measure, and deciding on + the experimental conditions. + +3. Collecting and cleaning the data: With the experiment designed, you need to + collect the data necessary to test your hypothesis. This may involve + gathering data from existing sources or conducting your own experiments. Once + the data is collected, you need to clean it to remove any errors or + anomalies. + +4. Analyzing the data: Once the data is clean, you can begin to analyze it to + test your hypothesis. This may involve running statistical tests or machine + learning algorithms, visualizing the data to identify patterns or trends, or + using other analytical techniques to gain insights. + +5. Drawing conclusions: Based on the results of your analysis, you can draw + conclusions about whether your hypothesis is supported or not. You may also + be able to identify areas for further research or experimentation. + +Data analysis is a key component of data science experimentation, and involves +using various techniques and tools to make sense of large amounts of data. This +may involve exploratory data analysis, where you use visualizations and summary +statistics to gain an initial understanding of the data, or more advanced +techniques such as machine learning or statistical modeling. Data analysis can +be used to answer a wide range of questions, from simple descriptive questions +about the data to more complex predictive or prescriptive questions. + +In summary, data science experimentation and data analysis are important +components of the broader field of data science, and involve using data to test +hypotheses, gain insights, and make informed decisions. diff --git a/docs/en/1-Experiments/RStudio.md b/docs/en/1-Experiments/RStudio.md index 46b8f8aca..3c6c95b0d 100644 --- a/docs/en/1-Experiments/RStudio.md +++ b/docs/en/1-Experiments/RStudio.md @@ -28,8 +28,6 @@ analyses into interactive web applications. ![RStudio with R-Shiny](../images/rstudio_rshiny_visual.png) - - ### R Studio _Process data using R or Python in R Studio_ @@ -38,7 +36,17 @@ _Process data using R or Python in R Studio_ [![R or Python in R Studio](../images/RStudio.PNG)](../1-Experiments/RStudio.md) -R Studio is a powerful integrated development environment (IDE) that supports both the R and Python programming languages, making it an ideal choice for data analysts and scientists. With R Studio, you can perform a wide range of data processing tasks, from data cleaning and transformation to statistical analysis and machine learning. The software provides a user-friendly interface and a variety of tools and libraries that simplify complex data analysis tasks. In addition, R Studio makes it easy to share your work with others by creating dynamic, interactive reports and visualizations that can be published online or shared as standalone documents. Overall, R Studio is a versatile and powerful tool that is essential for anyone working with data in R or Python. - -**[R Studio](../1-Experiments/RStudio.md)** gives you an integrated development environment for R and Python. Use the r-studio-cpu image to get an R Studio environment. - +R Studio is a powerful integrated development environment (IDE) that supports +both the R and Python programming languages, making it an ideal choice for data +analysts and scientists. With R Studio, you can perform a wide range of data +processing tasks, from data cleaning and transformation to statistical analysis +and machine learning. The software provides a user-friendly interface and a +variety of tools and libraries that simplify complex data analysis tasks. In +addition, R Studio makes it easy to share your work with others by creating +dynamic, interactive reports and visualizations that can be published online or +shared as standalone documents. Overall, R Studio is a versatile and powerful +tool that is essential for anyone working with data in R or Python. + +**[R Studio](../1-Experiments/RStudio.md)** gives you an integrated development +environment for R and Python. Use the r-studio-cpu image to get an R Studio +environment. diff --git a/docs/en/1-Experiments/Remote-Desktop.md b/docs/en/1-Experiments/Remote-Desktop.md index 1ba8e48be..0c02f5e7a 100644 --- a/docs/en/1-Experiments/Remote-Desktop.md +++ b/docs/en/1-Experiments/Remote-Desktop.md @@ -2,13 +2,23 @@ ### Ubuntu Virtual Desktop -_You can run a full [**Ubuntu Desktop**](https://ubuntu.com/desktop), with typical applications, right inside your browser, using [**Kubeflow!**](https://kubeflow.aaw.cloud.statcan.ca/)_ +_You can run a full [**Ubuntu Desktop**](https://ubuntu.com/desktop), with +typical applications, right inside your browser, using +[**Kubeflow!**](https://kubeflow.aaw.cloud.statcan.ca/)_
[![Virtual Desktop](../images/VirtualDesktop.jpg)](https://novnc.com/info.html)
-The Ubuntu Virtual Desktop is a powerful tool for data scientists and machine learning engineers who need to run resource-intensive workloads in the cloud. Ubuntu is a popular Linux distribution that is widely used in the data science and machine learning communities due to its strong support for open source tools such as R and Python. With the Ubuntu Virtual Desktop, you can quickly spin up a virtual machine with Ubuntu pre-installed and access it from anywhere with an internet connection. This means you can perform data analysis and machine learning tasks from your laptop, tablet, or phone without having to worry about hardware limitations. +The Ubuntu Virtual Desktop is a powerful tool for data scientists and machine +learning engineers who need to run resource-intensive workloads in the cloud. +Ubuntu is a popular Linux distribution that is widely used in the data science +and machine learning communities due to its strong support for open source tools +such as R and Python. With the Ubuntu Virtual Desktop, you can quickly spin up a +virtual machine with Ubuntu pre-installed and access it from anywhere with an +internet connection. This means you can perform data analysis and machine +learning tasks from your laptop, tablet, or phone without having to worry about +hardware limitations. ## What is Remote Desktop? @@ -47,37 +57,37 @@ fullscreen and clipboard access. ## Accessing the Clipboard -This is done via the second button from the top of the panel on the left. -It brings up a text box which we can modify to change the contents of the clipboard +This is done via the second button from the top of the panel on the left. It +brings up a text box which we can modify to change the contents of the clipboard or copy stuff from the clipboard of the remote desktop. -For example, suppose we want to execute the command `head -c 20 /dev/urandom | md5sum` -and copy-paste the result into a text file on our computer used to connect to the -remote desktop. +For example, suppose we want to execute the command +`head -c 20 /dev/urandom | md5sum` and copy-paste the result into a text file on +our computer used to connect to the remote desktop. -We first open the clipboard from the panel on the left and paste in that command into -the text box: +We first open the clipboard from the panel on the left and paste in that command +into the text box: ![Clipboard Paste Command from Computer](../images/rd-clipboard-send-to-rd.png) -To close the clipboard window over the remote desktop, simply click the clipboard -button again. +To close the clipboard window over the remote desktop, simply click the +clipboard button again. -We then right click on a terminal window to paste in that command and press enter to -execute the command. At that point we select the MD5 result, right click, and click -copy: +We then right click on a terminal window to paste in that command and press +enter to execute the command. At that point we select the MD5 result, right +click, and click copy: ![Copy to Clipboard from Remote Desktop](../images/rd-clipboard-copy-from-rd.png) -If we open the clipboard from the panel on the left again, it will now have the new -contents: +If we open the clipboard from the panel on the left again, it will now have the +new contents: ![Copy to Clipboard from Remote Desktop](../images/rd-clipboard-copy-from-rd.png) -The clipboard window will even update in-place if we leave it open the whole time -and we simply select new material on the remote desktop and press copy again. We can -simply copy what we have in that text box and paste it into any other software running -on the computer used to connect. +The clipboard window will even update in-place if we leave it open the whole +time and we simply select new material on the remote desktop and press copy +again. We can simply copy what we have in that text box and paste it into any +other software running on the computer used to connect. ## In-browser Tools diff --git a/docs/en/2-Publishing/Dash.md b/docs/en/2-Publishing/Dash.md index 882672741..1cbe51b72 100644 --- a/docs/en/2-Publishing/Dash.md +++ b/docs/en/2-Publishing/Dash.md @@ -31,7 +31,16 @@ This is an example of a Layout With Figure and Slider from _Publish with Canadian-made software._ -**[Plotly Dash](/2-Publishing/Dash/)** is a popular Python library that allows you to create interactive web-based visualizations and dashboards with ease. Developed by the Montreal-based company Plotly, Dash has gained a reputation for being a powerful and flexible tool for building custom data science graphics. With Dash, you can create everything from simple line charts to complex, multi-page dashboards with interactive widgets and controls. Because it's built on open source technologies like Flask, React, and Plotly.js, Dash is highly customizable and can be easily integrated with other data science tools and workflows. Whether you're a data scientist, analyst, or developer, Dash can help you create engaging and informative visualizations that bring your data to life. +**[Plotly Dash](/2-Publishing/Dash/)** is a popular Python library that allows +you to create interactive web-based visualizations and dashboards with ease. +Developed by the Montreal-based company Plotly, Dash has gained a reputation for +being a powerful and flexible tool for building custom data science graphics. +With Dash, you can create everything from simple line charts to complex, +multi-page dashboards with interactive widgets and controls. Because it's built +on open source technologies like Flask, React, and Plotly.js, Dash is highly +customizable and can be easily integrated with other data science tools and +workflows. Whether you're a data scientist, analyst, or developer, Dash can help +you create engaging and informative visualizations that bring your data to life. # Getting Started diff --git a/docs/en/2-Publishing/Overview.md b/docs/en/2-Publishing/Overview.md index 3c07cbeb0..c6a6b0458 100644 --- a/docs/en/2-Publishing/Overview.md +++ b/docs/en/2-Publishing/Overview.md @@ -1,14 +1,37 @@ - ## Statistical Publishing -_Beautiful graphics is important in statistical publishing because it makes the data more accessible and understandable to a wider audience._ +_Beautiful graphics is important in statistical publishing because it makes the +data more accessible and understandable to a wider audience._ -Publishing is an essential aspect of data science and statistics. It allows researchers to share their findings with the broader scientific community, enabling others to build upon their work and push the field forward. By sharing their data and methods openly, researchers can receive feedback on their work and ensure that their findings are accurate and reliable. +Publishing is an essential aspect of data science and statistics. It allows +researchers to share their findings with the broader scientific community, +enabling others to build upon their work and push the field forward. By sharing +their data and methods openly, researchers can receive feedback on their work +and ensure that their findings are accurate and reliable. -Publishing allows researchers to establish their reputation and gain recognition for their work, which can help secure funding and future research opportunities. In addition, publishing research findings can have important implications for public policy and decision-making, as policymakers often rely on scientific evidence to make informed decisions. Overall, publishing is an integral part of the scientific process and plays a critical role in advancing knowledge and solving real-world problems. +Publishing allows researchers to establish their reputation and gain recognition +for their work, which can help secure funding and future research opportunities. +In addition, publishing research findings can have important implications for +public policy and decision-making, as policymakers often rely on scientific +evidence to make informed decisions. Overall, publishing is an integral part of +the scientific process and plays a critical role in advancing knowledge and +solving real-world problems. -Statistical publishing involves communicating statistical information to a broader audience using various forms of media, such as charts, graphs, and infographics. Having beautiful graphics is important in statistical publishing because it makes the data more accessible and understandable to a wider audience. Well-designed visualizations can help communicate complex statistical concepts and patterns in a clear and compelling way, allowing the audience to quickly grasp the main insights and conclusions. +Statistical publishing involves communicating statistical information to a +broader audience using various forms of media, such as charts, graphs, and +infographics. Having beautiful graphics is important in statistical publishing +because it makes the data more accessible and understandable to a wider +audience. Well-designed visualizations can help communicate complex statistical +concepts and patterns in a clear and compelling way, allowing the audience to +quickly grasp the main insights and conclusions. -Beautiful graphics can enhance the overall impact of statistical publications, making them more engaging and memorable. This can be particularly important when communicating important information to decision-makers, stakeholders, or the general public, where the ability to clearly and effectively communicate data-driven insights can be critical to achieving success. +Beautiful graphics can enhance the overall impact of statistical publications, +making them more engaging and memorable. This can be particularly important when +communicating important information to decision-makers, stakeholders, or the +general public, where the ability to clearly and effectively communicate +data-driven insights can be critical to achieving success. -In summary, data science and statistical publishing are essential for turning complex data into meaningful insights, and having beautiful graphics is a crucial aspect of effectively communicating those insights to a broader audience. \ No newline at end of file +In summary, data science and statistical publishing are essential for turning +complex data into meaningful insights, and having beautiful graphics is a +crucial aspect of effectively communicating those insights to a broader +audience. diff --git a/docs/en/2-Publishing/R-Shiny.md b/docs/en/2-Publishing/R-Shiny.md index f03960d42..9986149ec 100644 --- a/docs/en/2-Publishing/R-Shiny.md +++ b/docs/en/2-Publishing/R-Shiny.md @@ -1,6 +1,6 @@ # Overview -R-Shiny is an R package that makes it easy to build interactive web apps in R. +R-Shiny is an R package that makes it easy to build interactive web apps in R. !!! info "R Shiny App Hosting" @@ -14,25 +14,47 @@ _Publish Professional Quality Graphics_ [![InteractiveDashboard](../images/InteractiveDashboard.PNG)](/2-Publishing/R-Shiny/) -R Shiny is an open source web application framework that allows data scientists and analysts to create interactive, web-based dashboards and data visualizations using the R programming language. One of the main advantages of R Shiny is that it offers a straightforward way to create high-quality, interactive dashboards without the need for extensive web development expertise. With R Shiny, data scientists can leverage their R coding skills to create dynamic, data-driven web applications that can be shared easily with stakeholders. - -Another advantage of R Shiny is that it supports a variety of data visualizations that can be easily customized to meet the needs of the project. Users can create a wide range of charts and graphs, from simple bar charts and scatter plots to more complex heatmaps and network graphs. Additionally, R Shiny supports a variety of interactive widgets that allow users to manipulate and explore data in real-time. +R Shiny is an open source web application framework that allows data scientists +and analysts to create interactive, web-based dashboards and data visualizations +using the R programming language. One of the main advantages of R Shiny is that +it offers a straightforward way to create high-quality, interactive dashboards +without the need for extensive web development expertise. With R Shiny, data +scientists can leverage their R coding skills to create dynamic, data-driven web +applications that can be shared easily with stakeholders. + +Another advantage of R Shiny is that it supports a variety of data +visualizations that can be easily customized to meet the needs of the project. +Users can create a wide range of charts and graphs, from simple bar charts and +scatter plots to more complex heatmaps and network graphs. Additionally, R Shiny +supports a variety of interactive widgets that allow users to manipulate and +explore data in real-time. ![R Shiny Server](../images/readme/shiny_ui.png) -R Shiny is also highly extensible and can be integrated with other open source tools and platforms to build end-to-end data science workflows. With its powerful and flexible features, R Shiny is a popular choice for building data visualization dashboards for a wide range of applications, from scientific research to business analytics. Overall, R Shiny offers a powerful, customizable, and cost-effective solution for creating interactive dashboards and data visualizations. +R Shiny is also highly extensible and can be integrated with other open source +tools and platforms to build end-to-end data science workflows. With its +powerful and flexible features, R Shiny is a popular choice for building data +visualization dashboards for a wide range of applications, from scientific +research to business analytics. Overall, R Shiny offers a powerful, +customizable, and cost-effective solution for creating interactive dashboards +and data visualizations. -Use **[R-Shiny](/2-Publishing/R-Shiny/)** to build interactive web apps straight from R. You can deploy your R Shiny dashboard by submitting a pull request to our [R-Dashboards GitHub repository](https://github.com/StatCan/R-dashboards). +Use **[R-Shiny](/2-Publishing/R-Shiny/)** to build interactive web apps straight +from R. You can deploy your R Shiny dashboard by submitting a pull request to +our [R-Dashboards GitHub repository](https://github.com/StatCan/R-dashboards). # R Shiny UI Editor -The following Rscript installs the required packages to run `shinyuieditor` on the AAW. It starts with installing the necessary R packages and uses `conda` to install `yarn`. +The following Rscript installs the required packages to run `shinyuieditor` on +the AAW. It starts with installing the necessary R packages and uses `conda` to +install `yarn`. Once the installation has finished you can access your app's code in `./my-app` -Run this script from inside `rstudio`. RStudio may ask for permission to open a new window if you have a popup blocker. +Run this script from inside `rstudio`. RStudio may ask for permission to open a +new window if you have a popup blocker. -``` r title="setup-shinyuieditor.R" linenums="1" +```r title="setup-shinyuieditor.R" linenums="1" #!/usr/bin/env Rscript #' Install necessary packages @@ -46,7 +68,7 @@ install.packages(c( )) #' Was not installing when installing in the above -install.packages("DT") +install.packages("DT") #' This installs shinyuieditor from Github remotes::install_github("rstudio/shinyuieditor", upgrade = F) @@ -73,23 +95,26 @@ shinyuieditor::launch_editor(app_loc = "./") ### Choose an App Template -The first thing you'll see is the template chooser. There are three options as of this writing (`shinyuieditor` is currently in alpha). +The first thing you'll see is the template chooser. There are three options as +of this writing (`shinyuieditor` is currently in alpha). ![image](https://user-images.githubusercontent.com/8212170/229583104-9404ad01-26cd-4260-bce6-6fe32ffab7d8.png) ### Single or Multi File Mode -I recommend **Multi file mode**, this will put the back-end code in a file called `server.R` and front-end in a file called `ui.R`. +I recommend **Multi file mode**, this will put the back-end code in a file +called `server.R` and front-end in a file called `ui.R`. ![image](https://user-images.githubusercontent.com/8212170/229584803-452bcdb9-4aa6-4902-805e-845d0b939016.png) ### Design Your App -You can design your app with either code or the graphical user interface. Try designing the layout with the GUI and designing the plots with code. +You can design your app with either code or the graphical user interface. Try +designing the layout with the GUI and designing the plots with code. ![image](https://user-images.githubusercontent.com/8212170/229589867-19bf334c-4789-4228-99ec-44583b119e29.png) -Any changes you make in `shinyuieditor` will appear immediately in the code. +Any changes you make in `shinyuieditor` will appear immediately in the code. ![image](https://user-images.githubusercontent.com/8212170/229637808-38dc0ed3-902a-44db-bfa0-193ef25af6ca.png) @@ -101,9 +126,14 @@ Any change you make in the code will immediately appear in the `shinyuieditor`. ### Just send a pull request! -All you have to do is send a pull request to [our R-Dashboards repository](https://github.com/StatCan/R-dashboards). Include your repository in a folder with the name you want (for example, "air-quality-dashboard"). Then we will approve it and it will come online. +All you have to do is send a pull request to +[our R-Dashboards repository](https://github.com/StatCan/R-dashboards). Include +your repository in a folder with the name you want (for example, +"air-quality-dashboard"). Then we will approve it and it will come online. -If you need extra R libraries to be installed, send your list to [the R-Shiny repository](https://github.com/StatCan/shiny) by creating a GitHub Issue and we will add the dependencies. +If you need extra R libraries to be installed, send your list to +[the R-Shiny repository](https://github.com/StatCan/shiny) by creating a GitHub +Issue and we will add the dependencies. ![Example Dashboard](../images/example_shiny_dashboard.png) diff --git a/docs/en/3-Pipelines/Kubeflow-Pipelines.md b/docs/en/3-Pipelines/Kubeflow-Pipelines.md index 96a50082a..b412bbc78 100644 --- a/docs/en/3-Pipelines/Kubeflow-Pipelines.md +++ b/docs/en/3-Pipelines/Kubeflow-Pipelines.md @@ -627,9 +627,9 @@ pipeline parameters. Although small data can often be stringified, passing by string is not suitable for complex data (large parquet files, images, etc.). It is common to use blob -storage (for example: [MinIO](../5-Storage/AzureBlobStorage.md)) or other outside storage -methods to persist data between components or even for later use. A typical -pattern would be: +storage (for example: [MinIO](../5-Storage/AzureBlobStorage.md)) or other +outside storage methods to persist data between components or even for later +use. A typical pattern would be: - Upload large/complex input data to blob storage (e.g. training data, a saved model, etc.) diff --git a/docs/en/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md b/docs/en/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md index 13c995096..e8b2cceca 100644 --- a/docs/en/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md +++ b/docs/en/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md @@ -4,15 +4,37 @@ !!! info "Protected B" The AAW is certified for hosting Protected B data! -In order to upload Protected B data to the AAW, users will need to request access through the Customer Success Unit (CSU). AAW users will also need to provide a namespace, get a sponsor and get approval from OPMIC. Once the process has been approved, our Fair Data Infrastructure (FDI) team will then create a folder on Net A which in turn will give access to user(s) through the active directory. The data will then be able to transfer from Net A to AAW Cloud - -Storing machine learning models in a protected cloud storage environment is essential for ensuring the security and privacy of sensitive data. The Advanced Analytics Workspace (AAW) provides a secure and robust cloud storage environment that can be used to store machine learning models and other data assets. - -The AAW platform provides a protected cloud storage environment that is designed to meet the most stringent data security and privacy requirements. The storage environment is protected by industry-standard encryption and access controls, which ensures that only authorized personnel can access sensitive data. This protects against unauthorized access, data breaches, and other security threats. - -In addition to its robust security features, the AAW cloud storage environment is also highly scalable and flexible. This means that data scientists and machine learning engineers can easily scale their storage needs as their datasets and model sizes grow. This enables them to store and manage large volumes of data and models without having to worry about storage limitations or performance bottlenecks. - -Storing machine learning models in a protected cloud storage environment on the Advanced Analytics Workspace provides a secure, scalable, and flexible solution for managing and protecting sensitive data. By leveraging the cloud storage capabilities provided by the AAW platform, data scientists and machine learning engineers can focus on building and deploying their models with confidence, knowing that their data is protected and secure. +In order to upload Protected B data to the AAW, users will need to request +access through the Customer Success Unit (CSU). AAW users will also need to +provide a namespace, get a sponsor and get approval from OPMIC. Once the process +has been approved, our Fair Data Infrastructure (FDI) team will then create a +folder on Net A which in turn will give access to user(s) through the active +directory. The data will then be able to transfer from Net A to AAW Cloud + +Storing machine learning models in a protected cloud storage environment is +essential for ensuring the security and privacy of sensitive data. The Advanced +Analytics Workspace (AAW) provides a secure and robust cloud storage environment +that can be used to store machine learning models and other data assets. + +The AAW platform provides a protected cloud storage environment that is designed +to meet the most stringent data security and privacy requirements. The storage +environment is protected by industry-standard encryption and access controls, +which ensures that only authorized personnel can access sensitive data. This +protects against unauthorized access, data breaches, and other security threats. + +In addition to its robust security features, the AAW cloud storage environment +is also highly scalable and flexible. This means that data scientists and +machine learning engineers can easily scale their storage needs as their +datasets and model sizes grow. This enables them to store and manage large +volumes of data and models without having to worry about storage limitations or +performance bottlenecks. + +Storing machine learning models in a protected cloud storage environment on the +Advanced Analytics Workspace provides a secure, scalable, and flexible solution +for managing and protecting sensitive data. By leveraging the cloud storage +capabilities provided by the AAW platform, data scientists and machine learning +engineers can focus on building and deploying their models with confidence, +knowing that their data is protected and secure. ## Cloud Storage @@ -20,11 +42,25 @@ Storing machine learning models in a protected cloud storage environment on the !!! info "Cloud Storage Advantages" Cloud storage offers several advantages for data science and machine learning, particularly in terms of scalability, accessibility, and cost-effectiveness. -Firstly, cloud storage enables data scientists to store and process large amounts of data without having to worry about the limitations of local storage. This is particularly important in the context of machine learning, where large datasets are required for training and testing models. Cloud storage allows data scientists to scale up their storage capacity as needed, without having to invest in expensive hardware. - -Secondly, cloud storage allows data scientists to access data from anywhere, using any device with an internet connection. This enables collaboration across geographically distributed teams and allows data scientists to work remotely. Additionally, cloud storage makes it easier to share data with other stakeholders, such as business partners or customers. Finally, cloud storage is typically more cost-effective than on-premises storage, particularly for smaller organizations or those with limited IT resources. - -Overall, cloud storage is a reliable and convenient solution for storing and managing your data. Whether you need to store large amounts of data or just a few files, cloud storage makes it easy to manage your storage needs without the hassle of traditional storage solutions. +Firstly, cloud storage enables data scientists to store and process large +amounts of data without having to worry about the limitations of local storage. +This is particularly important in the context of machine learning, where large +datasets are required for training and testing models. Cloud storage allows data +scientists to scale up their storage capacity as needed, without having to +invest in expensive hardware. + +Secondly, cloud storage allows data scientists to access data from anywhere, +using any device with an internet connection. This enables collaboration across +geographically distributed teams and allows data scientists to work remotely. +Additionally, cloud storage makes it easier to share data with other +stakeholders, such as business partners or customers. Finally, cloud storage is +typically more cost-effective than on-premises storage, particularly for smaller +organizations or those with limited IT resources. + +Overall, cloud storage is a reliable and convenient solution for storing and +managing your data. Whether you need to store large amounts of data or just a +few files, cloud storage makes it easy to manage your storage needs without the +hassle of traditional storage solutions. The AAW platform provides several types of storage: @@ -32,31 +68,61 @@ The AAW platform provides several types of storage: - Buckets ("Blob" or S3 storage, provided through MinIO) - Data Lakes (coming soon) -Depending on your use case, either disk or bucket may be most suitable. Our [storage overview](../5-Storage/Overview.md) will help you compare them. +Depending on your use case, either disk or bucket may be most suitable. Our +[storage overview](../5-Storage/Overview.md) will help you compare them. ### Disks [![Disks](../images/Disks.PNG)](Storage.md/) -**[Disks](../5-Storage/Disks.md)** are added to your notebook server by adding Data Volumes. +**[Disks](../5-Storage/Disks.md)** are added to your notebook server by adding +Data Volumes. ### Buckets -MinIO is an S3-API compatible object storage system that provides an open source alternative to proprietary cloud storage services. While we currently use MinIO as our cloud storage solution, we plan on replacing it with s3-proxy in the near future. S3-proxy is a lightweight, open source reverse proxy server that allows you to access Amazon S3-compatible storage services with your existing applications. By switching to s3-proxy, we will be able to improve our cloud storage performance, security, and scalability, while maintaining compatibility with the S3 API. +MinIO is an S3-API compatible object storage system that provides an open source +alternative to proprietary cloud storage services. While we currently use MinIO +as our cloud storage solution, we plan on replacing it with s3-proxy in the near +future. S3-proxy is a lightweight, open source reverse proxy server that allows +you to access Amazon S3-compatible storage services with your existing +applications. By switching to s3-proxy, we will be able to improve our cloud +storage performance, security, and scalability, while maintaining compatibility +with the S3 API. [![MinIO](../images/Buckets.PNG)](AzureBlobStorage.md/) -**[MinIO](../5-Storage/AzureBlobStorage.md)** is a cloud-native scalable object store. We use it for buckets (blob or S3 storage). +**[MinIO](../5-Storage/AzureBlobStorage.md)** is a cloud-native scalable object +store. We use it for buckets (blob or S3 storage). ### Data Lakes (Coming Soon) -A data lake is a central repository that allows you to store all your structured and unstructured data at any scale. It's a cost-effective way to store and manage all types of data, from raw data to processed data, and it's an essential tool for data scientists. - -One of the primary advantages of a data lake is its flexibility. It allows you to store all types of data without the need to define a schema in advance, which is especially useful when dealing with unstructured data. This flexibility allows data scientists to easily explore, experiment, and extract insights from their data without being constrained by the limitations of a traditional relational database. - -Data lakes also enable data scientists to centralize their data, making it easier to manage and analyze large volumes of data from various sources. With a data lake, data scientists can easily ingest and store data from a variety of sources, such as databases, cloud storage, and third-party APIs. Additionally, data lakes often provide features for data governance, metadata management, and access control, which helps ensure the data is of high quality and compliant with relevant regulations. - -Furthermore, cloud-based data lakes provide scalable, cost-effective storage solutions that can be easily expanded at the click of a button. As a data scientist's data storage needs grow, they can add additional storage capacity to their data lake with minimal effort, without worrying about the underlying infrastructure or maintenance. - -Overall, data lakes are a critical tool for data scientists, as they provide the flexibility, scalability, and ease of use needed to store and manage large volumes of data, enabling data scientists to focus on extracting insights and value from the data. - +A data lake is a central repository that allows you to store all your structured +and unstructured data at any scale. It's a cost-effective way to store and +manage all types of data, from raw data to processed data, and it's an essential +tool for data scientists. + +One of the primary advantages of a data lake is its flexibility. It allows you +to store all types of data without the need to define a schema in advance, which +is especially useful when dealing with unstructured data. This flexibility +allows data scientists to easily explore, experiment, and extract insights from +their data without being constrained by the limitations of a traditional +relational database. + +Data lakes also enable data scientists to centralize their data, making it +easier to manage and analyze large volumes of data from various sources. With a +data lake, data scientists can easily ingest and store data from a variety of +sources, such as databases, cloud storage, and third-party APIs. Additionally, +data lakes often provide features for data governance, metadata management, and +access control, which helps ensure the data is of high quality and compliant +with relevant regulations. + +Furthermore, cloud-based data lakes provide scalable, cost-effective storage +solutions that can be easily expanded at the click of a button. As a data +scientist's data storage needs grow, they can add additional storage capacity to +their data lake with minimal effort, without worrying about the underlying +infrastructure or maintenance. + +Overall, data lakes are a critical tool for data scientists, as they provide the +flexibility, scalability, and ease of use needed to store and manage large +volumes of data, enabling data scientists to focus on extracting insights and +value from the data. diff --git a/docs/en/3-Pipelines/Machine-Learning-Model-Serving.md b/docs/en/3-Pipelines/Machine-Learning-Model-Serving.md index 2b02e2e10..f05342e68 100644 --- a/docs/en/3-Pipelines/Machine-Learning-Model-Serving.md +++ b/docs/en/3-Pipelines/Machine-Learning-Model-Serving.md @@ -1,39 +1,99 @@ # Introduction to Model Serving -In the context of governments, serving machine learning models means making trained models available for use by other applications and systems. This could include making predictions or classifications based on input data, or providing insights and recommendations based on the results of data analysis. - -Serving machine learning models in a government context raises important issues related to data privacy. Government agencies are often responsible for collecting and managing sensitive personal data, such as health records, financial data, and criminal records. When serving machine learning models, it's critical to ensure that this data is protected and that access to it is strictly controlled. - -To address these concerns, government agencies must implement robust data privacy and security measures when serving machine learning models. This could include encrypting data both at rest and in transit, implementing access controls and user authentication, and regularly monitoring for data breaches and vulnerabilities. - -In addition to data privacy and security, it's also important to consider the ethical implications of serving machine learning models in a government context. Machine learning models can be biased or discriminatory, leading to unfair treatment of certain groups of people. To mitigate these risks, government agencies must carefully evaluate and monitor their machine learning models, and take steps to address any biases or discrimination that may arise. - -Overall, serving machine learning models in a government context requires careful consideration of data privacy, security, and ethical concerns. By implementing robust measures to protect personal data and prevent bias, government agencies can leverage the power of machine learning to make better decisions and improve outcomes for citizens while maintaining trust and transparency. +In the context of governments, serving machine learning models means making +trained models available for use by other applications and systems. This could +include making predictions or classifications based on input data, or providing +insights and recommendations based on the results of data analysis. + +Serving machine learning models in a government context raises important issues +related to data privacy. Government agencies are often responsible for +collecting and managing sensitive personal data, such as health records, +financial data, and criminal records. When serving machine learning models, it's +critical to ensure that this data is protected and that access to it is strictly +controlled. + +To address these concerns, government agencies must implement robust data +privacy and security measures when serving machine learning models. This could +include encrypting data both at rest and in transit, implementing access +controls and user authentication, and regularly monitoring for data breaches and +vulnerabilities. + +In addition to data privacy and security, it's also important to consider the +ethical implications of serving machine learning models in a government context. +Machine learning models can be biased or discriminatory, leading to unfair +treatment of certain groups of people. To mitigate these risks, government +agencies must carefully evaluate and monitor their machine learning models, and +take steps to address any biases or discrimination that may arise. + +Overall, serving machine learning models in a government context requires +careful consideration of data privacy, security, and ethical concerns. By +implementing robust measures to protect personal data and prevent bias, +government agencies can leverage the power of machine learning to make better +decisions and improve outcomes for citizens while maintaining trust and +transparency. ## Why serve with us? -Serving machine learning models with the Advanced Analytics Workspace (AAW) has several advantages. First, the AAW is an open-source data analytics platform that provides access to a variety of advanced analytics tools, including Python, R, and SAS. This makes it easy to deploy machine learning models and integrate them into existing workflows. - -Second, the AAW supports multiple MLOps frameworks, including Couler, Seldon, and Argo Workflows. These frameworks provide a range of features, including model versioning, model serving, and model monitoring, that simplify the process of deploying and managing machine learning models in production. - -Third, the AAW provides a secure and scalable platform for serving machine learning models with Protected B status. Models can be served using containerized environments, such as Docker, which provide a high level of isolation and security. The AAW also provides access to cloud computing resources, allowing users to scale up their compute power as needed to handle high volumes of requests. - -Finally, the AAW is a collaborative platform that allows users to share code and data with other researchers and analysts. This fosters a community of users who can learn from each other's work and collaborate on projects that require advanced analytics capabilities. - -In summary, serving machine learning models with the Advanced Analytics Workspace provides access to advanced analytics tools, multiple MLOps frameworks, a secure and scalable Proteced B platform, and a collaborative community of users, making it an ideal platform for data scientists and analysts who want to deploy and manage machine learning models in production. +Serving machine learning models with the Advanced Analytics Workspace (AAW) has +several advantages. First, the AAW is an open-source data analytics platform +that provides access to a variety of advanced analytics tools, including Python, +R, and SAS. This makes it easy to deploy machine learning models and integrate +them into existing workflows. + +Second, the AAW supports multiple MLOps frameworks, including Couler, Seldon, +and Argo Workflows. These frameworks provide a range of features, including +model versioning, model serving, and model monitoring, that simplify the process +of deploying and managing machine learning models in production. + +Third, the AAW provides a secure and scalable platform for serving machine +learning models with Protected B status. Models can be served using +containerized environments, such as Docker, which provide a high level of +isolation and security. The AAW also provides access to cloud computing +resources, allowing users to scale up their compute power as needed to handle +high volumes of requests. + +Finally, the AAW is a collaborative platform that allows users to share code and +data with other researchers and analysts. This fosters a community of users who +can learn from each other's work and collaborate on projects that require +advanced analytics capabilities. + +In summary, serving machine learning models with the Advanced Analytics +Workspace provides access to advanced analytics tools, multiple MLOps +frameworks, a secure and scalable Proteced B platform, and a collaborative +community of users, making it an ideal platform for data scientists and analysts +who want to deploy and manage machine learning models in production. ## Seldon Core -Seldon Core is an open-source platform for deploying, scaling, and monitoring machine learning models on Kubernetes. It provides a simple and efficient way to deploy machine learning models as microservices in a production environment. +Seldon Core is an open-source platform for deploying, scaling, and monitoring +machine learning models on Kubernetes. It provides a simple and efficient way to +deploy machine learning models as microservices in a production environment. Serving machine learning models using Seldon Core involves the following steps: -1. Model packaging: The first step is to package the trained machine learning model in a container image with all the required dependencies. Seldon Core supports various machine learning frameworks, including TensorFlow, PyTorch, and Scikit-learn. - -2. Model deployment: Once the container image is created, the next step is to deploy the model on Kubernetes using Seldon Core. This involves defining the deployment configuration file, which specifies the resources required for the deployment, such as the number of replicas and the compute resources. - -3. Model serving: Once the model is deployed, Seldon Core exposes a REST API endpoint that can be used to make predictions. Clients can send requests to the endpoint with input data, and the model will return the corresponding output. Seldon Core also supports various deployment patterns, such as canary deployment and A/B testing, to enable easy experimentation and testing of different models. - -4. Model monitoring: Seldon Core provides various monitoring capabilities to track the performance of deployed models. This includes real-time monitoring of model metrics, such as latency and throughput, as well as logging of request and response data for debugging purposes. - -Seldon Core makes it easy to serve machine learning models at scale, with support for high availability, scalability, and fault tolerance. It also provides integration with various Kubernetes-native tools, such as Istio and Prometheus, to enable advanced monitoring and observability. +1. Model packaging: The first step is to package the trained machine learning + model in a container image with all the required dependencies. Seldon Core + supports various machine learning frameworks, including TensorFlow, PyTorch, + and Scikit-learn. + +2. Model deployment: Once the container image is created, the next step is to + deploy the model on Kubernetes using Seldon Core. This involves defining the + deployment configuration file, which specifies the resources required for the + deployment, such as the number of replicas and the compute resources. + +3. Model serving: Once the model is deployed, Seldon Core exposes a REST API + endpoint that can be used to make predictions. Clients can send requests to + the endpoint with input data, and the model will return the corresponding + output. Seldon Core also supports various deployment patterns, such as canary + deployment and A/B testing, to enable easy experimentation and testing of + different models. + +4. Model monitoring: Seldon Core provides various monitoring capabilities to + track the performance of deployed models. This includes real-time monitoring + of model metrics, such as latency and throughput, as well as logging of + request and response data for debugging purposes. + +Seldon Core makes it easy to serve machine learning models at scale, with +support for high availability, scalability, and fault tolerance. It also +provides integration with various Kubernetes-native tools, such as Istio and +Prometheus, to enable advanced monitoring and observability. diff --git a/docs/en/3-Pipelines/Machine-Learning-Training-Pipelines.md b/docs/en/3-Pipelines/Machine-Learning-Training-Pipelines.md index 5e1cb8424..b75a239bd 100644 --- a/docs/en/3-Pipelines/Machine-Learning-Training-Pipelines.md +++ b/docs/en/3-Pipelines/Machine-Learning-Training-Pipelines.md @@ -6,17 +6,32 @@ !!! info - Training machine learning models involves using algorithms to learn patterns and relationships in data. This process involves identifying features or variables that are relevant to the problem at hand and using these features to make predictions or classifications. + Training machine learning models involves using algorithms to learn patterns and relationships in data. This process involves identifying features or variables that are relevant to the problem at hand and using these features to make predictions or classifications. ## Why train with us? -_Training machine learning models on the Advanced Analytics Workspace (AAW) has several advantages._ +_Training machine learning models on the Advanced Analytics Workspace (AAW) has +several advantages._ -1. **Open Source:** The AAW is an *open source data platform hosted by Statistics Canada* that provides secure (Protected B) access to a variety of data sources, including census data, surveys, and administrative records. This data can be used to train machine learning models and generate insights that can inform policy decisions and improve business processes. +1. **Open Source:** The AAW is an _open source data platform hosted by + Statistics Canada_ that provides secure (Protected B) access to a variety of + data sources, including census data, surveys, and administrative records. + This data can be used to train machine learning models and generate insights + that can inform policy decisions and improve business processes. -2. **Versatile:** The AAW is *designed to handle large and complex datasets*. It provides access to a range of advanced analytics tools, in any language you like, including *Python, R, and SAS*, which can be used to preprocess data, train machine learning models, and generate visualizations. *Because the AAW leverages cloud technologies, *users can scale up their computing power as needed*. -* -3. **Secure:** The AAW is a *secure platform (Protected B) that adheres to the highest standards of data privacy and security*. Data can be stored and processed on the platform without risk of unauthorized access or data breaches. +2. **Versatile:** The AAW is _designed to handle large and complex datasets_. It + provides access to a range of advanced analytics tools, in any language you + like, including _Python, R, and SAS_, which can be used to preprocess data, + train machine learning models, and generate visualizations. *Because the AAW + leverages cloud technologies, *users can scale up their computing power as + needed\*. + +- + +3. **Secure:** The AAW is a _secure platform (Protected B) that adheres to the + highest standards of data privacy and security_. Data can be stored and + processed on the platform without risk of unauthorized access or data + breaches. ## MLOps and Data Pipelines @@ -26,11 +41,19 @@ _Training machine learning models on the Advanced Analytics Workspace (AAW) has ### MLOps -MLOps refers to the set of practices and tools used to manage the entire lifecycle of a machine learning model. This includes everything from developing and training the model to deploying it in production and maintaining it over time. MLOps ensures that machine learning models are reliable, accurate, and scalable, and that they can be updated and improved as needed. +MLOps refers to the set of practices and tools used to manage the entire +lifecycle of a machine learning model. This includes everything from developing +and training the model to deploying it in production and maintaining it over +time. MLOps ensures that machine learning models are reliable, accurate, and +scalable, and that they can be updated and improved as needed. ### Data Pipelines -Data pipelines are a series of steps that help move data from one system or application to another. This includes collecting, cleaning, transforming, and storing data, as well as retrieving it when needed. Data pipelines are important for ensuring that data is accurate, reliable, and accessible to those who need it. +Data pipelines are a series of steps that help move data from one system or +application to another. This includes collecting, cleaning, transforming, and +storing data, as well as retrieving it when needed. Data pipelines are important +for ensuring that data is accurate, reliable, and accessible to those who need +it. !!! info "Automation and Reliability" @@ -38,27 +61,44 @@ Data pipelines are a series of steps that help move data from one system or appl ### Why Containerized MLOps? -The advantages of using a containerized approach for training machine learning models with Argo Workflows include: +The advantages of using a containerized approach for training machine learning +models with Argo Workflows include: -1. **Reproducibility:** Containerizing the machine learning model and its dependencies ensures that the environment remains consistent across different runs, making it easy to reproduce results. +1. **Reproducibility:** Containerizing the machine learning model and its + dependencies ensures that the environment remains consistent across different + runs, making it easy to reproduce results. -2. **Scalability:** Argo Workflows can orchestrate parallel jobs and complex workflows, making it easy to scale up the training process as needed. +2. **Scalability:** Argo Workflows can orchestrate parallel jobs and complex + workflows, making it easy to scale up the training process as needed. -3. **Portability:** Containers can be run on any platform that supports containerization, making it easy to move the training process to different environments or cloud providers. +3. **Portability:** Containers can be run on any platform that supports + containerization, making it easy to move the training process to different + environments or cloud providers. -4. **Collaboration:** By pushing the container to a container registry, other users can easily download and use the container for their own purposes, making it easy to collaborate on machine learning projects. +4. **Collaboration:** By pushing the container to a container registry, other + users can easily download and use the container for their own purposes, + making it easy to collaborate on machine learning projects. -Argo Workflows and containerization provide a powerful and flexible approach for training machine learning models. By leveraging these tools, data scientists and machine learning engineers can build, deploy, and manage machine learning workflows with ease and reproducibility. +Argo Workflows and containerization provide a powerful and flexible approach for +training machine learning models. By leveraging these tools, data scientists and +machine learning engineers can build, deploy, and manage machine learning +workflows with ease and reproducibility. ## How to Train Models -There are multiple ways to train machine learning models and it is not our place to tell anyone how to do it. That being said we have provided below a couple of guides on how to train machine learning models using the tools available on the AAW. The first tutorial is about training a simple model directly in a JupyterLab notebook. The second tutorial assumes the user is more advanced and is interested in defining an MLOps pipeline for training models using Argo Workflows. +There are multiple ways to train machine learning models and it is not our place +to tell anyone how to do it. That being said we have provided below a couple of +guides on how to train machine learning models using the tools available on the +AAW. The first tutorial is about training a simple model directly in a +JupyterLab notebook. The second tutorial assumes the user is more advanced and +is interested in defining an MLOps pipeline for training models using Argo +Workflows. ### Create a Notebook Server on the AAW !!! info "Notebook Servers" - Regardless of whether you plan on working in JupyterLab, R Studio or something more advanced with Argo Workflows, you'll need the appropriate notebook server. [Follow the instructions found here to get started.](https://docs.google.com/presentation/d/12yTDlbMCmbg0ccdea2h0vwhs5YTa_GHm_3DieG5A-k8/edit?usp=sharing) + Regardless of whether you plan on working in JupyterLab, R Studio or something more advanced with Argo Workflows, you'll need the appropriate notebook server. [Follow the instructions found here to get started.](https://docs.google.com/presentation/d/12yTDlbMCmbg0ccdea2h0vwhs5YTa_GHm_3DieG5A-k8/edit?usp=sharing) ### Using JupyterLab @@ -68,32 +108,35 @@ There are multiple ways to train machine learning models and it is not our place !!! info "JupyterLab is Popular" Training machine learning models with JupyterLab is a popular approach among data scientists and machine learning engineers. -Here you will find the steps required to train a machine learning model with JupyterLab on the AAW. Because we are a multi-lingual environment, we've done our best to provide code examples in our most popular languages, `Python`, `R` and `SAS`. +Here you will find the steps required to train a machine learning model with +JupyterLab on the AAW. Because we are a multi-lingual environment, we've done +our best to provide code examples in our most popular languages, `Python`, `R` +and `SAS`. #### 1. Import the required libraries -Once you have a JupyterLab session running, you need to import the required libraries for your machine learning model. This could include libraries such as `NumPy`, `Pandas`, `Scikit-learn`, `Tensorflow`, or `PyTorch`. If you are using `R`, you'll want `tidyverse`, `caret` and `janitor`. +Once you have a JupyterLab session running, you need to import the required +libraries for your machine learning model. This could include libraries such as +`NumPy`, `Pandas`, `Scikit-learn`, `Tensorflow`, or `PyTorch`. If you are using +`R`, you'll want `tidyverse`, `caret` and `janitor`. -=== "Python" - ``` py title="libraries.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="libraries.py" linenums="1" #!/usr/bin/env python - # tensorflow and keras for building and training deep learning models + # tensorflow and keras for building and training deep learning models import tensorflow as tf from tensorflow import keras - # numpy for numerical computations + # numpy for numerical computations import numpy as np - # pandas for data manipulation and analysis + # pandas for data manipulation and analysis import pandas as pd - # matplotlib for data visualization + # matplotlib for data visualization import matplotlib.pyplot as plt ``` -=== "R" - ``` r title="libraries.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="libraries.R" linenums="1" #!/usr/bin/env Rscript # tidyverse for awesome data analysis and munging tools library(tidyverse) @@ -104,15 +147,14 @@ Once you have a JupyterLab session running, you need to import the required libr # caret for easy machine learning library(caret) ``` -=== "SASPy" - ``` py title="libraries.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="libraries.py" linenums="1" #!/usr/bin/env python # the only library you'll need to access SAS from Python import saspy ``` -=== "SAS" - ``` sas title="libraries.sas" linenums="1" + +=== "SAS" ``` sas title="libraries.sas" linenums="1" ``` @@ -122,11 +164,13 @@ Once you have a JupyterLab session running, you need to import the required libr #### 2. Load and preprocess the data -Next, you need to load and preprocess the data you'll be using to train your machine learning model. This could include data cleaning, feature extraction, and normalization. The exact preprocessing steps you'll need to perform will depend on the specific dataset you're working with, the requirements of your machine learning model and the job to be done. +Next, you need to load and preprocess the data you'll be using to train your +machine learning model. This could include data cleaning, feature extraction, +and normalization. The exact preprocessing steps you'll need to perform will +depend on the specific dataset you're working with, the requirements of your +machine learning model and the job to be done. -=== "Python" - ``` py title="load_data.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="load_data.py" linenums="1" #!/usr/bin/env python # Import necessary packages import pandas as pd @@ -146,14 +190,13 @@ Next, you need to load and preprocess the data you'll be using to train your mac scaler = StandardScaler() # Create a scaler object X_norm = scaler.fit_transform(X) # Normalize the feature values ``` -=== "R" - ``` r title="load_data.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="load_data.R" linenums="1" #!/usr/bin/env Rscript # Import necessary packages library(tidyverse) library(janitor) - + # Load data from a CSV file data <- read_csv("data.csv") @@ -170,9 +213,8 @@ Next, you need to load and preprocess the data you'll be using to train your mac # Reorder columns select(date, column2, column1, column3) ``` -=== "SASPy" - ``` py title="load_data.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="load_data.py" linenums="1" #!/usr/bin/env python # Import necessary packages import saspy @@ -183,22 +225,20 @@ Next, you need to load and preprocess the data you'll be using to train your mac # Load data from a CSV file data = sas.read_csv("./data.csv") ``` -=== "SAS" - ``` sas title="load_data.sas" linenums="1" - /* Reading a comma delimited file with a .csv extension */ - /* */ - /* Since the DBMS= value is CSV, you do not have to use the DELIMITER= */ - /* statement. By default, it is assumed the variable names are on the first */ - /* row, so the GETNAMES= statement is not required. */ - /* */ - /* Create comma delimited test file to read using PROC IMPORT below. */ + +=== "SAS" ``` sas title="load_data.sas" linenums="1" /_ Reading a comma +delimited file with a .csv extension _/ /\* _/ /_ Since the DBMS= value is CSV, +you do not have to use the DELIMITER= _/ /_ statement. By default, it is assumed +the variable names are on the first _/ /_ row, so the GETNAMES= statement is not +required. _/ /_ _/ /_ Create comma delimited test file to read using PROC IMPORT +below. \*/ /* Load data from a CSV file */ proc import datafile='data.csv' out=data dbms=csv - replace; + replace; run; /* Display data */ @@ -208,11 +248,11 @@ Next, you need to load and preprocess the data you'll be using to train your mac #### 3. Split the data into training and testing sets - Once the data is preprocessed, you need to split it into training and testing sets. The training set will be used to train the machine learning model, while the testing set will be used to evaluate its performance. +Once the data is preprocessed, you need to split it into training and testing +sets. The training set will be used to train the machine learning model, while +the testing set will be used to evaluate its performance. -=== "Python" - ``` py title="train_test.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="train_test.py" linenums="1" #!/usr/bin/env python # Import necessary packages import pandas as pd @@ -222,9 +262,8 @@ Next, you need to load and preprocess the data you'll be using to train your mac X_train, X_test, y_train, y_test = train_test_split(X_norm, data['target'], test_size=0.2, random_state=42) ``` -=== "R" - ``` r title="train_test.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="train_test.R" linenums="1" #!/usr/bin/env Rscript # Import necessary packages library(caret) @@ -240,13 +279,12 @@ Next, you need to load and preprocess the data you'll be using to train your mac train_data <- data[train_index, ] test_data <- data[-train_index, ] ``` -=== "SASPy" - ``` py title="train_test.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="train_test.py" linenums="1" #!/usr/bin/env python ``` -=== "SAS" - ``` sas title="train_test.sas" linenums="1" + +=== "SAS" ``` sas title="train_test.sas" linenums="1" ``` @@ -256,11 +294,11 @@ Next, you need to load and preprocess the data you'll be using to train your mac #### 4. Define and train the machine learning model -With the data split, you can now define and train your machine learning model using the training set. This could involve selecting the appropriate algorithm, hyperparameter tuning, and cross-validation. +With the data split, you can now define and train your machine learning model +using the training set. This could involve selecting the appropriate algorithm, +hyperparameter tuning, and cross-validation. -=== "Python" - ``` py title="train.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="train.py" linenums="1" #!/usr/bin/env python # Import necessary packages from sklearn.ensemble import RandomForestClassifier @@ -279,9 +317,8 @@ With the data split, you can now define and train your machine learning model us # Print the accuracy score on the test data print("Accuracy on test set: {:.3f}".format(model.score(X_test, y_test))) ``` -=== "R" - ``` r title="train.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="train.R" linenums="1" #!/usr/bin/env Rscript # Import necessary packages library(caret) @@ -306,9 +343,8 @@ With the data split, you can now define and train your machine learning model us # Print the model object to view the results print(model) ``` -=== "SASPy" - ``` py title="train.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="train.py" linenums="1" #!/usr/bin/env python # Import necessary packages import saspy @@ -353,11 +389,9 @@ With the data split, you can now define and train your machine learning model us # Disconnect from the SAS session sas.disconnect() ``` -=== "SAS" - ``` sas title="train.sas" linenums="1" - /* Load the dataset */ - proc import datafile="my-dataset.csv" out=mydata dbms=csv replace; - run; + +=== "SAS" ``` sas title="train.sas" linenums="1" /_ Load the dataset _/ proc +import datafile="my-dataset.csv" out=mydata dbms=csv replace; run; /* Split the dataset into train and test */ proc surveyselect data=mydata method=srs seed=123 out=selected outall @@ -386,43 +420,44 @@ With the data split, you can now define and train your machine learning model us #### 5. Evaluate the model -After training the model, you need to evaluate its performance on the testing set. This will give you an idea of how well the model will perform on new, unseen data. +After training the model, you need to evaluate its performance on the testing +set. This will give you an idea of how well the model will perform on new, +unseen data. -=== "Python" - ``` py title="evaluate.py" linenums="1" +=== "Python" ``` py title="evaluate.py" linenums="1" ``` -=== "R" - ``` r title="evaluate.R" linenums="1" + +=== "R" ``` r title="evaluate.R" linenums="1" ``` -=== "SASPy" - ``` py title="evaluate.py" linenums="1" + +=== "SASPy" ``` py title="evaluate.py" linenums="1" ``` -=== "SAS" - ``` sas title="evaluate.sas" linenums="1" + +=== "SAS" ``` sas title="evaluate.sas" linenums="1" ``` #### 6. Deploy the model -Finally, you can deploy the trained machine learning model in a production environment. +Finally, you can deploy the trained machine learning model in a production +environment. -=== "Python" - ``` py title="deploy.py" linenums="1" +=== "Python" ``` py title="deploy.py" linenums="1" ``` -=== "R" - ``` r title="deploy.R" linenums="1" + +=== "R" ``` r title="deploy.R" linenums="1" ``` -=== "SASPy" - ``` py title="deploy.py" linenums="1" + +=== "SASPy" ``` py title="deploy.py" linenums="1" ``` -=== "SAS" - ``` sas title="deploy.sas" linenums="1" + +=== "SAS" ``` sas title="deploy.sas" linenums="1" ``` @@ -434,16 +469,26 @@ Finally, you can deploy the trained machine learning model in a production envir !!! info "MLOps Best Practices" Argo Workflows is an excellent tool for anyone looking to implement MLOps practices and streamline the process of training and deploying machine learning models or other data science tasks such as ETL. -**[Argo Workflows](https://argoproj.github.io/argo-workflows/)** is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition). It is particularly well-suited for use in machine learning and data science workflows. +**[Argo Workflows](https://argoproj.github.io/argo-workflows/)** is an open +source container-native workflow engine for orchestrating parallel jobs on +Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource +Definition). It is particularly well-suited for use in machine learning and data +science workflows. Argo Workflows allows you to - Define workflows where each step in the workflow is a container. -- Model multi-step workflows as a sequence of tasks or capture the dependencies between tasks using a directed acyclic graph (DAG). -- Easily run compute intensive jobs for machine learning or data processing in a fraction of the time using Argo Workflows on Kubernetes. -- Run CI/CD pipelines natively on Kubernetes without configuring complex software development products. - -making it easy to manage the entire end-to-end machine learning pipeline. With Argo Workflows, you can easily build workflows that incorporate tasks such as data preprocessing, model training, and model deployment, all within a Kubernetes environment. +- Model multi-step workflows as a sequence of tasks or capture the dependencies + between tasks using a directed acyclic graph (DAG). +- Easily run compute intensive jobs for machine learning or data processing in a + fraction of the time using Argo Workflows on Kubernetes. +- Run CI/CD pipelines natively on Kubernetes without configuring complex + software development products. + +making it easy to manage the entire end-to-end machine learning pipeline. With +Argo Workflows, you can easily build workflows that incorporate tasks such as +data preprocessing, model training, and model deployment, all within a +Kubernetes environment. !!! info "" @@ -452,11 +497,13 @@ making it easy to manage the entire end-to-end machine learning pipeline. With A

Argo Workflows

-Below are the steps to train a machine learning model using Argo Workflows on the AAW. +Below are the steps to train a machine learning model using Argo Workflows on +the AAW. #### 1. Write a script to train your model -Here's an example script that trains a logistic regression model on the iris dataset. Don't forget to view the code from each language below. +Here's an example script that trains a logistic regression model on the iris +dataset. Don't forget to view the code from each language below. === "Python" @@ -535,17 +582,21 @@ Here's an example script that trains a logistic regression model on the iris dat # Save model to file saveRDS(clf, output_file) ``` + #### 2. Write a Dockerfile to run your code -You'll need a Dockerfile that includes all necessary dependencies for training your machine learning model. This could include +You'll need a Dockerfile that includes all necessary dependencies for training +your machine learning model. This could include - packages like - `scikit-learn`, `pandas` or `numpy` if you are using `Python` - - `caret`, `janitor` and `tidyverse` if you are using `R` + - `caret`, `janitor` and `tidyverse` if you are using `R` - your own custom libraries or scripts -- your machine learning model code in the form of a script [as in the above example](#1-write-a-script-to-train-your-model). +- your machine learning model code in the form of a script + [as in the above example](#1-write-a-script-to-train-your-model). -Use the following `Dockerfile` as a starting point for your `R` and `Python` projects. +Use the following `Dockerfile` as a starting point for your `R` and `Python` +projects. === "Python" @@ -565,9 +616,7 @@ Use the following `Dockerfile` as a starting point for your `R` and `Python` pro ENTRYPOINT ["python", "train.py"] ``` -=== "R" - ``` docker title="Dockerfile" linenums="1" - FROM rocker/r-base:latest +=== "R" ``` docker title="Dockerfile" linenums="1" FROM rocker/r-base:latest RUN apt-get update && apt-get install -y --no-install-recommends \ libssl-dev \ @@ -587,72 +636,49 @@ Use the following `Dockerfile` as a starting point for your `R` and `Python` pro #### 3. Write your workflow in YAML -YAML is Yet Another Markup Language and you'll need to write down the steps of your training pipeline in an Argo Workflows YAML file. This file should include reference to the Dockerfile you created in [Step 1](#2-write-a-dockerfile-to-run-your-code), as well as any input data and output data you'll be working with. +YAML is Yet Another Markup Language and you'll need to write down the steps of +your training pipeline in an Argo Workflows YAML file. This file should include +reference to the Dockerfile you created in +[Step 1](#2-write-a-dockerfile-to-run-your-code), as well as any input data and +output data you'll be working with. -Here is an example YAML file for a simple machine learning pipeline that trains a logistic regression model on the iris dataset. The only real difference between the `Python` and `R` versions is the command `command: ["python", "train.py"]` vs `command: ["Rscript", "train.R"]` and the models are stored in different formats, `pkl` for `python` and `rds` for `R`. +Here is an example YAML file for a simple machine learning pipeline that trains +a logistic regression model on the iris dataset. The only real difference +between the `Python` and `R` versions is the command +`command: ["python", "train.py"]` vs `command: ["Rscript", "train.R"]` and the +models are stored in different formats, `pkl` for `python` and `rds` for `R`. -The YAML file defines a single step called `train` that runs script called `train.py` or `train.R` in the Docker image `machine-learning:v1`. The script takes an input dataset file, specified by a parameter called `dataset`, and outputs a trained model file to an output artifact called `model.pkl` or `model.rds` depending on the language used. +The YAML file defines a single step called `train` that runs script called +`train.py` or `train.R` in the Docker image `machine-learning:v1`. The script +takes an input dataset file, specified by a parameter called `dataset`, and +outputs a trained model file to an output artifact called `model.pkl` or +`model.rds` depending on the language used. === "Python" - ``` yaml title="workflow.yaml" linenums="1" - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: ml-pipeline- - spec: - entrypoint: train - templates: - - name: train - container: - image: machine-learning:v1 - command: ["python", "train.py"] - args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] - inputs: - parameters: - - name: dataset - default: "iris.csv" - outputs: - artifacts: - - name: model - path: /output/model.pkl - ``` +`yaml title="workflow.yaml" linenums="1" apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: ml-pipeline- spec: entrypoint: train templates: - name: train container: image: machine-learning:v1 command: ["python", "train.py"] args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] inputs: parameters: - name: dataset default: "iris.csv" outputs: artifacts: - name: model path: /output/model.pkl ` === "R" - ``` yaml title="workflow.yaml" linenums="1" - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: ml-pipeline- - spec: - entrypoint: train - templates: - - name: train - container: - image: machine-learning:v1 - command: ["Rscript", "train.R"] - args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] - inputs: - parameters: - - name: dataset - default: "iris.csv" - outputs: - artifacts: - - name: model - path: /output/model.rds - ``` +`yaml title="workflow.yaml" linenums="1" apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: ml-pipeline- spec: entrypoint: train templates: - name: train container: image: machine-learning:v1 command: ["Rscript", "train.R"] args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] inputs: parameters: - name: dataset default: "iris.csv" outputs: artifacts: - name: model path: /output/model.rds ` #### 4. Submit the workflow using the Argo Workflows CLI -To run the above workflow, you will first need to push the Dockerfile to our container registry and , and then submit the YAML file using the `argo submit` command. Once the pipeline has completed, you can retrieve the trained model file by downloading the output artifact from the `argo logs` command. +To run the above workflow, you will first need to push the Dockerfile to our +container registry and , and then submit the YAML file using the `argo submit` +command. Once the pipeline has completed, you can retrieve the trained model +file by downloading the output artifact from the `argo logs` command. -``` bash title="Terminal" +```bash title="Terminal" $ argo submit workflow.yaml # submit a workflow spec to Kubernetes ``` #### 5. Monitor the pipeline using the Argo Workflows CLI -As the pipeline runs, you can monitor its progress using the Argo Workflows CLI. This will show you which steps have completed successfully and which are still running. Below are some useful commands, for more information about the Argo Workflows CLI, please check out [the official Argo Workflows CLI documentation](https://argoproj.github.io/argo-workflows/walk-through/argo-cli/). +As the pipeline runs, you can monitor its progress using the Argo Workflows CLI. +This will show you which steps have completed successfully and which are still +running. Below are some useful commands, for more information about the Argo +Workflows CLI, please check out +[the official Argo Workflows CLI documentation](https://argoproj.github.io/argo-workflows/walk-through/argo-cli/). -``` bash title="Terminal" +```bash title="Terminal" $ argo list # list current workflows $ argo get workflow-xxx # get info about a specific workflow $ argo logs workflow-xxx # print the logs from a workflow @@ -662,15 +688,20 @@ $ argo delete workflow-xxx # delete workflow #### 6. Retrieve the trained model -Once the pipeline has completed, you can retrieve the output data using the argo logs command or by viewing the output artifacts using the CLI, i.e. navigate to the directory you specified in your script and locate the file `model.pkl` or `model.rds`. The following code snippet, taken from [the above training script](#1-define-the-machine-learning-model-and-its-dependencies), tells the respective programming language where to save the trained model. +Once the pipeline has completed, you can retrieve the output data using the argo +logs command or by viewing the output artifacts using the CLI, i.e. navigate to +the directory you specified in your script and locate the file `model.pkl` or +`model.rds`. The following code snippet, taken from +[the above training script](#1-define-the-machine-learning-model-and-its-dependencies), +tells the respective programming language where to save the trained model. === "Python" ``` python title="Saving Output Data" linenums="1" #!/usr/bin/env python - + parser.add_argument("--output", default="model.pkl", help="Path to output model file.") - + # Save model to file joblib.dump(clf, args.output) ``` @@ -679,28 +710,35 @@ Once the pipeline has completed, you can retrieve the output data using the argo ``` r title="Saving Output Data" linenums="1" #!/usr/bin/env Rscript - + output_file <- ifelse(length(args) > 1, args[2], "model.rds") - + # Save model to file saveRDS(clf, output_file) ``` ### Examples using Argo Workflows-based SDKs -If you prefer to use a higher level framework, then we have `Couler` and `Hera`. These frameworks make the creation and management of complex workflows more accessible to a wider audience. +If you prefer to use a higher level framework, then we have `Couler` and `Hera`. +These frameworks make the creation and management of complex workflows more +accessible to a wider audience. #### Hera -Hera aims to simplify the process of building and submitting workflows by abstracting away many of the technical details through a simple application programming interface. It also uses a consistent set of terminology and concepts that align with Argo Workflows, making it easier for users to learn and use both tools together. +Hera aims to simplify the process of building and submitting workflows by +abstracting away many of the technical details through a simple application +programming interface. It also uses a consistent set of terminology and concepts +that align with Argo Workflows, making it easier for users to learn and use both +tools together. #### Couler -Couler provides a simple, unified application programming interface for defining workflows using an imperative programming style. It also automatically constructs directed acyclic graphs (DAGs) for the workflows, which can help to simplify the process of creating and managing them. +Couler provides a simple, unified application programming interface for defining +workflows using an imperative programming style. It also automatically +constructs directed acyclic graphs (DAGs) for the workflows, which can help to +simplify the process of creating and managing them. -=== "Couler" - ``` py title="couler.py" linenums="1" - #!/usr/bin/env python +=== "Couler" ``` py title="couler.py" linenums="1" #!/usr/bin/env python # Prepare your system !pip config --user set global.index-url https://jfrog.aaw.cloud.statcan.ca/artifactory/api/pypi/pypi-remote/simple @@ -755,14 +793,13 @@ Couler provides a simple, unified application programming interface for defining print(json.dumps(result, indent=2)) ``` -=== "Hera" - ``` py title="hera.py" linenums="1" - #!/usr/bin/env python + +=== "Hera" ``` py title="hera.py" linenums="1" #!/usr/bin/env python # Prepare your system !pip config --user set global.index-url https://jfrog.aaw.cloud.statcan.ca/artifactory/api/pypi/pypi-remote/simple !pip install hera-workflows - + # Import necessary packages import hera from hera import Task, Workflow @@ -799,18 +836,19 @@ Couler provides a simple, unified application programming interface for defining # Run the workflow w.create() ``` -=== "YAML" - ``` py title="workflow.yaml" linenums="1" + +=== "YAML" ``` py title="workflow.yaml" linenums="1" ``` -=== "Seldon?" - ``` py + +=== "Seldon?" ``` py ``` ### Additional Resources for Argo Workflows -Example Argo Workflows workflows can be found in the following Github repositories: +Example Argo Workflows workflows can be found in the following Github +repositories: - [Argo Workflows Documentation](https://argoproj.github.io/argo-workflows/) - [Argo CLI Reference](https://argoproj.github.io/argo-workflows/walk-through/argo-cli/) diff --git a/docs/en/3-Pipelines/Machine-Learning.md b/docs/en/3-Pipelines/Machine-Learning.md index 49fa0022a..78310fb76 100644 --- a/docs/en/3-Pipelines/Machine-Learning.md +++ b/docs/en/3-Pipelines/Machine-Learning.md @@ -1,20 +1,38 @@ # Machine Learning Models -Machine learning models are computational algorithms that are designed to automatically learn patterns and relationships from data. These models are trained on a dataset, which is typically a collection of examples or instances, each of which consists of a set of features or variables, as well as a target variable or output. +Machine learning models are computational algorithms that are designed to +automatically learn patterns and relationships from data. These models are +trained on a dataset, which is typically a collection of examples or instances, +each of which consists of a set of features or variables, as well as a target +variable or output. -The goal of a machine learning model is to identify patterns and relationships within the data that can be used to make predictions or decisions about new, unseen data. This involves developing a mathematical representation of the relationship between the input features and the output variable, based on the patterns observed in the training data. Once the model is trained, it can be used to make predictions or decisions about new, unseen data. +The goal of a machine learning model is to identify patterns and relationships +within the data that can be used to make predictions or decisions about new, +unseen data. This involves developing a mathematical representation of the +relationship between the input features and the output variable, based on the +patterns observed in the training data. Once the model is trained, it can be +used to make predictions or decisions about new, unseen data. -There are several different types of machine learning models, each of which is designed to address different types of problems or data. Some of the most common types of machine learning models include: +There are several different types of machine learning models, each of which is +designed to address different types of problems or data. Some of the most common +types of machine learning models include: -1. **Regression Models:** Regression models are used to predict continuous numerical values, such as stock prices or housing prices. +1. **Regression Models:** Regression models are used to predict continuous + numerical values, such as stock prices or housing prices. -2. **Classification Models:** Classification models are used to predict discrete categorical values, such as whether a customer will buy a product or not. +2. **Classification Models:** Classification models are used to predict discrete + categorical values, such as whether a customer will buy a product or not. -3. **Clustering Models:** Clustering models are used to identify groups or clusters within a dataset based on similarities between instances. +3. **Clustering Models:** Clustering models are used to identify groups or + clusters within a dataset based on similarities between instances. -4. **Recommendation Models:** Recommendation models are used to recommend products or services to users based on their past behavior or preferences. +4. **Recommendation Models:** Recommendation models are used to recommend + products or services to users based on their past behavior or preferences. -5. **Neural Networks:** Neural networks are a type of machine learning model that is designed to mimic the structure and function of the human brain. They are commonly used in image recognition, speech recognition, and natural language processing applications. +5. **Neural Networks:** Neural networks are a type of machine learning model + that is designed to mimic the structure and function of the human brain. They + are commonly used in image recognition, speech recognition, and natural + language processing applications. !!! info "Machine Learning Models Can be Biased" @@ -34,15 +52,19 @@ There are several different types of machine learning models, each of which is d _Where $\hat{Y}_i$ denotes the $i$th estimator of the true value $Y$ based on the $i$th training epoch. Each $\hat{\beta}$ is a parameter to be learned. $\hat{\epsilon}_i$ is the amount of noise permitted in the model and may vary depending on the training epoch number denoted by $i$. Each $X_i$ represents the $i$th batch of training data._ -In classical statistical models like linear regression, the goal is to find a line that best fits the data, allowing us to make predictions about new data points. +In classical statistical models like linear regression, the goal is to find a +line that best fits the data, allowing us to make predictions about new data +points. -As the complexity of the problem increases, more sophisticated algorithms are needed, such as decision trees, support vector machines, and random forests. However, these methods have limitations, and they may not be able to capture complex patterns in large datasets. +As the complexity of the problem increases, more sophisticated algorithms are +needed, such as decision trees, support vector machines, and random forests. +However, these methods have limitations, and they may not be able to capture +complex patterns in large datasets. #### Example Code -=== "Python" - ``` py title="linear_regression.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="linear_regression.py" linenums="1" #!/usr/bin/env +python # Load the required libraries import pandas as pd @@ -69,10 +91,8 @@ As the complexity of the problem increases, more sophisticated algorithms are ne print('Root Mean Squared Error:', rmse) ``` -=== "R" - ``` r title="linear_regression.r" linenums="1" - #!/usr/bin/env Rscript - +=== "R" ``` r title="linear_regression.r" linenums="1" #!/usr/bin/env Rscript + # Set random seed for reproducibility set.seed(123) @@ -112,15 +132,21 @@ As the complexity of the problem increases, more sophisticated algorithms are ne _In this formula, we use the standard SVM formulation where $\mathbf{w}$ is the weight vector, $b$ is the bias term, and $\boldsymbol{\xi}$ is the slack variable vector. The objective is to minimize the L2-norm of the weight vector $\mathbf{w}$, subject to the constraint that all training examples are classified correctly with a margin of at least 1, plus an allowance for some margin violations controlled by the regularization parameter $C$. The target variable $y_i$ takes values of either 1 or -1, representing the two classes in the binary classification problem, and $\mathbf{x}_i$ is the feature vector for the $i$th training example._ -A support vector machine (SVM) is a supervised machine learning algorithm that can be used for classification, regression, and outlier detection. It is a popular algorithm in the field of machine learning, especially for solving classification problems. +A support vector machine (SVM) is a supervised machine learning algorithm that +can be used for classification, regression, and outlier detection. It is a +popular algorithm in the field of machine learning, especially for solving +classification problems. -The basic idea behind SVM is to find a hyperplane that best separates the input data into different classes. In a two-class classification problem, the hyperplane is a line that divides the data points of one class from the data points of the other class. SVM tries to find the hyperplane that maximizes the margin between the two classes, where the margin is the distance between the hyperplane and the nearest data points from each class. +The basic idea behind SVM is to find a hyperplane that best separates the input +data into different classes. In a two-class classification problem, the +hyperplane is a line that divides the data points of one class from the data +points of the other class. SVM tries to find the hyperplane that maximizes the +margin between the two classes, where the margin is the distance between the +hyperplane and the nearest data points from each class. #### Example Code -=== "Python" - ``` py title="svm.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="svm.py" linenums="1" #!/usr/bin/env python # Load the required libraries import pandas as pd @@ -186,15 +212,19 @@ The basic idea behind SVM is to find a hyperplane that best separates the input _where $\hat{y}$ is the predicted output, $f_t(\mathbf{x})$ is the prediction of the $t$th tree in the forest for the input $\mathbf{x}$, and $T$ is the number of trees in the forest._ -Random Forests are an ensemble learning method that can be used for classification and regression problems. They are often used for their ability to handle high-dimContinuous Improvement:ensional datasets and nonlinear relationships between features and targets. +Random Forests are an ensemble learning method that can be used for +classification and regression problems. They are often used for their ability to +handle high-dimContinuous Improvement:ensional datasets and nonlinear +relationships between features and targets. -Each tree is trained on a bootstrapped subset of the original training data, and at each split, a random subset of features is considered for determining the split. The final prediction is obtained by averaging the predictions of all the trees in the forest. +Each tree is trained on a bootstrapped subset of the original training data, and +at each split, a random subset of features is considered for determining the +split. The final prediction is obtained by averaging the predictions of all the +trees in the forest. #### Example Code -=== "Python" - ``` py title="random_forest.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="random_forest.py" linenums="1" #!/usr/bin/env python # Load the required libraries import pandas as pd @@ -221,11 +251,9 @@ Each tree is trained on a bootstrapped subset of the original training data, and print('Root Mean Squared Error:', rmse) ``` -=== "R" - ``` r title="random_forest.r" linenums="1" - #!/usr/bin/env Rscript +=== "R" ``` r title="random_forest.r" linenums="1" #!/usr/bin/env Rscript - # Load the required libraries + # Load the required libraries library(randomForest) # Load the dataset @@ -263,13 +291,19 @@ Each tree is trained on a bootstrapped subset of the original training data, and _This formula represents a feedforward neural network with $L$ layers, where each layer applies a linear transformation to the output of the previous layer, followed by a non-linear activation function. The output of the final layer, $\hat{y}$, represents the predicted output of the neural network for the given input $\mathbf{x}$._ -Deep learning is a subset of machine learning that involves training neural networks with many layers of interconnected nodes. This approach can handle large and complex datasets and is used in a wide range of applications, including image recognition, natural language processing, and speech recognition. The training process involves feeding the neural network a large dataset and adjusting the weights of the connections between the nodes to minimize the error between the predicted outputs and the actual outputs. Through repeated iterations, the neural network can learn to recognize patterns in the data and make accurate predictions on new data. +Deep learning is a subset of machine learning that involves training neural +networks with many layers of interconnected nodes. This approach can handle +large and complex datasets and is used in a wide range of applications, +including image recognition, natural language processing, and speech +recognition. The training process involves feeding the neural network a large +dataset and adjusting the weights of the connections between the nodes to +minimize the error between the predicted outputs and the actual outputs. Through +repeated iterations, the neural network can learn to recognize patterns in the +data and make accurate predictions on new data. #### Example Code -=== "Python" - ``` py title="deep_learning.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="deep_learning.py" linenums="1" #!/usr/bin/env python # Load the required libraries import pandas as pd @@ -314,7 +348,7 @@ Deep learning is a subset of machine learning that involves training neural netw ``` r title="deep_learning.r" linenums="1" #!/usr/bin/env Rscript - + # Load the required libraries library(keras) library(tensorflow) diff --git a/docs/en/3-Pipelines/Overview.md b/docs/en/3-Pipelines/Overview.md index d3df5e162..df0f8c84e 100644 --- a/docs/en/3-Pipelines/Overview.md +++ b/docs/en/3-Pipelines/Overview.md @@ -1,18 +1,48 @@ - -MLOps, or Machine Learning Operations, refers to the set of practices and tools that enable organizations to develop, deploy, and maintain machine learning models at scale. MLOps aims to streamline the end-to-end process of building and deploying machine learning models by integrating the various stages of the machine learning lifecycle into a cohesive and automated workflow. - -MLOps involves a range of different activities, including data preparation and preprocessing, model training and optimization, model deployment and serving, monitoring and maintenance, and continuous improvement. Some of the key components of MLOps include: - -1. **Data Management:** MLOps involves managing and processing large amounts of data to ensure the quality and accuracy of machine learning models. This involves activities such as data cleaning, data integration, and data transformation. - -2. **Model Training and Optimization:** MLOps involves developing and testing machine learning models, as well as optimizing them for performance and accuracy. This may involve experimenting with different algorithms, hyperparameters, and data pre-processing techniques. - -3. **Model Deployment:** MLOps involves deploying machine learning models to production environments, making them available for use in real-world applications. This may involve containerizing models for easy deployment and scaling, as well as setting up APIs and other interfaces for model serving. - -4. **Monitoring and Maintenance:** MLOps involves monitoring machine learning models in production to ensure that they are performing as expected. This may involve setting up alerts and notifications for model failures, as well as implementing processes for model maintenance and updates. - -5. **Continuous Improvement:** MLOps involves continually improving machine learning models over time, based on feedback from users and ongoing analysis of performance data. This may involve retraining models with new data or incorporating feedback from users to refine models. - -In order to implement MLOps effectively, organizations typically need to adopt a range of different tools and technologies, including data management platforms, machine learning frameworks, containerization tools, and monitoring and logging tools. They also need to establish clear workflows and processes for managing the various stages of the machine learning lifecycle, as well as implementing governance and compliance measures to ensure data privacy and security. - -In summary, MLOps is a critical component of the machine learning lifecycle, enabling organizations to develop, deploy, and maintain machine learning models at scale. By adopting MLOps practices and tools, organizations can streamline their machine learning workflows, improve model accuracy and performance, and deliver more value to users and stakeholders. \ No newline at end of file +MLOps, or Machine Learning Operations, refers to the set of practices and tools +that enable organizations to develop, deploy, and maintain machine learning +models at scale. MLOps aims to streamline the end-to-end process of building and +deploying machine learning models by integrating the various stages of the +machine learning lifecycle into a cohesive and automated workflow. + +MLOps involves a range of different activities, including data preparation and +preprocessing, model training and optimization, model deployment and serving, +monitoring and maintenance, and continuous improvement. Some of the key +components of MLOps include: + +1. **Data Management:** MLOps involves managing and processing large amounts of + data to ensure the quality and accuracy of machine learning models. This + involves activities such as data cleaning, data integration, and data + transformation. + +2. **Model Training and Optimization:** MLOps involves developing and testing + machine learning models, as well as optimizing them for performance and + accuracy. This may involve experimenting with different algorithms, + hyperparameters, and data pre-processing techniques. + +3. **Model Deployment:** MLOps involves deploying machine learning models to + production environments, making them available for use in real-world + applications. This may involve containerizing models for easy deployment and + scaling, as well as setting up APIs and other interfaces for model serving. + +4. **Monitoring and Maintenance:** MLOps involves monitoring machine learning + models in production to ensure that they are performing as expected. This may + involve setting up alerts and notifications for model failures, as well as + implementing processes for model maintenance and updates. + +5. **Continuous Improvement:** MLOps involves continually improving machine + learning models over time, based on feedback from users and ongoing analysis + of performance data. This may involve retraining models with new data or + incorporating feedback from users to refine models. + +In order to implement MLOps effectively, organizations typically need to adopt a +range of different tools and technologies, including data management platforms, +machine learning frameworks, containerization tools, and monitoring and logging +tools. They also need to establish clear workflows and processes for managing +the various stages of the machine learning lifecycle, as well as implementing +governance and compliance measures to ensure data privacy and security. + +In summary, MLOps is a critical component of the machine learning lifecycle, +enabling organizations to develop, deploy, and maintain machine learning models +at scale. By adopting MLOps practices and tools, organizations can streamline +their machine learning workflows, improve model accuracy and performance, and +deliver more value to users and stakeholders. diff --git a/docs/en/3-Pipelines/PaaS-Integration.md b/docs/en/3-Pipelines/PaaS-Integration.md index 36f25b423..6ccc56b54 100644 --- a/docs/en/3-Pipelines/PaaS-Integration.md +++ b/docs/en/3-Pipelines/PaaS-Integration.md @@ -1,8 +1,12 @@ # Overview -_One of the main advantages of the AAW platform is its ability to integrate with popular machine learning platforms such as Databricks and AzureML._ +_One of the main advantages of the AAW platform is its ability to integrate with +popular machine learning platforms such as Databricks and AzureML._ -The Advanced Analytics Workspace (AAW) is an open source data analytics platform that is designed to be highly integrable. This means that it can be easily integrated with other platforms and tools to extend its capabilities and streamline workflows. +The Advanced Analytics Workspace (AAW) is an open source data analytics platform +that is designed to be highly integrable. This means that it can be easily +integrated with other platforms and tools to extend its capabilities and +streamline workflows. An example diagram depicting a possible PaaS connection strategy: @@ -12,8 +16,8 @@ An example diagram depicting a possible PaaS connection strategy: ![PaaS](../images/PaaS.png) -**Setup:** If you need help integrating with a platform as a service offering, we're happy -to help! +**Setup:** If you need help integrating with a platform as a service offering, +we're happy to help! ## Integration with External Platform as a Service (PaaS) Offerings @@ -21,33 +25,60 @@ _Integration is key to success._ [![Integrate with PaaS](../images/IntegratePaaS.PNG)]() -Our open source platform offers unparalleled optionality to our users. By allowing users to use open source tools, we empower them to use their preferred data science and machine learning frameworks. But the real power of our platform comes from its ability to integrate with many Platform as a Service (PaaS) offerings, like Databricks or AzureML. This means that our users can leverage the power of the cloud to run complex data processing and machine learning pipelines at scale. With the ability to integrate with PaaS offerings, our platform enables our users to take their work to the next level, by giving them the power to scale their workloads with ease, and take advantage of the latest innovations in the field of data science and machine learning. By providing this level of optionality, we ensure that our users can always choose the right tool for the job, and stay ahead of the curve in an ever-changing field. - -We can integrate with many Platform as a Service (PaaS) offerings, like Databricks or AzureML. - +Our open source platform offers unparalleled optionality to our users. By +allowing users to use open source tools, we empower them to use their preferred +data science and machine learning frameworks. But the real power of our platform +comes from its ability to integrate with many Platform as a Service (PaaS) +offerings, like Databricks or AzureML. This means that our users can leverage +the power of the cloud to run complex data processing and machine learning +pipelines at scale. With the ability to integrate with PaaS offerings, our +platform enables our users to take their work to the next level, by giving them +the power to scale their workloads with ease, and take advantage of the latest +innovations in the field of data science and machine learning. By providing this +level of optionality, we ensure that our users can always choose the right tool +for the job, and stay ahead of the curve in an ever-changing field. + +We can integrate with many Platform as a Service (PaaS) offerings, like +Databricks or AzureML. ## Databricks - [Databricks from Microsoft](https://azure.microsoft.com/en-ca/services/databricks/) -Databricks is a cloud-based platform that provides a unified analytics platform for big data processing and machine learning. With its powerful distributed computing engine and streamlined workflow tools, Databricks is a popular choice for building and deploying machine learning models. By integrating with Databricks, the AAW platform can leverage its distributed computing capabilities to train and deploy machine learning models at scale. +Databricks is a cloud-based platform that provides a unified analytics platform +for big data processing and machine learning. With its powerful distributed +computing engine and streamlined workflow tools, Databricks is a popular choice +for building and deploying machine learning models. By integrating with +Databricks, the AAW platform can leverage its distributed computing capabilities +to train and deploy machine learning models at scale. ## AzureML - [Azure ML from Microsoft](https://azure.microsoft.com/en-us/services/machine-learning/) -AzureML is another popular machine learning platform that provides a wide range of tools for building, training, and deploying machine learning models. By integrating with AzureML, the AAW platform can leverage its powerful tools for building and training models, as well as its ability to deploy models to the cloud. +AzureML is another popular machine learning platform that provides a wide range +of tools for building, training, and deploying machine learning models. By +integrating with AzureML, the AAW platform can leverage its powerful tools for +building and training models, as well as its ability to deploy models to the +cloud. ### Examples -_Examples of how to integrate the AAW platform with these and other platforms can be found on the MLOps Github repository._ +_Examples of how to integrate the AAW platform with these and other platforms +can be found on the MLOps Github repository._ - [MLOps Github Repository](https://github.com/StatCan/aaw-kubeflow-mlops) -This repository contains a range of examples and tutorials for using the AAW platform in various machine learning workflows, including data preparation, model training, and model deployment. +This repository contains a range of examples and tutorials for using the AAW +platform in various machine learning workflows, including data preparation, +model training, and model deployment. ## Conclusion -By integrating with popular machine learning platforms like Databricks and AzureML, the AAW platform provides a powerful and flexible solution for building, deploying, and managing machine learning workflows at scale. +By integrating with popular machine learning platforms like Databricks and +AzureML, the AAW platform provides a powerful and flexible solution for +building, deploying, and managing machine learning workflows at scale. -By leveraging the integrations and tools provided by these platforms, data scientists and machine learning engineers can accelerate their workflows and achieve better results with less effort. \ No newline at end of file +By leveraging the integrations and tools provided by these platforms, data +scientists and machine learning engineers can accelerate their workflows and +achieve better results with less effort. diff --git a/docs/en/4-Collaboration/Geospatial-Analytical-Environment.md b/docs/en/4-Collaboration/Geospatial-Analytical-Environment.md index 199e402fc..b8b3c79dd 100644 --- a/docs/en/4-Collaboration/Geospatial-Analytical-Environment.md +++ b/docs/en/4-Collaboration/Geospatial-Analytical-Environment.md @@ -2,7 +2,7 @@ !!! danger "Unprotected data only, SSI Coming Soon!" - At this time, our Geospatial server can only host and provide access to non-sensitive statistical information. + At this time, our Geospatial server can only host and provide access to non-sensitive statistical information. ## Getting Started @@ -11,9 +11,14 @@ 1. An onboarded project with access to DAS GAE ArcGIS Portal 2. An ArcGIS Portal Client Id (API Key) -The ArcGIS Enterprise Portal can be accessed in either the AAW or CAE using the API, from any service which leverages the Python programming language. +The ArcGIS Enterprise Portal can be accessed in either the AAW or CAE using the +API, from any service which leverages the Python programming language. -For example, in AAW and the use of [Jupyter Notebooks](https://statcan.github.io/aaw/en/1-Experiments/Jupyter/) within the space, or in CAE the use of [Databricks](https://statcan.github.io/cae-eac/en/DataBricks/), DataFactory, etc. +For example, in AAW and the use of +[Jupyter Notebooks](https://statcan.github.io/aaw/en/1-Experiments/Jupyter/) +within the space, or in CAE the use of +[Databricks](https://statcan.github.io/cae-eac/en/DataBricks/), DataFactory, +etc. [The DAS GAE ArcGIS Enterprise Portal can be accessed directly here](https://geoanalytics.cloud.statcan.ca/portal) @@ -27,45 +32,47 @@ For example, in AAW and the use of [Jupyter Notebooks](https://statcan.github.io 1. Install packages: - ```python - conda install -c esri arcgis - ``` + ```python + conda install -c esri arcgis + ``` - or using Artifactory + or using Artifactory - ```python3333 - conda install -c https://jfrog.aaw.cloud.statcan.ca/artifactory/api/conda/esri-remote arcgis - ``` + ```python3333 + conda install -c https://jfrog.aaw.cloud.statcan.ca/artifactory/api/conda/esri-remote arcgis + ``` 2. Import the necessary libraries that you will need in the Notebook. - ```python - from arcgis.gis import GIS - from arcgis.gis import Item - ``` - + ```python + from arcgis.gis import GIS + from arcgis.gis import Item + ``` + 3. Access the Portal - Your project group will be provided with a Client ID upon onboarding. Paste the Client ID in between the quotations `client_id='######'`. - - ```python - gis = GIS("https://geoanalytics.cloud.statcan.ca/portal", client_id=' ') - print("Successfully logged in as: " + gis.properties.user.username) - ``` + Your project group will be provided with a Client ID upon onboarding. Paste + the Client ID in between the quotations `client_id='######'`. + + ```python + gis = GIS("https://geoanalytics.cloud.statcan.ca/portal", client_id=' ') + print("Successfully logged in as: " + gis.properties.user.username) + ``` 4. The output will redirect you to a login Portal. - - Use the StatCan Azure Login option, and your Cloud ID - - After successful login, you will receive a code to sign in using SAML. - - Paste this code into the output. + - Use the StatCan Azure Login option, and your Cloud ID + - After successful login, you will receive a code to sign in using SAML. + - Paste this code into the output. - ![OAuth2 Approval](../images/OAuth2Key.png) + ![OAuth2 Approval](../images/OAuth2Key.png)
### Display user information -Using the 'me' function, we can display various information about the user logged in. +Using the 'me' function, we can display various information about the user +logged in. ```python me = gis.users.me @@ -78,7 +85,9 @@ display(me) ### Search for Content -Search for the content you have hosted on the DAaaS Geo Portal. Using the 'me' function we can search for all of the hosted content on the account. There are multiple ways to search for content. Two different methods are outlined below. +Search for the content you have hosted on the DAaaS Geo Portal. Using the 'me' +function we can search for all of the hosted content on the account. There are +multiple ways to search for content. Two different methods are outlined below. **Search all of your hosted items in the DAaaS Geo Portal.** @@ -89,7 +98,8 @@ my_content **Search for specific content you own in the DAaaS Geo Portal.** -This is similar to the example above, however if you know the title of they layer you want to use, you can save it as a function. +This is similar to the example above, however if you know the title of they +layer you want to use, you can save it as a function. ```python my_items = me.items() @@ -97,7 +107,7 @@ for items in my_items: print(items.title, " | ", items.type) if items.title == "Flood in Sorel-Tracy": flood_item = items - + else: continue print(flood_item) @@ -113,7 +123,11 @@ flood_item
### Get Content -We need to get the item from the DAaaS Geo Portal in order to use it in the Jupyter Notebook. This is done by providing the unique identification number of the item you want to use. Three examples are outlined below, all accessing the identical layer. + +We need to get the item from the DAaaS Geo Portal in order to use it in the +Jupyter Notebook. This is done by providing the unique identification number of +the item you want to use. Three examples are outlined below, all accessing the +identical layer. ```python item1 = gis.content.get(my_content[5].id) #from searching your content above @@ -130,21 +144,30 @@ display(item3) ### Perform Analysis -Once the layers are brought into the Jupyter notebook, we are able to perform similar types of analysis you would expect to find in a GIS software such as ArcGIS. There are many modules containing many sub-modules of which can perform multiple types of analyses. -
+Once the layers are brought into the Jupyter notebook, we are able to perform +similar types of analysis you would expect to find in a GIS software such as +ArcGIS. There are many modules containing many sub-modules of which can perform +multiple types of analyses.
-Using the `arcgis.features` module, import the use_proximity submodule `from arcgis.features import use_proximity`. This submodule allows us to `.create_buffers` - areas of equal distance from features. Here, we specify the layer we want to use, distance, units, and output name (you may also specify other characteristics such as field, ring type, end type, and others). By specifying an output name, after running the buffer command, a new layer will be automatically uploaded into the DAaaS GEO Portal containing the new feature you just created. -
+Using the `arcgis.features` module, import the use_proximity submodule +`from arcgis.features import use_proximity`. This submodule allows us to +`.create_buffers` - areas of equal distance from features. Here, we specify the +layer we want to use, distance, units, and output name (you may also specify +other characteristics such as field, ring type, end type, and others). By +specifying an output name, after running the buffer command, a new layer will be +automatically uploaded into the DAaaS GEO Portal containing the new feature you +just created.
```python -buffer_lyr = use_proximity.create_buffers(item1, distances=[1], - units = "Kilometers", +buffer_lyr = use_proximity.create_buffers(item1, distances=[1], + units = "Kilometers", output_name='item1_buffer') display(item1_buffer) ``` -Some users prefer to work with open source packages. Translating from ArcGIS to Spatial Dataframes is simple. +Some users prefer to work with open source packages. Translating from ArcGIS to +Spatial Dataframes is simple. ```python # create a Spatially Enabled DataFrame object @@ -155,7 +178,9 @@ sdf = pd.DataFrame.spatial.from_layer(feature_layer) ### Update Items -By getting the item as we did similar to the example above, we can use the `.update` function to update existing item within the DAaaS GEO Portal. We can update item properties, data, thumbnails, and metadata. +By getting the item as we did similar to the example above, we can use the +`.update` function to update existing item within the DAaaS GEO Portal. We can +update item properties, data, thumbnails, and metadata. ```python item1_buffer = gis.content.get('c60c7e57bdb846dnbd7c8226c80414d2') @@ -171,8 +196,10 @@ item1_buffer.update( ### Visualize Your Data on an Interactive Map -**Example: MatplotLib Library** -In the code below, we create an ax object, which is a map style plot. We then plot our data ('Population Change') change column on the axes +**Example: MatplotLib Library** In the code below, we create an ax object, which +is a map style plot. We then plot our data ('Population Change') change column +on the axes + ```python import matplotlib.pyplot as plt ax = sdf.boundary.plot(figsize=(10, 5)) @@ -182,20 +209,27 @@ plt.show() **Example: ipyleaflet Library** -In this example we will use the library `ipyleaflet` to create an interactive map. This map will be centered around Toronto, ON. The data being used will be outlined below. +In this example we will use the library `ipyleaflet` to create an interactive +map. This map will be centered around Toronto, ON. The data being used will be +outlined below. -Begin by pasting `conda install -c conda-forge ipyleaflet` allowing you to install `ipyleaflet` libraries in the Python environment. +Begin by pasting `conda install -c conda-forge ipyleaflet` allowing you to +install `ipyleaflet` libraries in the Python environment.
Import the necessary libraries. ```python -import ipyleaflet +import ipyleaflet from ipyleaflet import * ``` -Now that we have imported the ipyleaflet module, we can create a simple map by specifying the latitude and longitude of the location we want, zoom level, and basemap [(more basemaps)](https://ipyleaflet.readthedocs.io/en/latest/map_and_basemaps/basemaps.html). Extra controls have been added such as layers and scale. +Now that we have imported the ipyleaflet module, we can create a simple map by +specifying the latitude and longitude of the location we want, zoom level, and +basemap +[(more basemaps)](https://ipyleaflet.readthedocs.io/en/latest/map_and_basemaps/basemaps.html). +Extra controls have been added such as layers and scale. ```python toronto_map = Map(center=[43.69, -79.35], zoom=11, basemap=basemaps.Esri.WorldStreetMap) @@ -204,6 +238,7 @@ toronto_map.add_control(LayersControl(position='topright')) toronto_map.add_control(ScaleControl(position='bottomleft')) toronto_map ``` +
## Learn More about the ArcGIS API for Python diff --git a/docs/en/4-Collaboration/Overview.md b/docs/en/4-Collaboration/Overview.md index 329cc0d5b..21d40347a 100644 --- a/docs/en/4-Collaboration/Overview.md +++ b/docs/en/4-Collaboration/Overview.md @@ -1,8 +1,18 @@ ## Collaboration -Collaboration is essential in data science because it allows individuals with different perspectives and backgrounds to work together to solve complex problems and generate new insights. In data science, collaboration can involve working with individuals from diverse fields such as mathematics, computer science, and business, as well as subject matter experts who have deep knowledge of a particular industry or domain. - -There are many ways collaborate on the AAW. Which is best for your situation depends on what you're sharing and how many people you want to share with. Content to be shared breaks roughly into **Data**, **Code**, or **Compute Environments** (e.g.: sharing the same virtual machines) and who you want to share it with (**No one**, **My Team**, or **Everyone**). This leads to the following table of options +Collaboration is essential in data science because it allows individuals with +different perspectives and backgrounds to work together to solve complex +problems and generate new insights. In data science, collaboration can involve +working with individuals from diverse fields such as mathematics, computer +science, and business, as well as subject matter experts who have deep knowledge +of a particular industry or domain. + +There are many ways collaborate on the AAW. Which is best for your situation +depends on what you're sharing and how many people you want to share with. +Content to be shared breaks roughly into **Data**, **Code**, or **Compute +Environments** (e.g.: sharing the same virtual machines) and who you want to +share it with (**No one**, **My Team**, or **Everyone**). This leads to the +following table of options | | **Private** | **Team** | **StatCan** | | :---------: | :------------------------------: | :----------------------------------------: | :-----------: | @@ -10,14 +20,19 @@ There are many ways collaborate on the AAW. Which is best for your situation dep | **Data** | Personal folder or bucket | Team folder or bucket, or shared namespace | Shared Bucket | | **Compute** | Personal namespace | Shared namespace | N/A | -Sharing code, disks, and workspaces (e.g.: two people sharing the same virtual machine) is described in more detail below. Sharing data through buckets is described in more detail in the **[MinIO](../5-Storage/AzureBlobStorage.md)** section. +Sharing code, disks, and workspaces (e.g.: two people sharing the same virtual +machine) is described in more detail below. Sharing data through buckets is +described in more detail in the **[MinIO](../5-Storage/AzureBlobStorage.md)** +section. ??? question "What is the difference between a bucket and a folder?" Buckets are like Network Storage. See the [Storage overview](../5-Storage/Overview.md) for more discussion of the differences between these two ideas. -Choosing the best way to share code, data, and compute all involve different factors, but you can generally mix and match (share code with your team through -Github, but store your data privately in a personal bucket). These cases are described more in the below sections. +Choosing the best way to share code, data, and compute all involve different +factors, but you can generally mix and match (share code with your team through +Github, but store your data privately in a personal bucket). These cases are +described more in the below sections. ## Share code among team members diff --git a/docs/en/5-Storage/AzureBlobStorage.md b/docs/en/5-Storage/AzureBlobStorage.md index 97397999c..fd45aa8d5 100644 --- a/docs/en/5-Storage/AzureBlobStorage.md +++ b/docs/en/5-Storage/AzureBlobStorage.md @@ -1,12 +1,20 @@ # Overview -[Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) is Microsoft's object storage solution for the cloud. Blob Storage is optimized for storing massive amounts of unstructured data. Unstructured data is data that doesn't adhere to a particular data model or definition, such as text or binary data. +[Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) +is Microsoft's object storage solution for the cloud. Blob Storage is optimized +for storing massive amounts of unstructured data. Unstructured data is data that +doesn't adhere to a particular data model or definition, such as text or binary +data. Azure Blob Storage Containers are good at three things: -- Large amounts of data - Containers can be huge: way bigger than hard drives. And they are still fast. -- Accessible by multiple consumers at once - You can access the same data source from multiple Notebook Servers and pipelines at the same time without needing to duplicate the data. -- Sharing - Project namespaces can share a container. This is great for sharing data with people outside of your workspace. +- Large amounts of data - Containers can be huge: way bigger than hard drives. + And they are still fast. +- Accessible by multiple consumers at once - You can access the same data source + from multiple Notebook Servers and pipelines at the same time without needing + to duplicate the data. +- Sharing - Project namespaces can share a container. This is great for sharing + data with people outside of your workspace. # Setup @@ -17,18 +25,22 @@ Azure Blob Storage Containers are good at three things: ## Blob Container Mounted on a Notebook Server - The Blob CSI volumes are persisted under `/home/jovyan/buckets` when creating a Notebook Server. Files under `/buckets` are backed by Blob storage. All AAW notebooks will have the `/buckets` mounted to the file-system, making data accessible from everywhere. ![Blob folders mounted as Jupyter Notebook directories](../images/container-mount.png) # Unclassified Notebook AAW folder mount + ![Unclassified notebook folders mounted in Jupyter Notebook directories](../images/unclassified-mount.png) # Protected-b Notebook AAW folder mount + ![Protected-b notebooks mounted as Jupyter Notebook directories](../images/protectedb-mount.png) -These folders can be used like any other - you can copy files to/from using the file browser, write from Python/R, etc. The only difference is that the data is being stored in the Blob storage container rather than on a local disk (and is thus accessible wherever you can access your Kubeflow notebook). +These folders can be used like any other - you can copy files to/from using the +file browser, write from Python/R, etc. The only difference is that the data is +being stored in the Blob storage container rather than on a local disk (and is +thus accessible wherever you can access your Kubeflow notebook). ## How to Migrate from MinIO to Azure Blob Storage @@ -50,21 +62,22 @@ mc cp --recursive ``` - ## Container Types The following Blob containers are available: -Accessing all Blob containers is the same. The difference between containers is the storage type behind them: +Accessing all Blob containers is the same. The difference between containers is +the storage type behind them: - **aaw-unclassified:** By default, use this one. Stores unclassified data. - **aaw-protected-b:** Stores sensitive protected-b data. -- **aaw-unclassified-ro:** This classification is protected-b but read-only access. This is so users can view unclassified data within a protected-b notebook. +- **aaw-unclassified-ro:** This classification is protected-b but read-only + access. This is so users can view unclassified data within a protected-b + notebook. - ## Accessing Internal Data @@ -75,11 +88,17 @@ Accessing internal data uses the DAS common storage connection which has use for - **internal-unclassified** - **internal-protected-b** -They follow the same convention as the AAW containers above in terms of data, however there is a layer of isolation between StatCan employees and non-StatCan employees. Non-Statcan employees are only allowed in **external** containers, while StatCan employees can have access to any container. +They follow the same convention as the AAW containers above in terms of data, +however there is a layer of isolation between StatCan employees and non-StatCan +employees. Non-Statcan employees are only allowed in **external** containers, +while StatCan employees can have access to any container. -AAW has an integration with the FAIR Data Infrastructure team that allows users to transfer unclassified and protected-b data to Azure Storage Accounts, thus allowing users to access this data from Notebook Servers. +AAW has an integration with the FAIR Data Infrastructure team that allows users +to transfer unclassified and protected-b data to Azure Storage Accounts, thus +allowing users to access this data from Notebook Servers. -Please reach out to the FAIR Data Infrastructure team if you have a use case for this data. +Please reach out to the FAIR Data Infrastructure team if you have a use case for +this data. ## Pricing @@ -87,4 +106,6 @@ Please reach out to the FAIR Data Infrastructure team if you have a use case for !!! info "Pricing models are based on CPU and Memory usage" Pricing is covered by KubeCost for user namespaces (In Kubeflow at the bottom of the Notebooks tab). -In general, Blob Storage is much cheaper than [Azure Manage Disks](https://azure.microsoft.com/en-us/pricing/details/managed-disks/) and has better I/O than managed SSD. +In general, Blob Storage is much cheaper than +[Azure Manage Disks](https://azure.microsoft.com/en-us/pricing/details/managed-disks/) +and has better I/O than managed SSD. diff --git a/docs/en/5-Storage/Overview.md b/docs/en/5-Storage/Overview.md index 53d9b15e1..4cbf1544f 100644 --- a/docs/en/5-Storage/Overview.md +++ b/docs/en/5-Storage/Overview.md @@ -8,10 +8,10 @@ The platform provides several types of storage: Depending on your use case, either disk or bucket may be most suitable: -| Type | Simultaneous Users | Speed | Total size | Shareable with Other Users | -| ---------------------------------: | -----------------------------------------------------------------------: | ------------------------------------------------------: | ------------------------ | ------------------------- | -| **[Disk](Disks.md)** | One machine/notebook server at a time | Fastest (throughput and latency) | <=512GB total per drive | No | -| **[Container (via Azure Blob Storage)](AzureBlobStorage.md)** | Simultaneous access from many machines/notebook servers at the same time | Fast-ish (Fast download, modest upload, modest latency) | Infinite (within reason) | [Yes] | +| Type | Simultaneous Users | Speed | Total size | Shareable with Other Users | +| ------------------------------------------------------------: | -----------------------------------------------------------------------: | ------------------------------------------------------: | ------------------------ | -------------------------- | +| **[Disk](Disks.md)** | One machine/notebook server at a time | Fastest (throughput and latency) | <=512GB total per drive | No | +| **[Container (via Azure Blob Storage)](AzureBlobStorage.md)** | Simultaneous access from many machines/notebook servers at the same time | Fast-ish (Fast download, modest upload, modest latency) | Infinite (within reason) | [Yes] | ??? info "If you're unsure which to choose, don't sweat it" diff --git a/docs/en/6-Gitlab/Gitlab.md b/docs/en/6-Gitlab/Gitlab.md index 50f941818..871ba59c5 100644 --- a/docs/en/6-Gitlab/Gitlab.md +++ b/docs/en/6-Gitlab/Gitlab.md @@ -1,41 +1,56 @@ -## __IMPORTANT NOTES__ -1) Please do NOT store your token _anywhere_ in your workspace server file system. Contributors to a namespace will have access to them. -2) If there is a contributor external to Statistics Canada in your namespace, you will lose access to cloud main GitLab access! - -------------------- - - -Thankfully, using the cloud main GitLab on the AAW is just like how you would regularly use git. - -### Step 1: Locate the Git repo you want to clone and copy the clone with HTTPS option -If your repository is private, you will need to also do Step 4 (Creating a Personal Access Token) for this to go through. -For me this was a test repo -![image](https://user-images.githubusercontent.com/23174198/217060353-ba229ced-b5c1-4eae-8878-9608835cc65f.png) - -### Step 2: Paste the copied link into one of your workspace servers -![image](https://user-images.githubusercontent.com/23174198/217060697-535df6c1-d9bb-4bc3-a42b-9f085a5386d5.png) - -### Step 3: Success! -As seen in the above screenshot I have cloned the repo! - -### Step 4: Create a Personal Access Token for pushing (also used if pulling from a private repository) -If you try to `git push ....` you will encounter an error eventually leading you to the [GitLab help documentation](https://gitlab.k8s.cloud.statcan.ca/help/user/profile/account/two_factor_authentication.md#error-http-basic-access-denied-the-provided-password-or-token-) - -You will need to make a Personal Access Token for this. To achieve this go in GitLab, click your profile icon and then hit `Preferences` and then `Access Tokens` -![image](https://user-images.githubusercontent.com/23174198/217061060-122dded8-dc80-46ce-a907-a85913cf5dd7.png) -Follow the prompts entering the name, the token expiration date and granting the token permissions (I granted `write_repository`) - -### Step 5: Personalize `Git` to be you -Run `git config user.email ....` and `git config user.name ...` to match your GitLab identity. - -### Step 6: Supply the Generated Token when asked for your password -The token will by copy-able at the top once you hit `Create personal access token` at the bottom -![image](https://user-images.githubusercontent.com/23174198/217062846-03a715f1-ded5-4d80-ad4b-c647ae5e30fd.png) - -Once you have prepared everything it's time -![image](https://user-images.githubusercontent.com/23174198/217063198-c1bd6c3a-ebc5-444d-98ba-24ef32faa20e.png) - - -### Step 7: See the results of your hard work in GitLab -![image](https://user-images.githubusercontent.com/23174198/217063990-efaa8e81-a0eb-4b6d-842e-2ca3112bb4f7.png) - +## **IMPORTANT NOTES** + +1. Please do NOT store your token _anywhere_ in your workspace server file + system. Contributors to a namespace will have access to them. +2. If there is a contributor external to Statistics Canada in your namespace, + you will lose access to cloud main GitLab access! + +--- + +Thankfully, using the cloud main GitLab on the AAW is just like how you would +regularly use git. + +### Step 1: Locate the Git repo you want to clone and copy the clone with HTTPS option + +If your repository is private, you will need to also do Step 4 (Creating a +Personal Access Token) for this to go through. For me this was a test repo +![image](https://user-images.githubusercontent.com/23174198/217060353-ba229ced-b5c1-4eae-8878-9608835cc65f.png) + +### Step 2: Paste the copied link into one of your workspace servers + +![image](https://user-images.githubusercontent.com/23174198/217060697-535df6c1-d9bb-4bc3-a42b-9f085a5386d5.png) + +### Step 3: Success! + +As seen in the above screenshot I have cloned the repo! + +### Step 4: Create a Personal Access Token for pushing (also used if pulling from a private repository) + +If you try to `git push ....` you will encounter an error eventually leading you +to the +[GitLab help documentation](https://gitlab.k8s.cloud.statcan.ca/help/user/profile/account/two_factor_authentication.md#error-http-basic-access-denied-the-provided-password-or-token-) + +You will need to make a Personal Access Token for this. To achieve this go in +GitLab, click your profile icon and then hit `Preferences` and then +`Access Tokens` +![image](https://user-images.githubusercontent.com/23174198/217061060-122dded8-dc80-46ce-a907-a85913cf5dd7.png) +Follow the prompts entering the name, the token expiration date and granting the +token permissions (I granted `write_repository`) + +### Step 5: Personalize `Git` to be you + +Run `git config user.email ....` and `git config user.name ...` to match your +GitLab identity. + +### Step 6: Supply the Generated Token when asked for your password + +The token will by copy-able at the top once you hit +`Create personal access token` at the bottom +![image](https://user-images.githubusercontent.com/23174198/217062846-03a715f1-ded5-4d80-ad4b-c647ae5e30fd.png) + +Once you have prepared everything it's time +![image](https://user-images.githubusercontent.com/23174198/217063198-c1bd6c3a-ebc5-444d-98ba-24ef32faa20e.png) + +### Step 7: See the results of your hard work in GitLab + +![image](https://user-images.githubusercontent.com/23174198/217063990-efaa8e81-a0eb-4b6d-842e-2ca3112bb4f7.png) diff --git a/docs/en/index.md b/docs/en/index.md index dab50f0a7..6b541f4ca 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -12,15 +12,24 @@ _Welcome to the world of data science and machine learning!_ !!! info "What is the AAW?" **[Advanced Analytics Workspace](https://analytics-platform.statcan.gc.ca/)** is an open source platform designed for data scientists, data stewards, analysts and researchers familiar with open source tools and coding. Developed by data scientists for data scientists, AAW provides a flexible environment that enables advanced practitioners to get their work done with ease. -The AAW is a comprehensive solution for data science and data analytics. With the AAW, you can customize notebook server deployments to suit your specific data science needs. We have a small number of custom Docker images made by our team. +The AAW is a comprehensive solution for data science and data analytics. With +the AAW, you can customize notebook server deployments to suit your specific +data science needs. We have a small number of custom Docker images made by our +team. !!! info "What is Kubeflow?" The AAW is based on [Kubeflow](https://www.kubeflow.org/), an open source comprehensive solution for deploying and managing end-to-end ML workflows. -Whether you're just getting started or already knee-deep in data analysis, the Advanced Analytics Workspace has everything you need to take your work to the next level. From powerful tools for data pipelines to cloud storage for your datasets, our platform has it all. Need to collaborate with colleagues or publish your results? No problem. We offer seamless collaboration features that make it easy to work together and share your work with others. +Whether you're just getting started or already knee-deep in data analysis, the +Advanced Analytics Workspace has everything you need to take your work to the +next level. From powerful tools for data pipelines to cloud storage for your +datasets, our platform has it all. Need to collaborate with colleagues or +publish your results? No problem. We offer seamless collaboration features that +make it easy to work together and share your work with others. -No matter what stage of your data science journey you're at, the Advanced Analytics Workspace has the resources you need to succeed. +No matter what stage of your data science journey you're at, the Advanced +Analytics Workspace has the resources you need to succeed. ## Getting Started with the AAW @@ -30,7 +39,9 @@ No matter what stage of your data science journey you're at, the Advanced Analyt ### The AAW Portal -The AAW portal homepage is available for internal users only. However, external users with a cloud account granted access by the business sponsor can access the platform through the analytics-platform URL. +The AAW portal homepage is available for internal users only. However, external +users with a cloud account granted access by the business sponsor can access the +platform through the analytics-platform URL. !!! info annotate "AAW Portal Homepage" @@ -54,18 +65,26 @@ The AAW portal homepage is available for internal users only. However, external

**[👉 Click here to setup your Kubeflow account! 👈](https://kubeflow.aaw.cloud.statcan.ca/)**

-**[Kubeflow](1-Experiments/Kubeflow/)** is a powerful and flexible open source platform that allows for dynamic leverage of cloud compute, with users having the ability to control compute, memory, and storage resources used. +**[Kubeflow](1-Experiments/Kubeflow/)** is a powerful and flexible open source +platform that allows for dynamic leverage of cloud compute, with users having +the ability to control compute, memory, and storage resources used. Kubeflow simplifies the following tasks: -- Creating customizable environments to work with data with user-controlled resource provisioning (custom CPU, GPU, RAM and storage). -- Managing notebook servers including Ubuntu Desktop (via noVNC), R Studio, JupyterLab with Python, R, Julia and SAS for Statistics Canada employees. +- Creating customizable environments to work with data with user-controlled + resource provisioning (custom CPU, GPU, RAM and storage). +- Managing notebook servers including Ubuntu Desktop (via noVNC), R Studio, + JupyterLab with Python, R, Julia and SAS for Statistics Canada employees. !!! info "Kubeflow Dashboard" - [**Kubeflow Dashboard**](https://kubeflow.aaw.cloud.statcan.ca/) Use this link once you have your cloud account! -Getting started with the Advanced Analytics Workspace (AAW) is easy and quick. First, you'll want to login to Kubeflow to create your first notebook server running JupyterLab, RStudio or Ubuntu Desktop. We encourage you to join our Slack channel to connect with other data scientists and analysts, ask questions, and share your experiences with the AAW platform. +Getting started with the Advanced Analytics Workspace (AAW) is easy and quick. +First, you'll want to login to Kubeflow to create your first notebook server +running JupyterLab, RStudio or Ubuntu Desktop. We encourage you to join our +Slack channel to connect with other data scientists and analysts, ask questions, +and share your experiences with the AAW platform. ### Slack @@ -77,15 +96,34 @@ Getting started with the Advanced Analytics Workspace (AAW) is easy and quick. F - **Use the _General_ Channel!** -At StatCan, we understand that embarking on a new project can be overwhelming, and you're likely to have many platform-related questions along the way. That's why we've created a dedicated **[Slack channel](https://statcan-aaw.slack.com/)** to provide you with the support you need. Our team of experts is standing by to answer your questions, address any concerns, and guide you through every step of the process. - -To join our **[Slack channel](https://statcan-aaw.slack.com/)**, simply click on the link provided and follow the instructions. You'll be prompted to create an account in the upper right-hand corner of the page. If you have an `@statcan.gc.ca` email address, use it when signing up as this will ensure that you are automatically approved and can start engaging with our community right away. - -Once you've created your account, you'll have access to a wealth of resources and information, as well as the opportunity to connect with other users who are working on similar projects. Our **[Slack channel](https://statcan-aaw.slack.com/)** is the perfect place to ask questions, share insights, and collaborate with your peers in real-time. Whether you're just getting started with a new project or you're looking for expert advice on a complex issue, our team is here to help. - -So don't hesitate - join our **[Slack channel](https://statcan-aaw.slack.com/)** today and start getting the answers you need to succeed. We look forward to welcoming you to our community! - -Click on the link, then choose "Create an account" in the upper right-hand corner. +At StatCan, we understand that embarking on a new project can be overwhelming, +and you're likely to have many platform-related questions along the way. That's +why we've created a dedicated +**[Slack channel](https://statcan-aaw.slack.com/)** to provide you with the +support you need. Our team of experts is standing by to answer your questions, +address any concerns, and guide you through every step of the process. + +To join our **[Slack channel](https://statcan-aaw.slack.com/)**, simply click on +the link provided and follow the instructions. You'll be prompted to create an +account in the upper right-hand corner of the page. If you have an +`@statcan.gc.ca` email address, use it when signing up as this will ensure that +you are automatically approved and can start engaging with our community right +away. + +Once you've created your account, you'll have access to a wealth of resources +and information, as well as the opportunity to connect with other users who are +working on similar projects. Our +**[Slack channel](https://statcan-aaw.slack.com/)** is the perfect place to ask +questions, share insights, and collaborate with your peers in real-time. Whether +you're just getting started with a new project or you're looking for expert +advice on a complex issue, our team is here to help. + +So don't hesitate - join our **[Slack channel](https://statcan-aaw.slack.com/)** +today and start getting the answers you need to succeed. We look forward to +welcoming you to our community! + +Click on the link, then choose "Create an account" in the upper right-hand +corner. !!! note "" @@ -96,15 +134,22 @@ Click on the link, then choose "Create an account" in the upper right-hand corne ## 🧭 Getting Started -To access AAW services, you need to log in to Kubeflow with your StatCan guest cloud account. Once logged in, select Notebook Servers and click the "New Server" button to get started. +To access AAW services, you need to log in to Kubeflow with your StatCan guest +cloud account. Once logged in, select Notebook Servers and click the "New +Server" button to get started. -1. Login to [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) with your StatCan guest cloud account. You will be prompted to authenticate the account. +1. Login to [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) with your StatCan + guest cloud account. You will be prompted to authenticate the account. 2. Select Notebook Servers. 3. Click the "➕ New Server" button. ## 🧰 Tools Offered -AAW is a flexible platform for data analysis and machine learning. It offers a range of languages, including Python, R, and Julia. AAW also supports development environments such as VS Code, R Studio, and Jupyter Notebooks. Additionally, Linux virtual desktops are available for users who require additional tools such as OpenM++ and QGIS. +AAW is a flexible platform for data analysis and machine learning. It offers a +range of languages, including Python, R, and Julia. AAW also supports +development environments such as VS Code, R Studio, and Jupyter Notebooks. +Additionally, Linux virtual desktops are available for users who require +additional tools such as OpenM++ and QGIS. Here's a list of tools we offer: @@ -118,8 +163,11 @@ Here's a list of tools we offer: - Jupyter Notebooks - 🐧 Linux virtual desktops for additional tools (🧫 OpenM++, 🌏 QGIS etc.) -Sharing code, disks, and workspaces (e.g.: two people sharing the same virtual machine) is described in more detail in the [Collaboration](4-Collaboration/Overview.md) section. Sharing data through buckets is described in more detail in the **[Azure Blob Storage](./5-Storage/AzureBlobStorage.md)** -section. +Sharing code, disks, and workspaces (e.g.: two people sharing the same virtual +machine) is described in more detail in the +[Collaboration](4-Collaboration/Overview.md) section. Sharing data through +buckets is described in more detail in the +**[Azure Blob Storage](./5-Storage/AzureBlobStorage.md)** section. ### 💡 Help @@ -130,14 +178,17 @@ section. - 📗 AAW Portal Documentation - [https://statcan.github.io/aaw/](https://statcan.github.io/aaw/) - 📘 Kubeflow Documentation - - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) + - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) - 🤝 Slack Support Channel - [https://statcan-aaw.slack.com](https://statcan-aaw.slack.com) ## 🐱 Demos -If you require a quick onboarding demo session, need help, or have any questions, please reach out to us through our [🤝 Slack Support Channel](https://statcan-aaw.slack.com). +If you require a quick onboarding demo session, need help, or have any +questions, please reach out to us through our +[🤝 Slack Support Channel](https://statcan-aaw.slack.com). ## Contributing -If you have any bugs to report or features to request please do so via https://github.com/StatCan/aaw. +If you have any bugs to report or features to request please do so via +https://github.com/StatCan/aaw. diff --git a/docs/en/welcome-message.md b/docs/en/welcome-message.md index 3c8ba1cba..ac79c7614 100644 --- a/docs/en/welcome-message.md +++ b/docs/en/welcome-message.md @@ -2,33 +2,48 @@ # 🧙🔮 Welcome to Advanced Analytics Workspace (AAW) -Please find below additional information, videos and links to help better understand how to get started with Advanced Analytics Workspace (AAW). +Please find below additional information, videos and links to help better +understand how to get started with Advanced Analytics Workspace (AAW). -Advanced Analytics Workspace (AAW) is our **_open source platform for data science and machine learning (ML)_** for **advanced practitioners** to get their work done in an **unrestricted environment** made by data scientists _for_ data scientists. With AAW, you can customize your notebook deployments to suit your data science needs. We also have a small number of expertly crafted images made by our expert data science team. +Advanced Analytics Workspace (AAW) is our **_open source platform for data +science and machine learning (ML)_** for **advanced practitioners** to get their +work done in an **unrestricted environment** made by data scientists _for_ data +scientists. With AAW, you can customize your notebook deployments to suit your +data science needs. We also have a small number of expertly crafted images made +by our expert data science team. -AAW is based on the Kubeflow project which is an open source comprehensive solution for deploying and managing end-to-end ML workflows. Kubeflow is designed to make deployments of ML workflows on **Kubernetes** simple, portable and scalable. +AAW is based on the Kubeflow project which is an open source comprehensive +solution for deploying and managing end-to-end ML workflows. Kubeflow is +designed to make deployments of ML workflows on **Kubernetes** simple, portable +and scalable. -🔔 **Important!** Users external to Statistics Canada will require a cloud account granted access by the business sponsor. +🔔 **Important!** Users external to Statistics Canada will require a cloud +account granted access by the business sponsor. -🔔 **Important!** Users internal to Statistics Canada can get started right away without any additional sign up procedures, just head to [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/). +🔔 **Important!** Users internal to Statistics Canada can get started right away +without any additional sign up procedures, just head to +[https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/). ## 🔗 Helpful Links ### 🛎️ AAW Services - 🌀 AAW Portal Homepage - - **Internal Only** [https://www.statcan.gc.ca/data-analytics-service/aaw](https://www.statcan.gc.ca/data-analytics-service/aaw) - - **Internal/External** [https://analytics-platform.statcan.gc.ca/covid19](https://analytics-platform.statcan.gc.ca/covid19) + + - **Internal Only** + [https://www.statcan.gc.ca/data-analytics-service/aaw](https://www.statcan.gc.ca/data-analytics-service/aaw) + - **Internal/External** + [https://analytics-platform.statcan.gc.ca/covid19](https://analytics-platform.statcan.gc.ca/covid19) - 🤖 Kubeflow Dashboard - - [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/) + - [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/) ### 💡 Help - 📗 AAW Portal Documentation - [https://statcan.github.io/aaw/](https://statcan.github.io/aaw/) - 📘 Kubeflow Documentation - - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) + - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) - 🤝 Slack Support Channel - [https://statcan-aaw.slack.com](https://statcan-aaw.slack.com) @@ -36,7 +51,8 @@ AAW is based on the Kubeflow project which is an open source comprehensive solut In order to access the AAW services, you will need to: -1. Login to [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) with your StatCan guest cloud account. You will be prompted to authenticate the account. +1. Login to [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) with your StatCan + guest cloud account. You will be prompted to authenticate the account. 2. Select Notebook Servers. 3. Click the "➕ New Server" button. @@ -44,22 +60,25 @@ In order to access the AAW services, you will need to: AAW is a flexible platform for data analysis and machine learning, featuring: - - 📜 Languages - - 🐍 Python - - 📈 R - - 👩‍🔬 Julia - - 🧮 Development environments - - VS Code - - R Studio - - Jupyter Notebooks - - 🐧 Linux virtual desktops for additional tools (🧫 OpenM++, 🌏 QGIS etc.) +- 📜 Languages + - 🐍 Python + - 📈 R + - 👩‍🔬 Julia +- 🧮 Development environments + - VS Code + - R Studio + - Jupyter Notebooks +- 🐧 Linux virtual desktops for additional tools (🧫 OpenM++, 🌏 QGIS etc.) ## 🐱 Demos -If you would like a quick Onboarding Demo session or require any help or have any questions, please do not hesitate to reach out through our [🤝 Slack Support Channel](https://statcan-aaw.slack.com). +If you would like a quick Onboarding Demo session or require any help or have +any questions, please do not hesitate to reach out through our +[🤝 Slack Support Channel](https://statcan-aaw.slack.com). ## FAQ -- Frequently Asked Questions are located [here](https://github.com/StatCan/aaw/blob/master/README.md). +- Frequently Asked Questions are located + [here](https://github.com/StatCan/aaw/blob/master/README.md). Thank you! diff --git a/docs/en/welcome.md b/docs/en/welcome.md index d800063c2..3ea888c78 100644 --- a/docs/en/welcome.md +++ b/docs/en/welcome.md @@ -2,77 +2,116 @@ # 🧙🔮 Welcome to Advanced Analytics Workspace (AAW) -> "What we want to do is make a leapfrog product that is way smarter than any mobile device has ever been, and super-easy to use. This is what iPhone is. OK? So, we're going to reinvent the phone." -> -- Steve Jobs - -_Please find below additional information, videos and links to help better understand how to get started with Advanced Analytics Workspace (AAW)._ - -Advanced Analytics Workspace (AAW) is an open source platform designed for data science and machine learning (ML) practitioners. Developed by data scientists for data scientists, AAW provides an unrestricted environment that enables advanced practitioners to get their work done with ease. - -Built on the Kubeflow project, AAW is a comprehensive solution for deploying and managing end-to-end ML workflows. It simplifies the deployment of ML workflows on Kubernetes, making it simple, portable, and scalable. With AAW, you can customize your notebook deployments to suit your specific data science needs. Additionally, we have a small number of expertly crafted images made by our team of data science experts. - -Advanced Analytics Workspace (AAW) is our **_open source platform for data science and machine learning (ML)_** for **advanced practitioners** to get their work done in an **unrestricted environment** made by data scientists _for_ data scientists. With AAW, you can customize your notebook deployments to suit your data science needs. We also have a small number of expertly crafted images made by our expert data science team. - -AAW is based on the Kubeflow project which is an open source comprehensive solution for deploying and managing end-to-end ML workflows. Kubeflow is designed to make deployments of ML workflows on **Kubernetes** simple, portable and scalable. - -🔔 **Important!** Users external to Statistics Canada will require a cloud account granted access by the business sponsor. - -🔔 **Important!** Users internal to Statistics Canada can get started right away without any additional sign up procedures, just head to [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/). +> "What we want to do is make a leapfrog product that is way smarter than any +> mobile device has ever been, and super-easy to use. This is what iPhone is. +> OK? So, we're going to reinvent the phone." -- Steve Jobs + +_Please find below additional information, videos and links to help better +understand how to get started with Advanced Analytics Workspace (AAW)._ + +Advanced Analytics Workspace (AAW) is an open source platform designed for data +science and machine learning (ML) practitioners. Developed by data scientists +for data scientists, AAW provides an unrestricted environment that enables +advanced practitioners to get their work done with ease. + +Built on the Kubeflow project, AAW is a comprehensive solution for deploying and +managing end-to-end ML workflows. It simplifies the deployment of ML workflows +on Kubernetes, making it simple, portable, and scalable. With AAW, you can +customize your notebook deployments to suit your specific data science needs. +Additionally, we have a small number of expertly crafted images made by our team +of data science experts. + +Advanced Analytics Workspace (AAW) is our **_open source platform for data +science and machine learning (ML)_** for **advanced practitioners** to get their +work done in an **unrestricted environment** made by data scientists _for_ data +scientists. With AAW, you can customize your notebook deployments to suit your +data science needs. We also have a small number of expertly crafted images made +by our expert data science team. + +AAW is based on the Kubeflow project which is an open source comprehensive +solution for deploying and managing end-to-end ML workflows. Kubeflow is +designed to make deployments of ML workflows on **Kubernetes** simple, portable +and scalable. + +🔔 **Important!** Users external to Statistics Canada will require a cloud +account granted access by the business sponsor. + +🔔 **Important!** Users internal to Statistics Canada can get started right away +without any additional sign up procedures, just head to +[https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/). ## 🔗 Helpful Links ### 🛎️ AAW Services -The AAW portal homepage is available for internal users only. However, external users with a cloud account granted access by the business sponsor can access the platform through the analytics-platform URL. +The AAW portal homepage is available for internal users only. However, external +users with a cloud account granted access by the business sponsor can access the +platform through the analytics-platform URL. - 🌀 AAW Portal Homepage - - **Internal Only** [https://www.statcan.gc.ca/data-analytics-service/aaw](https://www.statcan.gc.ca/data-analytics-service/aaw) - - **Internal/External** [https://analytics-platform.statcan.gc.ca/covid19](https://analytics-platform.statcan.gc.ca/covid19) + + - **Internal Only** + [https://www.statcan.gc.ca/data-analytics-service/aaw](https://www.statcan.gc.ca/data-analytics-service/aaw) + - **Internal/External** + [https://analytics-platform.statcan.gc.ca/covid19](https://analytics-platform.statcan.gc.ca/covid19) - 🤖 Kubeflow Dashboard - - [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/) + - [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/) ### 💡 Help -The AAW Portal Documentation and Kubeflow Documentation provide helpful resources to get started with AAW. If you need further assistance, our Slack Support Channel is available for support. +The AAW Portal Documentation and Kubeflow Documentation provide helpful +resources to get started with AAW. If you need further assistance, our Slack +Support Channel is available for support. - 📗 AAW Portal Documentation - [https://statcan.github.io/aaw/](https://statcan.github.io/aaw/) - 📘 Kubeflow Documentation - - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) + - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) - 🤝 Slack Support Channel - [https://statcan-aaw.slack.com](https://statcan-aaw.slack.com) ## 🧭 Getting Started -To access AAW services, you need to log in to Kubeflow with your StatCan guest cloud account. Once logged in, select Notebook Servers and click the "New Server" button to get started. +To access AAW services, you need to log in to Kubeflow with your StatCan guest +cloud account. Once logged in, select Notebook Servers and click the "New +Server" button to get started. -1. Login to [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) with your StatCan guest cloud account. You will be prompted to authenticate the account. +1. Login to [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) with your StatCan + guest cloud account. You will be prompted to authenticate the account. 2. Select Notebook Servers. 3. Click the "➕ New Server" button. ## 🧰 Tools Offered -AAW is a flexible platform for data analysis and machine learning. It offers a range of languages, including Python, R, and Julia. AAW also supports development environments such as VS Code, R Studio, and Jupyter Notebooks. Additionally, Linux virtual desktops are available for users who require additional tools such as OpenM++ and QGIS. +AAW is a flexible platform for data analysis and machine learning. It offers a +range of languages, including Python, R, and Julia. AAW also supports +development environments such as VS Code, R Studio, and Jupyter Notebooks. +Additionally, Linux virtual desktops are available for users who require +additional tools such as OpenM++ and QGIS. Here's a list of tools we offer: - - 📜 Languages: - - 🐍 Python - - 📈 R - - 👩‍🔬 Julia - - 🧮 Development environments: - - VS Code - - R Studio - - Jupyter Notebooks - - 🐧 Linux virtual desktops for additional tools (🧫 OpenM++, 🌏 QGIS etc.) +- 📜 Languages: + - 🐍 Python + - 📈 R + - 👩‍🔬 Julia +- 🧮 Development environments: + - VS Code + - R Studio + - Jupyter Notebooks +- 🐧 Linux virtual desktops for additional tools (🧫 OpenM++, 🌏 QGIS etc.) ## 🐱 Demos -If you require a quick onboarding demo session, need help, or have any questions, please reach out to us through our [🤝 Slack Support Channel](https://statcan-aaw.slack.com). +If you require a quick onboarding demo session, need help, or have any +questions, please reach out to us through our +[🤝 Slack Support Channel](https://statcan-aaw.slack.com). ## Frequently Asked Questions -For frequently asked questions, please refer to the FAQ section in our Github repository, located [here](https://github.com/StatCan/aaw/blob/master/README.md). +For frequently asked questions, please refer to the FAQ section in our Github +repository, located +[here](https://github.com/StatCan/aaw/blob/master/README.md). **Thank you for choosing Advanced Analytics Workspace!** diff --git a/docs/fr/1-Experiences/Jupyter.md b/docs/fr/1-Experiences/Jupyter.md index 4ab6a7620..91ab2dc18 100644 --- a/docs/fr/1-Experiences/Jupyter.md +++ b/docs/fr/1-Experiences/Jupyter.md @@ -98,10 +98,27 @@ de détails** _L'analyse des données est un art sous-estimé._ -L'analyse des données est le processus d'examen et d'interprétation de grandes quantités de données pour extraire des informations utiles et tirer des conclusions significatives. Cela peut être fait à l'aide de diverses techniques et outils, tels que l'analyse statistique, l'apprentissage automatique et la visualisation. L'objectif de l'analyse des données est de découvrir des modèles, des tendances et des relations dans les données, qui peuvent ensuite être utilisés pour éclairer les décisions et résoudre les problèmes. L'analyse de données est utilisée dans un large éventail de domaines, des affaires et de la finance aux soins de santé et à la science, pour aider les organisations à prendre des décisions plus éclairées sur la base de preuves et d'informations basées sur des données. +L'analyse des données est le processus d'examen et d'interprétation de grandes +quantités de données pour extraire des informations utiles et tirer des +conclusions significatives. Cela peut être fait à l'aide de diverses techniques +et outils, tels que l'analyse statistique, l'apprentissage automatique et la +visualisation. L'objectif de l'analyse des données est de découvrir des modèles, +des tendances et des relations dans les données, qui peuvent ensuite être +utilisés pour éclairer les décisions et résoudre les problèmes. L'analyse de +données est utilisée dans un large éventail de domaines, des affaires et de la +finance aux soins de santé et à la science, pour aider les organisations à +prendre des décisions plus éclairées sur la base de preuves et d'informations +basées sur des données. ### JupyterLab _Traiter les données à l'aide de R, Python ou Julia dans JupyterLab_ -Le traitement des données à l'aide de R, Python ou Julia est simplifié grâce à l'espace de travail d'analyse avancée. Que vous débutiez dans l'analyse de données ou que vous soyez un data scientist expérimenté, notre plateforme prend en charge une gamme de langages de programmation pour répondre à vos besoins. Vous pouvez installer et exécuter des packages pour R ou Python pour effectuer des tâches de traitement de données telles que le nettoyage, la transformation et la modélisation des données. Si vous préférez Julia, notre plateforme offre également un support pour ce langage de programmation. +Le traitement des données à l'aide de R, Python ou Julia est simplifié grâce à +l'espace de travail d'analyse avancée. Que vous débutiez dans l'analyse de +données ou que vous soyez un data scientist expérimenté, notre plateforme prend +en charge une gamme de langages de programmation pour répondre à vos besoins. +Vous pouvez installer et exécuter des packages pour R ou Python pour effectuer +des tâches de traitement de données telles que le nettoyage, la transformation +et la modélisation des données. Si vous préférez Julia, notre plateforme offre +également un support pour ce langage de programmation. diff --git a/docs/fr/1-Experiences/Selectionner-une-Image.md b/docs/fr/1-Experiences/Selectionner-une-Image.md index 706961483..c3599274c 100644 --- a/docs/fr/1-Experiences/Selectionner-une-Image.md +++ b/docs/fr/1-Experiences/Selectionner-une-Image.md @@ -32,9 +32,19 @@ vous êtes intéressé spécifiquement par **_TensorFlow_** ou **_PyTorch_**, no avons également les images `jupyterlab-tensorflow` et` jupyterlab-pytorch` qui viennent avec ces outils pré-installés. -Pour l'image `jupyterlab-pytorch`, les packages PyTorch (torch, torchvision et torchaudio) sont installés dans l'environnement conda `torch`. Vous devez activer cet environnement pour utiliser PyTorch. - -Pour les images `jupyterlab-cpu`, `jupyterlab-tensorflow` et `jupyterlab-pytorch`, dans le shell par défaut, la commande `conda activate` peut ne pas fonctionner. Cela est dû au fait que l'environnement n'est pas correctement initialisé. Dans ce cas, exécutez « bash », vous devriez voir le logo AAW et quelques instructions apparaissent. Après cela, "conda activate" devrait fonctionner correctement. Si vous voyez le logo AAW au démarrage, cela signifie que l'environnement est correctement initialisé et que « conda activate » devrait fonctionner correctement. Un correctif pour ce bogue est en préparation, une fois cela corrigé, ce paragraphe sera supprimé. +Pour l'image `jupyterlab-pytorch`, les packages PyTorch (torch, torchvision et +torchaudio) sont installés dans l'environnement conda `torch`. Vous devez +activer cet environnement pour utiliser PyTorch. + +Pour les images `jupyterlab-cpu`, `jupyterlab-tensorflow` et +`jupyterlab-pytorch`, dans le shell par défaut, la commande `conda activate` +peut ne pas fonctionner. Cela est dû au fait que l'environnement n'est pas +correctement initialisé. Dans ce cas, exécutez « bash », vous devriez voir le +logo AAW et quelques instructions apparaissent. Après cela, "conda activate" +devrait fonctionner correctement. Si vous voyez le logo AAW au démarrage, cela +signifie que l'environnement est correctement initialisé et que « conda +activate » devrait fonctionner correctement. Un correctif pour ce bogue est en +préparation, une fois cela corrigé, ce paragraphe sera supprimé. Chaque image est préchargée avec VS Code dans le navigateur si vous préférez une expérience IDE complète. diff --git a/docs/fr/2-Publication/Dash.md b/docs/fr/2-Publication/Dash.md index 80b552e94..b71e681a3 100644 --- a/docs/fr/2-Publication/Dash.md +++ b/docs/fr/2-Publication/Dash.md @@ -1,10 +1,11 @@ # Aperçu -Dash est un excellent outil utilisé par beaucoup pour l'analyse et l'exploration de données, -la visualisation, la modélisation, le contrôle des instruments et la création de rapports. +Dash est un excellent outil utilisé par beaucoup pour l'analyse et l'exploration +de données, la visualisation, la modélisation, le contrôle des instruments et la +création de rapports. -L'exemple suivant illustre une application Dash hautement réactive et personnalisée -avec peu de code. +L'exemple suivant illustre une application Dash hautement réactive et +personnalisée avec peu de code. !!! note "Exécution de votre serveur bloc-note et accès au port" @@ -21,9 +22,9 @@ avec peu de code. ## Visualisation des données avec Dash -Dash simplifie la création d'une interface graphique interactive autour de votre code d'analyse de données. -Ceci est un exemple de mise en page avec figure et curseur de -[Dash](https://dash.plotly.com/basic-callbacks). +Dash simplifie la création d'une interface graphique interactive autour de votre +code d'analyse de données. Ceci est un exemple de mise en page avec figure et +curseur de [Dash](https://dash.plotly.com/basic-callbacks). ![dash_plot](../images/plot.png) @@ -31,11 +32,23 @@ Ceci est un exemple de mise en page avec figure et curseur de _Publier avec des logiciels fabriqués au Canada._ -**[Plotly Dash](/2-Publishing/Dash/)** est une bibliothèque Python populaire qui vous permet de créer facilement des visualisations et des tableaux de bord Web interactifs. Développé par la société montréalaise Plotly, Dash a acquis la réputation d'être un outil puissant et flexible pour créer des graphiques de science des données personnalisés. Avec Dash, vous pouvez tout créer, des simples graphiques linéaires aux tableaux de bord complexes de plusieurs pages avec des widgets et des commandes interactifs. Parce qu'il repose sur des technologies open source telles que Flask, React et Plotly.js, Dash est hautement personnalisable et peut être facilement intégré à d'autres outils et workflows de science des données. Que vous soyez data scientist, analyste ou développeur, Dash peut vous aider à créer des visualisations attrayantes et informatives qui donnent vie à vos données. +**[Plotly Dash](/2-Publishing/Dash/)** est une bibliothèque Python populaire qui +vous permet de créer facilement des visualisations et des tableaux de bord Web +interactifs. Développé par la société montréalaise Plotly, Dash a acquis la +réputation d'être un outil puissant et flexible pour créer des graphiques de +science des données personnalisés. Avec Dash, vous pouvez tout créer, des +simples graphiques linéaires aux tableaux de bord complexes de plusieurs pages +avec des widgets et des commandes interactifs. Parce qu'il repose sur des +technologies open source telles que Flask, React et Plotly.js, Dash est +hautement personnalisable et peut être facilement intégré à d'autres outils et +workflows de science des données. Que vous soyez data scientist, analyste ou +développeur, Dash peut vous aider à créer des visualisations attrayantes et +informatives qui donnent vie à vos données. # Commencer -Ouvrez une fenêtre de terminal dans votre notebook Jupyter et exécutez les commandes suivantes : +Ouvrez une fenêtre de terminal dans votre notebook Jupyter et exécutez les +commandes suivantes : ```python # installations requises si elles ne sont pas déjà installées diff --git a/docs/fr/2-Publication/Overview.md b/docs/fr/2-Publication/Overview.md index d1219a3e7..9df4ed045 100644 --- a/docs/fr/2-Publication/Overview.md +++ b/docs/fr/2-Publication/Overview.md @@ -1,13 +1,43 @@ ## Publication statistique -_De beaux graphismes sont importants dans la publication statistique car ils rendent les données plus accessibles et compréhensibles pour un public plus large._ +_De beaux graphismes sont importants dans la publication statistique car ils +rendent les données plus accessibles et compréhensibles pour un public plus +large._ -La publication est un aspect essentiel de la science des données et des statistiques. Il permet aux chercheurs de partager leurs découvertes avec la communauté scientifique au sens large, permettant à d'autres de s'appuyer sur leurs travaux et de faire avancer le domaine. En partageant ouvertement leurs données et leurs méthodes, les chercheurs peuvent recevoir des commentaires sur leurs travaux et s'assurer que leurs conclusions sont exactes et fiables. +La publication est un aspect essentiel de la science des données et des +statistiques. Il permet aux chercheurs de partager leurs découvertes avec la +communauté scientifique au sens large, permettant à d'autres de s'appuyer sur +leurs travaux et de faire avancer le domaine. En partageant ouvertement leurs +données et leurs méthodes, les chercheurs peuvent recevoir des commentaires sur +leurs travaux et s'assurer que leurs conclusions sont exactes et fiables. -La publication permet aux chercheurs d'établir leur réputation et d'obtenir la reconnaissance de leurs travaux, ce qui peut aider à obtenir des financements et de futures opportunités de recherche. En outre, la publication des résultats de la recherche peut avoir des implications importantes pour les politiques publiques et la prise de décision, car les décideurs s'appuient souvent sur des preuves scientifiques pour prendre des décisions éclairées. Dans l'ensemble, la publication fait partie intégrante du processus scientifique et joue un rôle essentiel dans l'avancement des connaissances et la résolution de problèmes du monde réel. +La publication permet aux chercheurs d'établir leur réputation et d'obtenir la +reconnaissance de leurs travaux, ce qui peut aider à obtenir des financements et +de futures opportunités de recherche. En outre, la publication des résultats de +la recherche peut avoir des implications importantes pour les politiques +publiques et la prise de décision, car les décideurs s'appuient souvent sur des +preuves scientifiques pour prendre des décisions éclairées. Dans l'ensemble, la +publication fait partie intégrante du processus scientifique et joue un rôle +essentiel dans l'avancement des connaissances et la résolution de problèmes du +monde réel. -La publication statistique consiste à communiquer des informations statistiques à un public plus large à l'aide de diverses formes de médias, tels que des graphiques et des infographies. Avoir de beaux graphiques est important dans la publication statistique car cela rend les données plus accessibles et compréhensibles pour un public plus large. Des visualisations bien conçues peuvent aider à communiquer des concepts et des modèles statistiques complexes de manière claire et convaincante, permettant au public de saisir rapidement les principales idées et conclusions. +La publication statistique consiste à communiquer des informations statistiques +à un public plus large à l'aide de diverses formes de médias, tels que des +graphiques et des infographies. Avoir de beaux graphiques est important dans la +publication statistique car cela rend les données plus accessibles et +compréhensibles pour un public plus large. Des visualisations bien conçues +peuvent aider à communiquer des concepts et des modèles statistiques complexes +de manière claire et convaincante, permettant au public de saisir rapidement les +principales idées et conclusions. -De beaux graphismes peuvent améliorer l'impact global des publications statistiques, les rendant plus attrayantes et mémorables. Cela peut être particulièrement important lors de la communication d'informations importantes aux décideurs, aux acteurs ou au grand public, où la capacité à communiquer clairement et efficacement des informations basées sur les données peut être essentielle pour réussir. +De beaux graphismes peuvent améliorer l'impact global des publications +statistiques, les rendant plus attrayantes et mémorables. Cela peut être +particulièrement important lors de la communication d'informations importantes +aux décideurs, aux acteurs ou au grand public, où la capacité à communiquer +clairement et efficacement des informations basées sur les données peut être +essentielle pour réussir. -En résumé, la science des données et la publication de statistiques sont essentielles pour transformer des données complexes en informations significatives, et avoir de beaux graphiques est un aspect crucial pour communiquer efficacement ces informations à un public plus large. +En résumé, la science des données et la publication de statistiques sont +essentielles pour transformer des données complexes en informations +significatives, et avoir de beaux graphiques est un aspect crucial pour +communiquer efficacement ces informations à un public plus large. diff --git a/docs/fr/2-Publication/R-Shiny.md b/docs/fr/2-Publication/R-Shiny.md index a5e728fee..1f33827e5 100644 --- a/docs/fr/2-Publication/R-Shiny.md +++ b/docs/fr/2-Publication/R-Shiny.md @@ -1,6 +1,7 @@ # Aperçu -R-Shiny est un package R qui facilite la création d'applications Web interactives dans R. +R-Shiny est un package R qui facilite la création d'applications Web +interactives dans R. !!! info "Hébergement d'applications R Shiny" @@ -14,25 +15,53 @@ _Publier des graphismes de qualité professionnelle_ [![InteractiveDashboard](../images/InteractiveDashboard.PNG)](/2-Publishing/R-Shiny/) -R Shiny est un framework d'application Web open source qui permet aux data scientists et aux analystes de créer des tableaux de bord et des visualisations de données interactifs basés sur le Web à l'aide du langage de programmation R. L'un des principaux avantages de R Shiny est qu'il offre un moyen simple de créer des tableaux de bord interactifs de haute qualité sans avoir besoin d'une expertise approfondie en développement Web. Avec R Shiny, les data scientists peuvent tirer parti de leurs compétences en codage R pour créer des applications Web dynamiques, basées sur les données, qui peuvent être facilement partagées avec les acteurs. - -Un autre avantage de R Shiny est qu'il prend en charge une variété de visualisations de données qui peuvent être facilement personnalisées pour répondre aux besoins du projet. Les utilisateurs peuvent créer une large gamme de diagrammes et de graphiques, allant de simples diagrammes à barres et nuages de points à des cartes thermiques et des graphiques de réseau plus complexes. De plus, R Shiny prend en charge une variété de widgets interactifs qui permettent aux utilisateurs de manipuler et d'explorer des données en temps réel. +R Shiny est un framework d'application Web open source qui permet aux data +scientists et aux analystes de créer des tableaux de bord et des visualisations +de données interactifs basés sur le Web à l'aide du langage de programmation R. +L'un des principaux avantages de R Shiny est qu'il offre un moyen simple de +créer des tableaux de bord interactifs de haute qualité sans avoir besoin d'une +expertise approfondie en développement Web. Avec R Shiny, les data scientists +peuvent tirer parti de leurs compétences en codage R pour créer des applications +Web dynamiques, basées sur les données, qui peuvent être facilement partagées +avec les acteurs. + +Un autre avantage de R Shiny est qu'il prend en charge une variété de +visualisations de données qui peuvent être facilement personnalisées pour +répondre aux besoins du projet. Les utilisateurs peuvent créer une large gamme +de diagrammes et de graphiques, allant de simples diagrammes à barres et nuages +de points à des cartes thermiques et des graphiques de réseau plus complexes. De +plus, R Shiny prend en charge une variété de widgets interactifs qui permettent +aux utilisateurs de manipuler et d'explorer des données en temps réel. ![R Shiny Server](../images/readme/shiny_ui.png) -R Shiny est également hautement extensible et peut être intégré à d'autres outils et plates-formes open source pour créer des workflows de science des données de bout en bout. Avec ses fonctionnalités puissantes et flexibles, R Shiny est un choix populaire pour créer des tableaux de bord de visualisation de données pour un large éventail d'applications, de la recherche scientifique à l'analyse commerciale. Dans l'ensemble, R Shiny offre une solution puissante, personnalisable et rentable pour créer des tableaux de bord interactifs et des visualisations de données. +R Shiny est également hautement extensible et peut être intégré à d'autres +outils et plates-formes open source pour créer des workflows de science des +données de bout en bout. Avec ses fonctionnalités puissantes et flexibles, R +Shiny est un choix populaire pour créer des tableaux de bord de visualisation de +données pour un large éventail d'applications, de la recherche scientifique à +l'analyse commerciale. Dans l'ensemble, R Shiny offre une solution puissante, +personnalisable et rentable pour créer des tableaux de bord interactifs et des +visualisations de données. -Utilisez **[R-Shiny](/2-Publishing/R-Shiny/)** pour créer des applications Web interactives directement à partir de R. Vous pouvez déployer votre tableau de bord R Shiny en soumettant une demande d'extraction à notre [référentiel R-Dashboards GitHub ](https://github.com/StatCan/R-dashboards). +Utilisez **[R-Shiny](/2-Publishing/R-Shiny/)** pour créer des applications Web +interactives directement à partir de R. Vous pouvez déployer votre tableau de +bord R Shiny en soumettant une demande d'extraction à notre +[référentiel R-Dashboards GitHub ](https://github.com/StatCan/R-dashboards). # R Éditeur d'interface utilisateur brillant -Le script Rscript suivant installe les packages requis pour exécuter "shinyuieditor" sur l'ETAA. Il commence par installer les packages R nécessaires et utilise `conda` pour installer `yarn`. +Le script Rscript suivant installe les packages requis pour exécuter +"shinyuieditor" sur l'ETAA. Il commence par installer les packages R nécessaires +et utilise `conda` pour installer `yarn`. -Une fois l'installation terminée, vous pouvez accéder au code de votre application dans `./my-app` +Une fois l'installation terminée, vous pouvez accéder au code de votre +application dans `./my-app` -Exécutez ce script depuis `rstudio`. RStudio peut demander la permission d'ouvrir une nouvelle fenêtre si vous avez un bloqueur de popup. +Exécutez ce script depuis `rstudio`. RStudio peut demander la permission +d'ouvrir une nouvelle fenêtre si vous avez un bloqueur de popup. -``` r title="setup-shinyuieditor.R" linenums="1" +```r title="setup-shinyuieditor.R" linenums="1" #!/usr/bin/env Rscript #' Installer les packages nécessaires @@ -73,27 +102,34 @@ shinyuieditor::launch_editor(app_loc = "./") ### Choisissez un modèle d'application -La première chose que vous verrez est le sélecteur de modèle. Il existe trois options au moment d'écrire ces lignes (`shinyuieditor` est actuellement en alpha). +La première chose que vous verrez est le sélecteur de modèle. Il existe trois +options au moment d'écrire ces lignes (`shinyuieditor` est actuellement en +alpha). ![image](https://user-images.githubusercontent.com/8212170/229583104-9404ad01-26cd-4260-bce6-6fe32ffab7d8.png) ### Mode fichier unique ou multi -Je recommande le **mode multi-fichiers**, cela mettra le code back-end dans un fichier appelé `server.R` et le front-end dans un fichier appelé `ui.R`. +Je recommande le **mode multi-fichiers**, cela mettra le code back-end dans un +fichier appelé `server.R` et le front-end dans un fichier appelé `ui.R`. ![image](https://user-images.githubusercontent.com/8212170/229584803-452bcdb9-4aa6-4902-805e-845d0b939016.png) ### Concevez votre application -Vous pouvez concevoir votre application avec du code ou l'interface utilisateur graphique. Essayez de concevoir la mise en page avec l'interface graphique et de concevoir les tracés avec du code. +Vous pouvez concevoir votre application avec du code ou l'interface utilisateur +graphique. Essayez de concevoir la mise en page avec l'interface graphique et de +concevoir les tracés avec du code. ![image](https://user-images.githubusercontent.com/8212170/229589867-19bf334c-4789-4228-99ec-44583b119e29.png) -Toutes les modifications que vous apportez dans `shinyuieditor` apparaîtront immédiatement dans le code. +Toutes les modifications que vous apportez dans `shinyuieditor` apparaîtront +immédiatement dans le code. ![image](https://user-images.githubusercontent.com/8212170/229637808-38dc0ed3-902a-44db-bfa0-193ef25af6ca.png) -Toute modification que vous apportez au code apparaîtra immédiatement dans le `shinyuieditor`. +Toute modification que vous apportez au code apparaîtra immédiatement dans le +`shinyuieditor`. ![image](https://user-images.githubusercontent.com/8212170/229637972-b4a263f5-27f0-4160-8b43-9250ace72999.png) @@ -101,9 +137,15 @@ Toute modification que vous apportez au code apparaîtra immédiatement dans le ### Envoyez simplement une pull request ! -Tout ce que vous avez à faire est d'envoyer une demande d'extraction à [notre référentiel R-Dashboards](https://github.com/StatCan/R-dashboards). Incluez votre référentiel dans un dossier avec le nom que vous voulez (par exemple, "air-quality-dashboard"). Ensuite, nous l'approuverons et il sera mis en ligne. +Tout ce que vous avez à faire est d'envoyer une demande d'extraction à +[notre référentiel R-Dashboards](https://github.com/StatCan/R-dashboards). +Incluez votre référentiel dans un dossier avec le nom que vous voulez (par +exemple, "air-quality-dashboard"). Ensuite, nous l'approuverons et il sera mis +en ligne. -Si vous avez besoin d'installer des bibliothèques R supplémentaires, envoyez votre liste au [dépôt R-Shiny](https://github.com/StatCan/shiny) en créant un problème GitHub et nous ajouterons les dépendances. +Si vous avez besoin d'installer des bibliothèques R supplémentaires, envoyez +votre liste au [dépôt R-Shiny](https://github.com/StatCan/shiny) en créant un +problème GitHub et nous ajouterons les dépendances. ![Exemple de tableau de bord](../images/example_shiny_dashboard.png) diff --git a/docs/fr/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md b/docs/fr/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md index 3a271b7d4..f14aaedd0 100644 --- a/docs/fr/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md +++ b/docs/fr/3-Pipelines/Machine-Learning-Model-Cloud-Storage.md @@ -4,15 +4,45 @@ !!! info "Protégé B" L'ETAA est certifié pour l'hébergement de données protégé B ! -Afin de télécharger des données protégées B sur l'ETAA, les utilisateurs devront demander l'accès via l'Unité de Succès à la Clientèle (USC). Les utilisateurs d'ETAA devront également fournir un espace de noms, obtenir un sponsor et obtenir l'approbation d'OPMIC. Une fois le processus approuvé, notre équipe infrastructure de données F.A.I.R créera alors un dossier sur Net A qui à son tour donnera accès aux utilisateurs via le répertoire actif. Les données pourront alors être transférées de Net A vers le cloud ETAA. - -Le stockage des modèles d'apprentissage automatique dans un environnement de stockage cloud protégé est essentiel pour garantir la sécurité et la confidentialité des données sensibles. L'espace de travail d'analyse avancée (ETAA) fournit un environnement de stockage cloud sécuritaire et robuste qui peut être utilisé pour stocker des modèles d'apprentissage automatique et d'autres actifs de données. - -La plate-forme ETAA fournit un environnement de stockage cloud protégé conçu pour répondre aux exigences les plus strictes en matière de sécurité et de confidentialité des données. L'environnement de stockage est protégé par un cryptage et des contrôles d'accès conformes aux normes de l'industrie, ce qui garantit que seul le personnel autorisé peut accéder aux données sensibles. Cela protège contre les accès non autorisés, les violations de données et autres menaces de sécurité. - -En plus de ses fonctions de sécurité robustes, l'environnement de stockage en cloud ETAA est également hautement évolutif et flexible. Cela signifie que les data scientists et les ingénieurs en apprentissage automatique peuvent facilement faire évoluer leurs besoins de stockage à mesure que leurs ensembles de données et la taille de leurs modèles augmentent. Cela leur permet de stocker et de gérer de gros volumes de données et de modèles sans avoir à se soucier des limitations de stockage ou des goulots d'étranglement des performances. - -Le stockage des modèles d'apprentissage automatique dans un environnement de stockage cloud protégé sur l'espace de travail d'analyse avancée fournit une solution sécurisée, évolutive et flexible pour la gestion et la protection des données sensibles. En tirant parti des capacités de stockage dans le cloud fournies par la plate-forme ETAA, les data scientists et les ingénieurs en apprentissage automatique peuvent se concentrer sur la création et le déploiement de leurs modèles en toute confiance, sachant que leurs données sont protégées et sécurisées. +Afin de télécharger des données protégées B sur l'ETAA, les utilisateurs devront +demander l'accès via l'Unité de Succès à la Clientèle (USC). Les utilisateurs +d'ETAA devront également fournir un espace de noms, obtenir un sponsor et +obtenir l'approbation d'OPMIC. Une fois le processus approuvé, notre équipe +infrastructure de données F.A.I.R créera alors un dossier sur Net A qui à son +tour donnera accès aux utilisateurs via le répertoire actif. Les données +pourront alors être transférées de Net A vers le cloud ETAA. + +Le stockage des modèles d'apprentissage automatique dans un environnement de +stockage cloud protégé est essentiel pour garantir la sécurité et la +confidentialité des données sensibles. L'espace de travail d'analyse avancée +(ETAA) fournit un environnement de stockage cloud sécuritaire et robuste qui +peut être utilisé pour stocker des modèles d'apprentissage automatique et +d'autres actifs de données. + +La plate-forme ETAA fournit un environnement de stockage cloud protégé conçu +pour répondre aux exigences les plus strictes en matière de sécurité et de +confidentialité des données. L'environnement de stockage est protégé par un +cryptage et des contrôles d'accès conformes aux normes de l'industrie, ce qui +garantit que seul le personnel autorisé peut accéder aux données sensibles. Cela +protège contre les accès non autorisés, les violations de données et autres +menaces de sécurité. + +En plus de ses fonctions de sécurité robustes, l'environnement de stockage en +cloud ETAA est également hautement évolutif et flexible. Cela signifie que les +data scientists et les ingénieurs en apprentissage automatique peuvent +facilement faire évoluer leurs besoins de stockage à mesure que leurs ensembles +de données et la taille de leurs modèles augmentent. Cela leur permet de stocker +et de gérer de gros volumes de données et de modèles sans avoir à se soucier des +limitations de stockage ou des goulots d'étranglement des performances. + +Le stockage des modèles d'apprentissage automatique dans un environnement de +stockage cloud protégé sur l'espace de travail d'analyse avancée fournit une +solution sécurisée, évolutive et flexible pour la gestion et la protection des +données sensibles. En tirant parti des capacités de stockage dans le cloud +fournies par la plate-forme ETAA, les data scientists et les ingénieurs en +apprentissage automatique peuvent se concentrer sur la création et le +déploiement de leurs modèles en toute confiance, sachant que leurs données sont +protégées et sécurisées. ## Stockage en ligne @@ -20,42 +50,100 @@ Le stockage des modèles d'apprentissage automatique dans un environnement de st !!! info "Avantages du stockage en cloud" Le stockage en cloud offre plusieurs avantages pour la science des données et l'apprentissage automatique, notamment en termes d'évolutivité, d'accessibilité et de rentabilité. -Premièrement, le stockage dans le cloud permet aux data scientists de stocker et de traiter de grandes quantités de données sans avoir à se soucier des limites du stockage local. Ceci est particulièrement important dans le contexte de l'apprentissage automatique, où de grands ensembles de données sont nécessaires pour la formation et le test des modèles. Le stockage dans le cloud permet aux data scientists d'augmenter leur capacité de stockage selon les besoins, sans avoir à investir dans du matériel coûteux. - -Deuxièmement, le stockage en cloud permet aux data scientists d'accéder aux données de n'importe où, en utilisant n'importe quel appareil doté d'une connexion Internet. Cela permet la collaboration entre des équipes géographiquement dispersées et permet aux data scientists de travailler à distance. De plus, le stockage dans le cloud facilite le partage de données avec d'autres parties prenantes, telles que des partenaires commerciaux ou des clients. Enfin, le stockage dans le cloud est généralement plus rentable que le stockage sur site, en particulier pour les petites entreprises ou celles dont les ressources informatiques sont limitées. - -Dans l'ensemble, le stockage en cloud est une solution fiable et pratique pour stocker et gérer vos données. Que vous ayez besoin de stocker de grandes quantités de données ou seulement quelques fichiers, le stockage en cloud facilite la gestion de vos besoins de stockage sans les tracas des solutions de stockage traditionnelles. +Premièrement, le stockage dans le cloud permet aux data scientists de stocker et +de traiter de grandes quantités de données sans avoir à se soucier des limites +du stockage local. Ceci est particulièrement important dans le contexte de +l'apprentissage automatique, où de grands ensembles de données sont nécessaires +pour la formation et le test des modèles. Le stockage dans le cloud permet aux +data scientists d'augmenter leur capacité de stockage selon les besoins, sans +avoir à investir dans du matériel coûteux. + +Deuxièmement, le stockage en cloud permet aux data scientists d'accéder aux +données de n'importe où, en utilisant n'importe quel appareil doté d'une +connexion Internet. Cela permet la collaboration entre des équipes +géographiquement dispersées et permet aux data scientists de travailler à +distance. De plus, le stockage dans le cloud facilite le partage de données avec +d'autres parties prenantes, telles que des partenaires commerciaux ou des +clients. Enfin, le stockage dans le cloud est généralement plus rentable que le +stockage sur site, en particulier pour les petites entreprises ou celles dont +les ressources informatiques sont limitées. + +Dans l'ensemble, le stockage en cloud est une solution fiable et pratique pour +stocker et gérer vos données. Que vous ayez besoin de stocker de grandes +quantités de données ou seulement quelques fichiers, le stockage en cloud +facilite la gestion de vos besoins de stockage sans les tracas des solutions de +stockage traditionnelles. La plateforme ETAA propose plusieurs types de stockage : -- Disques (également appelés Volumes sur l'écran de création de Kubeflow Notebook Server) +- Disques (également appelés Volumes sur l'écran de création de Kubeflow + Notebook Server) - Buckets ("Blob" ou stockage S3, fournis via MinIO) - Lacs de données (à venir) -Selon votre cas d'utilisation, le disque ou le bucket peut être le plus approprié. Notre [aperçu du stockage](../5-Storage/Overview.md) vous aidera à les comparer. +Selon votre cas d'utilisation, le disque ou le bucket peut être le plus +approprié. Notre [aperçu du stockage](../5-Storage/Overview.md) vous aidera à +les comparer. ### Disques [![Disques](../images/Disks.PNG)](Storage.md/) -**[Disks](../5-Storage/Disks.md)** sont ajoutés à votre serveur notebook en ajoutant des volumes de données. +**[Disks](../5-Storage/Disks.md)** sont ajoutés à votre serveur notebook en +ajoutant des volumes de données. ### Seaux -MinIO est un système de stockage d'objets compatible S3-API qui fournit une alternative open source aux services de stockage cloud propriétaires. Bien que nous utilisions actuellement MinIO comme solution de stockage dans le cloud, nous prévoyons de le remplacer par s3-proxy dans un proche avenir. S3-proxy est un serveur proxy inverse léger et open source qui vous permet d'accéder à des services de stockage compatibles avec Amazon S3 avec vos applications existantes. En passant à s3-proxy, nous pourrons améliorer les performances, la sécurité et l'évolutivité de notre stockage dans le cloud, tout en maintenant la compatibilité avec l'API S3. +MinIO est un système de stockage d'objets compatible S3-API qui fournit une +alternative open source aux services de stockage cloud propriétaires. Bien que +nous utilisions actuellement MinIO comme solution de stockage dans le cloud, +nous prévoyons de le remplacer par s3-proxy dans un proche avenir. S3-proxy est +un serveur proxy inverse léger et open source qui vous permet d'accéder à des +services de stockage compatibles avec Amazon S3 avec vos applications +existantes. En passant à s3-proxy, nous pourrons améliorer les performances, la +sécurité et l'évolutivité de notre stockage dans le cloud, tout en maintenant la +compatibilité avec l'API S3. [![MinIO](../images/Buckets.PNG)](AzureBlobStorage.md/) -**[MinIO](../5-Storage/AzureBlobStorage.md)** est un magasin d'objets évolutif cloud natif. Nous l'utilisons pour les buckets (stockage blob ou S3). +**[MinIO](../5-Storage/AzureBlobStorage.md)** est un magasin d'objets évolutif +cloud natif. Nous l'utilisons pour les buckets (stockage blob ou S3). ### Lacs de données (à venir) -Un lac de données est un référentiel central qui vous permet de stocker toutes vos données structurées et non structurées à n'importe quelle échelle. C'est un moyen rentable de stocker et de gérer tous les types de données, des données brutes aux données traitées, et c'est un outil essentiel pour les data scientists. - -L'un des principaux avantages d'un lac de données est sa flexibilité. Il permet de stocker tous types de données sans avoir besoin de définir un schéma au préalable, ce qui est particulièrement utile lorsqu'il s'agit de données non structurées. Cette flexibilité permet aux data scientists d'explorer, d'expérimenter et d'extraire facilement des informations à partir de leurs données sans être contraints par les limites d'une base de données relationnelle traditionnelle. - -Les lacs de données permettent également aux data scientists de centraliser leurs données, ce qui facilite la gestion et l'analyse de gros volumes de données provenant de diverses sources. Avec un lac de données, les data scientists peuvent facilement ingérer et stocker des données provenant de diverses sources, telles que des bases de données, le stockage dans le cloud et des API tierces. De plus, les lacs de données fournissent souvent des fonctionnalités pour la gouvernance des données, la gestion des métadonnées et le contrôle d'accès, ce qui permet de garantir que les données sont de haute qualité et conformes aux réglementations en vigueur. - -De plus, les lacs de données basés sur le cloud offrent des solutions de stockage évolutives et économiques qui peuvent être facilement étendues en un clic. À mesure que les besoins de stockage de données d'un scientifique des données augmentent, il peut ajouter une capacité de stockage supplémentaire à son lac de données avec un minimum d'effort, sans se soucier de l'infrastructure sous-jacente ou de la maintenance. - -Dans l'ensemble, les lacs de données sont un outil essentiel pour les data scientists, car ils offrent la flexibilité, l'évolutivité et la facilité d'utilisation nécessaires pour stocker et gérer de gros volumes de données, permettant aux data scientists de se concentrer sur l'extraction d'informations et de valeur à partir des données. +Un lac de données est un référentiel central qui vous permet de stocker toutes +vos données structurées et non structurées à n'importe quelle échelle. C'est un +moyen rentable de stocker et de gérer tous les types de données, des données +brutes aux données traitées, et c'est un outil essentiel pour les data +scientists. + +L'un des principaux avantages d'un lac de données est sa flexibilité. Il permet +de stocker tous types de données sans avoir besoin de définir un schéma au +préalable, ce qui est particulièrement utile lorsqu'il s'agit de données non +structurées. Cette flexibilité permet aux data scientists d'explorer, +d'expérimenter et d'extraire facilement des informations à partir de leurs +données sans être contraints par les limites d'une base de données relationnelle +traditionnelle. + +Les lacs de données permettent également aux data scientists de centraliser +leurs données, ce qui facilite la gestion et l'analyse de gros volumes de +données provenant de diverses sources. Avec un lac de données, les data +scientists peuvent facilement ingérer et stocker des données provenant de +diverses sources, telles que des bases de données, le stockage dans le cloud et +des API tierces. De plus, les lacs de données fournissent souvent des +fonctionnalités pour la gouvernance des données, la gestion des métadonnées et +le contrôle d'accès, ce qui permet de garantir que les données sont de haute +qualité et conformes aux réglementations en vigueur. + +De plus, les lacs de données basés sur le cloud offrent des solutions de +stockage évolutives et économiques qui peuvent être facilement étendues en un +clic. À mesure que les besoins de stockage de données d'un scientifique des +données augmentent, il peut ajouter une capacité de stockage supplémentaire à +son lac de données avec un minimum d'effort, sans se soucier de l'infrastructure +sous-jacente ou de la maintenance. + +Dans l'ensemble, les lacs de données sont un outil essentiel pour les data +scientists, car ils offrent la flexibilité, l'évolutivité et la facilité +d'utilisation nécessaires pour stocker et gérer de gros volumes de données, +permettant aux data scientists de se concentrer sur l'extraction d'informations +et de valeur à partir des données. diff --git a/docs/fr/3-Pipelines/Machine-Learning-Model-Serving.md b/docs/fr/3-Pipelines/Machine-Learning-Model-Serving.md index 237deb56f..9bd403961 100644 --- a/docs/fr/3-Pipelines/Machine-Learning-Model-Serving.md +++ b/docs/fr/3-Pipelines/Machine-Learning-Model-Serving.md @@ -1,39 +1,119 @@ # Introduction au modèle de service -Dans le contexte des gouvernements, servir des modèles d'apprentissage automatique signifie rendre les modèles formés disponibles pour être utilisés par d'autres applications et systèmes. Cela peut inclure la réalisation de prédictions ou de classifications basées sur les données d'entrée, ou la fourniture d'informations et de recommandations basées sur les résultats de l'analyse des données. - -Servir des modèles d'apprentissage automatique dans un contexte gouvernemental soulève des questions importantes liées à la confidentialité des données. Les agences gouvernementales sont souvent responsables de la collecte et de la gestion des données personnelles sensibles, telles que les dossiers médicaux, les données financières et les casiers judiciaires. Lors de la diffusion de modèles d'apprentissage automatique, il est essentiel de s'assurer que ces données sont protégées et que leur accès est strictement contrôlé. - -Pour répondre à ces préoccupations, les agences gouvernementales doivent mettre en œuvre des mesures solides de confidentialité et de sécurité des données lorsqu'elles servent des modèles d'apprentissage automatique. Cela pourrait inclure le chiffrement des données au repos et en transit, la mise en œuvre de contrôles d'accès et d'authentification des utilisateurs, et la surveillance régulière des violations de données et des vulnérabilités. - -En plus de la confidentialité et de la sécurité des données, il est également important de prendre en compte les implications éthiques de servir des modèles d'apprentissage automatique dans un contexte gouvernemental. Les modèles d'apprentissage automatique peuvent être biaisés ou discriminatoires, entraînant un traitement injuste de certains groupes de personnes. Pour atténuer ces risques, les agences gouvernementales doivent soigneusement évaluer et surveiller leurs modèles d'apprentissage automatique, et prendre des mesures pour lutter contre les préjugés ou la discrimination qui pourraient survenir. - -Dans l'ensemble, servir des modèles d'apprentissage automatique dans un contexte gouvernemental nécessite un examen attentif de la confidentialité des données, de la sécurité et des préoccupations éthiques. En mettant en œuvre des mesures solides pour protéger les données personnelles et prévenir les préjugés, les agences gouvernementales peuvent tirer parti de la puissance de l'apprentissage automatique pour prendre de meilleures décisions et améliorer les résultats pour les citoyens tout en maintenant la confiance et la transparence. +Dans le contexte des gouvernements, servir des modèles d'apprentissage +automatique signifie rendre les modèles formés disponibles pour être utilisés +par d'autres applications et systèmes. Cela peut inclure la réalisation de +prédictions ou de classifications basées sur les données d'entrée, ou la +fourniture d'informations et de recommandations basées sur les résultats de +l'analyse des données. + +Servir des modèles d'apprentissage automatique dans un contexte gouvernemental +soulève des questions importantes liées à la confidentialité des données. Les +agences gouvernementales sont souvent responsables de la collecte et de la +gestion des données personnelles sensibles, telles que les dossiers médicaux, +les données financières et les casiers judiciaires. Lors de la diffusion de +modèles d'apprentissage automatique, il est essentiel de s'assurer que ces +données sont protégées et que leur accès est strictement contrôlé. + +Pour répondre à ces préoccupations, les agences gouvernementales doivent mettre +en œuvre des mesures solides de confidentialité et de sécurité des données +lorsqu'elles servent des modèles d'apprentissage automatique. Cela pourrait +inclure le chiffrement des données au repos et en transit, la mise en œuvre de +contrôles d'accès et d'authentification des utilisateurs, et la surveillance +régulière des violations de données et des vulnérabilités. + +En plus de la confidentialité et de la sécurité des données, il est également +important de prendre en compte les implications éthiques de servir des modèles +d'apprentissage automatique dans un contexte gouvernemental. Les modèles +d'apprentissage automatique peuvent être biaisés ou discriminatoires, entraînant +un traitement injuste de certains groupes de personnes. Pour atténuer ces +risques, les agences gouvernementales doivent soigneusement évaluer et +surveiller leurs modèles d'apprentissage automatique, et prendre des mesures +pour lutter contre les préjugés ou la discrimination qui pourraient survenir. + +Dans l'ensemble, servir des modèles d'apprentissage automatique dans un contexte +gouvernemental nécessite un examen attentif de la confidentialité des données, +de la sécurité et des préoccupations éthiques. En mettant en œuvre des mesures +solides pour protéger les données personnelles et prévenir les préjugés, les +agences gouvernementales peuvent tirer parti de la puissance de l'apprentissage +automatique pour prendre de meilleures décisions et améliorer les résultats pour +les citoyens tout en maintenant la confiance et la transparence. ## Pourquoi servir avec nous ? -Servir des modèles d'apprentissage automatique avec l'espace de travail d'analyse avancée (l'ETAA) présente plusieurs avantages. Premièrement, l'ETAA est une plate-forme d'analyse de données open source qui donne accès à une variété d'outils d'analyse avancés, notamment Python, R et SAS. Cela facilite le déploiement de modèles d'apprentissage automatique et leur intégration dans les flux de travail existants. - -Deuxièmement, l'ETAA prend en charge plusieurs frameworks MLOps, notamment Couler, Seldon et Argo Workflows. Ces frameworks fournissent une gamme de fonctionnalités, notamment la gestion des versions de modèle, le service de modèle et la surveillance de modèle, qui simplifient le processus de déploiement et de gestion des modèles d'apprentissage automatique en production. - -Troisièmement, l'ETAA fournit une plate-forme sécurisée et évolutive pour servir les modèles d'apprentissage automatique avec le statut protégé B. Les modèles peuvent être servis à l'aide d'environnements conteneurisés, tels que Docker, qui offrent un niveau élevé d'isolement et de sécurité. L'ETAA fournit également un accès aux ressources de cloud computing, permettant aux utilisateurs d'augmenter leur puissance de calcul selon les besoins pour gérer des volumes élevés de demandes. - -Enfin, l'ETAA est une plateforme collaborative qui permet aux utilisateurs de partager du code et des données avec d'autres chercheurs et analystes. Cela favorise une communauté d'utilisateurs qui peuvent apprendre du travail des autres et collaborer sur des projets qui nécessitent des capacités d'analyse avancées. - -En résumé, servir des modèles d'apprentissage automatique avec l'espace de travail d'analyse avancée donne accès à des outils d'analyse avancés, à plusieurs cadres MLOps, à une plate-forme protégé B sécurisée et évolutive et à une communauté collaborative d'utilisateurs, ce qui en fait une plate-forme idéale pour les scientifiques et les analystes de données qui veulent pour déployer et gérer des modèles d'apprentissage automatique en production. +Servir des modèles d'apprentissage automatique avec l'espace de travail +d'analyse avancée (l'ETAA) présente plusieurs avantages. Premièrement, l'ETAA +est une plate-forme d'analyse de données open source qui donne accès à une +variété d'outils d'analyse avancés, notamment Python, R et SAS. Cela facilite le +déploiement de modèles d'apprentissage automatique et leur intégration dans les +flux de travail existants. + +Deuxièmement, l'ETAA prend en charge plusieurs frameworks MLOps, notamment +Couler, Seldon et Argo Workflows. Ces frameworks fournissent une gamme de +fonctionnalités, notamment la gestion des versions de modèle, le service de +modèle et la surveillance de modèle, qui simplifient le processus de déploiement +et de gestion des modèles d'apprentissage automatique en production. + +Troisièmement, l'ETAA fournit une plate-forme sécurisée et évolutive pour servir +les modèles d'apprentissage automatique avec le statut protégé B. Les modèles +peuvent être servis à l'aide d'environnements conteneurisés, tels que Docker, +qui offrent un niveau élevé d'isolement et de sécurité. L'ETAA fournit également +un accès aux ressources de cloud computing, permettant aux utilisateurs +d'augmenter leur puissance de calcul selon les besoins pour gérer des volumes +élevés de demandes. + +Enfin, l'ETAA est une plateforme collaborative qui permet aux utilisateurs de +partager du code et des données avec d'autres chercheurs et analystes. Cela +favorise une communauté d'utilisateurs qui peuvent apprendre du travail des +autres et collaborer sur des projets qui nécessitent des capacités d'analyse +avancées. + +En résumé, servir des modèles d'apprentissage automatique avec l'espace de +travail d'analyse avancée donne accès à des outils d'analyse avancés, à +plusieurs cadres MLOps, à une plate-forme protégé B sécurisée et évolutive et à +une communauté collaborative d'utilisateurs, ce qui en fait une plate-forme +idéale pour les scientifiques et les analystes de données qui veulent pour +déployer et gérer des modèles d'apprentissage automatique en production. ## Noyau de Seldon -Seldon Core est une plate-forme open source pour le déploiement, la mise à l'échelle et la surveillance des modèles d'apprentissage automatique sur Kubernetes. Il fournit un moyen simple et efficace de déployer des modèles d'apprentissage automatique en tant que microservices dans un environnement de production. - -Servir des modèles d'apprentissage automatique à l'aide de Seldon Core implique les étapes suivantes : - -1. Conditionnement du modèle : la première étape consiste à conditionner le modèle d'apprentissage automatique formé dans une image de conteneur avec toutes les dépendances requises. Seldon Core prend en charge divers frameworks d'apprentissage automatique, notamment TensorFlow, PyTorch et Scikit-learn. - -2. Déploiement du modèle : une fois l'image du conteneur créée, l'étape suivante consiste à déployer le modèle sur Kubernetes à l'aide de Seldon Core. Cela implique de définir le fichier de configuration de déploiement, qui spécifie les ressources requises pour le déploiement, telles que le nombre de répliques et les ressources de calcul. - -3. Service de modèle : une fois le modèle déployé, Seldon Core expose un point de terminaison d'API REST qui peut être utilisé pour effectuer des prédictions. Les clients peuvent envoyer des requêtes au point de terminaison avec des données d'entrée, et le modèle renverra la sortie correspondante. Seldon Core prend également en charge divers modèles de déploiement, tels que le déploiement Canary et les tests A/B, pour permettre une expérimentation et des tests faciles de différents modèles. - -4. Surveillance des modèles : Seldon Core fournit diverses fonctionnalités de surveillance pour suivre les performances des modèles déployés. Cela inclut la surveillance en temps réel des métriques du modèle, telles que la latence et le débit, ainsi que la journalisation des données de demande et de réponse à des fins de débogage. - -Seldon Core facilite la mise à disposition de modèles d'apprentissage automatique à grande échelle, avec une prise en charge de la haute disponibilité, de l'évolutivité et de la tolérance aux pannes. Il fournit également une intégration avec divers outils natifs de Kubernetes, tels qu'Istio et Prometheus, pour permettre une surveillance et une observabilité avancées. +Seldon Core est une plate-forme open source pour le déploiement, la mise à +l'échelle et la surveillance des modèles d'apprentissage automatique sur +Kubernetes. Il fournit un moyen simple et efficace de déployer des modèles +d'apprentissage automatique en tant que microservices dans un environnement de +production. + +Servir des modèles d'apprentissage automatique à l'aide de Seldon Core implique +les étapes suivantes : + +1. Conditionnement du modèle : la première étape consiste à conditionner le + modèle d'apprentissage automatique formé dans une image de conteneur avec + toutes les dépendances requises. Seldon Core prend en charge divers + frameworks d'apprentissage automatique, notamment TensorFlow, PyTorch et + Scikit-learn. + +2. Déploiement du modèle : une fois l'image du conteneur créée, l'étape suivante + consiste à déployer le modèle sur Kubernetes à l'aide de Seldon Core. Cela + implique de définir le fichier de configuration de déploiement, qui spécifie + les ressources requises pour le déploiement, telles que le nombre de + répliques et les ressources de calcul. + +3. Service de modèle : une fois le modèle déployé, Seldon Core expose un point + de terminaison d'API REST qui peut être utilisé pour effectuer des + prédictions. Les clients peuvent envoyer des requêtes au point de terminaison + avec des données d'entrée, et le modèle renverra la sortie correspondante. + Seldon Core prend également en charge divers modèles de déploiement, tels que + le déploiement Canary et les tests A/B, pour permettre une expérimentation et + des tests faciles de différents modèles. + +4. Surveillance des modèles : Seldon Core fournit diverses fonctionnalités de + surveillance pour suivre les performances des modèles déployés. Cela inclut + la surveillance en temps réel des métriques du modèle, telles que la latence + et le débit, ainsi que la journalisation des données de demande et de réponse + à des fins de débogage. + +Seldon Core facilite la mise à disposition de modèles d'apprentissage +automatique à grande échelle, avec une prise en charge de la haute +disponibilité, de l'évolutivité et de la tolérance aux pannes. Il fournit +également une intégration avec divers outils natifs de Kubernetes, tels qu'Istio +et Prometheus, pour permettre une surveillance et une observabilité avancées. diff --git a/docs/fr/3-Pipelines/Machine-Learning-Training-Pipelines.md b/docs/fr/3-Pipelines/Machine-Learning-Training-Pipelines.md index c15095c6e..edfc570c9 100644 --- a/docs/fr/3-Pipelines/Machine-Learning-Training-Pipelines.md +++ b/docs/fr/3-Pipelines/Machine-Learning-Training-Pipelines.md @@ -10,13 +10,31 @@ ## Pourquoi s'entraîner avec nous ? -_L'entraînement des modèles d'apprentissage automatique sur l'espace de travail d'analyse avancée (ETAA) présente plusieurs avantages._ - -1. **Open Source :** L'ETAA est une *plate-forme de données open source hébergée par Statistique Canada* qui fournit un accès sécurisé (protégé B) à une variété de sources de données, y compris des données de recensement, des enquêtes et des dossiers administratifs. Ces données peuvent être utilisées pour former des modèles d'apprentissage automatique et générer des informations qui peuvent éclairer les décisions politiques et améliorer les processus métier. - -2. **Polyvalent :** L'ETAA est *conçu pour gérer des ensembles de données volumineux et complexes*. Il donne accès à une gamme d'outils d'analyse avancés, dans le langage de votre choix, y compris *Python, R et SAS*, qui peuvent être utilisés pour prétraiter les données, former des modèles d'apprentissage automatique et générer des visualisations. *Parce que l'ETAA exploite les technologies cloud, *les utilisateurs peuvent augmenter leur puissance de calcul selon leurs besoins*. -* -3. **Sécurisé :** L'ETAA est une *plate-forme sécurisée (protégé B) qui respecte les normes les plus élevées en matière de confidentialité et de sécurité des données*. Les données peuvent être stockées et traitées sur la plateforme sans risque d'accès non autorisé ou de violation de données. +_L'entraînement des modèles d'apprentissage automatique sur l'espace de travail +d'analyse avancée (ETAA) présente plusieurs avantages._ + +1. **Open Source :** L'ETAA est une _plate-forme de données open source hébergée + par Statistique Canada_ qui fournit un accès sécurisé (protégé B) à une + variété de sources de données, y compris des données de recensement, des + enquêtes et des dossiers administratifs. Ces données peuvent être utilisées + pour former des modèles d'apprentissage automatique et générer des + informations qui peuvent éclairer les décisions politiques et améliorer les + processus métier. + +2. **Polyvalent :** L'ETAA est _conçu pour gérer des ensembles de données + volumineux et complexes_. Il donne accès à une gamme d'outils d'analyse + avancés, dans le langage de votre choix, y compris _Python, R et SAS_, qui + peuvent être utilisés pour prétraiter les données, former des modèles + d'apprentissage automatique et générer des visualisations. *Parce que l'ETAA + exploite les technologies cloud, *les utilisateurs peuvent augmenter leur + puissance de calcul selon leurs besoins\*. + +- + +3. **Sécurisé :** L'ETAA est une _plate-forme sécurisée (protégé B) qui respecte + les normes les plus élevées en matière de confidentialité et de sécurité des + données_. Les données peuvent être stockées et traitées sur la plateforme + sans risque d'accès non autorisé ou de violation de données. ## MLOps et pipelines de données @@ -26,11 +44,21 @@ _L'entraînement des modèles d'apprentissage automatique sur l'espace de travai ### MLOps -MLOps fait référence à l'ensemble des pratiques et des outils utilisés pour gérer l'ensemble du cycle de vie d'un modèle d'apprentissage automatique. Cela comprend tout, du développement et de la formation du modèle à son déploiement en production et à sa maintenance dans le temps. MLOps garantit que les modèles d'apprentissage automatique sont fiables, précis et évolutifs, et qu'ils peuvent être mis à jour et améliorés selon les besoins. +MLOps fait référence à l'ensemble des pratiques et des outils utilisés pour +gérer l'ensemble du cycle de vie d'un modèle d'apprentissage automatique. Cela +comprend tout, du développement et de la formation du modèle à son déploiement +en production et à sa maintenance dans le temps. MLOps garantit que les modèles +d'apprentissage automatique sont fiables, précis et évolutifs, et qu'ils peuvent +être mis à jour et améliorés selon les besoins. ### Pipelines de données -Les pipelines de données sont une série d'étapes qui permettent de déplacer des données d'un système ou d'une application à un autre. Cela comprend la collecte, le nettoyage, la transformation et le stockage des données, ainsi que leur récupération en cas de besoin. Les pipelines de données sont importants pour garantir que les données sont exactes, fiables et accessibles à ceux qui en ont besoin. +Les pipelines de données sont une série d'étapes qui permettent de déplacer des +données d'un système ou d'une application à un autre. Cela comprend la collecte, +le nettoyage, la transformation et le stockage des données, ainsi que leur +récupération en cas de besoin. Les pipelines de données sont importants pour +garantir que les données sont exactes, fiables et accessibles à ceux qui en ont +besoin. !!! info "Automatisation et fiabilité" @@ -38,21 +66,43 @@ Les pipelines de données sont une série d'étapes qui permettent de déplacer ### Pourquoi des MLOps conteneurisés ? -Les avantages de l'utilisation d'une approche conteneurisée pour la formation de modèles d'apprentissage automatique avec Argo Workflows incluent : +Les avantages de l'utilisation d'une approche conteneurisée pour la formation de +modèles d'apprentissage automatique avec Argo Workflows incluent : -1. **Reproductibilité :** La conteneurisation du modèle de l'apprentissage automatique et de ses dépendances garantit que l'environnement reste cohérent d'une exécution à l'autre, ce qui facilite la reproduction des résultats. +1. **Reproductibilité :** La conteneurisation du modèle de l'apprentissage + automatique et de ses dépendances garantit que l'environnement reste cohérent + d'une exécution à l'autre, ce qui facilite la reproduction des résultats. -2. **Évolutivité :** Argo Workflows peut orchestrer des tâches parallèles et des flux de travail complexes, ce qui facilite l'évolution du processus de formation selon les besoins. +2. **Évolutivité :** Argo Workflows peut orchestrer des tâches parallèles et des + flux de travail complexes, ce qui facilite l'évolution du processus de + formation selon les besoins. -3. **Portabilité :** Les conteneurs peuvent être exécutés sur n'importe quelle plate-forme prenant en charge la conteneurisation, ce qui facilite le déplacement du processus de formation vers différents environnements ou fournisseurs de cloud. +3. **Portabilité :** Les conteneurs peuvent être exécutés sur n'importe quelle + plate-forme prenant en charge la conteneurisation, ce qui facilite le + déplacement du processus de formation vers différents environnements ou + fournisseurs de cloud. -4. **Collaboration :** En transférant le conteneur vers un registre de conteneurs, les autres utilisateurs peuvent facilement télécharger et utiliser le conteneur à leurs propres fins, ce qui facilite la collaboration sur des projets de l'apprentissage automatique. +4. **Collaboration :** En transférant le conteneur vers un registre de + conteneurs, les autres utilisateurs peuvent facilement télécharger et + utiliser le conteneur à leurs propres fins, ce qui facilite la collaboration + sur des projets de l'apprentissage automatique. -Les flux de travail Argo et la conteneurisation offrent une approche puissante et flexible pour la formation de modèles d'apprentissage automatique. En tirant parti de ces outils, les data scientists et les ingénieurs en apprentissage automatique peuvent créer, déployer et gérer des workflows d'apprentissage automatique avec facilité et reproductibilité. +Les flux de travail Argo et la conteneurisation offrent une approche puissante +et flexible pour la formation de modèles d'apprentissage automatique. En tirant +parti de ces outils, les data scientists et les ingénieurs en apprentissage +automatique peuvent créer, déployer et gérer des workflows d'apprentissage +automatique avec facilité et reproductibilité. ## Comment former des modèles -Il existe plusieurs façons de former des modèles d'apprentissage automatique et ce n'est pas à nous de dire à qui que ce soit comment le faire. Cela étant dit, nous avons fourni ci-dessous quelques guides sur la façon de former des modèles d'apprentissage automatique à l'aide des outils disponibles sur l'ETAA. Le premier tutoriel concerne la formation d'un modèle simple directement dans un notebook JupyterLab. Le deuxième tutoriel suppose que l'utilisateur est plus avancé et souhaite définir un pipeline MLOps pour former des modèles à l'aide d'Argo Workflows. +Il existe plusieurs façons de former des modèles d'apprentissage automatique et +ce n'est pas à nous de dire à qui que ce soit comment le faire. Cela étant dit, +nous avons fourni ci-dessous quelques guides sur la façon de former des modèles +d'apprentissage automatique à l'aide des outils disponibles sur l'ETAA. Le +premier tutoriel concerne la formation d'un modèle simple directement dans un +notebook JupyterLab. Le deuxième tutoriel suppose que l'utilisateur est plus +avancé et souhaite définir un pipeline MLOps pour former des modèles à l'aide +d'Argo Workflows. ### Créer un serveur de bloc-notes sur l'ETAA @@ -68,15 +118,20 @@ Il existe plusieurs façons de former des modèles d'apprentissage automatique e !!! info "JupyterLab est populaire" La formation de modèles d'apprentissage automatique avec JupyterLab est une approche populaire parmi les data scientists et les ingénieurs en apprentissage automatique. -Vous trouverez ici les étapes nécessaires pour former un modèle d'apprentissage automatique avec JupyterLab sur l'ETAA. Parce que nous sommes un environnement multilingue, nous avons fait de notre mieux pour fournir des exemples de code dans nos langages les plus populaires, `Python`, `R` et `SAS`. +Vous trouverez ici les étapes nécessaires pour former un modèle d'apprentissage +automatique avec JupyterLab sur l'ETAA. Parce que nous sommes un environnement +multilingue, nous avons fait de notre mieux pour fournir des exemples de code +dans nos langages les plus populaires, `Python`, `R` et `SAS`. #### 1. Importez les bibliothèques requises -Une fois qu'une session JupyterLab est en cours d'exécution, vous devez importer les bibliothèques requises pour votre modèle d'apprentissage automatique. Cela peut inclure des bibliothèques telles que `NumPy`, `Pandas`, `Scikit-learn`, `Tensorflow` ou `PyTorch`. Si vous utilisez `R`, vous aurez besoin de `tidyverse`, `caret` et `janitor`. +Une fois qu'une session JupyterLab est en cours d'exécution, vous devez importer +les bibliothèques requises pour votre modèle d'apprentissage automatique. Cela +peut inclure des bibliothèques telles que `NumPy`, `Pandas`, `Scikit-learn`, +`Tensorflow` ou `PyTorch`. Si vous utilisez `R`, vous aurez besoin de +`tidyverse`, `caret` et `janitor`. -=== "Python" - ``` py title="libraries.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="libraries.py" linenums="1" #!/usr/bin/env python # tensorflow et keras pour la construction et la formation de modèles d'apprentissage en profondeur import tensorflow as tf @@ -91,9 +146,8 @@ Une fois qu'une session JupyterLab est en cours d'exécution, vous devez importe # matplotlib pour la visualisation des données import matplotlib.pyplot as plt ``` -=== "R" - ``` r title="libraries.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="libraries.R" linenums="1" #!/usr/bin/env Rscript # tidyverse pour des outils impressionnants d'analyse de données et de munging library(tidyverse) @@ -104,15 +158,14 @@ Une fois qu'une session JupyterLab est en cours d'exécution, vous devez importe # caret pour un apprentissage automatique facile library(caret) ``` -=== "SASPy" - ``` py title="libraries.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="libraries.py" linenums="1" #!/usr/bin/env python # la seule bibliothèque dont vous aurez besoin pour accéder à SAS depuis Python import saspy ``` -=== "SAS" - ``` sas title="libraries.sas" linenums="1" + +=== "SAS" ``` sas title="libraries.sas" linenums="1" ``` @@ -122,11 +175,14 @@ Une fois qu'une session JupyterLab est en cours d'exécution, vous devez importe #### 2. Charger et prétraiter les données -Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour entraîner votre modèle d'apprentissage automatique. Cela peut inclure le nettoyage des données, l'extraction de caractéristiques et la normalisation. Les étapes de prétraitement exactes que vous devrez effectuer dépendront de l'ensemble de données spécifique avec lequel vous travaillez, des exigences de votre modèle d'apprentissage automatique et du travail à effectuer. +Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour +entraîner votre modèle d'apprentissage automatique. Cela peut inclure le +nettoyage des données, l'extraction de caractéristiques et la normalisation. Les +étapes de prétraitement exactes que vous devrez effectuer dépendront de +l'ensemble de données spécifique avec lequel vous travaillez, des exigences de +votre modèle d'apprentissage automatique et du travail à effectuer. -=== "Python" - ``` py title="load_data.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="load_data.py" linenums="1" #!/usr/bin/env python # Importer les paquets nécessaires import pandas as pd @@ -146,14 +202,13 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour scaler = StandardScaler() # Crée un objet scaler X_norm = scaler.fit_transform(X) # Normaliser les valeurs des caractéristiques ``` -=== "R" - ``` r title="load_data.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="load_data.R" linenums="1" #!/usr/bin/env Rscript # Importer les paquets nécessaires library(tidyverse) library(janitor) - + # Charger des données à partir d'un fichier CSV data <- read_csv("data.csv") @@ -170,9 +225,8 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour # Réorganiser les colonnes select(date, column2, column1, column3) ``` -=== "SASPy" - ``` py title="load_data.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="load_data.py" linenums="1" #!/usr/bin/env python # Importer les paquets nécessaires import saspy @@ -183,22 +237,21 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour # Charger des données à partir d'un fichier CSV data = sas.read_csv("./data.csv") ``` -=== "SAS" - ``` sas title="load_data.sas" linenums="1" - /* Lecture d'un fichier délimité par des virgules avec une extension .csv */ - /* */ - /* Puisque la valeur DBMS= est CSV, vous n'avez pas besoin d'utiliser le DELIMITER= */ - /* déclaration.Par défaut, il est supposé que les noms de variables sont sur la première */ - /* ligne, l'instruction GETNAMES= n'est donc pas requise. */ - /* */ - /* Créer un fichier de test délimité par des virgules à lire en utilisant PROC IMPORT ci-dessous. */ + +=== "SAS" ``` sas title="load_data.sas" linenums="1" /_ Lecture d'un fichier +délimité par des virgules avec une extension .csv _/ /\* _/ /_ Puisque la valeur +DBMS= est CSV, vous n'avez pas besoin d'utiliser le DELIMITER= _/ /_ +déclaration.Par défaut, il est supposé que les noms de variables sont sur la +première _/ /_ ligne, l'instruction GETNAMES= n'est donc pas requise. _/ /_ _/ +/_ Créer un fichier de test délimité par des virgules à lire en utilisant PROC +IMPORT ci-dessous. \*/ /* Charger les données d'un fichier CSV */ proc import datafile='data.csv' out=data dbms=csv - replace; + replace; run; /* Afficher les données */ @@ -208,11 +261,12 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour #### 3. Divisez les données en ensembles d'entraînement et de test - Une fois les données prétraitées, vous devez les diviser en ensembles d'apprentissage et de test. L'ensemble de formation sera utilisé pour former le modèle d'apprentissage automatique, tandis que l'ensemble de test sera utilisé pour évaluer ses performances. +Une fois les données prétraitées, vous devez les diviser en ensembles +d'apprentissage et de test. L'ensemble de formation sera utilisé pour former le +modèle d'apprentissage automatique, tandis que l'ensemble de test sera utilisé +pour évaluer ses performances. -=== "Python" - ``` py title="train_test.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="train_test.py" linenums="1" #!/usr/bin/env python # Importer les paquets nécessaires import pandas as pd @@ -222,9 +276,8 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour X_train, X_test, y_train, y_test = train_test_split(X_norm, data['target'], test_size=0.2, random_state=42) ``` -=== "R" - ``` r title="train_test.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="train_test.R" linenums="1" #!/usr/bin/env Rscript # Importer les paquets nécessaires library(caret) @@ -240,13 +293,12 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour train_data <- data[train_index, ] test_data <- data[-train_index, ] ``` -=== "SASPy" - ``` py title="train_test.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="train_test.py" linenums="1" #!/usr/bin/env python ``` -=== "SAS" - ``` sas title="train_test.sas" linenums="1" + +=== "SAS" ``` sas title="train_test.sas" linenums="1" ``` @@ -254,14 +306,14 @@ Ensuite, vous devez charger et prétraiter les données que vous utiliserez pour !!! note Nous divisons les données en ensembles d'apprentissage et de test à l'aide de la fonction "train_test_split" de "scikit-learn", qui divise de manière aléatoire les données en deux ensembles en fonction de la taille de test spécifiée et de la graine aléatoire. - #### 4. Définir et entraîner le modèle d'apprentissage automatique -Avec la division des données, vous pouvez désormais définir et entraîner votre modèle d'apprentissage automatique à l'aide de l'ensemble d'entraînement. Cela pourrait impliquer la sélection de l'algorithme approprié, le réglage des hyperparamètres et la validation croisée. +Avec la division des données, vous pouvez désormais définir et entraîner votre +modèle d'apprentissage automatique à l'aide de l'ensemble d'entraînement. Cela +pourrait impliquer la sélection de l'algorithme approprié, le réglage des +hyperparamètres et la validation croisée. -=== "Python" - ``` py title="train.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="train.py" linenums="1" #!/usr/bin/env python # Importer les paquets nécessaires from sklearn.ensemble import RandomForestClassifier @@ -280,9 +332,8 @@ Avec la division des données, vous pouvez désormais définir et entraîner vot # Imprimer le score de précision sur les données de test print("Accuracy on test set: {:.3f}".format(model.score(X_test, y_test))) ``` -=== "R" - ``` r title="train.R" linenums="1" - #!/usr/bin/env Rscript + +=== "R" ``` r title="train.R" linenums="1" #!/usr/bin/env Rscript # Importer les paquets nécessaires library(caret) @@ -307,9 +358,8 @@ Avec la division des données, vous pouvez désormais définir et entraîner vot # Imprimez l'objet modèle pour afficher les résultats print(model) ``` -=== "SASPy" - ``` py title="train.py" linenums="1" - #!/usr/bin/env python + +=== "SASPy" ``` py title="train.py" linenums="1" #!/usr/bin/env python # Importer les paquets nécessaires import saspy @@ -354,11 +404,9 @@ Avec la division des données, vous pouvez désormais définir et entraîner vot # Se déconnecter de la session SAS sas.disconnect() ``` -=== "SAS" - ``` sas title="train.sas" linenums="1" - /* Charger le jeu de données */ - proc import datafile="my-dataset.csv" out=mydata dbms=csv replace; - run; + +=== "SAS" ``` sas title="train.sas" linenums="1" /_ Charger le jeu de données _/ +proc import datafile="my-dataset.csv" out=mydata dbms=csv replace; run; /* Divise le jeu de données en train et test */ proc surveyselect data=mydata method=srs seed=123 out=selected outall @@ -387,43 +435,44 @@ Avec la division des données, vous pouvez désormais définir et entraîner vot #### 5. Évaluer le modèle -Après avoir entraîné le modèle, vous devez évaluer ses performances sur l'ensemble de test. Cela vous donnera une idée de la performance du modèle sur de nouvelles données inédites. +Après avoir entraîné le modèle, vous devez évaluer ses performances sur +l'ensemble de test. Cela vous donnera une idée de la performance du modèle sur +de nouvelles données inédites. -=== "Python" - ``` py title="evaluate.py" linenums="1" +=== "Python" ``` py title="evaluate.py" linenums="1" ``` -=== "R" - ``` r title="evaluate.R" linenums="1" + +=== "R" ``` r title="evaluate.R" linenums="1" ``` -=== "SASPy" - ``` py title="evaluate.py" linenums="1" + +=== "SASPy" ``` py title="evaluate.py" linenums="1" ``` -=== "SAS" - ``` sas title="evaluate.sas" linenums="1" + +=== "SAS" ``` sas title="evaluate.sas" linenums="1" ``` #### 6. Déployer le modèle -Enfin, vous pouvez déployer le modèle d'apprentissage automatique formé dans un environnement de production. +Enfin, vous pouvez déployer le modèle d'apprentissage automatique formé dans un +environnement de production. -=== "Python" - ``` py title="deploy.py" linenums="1" +=== "Python" ``` py title="deploy.py" linenums="1" ``` -=== "R" - ``` r title="deploy.R" linenums="1" + +=== "R" ``` r title="deploy.R" linenums="1" ``` -=== "SASPy" - ``` py title="deploy.py" linenums="1" + +=== "SASPy" ``` py title="deploy.py" linenums="1" ``` -=== "SAS" - ``` sas title="deploy.sas" linenums="1" + +=== "SAS" ``` sas title="deploy.sas" linenums="1" ``` @@ -435,16 +484,30 @@ Enfin, vous pouvez déployer le modèle d'apprentissage automatique formé dans !!! info "Bonnes pratiques MLOps" Argo Workflows est un excellent outil pour tous ceux qui cherchent à mettre en œuvre des pratiques MLOps et à rationaliser le processus de formation et de déploiement de modèles d'apprentissage automatique ou d'autres tâches de science des données telles que ETL. -**[Argo Workflows](https://argoproj.github.io/argo-workflows/)** est un engin de workflow open source natif de conteneur pour orchestrer des tâches parallèles sur Kubernetes. Argo Workflows est implémenté en tant que Kubernetes CRD (Custom Resource Definition). Il est particulièrement bien adapté pour une utilisation dans les flux de travail d'apprentissage automatique et de science des données. +**[Argo Workflows](https://argoproj.github.io/argo-workflows/)** est un engin de +workflow open source natif de conteneur pour orchestrer des tâches parallèles +sur Kubernetes. Argo Workflows est implémenté en tant que Kubernetes CRD (Custom +Resource Definition). Il est particulièrement bien adapté pour une utilisation +dans les flux de travail d'apprentissage automatique et de science des données. Argo Workflows vous permet de -- Définissez des flux de travail où chaque étape du flux de travail est un conteneur. -- Modélisez les flux de travail en plusieurs étapes sous la forme d'une séquence de tâches ou capturez les dépendances entre les tâches à l'aide d'un graphe acyclique dirigé (DAG). -- Exécutez facilement des tâches de calcul intensives pour l'apprentissage automatique ou le traitement de données en une fraction du temps à l'aide des flux de travail Argo sur Kubernetes. -- Exécutez des pipelines CI/CD en mode natif sur Kubernetes sans configurer de produits de développement logiciel complexes. - -ce qui facilite la gestion de l'ensemble du pipeline d'apprentissage automatique de bout en bout. Avec Argo Workflows, vous pouvez facilement créer des workflows qui intègrent des tâches telles que le prétraitement des données, la formation de modèles et le déploiement de modèles, le tout dans un environnement Kubernetes. +- Définissez des flux de travail où chaque étape du flux de travail est un + conteneur. +- Modélisez les flux de travail en plusieurs étapes sous la forme d'une séquence + de tâches ou capturez les dépendances entre les tâches à l'aide d'un graphe + acyclique dirigé (DAG). +- Exécutez facilement des tâches de calcul intensives pour l'apprentissage + automatique ou le traitement de données en une fraction du temps à l'aide des + flux de travail Argo sur Kubernetes. +- Exécutez des pipelines CI/CD en mode natif sur Kubernetes sans configurer de + produits de développement logiciel complexes. + +ce qui facilite la gestion de l'ensemble du pipeline d'apprentissage automatique +de bout en bout. Avec Argo Workflows, vous pouvez facilement créer des workflows +qui intègrent des tâches telles que le prétraitement des données, la formation +de modèles et le déploiement de modèles, le tout dans un environnement +Kubernetes. !!! info "" @@ -453,11 +516,14 @@ ce qui facilite la gestion de l'ensemble du pipeline d'apprentissage automatique

Flux de travail Argo

-Vous trouverez ci-dessous les étapes pour former un modèle d'apprentissage automatique à l'aide d'Argo Workflows sur l'ETAA. +Vous trouverez ci-dessous les étapes pour former un modèle d'apprentissage +automatique à l'aide d'Argo Workflows sur l'ETAA. #### 1. Écrivez un script pour entraîner votre modèle -Voici un exemple de script qui entraîne un modèle de régression logistique sur l'ensemble de données iris. N'oubliez pas de consulter le code de chaque langue ci-dessous. +Voici un exemple de script qui entraîne un modèle de régression logistique sur +l'ensemble de données iris. N'oubliez pas de consulter le code de chaque langue +ci-dessous. === "Python" @@ -539,15 +605,19 @@ Voici un exemple de script qui entraîne un modèle de régression logistique su #### 2. Écrivez un Dockerfile pour exécuter votre code -Vous aurez besoin d'un Dockerfile qui inclut toutes les dépendances nécessaires pour former votre modèle d'apprentissage automatique. Cela pourrait inclure +Vous aurez besoin d'un Dockerfile qui inclut toutes les dépendances nécessaires +pour former votre modèle d'apprentissage automatique. Cela pourrait inclure - des forfaits comme - - `scikit-learn`, `pandas` ou `numpy` si vous utilisez `Python` - - `caret`, `janitor` et `tidyverse` si vous utilisez `R` + - `scikit-learn`, `pandas` ou `numpy` si vous utilisez `Python` + - `caret`, `janitor` et `tidyverse` si vous utilisez `R` - vos propres bibliothèques ou scripts personnalisés -- le code de votre modèle de l'apprentissage automatique sous la forme d'un script [comme dans l'exemple ci-dessus](#1-write-a-script-to-train-your-model). +- le code de votre modèle de l'apprentissage automatique sous la forme d'un + script + [comme dans l'exemple ci-dessus](#1-write-a-script-to-train-your-model). -Utilisez le `Dockerfile` suivant comme point de départ pour vos projets `R` et `Python`. +Utilisez le `Dockerfile` suivant comme point de départ pour vos projets `R` et +`Python`. === "Python" @@ -567,9 +637,7 @@ Utilisez le `Dockerfile` suivant comme point de départ pour vos projets `R` et ENTRYPOINT ["python", "train.py"] ``` -=== "R" - ``` docker title="Dockerfile" linenums="1" - FROM rocker/r-base:latest +=== "R" ``` docker title="Dockerfile" linenums="1" FROM rocker/r-base:latest RUN apt-get update && apt-get install -y --no-install-recommends \ libssl-dev \ @@ -589,73 +657,53 @@ Utilisez le `Dockerfile` suivant comme point de départ pour vos projets `R` et #### 3. Écrivez votre workflow en YAML -YAML est encore un autre langage de balisage et vous devrez écrire les étapes de votre pipeline de formation dans un fichier YAML Argo Workflows. Ce fichier doit inclure une référence au Dockerfile que vous avez créé à l'[Étape 1](#2-write-a-dockerfile-to-run-your-code), ainsi que toutes les données d'entrée et de sortie avec lesquelles vous travaillerez. - -Voici un exemple de fichier YAML pour un pipeline d'apprentissage automatique simple qui forme un modèle de régression logistique sur l'ensemble de données iris. La seule vraie différence entre les versions `Python` et `R` est la commande `command : ["python", "train.py"]` vs `command : ["Rscript", "train.R"]` et la les modèles sont stockés dans différents formats, `pkl` pour `python` et `rds` pour `R`. - -Le fichier YAML définit une seule étape appelée "train" qui exécute un script appelé "train.py" ou "train.R" dans l'image Docker "machine-learning:v1". Le script prend un fichier d'ensemble de données d'entrée, spécifié par un paramètre appelé `dataset`, et génère un fichier de modèle entraîné vers un artefact de sortie appelé `model.pkl` ou `model.rds` selon le langage utilisé. +YAML est encore un autre langage de balisage et vous devrez écrire les étapes de +votre pipeline de formation dans un fichier YAML Argo Workflows. Ce fichier doit +inclure une référence au Dockerfile que vous avez créé à +l'[Étape 1](#2-write-a-dockerfile-to-run-your-code), ainsi que toutes les +données d'entrée et de sortie avec lesquelles vous travaillerez. + +Voici un exemple de fichier YAML pour un pipeline d'apprentissage automatique +simple qui forme un modèle de régression logistique sur l'ensemble de données +iris. La seule vraie différence entre les versions `Python` et `R` est la +commande `command : ["python", "train.py"]` vs +`command : ["Rscript", "train.R"]` et la les modèles sont stockés dans +différents formats, `pkl` pour `python` et `rds` pour `R`. + +Le fichier YAML définit une seule étape appelée "train" qui exécute un script +appelé "train.py" ou "train.R" dans l'image Docker "machine-learning:v1". Le +script prend un fichier d'ensemble de données d'entrée, spécifié par un +paramètre appelé `dataset`, et génère un fichier de modèle entraîné vers un +artefact de sortie appelé `model.pkl` ou `model.rds` selon le langage utilisé. === "Python" - ``` yaml title="workflow.yaml" linenums="1" - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: ml-pipeline- - spec: - entrypoint: train - templates: - - name: train - container: - image: machine-learning:v1 - command: ["python", "train.py"] - args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] - inputs: - parameters: - - name: dataset - default: "iris.csv" - outputs: - artifacts: - - name: model - path: /output/model.pkl - ``` +`yaml title="workflow.yaml" linenums="1" apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: ml-pipeline- spec: entrypoint: train templates: - name: train container: image: machine-learning:v1 command: ["python", "train.py"] args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] inputs: parameters: - name: dataset default: "iris.csv" outputs: artifacts: - name: model path: /output/model.pkl ` === "R" - ``` yaml title="workflow.yaml" linenums="1" - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: ml-pipeline- - spec: - entrypoint: train - templates: - - name: train - container: - image: machine-learning:v1 - command: ["Rscript", "train.R"] - args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] - inputs: - parameters: - - name: dataset - default: "iris.csv" - outputs: - artifacts: - - name: model - path: /output/model.rds - ``` - +`yaml title="workflow.yaml" linenums="1" apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: ml-pipeline- spec: entrypoint: train templates: - name: train container: image: machine-learning:v1 command: ["Rscript", "train.R"] args: ["--input", "{{inputs.parameters.dataset}}", "--output", "{{outputs.artifacts.model}}"] inputs: parameters: - name: dataset default: "iris.csv" outputs: artifacts: - name: model path: /output/model.rds ` #### 4. Soumettez le workflow à l'aide de la CLI Argo Workflows -Pour exécuter le flux de travail ci-dessus, vous devez d'abord envoyer le fichier Dockerfile à notre registre de conteneurs, puis envoyer le fichier YAML à l'aide de la commande "argo submit". Une fois le pipeline terminé, vous pouvez récupérer le fichier de modèle formé en téléchargeant l'artefact de sortie à partir de la commande `argo logs`. +Pour exécuter le flux de travail ci-dessus, vous devez d'abord envoyer le +fichier Dockerfile à notre registre de conteneurs, puis envoyer le fichier YAML +à l'aide de la commande "argo submit". Une fois le pipeline terminé, vous pouvez +récupérer le fichier de modèle formé en téléchargeant l'artefact de sortie à +partir de la commande `argo logs`. -``` bash title="Terminal" +```bash title="Terminal" $ argo submit workflow.yaml # soumettre une spécification de workflow à Kubernetes ``` #### 5. Surveiller le pipeline à l'aide de la CLI Argo Workflows -Au fur et à mesure que le pipeline s'exécute, vous pouvez surveiller sa progression à l'aide de la CLI Argo Workflows. Cela vous montrera quelles étapes ont réussi et lesquelles sont toujours en cours. Vous trouverez ci-dessous quelques commandes utiles. Pour plus d'informations sur la CLI Argo Workflows, veuillez consulter [la documentation officielle de la CLI Argo Workflows](https://argoproj.github.io/argo-workflows/walk-through/argo-cli/) . +Au fur et à mesure que le pipeline s'exécute, vous pouvez surveiller sa +progression à l'aide de la CLI Argo Workflows. Cela vous montrera quelles étapes +ont réussi et lesquelles sont toujours en cours. Vous trouverez ci-dessous +quelques commandes utiles. Pour plus d'informations sur la CLI Argo Workflows, +veuillez consulter +[la documentation officielle de la CLI Argo Workflows](https://argoproj.github.io/argo-workflows/walk-through/argo-cli/) +. -``` bash title="Terminal" +```bash title="Terminal" $ argo list # liste les workflows actuels $ argo get workflow-xxx # obtenir des informations sur un workflow spécifique $ argo logs workflow-xxx # imprimer les logs d'un workflow @@ -665,15 +713,21 @@ $ argo delete workflow-xxx # supprimer le workflow #### 6. Récupérer le modèle formé -Une fois le pipeline terminé, vous pouvez récupérer les données de sortie à l'aide de la commande argo logs ou en affichant les artefacts de sortie à l'aide de la CLI, c'est-à-dire accéder au répertoire que vous avez spécifié dans votre script et localiser le fichier `model.pkl` ou `model. rds`. L'extrait de code suivant, tiré du [script de formation ci-dessus](#1-define-the-machine-learning-model-and-its-dependencies), indique au langage de programmation respectif où enregistrer le modèle formé. +Une fois le pipeline terminé, vous pouvez récupérer les données de sortie à +l'aide de la commande argo logs ou en affichant les artefacts de sortie à l'aide +de la CLI, c'est-à-dire accéder au répertoire que vous avez spécifié dans votre +script et localiser le fichier `model.pkl` ou `model. rds`. L'extrait de code +suivant, tiré du +[script de formation ci-dessus](#1-define-the-machine-learning-model-and-its-dependencies), +indique au langage de programmation respectif où enregistrer le modèle formé. === "Python" ``` python title="Enregistrement des données de sortie" linenums="1" #!/usr/bin/env python - + parser.add_argument("--output", default="model.pkl", help="Path to output model file.") - + # Enregistrer le modèle dans un fichier joblib.dump(clf, args.sortie) ``` @@ -682,28 +736,36 @@ Une fois le pipeline terminé, vous pouvez récupérer les données de sortie à ``` r title="Enregistrement des données de sortie" linenums="1" #!/usr/bin/env Rscript - + output_file <- ifelse(length(args) > 1, args[2], "model.rds") - + # Enregistrer le modèle dans un fichier saveRDS(clf, output_file) ``` ### Exemples d'utilisation de SDK basés sur Argo Workflows -Si vous préférez utiliser un cadre de niveau supérieur, nous avons `Couler` et `Hera`. Ces cadres rendent la création et la gestion de flux de travail complexes plus accessibles à un public plus large. +Si vous préférez utiliser un cadre de niveau supérieur, nous avons `Couler` et +`Hera`. Ces cadres rendent la création et la gestion de flux de travail +complexes plus accessibles à un public plus large. #### Hera -Hera vise à simplifier le processus de création et de soumission des flux de travail en éliminant de nombreux détails techniques via une interface de programmation d'application simple. Il utilise également un ensemble cohérent de terminologie et de concepts qui s'alignent sur Argo Workflows, ce qui permet aux utilisateurs d'apprendre et d'utiliser plus facilement les deux outils ensemble. +Hera vise à simplifier le processus de création et de soumission des flux de +travail en éliminant de nombreux détails techniques via une interface de +programmation d'application simple. Il utilise également un ensemble cohérent de +terminologie et de concepts qui s'alignent sur Argo Workflows, ce qui permet aux +utilisateurs d'apprendre et d'utiliser plus facilement les deux outils ensemble. #### Couler -Couler fournit une interface de programmation d'application simple et unifiée pour définir les flux de travail à l'aide d'un style de programmation impératif. Il construit également automatiquement des graphes acycliques dirigés (DAG) pour les flux de travail, ce qui peut aider à simplifier le processus de création et de gestion de ceux-ci. +Couler fournit une interface de programmation d'application simple et unifiée +pour définir les flux de travail à l'aide d'un style de programmation impératif. +Il construit également automatiquement des graphes acycliques dirigés (DAG) pour +les flux de travail, ce qui peut aider à simplifier le processus de création et +de gestion de ceux-ci. -=== "Couler" - ``` py title="couler.py" linenums="1" - #!/usr/bin/env python +=== "Couler" ``` py title="couler.py" linenums="1" #!/usr/bin/env python # Préparez votre système !pip config --user set global.index-url https://jfrog.ETAA.cloud.statcan.ca/artifactory/api/pypi/pypi-remote/simple @@ -759,14 +821,13 @@ Couler fournit une interface de programmation d'application simple et unifiée p print(json.dumps(result, indent=2)) ``` -=== "Hera" - ``` py title="hera.py" linenums="1" - #!/usr/bin/env python + +=== "Hera" ``` py title="hera.py" linenums="1" #!/usr/bin/env python # Préparez votre système !pip config --user set global.index-url https://jfrog.ETAA.cloud.statcan.ca/artifactory/api/pypi/pypi-remote/simple !pip install hera-workflows - + # Importer les paquets nécessaires import hera from hera import Task, Workflow @@ -804,18 +865,20 @@ Couler fournit une interface de programmation d'application simple et unifiée p # Exécuter le flux de travail w.create() ``` -=== "YAML" - ``` py title="workflow.yaml" linenums="1" + +=== "YAML" ``` py title="workflow.yaml" linenums="1" ``` -=== "Seldon ?" - ``` py + +=== "Seldon ?" ``` py ``` ### Ressources supplémentaires pour les workflows Argo -Des exemples de workflows Argo Workflows peuvent être trouvés dans les répos Github suivants : +Des exemples de workflows Argo Workflows peuvent être trouvés dans les répos +Github suivants : - [Documentation Argo Workflows](https://argoproj.github.io/argo-workflows/) -- [Référence Argo CLI] (https://argoproj.github.io/argo-workflows/walk-through/argo-cli/) +- [Référence Argo CLI] + (https://argoproj.github.io/argo-workflows/walk-through/argo-cli/) diff --git a/docs/fr/3-Pipelines/Machine-Learning.md b/docs/fr/3-Pipelines/Machine-Learning.md index 8f57449a5..9446cb4f2 100644 --- a/docs/fr/3-Pipelines/Machine-Learning.md +++ b/docs/fr/3-Pipelines/Machine-Learning.md @@ -1,20 +1,46 @@ # Modèles d'apprentissage automatique -Les modèles d'apprentissage automatique sont des algorithmes de calcul conçus pour apprendre automatiquement des modèles et des relations à partir de données. Ces modèles sont entraînés sur un ensemble de données, qui est généralement une collection d'exemples ou d'instances, chacun d'entre eux se composant d'un ensemble de fonctionnalités ou de variables, ainsi que d'une variable cible ou d'une sortie. - -L'objectif d'un modèle d'apprentissage automatique est d'identifier des modèles et des relations au sein des données qui peuvent être utilisés pour faire des prédictions ou des décisions concernant de nouvelles données invisibles. Cela implique de développer une représentation mathématique de la relation entre les caractéristiques d'entrée et la variable de sortie, sur la base des modèles observés dans les données d'apprentissage. Une fois le modèle entraîné, il peut être utilisé pour faire des prédictions ou prendre des décisions concernant de nouvelles données inédites. - -Il existe plusieurs types de modèles d'apprentissage automatique, chacun étant conçu pour traiter différents types de problèmes ou de données. Certains des types les plus courants de modèles d'apprentissage automatique incluent : - -1. **Modèles de régression :** Les modèles de régression sont utilisés pour prédire des valeurs numériques continues, telles que les cours des actions ou les prix des logements. - -2. **Modèles de classification :** Les modèles de classification sont utilisés pour prédire des valeurs catégorielles discrètes, par exemple si un client achètera ou non un produit. - -3. **Modèles de clustering :** Les modèles de clustering sont utilisés pour identifier des groupes ou des clusters au sein d'un ensemble de données en fonction des similitudes entre les instances. - -4. **Modèles de recommandation :** Les modèles de recommandation sont utilisés pour recommander des produits ou des services aux utilisateurs en fonction de leur comportement ou de leurs préférences passés. - -5. **Réseaux de neurones :** Les réseaux de neurones sont un type de modèle d'apprentissage automatique conçu pour imiter la structure et la fonction du cerveau humain. Ils sont couramment utilisés dans les applications de reconnaissance d'images, de reconnaissance vocale et de traitement du langage naturel. +Les modèles d'apprentissage automatique sont des algorithmes de calcul conçus +pour apprendre automatiquement des modèles et des relations à partir de données. +Ces modèles sont entraînés sur un ensemble de données, qui est généralement une +collection d'exemples ou d'instances, chacun d'entre eux se composant d'un +ensemble de fonctionnalités ou de variables, ainsi que d'une variable cible ou +d'une sortie. + +L'objectif d'un modèle d'apprentissage automatique est d'identifier des modèles +et des relations au sein des données qui peuvent être utilisés pour faire des +prédictions ou des décisions concernant de nouvelles données invisibles. Cela +implique de développer une représentation mathématique de la relation entre les +caractéristiques d'entrée et la variable de sortie, sur la base des modèles +observés dans les données d'apprentissage. Une fois le modèle entraîné, il peut +être utilisé pour faire des prédictions ou prendre des décisions concernant de +nouvelles données inédites. + +Il existe plusieurs types de modèles d'apprentissage automatique, chacun étant +conçu pour traiter différents types de problèmes ou de données. Certains des +types les plus courants de modèles d'apprentissage automatique incluent : + +1. **Modèles de régression :** Les modèles de régression sont utilisés pour + prédire des valeurs numériques continues, telles que les cours des actions ou + les prix des logements. + +2. **Modèles de classification :** Les modèles de classification sont utilisés + pour prédire des valeurs catégorielles discrètes, par exemple si un client + achètera ou non un produit. + +3. **Modèles de clustering :** Les modèles de clustering sont utilisés pour + identifier des groupes ou des clusters au sein d'un ensemble de données en + fonction des similitudes entre les instances. + +4. **Modèles de recommandation :** Les modèles de recommandation sont utilisés + pour recommander des produits ou des services aux utilisateurs en fonction de + leur comportement ou de leurs préférences passés. + +5. **Réseaux de neurones :** Les réseaux de neurones sont un type de modèle + d'apprentissage automatique conçu pour imiter la structure et la fonction du + cerveau humain. Ils sont couramment utilisés dans les applications de + reconnaissance d'images, de reconnaissance vocale et de traitement du langage + naturel. !!! info "Les modèles d'apprentissage automatique peuvent être biaisés" @@ -34,15 +60,20 @@ Il existe plusieurs types de modèles d'apprentissage automatique, chacun étant _Où $\hat{Y}_i$ désigne le $i$ième estimateur de la vraie valeur $Y$ en fonction de la $i$ième période d'apprentissage. Chaque $\hat{\beta}$ est un paramètre à apprendre. $\hat{\epsilon}_i$ est la quantité de bruit autorisée dans le modèle et peut varier en fonction du nombre d'époques d'entraînement indiqué par $i$. Chaque $X_i$ représente le $i$ième lot de données d'apprentissage._ -Dans les modèles statistiques classiques comme la régression linéaire, l'objectif est de trouver une ligne qui correspond le mieux aux données, nous permettant de faire des prédictions sur de nouveaux points de données. +Dans les modèles statistiques classiques comme la régression linéaire, +l'objectif est de trouver une ligne qui correspond le mieux aux données, nous +permettant de faire des prédictions sur de nouveaux points de données. -À mesure que la complexité du problème augmente, des algorithmes plus sophistiqués sont nécessaires, tels que des arbres de décision, des machines à vecteurs de support et des forêts aléatoires. Cependant, ces méthodes ont des limites et peuvent ne pas être en mesure de capturer des modèles complexes dans de grands ensembles de données. +À mesure que la complexité du problème augmente, des algorithmes plus +sophistiqués sont nécessaires, tels que des arbres de décision, des machines à +vecteurs de support et des forêts aléatoires. Cependant, ces méthodes ont des +limites et peuvent ne pas être en mesure de capturer des modèles complexes dans +de grands ensembles de données. #### Exemple de code -=== "Python" - ``` py title="linear_regression.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="linear_regression.py" linenums="1" #!/usr/bin/env +python # Charger les bibliothèques requises import pandas as pd @@ -69,10 +100,8 @@ Dans les modèles statistiques classiques comme la régression linéaire, l'obje print('Root Mean Squared Error:', rmse) ``` -=== "R" - ``` r title="linear_regression.r" linenums="1" - #!/usr/bin/env Rscript - +=== "R" ``` r title="linear_regression.r" linenums="1" #!/usr/bin/env Rscript + # Définir une graine aléatoire pour la reproductibilité set.seed(123) @@ -112,15 +141,23 @@ Dans les modèles statistiques classiques comme la régression linéaire, l'obje _Dans cette formule, nous utilisons la formulation SVM standard où $\mathbf{w}$ est le vecteur de poids, $b$ est le terme de biais et $\boldsymbol{\xi}$ est le vecteur variable d'écart. L'objectif est de minimiser la norme L2 du vecteur de poids $\mathbf{w}$, sous la contrainte que tous les exemples d'apprentissage sont classés correctement avec une marge d'au moins 1, plus une tolérance pour certaines violations de marge contrôlées par le paramètre de régularisation $C$. La variable cible $y_i$ prend les valeurs 1 ou -1, représentant les deux classes du problème de classification binaire, et $\mathbf{x}_i$ est le vecteur de caractéristiques pour le $i$ième exemple d'entraînement._ -Une machine à vecteurs de support (SVM) est un algorithme d'apprentissage automatique supervisé qui peut être utilisé pour la classification, la régression et la détection des valeurs aberrantes. C'est un algorithme populaire dans le domaine de l'apprentissage automatique, en particulier pour résoudre les problèmes de classification. +Une machine à vecteurs de support (SVM) est un algorithme d'apprentissage +automatique supervisé qui peut être utilisé pour la classification, la +régression et la détection des valeurs aberrantes. C'est un algorithme populaire +dans le domaine de l'apprentissage automatique, en particulier pour résoudre les +problèmes de classification. -L'idée de base derrière SVM est de trouver un hyperplan qui sépare au mieux les données d'entrée en différentes classes. Dans un problème de classification à deux classes, l'hyperplan est une ligne qui sépare les points de données d'une classe des points de données de l'autre classe. SVM essaie de trouver l'hyperplan qui maximise la marge entre les deux classes, où la marge est la distance entre l'hyperplan et les points de données les plus proches de chaque classe. +L'idée de base derrière SVM est de trouver un hyperplan qui sépare au mieux les +données d'entrée en différentes classes. Dans un problème de classification à +deux classes, l'hyperplan est une ligne qui sépare les points de données d'une +classe des points de données de l'autre classe. SVM essaie de trouver +l'hyperplan qui maximise la marge entre les deux classes, où la marge est la +distance entre l'hyperplan et les points de données les plus proches de chaque +classe. #### Exemple de code -=== "Python" - ``` py title="svm.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="svm.py" linenums="1" #!/usr/bin/env python # Charger les bibliothèques requises import pandas as pd @@ -186,14 +223,20 @@ L'idée de base derrière SVM est de trouver un hyperplan qui sépare au mieux l _où $\hat{y}$ est la sortie prédite, $f_t(\mathbf{x})$ est la prédiction du $t$ième arbre de la forêt pour l'entrée $\mathbf{x}$, et $T $ est le nombre d'arbres dans la forêt._ -Les forêts aléatoires sont une méthode d'apprentissage d'ensemble qui peut être utilisée pour les problèmes de classification et de régression. Ils sont souvent utilisés pour leur capacité à gérer des ensembles de données dimensionnelles à haute variation et des relations non linéaires entre les entités et les cibles. +Les forêts aléatoires sont une méthode d'apprentissage d'ensemble qui peut être +utilisée pour les problèmes de classification et de régression. Ils sont souvent +utilisés pour leur capacité à gérer des ensembles de données dimensionnelles à +haute variation et des relations non linéaires entre les entités et les cibles. -Chaque arbre est entraîné sur un sous-ensemble amorcé des données d'entraînement d'origine, et à chaque division, un sous-ensemble aléatoire de caractéristiques est pris en compte pour déterminer la division. La prédiction finale est obtenue en faisant la moyenne des prédictions de tous les arbres de la forêt. +Chaque arbre est entraîné sur un sous-ensemble amorcé des données d'entraînement +d'origine, et à chaque division, un sous-ensemble aléatoire de caractéristiques +est pris en compte pour déterminer la division. La prédiction finale est obtenue +en faisant la moyenne des prédictions de tous les arbres de la forêt. #### Exemple de code === "Python" - + ``` py title="random_forest.py" linenums="1" #!/usr/bin/env python @@ -265,13 +308,21 @@ Chaque arbre est entraîné sur un sous-ensemble amorcé des données d'entraîn _Cette formule représente un réseau de neurones à anticipation avec des couches $L$, où chaque couche applique une transformation linéaire à la sortie de la couche précédente, suivie d'une fonction d'activation non linéaire. La sortie de la couche finale, $\hat{y}$, représente la sortie prédite du réseau de neurones pour l'entrée donnée $\mathbf{x}$._ -L'apprentissage en profondeur est un sous-ensemble de l'apprentissage automatique qui implique la formation de réseaux de neurones avec de nombreuses couches de nœuds interconnectés. Cette approche peut gérer des ensembles de données volumineux et complexes et est utilisée dans un large éventail d'applications, notamment la reconnaissance d'images, le traitement du langage naturel et la reconnaissance vocale. Le processus de formation consiste à alimenter le réseau de neurones avec un grand ensemble de données et à ajuster les poids des connexions entre les nœuds pour minimiser l'erreur entre les sorties prédites et les sorties réelles. Grâce à des itérations répétées, le réseau de neurones peut apprendre à reconnaître des modèles dans les données et à faire des prédictions précises sur de nouvelles données. +L'apprentissage en profondeur est un sous-ensemble de l'apprentissage +automatique qui implique la formation de réseaux de neurones avec de nombreuses +couches de nœuds interconnectés. Cette approche peut gérer des ensembles de +données volumineux et complexes et est utilisée dans un large éventail +d'applications, notamment la reconnaissance d'images, le traitement du langage +naturel et la reconnaissance vocale. Le processus de formation consiste à +alimenter le réseau de neurones avec un grand ensemble de données et à ajuster +les poids des connexions entre les nœuds pour minimiser l'erreur entre les +sorties prédites et les sorties réelles. Grâce à des itérations répétées, le +réseau de neurones peut apprendre à reconnaître des modèles dans les données et +à faire des prédictions précises sur de nouvelles données. #### Exemple de code -=== "Python" - ``` py title="deep_learning.py" linenums="1" - #!/usr/bin/env python +=== "Python" ``` py title="deep_learning.py" linenums="1" #!/usr/bin/env python # Charger les bibliothèques requises import pandas as pd @@ -316,7 +367,7 @@ L'apprentissage en profondeur est un sous-ensemble de l'apprentissage automatiqu ``` r title="deep_learning.r" linenums="1" #!/usr/bin/env Rscript - + # Charger les bibliothèques requises library(keras) library(tensorflow) @@ -366,4 +417,4 @@ L'apprentissage en profondeur est un sous-ensemble de l'apprentissage automatiqu plot(history$metrics$accuracy, type='l', col='blue', ylim=c(0,1), ylab='Accuracy', xlab='Epoch') lines(history$metrics$val_accuracy, type='l', col='red') legend('bottomright', legend=c('Training', 'Validation'), col=c('blue', 'red'), lty=1) - ``` \ No newline at end of file + ``` diff --git a/docs/fr/3-Pipelines/Overview.md b/docs/fr/3-Pipelines/Overview.md index 4015d3035..39ae3c7b4 100644 --- a/docs/fr/3-Pipelines/Overview.md +++ b/docs/fr/3-Pipelines/Overview.md @@ -1,17 +1,61 @@ -MLOps, ou lopérations d'apprentissage automatique, fait référence à l'ensemble de pratiques et d'outils qui permettent aux organisations de développer, déployer et maintenir des modèles d'apprentissage automatique à grande échelle. MLOps vise à rationaliser le processus de bout en bout de création et de déploiement de modèles d'apprentissage automatique en intégrant les différentes étapes du cycle de vie de l'apprentissage automatique dans un flux de travail cohérent et automatisé. - -MLOps implique une gamme d'activités différentes, y compris la préparation et le prétraitement des données, la formation et l'optimisation des modèles, le déploiement et le service des modèles, la surveillance et la maintenance et l'amélioration continue. Certains des composants clés des MLOps incluent : - -1. **Gestion des données :** MLOps implique la gestion et le traitement de grandes quantités de données pour garantir la qualité et la précision des modèles d'apprentissage automatique. Cela implique des activités telles que le nettoyage, l'intégration et la transformation des données. - -2. **Entraînement et optimisation des modèles :** MLOps implique de développer et de tester des modèles d'apprentissage automatique, ainsi que de les optimiser en termes de performances et de précision. Cela peut impliquer d'expérimenter différents algorithmes, hyperparamètres et techniques de prétraitement des données. - -3. **Déploiement de modèles :** MLOps implique le déploiement de modèles d'apprentissage automatique dans des environnements de production, les rendant disponibles pour une utilisation dans des applications du monde réel. Cela peut impliquer la mise en conteneur de modèles pour un déploiement et une mise à l'échelle faciles, ainsi que la configuration d'API et d'autres interfaces pour la diffusion de modèles. - -4. **Surveillance et maintenance :** MLOps implique la surveillance des modèles d'apprentissage automatique en production pour s'assurer qu'ils fonctionnent comme prévu. Cela peut impliquer la configuration d'alertes et de notifications pour les défaillances du modèle, ainsi que la mise en œuvre de processus pour la maintenance et les mises à jour du modèle. - -5. **Amélioration continue :** MLOps implique l'amélioration continue des modèles d'apprentissage automatique au fil du temps, en fonction des commentaires des utilisateurs et de l'analyse continue des données de performance. Cela peut impliquer de recycler les modèles avec de nouvelles données ou d'intégrer les commentaires des utilisateurs pour affiner les modèles. - -Afin de mettre en œuvre efficacement les MLOps, les organisations doivent généralement adopter une gamme d'outils et de technologies différents, notamment des plates-formes de gestion de données, des cadres d'apprentissage automatique, des outils de conteneurisation et des outils de surveillance et de journalisation. Ils doivent également établir des flux de travail et des processus clairs pour gérer les différentes étapes du cycle de vie de l'apprentissage automatique, ainsi que mettre en œuvre des mesures de gouvernance et de conformité pour garantir la confidentialité et la sécurité des données. - -En résumé, MLOps est un composant essentiel du cycle de vie de l'apprentissage automatique, permettant aux organisations de développer, déployer et maintenir des modèles d'apprentissage automatique à grande échelle. En adoptant des pratiques et des outils MLOps, les organisations peuvent rationaliser leurs flux de travail d'apprentissage automatique, améliorer la précision et les performances des modèles et offrir plus de valeur aux utilisateurs et aux parties prenantes. +MLOps, ou lopérations d'apprentissage automatique, fait référence à l'ensemble +de pratiques et d'outils qui permettent aux organisations de développer, +déployer et maintenir des modèles d'apprentissage automatique à grande échelle. +MLOps vise à rationaliser le processus de bout en bout de création et de +déploiement de modèles d'apprentissage automatique en intégrant les différentes +étapes du cycle de vie de l'apprentissage automatique dans un flux de travail +cohérent et automatisé. + +MLOps implique une gamme d'activités différentes, y compris la préparation et le +prétraitement des données, la formation et l'optimisation des modèles, le +déploiement et le service des modèles, la surveillance et la maintenance et +l'amélioration continue. Certains des composants clés des MLOps incluent : + +1. **Gestion des données :** MLOps implique la gestion et le traitement de + grandes quantités de données pour garantir la qualité et la précision des + modèles d'apprentissage automatique. Cela implique des activités telles que + le nettoyage, l'intégration et la transformation des données. + +2. **Entraînement et optimisation des modèles :** MLOps implique de développer + et de tester des modèles d'apprentissage automatique, ainsi que de les + optimiser en termes de performances et de précision. Cela peut impliquer + d'expérimenter différents algorithmes, hyperparamètres et techniques de + prétraitement des données. + +3. **Déploiement de modèles :** MLOps implique le déploiement de modèles + d'apprentissage automatique dans des environnements de production, les + rendant disponibles pour une utilisation dans des applications du monde réel. + Cela peut impliquer la mise en conteneur de modèles pour un déploiement et + une mise à l'échelle faciles, ainsi que la configuration d'API et d'autres + interfaces pour la diffusion de modèles. + +4. **Surveillance et maintenance :** MLOps implique la surveillance des modèles + d'apprentissage automatique en production pour s'assurer qu'ils fonctionnent + comme prévu. Cela peut impliquer la configuration d'alertes et de + notifications pour les défaillances du modèle, ainsi que la mise en œuvre de + processus pour la maintenance et les mises à jour du modèle. + +5. **Amélioration continue :** MLOps implique l'amélioration continue des + modèles d'apprentissage automatique au fil du temps, en fonction des + commentaires des utilisateurs et de l'analyse continue des données de + performance. Cela peut impliquer de recycler les modèles avec de nouvelles + données ou d'intégrer les commentaires des utilisateurs pour affiner les + modèles. + +Afin de mettre en œuvre efficacement les MLOps, les organisations doivent +généralement adopter une gamme d'outils et de technologies différents, notamment +des plates-formes de gestion de données, des cadres d'apprentissage automatique, +des outils de conteneurisation et des outils de surveillance et de +journalisation. Ils doivent également établir des flux de travail et des +processus clairs pour gérer les différentes étapes du cycle de vie de +l'apprentissage automatique, ainsi que mettre en œuvre des mesures de +gouvernance et de conformité pour garantir la confidentialité et la sécurité des +données. + +En résumé, MLOps est un composant essentiel du cycle de vie de l'apprentissage +automatique, permettant aux organisations de développer, déployer et maintenir +des modèles d'apprentissage automatique à grande échelle. En adoptant des +pratiques et des outils MLOps, les organisations peuvent rationaliser leurs flux +de travail d'apprentissage automatique, améliorer la précision et les +performances des modèles et offrir plus de valeur aux utilisateurs et aux +parties prenantes. diff --git a/docs/fr/3-Pipelines/PaaS-Integration.md b/docs/fr/3-Pipelines/PaaS-Integration.md index bf03427f1..d63d1fc95 100644 --- a/docs/fr/3-Pipelines/PaaS-Integration.md +++ b/docs/fr/3-Pipelines/PaaS-Integration.md @@ -1,8 +1,13 @@ # Aperçu -_L'un des principaux avantages de la plate-forme ETAA est sa capacité à s'intégrer aux plates-formes d'apprentissage automatique populaires telles que Databricks et AzureML._ +_L'un des principaux avantages de la plate-forme ETAA est sa capacité à +s'intégrer aux plates-formes d'apprentissage automatique populaires telles que +Databricks et AzureML._ -Espace de travail d'analyse avancée (ETAA) est une plate-forme d'analyse de données open source conçue pour être hautement intégrable. Cela signifie qu'il peut être facilement intégré à d'autres plates-formes et outils pour étendre ses capacités et rationaliser les flux de travail. +Espace de travail d'analyse avancée (ETAA) est une plate-forme d'analyse de +données open source conçue pour être hautement intégrable. Cela signifie qu'il +peut être facilement intégré à d'autres plates-formes et outils pour étendre ses +capacités et rationaliser les flux de travail. Un exemple de diagramme illustrant une stratégie de connexion PaaS possible : @@ -12,8 +17,8 @@ Un exemple de diagramme illustrant une stratégie de connexion PaaS possible : ![PaaS](../images/PaaS.png) -**Configuration :** Si vous avez besoin d'aide pour intégrer une plate-forme en tant qu'offre de service, nous sommes heureux -aider! +**Configuration :** Si vous avez besoin d'aide pour intégrer une plate-forme en +tant qu'offre de service, nous sommes heureux aider! ## Intégration avec les offres de plate-forme externe en tant que service (PaaS) @@ -21,32 +26,68 @@ _L'intégration est la clé du succès._ [![Intégration avec PaaS](../images/IntegratePaaS.PNG)]() -Notre plate-forme open source offre une option inégalée à nos utilisateurs. En permettant aux utilisateurs d'utiliser des outils open source, nous leur donnons la possibilité d'utiliser leurs frameworks de science des données et d'apprentissage automatique préférés. Mais la véritable puissance de notre plateforme vient de sa capacité à s'intégrer à de nombreuses offres de plateforme en tant que service (PaaS), comme Databricks ou AzureML. Cela signifie que nos utilisateurs peuvent tirer parti de la puissance du cloud pour exécuter des pipelines complexes de traitement de données et d'apprentissage automatique à grande échelle. Avec la possibilité de s'intégrer aux offres PaaS, notre plate-forme permet à nos utilisateurs de faire passer leur travail au niveau supérieur, en leur donnant le pouvoir d'adapter facilement leurs charges de travail et de tirer parti des dernières innovations dans le domaine de la science des données et de la machine. apprentissage. En offrant ce niveau d'optionnalité, nous nous assurons que nos utilisateurs peuvent toujours choisir le bon outil pour le travail et garder une longueur d'avance dans un domaine en évolution constante. - -Nous pouvons nous intégrer à de nombreuses offres de plate-forme en tant que service (PaaS), comme Databricks ou AzureML. +Notre plate-forme open source offre une option inégalée à nos utilisateurs. En +permettant aux utilisateurs d'utiliser des outils open source, nous leur donnons +la possibilité d'utiliser leurs frameworks de science des données et +d'apprentissage automatique préférés. Mais la véritable puissance de notre +plateforme vient de sa capacité à s'intégrer à de nombreuses offres de +plateforme en tant que service (PaaS), comme Databricks ou AzureML. Cela +signifie que nos utilisateurs peuvent tirer parti de la puissance du cloud pour +exécuter des pipelines complexes de traitement de données et d'apprentissage +automatique à grande échelle. Avec la possibilité de s'intégrer aux offres PaaS, +notre plate-forme permet à nos utilisateurs de faire passer leur travail au +niveau supérieur, en leur donnant le pouvoir d'adapter facilement leurs charges +de travail et de tirer parti des dernières innovations dans le domaine de la +science des données et de la machine. apprentissage. En offrant ce niveau +d'optionnalité, nous nous assurons que nos utilisateurs peuvent toujours choisir +le bon outil pour le travail et garder une longueur d'avance dans un domaine en +évolution constante. + +Nous pouvons nous intégrer à de nombreuses offres de plate-forme en tant que +service (PaaS), comme Databricks ou AzureML. ## Briques de données - [Databricks de Microsoft](https://azure.microsoft.com/en-ca/services/databricks/) -Databricks est une plate-forme basée sur le cloud qui fournit une plate-forme d'analyse unifiée pour le traitement du Big Data et l'apprentissage automatique. Avec son puissant moteur de calcul distribué et ses outils de flux de travail rationalisés, Databricks est un choix populaire pour créer et déployer des modèles d'apprentissage automatique. En s'intégrant à Databricks, la plate-forme ETAA peut tirer parti de ses capacités informatiques distribuées pour former et déployer des modèles d'apprentissage automatique à grande échelle. +Databricks est une plate-forme basée sur le cloud qui fournit une plate-forme +d'analyse unifiée pour le traitement du Big Data et l'apprentissage automatique. +Avec son puissant moteur de calcul distribué et ses outils de flux de travail +rationalisés, Databricks est un choix populaire pour créer et déployer des +modèles d'apprentissage automatique. En s'intégrant à Databricks, la plate-forme +ETAA peut tirer parti de ses capacités informatiques distribuées pour former et +déployer des modèles d'apprentissage automatique à grande échelle. ## AzureML - [Azure ML de Microsoft](https://azure.microsoft.com/en-us/services/machine-learning/) -AzureML est une autre plate-forme d'apprentissage automatique populaire qui fournit une large gamme d'outils pour créer, former et déployer des modèles d'apprentissage automatique. En s'intégrant à AzureML, la plateforme ETAA peut tirer parti de ses puissants outils de création et de formation de modèles, ainsi que de sa capacité à déployer des modèles dans le cloud. +AzureML est une autre plate-forme d'apprentissage automatique populaire qui +fournit une large gamme d'outils pour créer, former et déployer des modèles +d'apprentissage automatique. En s'intégrant à AzureML, la plateforme ETAA peut +tirer parti de ses puissants outils de création et de formation de modèles, +ainsi que de sa capacité à déployer des modèles dans le cloud. ### Exemples -_Des exemples d'intégration de la plate-forme ETAA avec ces plates-formes et d'autres peuvent être trouvés sur le référentiel MLOps Github._ +_Des exemples d'intégration de la plate-forme ETAA avec ces plates-formes et +d'autres peuvent être trouvés sur le référentiel MLOps Github._ - [Dépôt Github MLOps](https://github.com/StatCan/ETAA-kubeflow-mlops) -Ce référentiel contient une gamme d'exemples et de didacticiels pour l'utilisation de la plate-forme ETAA dans divers flux de travail d'apprentissage automatique, y compris la préparation des données, la formation de modèles et le déploiement de modèles. +Ce référentiel contient une gamme d'exemples et de didacticiels pour +l'utilisation de la plate-forme ETAA dans divers flux de travail d'apprentissage +automatique, y compris la préparation des données, la formation de modèles et le +déploiement de modèles. ## Conclusion -En s'intégrant à des plates-formes d'apprentissage automatique populaires telles que Databricks et AzureML, la plate-forme ETAA fournit une solution puissante et flexible pour créer, déployer et gérer des workflows d'apprentissage automatique à grande échelle. +En s'intégrant à des plates-formes d'apprentissage automatique populaires telles +que Databricks et AzureML, la plate-forme ETAA fournit une solution puissante et +flexible pour créer, déployer et gérer des workflows d'apprentissage automatique +à grande échelle. -En tirant parti des intégrations et des outils fournis par ces plates-formes, les scientifiques des données et les ingénieurs en apprentissage automatique peuvent accélérer leurs flux de travail et obtenir de meilleurs résultats avec moins d'effort. +En tirant parti des intégrations et des outils fournis par ces plates-formes, +les scientifiques des données et les ingénieurs en apprentissage automatique +peuvent accélérer leurs flux de travail et obtenir de meilleurs résultats avec +moins d'effort. diff --git a/docs/fr/4-Collaboration/Environnement-Analyse-Geospatiale.md b/docs/fr/4-Collaboration/Environnement-Analyse-Geospatiale.md index 9626416ac..360df5032 100644 --- a/docs/fr/4-Collaboration/Environnement-Analyse-Geospatiale.md +++ b/docs/fr/4-Collaboration/Environnement-Analyse-Geospatiale.md @@ -3,18 +3,25 @@ ??? danger "Données non protégées uniquement, SSI bientôt disponible!" À l'heure actuelle, notre serveur géospatial ne peut héberger et donner accès qu'à des informations statistiques non sensibles. - + + ## Démarrage !!! succès "Conditions préalables" - + 1. Un projet intégré avec accès au portail SAD EAG ArcGIS 2. Un identifiant client ArcGIS Portal (clé API) -Le portail ArcGIS Enterprise est accessible dans ETAA ou EAC à l'aide de l'API, à partir de n'importe quel service qui exploite le langage de programmation Python. +Le portail ArcGIS Enterprise est accessible dans ETAA ou EAC à l'aide de l'API, +à partir de n'importe quel service qui exploite le langage de programmation +Python. -Par exemple, dans ETAA et l'utilisation de [Jupyter Notebooks](https://statcan.github.io/aaw/en/1-Experiments/Jupyter/) dans l'espace, ou pour EAC l'utilisation de [Databricks](https://statcan.github.io/cae-eac/en/DataBricks/), DataFactory, etc. +Par exemple, dans ETAA et l'utilisation de +[Jupyter Notebooks](https://statcan.github.io/aaw/en/1-Experiments/Jupyter/) +dans l'espace, ou pour EAC l'utilisation de +[Databricks](https://statcan.github.io/cae-eac/en/DataBricks/), DataFactory, +etc. [Le portail DAS GAE ArcGIS Enterprise est accessible directement ici](https://geoanalytics.cloud.statcan.ca/portal) @@ -28,41 +35,45 @@ Par exemple, dans ETAA et l'utilisation de [Jupyter Notebooks](https://statcan.g 1. Installez les packages : - ```python - conda install -c esri arcgis - ``` + ```python + conda install -c esri arcgis + ``` - ou utilisez Artifactory + ou utilisez Artifactory - ```python3333 - conda install -c https://jfrog.aaw.cloud.statcan.ca/artifactory/api/conda/esri-remote arcgis - ``` + ```python3333 + conda install -c https://jfrog.aaw.cloud.statcan.ca/artifactory/api/conda/esri-remote arcgis + ``` 2. Importez les librairies nécessaires dont vous aurez besoin dans le bloc-note. - ```python - from arcgis.gis import GIS - from arcgis.gis import Item - ``` - -3. Accéder au portail - Votre groupe de projet recevra un identifiant client lors de l'intégration. Collez l'ID client entre les guillemets```client_id='######'```. - - ```python - gis = GIS("https://geoanalytics.cloud.statcan.ca/portal", client_id=' ') - print("Connexion réussie sous le nom de: " + gis.properties.user.username) - ``` + ```python + from arcgis.gis import GIS + from arcgis.gis import Item + ``` +3. Accéder au portail Votre groupe de projet recevra un identifiant client lors + de l'intégration. Collez l'ID client entre les + guillemets`client_id='######'`. + + ```python + gis = GIS("https://geoanalytics.cloud.statcan.ca/portal", client_id=' ') + print("Connexion réussie sous le nom de: " + gis.properties.user.username) + ``` 4. - La sortie vous redirigera vers un portail de connexion. - Utilisez l'option de connexion Azure de StatCan et votre identifiant Cloud - - Après une connexion réussie, vous recevrez un code pour vous connecter en utilisant SAML. + - Après une connexion réussie, vous recevrez un code pour vous connecter en + utilisant SAML. - Collez ce code dans la sortie. - ![Approbation OAuth2](../images/OAuth2Key.png) + ![Approbation OAuth2](../images/OAuth2Key.png)
### Afficher les informations utilisateur -En utilisant la fonction "me", nous pouvons afficher diverses informations sur l'utilisateur connecté. + +En utilisant la fonction "me", nous pouvons afficher diverses informations sur +l'utilisateur connecté. + ```python me = gis.users.me username = me.username @@ -73,23 +84,33 @@ display(me)
### Rechercher du contenu -Recherchez le contenu que vous avez hébergé sur le portail SAD EAG. En utilisant la fonction "me", nous pouvons rechercher tout le contenu hébergé sur le compte. Il existe plusieurs façons de rechercher du contenu. Deux méthodes différentes sont décrites ci-dessous. + +Recherchez le contenu que vous avez hébergé sur le portail SAD EAG. En utilisant +la fonction "me", nous pouvons rechercher tout le contenu hébergé sur le compte. +Il existe plusieurs façons de rechercher du contenu. Deux méthodes différentes +sont décrites ci-dessous. **Recherchez tous vos éléments hébergés dans le portail géographique SAD.** + ```python my_content = me.items() my_content ``` -**Recherchez du contenu spécifique que vous possédez dans le portail géographique SAD.** -Ceci est similaire à l'exemple ci-dessus, mais si vous connaissez le titre de la couche que vous souhaitez utiliser, vous pouvez l'enregistrer en tant que fonction. +**Recherchez du contenu spécifique que vous possédez dans le portail +géographique SAD.** + +Ceci est similaire à l'exemple ci-dessus, mais si vous connaissez le titre de la +couche que vous souhaitez utiliser, vous pouvez l'enregistrer en tant que +fonction. + ```python my_items = me.items() for items in my_items: print(items.title, " | ", items.type) if items.title == "Inondation à Sorel-Tracy": flood_item = items - + else: continue print(flood_item) @@ -105,7 +126,12 @@ flood_item
### Obtenir du contenu -Nous devons obtenir l'élément du portail géographique SAD afin de l'utiliser dans le bloc-notes Jupyter. Cela se fait en fournissant le numéro d'identification unique de l'article que vous souhaitez utiliser. Trois exemples sont décrits ci-dessous, tous accédant à la même couche. + +Nous devons obtenir l'élément du portail géographique SAD afin de l'utiliser +dans le bloc-notes Jupyter. Cela se fait en fournissant le numéro +d'identification unique de l'article que vous souhaitez utiliser. Trois exemples +sont décrits ci-dessous, tous accédant à la même couche. + ```python item1 = gis.content.get(my_content[5].id) #de la recherche de votre contenu ci-dessus display(item1) @@ -120,21 +146,34 @@ display(item3)
### Effectuer une analyse -Une fois les couches importées dans le bloc-note Jupyter, nous sommes en mesure d'effectuer des types d'analyse similaires à ceux que vous vous attendriez à trouver dans un logiciel SIG tel qu'ArcGIS. Il existe de nombreux modules contenant de nombreux sous-modules qui peuvent effectuer plusieurs types d'analyses. -
-À l'aide du module arcgis.features, importez le sous-module use_proximity ```from arcgis.features import use_proximity```. Ce sous-module nous permet de `.create_buffers` - des zones à égale distance des entités. Ici, nous spécifions la couche que nous voulons utiliser, la distance, les unités et le nom de sortie (vous pouvez également spécifier d'autres caractéristiques telles que le champ, le type d'anneau, le type de fin et autres). En spécifiant un nom de sortie, après avoir exécuté la commande buffer, une nouvelle couche sera automatiquement téléchargée dans le portail SAD EAG contenant la nouvelle fonctionnalité que vous venez de créer. -
+Une fois les couches importées dans le bloc-note Jupyter, nous sommes en mesure +d'effectuer des types d'analyse similaires à ceux que vous vous attendriez à +trouver dans un logiciel SIG tel qu'ArcGIS. Il existe de nombreux modules +contenant de nombreux sous-modules qui peuvent effectuer plusieurs types +d'analyses.
+ +À l'aide du module arcgis.features, importez le sous-module use_proximity +`from arcgis.features import use_proximity`. Ce sous-module nous permet de +`.create_buffers` - des zones à égale distance des entités. Ici, nous spécifions +la couche que nous voulons utiliser, la distance, les unités et le nom de sortie +(vous pouvez également spécifier d'autres caractéristiques telles que le champ, +le type d'anneau, le type de fin et autres). En spécifiant un nom de sortie, +après avoir exécuté la commande buffer, une nouvelle couche sera automatiquement +téléchargée dans le portail SAD EAG contenant la nouvelle fonctionnalité que +vous venez de créer.
```python -buffer_lyr = use_proximity.create_buffers(item1, distances=[1], - units = "Kilomètres", +buffer_lyr = use_proximity.create_buffers(item1, distances=[1], + units = "Kilomètres", output_name='item1_buffer') display(item1_buffer) ``` -Certains utilisateurs préfèrent travailler avec des packages Open Source. La traduction d'ArcGIS vers Spatial Dataframes est simple. +Certains utilisateurs préfèrent travailler avec des packages Open Source. La +traduction d'ArcGIS vers Spatial Dataframes est simple. + ```python # créer un objet DataFrame spatialisé sdf = pd.DataFrame.spatial.from_layer(feature_layer) @@ -143,7 +182,12 @@ sdf = pd.DataFrame.spatial.from_layer(feature_layer)
### Mettre à jour les éléments -En obtenant l'élément comme nous l'avons fait similaire à l'exemple ci-dessus, nous pouvons utiliser la fonction `.update` pour mettre à jour l'élément existant dans le portail SAD EAG. Nous pouvons mettre à jour les propriétés, les données, les vignettes et les métadonnées des éléments. + +En obtenant l'élément comme nous l'avons fait similaire à l'exemple ci-dessus, +nous pouvons utiliser la fonction `.update` pour mettre à jour l'élément +existant dans le portail SAD EAG. Nous pouvons mettre à jour les propriétés, les +données, les vignettes et les métadonnées des éléments. + ```python item1_buffer = gis.content.get('c60c7e57bdb846dnbd7c8226c80414d2') item1_buffer.update(item_properties={'title': 'Saisir le titre' @@ -155,8 +199,10 @@ item1_buffer.update(item_properties={'title': 'Saisir le titre' ### Visualisez vos données sur une carte interactive -**Exemple : Librairie MatplotLib** -Dans le code ci-dessous, nous créons un objet ax, qui est un tracé de style carte. Nous traçons ensuite notre colonne de changement de données ("Population Change") sur les axes +**Exemple : Librairie MatplotLib** Dans le code ci-dessous, nous créons un objet +ax, qui est un tracé de style carte. Nous traçons ensuite notre colonne de +changement de données ("Population Change") sur les axes + ```python import matplotlib.pyplot as plt ax = sdf.boundary.plot(figsize=(10, 5)) @@ -164,16 +210,25 @@ shape.plot(ax=ax, column='Population Change', legend=True) plt.show() ``` -**Exemple : librairie ipyleaflet** -Dans cet exemple, nous utiliserons la librairie 'ipyleaflet' pour créer une carte interactive. Cette carte sera centrée autour de Toronto, ON. Les données utilisées seront décrites ci-dessous. -Commencez par coller ```conda install -c conda-forge ipyleaflet``` vous permettant d'installer les librairies ipyleaflet dans l'environnement Python. -
+**Exemple : librairie ipyleaflet** Dans cet exemple, nous utiliserons la +librairie 'ipyleaflet' pour créer une carte interactive. Cette carte sera +centrée autour de Toronto, ON. Les données utilisées seront décrites ci-dessous. +Commencez par coller `conda install -c conda-forge ipyleaflet` vous permettant +d'installer les librairies ipyleaflet dans l'environnement Python.
Importer les bibliothèques nécessaires. + ```python -import ipyleaflet +import ipyleaflet from ipyleaflet import * ``` -Maintenant que nous avons importé le module ipyleaflet, nous pouvons créer une carte simple en spécifiant la latitude et la longitude de l'emplacement que nous voulons, le niveau de zoom et le fond de carte [(plus de fonds de carte)](https://ipyleaflet.readthedocs.io/en /latest/map_and_basemaps/basemaps.html). Des contrôles supplémentaires ont été ajoutés tels que les calques et l'échelle. + +Maintenant que nous avons importé le module ipyleaflet, nous pouvons créer une +carte simple en spécifiant la latitude et la longitude de l'emplacement que nous +voulons, le niveau de zoom et le fond de carte [(plus de fonds de +carte)](https://ipyleaflet.readthedocs.io/en +/latest/map_and_basemaps/basemaps.html). Des contrôles supplémentaires ont été +ajoutés tels que les calques et l'échelle. + ```python toronto_map = Map(center=[43.69, -79.35], zoom=11, basemap=basemaps.Esri.WorldStreetMap) @@ -181,10 +236,11 @@ toronto_map.add_control(LayersControl(position='topright')) toronto_map.add_control(ScaleControl(position='bottomleft')) toronto_map ``` +
##En savoir plus sur l'API ArcGIS pour Python [La documentation complète de l'API ArcGIS peut être trouvée ici](https://developers.arcgis.com/python/) -##En savoir plus sur l'environnement analytique géospatial (GAE) et les services SAD -[Guide d'aide GAE](https://statcan.github.io/daaas-dads-geo/) +##En savoir plus sur l'environnement analytique géospatial (GAE) et les services +SAD [Guide d'aide GAE](https://statcan.github.io/daaas-dads-geo/) diff --git a/docs/fr/5-Stockage/AzureBlobStorage.md b/docs/fr/5-Stockage/AzureBlobStorage.md index d3393f947..2111417b0 100644 --- a/docs/fr/5-Stockage/AzureBlobStorage.md +++ b/docs/fr/5-Stockage/AzureBlobStorage.md @@ -1,34 +1,54 @@ # Aperçu -[Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) est la solution de stockage d'objets de Microsoft pour le cloud. Blob Storage est optimisé pour stocker des quantités massives de données non structurées. Les données non structurées sont des données qui n'adhèrent pas à un modèle de données ou à une définition particulière, comme du texte ou des données binaires. +[Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) +est la solution de stockage d'objets de Microsoft pour le cloud. Blob Storage +est optimisé pour stocker des quantités massives de données non structurées. Les +données non structurées sont des données qui n'adhèrent pas à un modèle de +données ou à une définition particulière, comme du texte ou des données +binaires. Les conteneurs de stockage Azure Blob sont efficaces dans trois domaines : -- De grandes quantités de données - Les conteneurs peuvent être énormes : bien plus gros que les disques durs. Et ils sont toujours rapides. -- Accessible par plusieurs consommateurs à la fois - Vous pouvez accéder à la même source de données à partir de plusieurs serveurs Notebook et pipelines en même temps sans avoir besoin de dupliquer les données. -- Partage - Les espaces de noms de projet peuvent partager un conteneur. C'est idéal pour partager des données avec des personnes extérieures à votre espace de travail. +- De grandes quantités de données - Les conteneurs peuvent être énormes : bien + plus gros que les disques durs. Et ils sont toujours rapides. +- Accessible par plusieurs consommateurs à la fois - Vous pouvez accéder à la + même source de données à partir de plusieurs serveurs Notebook et pipelines en + même temps sans avoir besoin de dupliquer les données. +- Partage - Les espaces de noms de projet peuvent partager un conteneur. C'est + idéal pour partager des données avec des personnes extérieures à votre espace + de travail. # Installation - + !!! avertissement "Les conteneurs de stockage Azure Blob et le support de buckets remplaceront les supports de stockage Minio Buckets et Minio" Les utilisateurs seront responsables de la migration des données des Minio Buckets vers les dossiers Azure Storage. Pour les fichiers plus volumineux, les utilisateurs peuvent contacter AAW pour obtenir de l'aide. ## Conteneur Blob monté sur un serveur de notebook - - -Les volumes Blob CSI sont conservés sous « /home/jovyan/buckets » lors de la création d'un serveur Notebook. Les fichiers sous « /buckets » sont sauvegardés par le stockage Blob. Tous les ordinateurs portables AAW auront le « /buckets » monté sur le système de fichiers, rendant les données accessibles de partout. +Les volumes Blob CSI sont conservés sous « /home/jovyan/buckets » lors de la +création d'un serveur Notebook. Les fichiers sous « /buckets » sont sauvegardés +par le stockage Blob. Tous les ordinateurs portables AAW auront le « /buckets » +monté sur le système de fichiers, rendant les données accessibles de partout. + ![Dossiers Blob montés en tant que répertoires Jupyter Notebook](../images/container-mount.png) # Support de dossier AAW pour ordinateur portable non classé + + ![Dossiers de notebook non classifiés montés dans les répertoires Jupyter Notebook](../images/unclassified-mount.png) # Support de dossier AAW pour ordinateur portable protégé-b + + ![Carnets protégés-b montés en tant que répertoires Jupyter Notebook](../images/protectedb-mount.png) -Ces dossiers peuvent être utilisés comme n'importe quel autre : vous pouvez copier des fichiers vers/depuis l'explorateur de fichiers, écrire à partir de Python/R, etc. La seule différence est que les données sont stockées dans le conteneur de stockage Blob plutôt que sur un disque local. (et est donc accessible partout où vous pouvez accéder à votre notebook Kubeflow). +Ces dossiers peuvent être utilisés comme n'importe quel autre : vous pouvez +copier des fichiers vers/depuis l'explorateur de fichiers, écrire à partir de +Python/R, etc. La seule différence est que les données sont stockées dans le +conteneur de stockage Blob plutôt que sur un disque local. (et est donc +accessible partout où vous pouvez accéder à votre notebook Kubeflow). ## Comment migrer de MinIO vers Azure Blob Storage @@ -49,42 +69,54 @@ mc mv --recursive mc cp --recursive ``` - - ## Types de conteneurs Les conteneurs Blob suivants sont disponibles : -L’accès à tous les conteneurs Blob est le même. La différence entre les conteneurs réside dans le type de stockage qui les sous-tend : +L’accès à tous les conteneurs Blob est le même. La différence entre les +conteneurs réside dans le type de stockage qui les sous-tend : -- **aaw-unclassified :** Par défaut, utilisez celui-ci. Stocke les données non classifiées. +- **aaw-unclassified :** Par défaut, utilisez celui-ci. Stocke les données non + classifiées. - **aaw-protected-b :** Stocke les données sensibles protégées-b. -- **aaw-unclassified-ro :** Cette classification est protégée-b mais en accès en lecture seule. Cela permet aux utilisateurs de visualiser les données non classifiées dans un bloc-notes protégé-b. - - +- **aaw-unclassified-ro :** Cette classification est protégée-b mais en accès en + lecture seule. Cela permet aux utilisateurs de visualiser les données non + classifiées dans un bloc-notes protégé-b. ## Accès aux données internes - -L'accès aux données internes utilise la connexion de stockage commune DAS qui est utilisée par les utilisateurs internes et externes qui ont besoin d'accéder à des données non classifiées ou protégées-b. Les conteneurs suivants peuvent être mis à disposition : +L'accès aux données internes utilise la connexion de stockage commune DAS qui +est utilisée par les utilisateurs internes et externes qui ont besoin d'accéder +à des données non classifiées ou protégées-b. Les conteneurs suivants peuvent +être mis à disposition : - **externe-non classé** - **externe-protégé-b** - **interne-non classé** - **interne-protégé-b** -Ils suivent la même convention que les conteneurs AAW ci-dessus en termes de données, mais il existe une couche d'isolement entre les employés de StatCan et les non-employés de StatCan. Les employés non-Statcan ne sont autorisés que dans les conteneurs **externes**, tandis que les employés de StatCan peuvent avoir accès à n'importe quel conteneur. +Ils suivent la même convention que les conteneurs AAW ci-dessus en termes de +données, mais il existe une couche d'isolement entre les employés de StatCan et +les non-employés de StatCan. Les employés non-Statcan ne sont autorisés que dans +les conteneurs **externes**, tandis que les employés de StatCan peuvent avoir +accès à n'importe quel conteneur. -AAW dispose d'une intégration avec l'équipe FAIR Data Infrastructure qui permet aux utilisateurs de transférer des données non classifiées et protégées vers des comptes de stockage Azure, permettant ainsi aux utilisateurs d'accéder à ces données à partir de serveurs Notebook. +AAW dispose d'une intégration avec l'équipe FAIR Data Infrastructure qui permet +aux utilisateurs de transférer des données non classifiées et protégées vers des +comptes de stockage Azure, permettant ainsi aux utilisateurs d'accéder à ces +données à partir de serveurs Notebook. -Veuillez contacter l'équipe FAIR Data Infrastructure si vous avez un cas d'utilisation de ces données. +Veuillez contacter l'équipe FAIR Data Infrastructure si vous avez un cas +d'utilisation de ces données. ## Tarifs - + !!! info "Les modèles de tarification sont basés sur l'utilisation du processeur et de la mémoire" Le prix est couvert par KubeCost pour les espaces de noms utilisateur (dans Kubeflow en bas de l'onglet Notebooks). -En général, le stockage Blob est beaucoup moins cher que [Azure Manage Disks](https://azure.microsoft.com/en-us/pricing/details/managed-disks/) et offre de meilleures E/S que les SSD gérés. +En général, le stockage Blob est beaucoup moins cher que +[Azure Manage Disks](https://azure.microsoft.com/en-us/pricing/details/managed-disks/) +et offre de meilleures E/S que les SSD gérés. diff --git a/docs/fr/6-Gitlab/Gitlab.md b/docs/fr/6-Gitlab/Gitlab.md index 669a0babb..a7ba83144 100644 --- a/docs/fr/6-Gitlab/Gitlab.md +++ b/docs/fr/6-Gitlab/Gitlab.md @@ -1,40 +1,58 @@ -## __NOTES IMPORTANTES__ -1) Veuillez NE PAS stocker votre jeton _n'importe où_ dans le système de fichiers de votre serveur d'espace de travail. Les contributeurs d'un espace de noms y auront accès. -2) S'il y a un contributeur externe à Statistique Canada dans votre espace de noms, vous perdrez l'accès au nuage principal de GitLab ! - -------------------- - - -Heureusement, l'utilisation du cloud main GitLab sur l'ETAA se fait de la même manière que l'utilisation régulière de git. - -### Etape 1 : Localisez le dépôt Git que vous voulez cloner et copiez l'option cloner avec HTTPS. -Si votre dépôt est privé, vous devrez également faire l'étape 4 (Création d'un jeton d'accès personnel) pour que cela fonctionne. -Pour moi, il s'agissait d'un dépôt de test -![image](https://user-images.githubusercontent.com/23174198/217060353-ba229ced-b5c1-4eae-8878-9608835cc65f.png) - -### Etape 2 : Coller le lien copié dans l'un des serveurs de votre espace de travail -![image](https://user-images.githubusercontent.com/23174198/217060697-535df6c1-d9bb-4bc3-a42b-9f085a5386d5.png) - -### Étape 3 : Succès ! -Comme le montre la capture d'écran ci-dessus, j'ai cloné le repo ! - -### Étape 4 : Créer un jeton d'accès personnel pour pousser (également utilisé pour extraire d'un dépôt privé) -Si vous essayez de `git push ....` vous rencontrerez une erreur qui vous mènera à la [documentation d'aide de GitLab](https://gitlab.k8s.cloud.statcan.ca/help/user/profile/account/two_factor_authentication.md#error-http-basic-access-denied-the-provided-password-or-token-) - -Vous devrez créer un jeton d'accès personnel pour cela. Pour cela, allez dans GitLab, cliquez sur l'icône de votre profil, puis sur `Préférences` et ensuite sur `Tokens d'accès` -![image](https://user-images.githubusercontent.com/23174198/217061060-122dded8-dc80-46ce-a907-a85913cf5dd7.png) -Suivez les instructions en entrant le nom, la date d'expiration du token et en accordant les permissions au token (j'ai accordé `write_repository`). - -### Etape 5 : Personnaliser `Git` pour qu'il soit à votre image -Exécutez `git config user.email ....` et `git config user.name ...` pour correspondre à votre identité GitLab. - -### Étape 6 : Fournir le jeton généré lorsqu'on vous demande votre mot de passe -Le jeton sera copiable en haut une fois que vous aurez cliqué sur `Create personal access token` en bas. -![image](https://user-images.githubusercontent.com/23174198/217062846-03a715f1-ded5-4d80-ad4b-c647ae5e30fd.png) - -Une fois que vous avez tout préparé, c'est le moment -![image](https://user-images.githubusercontent.com/23174198/217063198-c1bd6c3a-ebc5-444d-98ba-24ef32faa20e.png) - - -### Etape 7 : Voir les résultats de votre travail dans GitLab -![image](https://user-images.githubusercontent.com/23174198/217063990-efaa8e81-a0eb-4b6d-842e-2ca3112bb4f7.png) +## **NOTES IMPORTANTES** + +1. Veuillez NE PAS stocker votre jeton _n'importe où_ dans le système de + fichiers de votre serveur d'espace de travail. Les contributeurs d'un espace + de noms y auront accès. +2. S'il y a un contributeur externe à Statistique Canada dans votre espace de + noms, vous perdrez l'accès au nuage principal de GitLab ! + +--- + +Heureusement, l'utilisation du cloud main GitLab sur l'ETAA se fait de la même +manière que l'utilisation régulière de git. + +### Etape 1 : Localisez le dépôt Git que vous voulez cloner et copiez l'option cloner avec HTTPS. + +Si votre dépôt est privé, vous devrez également faire l'étape 4 (Création d'un +jeton d'accès personnel) pour que cela fonctionne. Pour moi, il s'agissait d'un +dépôt de test +![image](https://user-images.githubusercontent.com/23174198/217060353-ba229ced-b5c1-4eae-8878-9608835cc65f.png) + +### Etape 2 : Coller le lien copié dans l'un des serveurs de votre espace de travail + +![image](https://user-images.githubusercontent.com/23174198/217060697-535df6c1-d9bb-4bc3-a42b-9f085a5386d5.png) + +### Étape 3 : Succès ! + +Comme le montre la capture d'écran ci-dessus, j'ai cloné le repo ! + +### Étape 4 : Créer un jeton d'accès personnel pour pousser (également utilisé pour extraire d'un dépôt privé) + +Si vous essayez de `git push ....` vous rencontrerez une erreur qui vous mènera +à la +[documentation d'aide de GitLab](https://gitlab.k8s.cloud.statcan.ca/help/user/profile/account/two_factor_authentication.md#error-http-basic-access-denied-the-provided-password-or-token-) + +Vous devrez créer un jeton d'accès personnel pour cela. Pour cela, allez dans +GitLab, cliquez sur l'icône de votre profil, puis sur `Préférences` et ensuite +sur `Tokens d'accès` +![image](https://user-images.githubusercontent.com/23174198/217061060-122dded8-dc80-46ce-a907-a85913cf5dd7.png) +Suivez les instructions en entrant le nom, la date d'expiration du token et en +accordant les permissions au token (j'ai accordé `write_repository`). + +### Etape 5 : Personnaliser `Git` pour qu'il soit à votre image + +Exécutez `git config user.email ....` et `git config user.name ...` pour +correspondre à votre identité GitLab. + +### Étape 6 : Fournir le jeton généré lorsqu'on vous demande votre mot de passe + +Le jeton sera copiable en haut une fois que vous aurez cliqué sur +`Create personal access token` en bas. +![image](https://user-images.githubusercontent.com/23174198/217062846-03a715f1-ded5-4d80-ad4b-c647ae5e30fd.png) + +Une fois que vous avez tout préparé, c'est le moment +![image](https://user-images.githubusercontent.com/23174198/217063198-c1bd6c3a-ebc5-444d-98ba-24ef32faa20e.png) + +### Etape 7 : Voir les résultats de votre travail dans GitLab + +![image](https://user-images.githubusercontent.com/23174198/217063990-efaa8e81-a0eb-4b6d-842e-2ca3112bb4f7.png) diff --git a/docs/fr/index.md b/docs/fr/index.md index 12463d295..a22b66ee3 100644 --- a/docs/fr/index.md +++ b/docs/fr/index.md @@ -6,21 +6,34 @@ ## La documentation de l'espace de travail d'analyse avancée -_Bienvenue dans le monde de la science des données et de l'apprentissage automatique !_ +_Bienvenue dans le monde de la science des données et de l'apprentissage +automatique !_ !!! info "Qu'est-ce que l'ETAA?" **[Espace de travail d'analyse avancée](https://analytics-platform.statcan.gc.ca/)** est une plateforme open source conçue pour les data scientists, les intendants des données, les analystes et les chercheurs familiarisés avec les outils open source et le codage. Développé par des data scientists pour des data scientists, ETAA fournit un environnement flexible qui permet aux praticiens avancés de faire leur travail en toute simplicité. -L'ETAA est une solution complète pour la science des données et l'analyse des données. Avec l'ETAA, vous pouvez personnaliser les déploiements de serveurs de bloc-notes en fonction de vos besoins spécifiques en science des données. Nous avons un petit nombre d'images Docker personnalisées réalisées par notre équipe. +L'ETAA est une solution complète pour la science des données et l'analyse des +données. Avec l'ETAA, vous pouvez personnaliser les déploiements de serveurs de +bloc-notes en fonction de vos besoins spécifiques en science des données. Nous +avons un petit nombre d'images Docker personnalisées réalisées par notre équipe. !!! info "Qu'est-ce que Kubeflow ?" L'ETAA est basé sur [Kubeflow](https://www.kubeflow.org/), une solution complète open source pour le déploiement et la gestion de flux de travail ML de bout en bout. -Que vous débutiez ou que vous soyez déjà à fond dans l'analyse des données, l'espace de travail Advanced Analytics a tout ce dont vous avez besoin pour faire passer votre travail au niveau supérieur. Des outils puissants pour les pipelines de données au stockage en nuage pour vos ensembles de données, notre plateforme a tout pour plaire. Besoin de collaborer avec des collègues ou de publier vos résultats ? Aucun problème. Nous offrons des fonctionnalités de collaboration transparentes qui facilitent la collaboration et le partage de votre travail avec d'autres. +Que vous débutiez ou que vous soyez déjà à fond dans l'analyse des données, +l'espace de travail Advanced Analytics a tout ce dont vous avez besoin pour +faire passer votre travail au niveau supérieur. Des outils puissants pour les +pipelines de données au stockage en nuage pour vos ensembles de données, notre +plateforme a tout pour plaire. Besoin de collaborer avec des collègues ou de +publier vos résultats ? Aucun problème. Nous offrons des fonctionnalités de +collaboration transparentes qui facilitent la collaboration et le partage de +votre travail avec d'autres. -Quelle que soit l'étape à laquelle vous vous trouvez dans votre parcours en science des données, l'espace de travail d'analyse avancée dispose des ressources dont vous avez besoin pour réussir. +Quelle que soit l'étape à laquelle vous vous trouvez dans votre parcours en +science des données, l'espace de travail d'analyse avancée dispose des +ressources dont vous avez besoin pour réussir. ## Premiers pas avec l'ETAA @@ -30,7 +43,10 @@ Quelle que soit l'étape à laquelle vous vous trouvez dans votre parcours en sc ### Le portail ETAA -La page d'accueil du portail ETAA est disponible uniquement pour les utilisateurs internes. Cependant, les utilisateurs externes disposant d'un compte cloud auquel le sponsor commercial a accordé l'accès peuvent accéder à la plate-forme via l'URL de la plate-forme d'analyse. +La page d'accueil du portail ETAA est disponible uniquement pour les +utilisateurs internes. Cependant, les utilisateurs externes disposant d'un +compte cloud auquel le sponsor commercial a accordé l'accès peuvent accéder à la +plate-forme via l'URL de la plate-forme d'analyse. !!! info annoter "Page d'accueil du portail ETAA" @@ -54,18 +70,30 @@ La page d'accueil du portail ETAA est disponible uniquement pour les utilisateur

**[👉 Cliquez ici pour configurer votre compte Kubeflow ! 👈](https://kubeflow.aaw.cloud.statcan.ca/)**

-**[Kubeflow](1-Experiments/Kubeflow/)** est une plate-forme open source puissante et flexible qui permet une exploitation dynamique du calcul dans le cloud, les utilisateurs ayant la possibilité de contrôler les ressources de calcul, de mémoire et de stockage utilisées. +**[Kubeflow](1-Experiments/Kubeflow/)** est une plate-forme open source +puissante et flexible qui permet une exploitation dynamique du calcul dans le +cloud, les utilisateurs ayant la possibilité de contrôler les ressources de +calcul, de mémoire et de stockage utilisées. Kubeflow simplifie les tâches suivantes : -- Création d'environnements personnalisables pour travailler avec des données avec un provisionnement de ressources contrôlé par l'utilisateur (CPU, GPU, RAM et stockage personnalisés). -- Gestion des serveurs d'ordinateurs portables, y compris Ubuntu Desktop (via noVNC), R Studio, JupyterLab avec Python, R, Julia et SAS pour les employés de Statistique Canada. +- Création d'environnements personnalisables pour travailler avec des données + avec un provisionnement de ressources contrôlé par l'utilisateur (CPU, GPU, + RAM et stockage personnalisés). +- Gestion des serveurs d'ordinateurs portables, y compris Ubuntu Desktop (via + noVNC), R Studio, JupyterLab avec Python, R, Julia et SAS pour les employés de + Statistique Canada. !!! info "Tableau de bord Kubeflow" - [**Kubeflow Dashboard**](https://kubeflow.aaw.cloud.statcan.ca/) Utilisez ce lien une fois que vous avez votre compte cloud ! -La prise en main de l'espace de travail d'analyse avancée (ETAA) est simple et rapide. Tout d'abord, vous voudrez vous connecter à Kubeflow pour créer votre premier serveur de bloc-notes exécutant JupyterLab, RStudio ou Ubuntu Desktop. Nous vous encourageons à rejoindre notre chaîne Slack pour entrer en contact avec d'autres data scientists et analystes, poser des questions et partager vos expériences avec la plateforme ETAA. +La prise en main de l'espace de travail d'analyse avancée (ETAA) est simple et +rapide. Tout d'abord, vous voudrez vous connecter à Kubeflow pour créer votre +premier serveur de bloc-notes exécutant JupyterLab, RStudio ou Ubuntu Desktop. +Nous vous encourageons à rejoindre notre chaîne Slack pour entrer en contact +avec d'autres data scientists et analystes, poser des questions et partager vos +expériences avec la plateforme ETAA. ### Slack @@ -75,17 +103,39 @@ La prise en main de l'espace de travail d'analyse avancée (ETAA) est simple et - **[Cliquez ici pour vous connecter à notre espace de travail d'assistance Slack](https://statcan-aaw.slack.com/)** -- **Utilisez la chaîne _Général_ !** - -Chez Statistique Canada, nous comprenons que se lancer dans un nouveau projet peut être accablant, et vous aurez probablement de nombreuses questions liées à la plateforme en cours de route. C'est pourquoi nous avons créé un **[canal Slack](https://statcan-aaw.slack.com/)** dédié pour vous fournir l'assistance dont vous avez besoin. Notre équipe d'experts est là pour répondre à vos questions, répondre à vos préoccupations et vous guider à chaque étape du processus. - -Pour rejoindre notre **[canal Slack](https://statcan-aaw.slack.com/)**, cliquez simplement sur le lien fourni et suivez les instructions. Vous serez invité à créer un compte dans le coin supérieur droit de la page. Si vous avez une adresse de courriel « @statcan.gc.ca », utilisez-la lors de votre inscription, car cela garantira que vous êtes automatiquement approuvé et que vous pouvez commencer à vous engager immédiatement avec notre communauté. - -Une fois que vous avez créé votre compte, vous aurez accès à une multitude de ressources et d'informations, ainsi que la possibilité de vous connecter avec d'autres utilisateurs qui travaillent sur des projets similaires. Notre **[chaîne Slack](https://statcan-aaw.slack.com/)** est l'endroit idéal pour poser des questions, partager des idées et collaborer avec vos pairs en temps réel. Que vous commenciez tout juste à démarrer un nouveau projet ou que vous recherchiez des conseils d'experts sur un problème complexe, notre équipe est là pour vous aider. - -Alors n'hésitez pas : rejoignez notre **[canal Slack](https://statcan-aaw.slack.com/)** dès aujourd'hui et commencez à obtenir les réponses dont vous avez besoin pour réussir. Nous sommes impatients de vous accueillir dans notre communauté ! - -Cliquez sur le lien, puis choisissez "Créer un compte" dans le coin supérieur droit. +- **Utilisez la chaîne *Général* !** + +Chez Statistique Canada, nous comprenons que se lancer dans un nouveau projet +peut être accablant, et vous aurez probablement de nombreuses questions liées à +la plateforme en cours de route. C'est pourquoi nous avons créé un +**[canal Slack](https://statcan-aaw.slack.com/)** dédié pour vous fournir +l'assistance dont vous avez besoin. Notre équipe d'experts est là pour répondre +à vos questions, répondre à vos préoccupations et vous guider à chaque étape du +processus. + +Pour rejoindre notre **[canal Slack](https://statcan-aaw.slack.com/)**, cliquez +simplement sur le lien fourni et suivez les instructions. Vous serez invité à +créer un compte dans le coin supérieur droit de la page. Si vous avez une +adresse de courriel « @statcan.gc.ca », utilisez-la lors de votre inscription, +car cela garantira que vous êtes automatiquement approuvé et que vous pouvez +commencer à vous engager immédiatement avec notre communauté. + +Une fois que vous avez créé votre compte, vous aurez accès à une multitude de +ressources et d'informations, ainsi que la possibilité de vous connecter avec +d'autres utilisateurs qui travaillent sur des projets similaires. Notre +**[chaîne Slack](https://statcan-aaw.slack.com/)** est l'endroit idéal pour +poser des questions, partager des idées et collaborer avec vos pairs en temps +réel. Que vous commenciez tout juste à démarrer un nouveau projet ou que vous +recherchiez des conseils d'experts sur un problème complexe, notre équipe est là +pour vous aider. + +Alors n'hésitez pas : rejoignez notre +**[canal Slack](https://statcan-aaw.slack.com/)** dès aujourd'hui et commencez à +obtenir les réponses dont vous avez besoin pour réussir. Nous sommes impatients +de vous accueillir dans notre communauté ! + +Cliquez sur le lien, puis choisissez "Créer un compte" dans le coin supérieur +droit. !!! note "" @@ -96,48 +146,65 @@ Cliquez sur le lien, puis choisissez "Créer un compte" dans le coin supérieur ## 🧭 Mise en route -Pour accéder aux services ETAA, vous devez vous connecter à Kubeflow avec votre compte cloud invité de Statistique Canada. Une fois connecté, sélectionnez Notebook Servers et cliquez sur le bouton "Nouveau serveur" pour commencer. +Pour accéder aux services ETAA, vous devez vous connecter à Kubeflow avec votre +compte cloud invité de Statistique Canada. Une fois connecté, sélectionnez +Notebook Servers et cliquez sur le bouton "Nouveau serveur" pour commencer. -1. Connectez-vous à [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) avec votre compte cloud invité de Statistique Canada. Vous serez invité à authentifier le compte. +1. Connectez-vous à [Kubeflow](https://kubeflow.aaw.cloud.statcan.ca/) avec + votre compte cloud invité de Statistique Canada. Vous serez invité à + authentifier le compte. 2. Sélectionnez Serveurs de bloc-notes. 3. Cliquez sur le bouton "➕ Nouveau serveur". ## 🧰 Outils Offerts -ETAA est une plate-forme flexible pour l'analyse de données et l'apprentissage automatique. Il propose une gamme de langages, notamment Python, R et Julia. ETAA prend également en charge les environnements de développement tels que VS Code, R Studio et Jupyter Notebooks. De plus, des bureaux virtuels Linux sont disponibles pour les utilisateurs qui ont besoin d'outils supplémentaires tels que OpenM++ et QGIS. +ETAA est une plate-forme flexible pour l'analyse de données et l'apprentissage +automatique. Il propose une gamme de langages, notamment Python, R et Julia. +ETAA prend également en charge les environnements de développement tels que VS +Code, R Studio et Jupyter Notebooks. De plus, des bureaux virtuels Linux sont +disponibles pour les utilisateurs qui ont besoin d'outils supplémentaires tels +que OpenM++ et QGIS. Voici une liste d'outils que nous proposons : - 📜 Languages : - - 🐍 Python - - 📈 R - - 👩‍🔬 Julia + - 🐍 Python + - 📈 R + - 👩‍🔬 Julia - 🧮 Environnements de développement : - - Code VS - - Studio R - - Cahiers Jupyter -- 🐧 Bureaux virtuels Linux pour des outils supplémentaires (🧫 OpenM++, 🌏 QGIS etc.) - -Le partage de code, de disques et d'espaces de travail (ex : deux personnes partageant la même machine virtuelle) est décrit plus en détail dans la section [Collaboration](4-Collaboration/Overview.md). Le partage de données via des buckets est décrit plus en détail dans **[Azure Blob Storage](./5-Storage/AzureBlobStorage.md)** -section. + - Code VS + - Studio R + - Cahiers Jupyter +- 🐧 Bureaux virtuels Linux pour des outils supplémentaires (🧫 OpenM++, 🌏 QGIS + etc.) + +Le partage de code, de disques et d'espaces de travail (ex : deux personnes +partageant la même machine virtuelle) est décrit plus en détail dans la section +[Collaboration](4-Collaboration/Overview.md). Le partage de données via des +buckets est décrit plus en détail dans +**[Azure Blob Storage](./5-Storage/AzureBlobStorage.md)** section. ### 💡 Aide -- Disque (également appelé Volumes sur l'écran de création de serveur bloc-notes) +- Disque (également appelé Volumes sur l'écran de création de serveur + bloc-notes) - Conteneurs (Stockage Blob) - Lacs de données (à venir) - 📗 Documentation du portail ETAA - - [https://statcan.github.io/aaw/](https://statcan.github.io/aaw/) + - [https://statcan.github.io/aaw/](https://statcan.github.io/aaw/) - 📘 Documentation Kubeflow - - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) + - [https://www.kubeflow.org/docs/](https://www.kubeflow.org/docs/) - 🤝 Canal d'assistance Slack - - [https://statcan-etaa.slack.com](https://statcan-aaw.slack.com) + - [https://statcan-etaa.slack.com](https://statcan-aaw.slack.com) ## 🐱 Démos -Si vous avez besoin d'une session de démonstration d'intégration rapide, avez besoin d'aide ou avez des questions, veuillez nous contacter via notre [🤝 Canal d'assistance Slack](https://statcan-aaw.slack.com). +Si vous avez besoin d'une session de démonstration d'intégration rapide, avez +besoin d'aide ou avez des questions, veuillez nous contacter via notre +[🤝 Canal d'assistance Slack](https://statcan-aaw.slack.com). ## Contribuant -Si vous avez des bogues à signaler ou des fonctionnalités à demander, veuillez le faire via https://github.com/Statcan/daaas. +Si vous avez des bogues à signaler ou des fonctionnalités à demander, veuillez +le faire via https://github.com/Statcan/daaas. diff --git a/docs/fr/message-de-bienvenue.md b/docs/fr/message-de-bienvenue.md index 6aa4b20ee..dd1d70faf 100644 --- a/docs/fr/message-de-bienvenue.md +++ b/docs/fr/message-de-bienvenue.md @@ -1,25 +1,44 @@ ![image](https://user-images.githubusercontent.com/8212170/158243976-0ee25082-f3dc-4724-b8c3-1430c7f2a461.png) - # 🧙🔮 Bienvenue à l’Espace d'analyse avancé (EAA) -Veuillez trouver ci-dessous des informations, des vidéos et des liens supplémentaires pour mieux comprendre comment démarrer avec l’Espace d'analyse avancé (EAA). - -L’Espace d'analyse avancé (EAA) est notre **_plateforme open source pour la science des données et l'apprentissage automatique (ML)_** destinée aux praticiens avancés, qui peuvent ainsi accomplir leur travail dans **un environnement sans restriction**, conçu par des scientifiques des données _pour_ des scientifiques des données. Avec EAA, vous pouvez personnaliser vos déploiements d'ordinateurs portables pour répondre à vos besoins en matière de science des données. Nous disposons également d'un petit nombre d'images réalisées par notre équipe experte en science des données. - -EAA est basé sur le projet Kubeflow qui est une solution complète open source pour le déploiement et la gestion de flux de travail ML de bout en bout. Kubeflow est conçu pour rendre les déploiements de flux de travail ML sur **Kubernetes** simples, portables et évolutifs. - -🔔 **Important!** Les utilisateurs externes à Statistique Canada devront disposer d'un compte cloud dont l'accès est accordé par le commanditaire de l'entreprise. - -🔔 **Important!** Les utilisateurs internes à Statistique Canada peuvent commencer tout de suite sans procédure d'inscription supplémentaire, il suffit de se rendre à l'adresse [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/). +Veuillez trouver ci-dessous des informations, des vidéos et des liens +supplémentaires pour mieux comprendre comment démarrer avec l’Espace d'analyse +avancé (EAA). + +L’Espace d'analyse avancé (EAA) est notre **_plateforme open source pour la +science des données et l'apprentissage automatique (ML)_** destinée aux +praticiens avancés, qui peuvent ainsi accomplir leur travail dans **un +environnement sans restriction**, conçu par des scientifiques des données _pour_ +des scientifiques des données. Avec EAA, vous pouvez personnaliser vos +déploiements d'ordinateurs portables pour répondre à vos besoins en matière de +science des données. Nous disposons également d'un petit nombre d'images +réalisées par notre équipe experte en science des données. + +EAA est basé sur le projet Kubeflow qui est une solution complète open source +pour le déploiement et la gestion de flux de travail ML de bout en bout. +Kubeflow est conçu pour rendre les déploiements de flux de travail ML sur +**Kubernetes** simples, portables et évolutifs. + +🔔 **Important!** Les utilisateurs externes à Statistique Canada devront +disposer d'un compte cloud dont l'accès est accordé par le commanditaire de +l'entreprise. + +🔔 **Important!** Les utilisateurs internes à Statistique Canada peuvent +commencer tout de suite sans procédure d'inscription supplémentaire, il suffit +de se rendre à l'adresse +[https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/). ## 🔗 Liens utiles ### 🛎️ Services EAA - 🌀 Page d'accueil du portail EEA - - **Interne seulement** [https://www.statcan.gc.ca/data-analytics-service/aaw](https://www.statcan.gc.ca/data-analytics-service/aaw) - - **Interne/externe** [https://analytics-platform.statcan.gc.ca/covid19](https://analytics-platform.statcan.gc.ca/covid19) + + - **Interne seulement** + [https://www.statcan.gc.ca/data-analytics-service/aaw](https://www.statcan.gc.ca/data-analytics-service/aaw) + - **Interne/externe** + [https://analytics-platform.statcan.gc.ca/covid19](https://analytics-platform.statcan.gc.ca/covid19) - 🤖 Tableau de bord Kubeflow - [https://kubeflow.aaw.cloud.statcan.ca/](https://kubeflow.aaw.cloud.statcan.ca/) @@ -37,13 +56,15 @@ EAA est basé sur le projet Kubeflow qui est une solution complète open source Afin d'accéder aux services de l'EAA, vous devrez: -1. Vous connecter à Kubeflow avec votre compte cloud invité StatCan. Vous serez invité à authentifier le compte. +1. Vous connecter à Kubeflow avec votre compte cloud invité StatCan. Vous serez + invité à authentifier le compte. 2. Sélectionnez Notebook Servers. 3. Cliquez sur le bouton " ➕ Nouveau serveur ". ## 🧰 Outils offerts -AAW est une plateforme flexible pour l'analyse de données et l'apprentissage automatique, avec: +AAW est une plateforme flexible pour l'analyse de données et l'apprentissage +automatique, avec: - 📜 Langues - 🐍 Python @@ -54,11 +75,14 @@ AAW est une plateforme flexible pour l'analyse de données et l'apprentissage au - VS Code - R Studio - Jupyter Notebooks -- 🐧 Bureaux virtuels Linux pour des outils supplémentaires (🧫 OpenM++, 🌏 QGIS, etc.) +- 🐧 Bureaux virtuels Linux pour des outils supplémentaires (🧫 OpenM++, 🌏 + QGIS, etc.) ## 🐱 Démonstrations -Si vous souhaitez une session d'embarquement/démo rapide ou si vous avez besoin d'aide ou avez des questions, n'hésitez pas à nous contacter via notre canal de support 🤝 Slack. +Si vous souhaitez une session d'embarquement/démo rapide ou si vous avez besoin +d'aide ou avez des questions, n'hésitez pas à nous contacter via notre canal de +support 🤝 Slack. ## FAQ diff --git a/mkdocs-dev.yml b/mkdocs-dev.yml index 5eb5eb404..af49da5d4 100644 --- a/mkdocs-dev.yml +++ b/mkdocs-dev.yml @@ -19,7 +19,7 @@ edit_uri: edit/master/docs/dev # - navigation.tabs.sticky # language: en # show_sidebar: true - #logo: images/statcan.png +#logo: images/statcan.png theme: name: material @@ -28,19 +28,19 @@ theme: accent: blue nav: - Features: - - Getting Started: getting-started/index.md - - Overview: features/index.md - - Object Storage: - - S3Proxy and S3 Explorer: features/object-storage/s3proxy.md - - Blob CSI: features/object-storage/blobcsi.md - - Cloud Main Connectivity: features/cloud-main-connectivity/cloud-main-connectivity.md - - Data Virtualization: features/data-virtualization/trino.md - - RBAC: - - Non-Employee RBAC: features/rbac/non-employee-rbac.md - - Source Control: features/source-control/gitea.md + - Getting Started: getting-started/index.md + - Overview: features/index.md + - Object Storage: + - S3Proxy and S3 Explorer: features/object-storage/s3proxy.md + - Blob CSI: features/object-storage/blobcsi.md + - Cloud Main Connectivity: features/cloud-main-connectivity/cloud-main-connectivity.md + - Data Virtualization: features/data-virtualization/trino.md + - RBAC: + - Non-Employee RBAC: features/rbac/non-employee-rbac.md + - Source Control: features/source-control/gitea.md - Resources: - - Overview: resources/index.md - - Developer Tools: developer-tools.md + - Overview: resources/index.md + - Developer Tools: developer-tools.md markdown_extensions: - def_list @@ -64,7 +64,7 @@ markdown_extensions: - pymdownx.snippets - pymdownx.superfences - pymdownx.tabbed: - alternate_style: true + alternate_style: true - md_in_html extra_javascript: diff --git a/mkdocs-en.yml b/mkdocs-en.yml index 2b0b0e843..ca6ac3a15 100644 --- a/mkdocs-en.yml +++ b/mkdocs-en.yml @@ -23,7 +23,6 @@ theme: #logo: images/statcan.png custom_dir: overrides - markdown_extensions: - toc: baselevel: 1 @@ -43,12 +42,12 @@ markdown_extensions: - pymdownx.snippets - pymdownx.superfences - pymdownx.tabbed: - alternate_style: true + alternate_style: true - md_in_html plugins: -- mkdocs-jupyter: - include_source: True + - mkdocs-jupyter: + include_source: True extra_javascript: - javascripts/mathjax.js @@ -83,10 +82,10 @@ nav: - Machine Learning Models: 3-Pipelines/Machine-Learning.md - Training ML Models: 3-Pipelines/Machine-Learning-Training-Pipelines.md - Storing ML Models: 3-Pipelines/Machine-Learning-Model-Cloud-Storage.md - - Serving ML Models: - - Introduction: 3-Pipelines/Machine-Learning-Model-Serving.md - - Example Notebooks: - - Seldon Iris Classifier: 3-Pipelines/sklearn_iris_jsondata.ipynb + - Serving ML Models: + - Introduction: 3-Pipelines/Machine-Learning-Model-Serving.md + - Example Notebooks: + - Seldon Iris Classifier: 3-Pipelines/sklearn_iris_jsondata.ipynb - Integrate with External PaaS: 3-Pipelines/PaaS-Integration.md - Collaboration: - Overview: 4-Collaboration/Overview.md diff --git a/mkdocs-fr.yml b/mkdocs-fr.yml index bde7ba981..88af47105 100644 --- a/mkdocs-fr.yml +++ b/mkdocs-fr.yml @@ -44,7 +44,7 @@ markdown_extensions: - pymdownx.snippets - pymdownx.superfences - pymdownx.tabbed: - alternate_style: true + alternate_style: true - md_in_html extra_javascript: diff --git a/overrides/main.html b/overrides/main.html index 702c96bf2..9eba6f02c 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -1,11 +1,9 @@ -{% extends "base.html" %} - -{% block content %} -{% if page.nb_url %} - - {% include ".icons/material/download.svg" %} - -{% endif %} - -{{ super() }} -{% endblock content %} +{% extends "base.html" %} {% block content %} {% if page.nb_url %} + + {% include ".icons/material/download.svg" %} + +{% endif %} {{ super() }} {% endblock content %} diff --git a/yarn.lock b/yarn.lock index 385598d58..cb309837d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,723 +3,724 @@ "@babel/code-frame@^7.0.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + "integrity" "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/highlight" "^7.14.5" "@babel/helper-validator-identifier@^7.14.5": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + "integrity" "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz" + "version" "7.14.9" "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" dependencies: - type-fest "^0.21.3" + "type-fest" "^0.21.3" -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" +"ansi-regex@^5.0.0": + "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + "version" "5.0.0" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -braces@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" +"ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"braces@^3.0.1": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0", "chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"commander@^6.0.0": + "integrity" "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "resolved" "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + "version" "6.2.1" -compare-versions@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== +"compare-versions@^3.6.0": + "integrity" "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "resolved" "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz" + "version" "3.6.0" -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +"cosmiconfig@^7.0.0": + "integrity" "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" + "version" "7.0.0" dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -dictionary-en-au@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/dictionary-en-au/-/dictionary-en-au-2.3.0.tgz#261e8e8d0bd776afcf7ff49722815656438d5be9" - integrity sha512-KoEotpXPCyCgZ5DHlexHyzFfNwPnv9VupeCrp6r+JrtEkycPmZYbQiXF+cXz9NJr1gXy0AMEpzZ8UfxF40+8OQ== - -dictionary-en-gb@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/dictionary-en-gb/-/dictionary-en-gb-2.3.0.tgz#f6aa1948350615507e39a4c3cae950caa681df52" - integrity sha512-P/J2VQp/hDsMTfJhmIYPUBxZqezWuDaUzSgb6oW7JLpUV2So9jCXbR5TaUYXwfO50ZXPYEzQqQHPQK3pKcs7Rg== - -dictionary-en@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/dictionary-en/-/dictionary-en-3.1.0.tgz#2883598f02c9ccfb8acf7aa513797b50eeec77d2" - integrity sha512-dNjhoQagh7GX3YUBdbzehy/+wR2GLhkdpkxF8wMEGIXxMrH6aqzMn/8CHP5xnF85qbv288gCt4XtPQEVCOmTeA== - -dictionary-es@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/dictionary-es/-/dictionary-es-3.1.0.tgz#feddb790daea58a5ae4667f1fac663bb165c72d3" - integrity sha512-zUZ06ADfa/G/znQbGhz8juUPJQRxCYOTbeW7z06+4dsyGe4vbnrLY3zXCapEzqg0NXpVmliSTdPZ8SY8U8iMXA== - -dictionary-fr@^2.5.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/dictionary-fr/-/dictionary-fr-2.6.0.tgz#be3a232daf88837ac50d6a0808420b9515b2c903" - integrity sha512-JgD3jqbP/kqypvdHUPd7hyIO93ymPH07iJwLyzPM8zpMuS6B5CbLtL3D0eXGVb17pRVq+j3za9+/znGXkkXG2g== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + "import-fresh" "^3.2.1" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.10.0" + +"dictionary-en-au@^2.1.1": + "integrity" "sha512-KoEotpXPCyCgZ5DHlexHyzFfNwPnv9VupeCrp6r+JrtEkycPmZYbQiXF+cXz9NJr1gXy0AMEpzZ8UfxF40+8OQ==" + "resolved" "https://registry.npmjs.org/dictionary-en-au/-/dictionary-en-au-2.3.0.tgz" + "version" "2.3.0" + +"dictionary-en-gb@^2.1.1": + "integrity" "sha512-P/J2VQp/hDsMTfJhmIYPUBxZqezWuDaUzSgb6oW7JLpUV2So9jCXbR5TaUYXwfO50ZXPYEzQqQHPQK3pKcs7Rg==" + "resolved" "https://registry.npmjs.org/dictionary-en-gb/-/dictionary-en-gb-2.3.0.tgz" + "version" "2.3.0" + +"dictionary-en@^3.0.0": + "integrity" "sha512-dNjhoQagh7GX3YUBdbzehy/+wR2GLhkdpkxF8wMEGIXxMrH6aqzMn/8CHP5xnF85qbv288gCt4XtPQEVCOmTeA==" + "resolved" "https://registry.npmjs.org/dictionary-en/-/dictionary-en-3.1.0.tgz" + "version" "3.1.0" + +"dictionary-es@^3.0.1": + "integrity" "sha512-zUZ06ADfa/G/znQbGhz8juUPJQRxCYOTbeW7z06+4dsyGe4vbnrLY3zXCapEzqg0NXpVmliSTdPZ8SY8U8iMXA==" + "resolved" "https://registry.npmjs.org/dictionary-es/-/dictionary-es-3.1.0.tgz" + "version" "3.1.0" + +"dictionary-fr@^2.5.1": + "integrity" "sha512-JgD3jqbP/kqypvdHUPd7hyIO93ymPH07iJwLyzPM8zpMuS6B5CbLtL3D0eXGVb17pRVq+j3za9+/znGXkkXG2g==" + "resolved" "https://registry.npmjs.org/dictionary-fr/-/dictionary-fr-2.6.0.tgz" + "version" "2.6.0" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"fast-glob@^3.1.1": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" - integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== - dependencies: - reusify "^1.0.4" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-versions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== - dependencies: - semver-regex "^3.1.2" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -globby@^11.0.1: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -husky@^4.2.5: - version "4.3.8" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" - integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow== - dependencies: - chalk "^4.0.0" - ci-info "^2.0.0" - compare-versions "^3.6.0" - cosmiconfig "^7.0.0" - find-versions "^4.0.0" - opencollective-postinstall "^2.0.2" - pkg-dir "^5.0.0" - please-upgrade-node "^3.2.0" - slash "^3.0.0" - which-pm-runs "^1.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -inquirer@^7.0.1: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.19: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fastq@^1.6.0": + "integrity" "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "reusify" "^1.0.4" + +"figures@^3.0.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"find-versions@^4.0.0": + "integrity" "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==" + "resolved" "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "semver-regex" "^3.1.2" + +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"globby@^11.0.1": + "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + "version" "11.0.4" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"husky@^4.2.5": + "integrity" "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==" + "resolved" "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz" + "version" "4.3.8" + dependencies: + "chalk" "^4.0.0" + "ci-info" "^2.0.0" + "compare-versions" "^3.6.0" + "cosmiconfig" "^7.0.0" + "find-versions" "^4.0.0" + "opencollective-postinstall" "^2.0.2" + "pkg-dir" "^5.0.0" + "please-upgrade-node" "^3.2.0" + "slash" "^3.0.0" + "which-pm-runs" "^1.0.0" + +"iconv-lite@^0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"ignore@^5.1.4": + "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + "version" "5.1.8" + +"import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"inquirer@^7.0.1": + "integrity" "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" + "version" "7.3.3" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.19" + "mute-stream" "0.0.8" + "run-async" "^2.4.0" + "rxjs" "^6.6.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + +"is-arrayish@^0.2.1": + "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-glob@^4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-extglob" "^2.1.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"json-parse-even-better-errors@^2.3.0": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"lines-and-columns@^1.1.6": + "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= sha512-8ZmlJFVK9iCmtLz19HpSsR8HaAMWBT284VMNednLwlIMDP2hJDCIhUp0IZ2xUcZ+Ob6BM0VvCSJwzASDM45NLQ==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" + "version" "1.1.6" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash@^4.17.19": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" "markdown-spellcheck@https://github.com/brendangadd/node-markdown-spellcheck.git#45cf81bfb56f298d0928461133aa9f264047dd49": - version "1.3.1" - resolved "https://github.com/brendangadd/node-markdown-spellcheck.git#45cf81bfb56f298d0928461133aa9f264047dd49" - dependencies: - chalk "^4.1.0" - commander "^6.0.0" - dictionary-en "^3.0.0" - dictionary-en-au "^2.1.1" - dictionary-en-gb "^2.1.1" - dictionary-es "^3.0.1" - dictionary-fr "^2.5.1" - globby "^11.0.1" - inquirer "^7.0.1" - js-yaml "^3.13.1" - marked "^0.8.0" - nodehun "^3.0.1" - -marked@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355" - integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -node-addon-api@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.0.0.tgz#ac128f43eff7fac4b5f5ef2f39d6d7c2709efead" - integrity sha512-ALmRVBFzfwldBfk3SbKfl6+PVMXiCPKZBEfsJqB/EjXAMAI+MfFrEHR+GMRBuI162DihZ1QjEZ8ieYKuRCJ8Hg== - -nodehun@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/nodehun/-/nodehun-3.0.2.tgz#a39efc326174cd8ab0a3f71b29a38c5cc8d0739e" - integrity sha512-Zo0JrFhNqI4l/sq/3d0Ugxb+NKDIgYrGB5SWtYbpJm5N/lyoN9hP3tFmLNDsOJ6v7dXKn6tpzF+vgVar6C8JiQ== - dependencies: - node-addon-api "*" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + "integrity" "sha512-+Gljg5kyjNW2bioe/Fsb3Ed1PLJ+MHFJIzPQ1PT7xBctbVujvQqMzY1XUZhhM/KiUZ9PVt5DAgwCCOhJE1I8yg==" + "resolved" "git+ssh://git@github.com/brendangadd/node-markdown-spellcheck.git" + "version" "1.3.1" + dependencies: + "chalk" "^4.1.0" + "commander" "^6.0.0" + "dictionary-en" "^3.0.0" + "dictionary-en-au" "^2.1.1" + "dictionary-en-gb" "^2.1.1" + "dictionary-es" "^3.0.1" + "dictionary-fr" "^2.5.1" + "globby" "^11.0.1" + "inquirer" "^7.0.1" + "js-yaml" "^3.13.1" + "marked" "^0.8.0" + "nodehun" "^3.0.1" + +"marked@^0.8.0": + "integrity" "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==" + "resolved" "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz" + "version" "0.8.2" + +"merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^4.0.4": + "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.2.3" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"node-addon-api@*": + "integrity" "sha512-ALmRVBFzfwldBfk3SbKfl6+PVMXiCPKZBEfsJqB/EjXAMAI+MfFrEHR+GMRBuI162DihZ1QjEZ8ieYKuRCJ8Hg==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.0.0.tgz" + "version" "4.0.0" + +"nodehun@^3.0.1": + "integrity" "sha512-Zo0JrFhNqI4l/sq/3d0Ugxb+NKDIgYrGB5SWtYbpJm5N/lyoN9hP3tFmLNDsOJ6v7dXKn6tpzF+vgVar6C8JiQ==" + "resolved" "https://registry.npmjs.org/nodehun/-/nodehun-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "node-addon-api" "*" + +"onetime@^5.1.0": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"opencollective-postinstall@^2.0.2": + "integrity" "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + "resolved" "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" + "version" "2.0.3" + +"os-tmpdir@~1.0.2": + "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-json@^5.0.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - -prettier@2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"picomatch@^2.2.3": + "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + "version" "2.3.0" + +"pkg-dir@^5.0.0": + "integrity" "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "find-up" "^5.0.0" + +"please-upgrade-node@^3.2.0": + "integrity" "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==" + "resolved" "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "semver-compare" "^1.0.0" + +"prettier@2.8.8": + "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + "version" "2.8.8" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^6.6.0": + "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + "version" "6.6.7" + dependencies: + "tslib" "^1.9.0" "safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver-regex@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" - integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"semver-compare@^1.0.0": + "integrity" "sha1-De4hahyUGrN+nvsXiPavxf9VN/w= sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + "resolved" "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" + "version" "1.0.0" + +"semver-regex@^3.1.2": + "integrity" "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==" + "resolved" "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz" + "version" "3.1.2" + +"signal-exit@^3.0.2": + "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" + "version" "3.0.3" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"string-width@^4.1.0": + "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"strip-ansi@^6.0.0": + "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "ansi-regex" "^5.0.0" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"through@^2.3.6": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tslib@^1.9.0": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"which-pm-runs@^1.0.0": + "integrity" "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= sha512-SIqZVnlKPt/s5tOArosKIvGC1bwpoj6w5Q3SmimaVOOU8YFsjuMvvZO1MbKCbO8D6VV0XkROC8jrXJNYa1xBDA==" + "resolved" "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz" + "version" "1.0.0" + +"yaml@^1.10.0": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0"