{"id":86985,"date":"2021-07-13T09:00:30","date_gmt":"2021-07-13T16:00:30","guid":{"rendered":""},"modified":"2025-05-30T15:08:57","modified_gmt":"2025-05-30T22:08:57","slug":"accelerate-pytorch-training-with-torch-ort","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/","title":{"rendered":"Accelerate PyTorch training with torch-ort"},"content":{"rendered":"\n<p>With a simple change to your PyTorch training script, you can now speed up training large language models with torch_ort.ORTModule, running on the target hardware of your choice.<\/p>\n\n\n\n<p>Training deep learning models requires ever-increasing compute and memory resources. Today we release torch_ort.ORTModule, to accelerate distributed training of PyTorch models, reducing the time and resources needed for training. To provide flexibility for the developer, torch-ort is available for both NVIDIA and AMD GPUs. The torch-ort package can be used with other deep learning optimizers like DeepSpeed to provide additional performance gains on training tasks.<\/p>\n\n\n\n<p>Delivered via the torch-ort package from <a href=\"https:\/\/github.com\/pytorch\/ort\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/pytorch\/ort<\/a>, the ORTModule class is a simple wrapper for torch.nn.Module. ORTModule supports transformer models such as the GPT and BERT series, with support for other modalities to come soon. Today, you can fine-tune the most popular language models with a labeled dataset for a target task; augment self-supervised training of a model with a specific corpus, or experiment with pre-training new models from scratch.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"performance\">Performance<\/h2>\n\n\n\n<p>As well as using torch-ort for large workloads inside Microsoft, we have benchmarked fine-tuning the most popular HuggingFace models, showing up to 37 percent improvement in throughput, with ORTModule alone, and up to 86 percent when combined with DeepSpeed.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2021\/07\/DeBERTa-fine-tuning.png\" alt=\"chart, bar chart\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2021\/07\/GPT-2-fine-turning.png\" alt=\"chart, bar chart\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>These experiments were run on Azure\u2019s world-class Azure ND <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-announces-general-availability-of-scaleup-scaleout-nvidia-a100-gpu-instances-claims-title-of-fastest-public-cloud-super\/\" target=\"_blank\" rel=\"noopener\">A100<\/a> v4 Infrastructure, with its optimal bandwidth between GPUs inside and across machines.<\/p>\n\n\n\n<p>The graphs above show throughput in training samples per second. The actual time your training job takes depends on the number of training samples you have and the type of CPU\/GPU you are using. Before starting the training processing, ORTModule does a one-time optimization of your model. This has a fixed cost that is amortized across the run.<\/p>\n\n\n\n<p>The combination of ORTModule and DeepSpeed also enables&nbsp;<a href=\"https:\/\/askherefirst.com\/\" target=\"_blank\" rel=\"noopener\">Ask Here First<\/a> to train the 2.7B parameter GPT-Neo model for a custom natural language task, where previously this large model could not be trained on the available hardware. AskHereFirst, a spin-off by Columbia University, uses powerful AI-based natural language query solutions for structured data stores that can be used to dramatically simplify the search in a wide range of industries such as finance, media, marketing, and sports.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2021\/07\/Ask-Here-First-logo_.png\" alt=\"Ask me here logo\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote blockquote is-layout-flow wp-block-quote blockquote-is-layout-flow\">\n<p class=\"has-text-align-left\"><em>Training GPT-NEO for our custom natural language task was not possible before we employed ORTModule and DeepSpeed. We have now produced fine-tuned 2.7B parameter GPT-NEO models to map natural language inputs into structured queries for a number of our applications.\u201d\u2014<\/em>Professor Vishal Misra, Columbia University and founder, Ask Here First<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hardware-portability\">Hardware portability<\/h2>\n\n\n\n<p>There are different hardware platform options for running distributed training workloads. The torch_ort.ORTModule works with NVIDIA and AMD GPUs.<\/p>\n\n\n\n<p>We are releasing the torch-ort package for NVIDIA using CUDA 10.2 or CUDA 11.1. This can be used to accelerate the PyTorch training execution on both NVIDIA GPUs on Azure or on a user\u2019s on-prem environment.<\/p>\n\n\n\n<p>We are also releasing the preview package for torch-ort with ROCm 4.2 for use on AMD GPUs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"simple-developer-experience\">Simple developer experience<\/h2>\n\n\n\n<p>Getting started with ORTModule is simple. You download and install the <a href=\"https:\/\/pypi.org\/project\/torch-ort\/\" target=\"_blank\" rel=\"noopener\">torch-ort<\/a> package and wrap your model with ORTModule, as demonstrated in the following code example.<\/p>\n\n\n\n<p>Your PyTorch training loop is unmodified except for wrapping the torch.nn.Module in ORTModule.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2021\/07\/torch.ort_.png\" alt=\"lines of code\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Because the PyTorch training loop is unmodified, ORTModule can be seamlessly integrated with other libraries in the PyTorch ecosystem, such as torch.autocast and NVIDIA apex.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-does-it-work\">How does it work?<\/h2>\n\n\n\n<p>On the first call to forward, two optimized computation graphs are generated: one for the forward prediction pass and one for the backward gradient calculation pass. All other parts of the training loop are executed by native PyTorch. The optimizations in these graphs, such as optimized kernels, subgraph operator fusion, and reduction of memory copies between CPU and GPU provide the speed up.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"for-more-information\">For more information<\/h2>\n\n\n\n<p>Go for a <a href=\"https:\/\/aka.ms\/torch-ort-deepdive\" target=\"_blank\" rel=\"noopener\">technical deep dive into ORTModule<\/a> and read about our <a href=\"https:\/\/cloudblogs.microsoft.com\/opensource\/2021\/07\/13\/onnx-runtime-release-1-8-1-previews-support-for-accelerated-training-on-amd-gpus-with-the-amd-rocm-open-software-platform\/\" target=\"_blank\" rel=\"noopener\">partnership with AMD<\/a>. Also, see <a href=\"https:\/\/github.com\/pytorch\/ort\" target=\"_blank\" rel=\"noopener\">documentation, samples, or reach out<\/a> to the team.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With a simple change to your PyTorch training script, you can now speed up training large language models with torch_ort.ORTModule, running on the target hardware of your choice. Training deep learning models requires ever-increasing compute and memory resources. Today we release torch_ort.<\/p>\n","protected":false},"author":5562,"featured_media":95466,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[1845,1905,2272,1824],"content-type":[],"topic":[2238,2250],"programming-languages":[2265],"coauthors":[1839],"class_list":["post-86985","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-data-science","tag-deepspeed","tag-microsoft","tag-onnx-runtime","topic-ai-machine-learning","topic-deep-learning","programming-languages-pytorch","review-flag-1593580428-734","review-flag-1-1593580432-963","review-flag-2-1593580437-411","review-flag-4-1593580448-609","review-flag-new-1593580248-669","review-flag-on-pr-1593580811-9","review-flag-partn-1593580279-545","review-flag-perce-1706214400-122"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Accelerate PyTorch training with torch-ort | Microsoft Open Source 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:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Accelerate PyTorch training with torch-ort | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"With a simple change to your PyTorch training script, you can now speed up training large language models with torch_ort.ORTModule, running on the target hardware of your choice. Training deep learning models requires ever-increasing compute and memory resources. Today we release torch_ort.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-13T16:00:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-30T22:08:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_055.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Natalie Kershaw\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Natalie Kershaw\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/\"},\"author\":[{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/author\\\/natalie-kershaw\\\/\",\"@type\":\"Person\",\"@name\":\"Natalie Kershaw\"}],\"headline\":\"Accelerate PyTorch training with torch-ort\",\"datePublished\":\"2021-07-13T16:00:30+00:00\",\"dateModified\":\"2025-05-30T22:08:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/\"},\"wordCount\":664,\"publisher\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/CLO19_Ubisoft_Azure_055.webp\",\"keywords\":[\"Data Science\",\"DeepSpeed\",\"Microsoft\",\"ONNX Runtime\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/\",\"name\":\"Accelerate PyTorch training with torch-ort | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/CLO19_Ubisoft_Azure_055.webp\",\"datePublished\":\"2021-07-13T16:00:30+00:00\",\"dateModified\":\"2025-05-30T22:08:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#primaryimage\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/CLO19_Ubisoft_Azure_055.webp\",\"contentUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/CLO19_Ubisoft_Azure_055.webp\",\"width\":1170,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2021\\\/07\\\/13\\\/accelerate-pytorch-training-with-torch-ort\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Accelerate PyTorch training with torch-ort\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"contentUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Accelerate PyTorch training with torch-ort | Microsoft Open Source 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:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/","og_locale":"en_US","og_type":"article","og_title":"Accelerate PyTorch training with torch-ort | Microsoft Open Source Blog","og_description":"With a simple change to your PyTorch training script, you can now speed up training large language models with torch_ort.ORTModule, running on the target hardware of your choice. Training deep learning models requires ever-increasing compute and memory resources. Today we release torch_ort.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2021-07-13T16:00:30+00:00","article_modified_time":"2025-05-30T22:08:57+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_055.png","type":"image\/png"}],"author":"Natalie Kershaw","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Natalie Kershaw","Est. reading time":"3 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/natalie-kershaw\/","@type":"Person","@name":"Natalie Kershaw"}],"headline":"Accelerate PyTorch training with torch-ort","datePublished":"2021-07-13T16:00:30+00:00","dateModified":"2025-05-30T22:08:57+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/"},"wordCount":664,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_055.webp","keywords":["Data Science","DeepSpeed","Microsoft","ONNX Runtime"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/","url":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/","name":"Accelerate PyTorch training with torch-ort | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_055.webp","datePublished":"2021-07-13T16:00:30+00:00","dateModified":"2025-05-30T22:08:57+00:00","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_055.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_055.webp","width":1170,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2021\/07\/13\/accelerate-pytorch-training-with-torch-ort\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Accelerate PyTorch training with torch-ort"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/86985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/5562"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=86985"}],"version-history":[{"count":2,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/86985\/revisions"}],"predecessor-version":[{"id":97501,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/86985\/revisions\/97501"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95466"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=86985"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=86985"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=86985"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=86985"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=86985"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=86985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}