This project has retired. For details please refer to its Attic page.
Experiment REST API | Apache Submarine
Skip to main content
Version: 0.6.0

Experiment REST API

Create Experiment (Using Anonymous/Embedded Environment)​

POST /api/v1/experiment

Parameters​

Put ExperimentSpec in request body.

ExperimentSpec​

Field NameTypeDescription
metaExperimentMetaMeta data of the experiment template.
environmentEnvironmentSpecEnvironment of the experiment template.
specMap<String, ExperimentTaskSpec>Spec of pods.
codeCodeSpecExperiment codespec.

ExperimentMeta​

Field NameTypeDescription
nameStringExperiment name.
namespaceStringExperiment namespace.
frameworkStringExperiemnt framework.
cmdStringCommand.
envVarsMap<String, String>Environmental variables.

EnvironmentSpec​

There are two types of environment: Anonymous and Predefined.

  • Anonymous environment: only specify dockerImage in environment spec. The container will be built on the docker image.
  • Embedded environment: specify name in environment spec. The container will be built on the existing environment (including dockerImage and kernalSpec).

See more details in environment api.

ExperimentTaskSpec​

Field NameTypeDescription
replicasIntegerNumbers of replicas.
resourecesStringResouces of the task
nameStringTask name.
imageStringImage name.
cmdStringCommand.
envVarsMap<String, String>Environmental variables.

CodeSpec​

Currently only support pulling from github. HDFS, NFS and s3 are in development

Field NameTypeDescription
syncModeString (git|hdfs|nfs|s3)sync mode of code spec.
urlStringurl of code spec.

Code Example​

shell

curl -X POST -H "Content-Type: application/json" -d '
{
"meta": {
"name": "tf-mnist-json",
"namespace": "default",
"framework": "TensorFlow",
"cmd": "python /var/tf_mnist/mnist_with_summaries.py --log_dir=/train/log --learning_rate=0.01 --batch_size=150",
"envVars": {
"ENV_1": "ENV1"
}
},
"environment": {
"image": "apache/submarine:tf-mnist-with-summaries-1.0"
},
"spec": {
"Ps": {
"replicas": 1,
"resources": "cpu=1,memory=1024M"
},
"Worker": {
"replicas": 1,
"resources": "cpu=1,memory=2048M"
}
}
}
' http://127.0.0.1:32080/api/v1/experiment

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":{
"experimentId":"experiment_1626160071451_0002",
"name":"tf-mnist-json",
"uid":"5a6ec922-6c90-43d4-844f-039f6804ed36",
"status":"Accepted",
"acceptedTime":"2021-07-13T16:47:51.000+08:00",
"createdTime":null,
"runningTime":null,
"finishedTime":null,
"spec":{
"meta":{
"name":"tf-mnist-json",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV_1":"ENV1"}
},
"environment":{
"name":null,
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":"apache/submarine:tf-mnist-with-summaries-1.0"
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d2048M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"2048M","cpu":"1"}
}
},
"code":null
}
},
"attributes":{}
}

Create Experiment (Using Pre-defined/Stored Environment)​

POST /api/v1/experiment

Parameters​

Put ExperimentSpec in request body.

Code Example​

shell

curl -X POST -H "Content-Type: application/json" -d '
{
"meta": {
"name": "tf-mnist-json",
"namespace": "default",
"framework": "TensorFlow",
"cmd": "python /var/tf_mnist/mnist_with_summaries.py --log_dir=/train/log --learning_rate=0.01 --batch_size=150",
"envVars": {
"ENV_1": "ENV1"
}
},
"environment": {
"name": "my-submarine-env"
},
"spec": {
"Ps": {
"replicas": 1,
"resources": "cpu=1,memory=1024M"
},
"Worker": {
"replicas": 1,
"resources": "cpu=1,memory=2048M"
}
}
}
' http://127.0.0.1:32080/api/v1/experiment

Above example assume environment "my-submarine-env" already exists in Submarine. Please refer Environment API Reference doc to environment rest api.

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":{
"experimentId":"experiment_1626160071451_0005",
"name":"tf-mnist-json",
"uid":"4944c603-0f21-49e5-826a-2ff820bb4d93",
"status":"Accepted",
"acceptedTime":"2021-07-13T16:57:27.000+08:00",
"createdTime":null,
"runningTime":null,
"finishedTime":null,
"spec":{
"meta":{
"name":"tf-mnist-json",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV_1":"ENV1"}
},
"environment":{
"name":"my-submarine-env",
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":null
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d2048M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"2048M","cpu":"1"}
}
},
"code":null
}
},
"attributes":{}
}

List Experiment​

GET /api/v1/experiment

Code Example​

shell

curl -X GET http://127.0.0.1:32080/api/v1/experiment

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":
[{
"experimentId":"experiment_1626160071451_0001",
"name":"newexperiment1",
"uid":"b895985c-411c-4e89-90e0-c60a2a8a4235",
"status":"Succeeded",
"acceptedTime":"2021-07-13T16:21:31.000+08:00",
"createdTime":"2021-07-13T16:21:31.000+08:00",
"runningTime":"2021-07-13T16:21:46.000+08:00",
"finishedTime":"2021-07-13T16:26:54.000+08:00",
"spec":{
"meta":{
"name":"newexperiment1",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV1":"ENV1"}
},
"environment":{
"name":null,
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":"apache/submarine:tf-mnist-with-summaries-1.0"
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
}
},
"code":null
}
},
{
"experimentId":"experiment_1626160071451_0005",
"name":"tf-mnist-json",
"uid":"4944c603-0f21-49e5-826a-2ff820bb4d93",
"status":"Accepted",
"acceptedTime":"2021-07-13T16:57:27.000+08:00",
"createdTime":null,
"runningTime":null,
"finishedTime":null,
"spec":{
"meta":{
"name":"tf-mnist-json",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV_1":"ENV1"}
},
"environment":{
"name":"my-submarine-env",
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":null
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d2048M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"2048M","cpu":"1"}
}
},
"code":null
}
}],
"attributes":{}
}

Get Experiment​

GET /api/v1/experiment/{id}

Parameters​

Field NameTypeInDescription
idStringpathExperiment id.

Code Example​

shell

curl -X GET http://127.0.0.1:32080/api/v1/experiment/experiment_1626160071451_0005

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":{
"experimentId":"experiment_1626160071451_0005",
"name":"tf-mnist-json",
"uid":"4944c603-0f21-49e5-826a-2ff820bb4d93",
"status":"Accepted",
"acceptedTime":"2021-07-13T16:57:27.000+08:00",
"createdTime":null,
"runningTime":null,
"finishedTime":null,
"spec":{
"meta":{
"name":"tf-mnist-json",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV_1":"ENV1"}
},
"environment":{
"name":"my-submarine-env",
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":null
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d2048M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"2048M","cpu":"1"}
}
},
"code":null
}
},
"attributes":{}
}

Patch Experiment​

PATCH /api/v1/experiment/{id}

Parameters​

Field NameTypeInDescription
idStringpathExperiment id.
metaExperimentMetabodyMeta data of the experiment template.
environmentEnvironmentSpecbodyEnvironment of the experiment template.
specMap<String, ExperimentTaskSpec>bodySpec of pods.
codeCodeSpecbodyTODO

Code Example​

shell

curl -X PATCH -H "Content-Type: application/json" -d '
{
"meta": {
"name": "tf-mnist-json",
"namespace": "default",
"framework": "TensorFlow",
"cmd": "python /var/tf_mnist/mnist_with_summaries.py --log_dir=/train/log --learning_rate=0.01 --batch_size=150",
"envVars": {
"ENV_1": "ENV1"
}
},
"environment": {
"image": "apache/submarine:tf-mnist-with-summaries-1.0"
},
"spec": {
"Ps": {
"replicas": 1,
"resources": "cpu=1,memory=1024M"
},
"Worker": {
"replicas": 2,
"resources": "cpu=1,memory=2048M"
}
}
}
' http://127.0.0.1:32080/api/v1/experiment/experiment_1626160071451_0005

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":{
"experimentId":"experiment_1626160071451_0005",
"name":"tf-mnist-json",
"uid":"4944c603-0f21-49e5-826a-2ff820bb4d93",
"status":"Accepted",
"acceptedTime":"2021-07-13T16:57:27.000+08:00",
"createdTime":null,
"runningTime":null,
"finishedTime":null,
"spec":{
"meta":{
"name":"tf-mnist-json",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV_1":"ENV1"}
},
"environment":{
"name":null,
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":"apache/submarine:tf-mnist-with-summaries-1.0"
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":2,
"resources":"cpu\u003d1,memory\u003d2048M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"2048M","cpu":"1"}
}
},
"code":null
}
},
"attributes":{}
}

Delete Experiment​

DELETE /api/v1/experiment/{id}

Parameters​

Field NameTypeInDescription
idStringpathExperiment id.

Code Example​

shell

curl -X DELETE http://127.0.0.1:32080/api/v1/experiment/experiment_1626160071451_0005

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":{
"experimentId":"experiment_1626160071451_0005",
"name":"tf-mnist-json",
"uid":"4944c603-0f21-49e5-826a-2ff820bb4d93",
"status":"Deleted",
"acceptedTime":null,
"createdTime":null,
"runningTime":null,
"finishedTime":null,
"spec":{
"meta":{
"name":"tf-mnist-json",
"namespace":"default",
"framework":"TensorFlow",
"cmd":"python /var/tf_mnist/mnist_with_summaries.py --log_dir\u003d/train/log --learning_rate\u003d0.01 --batch_size\u003d150",
"envVars":{"ENV_1":"ENV1"}
},
"environment":{
"name":null,
"dockerImage":null,
"kernelSpec":null,
"description":null,
"image":"apache/submarine:tf-mnist-with-summaries-1.0"
},
"spec":{
"Ps":{
"replicas":1,
"resources":"cpu\u003d1,memory\u003d1024M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"1024M","cpu":"1"}
},
"Worker":{
"replicas":2,
"resources":"cpu\u003d1,memory\u003d2048M",
"name":null,
"image":null,
"cmd":null,
"envVars":null,
"resourceMap":{"memory":"2048M","cpu":"1"}
}
},
"code":null
}
},
"attributes":{}
}

List Experiment Log​

GET /api/v1/experiment/logs

Code Example​

shell

curl -X GET http://127.0.0.1:32080/api/v1/experiment/logs

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":
[{
"experimentId":"experiment_1626160071451_0001",
"logContent":
[{
"podName":"newexperiment1-ps-0",
"podLog":[]
},
{
"podName":"newexperiment1-worker-0",
"podLog":[]
}]
}],
"attributes":{}
}

Get Experiment Log​

GET /api/v1/experiment/logs/{id}

Parameters​

Field NameTypeInDescription
idStringpathExperiment id.

Code Example​

shell

curl -X GET http://127.0.0.1:32080/api/v1/experiment/logs/experiment_1626160071451_0001

response

{
"status":"OK",
"code":200,
"success":true,
"message":null,
"result":{
"experimentId":"experiment_1626160071451_0001",
"logContent":
[{
"podName":"newexperiment1-ps-0",
"podLog":[]
},
{
"podName":"newexperiment1-worker-0",
"podLog":[]
}]
},
"attributes":{}
}