(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{144:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return m}));var r=n(0),o=n.n(r);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var b=o.a.createContext({}),l=function(e){var t=o.a.useContext(b),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=l(e.components);return o.a.createElement(b.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=o.a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,b=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=r,m=u["".concat(i,".").concat(d)]||u[d]||p[d]||a;return n?o.a.createElement(m,c(c({ref:t},b),{},{components:n})):o.a.createElement(m,c({ref:t},b))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var b=2;b<a;b++)i[b]=n[b];return o.a.createElement.apply(null,i)}return o.a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},159:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/tensorboard-experiment-page-bf5d5aad633d80ef059ce4b7e4d91db3.png"},160:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/tensorboard-webpage-f8b9c5ceeb7b5ef535939ea22f680d96.png"},79:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return c})),n.d(t,"toc",(function(){return s})),n.d(t,"default",(function(){return l}));var r=n(3),o=n(7),a=(n(0),n(144)),i={title:"How to use tensorboard in Submarine"},c={unversionedId:"userDocs/k8s/how-to-use-tensorboard",id:"userDocs/k8s/how-to-use-tensorboard",isDocsHomePage:!1,title:"How to use tensorboard in Submarine",description:"\x3c!--",source:"@site/docs/userDocs/k8s/how-to-use-tensorboard.md",slug:"/userDocs/k8s/how-to-use-tensorboard",permalink:"/docs/userDocs/k8s/how-to-use-tensorboard",editUrl:"https://github.com/apache/submarine/edit/master/website/docs/userDocs/k8s/how-to-use-tensorboard.md",version:"current"},s=[{value:"Write to LogDirs by the environment variable",id:"write-to-logdirs-by-the-environment-variable",children:[{value:"Environment variable",id:"environment-variable",children:[]},{value:"Example",id:"example",children:[]}]},{value:"Connect to the tensorboard webpaage",id:"connect-to-the-tensorboard-webpaage",children:[]}],b={toc:s};function l(e){var t=e.components,i=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},b,i,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h2",{id:"write-to-logdirs-by-the-environment-variable"},"Write to LogDirs by the environment variable"),Object(a.b)("h3",{id:"environment-variable"},"Environment variable"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"SUBMARINE_TENSORBOARD_LOG_DIR"),": Exist in every experiment container. You just need to direct your logs to ",Object(a.b)("inlineCode",{parentName:"li"},"$(SUBMARINE_TENSORBOARD_LOG_DIR)")," (",Object(a.b)("strong",{parentName:"li"},"NOTICE: it is ",Object(a.b)("inlineCode",{parentName:"strong"},"()")," not ",Object(a.b)("inlineCode",{parentName:"strong"},"{}")),"), and you can inspect the process on the tensorboard webpage.")),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",{parentName:"pre"},'{\n  "meta": {\n    "name": "tensorflow-tensorboard-dist-mnist",\n    "namespace": "default",\n    "framework": "TensorFlow",\n    "cmd": "python /var/tf_mnist/mnist_with_summaries.py --log_dir=$(SUBMARINE_TENSORBOARD_LOG_DIR) --learning_rate=0.01 --batch_size=20",\n    "envVars": {\n      "ENV_1": "ENV1"\n    }\n  },\n  "environment": {\n    "image": "apache/submarine:tf-mnist-with-summaries-1.0"\n  },\n  "spec": {\n    "Worker": {\n      "replicas": 1,\n      "resources": "cpu=1,memory=512M"\n    }\n  }\n}\n\n')),Object(a.b)("h2",{id:"connect-to-the-tensorboard-webpaage"},"Connect to the tensorboard webpaage"),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Open the experiment page in the workbench, and Click the ",Object(a.b)("inlineCode",{parentName:"li"},"TensorBoard")," button.")),Object(a.b)("p",null,Object(a.b)("img",{src:n(159).default})),Object(a.b)("ol",{start:2},Object(a.b)("li",{parentName:"ol"},"Inspect the process on tensorboard page.")),Object(a.b)("p",null,Object(a.b)("img",{src:n(160).default})))}l.isMDXComponent=!0}}]);