(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{130:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return o})),n.d(t,"toc",(function(){return b})),n.d(t,"default",(function(){return p}));var r=n(3),a=n(7),i=(n(0),n(136)),l={},o={unversionedId:"adminDocs/k8s/run-tensorflow-experiment-ui",id:"adminDocs/k8s/run-tensorflow-experiment-ui",isDocsHomePage:!1,title:"run-tensorflow-experiment-ui",description:"\x3c!--",source:"@site/docs/adminDocs/k8s/run-tensorflow-experiment-ui.md",slug:"/adminDocs/k8s/run-tensorflow-experiment-ui",permalink:"/docs/adminDocs/k8s/run-tensorflow-experiment-ui",editUrl:"https://github.com/apache/submarine/edit/master/website/docs/adminDocs/k8s/run-tensorflow-experiment-ui.md",version:"current"},b=[{value:"Steps to run Tensorflow Experiment",id:"steps-to-run-tensorflow-experiment",children:[]}],c={toc:b};function p(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(i.b)("wrapper",Object(r.a)({},c,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"run-tensorflow-experiment-on-submarine-ui"},"Run Tensorflow Experiment on Submarine UI"),Object(i.b)("h2",{id:"steps-to-run-tensorflow-experiment"},"Steps to run Tensorflow Experiment"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Click ",Object(i.b)("inlineCode",{parentName:"p"},"+ New Experiment"),' on the "Experiment" page.  ')),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Click ",Object(i.b)("inlineCode",{parentName:"p"},"Define your experiment"))),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},'Put a name to experiment, like "minst-example" ')),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Command: ",Object(i.b)("inlineCode",{parentName:"p"},"python /var/tf_mnist/mnist_with_summaries.py --log_dir=/train/log --learning_rate=0.01 --batch_size=150"))),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Image you can put; ",Object(i.b)("inlineCode",{parentName:"p"},"apache/submarine:tf-mnist-with-summaries-1.0"))),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Click ",Object(i.b)("inlineCode",{parentName:"p"},"Next Step"))),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Choose ",Object(i.b)("inlineCode",{parentName:"p"},"Distributed Tensorflow"))),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Click ",Object(i.b)("inlineCode",{parentName:"p"},"Add new spec")," twice to add two new specs (roles) ")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"One is Worker, another one is PS, leave rest of the parameters unchanged ")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Click next step, you can review your parameters before submitting the job: "))),Object(i.b)("p",null,"  It should look like below:"),Object(i.b)("table",null,Object(i.b)("thead",{parentName:"table"},Object(i.b)("tr",{parentName:"thead"},Object(i.b)("th",{parentName:"tr",align:null},"Name"),Object(i.b)("th",{parentName:"tr",align:null},"mnist-example-111"),Object(i.b)("th",{parentName:"tr",align:null}),Object(i.b)("th",{parentName:"tr",align:null}))),Object(i.b)("tbody",{parentName:"table"},Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"Command"),Object(i.b)("td",{parentName:"tr",align:null},"python /var/tf_mnist/mnist_with_summaries.py --log_dir=/train/log --learning_rate=0.01 --batch_size=150"),Object(i.b)("td",{parentName:"tr",align:null}),Object(i.b)("td",{parentName:"tr",align:null})),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"Image"),Object(i.b)("td",{parentName:"tr",align:null},"apache/submarine:tf-mnist-with-summaries-1.0"),Object(i.b)("td",{parentName:"tr",align:null}),Object(i.b)("td",{parentName:"tr",align:null})),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"Environment Variables"),Object(i.b)("td",{parentName:"tr",align:null}),Object(i.b)("td",{parentName:"tr",align:null}),Object(i.b)("td",{parentName:"tr",align:null})),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"Ps"),Object(i.b)("td",{parentName:"tr",align:null},"cpu=1,nvidia.com/gpu=0,memory=1024M"),Object(i.b)("td",{parentName:"tr",align:null}),Object(i.b)("td",{parentName:"tr",align:null})),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"Worker"),Object(i.b)("td",{parentName:"tr",align:null},"cpu=1,nvidia.com/gpu=0,memory=1024M"),Object(i.b)("td",{parentName:"tr",align:null}),Object(i.b)("td",{parentName:"tr",align:null})))),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Click ",Object(i.b)("inlineCode",{parentName:"li"},"Submit")," it will be submitted, you can see the new example running in the ",Object(i.b)("inlineCode",{parentName:"li"},"Experiment")," list, you can get logs, etc. directly from the UI")))}p.isMDXComponent=!0},136:function(e,t,n){"use strict";n.d(t,"a",(function(){return m})),n.d(t,"b",(function(){return d}));var r=n(0),a=n.n(r);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(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 o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function b(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=a.a.createContext({}),p=function(e){var t=a.a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=p(e.components);return a.a.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},s=a.a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=b(e,["components","mdxType","originalType","parentName"]),m=p(n),s=r,d=m["".concat(l,".").concat(s)]||m[s]||u[s]||i;return n?a.a.createElement(d,o(o({ref:t},c),{},{components:n})):a.a.createElement(d,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=s;var o={};for(var b in t)hasOwnProperty.call(t,b)&&(o[b]=t[b]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var c=2;c<i;c++)l[c]=n[c];return a.a.createElement.apply(null,l)}return a.a.createElement.apply(null,n)}s.displayName="MDXCreateElement"}}]);