CINXE.COM
From Notebook to Production-Ready Machine Learning Project
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>From Notebook to Production-Ready Machine Learning Project</title> <meta name="HandheldFriendly" content="True" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="preload" href="/blog/assets/css/app.css?v=d16ee3eaf3" as="style" /> <link rel="preload" href="/blog/assets/js/manifest.js?v=d16ee3eaf3" as="script" /> <link rel="preload" href="/blog/assets/js/vendor/content-api.min.js?v=d16ee3eaf3" as="script" /> <link rel="preload" href="/blog/assets/js/vendor.js?v=d16ee3eaf3" as="script" /> <link rel="preload" href="/blog/assets/js/app.js?v=d16ee3eaf3" as="script" /> <link rel="preconnect" href="https://polyfill.io"> <link rel="dns-prefetch" href="https://polyfill.io"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@100;300;400;700;900&display=swap" rel="stylesheet"> <link rel="preload" href="/blog/assets/css/post.css?v=d16ee3eaf3" as="style" /> <link rel="preload" href="/blog/assets/js/post.js?v=d16ee3eaf3" as="script" /> <style> /* These font-faces are here to make fonts work if the Ghost instance is installed in a subdirectory */ /* source-sans-pro-regular */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; font-weight: 400; font-display: swap; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url("/blog/assets/fonts/source-sans-pro/source-sans-pro-regular.woff2?v=d16ee3eaf3") format('woff2'), url("/blog/assets/fonts/source-sans-pro/source-sans-pro-regular.woff?v=d16ee3eaf3") format('woff'); } /* source-sans-pro-600 */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; font-weight: 600; font-display: swap; src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url("/blog/assets/fonts/source-sans-pro/source-sans-pro-600.woff2?v=d16ee3eaf3") format('woff2'), url("/blog/assets/fonts/source-sans-pro/source-sans-pro-600.woff?v=d16ee3eaf3") format('woff'); } /* source-sans-pro-700 */ @font-face { font-family: 'Source Sans Pro'; font-style: normal; font-weight: 700; font-display: swap; src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url("/blog/assets/fonts/source-sans-pro/source-sans-pro-700.woff2?v=d16ee3eaf3") format('woff2'), url("/blog/assets/fonts/source-sans-pro/source-sans-pro-700.woff?v=d16ee3eaf3") format('woff'); } /* iconmoon */ @font-face { font-family: 'icomoon'; font-weight: normal; font-style: normal; font-display: swap; src: url("/blog/assets/fonts/icomoon/icomoon.eot?aoz2mo?v=d16ee3eaf3"); src: url("/blog/assets/fonts/icomoon/icomoon.eot?aoz2mo#iefix?v=d16ee3eaf3") format('embedded-opentype'), url("/blog/assets/fonts/icomoon/icomoon.ttf?aoz2mo?v=d16ee3eaf3") format('truetype'), url("/blog/assets/fonts/icomoon/icomoon.woff?aoz2mo?v=d16ee3eaf3") format('woff'), url("/blog/assets/fonts/icomoon/icomoon.svg?aoz2mo#icomoon?v=d16ee3eaf3") format('svg'); } </style> <script defer src="/blog/assets/fonts/fontawesome/all.min.js?v=d16ee3eaf3"></script> <link rel="stylesheet" type="text/css" href="/blog/assets/fonts/octicons/octicons.min.css?v=d16ee3eaf3"> <link rel="stylesheet" type="text/css" href="/blog/assets/css/app.css?v=d16ee3eaf3" media="screen" /> <link rel="stylesheet" type="text/css" href="/blog/assets/css/post.css?v=d16ee3eaf3" media="screen" /> <meta name="description" content="Every machine learning project starts simple – that’s a good thing. But at some point you need to promote it to production-grade." /> <link rel="icon" href="/blog/favicon.ico" type="image/x-icon" /> <link rel="canonical" href="https://dagshub.com/blog/notebook-to-production-machine-learning/" /> <meta name="referrer" content="no-referrer-when-downgrade" /> <meta property="og:site_name" content="DagsHub Blog" /> <meta property="og:type" content="article" /> <meta property="og:title" content="From Notebook to Production-Ready Machine Learning Project" /> <meta property="og:description" content="Every machine learning project starts simple – that’s a good thing. But at some point you need to promote it to production-grade. With 3 lines of code, you can get from a notebook to a central source of truth with code, data, models, and experiments which you can share with team members." /> <meta property="og:url" content="https://dagshub.com/blog/notebook-to-production-machine-learning/" /> <meta property="og:image" content="https://dagshub.com/blog/content/images/2023/11/DALL-E-MLflow-Announcement--1-..png" /> <meta property="article:published_time" content="2023-09-14T15:03:23.000Z" /> <meta property="article:modified_time" content="2023-11-16T08:20:31.000Z" /> <meta property="article:tag" content="MLOps" /> <meta property="article:tag" content="Google Colab" /> <meta property="article:tag" content="Tutorials &amp; Webinars" /> <meta property="article:publisher" content="https://www.facebook.com/dagshub" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="From Notebook to Production-Ready Machine Learning Project" /> <meta name="twitter:description" content="Every machine learning project starts simple – that’s a good thing. But at some point you need to promote it to production-grade. With 3 lines of code, you can get from a notebook to a central source of truth with code, data, models, and experiments which you can share with team members." /> <meta name="twitter:url" content="https://dagshub.com/blog/notebook-to-production-machine-learning/" /> <meta name="twitter:image" content="https://dagshub.com/blog/content/images/2023/11/DALL-E-MLflow-Announcement--1-..png" /> <meta name="twitter:label1" content="Written by" /> <meta name="twitter:data1" content="Dean Pleban" /> <meta name="twitter:label2" content="Filed under" /> <meta name="twitter:data2" content="MLOps, Google Colab, Tutorials & Webinars" /> <meta name="twitter:site" content="@TheRealDAGsHub" /> <meta name="twitter:creator" content="@DeanPlbn" /> <meta property="og:image:width" content="1792" /> <meta property="og:image:height" content="1024" /> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "publisher": { "@type": "Organization", "name": "DagsHub Blog", "url": "https://dagshub.com/blog/", "logo": { "@type": "ImageObject", "url": "https://dagshub.com/blog/content/images/2023/12/Dagshub-favicon.svg" } }, "author": { "@type": "Person", "name": "Dean Pleban", "image": { "@type": "ImageObject", "url": "https://dagshub.com/blog/content/images/2020/08/deanprofile.jpg", "width": 1750, "height": 1750 }, "url": "https://dagshub.com/blog/author/dean/", "sameAs": [ "https://DAGsHub.com", "https://twitter.com/DeanPlbn" ] }, "headline": "From Notebook to Production-Ready Machine Learning Project", "url": "https://dagshub.com/blog/notebook-to-production-machine-learning/", "datePublished": "2023-09-14T15:03:23.000Z", "dateModified": "2023-11-16T08:20:31.000Z", "image": { "@type": "ImageObject", "url": "https://dagshub.com/blog/content/images/2023/11/DALL-E-MLflow-Announcement--1-..png", "width": 1792, "height": 1024 }, "keywords": "MLOps, Google Colab, Tutorials & Webinars", "description": "Every machine learning project starts simple – that’s a good thing. But at some point you need to promote it to production-grade. With 3 lines of code, you can get from a notebook to a central source of truth with code, data, models, and experiments which you can share with team members.", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://dagshub.com/blog/" } } </script> <meta name="generator" content="Ghost 3.42" /> <link rel="alternate" type="application/rss+xml" title="DagsHub Blog" href="https://dagshub.com/blog/rss/" /> <script> const ghostSearchApiKey = '44bb83122f80c74bc070982817' </script> <!-- prism.js syntax highlighting --> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.21.0/themes/prism.min.css" /> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.21.0/themes/prism-tomorrow.min.css" /> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PGHTMDN');</script> <!-- End Google Tag Manager --> <style> pre[class*="language-"] { margin: 0 0 1.5em !important; } code { text-shadow: none !important; } .token.operator { background: none !important; } :not(pre) > code[class*="language-"], pre[class*="language-"] { background: #20262E !important; } html { --aside-background-color: #f1f1ef; } html[data-theme='dark'] { --aside-background-color: #103037; } aside { padding: 1em; margin-bottom: 30px; font-size: 1.25em; line-height: 1.6em; background-color: var(--aside-background-color); border-radius: 10px; display: flex; } aside div.aside-emoji { display: block; } aside div.aside-text { display: flex; flex-direction: column; margin-left: 8px; } pre[class*=language-] { border-radius: 10px; } </style> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/themes/prism-tomorrow.min.css" integrity="sha512-vswe+cgvic/XBoF1OcM/TeJ2FW0OofqAVdCZiEYkd6dwGXthvkSFWOoGGJgS2CW70VK5dQM5Oh+7ne47s74VTg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <style> html { --aside-background-color: #f1f1ef; } html[data-theme='dark'] { --aside-background-color: #103037; } aside { padding: 1em; margin-bottom: 30px; font-size: 1.25em; line-height: 1.6em; background-color: var(--aside-background-color); border-radius: 10px; display: flex; } aside div.aside-emoji { display: block; } aside div.aside-text { display: flex; flex-direction: column; margin-left: 8px; } pre[class*=language-] { border-radius: 10px; } .l-post-content img { border: 5px solid #0B1F24; border-radius: 10px } </style> <script> // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat const ghostHost = "https://dagshub.com/blog" // @license-end </script> </head> <body class="post-template tag-mlops tag-google-colab tag-tutorials"> <header class="site-head site-head__bacground" role="banner" itemscope="itemscope" itemtype="http://schema.org/WPHeader"> <div class="site-head__wrap"> <div class="container container-lg"> <div class="site-head__frame"> <!-- Custom logo and site title. --> <div class="site-logo"> <a href="https://dagshub.com/" class="custom-logo-link" rel="home" aria-current="page"><img width="143" height="40" src="https://dagshub.com/wp-content/uploads/2024/04/dagshab.svg" class="custom-logo" alt="DagsHub" decoding="async"></a> <span class="screen-reader-text" itemprop="name">DagsHub</span> </div> <button class="nav-opener" aria-label="nav opener" onClick="this.parentNode.parentNode.parentNode.parentNode.classList.toggle('nav-active')"><span><em>Menu</em></span></button> <div class="site-head__holder"> <!-- Main menu. --> <nav class="site-head__nav js-header-menu-item" role="navigation" itemscope="itemscope" itemtype="http://schema.org/SiteNavigationElement"> <ul class="menu head-nav main-header-menu"><li id="menu-item-2351" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351" aria-haspopup="true"> <div class="menu-item__link menu-item__link--title">Resources</div> <button class="dropdown-toggle" aria-expanded="false" onClick="this.classList.toggle('toggled-on');this.parentNode.classList.toggle('submenu-open')"><span class="screen-readers">Expand child menu</span><span class="opener-arrow"><svg class="svg-icon icon-chevron-down" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-chevron-down'></use></svg></span></button> <ul class="sub-menu level0"> <li id="menu-item-2357" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2357"> <a href="https://dagshub.com/blog/" class="menu-item__link"><span class="menu-item__text">Blog</span></a> </li> <li id="menu-item-2358" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2358"> <a href="https://dagshub.com/datasets/" class="menu-item__link"><span class="menu-item__text">Datasets</span></a> </li> <li id="menu-item-2359" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2359"> <a href="https://dagshub.com/glossary/" class="menu-item__link"><span class="menu-item__text">Glossary</span></a> </li> <li id="menu-item-2360" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2360"> <a href="https://dagshub.com/blog/tag/tutorials/" class="menu-item__link"><span class="menu-item__text">Tutorial & Webinars</span></a> </li> </ul> </li> <li id="menu-item-2352" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2352"> <a href="https://dagshub.com/docs" class="menu-item__link"><span class="menu-item__text">Docs</span></a> </li> <li id="menu-item-2353" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2353" aria-haspopup="true"> <div class="menu-item__link menu-item__link--title">Product</div> <button class="dropdown-toggle" aria-expanded="false" onClick="this.classList.toggle('toggled-on');this.parentNode.classList.toggle('submenu-open')"><span class="screen-readers">Expand child menu</span><span class="opener-arrow"><svg class="svg-icon icon-chevron-down" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-chevron-down'></use></svg></span></button> <ul class="sub-menu level0"> <li id="menu-item-2361" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2361"> <a href="https://dagshub.com/data-engine/" class="menu-item__link"><span class="menu-item__text"><span class="icon-image"><svg class="svg-icon icon-data-engine" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-data-engine'></use></svg></span><span class="menu-text-wrapper"><span class="menu-text">Data engine</span><span class="menu-description">Manage your unstructured data</span></span></span></a> </li> <li id="menu-item-2362" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2362"> <a href="https://dagshub.com/use-cases/llm/" class="menu-item__link"><span class="menu-item__text"><span class="icon-image"><svg class="svg-icon icon-llms" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-llms'></use></svg></span><span class="menu-text-wrapper"><span class="menu-text">LLMs</span><span class="menu-description">Build LLM projects quickly</span></span></span></a> </li> <li id="menu-item-2363" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2363"> <a href="https://dagshub.com/product/" class="menu-item__link"><span class="menu-item__text"><span class="icon-image"><svg class="svg-icon icon-linear-search" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-linear-search'></use></svg></span><span class="menu-text-wrapper"><span class="menu-text">Overview</span><span class="menu-description">Organize your entire project under one roof</span></span></span></a> </li> <li id="menu-item-2364" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2364"> <a href="https://dagshub.com/enterprise/" class="menu-item__link"><span class="menu-item__text"><span class="icon-image"><svg class="svg-icon icon-enterprise" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-enterprise'></use></svg></span><span class="menu-text-wrapper"><span class="menu-text">Enterprise</span><span class="menu-description">A single source of truth for your organization</span></span></span></a> </li> </ul> </li> <li id="menu-item-2354" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2354"> <a href="/enterprise/" class="menu-item__link"><span class="menu-item__text">Enterprise</span></a> </li> <li id="menu-item-2355" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2355"> <a href="https://dagshub.com/pricing" class="menu-item__link"><span class="menu-item__text">Pricing</span></a> </li> <li id="menu-item-2356" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2356" aria-haspopup="true"> <div class="menu-item__link menu-item__link--title">Company</div> <button class="dropdown-toggle" aria-expanded="false" onClick="this.classList.toggle('toggled-on');this.parentNode.classList.toggle('submenu-open')"><span class="screen-readers">Expand child menu</span><span class="opener-arrow"><svg class="svg-icon icon-chevron-down" width="20" height="20"><use xlink:href='/blog/assets/images/icons.svg?v=d16ee3eaf3#icon-chevron-down'></use></svg></span></button> <ul class="sub-menu level0"> <li id="menu-item-2365" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2365"> <a href="https://dagshub.com/about" class="menu-item__link"><span class="menu-item__text">About</span></a> </li> <li id="menu-item-2366" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2366"> <a href="https://dagshub.com/careers" class="menu-item__link"><span class="menu-item__text">Careers</span></a> </li> <li id="menu-item-2367" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2367"> <a href="https://dagshub.com/contact-us/" class="menu-item__link"><span class="menu-item__text">Contact us</span></a> </li> </ul> </li> </ul> </nav> <div class="site-head__tools"> <ul class="menu head-nav main-header-menu"><li id="menu-item-2372" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2372"><a rel="Navbar_Login_Clicked" href="https://dagshub.com/user/login" class="menu-item__link" data-analytics-event="Navbar_Login_Clicked">Log in</a></li> <li id="menu-item-2389" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2389"><a rel="Navbar_BookADemo_Clicked" href="https://dagshub.com/book-a-demo/" class="menu-item__button btn btn--white-outline" data-analytics-event="Navbar_BookADemo_Clicked"><span class="btn__text">Book a demo</span></a></li> <li id="menu-item-2370" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2370"><a rel="Navbar_StartFree_Clicked" href="https://dagshub.com/user/sign_up" class="menu-item__button btn btn--primary" data-analytics-event="Navbar_StartFree_Clicked"><span class="btn__text">Start Free</span></a></li> </ul> </div> </div> </div> </div> </div> </header> <main class="main-wrap"> <article> <div class="l-content in-post"> <div class="l-wrapper in-post js-aos-wrapper" data-aos="fade-up" data-aos-delay="300"> <div class="l-post-content js-progress-content"> <header class="m-heading"> <h1 class="m-heading__title in-post">3 Lines of Code: Notebook to Production-Ready Machine Learning Project</h1> <ul class="details"> <li> <div style="background-image: url(/blog/content/images/size/w100/2020/08/deanprofile.jpg);"></div> <a href="https://dagshub.com/blog/author/dean/">Dean Pleban</a> </li> <li>5 min read</li> <li>a year ago</li> </ul> <p class="bio">Co-Founder & CEO of DAGsHub. Building the home for data science collaboration. Interested in machine learning, physics and philosophy. Join https://DAGsHub.com | Co-Founder & CEO</p> <img src="https://dagshub.com/blog/content/images/2023/11/DALL-E-MLflow-Announcement--1-..png" alt="" class="featured" /> </header> <div class="p-container"> <div class="p-sidebar"> <strong>About DagsHub</strong> <a> <img src="/blog/assets/images/video-placeholder.png?v=d16ee3eaf3" alt="" /> <svg class="svg-icon icon-play-color" width="100" height="100" "=""><use xlink:href="../assets/images/play-icon.svg#icon-play-color"></use></svg> </a> <p>DagsHub simplifies the process of building better models and managing unstructured data projects by consolidating data, code, experiments, and models in one place.</p> <hr /> <strong>Table of Contents</strong> <ul></ul> <b>Share This Article</b> <a href="https://www.facebook.com/sharer/sharer.php?u=https://dagshub.com/blog/notebook-to-production-machine-learning/" onclick="window.open(this.href, 'pop', 'width=500,height=570');return false;" class="m-icon-button filled in-share" target="_blank" rel="noopener" aria-label="Share on Facebook"> <span class="icon-facebook" aria-hidden="true"></span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://dagshub.com/blog/notebook-to-production-machine-learning/" onclick="window.open(this.href, 'share-linkedin', 'width=500,height=570');return false;" class="m-icon-button filled in-share" target="_blank" rel="noopener" aria-label="Share on LinkedIn"> <span class="icon-linkedin" aria-hidden="true"></span> </a> <a href="https://twitter.com/intent/tweet?text=3%20Lines%20of%20Code%3A%20Notebook%20to%20Production-Ready%20Machine%20Learning%20Project&url=https://dagshub.com/blog/notebook-to-production-machine-learning/" onclick="window.open(this.href, 'share-twitter', 'width=500,height=605');return false;" class="m-icon-button filled in-share" target="_blank" rel="noopener" aria-label="Share on Twitter"> <span class="icon-twitter" aria-hidden="true"></span> </a> </div> <div class="p-content"> <h2 id="tl-dr">TL;DR</h2><p>Every machine learning project starts simple – that’s a good thing. But at some point, you need to promote it to production-grade - and that transition should be as easy and as seamless as possible. Let’s see how we can boil it down to 3 lines of code, with DagsHub, and get from a notebook to a central source of truth including your code, data, models, and experiments which you can share with team members.</p><h2 id="machine-learning-has-scrappy-beginnings-it-s-a-feature-not-a-bug-">Machine Learning Has Scrappy Beginnings – It’s a Feature, Not a Bug!</h2><p>You’ve just started working on a new machine learning project. You want to show results ASAP, so other stakeholders in your organization understand the business value of the model and you can continue working on this project and build a model into some real-world machine learning application.</p><p>Starting scrappy is the right way to go – this usually means a notebook. If you can, you might even ask for a non-sensitive data sample and use Colab since it provides powerful compute resources and is easily shareable. Your goal is to arrive at some result as fast as you can, so you don’t want to get bogged down in unnecessary processes and tooling – after all, if this direction is a dead end, you might throw everything out the window, so all that infrastructure and process investment would be a waste.</p><p>Throughout the building process, you might extract some code into functions, for more convenient use, and even commit it to the team’s machine learning utility repo, but a lot of the meat will remain in the notebook itself.</p><p>A few days or weeks later, you show your company’s stakeholders the results, and they’re excited! Let’s get this to production ASAP! You know this means the project will be more long-term, and that requires more rigorous processes and tooling to make sure that the data, models, experiments, and code are tracked, work can be split and shared between team members, and the project has a central source of truth.</p><p>Now that you’ve spent so much time in the prototyping phase, that’s a non-trivial amount of work. So you put it off for later. You need to get to production. Processes can come later. But what if that didn’t need to be the case? What if you could organize your project and get all those benefits with just 3 lines of code? Let’s see how you can do this with DagsHub so that you never need to compromise again!</p><figure class="kg-card kg-image-card"><img src="https://dagshub.com/blog/content/images/2023/09/processed_image--7-.png" class="kg-image" alt srcset="https://dagshub.com/blog/content/images/size/w600/2023/09/processed_image--7-.png 600w, https://dagshub.com/blog/content/images/size/w1000/2023/09/processed_image--7-.png 1000w, https://dagshub.com/blog/content/images/2023/09/processed_image--7-.png 1024w" sizes="(min-width: 720px) 720px"></figure><h2 id="what-is-dagshub">What is DagsHub?</h2><p>If you’re already familiar with DagsHub, skip this part and get to the juice of the next section – if not, read on.</p><p>DagsHub is a platform for managing and organizing machine learning projects. It provides a central source of truth for your code, data, models, experiments and more, and enables you to collaborate more effectively and get your models to production. It is based on popular open source tools like Git, MLflow, DVC, and Label Studio so that you aren’t reinventing the wheel, but use agreed-upon formats and tools for everything.</p><h2 id="3-lines-of-code-to-upgrade-your-machine-learning-project">3 Lines of Code to Upgrade Your Machine Learning Project</h2><p>Starting from a Colab (or local) notebook, let’s see how you can do the following with 3 lines of code:</p><ol><li>Track Data</li><li>Track Experiments</li><li>Track Notebooks + Code</li></ol><p>The prerequisites to these three lines are simply installing the DagsHub client and creating a DagsHub repo.</p><p>To install the client, simply:</p><pre><code class="language-bash">pip install dagshub </code></pre><p>And don’t forget to <code>import dagshub</code>.</p><p>Then, to create a repo, <a href="https://dagshub.com/user/sign_up?redirect_to=">sign up to DagsHub</a> and click the “Create” button in the top right of the page.</p><p>You can either create a blank repository, use a project template, <strong>OR</strong> if you already have a code repo you’d like to connect, connect an existing repo to DagsHub – with the integrations to all popular Git providers, you’ll be able to add data, experiments, and notebooks to existing repos (this will create Git commits where necessary).</p><h3 id="1-track-data">1. Track Data</h3><p>Let’s assume that in scrappy mode, you just got a CSV, or a bunch of image files that you uploaded to GDrive, into a folder named <code>data</code>, and the drive is mounted to your Colab notebook. The first line of code we’ll use is:</p><pre><code class="language-python">dagshub.upload_files(repo="<repo_owner>/<repo_name>", local_path="drive/MyDrive/data", remote_path="data") </code></pre><p>If you have your data in a different folder, just change the <code>local_path=</code> argument.</p><p>✅ Phase 1 DONE! You should now see a folder named data with your data file on DagsHub.</p><h3 id="2-track-experiments">2. Track Experiments</h3><p>For experiment tracking, we'll use MLflow – the most popular open source experiment tracking tool. DagsHub is integrated with MLflow, which means that every project comes with a fully configured MLflow server, ready to log experiments and models. <em>Assuming your code uses MLflow for experiment tracking</em>, you'll only need one line to track the experiment and its model to DagsHub.</p><p>We’ll use the following:</p><pre><code class="language-python">dagshub.init(repo_owner="<repo_owner>", repo_name="<repo_name>") </code></pre><p>✅ Phase 2 DONE! If you go to your experiment table in your repository, located at <code>https://dagshub.com/<repo_owner>/<repo_name>/experiments/</code> you’ll be able to see your first experiment. In the MLflow UI associated with your repository (located at <code>https://dagshub.com/<repo_owner>/<repo_name>.mlflow</code>, you’ll also be able to see the actual model logged.</p><!--kg-card-begin: html--><aside> <div class="aside-emoji">💡</div> <div class="aside-text"><div> <p><strong>Note:</strong> The easiest way to instrument your code with MLflow is to use the autolog API which supports most standard ML libraries, e.g. in the example of Scikit Learn, the code you need is:</p><pre class="language-python"><code style="font-size:0.8em" class="language-python">with mlflow.start_run(run_name="my_run"): mlflow.sklearn.autolog() # Add code to train your Sklearn model ... </code></pre> </div> </div> </aside><!--kg-card-end: html--><h3 id="3-track-code-notebook">3. Track Code/Notebook</h3><p>If you’re working locally, you can use the same line of code from “1. Track Data” to upload your code files too.</p><pre><code class="language-python">dagshub.upload_files(repo="<repo_owner>/<repo_name>", local_path="path/to/notebook.ipynb", remote_path="notebook_to_production.ipynb") </code></pre><p>However, if you’re in Google Colab, that might be more of an involved process (you’d need to upload it’s save location in GDrive, which might be harder to find). That’s why we created a dedicated <code>save_notebook</code> function, which will just save the notebook to DagsHub easily.</p><pre><code class="language-python">dagshub.notebook.save_notebook(repo="<repo_owner>/<repo_name>") </code></pre><p>✅ Phase 3 DONE! You’ll now see your notebook in your DagsHub project. Which concludes are 3-line adventure.</p><h2 id="for-your-next-machine-learning-project">For Your Next Machine Learning Project</h2><p>To make sure my promises hold true, I created a sample project that goes through these steps. <a href="https://dagshub.com/Dean/my_first_repo">Find it on DagsHub</a></p><p>Now that we’ve seen how easy it is to organize a machine learning project and make it production-ready, Next time you’re working on a machine learning project, you won’t need to worry about organizing it from the get go. You can move fast and get initial results, then easily go through this process to organize it and share it with other stakeholders and collaborators.</p><figure class="kg-card kg-image-card"><img src="https://dagshub.com/blog/content/images/2023/09/processed_image--6--1.png" class="kg-image" alt srcset="https://dagshub.com/blog/content/images/size/w600/2023/09/processed_image--6--1.png 600w, https://dagshub.com/blog/content/images/2023/09/processed_image--6--1.png 859w" sizes="(min-width: 720px) 720px"></figure><p>Good luck building!</p> </div> </div> </div> </div> </div> <section class="m-recommended"> <div class="l-wrapper in-recommended"> <h3 class="m-section-title in-recommended">Recommended for you</h3> <div class="m-recommended-articles"> <div class="m-recommended-slider glide js-recommended-slider"> <div class="glide__track" data-glide-el="track"> <div class="glide__slides"> <div class="m-recommended-slider__item glide__slide"> <article class="m-article-card post tag-active-learning tag-machine-learning-workflow tag-collaboration tag-data-labeling tag-data-science tag-machine-learning tag-machine-learning-production tag-mlops"> <div class="m-article-card__picture"> <a href="/blog/active-learning-your-way-to-better-models/" class="m-article-card__picture-link" aria-hidden="true" tabindex="-1"></a> <img class="m-article-card__picture-background" src="/blog/content/images/size/w600/2022/07/john-cameron-w1K9Ug_pjXw-unsplash.jpg" loading="lazy" alt=""> <a href="https://dagshub.com/blog/author/yono/" class="m-article-card__author js-tooltip" aria-label="Yono Mittlefehldt" data-tippy-content="Posted by Yono Mittlefehldt "> <div style="background-image: url(/blog/content/images/size/w100/2022/06/Yono4-color.jpg);"></div> </a> </div> <div class="m-article-card__info"> <a href="https://dagshub.com/blog/tag/active-learning/" class="m-article-card__tag">Active Learning</a> <a href="/blog/active-learning-your-way-to-better-models/" class="m-article-card__info-link" aria-label="Active Learning Your Way to Better Models"> <div> <h2 class="m-article-card__title js-article-card-title " title="Active Learning Your Way to Better Models"> Active Learning Your Way to Better Models </h2> </div> <div class="m-article-card__timestamp"> <span>2 years ago</span> <span>•</span> <span>10 min read</span> </div> </a> </div> </article> </div> <div class="m-recommended-slider__item glide__slide"> <article class="m-article-card post tag-computer-vision tag-data-streaming tag-mlops tag-data-version-control tag-direct-data-access tag-open-source-datasets tag-data-management"> <div class="m-article-card__picture"> <a href="/blog/train-emotion-recognition-model/" class="m-article-card__picture-link" aria-hidden="true" tabindex="-1"></a> <img class="m-article-card__picture-background" src="/blog/content/images/size/w600/2023/06/priscilla-du-preez-dOnEFhQ7ojs-unsplash.jpg" loading="lazy" alt=""> <a href="https://dagshub.com/blog/author/gaurav/" class="m-article-card__author js-tooltip" aria-label="Gaurav Mohan" data-tippy-content="Posted by Gaurav Mohan "> <div style="background-image: url(/blog/content/images/size/w100/2023/06/profile.JPG);"></div> </a> </div> <div class="m-article-card__info"> <a href="https://dagshub.com/blog/tag/computer-vision/" class="m-article-card__tag">Computer Vision</a> <a href="/blog/train-emotion-recognition-model/" class="m-article-card__info-link" aria-label="Train An Emotion Recognition Model Using Open Source MLOps Tools"> <div> <h2 class="m-article-card__title js-article-card-title " title="Train An Emotion Recognition Model Using Open Source MLOps Tools"> Train An Emotion Recognition Model Using Open Source MLOps Tools </h2> </div> <div class="m-article-card__timestamp"> <span>a year ago</span> <span>•</span> <span>11 min read</span> </div> </a> </div> </article> </div> <div class="m-recommended-slider__item glide__slide"> <article class="m-article-card post tag-ci-cd tag-machine-learning-workflow tag-github tag-machine-learning-production tag-streamlit tag-tutorials tag-mlops"> <div class="m-article-card__picture"> <a href="/blog/ci-cd-for-machine-learning-test-and-and-deploy-your-ml-model-with-github-actions/" class="m-article-card__picture-link" aria-hidden="true" tabindex="-1"></a> <img class="m-article-card__picture-background" src="/blog/content/images/size/w600/2022/06/james-harrison-vpOeXr5wmR4-unsplash.jpg" loading="lazy" alt=""> <a href="https://dagshub.com/blog/author/khuyen/" class="m-article-card__author js-tooltip" aria-label="Khuyen Tran" data-tippy-content="Posted by Khuyen Tran "> <div style="background-image: url(//www.gravatar.com/avatar/cdfdeccf7cd7a1e8a70481674d6a6650?s=250&d=mm&r=x);"></div> </a> </div> <div class="m-article-card__info"> <a href="https://dagshub.com/blog/tag/ci-cd/" class="m-article-card__tag">CI/CD</a> <a href="/blog/ci-cd-for-machine-learning-test-and-and-deploy-your-ml-model-with-github-actions/" class="m-article-card__info-link" aria-label="CI/CD for Machine Learning: Test and Deploy Your ML Model with GitHub Actions"> <div> <h2 class="m-article-card__title js-article-card-title " title="CI/CD for Machine Learning: Test and Deploy Your ML Model with GitHub Actions"> CI/CD for Machine Learning: Test and Deploy Your ML Model with GitHub Actions </h2> </div> <div class="m-article-card__timestamp"> <span>2 years ago</span> <span>•</span> <span>9 min read</span> </div> </a> </div> </article> </div> </div> </div> <div data-glide-el="controls" class="glide__arrows js-controls"> <button data-glide-dir="<" class="m-icon-button filled in-recommended-articles glide-prev" aria-label="Previous"> <span class="icon-arrow-left" aria-hidden="true"></span> </button> <button data-glide-dir=">" class="m-icon-button filled in-recommended-articles glide-next" aria-label="Next"> <span class="icon-arrow-right" aria-hidden="true"></span> </button> </div> </div> </div> </div> </section> </div> </article> </main> <div class="video-modal"> <div class="video-modal-container"> <div class="video-modal-iframe"> <button><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M20 20L4 4m16 0L4 20"></path></svg></button> <div> </div> </div> </div> </div> <div class="m-search js-search" role="dialog" aria-modal="true" aria-label="Search"> <button class="m-icon-button outlined as-close-search js-close-search" aria-label="Close search"> <span class="icon-close" aria-hidden="true"></span> </button> <div class="m-search__content"> <form class="m-search__form"> <div class="pos-relative"> <span class="icon-search m-search-icon" aria-hidden="true"></span> <label for="search-input" class="sr-only"> Type to search </label> <input id="search-input" type="text" class="m-input in-search js-input-search" placeholder="Type to search"> </div> </form> <div class="js-search-results hide"></div> <p class="m-not-found align-center hide js-no-results"> No results for your search, please try with something else. </p> </div> </div> <div class="site-pre-footer"> <div class="container"> <div class="content-wrapper"> <h3 class="title">Manage your unstructured data. Scale to millions of experiments today.</h3> <p class="description">See how leading data scientists manage their data.</p> <div class="button-group"> <a href="/book-a-demo/" target="" class="btn btn__lg btn--white-outline" data-analytics-event="Footer_BookADemo_Clicked">Book A Demo</a> <a href="https://dagshub.com/user/sign_up" target="" class="btn btn__lg btn--primary" data-analytics-event="Footer_StartFree_Clicked">Start Free</a> </div> </div> </div> </div> <div class="site-footer"> <div class="container"> <div class="site-footer__wrap"> <div class="site-footer__logo"> <div class="site-logo"> <a href="https://dagshub.com/" class="custom-logo-link" rel="home" aria-current="page"><img width="143" height="40" src="https://dagshub.com/wp-content/uploads/2024/04/dagshab.svg" class="custom-logo" alt="DagsHub" decoding="async"></a> </div> <div class="site-footer__social"> <!-- <h3 class="wdiget-title">Follow us</h3> --> <ul class="social-list"> <li class="social-list__item"> <a href="https://twitter.com/TheRealDAGsHub" target="_blank" class="social-list__link"><svg class="svg-icon icon-twitter" width="18" height="18" "=""><use xlink:href="/assets/images/icons.svg?ver=1717065551#icon-twitter"></use></svg><span class="screen-reader-text"></span></a> </li> <li class="social-list__item"> <a href="https://www.linkedin.com/company/dagshub" target="_blank" class="social-list__link"><svg class="svg-icon icon-linkedin" width="18" height="18" "=""><use xlink:href="/assets/images/icons.svg?ver=1717065551#icon-linkedin"></use></svg><span class="screen-reader-text"></span></a> </li> <li class="social-list__item"> <a href="https://youtube.com/c/dagshub" target="_blank" class="social-list__link"><svg class="svg-icon icon-youtube" width="18" height="18" "=""><use xlink:href="/assets/images/icons.svg?ver=1717065551#icon-youtube"></use></svg><span class="screen-reader-text"></span></a> </li> <li class="social-list__item"> <a href="https://discord.com/invite/9gU36Y6" target="_blank" class="social-list__link"><svg class="svg-icon icon-discord" width="18" height="18" "=""><use xlink:href="/assets/images/icons.svg?ver=1717065551#icon-discord"></use></svg><span class="screen-reader-text"></span></a> </li> </ul> </div> <img src="https://dagshub.com/wp-content/uploads/2024/04/image-54.png" alt="" class="bottom_logo"> </div> <div class="site-footer__frame"> <div class="site-footer__holder"> <div class="site-footer__nav"> <ul id="menu-pro-footer-menu" class="footer-nav"><li id="menu-item-14" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-14"><a>Resources</a> <ul class="sub-menu"> <li id="menu-item-15" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-15"><a href="https://dagshub.com/docs">Docs</a></li> <li id="menu-item-16" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-16"><a href="https://dagshub.com/blog">Blog</a></li> <li id="menu-item-101" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-101"><a href="/datasets/">Datasets</a></li> <li id="menu-item-1586" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1586"><a href="/glossary/">Glossary</a></li> <li id="menu-item-2247" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2247"><a href="https://dagshub.com/blog/tag/case-study/">Case Studies</a></li> <li id="menu-item-2244" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2244"><a href="https://dagshub.com/blog/tag/tutorials/">Tutorials & Webinars</a></li> </ul> </li> <li id="menu-item-1708" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-1708"><a>Product</a> <ul class="sub-menu"> <li id="menu-item-2076" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2076"><a href="https://dagshub.com/data-engine/">Data Engine</a></li> <li id="menu-item-2250" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2250"><a href="https://dagshub.com/use-cases/llm/">LLMs</a></li> <li id="menu-item-1463" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1463"><a href="https://dagshub.com/product/">Platform</a></li> <li id="menu-item-1711" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1711"><a href="https://dagshub.com/enterprise/">Enterprise</a></li> <li id="menu-item-2464" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464"><a href="https://dagshub.com/pricing">Pricing</a></li> </ul> </li> <li id="menu-item-2347" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2347"><a>Company</a> <ul class="sub-menu"> <li id="menu-item-2348" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2348"><a href="https://dagshub.com/about">About</a></li> <li id="menu-item-2349" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2349"><a href="https://dagshub.com/careers">Careers</a></li> <li id="menu-item-2350" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2350"><a href="https://dagshub.com/contact-us/">Contact us</a></li> </ul> </li> <li id="menu-item-18" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-18"><a>Community</a> <ul class="sub-menu"> <li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-17"><a href="https://dagshub.com/explore/repos">Explore</a></li> </ul> </li> </ul> </div> <div class="site-footer__info"> </div> </div> </div> <div class="footer_subcscription"> <div class="wpcf7 js" id="wpcf7-f2374-o1" lang="en-US" dir="ltr"> <div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div> <form action="/#wpcf7-f2374-o1" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init"> <div style="display: none;"> <input type="hidden" name="_wpcf7" value="2374"> <input type="hidden" name="_wpcf7_version" value="5.8.4"> <input type="hidden" name="_wpcf7_locale" value="en_US"> <input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f2374-o1"> <input type="hidden" name="_wpcf7_container_post" value="0"> <input type="hidden" name="_wpcf7_posted_data_hash" value=""> <input type="hidden" name="_wpcf7_recaptcha_response" value="03AFcWeA4uj_aRc8aqV6-AMa3S2nwbXoJUrg1L40giuqdchHOq_JcNlanE7TtT7mEAnRdQPseB8ahQoj1M1z7ruAH-lsUT-wOx3SmVYjszVfDoGIs2QlJWN7xgWlQEdD43woDSYmlNLXCC9XsBAMdMRiPtmY6-sjaVVEReUmcys9Sq5_uL0aNXxKkoL3SZvQZTW5sC0JO2eMikeoDobVCGpC3YlJG-nYT3mFaNjCxn7i-p2M_K7cFG9PUYpJNEqO-LOcW906Nf8sb1MKDAGWMhMBapyPxryKux6euldj2DhALMUW7jmNwhpaK9h7QaLgnbYy2JEo4lvcrQWQ7YnFV-DePKnnlYYudX-_wDbOxFf53Jo2SZkfKfFl3bYXDDalTLyp3hkCzI8Z69putSHsAeDDccflIRKq2qSWdGbOB1VdDwFsFz5oLCDU956C52phb_B36_22QdpFW_9qUiEfsFE_dv6cFop-AcEZ0Je2PXXM8iEK888LKoLi6HkH0aD8geB18vSxfJbr8RIZG1XNVpi1PuZxBqa_USXGy4NOWWCfmvfyo5SlZnbgnIiGfoWmFnvq0JZ6SDP0ZWxOgIIXeqDbyQ6uh942-NFho6peSdmLofXeGQDQIttjnDZM7D497GVTXhEpLHjeLIRb-FkyqiFmJM20aNEmi4zqA0r45ogEBcH24XkVWHtzK6b_owMEemE0KAeEkvJVa-32W1606ZooU0cxM3A6oCSNyF56r8XOW4_GsUxB1GXkW9M5Pd0Rktg2dREMTbYoyl9j541U-_skQQqx8JgRI8M8QEouZQwLPGKZkXZpNYWBGauNqyqUS5mu7nM9JP8g4Y-ad1ovzZSPxJplfCZxlJnMNz7GoRhN2ztM5eX1ZZwUxTEpLOHXIPUDL_VXBpisk9M_NeK1mSEmSNVO4gshOPBJs5ZSG2Uoy2sTAywrYyQahV7JIgC_V40RR49t_WyWAsdcjpVftgqyiEf6xZJmWHC8VXMRJMPfQpOkq0U8AZic0QVRfshiMiKpOHM-ZP7ux9kpzDBGZ4drQ2jJj2-rLlgHISsZ6k_wNHam7AZV1bOjbZUVg-nF5gp1IIZoBylMU1sqWhd_H0HdoKyb9QkE1-Vj_pSgGUnR4A-WbCA3xJXUow_zLekDj48e3WLxJVzyuhHCosBx-3WFi113Fu9-DXunhkTIpwv_uMjOF7DAIkbKSARbObhYj1SslmsakCY0fYgePE4DXJlNCTyFOyMneWtA3hENxzkZMb7QujC7z44YdzcHaNeX3ELEIYX2TSW8fqDv0_7eiNH5iC0lqRZ4TulmzeEjlqRW0HiNPn-Gerlw8FJljfGXW5_U0nOcXLb0N0_SREwHXIaOwO-zgVSBpCo_LlV7aMFDTqPFcmFX2B1rBIuHc8HVAmUWgolsEqJGbJUSQnsgGBQKSycBY7cq6cMSkx0F2dyaoP1Fs3ShKgTZ11LmLt2WEdjjaKdDM-bk7KoxmZxAC3D8EgdTibmxEHMhkKYGu0BxNUesCLaY5L_mRB3tXyKFYHxL9U46BslSwiBbYb-gMSQX-t9NQR4OGhv5shptwufrEPu-fOBv1LPXUid9sVDSEdRRNnhaV8BPHo9iHEuqv5NBfCbEID4-AOYrjsNFjv3dOuQPZe6soXmuh-Ic4A21KYNwOBvm0s9B6cbJT3OjVgy0rpdt_yFa5oa8EJNkNWEJzAw8l-SCVSKVp0OK7inEJHA3OMgYv784rZJxbPzvXy1NPyEqOT-T814_VN2pCFoO6NQ4XlHe7AdBn6Z_dTQipze62UHLrTrP3pwy9GWZIp4NeXdnCq4zLNpa339wKBT00WYNbL8e5qAYdm7g6ONP-rybJhtMeEXw5EZgq8ZvqmVgPEWQvZlQQnZbLtH6DpMnUeYGNwt9OS4xM0gMcnRxgLN8bG26-L-HGWcQJAboHP04ZDhOpx3iJfcFoKJy8JjVRDaXDbCaV4aLuS2G5IOPaUp9qYTRZOvtikUru6FVFcMzBHLZPbZg2l-Y1NfoFiuUDDhMuWdrcsUrHpgXva2CospJ2LWpjZnml4cROYxHfJQKNF6BlDAtgwInchv7wQfechNV-gPFKnCuR7raRbLuEGa6hAhx2PxyqSMeEtLyfe7Ur2V-TzMAvmbt7vFADS6brXDsc9OCJTLyV5UMT2EZ46Eqx5fXpXSc8pPgB5ZxL3vMTSQCfqjoUzBc3d_9OkOtrcHB7jc8HWgAE"> </div> <div class="footer-subcription-box"> <h3 class="title">ML Newsletter</h3> <p class="description">Top MLOps articles, case studies, events (and more) in your inbox every month</p> <div class="form-wrap c-form-subscription"> <div class="c-form-primary__field"><span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" autocomplete="email" aria-required="true" aria-invalid="false" placeholder="Email" value="" type="email" name="your-email"></span></div> <input class="wpcf7-form-control wpcf7-submit has-spinner" type="submit" value="Subscribe"><span class="wpcf7-spinner"></span> </div> <div id="customMessage" style="display: none;"> You're subscribed! Check your inbox for exciting updates! </div> </div><div class="wpcf7-response-output" aria-hidden="true"></div> </form> </div> </div> </div> <div class="site-footer__row"> <div class="site-footer__copy">©2024 © Copyright Dagshub 2023</div> </div> </div> <div class="elipse-background"></div> <div class="elipse-background right"></div> </div> <div class="m-alert success subscribe js-alert" data-notification="subscribe"> Great! You've successfully subscribed. <button class="m-alert__close js-notification-close" aria-label="Close"> <span class="icon-close"></span> </button> </div> <div class="m-alert success signup js-alert" data-notification="signup"> Great! Next, complete checkout for full access. <button class="m-alert__close js-notification-close" aria-label="Close"> <span class="icon-close"></span> </button> </div> <div class="m-alert success signin js-alert" data-notification="signin"> Welcome back! You've successfully signed in. <button class="m-alert__close js-notification-close" aria-label="Close"> <span class="icon-close"></span> </button> </div> <div class="m-alert success checkout js-alert" data-notification="checkout"> Success! Your account is fully activated, you now have access to all content. <button class="m-alert__close js-notification-close" aria-label="Close"> <span class="icon-close"></span> </button> </div> <script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver%2CPromise%2CArray.prototype.includes%2CString.prototype.endsWith%2CString.prototype.startsWith%2CObject.assign%2CNodeList.prototype.forEach"></script> <script defer src="/blog/assets/js/manifest.js?v=d16ee3eaf3"></script> <script defer src="/blog/assets/js/vendor/content-api.min.js?v=d16ee3eaf3"></script> <script defer src="/blog/assets/js/vendor.js?v=d16ee3eaf3"></script> <script defer src="/blog/assets/js/app.js?v=d16ee3eaf3"></script> <script defer src="/blog/assets/js/post.js?v=d16ee3eaf3"></script> <!-- script tag --> <!-- prism.js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.21.0/prism.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.21.0/components/prism-bash.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.21.0/components/prism-python.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.21.0/components/prism-r.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/components/prism-core.min.js" integrity="sha512-9khQRAUBYEJDCDVP2yw3LRUQvjJ0Pjx0EShmaQjcHa6AXiOv6qHQu9lCAIR8O+/D8FtaCoJ2c0Tf9Xo7hYH01Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/plugins/autoloader/prism-autoloader.min.js" integrity="sha512-fTl/qcO1VgvKtOMApX2PdZzkziyr2stM65GYPLGuYMnuMm1z2JLJG6XVU7C/mR+E7xBUqCivykuhlzfqxXBXbg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/components/prism-core.min.js" integrity="sha512-9khQRAUBYEJDCDVP2yw3LRUQvjJ0Pjx0EShmaQjcHa6AXiOv6qHQu9lCAIR8O+/D8FtaCoJ2c0Tf9Xo7hYH01Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/plugins/autoloader/prism-autoloader.min.js" integrity="sha512-fTl/qcO1VgvKtOMApX2PdZzkziyr2stM65GYPLGuYMnuMm1z2JLJG6XVU7C/mR+E7xBUqCivykuhlzfqxXBXbg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> </body> </html>