(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{136:function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),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({}),u=function(e){var t=o.a.useContext(b),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},l=function(e){var t=u(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"]),l=u(n),d=r,m=l["".concat(i,".").concat(d)]||l[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"},197:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/tensorboard-experiment-page-bf5d5aad633d80ef059ce4b7e4d91db3.png"},198:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/tensorboard-webpage-f8b9c5ceeb7b5ef535939ea22f680d96.png"},74: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 u}));var r=n(3),o=n(7),a=(n(0),n(136)),i={},c={unversionedId:"userDocs/k8s/how-to-use-tensorboard",id:"userDocs/k8s/how-to-use-tensorboard",isDocsHomePage:!1,title:"how-to-use-tensorboard",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 u(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)("h1",{id:"how-to-use-tensorboard-in-submarine"},"How to use tensorboard in submarine"),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(197).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(198).default})))}u.isMDXComponent=!0}}]);