<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - machine learning</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/tag-machine-learning.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</id><updated>2024-04-17T09:01:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>CUDA enabled Jupyter Docker Images</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2024/cuda-enabled-jupyter-docker-images/" rel="alternate"/><published>2024-04-16T22:08:00+00:00</published><updated>2024-04-17T09:01:00+00:00</updated><author><name>Ayaz Salikhov</name></author><id>tag:jasongrout.github.io,2024-04-16:/medium-archive/pelican/posts/2024/cuda-enabled-jupyter-docker-images/</id><summary type="html">&lt;p&gt;I am happy to announce that Jupyter Docker Stacks project now provides GPU accelerated Docker images. This allows PyTorch or TensorFlow…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;I am happy to announce that &lt;a href="https://jupyter-docker-stacks.readthedocs.io/en/latest/index.html"&gt;Jupyter Docker Stacks project&lt;/a&gt; now provides GPU accelerated Docker images. This allows PyTorch or TensorFlow operations to use compatible NVIDIA GPUs for accelerated computation.&lt;/p&gt;
&lt;h3 id="how-to-find-these-images"&gt;How to find these images&lt;/h3&gt;
&lt;p&gt;All our images are available on &lt;a href="https://quay.io/organization/jupyter"&gt;Quay.io registry&lt;/a&gt;. We provide CUDA accelerated versions of images are available for &lt;code&gt;tensorflow-notebook&lt;/code&gt; and &lt;code&gt;pytorch-notebook&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To use such an image, you have to specify a special prefix tag to the image: versioned CUDA prefix like &lt;code&gt;cuda11-&lt;/code&gt; or &lt;code&gt;cuda12-&lt;/code&gt; for &lt;code&gt;pytorch-notebook&lt;/code&gt; or just &lt;code&gt;cuda-&lt;/code&gt; for &lt;code&gt;tensorflow-notebook&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We build &lt;code&gt;pytorch-notebook&lt;/code&gt; only for 2 last major versions of CUDA, &lt;code&gt;tensorflow-notebook&lt;/code&gt; image supports only the latest CUDA version listed in the &lt;a href="https://www.tensorflow.org/install/source#gpu"&gt;officially tested build configurations&lt;/a&gt; list. CUDA-enabled images are available on x86_64 platform.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For example, you can use an image &lt;code&gt;quay.io/jupyter/pytorch-notebook:cuda12-python-3.11.8&lt;/code&gt; or &lt;code&gt;quay.io/jupyter/tensorflow-notebook:cuda-latest&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="running-the-images"&gt;Running the images&lt;/h3&gt;
&lt;p&gt;To enable CUDA support on &lt;strong&gt;Linux&lt;/strong&gt; host machine, you need to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;have compatible Nvidia GPU&lt;/li&gt;
&lt;li&gt;have NVIDIA Linux driver installed&lt;/li&gt;
&lt;li&gt;add &lt;code&gt;--gpus all&lt;/code&gt; (or &lt;code&gt;--gpus '&amp;quot;device=all&amp;quot;'&lt;/code&gt;) flag to if you’re using &lt;code&gt;Docker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;add &lt;code&gt;--device 'nvidia.com/gpu=all'&lt;/code&gt; flag if you’re using &lt;code&gt;Podman&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, you can run the image like this: &lt;code&gt;docker run -it --rm -p 8888:8888 --gpus all quay.io/jupyter/tensorflow-notebook:cuda-latest&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can also enable GPU support on &lt;strong&gt;Windows&lt;/strong&gt; using &lt;a href="https://docs.docker.com/desktop/gpu/"&gt;Docker&lt;/a&gt; or &lt;a href="https://github.com/containers/podman/issues/19005"&gt;Podman&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="reaching-out"&gt;Reaching out&lt;/h3&gt;
&lt;p&gt;You will find our documentation &lt;a href="http://jupyter-docker-stacks.readthedocs.io"&gt;here&lt;/a&gt;.&lt;br&gt;
If you encounter any problems, please, take a look at &lt;a href="https://github.com/jupyter/docker-stacks"&gt;GitHub issues&lt;/a&gt;.&lt;br&gt;
If you would like to improve GPU support in our images, please, reach out &lt;a href="https://github.com/jupyter/docker-stacks/issues/1557"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="acknowledgments"&gt;Acknowledgments&lt;/h3&gt;
&lt;p&gt;I would like to thank:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/johanna-reiml-hpi"&gt;Johanna Reiml&lt;/a&gt;, for implementing general &lt;code&gt;variant&lt;/code&gt; concept for our images and making it work for &lt;code&gt;pytorch-notebook&lt;/code&gt; (PR &lt;a href="https://github.com/jupyter/docker-stacks/pull/2091"&gt;#2091&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ChristofKaufmann"&gt;Christof Kaufmann&lt;/a&gt;, for making it work for &lt;code&gt;tensorflow-notebook&lt;/code&gt; (PR &lt;a href="https://github.com/jupyter/docker-stacks/pull/2100"&gt;#2100&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/benz0li"&gt;Olivier Benz&lt;/a&gt;, for helping me out to write this blog post&lt;/li&gt;
&lt;/ul&gt;
</content><category term="Docker"/><category term="machine learning"/></entry><entry><title>Ploomber: Maintainable and Collaborative Pipelines in Jupyter</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/" rel="alternate"/><published>2021-09-01T14:17:00+00:00</published><updated>2021-11-10T16:54:00+00:00</updated><author><name>Eduardo Blancas</name></author><id>tag:jasongrout.github.io,2021-09-01:/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/</id><summary type="html">&lt;p&gt;Ploomber is an open-source framework that allows teams to develop maintainable pipelines in Jupyter.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/001-1_JJ-jCKjGCs71jmW_jUUo9Q.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Jupyter is a fantastic tool for data exploration. The ability to transform our data interactively and get immediate visual feedback allows us to understand it quickly. However, when working on large projects, collaboration can become difficult. Features such as live collaboration are a gigantic leap forward for teamwork. Still, it has to complement an asynchronous workflow that allows team members to work at different times, especially in a remote-first workplace.&lt;/p&gt;
&lt;p&gt;Back in 2020, I introduced &lt;a href="https://github.com/ploomber/ploomber"&gt;Ploomber&lt;/a&gt; at &lt;a href="https://www.youtube.com/watch?v=M6mtgPfsA3M"&gt;JupyterCon&lt;/a&gt; to help practitioners build maintainable and reproducible data workflows. Fortunately, the community is growing. We’ve received great feedback from teams that use Ploomber to develop production-ready pipelines using Jupyter, debunking the notion that notebooks are only for prototyping.&lt;/p&gt;
&lt;p&gt;As we’ve gathered more feedback from our community, we realized that while users had improved the reproducibility of their workflows, team dynamics didn’t change much. In many cases, collaborators worked in isolation, sharing processed data, which severely hindered reproducibility.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Teams often share processed data, which hinders reproducibility." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/002-1_IyPsYguxs-QiN5ECuRA3SQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Teams often share processed data, which hinders reproducibility.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Since its first release, Ploomber aimed to promote software development best practices to produce more maintainable data projects. We’re now doubling our efforts to enable a collaborative and asynchronous workflow.&lt;/p&gt;
&lt;h2 id="enabling-code-reviews"&gt;Enabling Code Reviews&lt;/h2&gt;
&lt;p&gt;We frequently hear from teams using Jupyter notebooks that it’s challenging to manage &lt;code&gt;.ipynb&lt;/code&gt; files. For example, we heard from a data scientist that his company considered banning Jupyter notebooks because they couldn’t figure out how to follow software engineering best practices. Our fellow data scientist was highly frustrated by this situation since Jupyter turbocharges his ability to explore and understand data.&lt;/p&gt;
&lt;p&gt;Managing &lt;code&gt;.ipynb&lt;/code&gt; files is challenging for multiple reasons. Suppose I push a notebook to a git repository. Then, I add a comment and push it to the repository again. The difference between the two versions looks like this:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Diff view from a notebook with a new cell." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/003-1_0b5P217N-mBvpKiQpltdXA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Diff view from a notebook with a new cell.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;.ipynb&lt;/code&gt; files contain input and outputs in a single file, making them extremely useful when we want to share code and results with a colleague but complicates code reviews where we want to compare the previous version with the current one. However, we can fix this problem by changing the underlying file format.&lt;/p&gt;
&lt;p&gt;Many practitioners don’t know that Jupyter is agnostic to the underlying file representation, allowing us to interact with different file formats as notebooks. &lt;a href="https://github.com/mwouts/jupytext"&gt;Jupytext&lt;/a&gt; is a fantastic project that enables us to open various file formats such as &lt;code&gt;.py&lt;/code&gt; and &lt;code&gt;.md&lt;/code&gt; as notebooks.&lt;/p&gt;
&lt;p&gt;Ploomber integrates with jupytext, allowing users to store their source code as &lt;code&gt;.py&lt;/code&gt; files and explore data interactively with Jupyter. Since source code exists in &lt;code&gt;.py&lt;/code&gt; files, this enables code reviews, file merging, and the flexibility to edit the code either in Jupyter or in any text editor, giving anyone on the team the freedom to use whatever tool they like the most.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="The same .py file is displayed as a notebook in JupyterLab and as a script in VS Code." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/004-1_2nJuHJ5mRSttNnPJlW2sxQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The same .py file is displayed as a notebook in JupyterLab and as a script in VS Code.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="enabling-modularization"&gt;Enabling Modularization&lt;/h2&gt;
&lt;p&gt;Often, teams develop significant parts of a project in a single notebook for convenience; however, this makes it hard to maintain the project in the long run. We know from decades of advancement in software engineering practice that modularizing our code produces more maintainable projects. Yet, we tend to work on single notebooks because breaking down analysis in multiple parts involves managing project structure, ensuring we route outputs correctly, and writing code to orchestrate all steps.&lt;/p&gt;
&lt;p&gt;Ploomber allows users to concatenate multiple notebooks into a pipeline in two steps: list the notebooks in a YAML file and declare execution dependencies (e.g., download data, then clean it). Furthermore, Ploomber parses our execution dependencies and injects inputs into our notebook when opening it. Thus, there’s no need to hard-code any paths. The following image illustrates how to declare a pipeline in a &lt;code&gt;pipeline.yaml&lt;/code&gt; file and the notebook’s code injection process:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Ploomber integrates with JupyterLab to auto-complete outputs from task dependencies." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/005-1_gL2-ulFM2As0IQZy93TqDg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Ploomber integrates with JupyterLab to auto-complete outputs from task dependencies.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Modularization has another benefit. It allows teams to collaborate on separate, well-defined streams of work. Data projects have a sequential nature, and by explicitly structuring them into small tasks, it is easy to assign parts to various team collaborators. For example, if a two-person team is working on a project that uses two sources of data, each member can take one dataset:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Modularization allows teams to work efficiently." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/006-1_D_2-AzuaTKEXFwH1chCYLQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Modularization allows teams to work efficiently.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="enabling-testing"&gt;Enabling Testing&lt;/h2&gt;
&lt;p&gt;Modularization facilitates testing. A recommended practice when developing data pipelines is to test the output data from each task to ensure it has some minimum quality. Since we have clear boundaries among tasks, we can embed integration tests that check the output coming out of each step, ensuring that we know when something breaks.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Ploomber allows testing output artifacts from each task to check for data quality." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/007-1_slWI7s5zWClIrEV9nh3mBA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Ploomber allows testing output artifacts from each task to check for data quality.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Examples of integration tests include: checking there are no &lt;code&gt;NULL&lt;/code&gt; values in a specific column or verifying values fall into a certain range. In Ploomber, you can execute an arbitrary function after your notebook finishes to assert statements on your data:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Example of an integration test that ensures that a particular column does not have NAs." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/008-1_SoRQVeyGsXK3Zete9L04Ug.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Example of an integration test that ensures that a particular column does not have NAs.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="ensuring-reproducibility"&gt;Ensuring Reproducibility&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="Users can adopt a continuous integration workflow to test for reproducibility." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/009-1_pGlDQ8ykrqnTUsjeY67oVw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Users can adopt a continuous integration workflow to test for reproducibility.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;One of Jupyter notebook’s most recurring problems is &lt;em&gt;hidden state&lt;/em&gt;; this happens when we execute code cells in an arbitrary order. However, when running cells in sequential order, the results do not match the recorded output.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hidden state&lt;/em&gt; creates significant issues. For example, teams often execute notebooks locally, store them in a git repository, and don’t execute them again. For instance, I heard from a fellow data scientist that her team struggled to update a model in production because of a broken notebook that prevented her team from re-training the model: the notebook had been executed locally once but never tested for reproducibility.&lt;/p&gt;
&lt;p&gt;The answer to &lt;em&gt;hidden state&lt;/em&gt; is straightforward: test continuously. In software engineering, it’s common to run code and test it on each &lt;code&gt;git push&lt;/code&gt;. However, such practice hasn’t found its way into the data world, primarily because running data processing code may take hours, making testing unfeasible.&lt;/p&gt;
&lt;p&gt;Fortunately, most errors are detectable with small amounts of data, and Ploomber simplifies managing pipeline configurations. For example, a user can define a &lt;code&gt;sample&lt;/code&gt; parameter to run the pipeline with a fraction of the input data:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="An example parametrized pipeline that can execute with a sample of the data." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/010-1_PRrGwgtnO4YTLZfUShegLw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;An example parametrized pipeline that can execute with a sample of the data.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Then, a continuous integration script can run the pipeline with a sample by switching the &lt;code&gt;sample&lt;/code&gt; parameter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ploomber&lt;span class="w"&gt; &lt;/span&gt;build&lt;span class="w"&gt; &lt;/span&gt;--sample&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Furthermore, users can easily download remote artifacts to debug broken pipelines.&lt;/p&gt;
&lt;h2 id="enabling-pull-requests"&gt;Enabling Pull Requests&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="Users can submit Pull Requests containing code (.py files) and results (executed notebooks)." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/011-1_Y4Jy2E7cqM7tPWvpPU3l4g.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Users can submit Pull Requests containing code (.py files) and results (executed notebooks).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Once a new feature is ready, a team member can open a pull request. Since the code is in &lt;code&gt;.py&lt;/code&gt; files, the reviewer can easily compare code versions. However, metrics or charts are essential to evaluate data processing code. For this reason, Ploomber generates a &lt;code&gt;.ipynb&lt;/code&gt; file for each &lt;code&gt;.py&lt;/code&gt; file; such executed notebooks can be attached to a pull request to review code and output.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Pipeline execution generates executed notebook files that can be attached to a Pull Request." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/012-1_tVXeHFlmpPJDMewgRRCNYQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Pipeline execution generates executed notebook files that can be attached to a Pull Request.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A CI process can orchestrate pipeline execution with a single command: &lt;code&gt;ploomber build&lt;/code&gt;. However, if working with large datasets, Ploomber can export pipelines to execute in AWS Batch, Airflow, or Kubernetes (Argo Workflows).&lt;/p&gt;
&lt;h2 id="enabling-fast-iterations"&gt;Enabling Fast Iterations&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="Ploomber skips execution of tasks whose source code has not changed since the last run." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/ploomber-maintainable-and-collaborative-pipelines-in/images/013-1_z1jqY7VI33dE2R2YO_SeBw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Ploomber skips execution of tasks whose source code has not changed since the last run.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Data projects are highly iterative and require us to run small experiments to evaluate our final results. For example, we may add a new feature and assess whether that improves model performance. The more experiments we try, the higher our chance of success.&lt;/p&gt;
&lt;p&gt;Such experiments are small and often only touch a small portion of the pipeline. If most of our tasks are unaffected, re-running tasks is a waste of time since they’ll generate the same results. Given that a training pipeline may take hours to run, it is essential to speed things up as much as possible. To enable faster iterations, Ploomber builds pipelines incrementally, skipping tasks whose source code hasn’t changed. Incremental builds help in multiple scenarios, for example, when trying out local experiments or running the pipeline in the CI system. Furthermore, they enable crash recovery: if we execute our pipeline and it crashes, we can fix the failing task, submit it again, and execution will take off from the point of failure.&lt;/p&gt;
&lt;h2 id="jupyterlab-is-a-production-ready-platform"&gt;JupyterLab Is a Production-Ready Platform&lt;/h2&gt;
&lt;p&gt;It is common for teams to develop prototypes in Jupyter, then refactor them into Python modules; such an approach creates a lot of overhead and a tremendous burden for data scientists (who produce the models) and engineers (who have to refactor notebook-based prototypes). Instead, we believe data projects should start with production in mind by following best software development practices that allow teams to iterate quickly.&lt;/p&gt;
&lt;p&gt;Providing such an experience is challenging. Nevertheless, we are working hard to achieve that goal; we want data scientists and engineers to collaborate to produce production-ready projects that instantly go from Jupyter to production.&lt;/p&gt;
&lt;h2 id="the-future"&gt;The Future&lt;/h2&gt;
&lt;p&gt;There is still a long way to capture our vision of the future of data workflows. Furthermore, we want to keep building the project with the help of our users. So if you’re interested in building Ploomber with us, join our &lt;a href="http://community.ploomber.io"&gt;community&lt;/a&gt;, or follow us on &lt;a href="https://twitter.com/ploomber"&gt;Twitter&lt;/a&gt;! And if you believe in our mission, please show your support with a star on &lt;a href="https://github.com/ploomber/ploomber"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks to Ido Michael and Filip Jankovic for providing feedback.&lt;/em&gt;&lt;/p&gt;
</content><category term="machine learning"/></entry><entry><title>Reusable code snippets in JupyterLab</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/" rel="alternate"/><published>2020-11-18T18:08:00+00:00</published><updated>2020-11-19T15:38:00+00:00</updated><author><name>Luciano Resende</name></author><id>tag:jasongrout.github.io,2020-11-18:/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/</id><summary type="html">&lt;p&gt;by Patrick Titzler, Luciano Resende&lt;/p&gt;
</summary><content type="html">&lt;p&gt;by Patrick Titzler, Luciano Resende&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Reusable code snippets in JupyterLab" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/001-1_bF2CvMkAeI9QB_DD29M9Ow.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Reusable code snippets in JupyterLab&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In this blog post, we will introduce the &lt;a href="https://github.com/elyra-ai/elyra"&gt;Elyra&lt;/a&gt; &lt;a href="https://elyra.readthedocs.io/en/latest/user_guide/code-snippets.html"&gt;code snippet extension&lt;/a&gt;, which enables us to reuse arbitrary snippets of code in your notebooks, source code, or markdown files in JupyterLab.&lt;/p&gt;
&lt;p&gt;Let’s say you are working on a notebook and want to include a standard header or footer (like licensing text) or some code that you’ve previously created. This typically results in a hectic search. In which notebook did I use the code? Where’s the most current version of the disclaimer I need to add? While maintaining a “scratchpad” might help, native support for reusable code or documentation assets in JupyterLab holds a lot more appeal.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Code snippet ui" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/002-1_cR1hInF2oXYu8hbosLx78w.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Code snippet ui&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="installing-the-code-snippet-extension"&gt;Installing the code snippet extension&lt;/h2&gt;
&lt;p&gt;The code snippet extension can be installed as part of Elyra or individually using &lt;code&gt;pip&lt;/code&gt; or &lt;code&gt;conda&lt;/code&gt;. In the context of this article, see below how to install the code snippet extension in your existing JupyterLab deployment.&lt;/p&gt;
&lt;h3 id="installing-the-extension-using-pip"&gt;Installing the extension using pip&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;elyra-code-snippet-extension&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jupyter&lt;span class="w"&gt; &lt;/span&gt;lab&lt;span class="w"&gt; &lt;/span&gt;build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="installing-the-extension-using-anaconda"&gt;Installing the extension using Anaconda&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;conda&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;conda-forge&lt;span class="w"&gt; &lt;/span&gt;elyra-code-snippet-extension&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jupyter&lt;span class="w"&gt; &lt;/span&gt;lab&lt;span class="w"&gt; &lt;/span&gt;build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="managing-and-using-code-snippets"&gt;Managing and using code snippets&lt;/h2&gt;
&lt;p&gt;Code snippets are accessed by opening the &lt;code&gt;code snippets&lt;/code&gt; tab on the JupyterLab sidebar:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/003-0_Fie0v3ppwrmiRTGX.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;The code snippets UI is divided into two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a quick search panel, and&lt;/li&gt;
&lt;li&gt;the code snippet list, providing access to code snippet specific actions, such as copy, insert, edit, and delete.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/004-0_engxXB3Tz8HmkISW.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="creating-a-snippet"&gt;Creating a snippet&lt;/h2&gt;
&lt;p&gt;To create a snippet click &lt;code&gt;+&lt;/code&gt; above the search bar and provide the required information. You can optionally tag snippets to make them more easily discoverable.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/005-0_yIlAqD2eSLLkNo-0.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="finding-a-snippet"&gt;Finding a snippet&lt;/h2&gt;
&lt;p&gt;To locate a code snippet, enter a search term and/or pick one of the listed tags.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/006-0_oyIjiBDeFhi0y4It.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="copying-a-snippet-to-the-clipboard"&gt;Copying a snippet to the clipboard&lt;/h2&gt;
&lt;p&gt;You copy the snippet content to the clipboard by clicking the snippet’s &lt;em&gt;copy&lt;/em&gt; icon.&lt;/p&gt;
&lt;h2 id="inserting-a-snippet"&gt;Inserting a snippet&lt;/h2&gt;
&lt;p&gt;Click the snippet’s insert icon to paste the snippet content in the desired destination, such as a cell in a notebook or an open editor window. Drag-and-Drop of the snippet has also been incorporated in the latest Elyra release.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/007-0_QdPljYYKAYvqaP0Q.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Do note that the editor does not keep track of where you’ve inserted a snippet. Also, note that snippets don’t act like macros and changes to a snippet are therefore not reflected in the locations where the snippet was embedded.&lt;/p&gt;
&lt;h2 id="editing-a-snippet"&gt;Editing a snippet&lt;/h2&gt;
&lt;p&gt;You edit a snippet by clicking the snippet’s pencil icon.&lt;/p&gt;
&lt;h2 id="deleting-a-code-snippet"&gt;Deleting a code snippet&lt;/h2&gt;
&lt;p&gt;You delete a code snippet by clicking the snippet’s trash icon.&lt;/p&gt;
&lt;h2 id="sharing-code-snippets"&gt;Sharing code snippets&lt;/h2&gt;
&lt;p&gt;The code snippet extension currently doesn’t provide any import or export capabilities. However, you can access the relevant metadata files that contain the definitions.&lt;/p&gt;
&lt;p&gt;The definitions are stored in the &lt;code&gt;$JUPYTER_DATA_DIR/metadata/code-snippets&lt;/code&gt; directory, where &lt;code&gt;$JUPYTER_DATA_DIR&lt;/code&gt; refers to the &lt;a href="https://jupyter.readthedocs.io/en/latest/use/jupyter-directories.html#id2"&gt;Jupyter data directory&lt;/a&gt;, which you can identify by running the following command in a terminal window:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;jupyter&lt;span class="w"&gt; &lt;/span&gt;--data-dir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In my environment, the code snippets are stored in &lt;code&gt;/Users/ptitzler/Library/Jupyter/metadata/code-snippets/&lt;/code&gt;. To back up or share my snippets, I typically create an archive from the content of this directory.&lt;/p&gt;
&lt;h2 id="try-code-snippet-from-binder"&gt;Try Code Snippet from Binder&lt;/h2&gt;
&lt;p&gt;To experiment with the code snippet extension without installing it locally, just click on the binder link below and then look for the code-snippet icon on the JupyterLab side-bar :&lt;/p&gt;
&lt;figure&gt;
&lt;a href="https://mybinder.org/v2/gh/elyra-ai/elyra/v1.4.1?urlpath=lab/tree/binder-demo"&gt;&lt;img alt="Try the code snippet extension online on Binder" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/reusable-code-snippets-in-jupyterlab/images/008-0_BdqSU9blQk8YG6kC.webp" loading="lazy" data-body-image=""&gt;&lt;/a&gt;
&lt;figcaption&gt;Try the code snippet extension online on Binder&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="acknowledgments"&gt;&lt;strong&gt;Acknowledgments&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;We’d like to thank &lt;a href="https://www.linkedin.com/in/zach-sailer-8a1472151/"&gt;Zach Sailer&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/tgeorgeux/"&gt;Timothy George&lt;/a&gt; for all his UX contributions in conjunction with &lt;a href="https://www.linkedin.com/in/jay-jaewook-ahn/"&gt;JaeWook (Jay) Ahn&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-pinnipati/"&gt;Kiran Pinnipati&lt;/a&gt;, and &lt;a href="https://www.linkedin.com/in/ai-vyndang/"&gt;Ai-Vy Dang&lt;/a&gt; the CalPoly interns that helped to implement these UX enhancements.&lt;/p&gt;
&lt;h2 id="closing-thoughts"&gt;Closing thoughts&lt;/h2&gt;
&lt;p&gt;Elyra is constantly making Jupyter Notebooks better aiming to help data scientists, machine learning engineers, and AI developers through the model development life cycle complexities, making JupyterLab even better for AI practitioners.&lt;/p&gt;
&lt;p&gt;Come and join our &lt;a href="https://github.com/elyra-ai/elyra#weekly-dev-community-meeting"&gt;weekly dev meetings&lt;/a&gt; to learn more about the most recent updates to Elyra and to ask your questions to the community, including the project core developers.&lt;/p&gt;
&lt;p&gt;We would also appreciate for you to get involved with the &lt;a href="https://github.com/elyra-ai/elyra/"&gt;Elyra project&lt;/a&gt;. Read our contributing guidelines, &lt;a href="https://github.com/elyra-ai/elyra/issues"&gt;create new issues&lt;/a&gt; if you have questions, suggestions for new features, or to report any bugs. We also welcome contributions via GitHub &lt;a href="https://github.com/elyra-ai/elyra/pulls"&gt;pull requests&lt;/a&gt;. And last but not least, don’t forget to star the project on Github.&lt;/p&gt;
</content><category term="Elyra"/><category term="JupyterLab"/><category term="machine learning"/></entry><entry><title>Elyra reaches 1.0.0</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/" rel="alternate"/><published>2020-08-10T15:55:00+00:00</published><updated>2020-08-10T15:55:00+00:00</updated><author><name>Luciano Resende</name></author><id>tag:jasongrout.github.io,2020-08-10:/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/</id><summary type="html">&lt;p&gt;Building on a Jupyter Notebooks foundation, the de facto tool for data scientists, machine learning engineers and AI developers, Elyra is…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Building on a &lt;a href="https://jupyter.org/"&gt;Jupyter Notebooks&lt;/a&gt; foundation, the de facto tool for data scientists, machine learning engineers and AI developers, &lt;a href="https://github.com/elyra-ai/elyra/"&gt;Elyra&lt;/a&gt; is an open-source project that provides a set of AI-centric extensions to &lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; aiming to help users through the model development life cycle complexities, making JupyterLab even better for AI practitioners.&lt;/p&gt;
&lt;p&gt;Elyra is proud to announce its &lt;a href="https://elyra.readthedocs.io/en/latest/getting_started/changelog.html#id1"&gt;1.0.0 Release&lt;/a&gt;. This release brings usability enhancements and bug fixes for existing features, such as enhanced inline user documentation and validation capabilities for the Pipeline Editor, improved performance for pipeline submission to Kubeflow Pipelines runtime. It also provides new capabilities such as a new reusable Code Snippets extension and the ability to configure runtimes directly on the JupyterLab user interface.&lt;/p&gt;
&lt;p&gt;On the platform side, Elyra 1.0.0 is now based on JupyterLab 2.x and can easily be integrated into a &lt;a href="https://github.com/jupyterhub/jupyterhub"&gt;JupyterHub&lt;/a&gt; deployment or other containerized environments such as Kubernetes and OpenShift or even be run in standalone mode using local docker deployment.&lt;/p&gt;
&lt;p&gt;With Elyra 1.0.0 we also provide some helpful use-case scenarios leveraging Elyra features to build AI pipelines in order to demonstrate in-depth capabilities exposed by the project. Use cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/CODAIT/covid-notebooks"&gt;Analyzing COVID-19 time-series data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/elyra-ai/examples/tree/master/pipelines/dax_noaa_weather_data"&gt;Analyzing NOAA weather time series data set and explore forecasting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this is the first time you are hearing about Elyra, check out our &lt;a href="https://developer.ibm.com/technologies/artificial-intelligence/blogs/open-source-elyra-ai-toolkit-simplifies-data-model-development/"&gt;announcement blog&lt;/a&gt; for more details about the project.&lt;/p&gt;
&lt;p&gt;The 1.0.0 release of Elyra includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Notebook Pipelines visual editor&lt;/li&gt;
&lt;li&gt;Ability to run notebooks as batch jobs&lt;/li&gt;
&lt;li&gt;Reusable Code Snippets (new)&lt;/li&gt;
&lt;li&gt;Hybrid runtime support (based on Jupyter Enterprise Gateway)&lt;/li&gt;
&lt;li&gt;Python script execution capabilities within the editor&lt;/li&gt;
&lt;li&gt;Python script navigation using auto-generated Table of Contents&lt;/li&gt;
&lt;li&gt;Notebook navigation using auto-generated Table of Contents&lt;/li&gt;
&lt;li&gt;Notebook versioning based on Git integration&lt;/li&gt;
&lt;li&gt;Reusable configuration and editor for runtimes (new)&lt;/li&gt;
&lt;li&gt;Support for JupyterLab 2.x (new)&lt;/li&gt;
&lt;li&gt;JupyterHub Support (new)&lt;/li&gt;
&lt;li&gt;Ability to try Elyra from Binder (new)&lt;/li&gt;
&lt;li&gt;Support for JupyterLab Dark Theme&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="Elyra 1.0 extensions to JupyterLab" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/001-1_np8Fau_8fuHGkT_hN5sg6w.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Elyra 1.0 extensions to JupyterLab&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="notebook-pipelines-visual-editor"&gt;Notebook Pipelines visual editor&lt;/h2&gt;
&lt;p&gt;Elyra’s Notebook Pipeline Editor simplifies the conversion of multiple notebooks into batch jobs or workflows. By leveraging cloud-based resources to run their experiments faster, the data scientists, machine learning engineers, and AI developers are then more productive, and therefore able to spend more of their time focusing on their technical skills.&lt;/p&gt;
&lt;p&gt;Based on the great feedback from the Elyra user base, this release brings lots of bug fixes usability enhancements such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enhanced inline user documentation&lt;/li&gt;
&lt;li&gt;Validation capabilities to Pipeline Editor that notifies users of missing or invalid configuration values&lt;/li&gt;
&lt;li&gt;Optimized dependency handling providing a much faster submission of pipelines&lt;/li&gt;
&lt;li&gt;Easier access to previously submitted experiments from the Pipeline Editor&lt;/li&gt;
&lt;li&gt;Support for “bring your own image” to be used as the environment to execute Notebooks on the external runtime&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below you can see some of the Pipeline Editor UI enhancements introduced in Elyra 1.0:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Elyra Pipeline visual editor UI enhancements" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/002-1_P1HhivH4pkCeDqtxjEQTVw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Elyra Pipeline visual editor UI enhancements&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="reusable-code-snippets"&gt;&lt;strong&gt;Reusable Code Snippets&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Code snippets give you the ability to save time and reuse task-oriented blocks of code. Elyra’s new code snippets extension enables easy discovery, creation, and insertion of reusable snippets of code into your Notebooks, Python Scripts, or even Markdown files used for documentation directly from the JupyterLab workspace. This makes the process of writing code more efficient and accessible.&lt;/p&gt;
&lt;p&gt;The list of available code snippets is found in the left side pane and includes a preview of each snippet, and an option to either copy a snippet or insert it directly inline.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Elyra code snippets pannel" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/003-1_yuU1PfPr5O04-V31EmRfbg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Elyra code snippets pannel&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Code snippets can also be conveniently created and edited from within JupyterLab.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Elyra code snippets editor" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/004-1_PzwPsYGRFeiDA_u0qFpAPw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Elyra code snippets editor&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="leveraging-table-of-contents-for-notebooks-and-python-scripts"&gt;&lt;strong&gt;Leveraging Table of Contents for Notebooks and Python Scripts&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Navigating large files to find specific sections in Notebooks or function definitions in Python Scripts can be difficult tasks. The Table of Contents extension, which was enhanced to support navigating Python Scripts provides an easy outline of your contents, enabling easy navigation.&lt;/p&gt;
&lt;p&gt;Below is an example of an auto-generated table of contents for a Notebook based on its markdown sections:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Auto-generated Notebook Table of Contents" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/005-1_raOo4YPVH_m5f7FbmSUcwg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Auto-generated Notebook Table of Contents&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;To allow for streamlined python development, Elyra’s python editor is now accompanied by an auto-generated Table of Contents, which allows for efficient navigation within large python scripts.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Auto-generated Python Script outline using Table Of Contents" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/006-1_Ng0eU0ctSyNegygzSGcxTQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Auto-generated Python Script outline using Table Of Contents&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="reusable-configuration-and-editor-for-runtimes"&gt;&lt;strong&gt;Reusable configuration and editor for runtimes&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Elyra introduced a ‘shared configuration service’ that simplifies workspace configuration management, enabling things like information around accessing external runtimes to be configured once and shared across multiple components.&lt;/p&gt;
&lt;p&gt;With Elyra 1.0, this service is now used by multiple components and has been enhanced with schema-based validation capabilities and a full set of REST APIs. With this release of Elyra, users can also easily browse, create, and edit these configurations from within the JupyterLab user interface.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Runtime configuration editor" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/007-1_7SfVLpa660T1GpxMvx87IQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Runtime configuration editor&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="jupyterhub-support"&gt;&lt;strong&gt;JupyterHub support&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;With Elyra 1.0.0 we have also created a docker image and provided necessary &lt;a href="https://elyra.readthedocs.io/en/latest/recipes/deploying-elyra-in-a-jupyterhub-endvironment.html"&gt;configuration steps&lt;/a&gt; to integrate Elyra with JupyterHub.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Elyra &amp;amp; JupyterHub deployment diagram" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/008-1_VpApg-iEYn2k2hW2HXUyQA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Elyra &amp;amp; JupyterHub deployment diagram&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="using-elyra-in-real-analytics-and-ai-scenarios"&gt;Using Elyra in real Analytics and AI scenarios&lt;/h2&gt;
&lt;p&gt;While building Elyra, we work very closely with data scientists, machine learning engineers, and AI developers, and we have been building a few scenarios to validate the user experience when developing models and other applications using Elyra.&lt;/p&gt;
&lt;h3 id="analyzing-covid-19-time-series-data"&gt;Analyzing COVID-19 time-series data&lt;/h3&gt;
&lt;p&gt;One of the examples creates a pipeline to analyze COVID-19 time series data sets from both the USA and Europe which is available as open-source in the &lt;a href="https://github.com/CODAIT/covid-notebooks"&gt;covid-notebook GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="COVID-19 notebook pipeline" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/009-1_b8SVOnIIbWqnJmShft8isw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;COVID-19 notebook pipeline&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="analyzing-noaa-weather-time-series-data-set-and-explore-forecasting"&gt;Analyzing NOAA weather time series data set and explore forecasting&lt;/h3&gt;
&lt;p&gt;Another example utilizes &lt;a href="https://developer.ibm.com/exchanges/data/"&gt;DAX — Data Asset Exchange NOAA dataset&lt;/a&gt; and produces a pipeline that consumes and applies ETL into the dataset, and then goes about analyzing and experimenting with different forecasting capabilities.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="NOAA weather time-series notebook pipeline" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/010-1_ep46vKAfyJoyxt5DZUvzEA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;NOAA weather time-series notebook pipeline&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="elyra-community-adoption"&gt;&lt;strong&gt;Elyra community adoption&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The Elyra community is working very hard to promote adoption and create a healthy community around the project. In the past few months, we are starting to see some momentum, and below are some details :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Github Stars&lt;/strong&gt;: Elyra main repository is reaching close to 500 as of August 2020, please continue to show your support for the project by spreading the word about the project and giving us more stars.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Projects depending on Elyra:&lt;/strong&gt; Other then the two examples scenarios mentioned above, we are starting to see other communities adopting Elyra into their projects, CalPoly has been using the Elyra code snippets extension in their summer-intern projects and other communities are also experimenting with Elyra.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="GitHub projects depending on Elyra" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/011-1_aUQmatlEyLiOKHaEJyLTfQ.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;GitHub projects depending on Elyra&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Downloads:&lt;/strong&gt; We have also seen an increase of downloads of the Elyra npm packages in the past several weeks, and we are floating between 60k — 70k weekly downloads for the past month:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Elyra packages download stats" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/012-1_0bctBbTkft3J9fzAzVwwvg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Elyra packages download stats&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Elyra in the Enterprise&lt;/strong&gt;: Components of Elyra are integrated and available in IBM Cloud Pak for Data and Watson Studio offerings.&lt;/p&gt;
&lt;h2 id="try-elyra-from-binder"&gt;Try Elyra from Binder&lt;/h2&gt;
&lt;p&gt;To experiment with Elyra without installing it locally, just click on the binder link below:&lt;/p&gt;
&lt;figure&gt;
&lt;a href="https://mybinder.org/v2/gh/elyra-ai/elyra/v1.0.0?urlpath=lab/tree/binder-demo"&gt;&lt;img alt="Try Elyra online on Binder" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/elyra-reaches-1-0-0/images/013-1_-MRRK-LICe2zRigofJAA5Q.webp" loading="lazy" data-body-image=""&gt;&lt;/a&gt;
&lt;figcaption&gt;Try Elyra online on Binder&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="what-is-next-for-elyra"&gt;What is next for Elyra&lt;/h2&gt;
&lt;p&gt;Elyra is constantly making Jupyter Notebooks better aiming to help data scientists, machine learning engineers, and AI developers through the model development life cycle complexities, making JupyterLab even better for AI practitioners.&lt;/p&gt;
&lt;p&gt;Come and join our &lt;a href="https://github.com/elyra-ai/elyra#weekly-dev-community-meeting"&gt;weekly dev meetings&lt;/a&gt; to learn more about the most recent updates to Elyra and to ask your questions to the community, including the project core developers.&lt;/p&gt;
&lt;p&gt;We would also appreciate for you to get involved with the &lt;a href="https://github.com/elyra-ai/elyra/"&gt;Elyra project&lt;/a&gt;. Read our contributing guidelines, &lt;a href="https://github.com/elyra-ai/elyra/issues"&gt;create new issues&lt;/a&gt; if you have questions, suggestions for new features, or to report any bugs. We also welcome contributions via GitHub &lt;a href="https://github.com/elyra-ai/elyra/pulls"&gt;pull requests&lt;/a&gt;.&lt;/p&gt;
</content><category term="Elyra"/><category term="JupyterLab"/><category term="machine learning"/></entry></feed>