{"id":53097,"date":"2020-06-17T08:00:29","date_gmt":"2020-06-17T15:00:29","guid":{"rendered":"https:\/\/github.blog\/?p=53097"},"modified":"2021-12-20T14:49:07","modified_gmt":"2021-12-20T22:49:07","slug":"using-github-actions-for-mlops-data-science","status":"publish","type":"post","link":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/","title":{"rendered":"Using GitHub Actions for MLOps &amp; Data Science"},"content":{"rendered":"<h2 id=\"background\"><a class=\"heading-link\" href=\"#background\">Background<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/MLOps\">Machine Learning Operations<\/a> (or MLOps) enables Data Scientists to work in a more collaborative fashion, by providing testing, lineage, versioning, and historical information in an automated way.\u00a0 Because the landscape of MLOps is nascent, data scientists are often forced to implement these tools from scratch. The closely related discipline of <a href=\"https:\/\/en.wikipedia.org\/wiki\/DevOps\">DevOps<\/a> offers some help, however many <a href=\"https:\/\/github.com\/learn\/devops\">DevOps<\/a> tools are generic and require the implementation of \u201cML awareness\u201d through custom code. Furthermore, these platforms often require disparate tools that are decoupled from your code leading to poor debugging and reproducibility.<\/p>\n<p>To mitigate these concerns, we have created a series of GitHub Actions that integrate parts of the data science and machine learning workflow with a software development workflow. Furthermore, we provide components and examples that automate common tasks.<\/p>\n<h2 id=\"an-example-of-mlops-using-github-actions\"><a class=\"heading-link\" href=\"#an-example-of-mlops-using-github-actions\">An Example Of MLOps Using GitHub Actions<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>Consider the below example of how an experiment tracking system can be integrated with <a href=\"https:\/\/github.com\/features\/actions\">GitHub Actions<\/a> to enable MLOps. In the below example, we demonstrate how you can orchestrate a machine learning pipeline to run on the infrastructure of your choice, collect metrics using an experiment tracking system, and report the results back to a pull request.<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-53100\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/update-train-py.png?resize=1024%2C1125\" alt=\"Screenshot of a pull request\" width=\"1024\" height=\"1125\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/update-train-py.png?w=1506 1506w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/update-train-py.png?w=273 273w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/update-train-py.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/update-train-py.png?w=932 932w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/update-train-py.png?w=1398 1398w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p style=\"text-align: center\">A screenshot of this <a href=\"https:\/\/github.com\/machine-learning-apps\/actions-ml-cicd\/pull\/34\">pull request<\/a>.<\/p>\n<p>For a live demonstration of the above example, please see <a href=\"https:\/\/www.youtube.com\/watch?v=Ll50l3fsoYs&amp;feature=youtu.be\">this talk<\/a>.<\/p>\n<p>MLOps is not limited to the above example. Due to the composability of GitHub Actions, you can stack workflows in many ways that can help data scientists. Below is a concrete example of a very simple workflow that adds links to <a href=\"https:\/\/mybinder.org\/\">mybinder.org<\/a> on pull requests:<\/p>\n<pre><code class=\"code-none\">name: Binder\non: \n  pull_request:\n    types: [opened, reopened]\n\njobs:\n  Create-Binder-Badge:\n    runs-on: ubuntu-latest\n    steps:\n\n    - name: checkout pull request branch\n      uses: actions\/checkout@v2\n      with:\n        ref: ${{ github.event.pull_request.head.sha }}\n\n    - name: comment on PR with Binder link\n      uses: actions\/github-script@v1\n      with:\n        github-token: ${{secrets.GITHUB_TOKEN}}\n        script: |\n          var BRANCH_NAME = process.env.BRANCH_NAME;\n          github.issues.createComment({\n            issue_number: context.issue.number,\n            owner: context.repo.owner,\n            repo: context.repo.repo,\n            body: `[![Binder](https:\/\/mybinder.org\/badge_logo.svg)](https:\/\/mybinder.org\/v2\/gh\/${context.repo.owner}\/${context.repo.repo}\/${BRANCH_NAME}) <g-emoji fallback-src=\"https:\/\/github.githubassets.com\/images\/icons\/emoji\/unicode\/1f448.png?v8\" alias=\"point_left\">&#128072;<\/g-emoji> Launch a binder notebook on this branch`\n          }) \n      env:\n        BRANCH_NAME: ${{ github.event.pull_request.head.ref }}\n<\/code><\/pre>\n<p>When the above YAML file is added to a repository\u2019s <code>.github\/workflow<\/code> directory, pull requests can be annotated with a useful link as illustrated below [1]:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-53101\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/binder-demo.png?resize=1024%2C676\" alt=\"Screenshot showing Actions commenting with a Binder link\" width=\"1024\" height=\"676\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/binder-demo.png?w=1060 1060w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/binder-demo.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/binder-demo.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2020\/06\/binder-demo.png?w=1024 1024w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h2 id=\"a-growing-ecosystem-of-mlops-data-science-actions\"><a class=\"heading-link\" href=\"#a-growing-ecosystem-of-mlops-data-science-actions\">A Growing Ecosystem of MLOps &amp; Data Science Actions<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>There is a growing number of Actions available for machine learning ops and data science. Below are some concrete examples that are in use today, categorized by topic.<\/p>\n<p><b>Orchestrating Machine Learning Pipelines<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/marketplace\/actions\/submit-argo-workflows-from-github\">Submit Argo Workflows<\/a> &#8211; allows you to orchestrate machine learning pipelines that run on Kubernetes.<\/li>\n<li><a href=\"https:\/\/github.com\/marketplace\/actions\/kubeflow-compile-deploy-and-run\">Publish Kubeflow Pipelines to GKE<\/a> &#8211; Kubeflow Pipelines is a platform for building and deploying portable, scalable machine learning (ML) workflows based on Docker containers.<\/li>\n<\/ul>\n<p><b>Jupyter Notebooks<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/yaananth\/run-notebook\">Run parameterized Notebooks<\/a> &#8211; run notebooks programmatically using papermill.<\/li>\n<li><a href=\"https:\/\/github.com\/machine-learning-apps\/repo2docker-action\">Repo2Docker Action<\/a> &#8211; Automatically turn data-science repositories into Jupyter-enabled Docker containers using repo2docker.<\/li>\n<li><a href=\"https:\/\/github.com\/fastai\/fastpages\">fastai\/fastpages<\/a> &#8211; share information from Jupyter notebooks as blog posts using GitHub Actions &amp; GitHub Pages.<\/li>\n<\/ul>\n<p><b>End-To-End Workflow Orchestration<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/techcommunity.microsoft.com\/t5\/azure-ai\/using-github-actions-amp-azure-machine-learning-for-mlops\/ba-p\/1419027\">Examples<\/a> and <a href=\"https:\/\/github.com\/Azure\/aml-template\">templates<\/a> for utilizing Azure Machine Learning from GitHub Actions.<\/li>\n<\/ul>\n<p><b>Experiment Tracking<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/marketplace\/actions\/get-runs-from-weights-biases\">Fetch runs from Weights &amp; Biases<\/a> &#8211; W&amp;B is an experiment tracking and logging system for machine learning and is free for open-source projects.<\/li>\n<\/ul>\n<p>This is by no means an exhaustive list of the things you might want to automate with GitHub Actions with respect to data science and machine learning. \u00a0 You can follow our progress towards this goal <a href=\"http:\/\/mlops-github.com\/\">on our page<\/a>, which contains links to <a href=\"http:\/\/mlops-github.com\/blog\">blog posts<\/a>, <a href=\"http:\/\/mlops-github.com\/actions\">GitHub Actions<\/a>, <a href=\"http:\/\/mlops-github.com\/talks\">talks<\/a>, and <a href=\"http:\/\/mlops-github.com\/examples\">examples<\/a> that are relevant to this topic.<\/p>\n<p>We invite the community to create other Actions that might be useful for the community. Some ideas for getting started include data and model versioning, model deployment, data validation, as well as expanding upon some of the areas mentioned above. A great place to start is the documentation for GitHub Actions, particularly on how <a href=\"https:\/\/help.github.com\/en\/actions\/creating-actions\">to build Actions for the community<\/a>!<\/p>\n<h2 id=\"related-materials\"><a class=\"heading-link\" href=\"#related-materials\">Related Materials<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<ul>\n<li><a href=\"http:\/\/mlops-github.com\/\">Our page<\/a> with relevant materials.<\/li>\n<li>GitHub Actions official <a href=\"https:\/\/help.github.com\/en\/actions\">documentation<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/actions\/hello-world-docker-action\">Hello world Docker Action<\/a>: A template to demonstrate how to build a Docker Action for other people to use<\/li>\n<li>Using <a href=\"https:\/\/help.github.com\/en\/actions\/hosting-your-own-runners\/about-self-hosted-runners\">self-hosted runners<\/a>.<\/li>\n<li>This talk <a href=\"https:\/\/youtu.be\/S-kn4mmlxFU\">introducing Actions for data science<\/a>, including some live-coding!<\/li>\n<li><a href=\"https:\/\/github.com\/sdras\/awesome-actions\">Awesome Actions<\/a>: A curated list of interesting GitHub Actions by topic<\/li>\n<li>Useful GitHub Actions to know about when getting started:\n<ul>\n<li><a href=\"https:\/\/github.com\/actions\/checkout\">actions\/checkout<\/a>: Allows you to quickly clone the contents of your repository into your environment, which you often want to do. This does a number of other things such as automatically mount your repository\u2019s files into downstream Docker containers.<\/li>\n<li><a href=\"https:\/\/github.com\/mxschmitt\/action-tmate\">mxschmitt\/action-tmate<\/a>: Provides a way to debug Actions interactively. This uses port forwarding to give you a terminal in the browser that is connected to your Actions runner. Be careful not to expose sensitive information if you use this.<\/li>\n<li><a href=\"https:\/\/github.com\/actions\/github-script\">actions\/github-script<\/a>: Gives you a pre-authenticated <a href=\"https:\/\/octokit.github.io\/rest.js\/\">ocotokit.js<\/a> client that allows you to interact with the GitHub API to accomplish almost any task on GitHub automatically. Only <a href=\"https:\/\/help.github.com\/en\/actions\/configuring-and-managing-workflows\/authenticating-with-the-github_token#permissions-for-the-github_token\">these endpoints<\/a> are supported.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Footnotes:<\/p>\n<p>[1] This example workflow will not work on pull requests from forks.\u00a0 To enable this, you have to trigger a PR comment to occur via a <a href=\"https:\/\/help.github.com\/en\/actions\/reference\/events-that-trigger-workflows\">different event.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Background Machine Learning Operations (or MLOps) enables Data Scientists to work in a more collaborative fashion, by providing testing, lineage, versioning, and historical information in an automated way.\u00a0 Because the&hellip;<\/p>\n","protected":false},"author":1617,"featured_media":57452,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_gh_post_show_toc":"","_gh_post_is_no_robots":"","_gh_post_is_featured":"","_gh_post_is_excluded":"","_gh_post_is_unlisted":"","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"","_gh_post_sq_img_id":"","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"","_gh_post_recirc_hide":"","_gh_post_recirc_col_1":"","_gh_post_recirc_col_2":"","_gh_post_recirc_col_3":"","_gh_post_recirc_col_4":"","_featured_video":"","_gh_post_additional_query_params":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"_links_to":"","_links_to_target":""},"categories":[3293,3297],"tags":[122],"coauthors":[2334],"class_list":["post-53097","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-and-ml","category-machine-learning","tag-github-actions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.7 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Using GitHub Actions for MLOps &amp; Data Science - The GitHub Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using GitHub Actions for MLOps &amp; Data Science\" \/>\n<meta property=\"og:description\" content=\"Background Machine Learning Operations (or MLOps) enables Data Scientists to work in a more collaborative fashion, by providing testing, lineage, versioning, and historical information in an automated way.\u00a0 Because the&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-17T15:00:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-20T22:49:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Hamel Husain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hamel Husain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/\"},\"author\":{\"name\":\"Hamel Husain\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/d76319a9b865a8143ac6c5f20d95c568\"},\"headline\":\"Using GitHub Actions for MLOps &amp; Data Science\",\"datePublished\":\"2020-06-17T15:00:29+00:00\",\"dateModified\":\"2021-12-20T22:49:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/\"},\"wordCount\":770,\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"keywords\":[\"GitHub Actions\"],\"articleSection\":[\"AI &amp; ML\",\"Machine learning\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/\",\"name\":\"Using GitHub Actions for MLOps &amp; Data Science - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"datePublished\":\"2020-06-17T15:00:29+00:00\",\"dateModified\":\"2021-12-20T22:49:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/d76319a9b865a8143ac6c5f20d95c568\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/using-github-actions-for-mlops-data-science\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI &amp; ML\",\"item\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Machine learning\",\"item\":\"https:\\\/\\\/github.blog\\\/ai-and-ml\\\/machine-learning\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Using GitHub Actions for MLOps &amp; Data Science\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/d76319a9b865a8143ac6c5f20d95c568\",\"name\":\"Hamel Husain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8559ff90c3d3634c9323fe6712034231d4bc474d7c5e8e6b9ccb49482c892459?s=96&d=mm&r=g864feb2bdaca5e9252640651cf5a7686\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8559ff90c3d3634c9323fe6712034231d4bc474d7c5e8e6b9ccb49482c892459?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8559ff90c3d3634c9323fe6712034231d4bc474d7c5e8e6b9ccb49482c892459?s=96&d=mm&r=g\",\"caption\":\"Hamel Husain\"},\"sameAs\":[\"http:\\\/\\\/hamel.io\"],\"url\":\"https:\\\/\\\/github.blog\\\/author\\\/hamelsmu\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using GitHub Actions for MLOps &amp; Data Science - The GitHub Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/","og_locale":"en_US","og_type":"article","og_title":"Using GitHub Actions for MLOps &amp; Data Science","og_description":"Background Machine Learning Operations (or MLOps) enables Data Scientists to work in a more collaborative fashion, by providing testing, lineage, versioning, and historical information in an automated way.\u00a0 Because the&hellip;","og_url":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/","og_site_name":"The GitHub Blog","article_published_time":"2020-06-17T15:00:29+00:00","article_modified_time":"2021-12-20T22:49:07+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","type":"image\/png"}],"author":"Hamel Husain","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Hamel Husain","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#article","isPartOf":{"@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/"},"author":{"name":"Hamel Husain","@id":"https:\/\/github.blog\/#\/schema\/person\/d76319a9b865a8143ac6c5f20d95c568"},"headline":"Using GitHub Actions for MLOps &amp; Data Science","datePublished":"2020-06-17T15:00:29+00:00","dateModified":"2021-12-20T22:49:07+00:00","mainEntityOfPage":{"@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/"},"wordCount":770,"image":{"@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","keywords":["GitHub Actions"],"articleSection":["AI &amp; ML","Machine learning"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/","url":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/","name":"Using GitHub Actions for MLOps &amp; Data Science - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","datePublished":"2020-06-17T15:00:29+00:00","dateModified":"2021-12-20T22:49:07+00:00","author":{"@id":"https:\/\/github.blog\/#\/schema\/person\/d76319a9b865a8143ac6c5f20d95c568"},"breadcrumb":{"@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/using-github-actions-for-mlops-data-science\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"AI &amp; ML","item":"https:\/\/github.blog\/ai-and-ml\/"},{"@type":"ListItem","position":3,"name":"Machine learning","item":"https:\/\/github.blog\/ai-and-ml\/machine-learning\/"},{"@type":"ListItem","position":4,"name":"Using GitHub Actions for MLOps &amp; Data Science"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/github.blog\/#\/schema\/person\/d76319a9b865a8143ac6c5f20d95c568","name":"Hamel Husain","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8559ff90c3d3634c9323fe6712034231d4bc474d7c5e8e6b9ccb49482c892459?s=96&d=mm&r=g864feb2bdaca5e9252640651cf5a7686","url":"https:\/\/secure.gravatar.com\/avatar\/8559ff90c3d3634c9323fe6712034231d4bc474d7c5e8e6b9ccb49482c892459?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8559ff90c3d3634c9323fe6712034231d4bc474d7c5e8e6b9ccb49482c892459?s=96&d=mm&r=g","caption":"Hamel Husain"},"sameAs":["http:\/\/hamel.io"],"url":"https:\/\/github.blog\/author\/hamelsmu\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","jetpack_shortlink":"https:\/\/wp.me\/pamS32-dOp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/53097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/1617"}],"replies":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/comments?post=53097"}],"version-history":[{"count":23,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/53097\/revisions"}],"predecessor-version":[{"id":54022,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/53097\/revisions\/54022"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/57452"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=53097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/categories?post=53097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/tags?post=53097"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=53097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}