[ 
https://issues.apache.org/jira/browse/SUBMARINE-481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17094813#comment-17094813
 ] 

Wangda Tan commented on SUBMARINE-481:
--------------------------------------

Thanks [~pingsutw], I still saw it is using "Job" as the name, I think we 
should switch to "Experiment" for the first cut.

Here're my rough ideas about how to define the experiments API:

Top-level APIs:
 - POST /experiment : add new experiment
 - GET /experiment/ \{experiment-id}: get an experiment
 - GET /experiment/list (with parameters): get experiments with parameters.
 - DELETE /experiment/\{experiment-id}
: delete an experiment.

Objects definition:
{code:java}
Experiment {
    // runtime status of an experiment
        ExperimentStatus: {
           ExperimentState: Running (stringm, common states of Experiments, 
such as Running, New, Pending, Completed, Failed, etc.)

           startTime: string, (in UTC format, like 2020-04-28T19:01:37Z) 

           runningTimeInMilliSeconds: long (how long the job is running), 

           terminatedTime: string, (in UTC format, empty if not terminated).
        }, 

        // experiment spec (static) 
        Experiment: {
          // below are common fields for all experiments
          name: $unique-name-for-the-experiment (string)
      
          environment: $name-for-environment (string)

          // Where we can sync the code, 
          code:
                  $ref: "#/definitions/CodeSpec"

          timeout:
        $ref: "#/definitions/Time"

          type: string with following values:
                ("Script", "Tensorflow", "PyTorch", "Template")

      // based on the type, one of the following types
          parameters:
                        oneOf: // Use oneOf keyword of swagger, see 
https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/
                                - $ref: "#/definitions/ScriptParameterSpec"
                                - $ref: "#/definitions/TensorflowParameterSpec"
                                - ...
        },
}

CodeSpec {
        syncMode: s3/git (string)
        url: string (git://, or s3://)
}

ScriptParameterSpec {
        cli: 
          - $ref: "#/definitions/CommandLineOptions"
        resource:
          - $ref: "#/definitions/ResourceSpec"
}

TensorflowParameterSpec {
    // reference to the below like: 

       ps: 
            environment: "team-default-ml-cpu"
            resource_constraint: 
                 res="mem=20gb, vcore=3, gpu=0"
       worker: 
            environment: "team-default-ml-gpu"
            resource_constraint: 
                 res="mem=20gb, vcore=3, gpu=2"
}

Time {
        time: 30
        unit: "Minute" (or other units)
}

CommandLineOptions {
        type: array 
        items:
           type: string
}

ResourceSpec {
        // Should be a list of key (resource type) to value, and unit. 
        like cpu=10, memory = 20 GB, etc.
}

{code}

> Use Swagger to describe and document submarine RESTful APIs
> -----------------------------------------------------------
>
>                 Key: SUBMARINE-481
>                 URL: https://issues.apache.org/jira/browse/SUBMARINE-481
>             Project: Apache Submarine
>          Issue Type: Improvement
>          Components: Doc
>            Reporter: Kevin Su
>            Priority: Major
>              Labels: pull-request-available
>         Attachments: swagger.yaml
>
>
> Follow 
> [JobManagerRestApi.java|https://github.com/apache/submarine/blob/31f9322216307f958a1c3ec79e8a09cb0a5f5b5e/submarine-server/server-core/src/main/java/org/apache/submarine/server/rest/JobManagerRestApi.java#L44]
>  and [Job.java 
> |https://github.com/apache/submarine/blob/master/submarine-server/server-api/src/main/java/org/apache/submarine/server/api/job/Job.java],
>  [submarine-server 
> doc|https://github.com/apache/submarine/tree/master/docs/submarine-server] to 
> define our job API by swagger
> We could copy swagger.ymal to [https://editor.swagger.io/] so that we could 
> automatically generate doc and related client API.
> Anything I miss or something that needs to modify, please let me know
> cc [~leftnoteasy] [~liuxun] [~jiwq] [~tangzhankun] 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@submarine.apache.org
For additional commands, e-mail: dev-h...@submarine.apache.org

Reply via email to