{"id":32012,"date":"2017-03-30T18:17:47","date_gmt":"2017-03-30T15:17:47","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=32012"},"modified":"2018-08-01T17:08:13","modified_gmt":"2018-08-01T14:08:13","slug":"ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/","title":{"rendered":"Ins and Outs of Integrating TensorFlow with Existing Infrastructure"},"content":{"rendered":"<p>At TensorFlow Dev Summit 2017, <a href=\"https:\/\/www.linkedin.com\/in\/jonathan-hseu-38088521\/\" target=\"_blank\">Jonathan Hseu<\/a> of the Google Brain team elaborated on how to integrate TensorFlow with your infrastructure. The three major steps to take can be broadly divided into three high-level perspectives: <em>data preparation<\/em>, <em>training<\/em>, and <em>serving in production<\/em>.<\/p>\n<p>With all of the three steps outlined, this blog post highlights nuances to consider: the perks of <a href=\"https:\/\/www.altoros.com\/research-papers\/performance-of-distributed-tensorflow-a-multi-node-and-multi-gpu-configuration\/\">distributed training<\/a>, how containers help out, why input \/ output file formats matter, etc.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#Stage_1_Preparing_data\" >Stage #1: Preparing data<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#Stage_2_Training_data\" >Stage #2: Training data<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#Stage_3_Serving_in_production\" >Stage #3: Serving in production<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#Want_details_Watch_the_video\" >Want details? Watch the video!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#Further_reading\" >Further reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#About_the_expert\" >About the expert<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Stage_1_Preparing_data\"><\/span>Stage #1: Preparing data<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>According to Jonathan, the initial step invokes:<\/p>\n<ul>\n<li>import from various resources (Hive, MySQL, etc.)<\/li>\n<li>pre-processing (e.g., compute aggregates or do joins)<\/li>\n<li>export in a file supported by TensorFlow<\/li>\n<\/ul>\n<p>To do these kind of things, engineers mostly use such tools as <a href=\"https:\/\/www.altoros.com\/blog\/using-multi-threading-to-build-neural-networks-with-tensorflow-and-apache-spark\/\">Apache Spark<\/a>, Hadoop MapReduce, or Apache Beam.<\/p>\n<p>Jonathan exemplified feeding in user data stored in, say, Hive\u2014web impressions or clicks\u2014to compute aggregates or join data (for example, user data per region). One may also need to make vocabulary generation in case one uses <a href=\"https:\/\/www.altoros.com\/blog\/analyzing-text-and-generating-content-with-neural-networks-and-tensorflow\/\">word embeddings<\/a>.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-jonathan-hseu-v12.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-jonathan-hseu-v12-1024x678.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-32018\" \/><\/a><\/center><\/p>\n<p>Vocabulary generation means mapping from words to IDs, and the IDs map to the embedding layer. Then follows the test split and the output is exported in a file format that TensorFlow understands. Actually, the file format you are using within your input pipeline affects the speed and quality of model training. So, Jonathan enumerated those ones to employ:<\/p>\n<ul>\n<li style=\"margin-bottom: 10px;\"><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">tf.Example<\/code>,  <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">tf.SequenceExample<\/code> (especially for training recurrent neural networks), and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">tf.Records<\/code> (which is TensorFlow-specific)<\/li>\n<li style=\"margin-bottom: 10px;\">Native TensorFlow ops to read JSON and CSV<\/li>\n<\/ul>\n<p>One may also feed data directly from Python, which is slower than the two formats above, but allows for experimenting easily and is very useful when it comes to <a href=\"https:\/\/www.altoros.com\/blog\/what-is-behind-deep-reinforcement-learning-and-transfer-learning-with-tensorflow\/\">reinforcement learning<\/a>.<\/p>\n<p>To enable TensorFlow integration with other open-source frameworks, Johathan highly recommended using TFRecords support, which is native for Apache Beam. For Hadoop MapReduce or Apache Spark, one can check out <a href=\"https:\/\/github.com\/tensorflow\/ecosystem\" target=\"_blank\">these templates<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Stage_2_Training_data\"><\/span>Stage #2: Training data<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Models may be trained either:<\/p>\n<ul>\n<li style=\"margin-bottom: 10px;\"><em>locally<\/em>\u2014on your machine or a VM\u2014a common case for small data sets or debugging,<\/li>\n<li style=\"margin-bottom: 10px;\">or <em>in a distributed environment<\/em>, which is faster, but still requires appropriate infrastructure.<\/li>\n<\/ul>\n<p>In a distributed model, there are two types of jobs\u2014<em>parameter servers<\/em> and <em>workers<\/em>. The recommended setup is between graph replication, where workers operate independently with no need to communicate with each other, but with the parameter servers only.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-distributed-training-v12.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-distributed-training-v12.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-32015\" \/><\/a><\/center><\/p>\n<blockquote><p><em>\u201cSo, the reason you would want to run a distributed storage is for your input data, so each worker can read from a single source, and for checkpoints in the exported model itself.\u201d<br \/>\n\u2014Jonathan Hseu, Google Brain<\/em><\/p><\/blockquote>\n<p>Two things are essential for running a distributed training: <em>cluster management<\/em> and <em>distributed storage<\/em>. Jonathan recommended such cluster managers as Apache Mesos, <a href=\"https:\/\/www.altoros.com\/visuals\/kubernetes-kubectl-cli-cheat-sheet\/\">Kubernetes<\/a>, Hadoop YARN, and <a href=\"https:\/\/slurm.schedmd.com\/\" target=\"_blank\">Slurm<\/a>. As distributed storage solutions, one may consider using HDFS, Google Cloud Storage, or AWS.<\/p>\n<p>Though using some <a href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\">container engine<\/a> (Docker or <a href=\"https:\/\/www.openshift.com\/learn\/topics\/rkt\" target=\"_blank\">rkt<\/a>) is optional, there are grounds for doing so. Containers isolate workers from the environment, which is useful as some jobs may have some version dependencies that differ from the other jobs.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-jonathan-hseu-keeynote-v12.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-jonathan-hseu-keeynote-v12-1024x678.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-32017\" \/><\/a><\/center><\/p>\n<blockquote><p><em>\u201cA specific example here is that eventually we\u2019ll release TensorFlow 2.0. TensorFlow uses semantic versioning, and at 2.0 we may make some backwards incompatible changes. And suppose you want to upgrade to TensorFlow 2.0 in your organization. Then, the containers make it much easier to enable gradual updates because you don\u2019t have to upgrade every job at once. You can pin jobs to a particular TensorFlow version and update one by one.\u201d<br \/>\n\u2014Jonathan Hseu, Google Brain<\/em><\/p><\/blockquote>\n<p>Jonathan demonstrated what the code for the distributed model looks like.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-distributed-training-code-v12.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-distributed-training-code-v12-1024x532.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-32014\" \/><\/a><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Stage_3_Serving_in_production\"><\/span>Stage #3: Serving in production<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The configuration to set up depends on an underlying infrastructure. You can find the <a href=\"https:\/\/github.com\/tensorflow\/ecosystem\" target=\"_blank\">common templates<\/a> or check out open-sourced code to run on Spark at the <a href=\"https:\/\/github.com\/yahoo\/TensorFlowOnSpark\" target=\"_blank\">TensorFlowOnSpark<\/a> repository.<\/p>\n<p>As with the input file formats, there are some preferences for the exported model:<\/p>\n<ul>\n<li style=\"margin-bottom: 10px;\"><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">SavedModel<\/code> (recommended), a standard format for TensorFlow models that already includes such required assets as vocabularies.<\/li>\n<li style=\"margin-bottom: 10px;\"><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">GraphDef<\/code>, a frozen graph for particular uses\u2014for example, mobile.<\/li>\n<\/ul>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-jonathan-hseu-google-v12.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/tensorflow-dev-summit-2017-jonathan-hseu-google-v12-1024x678.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-32016\" \/><\/a><\/center><\/p>\n<p>To serve the model in production, one can choose from the following options:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/tensorflow\/serving\" target=\"_blank\">TensorFlow Serving<\/a><\/li>\n<li>In-process TensorFlow (a <a href=\"https:\/\/www.tensorflow.org\/deploy\/distributed\" target=\"_blank\">standard mode<\/a>, mostly for specific usage like mobile)<\/li>\n<li>A hosted service<\/li>\n<\/ul>\n<p>No surprise that the first option on the list is the one to fit better as TensorFlow Serving loads a new version of a model, batches inputs for efficiency, ensures isolation between multiple models, and handles a lot more nuances.<\/p>\n<p>Finally, Jonathan suggested to have a look at the shared libraries for constructing and executing TensorFlow graphs <a href=\"https:\/\/github.com\/tensorflow\/tensorflow\/blob\/master\/tensorflow\/go\/README.md\" target=\"_blank\">in Go<\/a> and <a href=\"https:\/\/github.com\/tensorflow\/tensorflow\/blob\/master\/tensorflow\/java\/README.md\" target=\"_blank\">in Java<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Want_details_Watch_the_video\"><\/span>Want details? Watch the video!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><iframe loading=\"lazy\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/yALzr4A2AzY\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/using-multi-threading-to-build-neural-networks-with-tensorflow-and-apache-spark\/\">Using Multi-Threading to Build Neural Networks with TensorFlow and Apache Spark<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/research-papers\/performance-of-distributed-tensorflow-a-multi-node-and-multi-gpu-configuration\/\">Performance of Distributed TensorFlow: A Multi-Node and Multi-GPU Configuration<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/building-a-keras-based-image-classifier-using-tensorflow-for-a-back-end\/\">Building a Keras-Based Image Classifier Using TensorFlow for a Back End<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/tensorflow-in-the-cloud-accelerating-resources-with-elastic-gpus\/\">TensorFlow in the Cloud: Accelerating Resources with Elastic GPUs<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_expert\"><\/span>About the expert<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><small><a href=\"https:\/\/www.linkedin.com\/in\/jonathan-hseu-38088521\/\" target=\"_blank\">Jonathan Hseu<\/a> is a software engineer working on TensorFlow with the Google Brain team. His primary interests are machine learning and distributed systems. Previously, Jonathan worked as tech lead of data infrastructure at Dropbox and tech lead\/manager of logs analysis infrastructure at Google. You can check out <a href=\"https:\/\/github.com\/jhseu\/tensorflow\" target=\"_blank\">his GitHub profile<\/a>.<\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>At TensorFlow Dev Summit 2017, Jonathan Hseu of the Google Brain team elaborated on how to integrate TensorFlow with your infrastructure. The three major steps to take can be broadly divided into three high-level perspectives: data preparation, training, and serving in production.<\/p>\n<p>With all of the three steps outlined, this blog [&#8230;]<\/p>\n","protected":false},"author":3,"featured_media":32021,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[748,749],"class_list":["post-32012","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-machine-learning","tag-tensorflow"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ins and Outs of Integrating TensorFlow with Existing Infrastructure | Altoros<\/title>\n<meta name=\"description\" content=\"The blog post scrutinizes three major phases\u2014data preparation, training a model, and serving in production\u2014to enable TensorFlow on top of current infrastructure.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ins and Outs of Integrating TensorFlow with Existing Infrastructure | Altoros\" \/>\n<meta property=\"og:description\" content=\"At TensorFlow Dev Summit 2017, Jonathan Hseu of the Google Brain team elaborated on how to integrate TensorFlow with your infrastructure. The three major steps to take can be broadly divided into three high-level perspectives: data preparation, training, and serving in production. With all of the three steps outlined, this blog [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-30T15:17:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-01T14:08:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"424\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Sophia Turol\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sophia Turol\" \/>\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\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/\",\"name\":\"Ins and Outs of Integrating TensorFlow with Existing Infrastructure | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif\",\"datePublished\":\"2017-03-30T15:17:47+00:00\",\"dateModified\":\"2018-08-01T14:08:13+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif\",\"width\":640,\"height\":424},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ins and Outs of Integrating TensorFlow with Existing Infrastructure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e\",\"name\":\"Sophia Turol\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg\",\"caption\":\"Sophia Turol\"},\"description\":\"Sophia Turol is passionate about delivering well-structured articles that cater for picky technical audience. With 3+ years in technical writing and 5+ years in editorship, she enjoys collaboration with developers to create insightful, yet intelligible technical tutorials, overviews, and case studies. Sophie is enthusiastic about deep learning solutions\u2014TensorFlow in particular\u2014and PaaS systems, such as Cloud Foundry.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/sophie-turol\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ins and Outs of Integrating TensorFlow with Existing Infrastructure | Altoros","description":"The blog post scrutinizes three major phases\u2014data preparation, training a model, and serving in production\u2014to enable TensorFlow on top of current infrastructure.","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:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/","og_locale":"en_US","og_type":"article","og_title":"Ins and Outs of Integrating TensorFlow with Existing Infrastructure | Altoros","og_description":"At TensorFlow Dev Summit 2017, Jonathan Hseu of the Google Brain team elaborated on how to integrate TensorFlow with your infrastructure. The three major steps to take can be broadly divided into three high-level perspectives: data preparation, training, and serving in production. With all of the three steps outlined, this blog [...]","og_url":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/","og_site_name":"Altoros","article_published_time":"2017-03-30T15:17:47+00:00","article_modified_time":"2018-08-01T14:08:13+00:00","og_image":[{"width":640,"height":424,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif","type":"image\/gif"}],"author":"Sophia Turol","twitter_misc":{"Written by":"Sophia Turol","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/","url":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/","name":"Ins and Outs of Integrating TensorFlow with Existing Infrastructure | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif","datePublished":"2017-03-30T15:17:47+00:00","dateModified":"2018-08-01T14:08:13+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/03\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure-v1.gif","width":640,"height":424},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/ins-and-outs-of-integrating-tensorflow-with-existing-infrastructure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ins and Outs of Integrating TensorFlow with Existing Infrastructure"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e","name":"Sophia Turol","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","caption":"Sophia Turol"},"description":"Sophia Turol is passionate about delivering well-structured articles that cater for picky technical audience. With 3+ years in technical writing and 5+ years in editorship, she enjoys collaboration with developers to create insightful, yet intelligible technical tutorials, overviews, and case studies. Sophie is enthusiastic about deep learning solutions\u2014TensorFlow in particular\u2014and PaaS systems, such as Cloud Foundry.","url":"https:\/\/www.altoros.com\/blog\/author\/sophie-turol\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/32012","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=32012"}],"version-history":[{"count":4,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/32012\/revisions"}],"predecessor-version":[{"id":32022,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/32012\/revisions\/32022"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/32021"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=32012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=32012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=32012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}