(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{111:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return o})),n.d(t,"toc",(function(){return s})),n.d(t,"default",(function(){return c}));var r=n(3),l=n(7),a=(n(0),n(144)),i={title:"Model Client"},o={unversionedId:"userDocs/submarine-sdk/model-client",id:"userDocs/submarine-sdk/model-client",isDocsHomePage:!1,title:"Model Client",description:"\x3c!--",source:"@site/docs/userDocs/submarine-sdk/model-client.md",slug:"/userDocs/submarine-sdk/model-client",permalink:"/docs/userDocs/submarine-sdk/model-client",editUrl:"https://github.com/apache/submarine/edit/master/website/docs/userDocs/submarine-sdk/model-client.md",version:"current",sidebar:"docs",previous:{title:"Experiment Client",permalink:"/docs/userDocs/submarine-sdk/experiment-client"},next:{title:"Tracking",permalink:"/docs/userDocs/submarine-sdk/tracking"}},s=[{value:"ModelsClient.start()-&gt;Active Run",id:"modelsclientstart-active-run",children:[]},{value:"ModelsClient.log_param(key, value)-&gt;None",id:"modelsclientlog_paramkey-value-none",children:[]},{value:"ModelsClient.log_params(params)-&gt;None",id:"modelsclientlog_paramsparams-none",children:[]},{value:"ModelsClient.log_metric(self, key, value, step=None)-&gt;None",id:"modelsclientlog_metricself-key-value-stepnone-none",children:[]},{value:"ModelsClient.log_metrics(self, metrics, step=None)-&gt;None",id:"modelsclientlog_metricsself-metrics-stepnone-none",children:[]},{value:"ModelsClient.load_model(self, name, version)-&gt; mlflow.pyfunc.PyFuncModel",id:"modelsclientload_modelself-name-version--mlflowpyfuncpyfuncmodel",children:[]},{value:"ModelsClient.update_model(self, name, new_name)-&gt;None",id:"modelsclientupdate_modelself-name-new_name-none",children:[]},{value:"ModelsClient.delete_model(self, name, version)-&gt;None",id:"modelsclientdelete_modelself-name-version-none",children:[]},{value:"ModelsClient.save_model(self, model_type, model, artifact_path, registered_model_name=None)",id:"modelsclientsave_modelself-model_type-model-artifact_path-registered_model_namenone",children:[]}],m={toc:s};function c(e){var t=e.components,n=Object(l.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},m,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"The submarine ModelsClient provides a high-level API for managing and serving your models."),Object(a.b)("h2",{id:"modelsclientstart-active-run"},"ModelsClient.start()->",Object(a.b)("a",{parentName:"h2",href:"https://mlflow.org/docs/latest/_modules/mlflow/tracking/fluent.html#ActiveRun"},"Active Run")),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Start a new Mlflow run"),Object(a.b)("li",{parentName:"ol"},'Direct the logging of the artifacts and metadata to the Run named "worker_i" under Experiment "job_id"'),Object(a.b)("li",{parentName:"ol"},"If in distributed training, worker and job id would be parsed from environment variable"),Object(a.b)("li",{parentName:"ol"},"If in local traning, worker and job id will be generated.\n:return: Active Run")),Object(a.b)("h2",{id:"modelsclientlog_paramkey-value-none"},"ModelsClient.log_param(key, value)->None"),Object(a.b)("p",null,"Log parameter under the current run."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"key")," \u2013 Parameter name (string)"),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"value")," \u2013 Parameter value (string, but will be string-ified if not)"))),Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"example"},"example"))),Object(a.b)("pre",null,Object(a.b)("code",{parentName:"pre"},'from submarine import ModelsClient\n\nperiscope = ModelsClient()\nwith periscope.start() as run:\n  periscope.log_param("learning_rate", 0.01)\n')),Object(a.b)("h2",{id:"modelsclientlog_paramsparams-none"},"ModelsClient.log_params(params)->None"),Object(a.b)("p",null,"Log a batch of params for the current run."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-1"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"params")," \u2013 Dictionary of param_name: String -> value: (String, but will be string-ified if not)"))),Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"example-1"},"example"))),Object(a.b)("pre",null,Object(a.b)("code",{parentName:"pre"},'from submarine import ModelsClient\n\nparams = {"learning_rate": 0.01, "n_estimators": 10}\n\nperiscope = ModelsClient()\nwith periscope.start() as run:\n  periscope.log_params(params)\n')),Object(a.b)("h2",{id:"modelsclientlog_metricself-key-value-stepnone-none"},"ModelsClient.log_metric(self, key, value, step=None)->None"),Object(a.b)("p",null,"Log a metric under the current run."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-2"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"key")," \u2013 Metric name (string)."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"value")," \u2013 Metric value (float). Note that some special values such as +/- Infinity may be replaced by other values depending on the store. For example, the SQLAlchemy store replaces +/- Infinity with max / min float values."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"step")," \u2013 Metric step (int). Defaults to zero if unspecified."))),Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"example-2"},"example"))),Object(a.b)("pre",null,Object(a.b)("code",{parentName:"pre"},'from submarine import ModelsClient\n\nperiscope = ModelsClient()\nwith periscope.start() as run:\n  periscope.log_metric("mse", 2500.00)\n')),Object(a.b)("h2",{id:"modelsclientlog_metricsself-metrics-stepnone-none"},"ModelsClient.log_metrics(self, metrics, step=None)->None"),Object(a.b)("p",null,"Log multiple metrics for the current run."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-3"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"metrics")," \u2013 Dictionary of metric_name: String -> value: Float. Note that some special values such as +/- Infinity may be replaced by other values depending on the store. For example, sql based store may replace +/- Infinity with max / min float values."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"step")," \u2013 A single integer step at which to log the specified Metrics. If unspecified, each metric is logged at step zero."))),Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"example-3"},"example"))),Object(a.b)("pre",null,Object(a.b)("code",{parentName:"pre"},'from submarine import ModelsClient\n\nmetrics = {"mse": 2500.00, "rmse": 50.00}\n\nperiscope = ModelsClient()\nwith periscope.start() as run:\n  periscope.log_metrics(metrics)\n')),Object(a.b)("h2",{id:"modelsclientload_modelself-name-version--mlflowpyfuncpyfuncmodel"},"ModelsClient.load_model(self, name, version)->",Object(a.b)("a",{parentName:"h2",href:"https://mlflow.org/docs/latest/_modules/mlflow/pyfunc.html#PyFuncModel"}," mlflow.pyfunc.PyFuncModel")),Object(a.b)("p",null,"Load a model stored in models Python function format with specific name and version."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-4"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"name")," \u2013 Name of the containing registered model.(string)."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"version")," \u2013 Version number of the model version.(string).")))),Object(a.b)("h2",{id:"modelsclientupdate_modelself-name-new_name-none"},"ModelsClient.update_model(self, name, new_name)->None"),Object(a.b)("p",null,"Update registered model name."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-5"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"name")," \u2013 Name of the registered model to update(string)."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"new name")," \u2013 New proposed name for the registered model(string).")))),Object(a.b)("h2",{id:"modelsclientdelete_modelself-name-version-none"},"ModelsClient.delete_model(self, name, version)->None"),Object(a.b)("p",null,"Delete model version in backend."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-6"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"name")," \u2013 Name of the containing registered model.(string)."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"version")," \u2013 Version number of the model version.(string).")))),Object(a.b)("h2",{id:"modelsclientsave_modelself-model_type-model-artifact_path-registered_model_namenone"},"ModelsClient.save_model(self, model_type, model, artifact_path, registered_model_name=None)"),Object(a.b)("p",null,"Beta: Save model to server for managment and servering."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("h3",{parentName:"li",id:"parameters-7"},"Parameters"),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"name")," \u2013 Name of the containing registered model.(string)."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("strong",{parentName:"li"},"version")," \u2013 Version number of the model version.(string).")))))}c.isMDXComponent=!0},144:function(e,t,n){"use strict";n.d(t,"a",(function(){return b})),n.d(t,"b",(function(){return u}));var r=n(0),l=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 o(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,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(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)&&(l[n]=e[n])}return l}var m=l.a.createContext({}),c=function(e){var t=l.a.useContext(m),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},b=function(e){var t=c(e.components);return l.a.createElement(m.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return l.a.createElement(l.a.Fragment,{},t)}},d=l.a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),b=c(n),d=r,u=b["".concat(i,".").concat(d)]||b[d]||p[d]||a;return n?l.a.createElement(u,o(o({ref:t},m),{},{components:n})):l.a.createElement(u,o({ref:t},m))}));function u(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 o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var m=2;m<a;m++)i[m]=n[m];return l.a.createElement.apply(null,i)}return l.a.createElement.apply(null,n)}d.displayName="MDXCreateElement"}}]);