GRPC APIs āĻāĻžāĻĄāĻŧāĻžāĻ TensorFlow ModelServer āĻāĻāĻžāĻĄāĻŧāĻžāĻ RESTful API āϏāĻŽāϰā§āĻĨāύ āĻāϰā§āĨ¤ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āĻāĻ API āĻāύā§āĻĄāĻĒāϝāĻŧā§āύā§āĻ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāĻāĻāĻŋ āĻāύā§āĻĄ-āĻā§-āĻāύā§āĻĄ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦāϰā§āĻŖāύāĻž āĻāϰā§āĨ¤
āĻ āύā§āϰā§āϧ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻāĻāĻŋ JSON āĻ āĻŦāĻā§āĻā§āĻāĨ¤ āĻāĻ āĻŦāϏā§āϤā§āϰ āĻāĻ āύ āĻ āύā§āϰā§āϧā§āϰ āϧāϰāύ āĻŦāĻž āĻā§āϰāĻŋāϝāĻŧāĻžāĻĒāĻĻā§āϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰā§āĨ¤ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāĻžāύāĻžāϰ āĻāύā§āϝ āύā§āĻā§āϰ API āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŦāĻŋāĻāĻžāĻ āĻĻā§āĻā§āύ.
āϤā§āϰā§āĻāĻŋāϰ āĻā§āώā§āϤā§āϰā§, āϏāĻŽāϏā§āϤ API āĻā§āϞāĻŋ āĻā§ āĻšāĻŋāϏāĻžāĻŦā§ error
āĻāĻŦāĻ āĻŽāĻžāύ āĻšāĻŋāϏāĻžāĻŦā§ āϤā§āϰā§āĻāĻŋ āĻŦāĻžāϰā§āϤāĻž āϏāĻš āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻĄāĻŋāϤ⧠āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻ āĻĢāĻŋāϰāĻŋāϝāĻŧā§ āĻĻā§āĻŦā§:
{
"error": <error message string>
}
āĻŽāĻĄā§āϞ āϏā§āĻā§āϝāĻžāĻāĻžāϏ API
āĻāĻ API āĻāύāĻŋāώā§āĻ āĻāĻžāĻŦā§ ModelService.GetModelStatus
gRPC API āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻŽāĻĄā§āϞā§āϰ āϏā§āĻĨāĻŋāϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
URL
GET http://host:port/v1/models/${MODEL_NAME}[/versions/${VERSION}|/labels/${LABEL}]
/versions/${VERSION}
āĻŦāĻž /labels/${LABEL}
āϏāĻš āĻāĻā§āĻāĻŋāĻāĨ¤ āϏāĻŦ āϏāĻāϏā§āĻāϰāĻŖā§āϰ āĻāύā§āϝ āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻŦāĻžāĻĻ āĻĻā§āĻāϝāĻŧāĻž āĻšāϞ⧠āĻāϤā§āϤāϰ⧠āĻĢā§āϰāϤ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤
āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāύā§āϝāĻžāϏ
āϏāĻĢāϞ āĻšāϞā§, GetModelStatusResponse
protobuf-āĻāϰ āĻāĻāĻāĻŋ JSON āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻž āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
āĻŽāĻĄā§āϞ āĻŽā§āĻāĻžāĻĄā§āĻāĻž API
āĻāĻ API āύāĻŋāĻŦāĻŋāĻĄāĻŧāĻāĻžāĻŦā§ PredictionService.GetModelMetadata
gRPC API āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻŽāĻĄā§āϞā§āϰ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
URL
GET http://host:port/v1/models/${MODEL_NAME}[/versions/${VERSION}|/labels/${LABEL}]/metadata
/versions/${VERSION}
āĻŦāĻž /labels/${LABEL}
āϏāĻš āĻāĻā§āĻāĻŋāĻāĨ¤ āĻŦāĻžāĻĻ āĻĻāĻŋāϞ⧠āϏāϰā§āĻŦāĻļā§āώ āϏāĻāϏā§āĻāϰāĻŖā§āϰ āĻāύā§āϝ āĻŽāĻĄā§āϞ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻžāϤ⧠āĻĢā§āϰāϤ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤
āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāύā§āϝāĻžāϏ
āϏāĻĢāϞ āĻšāϞā§, GetModelMetadataResponse
protobuf-āĻāϰ āĻāĻāĻāĻŋ JSON āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻž āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
āĻļā§āϰā§āĻŖā§āĻŦāĻĻā§āϧ āĻāĻŦāĻ āĻĒā§āϰāϤā§āϝāĻžāĻŦāϰā§āϤāύ API
āĻāĻ API āĻāύāĻŋāώā§āĻ āĻāĻžāĻŦā§ PredictionService
gRPC API-āĻāϰ Classify
āĻāĻŦāĻ Regress
āĻĒāĻĻā§āϧāϤāĻŋ āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āĨ¤
URL
POST http://host:port/v1/models/${MODEL_NAME}[/versions/${VERSION}|/labels/${LABEL}]:(classify|regress)
/versions/${VERSION}
āĻŦāĻž /labels/${LABEL}
āϏāĻš āĻāĻā§āĻāĻŋāĻāĨ¤ āĻŦāĻžāĻĻ āĻĻāĻŋāϞ⧠āϏāϰā§āĻŦāĻļā§āώ āϏāĻāϏā§āĻāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻŦāĻŋāύā§āϝāĻžāϏ āĻ āύā§āϰā§āϧ
classify
āĻāĻŦāĻ regress
API-āĻāϰ āĻāύā§āϝ āĻ
āύā§āϰā§āϧā§āϰ āĻŦāĻĄāĻŋ āĻ
āĻŦāĻļā§āϝāĻ āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻ āĻšāϤ⧠āĻšāĻŦā§ āϝāĻž āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻĢāϰā§āĻŽā§āϝāĻžāĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§:
{
// Optional: serving signature to use.
// If unspecifed default serving signature is used.
"signature_name": <string>,
// Optional: Common context shared by all examples.
// Features that appear here MUST NOT appear in examples (below).
"context": {
"<feature_name3>": <value>|<list>
"<feature_name4>": <value>|<list>
},
// List of Example objects
"examples": [
{
// Example 1
"<feature_name1>": <value>|<list>,
"<feature_name2>": <value>|<list>,
...
},
{
// Example 2
"<feature_name1>": <value>|<list>,
"<feature_name2>": <value>|<list>,
...
}
...
]
}
<value>
āĻšāϞ āĻāĻāĻāĻŋ JSON āϏāĻāĻā§āϝāĻž (āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻŦāĻž āĻĻāĻļāĻŽāĻŋāĻ), JSON āϏā§āĻā§āϰāĻŋāĻ, āĻŦāĻž āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻ āϝāĻž āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĄā§āĻāĻž āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϤā§āĻŦ āĻāϰ⧠(āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāϰāĻŖā§āϰ āĻāύā§āϝ āύā§āĻā§ āĻāύāĻā§āĻĄāĻŋāĻ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŽāĻžāύ āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻĻā§āĻā§āύ)āĨ¤ <list>
āĻāĻ āϧāϰāύā§āϰ āĻŽāĻžāύāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻžāĨ¤ āĻāĻ āĻŦāĻŋāύā§āϝāĻžāϏāĻāĻŋ gRPC-āĻāϰ ClassificationRequest
āĻāĻŦāĻ RegressionRequest
āĻĒā§āϰā§āĻā§āϰ āĻ
āύā§āϰā§āĻĒāĨ¤ āĻāĻāϝāĻŧ āϏāĻāϏā§āĻāϰāĻŖ Example
āĻŦāϏā§āϤā§āϰ āϤāĻžāϞāĻŋāĻāĻž āĻā§āϰāĻšāĻŖ āĻāϰā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāύā§āϝāĻžāϏ
āĻāĻāĻāĻŋ classify
āĻ
āύā§āϰā§āϧ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻĄāĻŋāϤ⧠āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻŦāĻŋāύā§āϝāĻžāϏāĻŋāϤ:
{
"result": [
// List of class label/score pairs for first Example (in request)
[ [<label1>, <score1>], [<label2>, <score2>], ... ],
// List of class label/score pairs for next Example (in request)
[ [<label1>, <score1>], [<label2>, <score2>], ... ],
...
]
}
<label>
āĻšāϞ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻ (āϝāĻž āĻāĻāĻāĻŋ āĻāĻžāϞāĻŋ āϏā§āĻā§āϰāĻŋāĻ āĻšāϤ⧠āĻĒāĻžāϰ⧠""
āϝāĻĻāĻŋ āĻŽāĻĄā§āϞāĻāĻŋāϰ āϏā§āĻā§āϰā§āϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻāĻāĻāĻŋ āϞā§āĻŦā§āϞ āύāĻž āĻĨāĻžāĻā§)āĨ¤ <score>
āĻāĻāĻāĻŋ āĻĻāĻļāĻŽāĻŋāĻ (āĻĢā§āϞā§āĻāĻŋāĻ āĻĒāϝāĻŧā§āύā§āĻ) āϏāĻāĻā§āϝāĻžāĨ¤
regress
āĻ
āύā§āϰā§āϧāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻĄāĻŋāϤ⧠āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻŦāĻŋāύā§āϝāĻžāϏ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§:
{
// One regression value for each example in the request in the same order.
"result": [ <value1>, <value2>, <value3>, ...]
}
<value>
āĻāĻāĻāĻŋ āĻĻāĻļāĻŽāĻŋāĻ āϏāĻāĻā§āϝāĻžāĨ¤
gRPC API-āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž ClassificationResponse
āĻāĻŦāĻ RegressionResponse
āĻĒā§āϰā§āĻā§āϰ āϏāĻžāĻĨā§ āĻāĻ āĻĢāϰā§āĻŽā§āϝāĻžāĻā§āϰ āĻŽāĻŋāϞ āϞāĻā§āώā§āϝ āĻāϰāĻŦā§āύāĨ¤
āĻ āύā§āĻŽāĻžāύ API
āĻāĻ API āĻāύāĻŋāώā§āĻ āĻāĻžāĻŦā§ PredictionService.Predict
gRPC API āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āĨ¤
URL
POST http://host:port/v1/models/${MODEL_NAME}[/versions/${VERSION}|/labels/${LABEL}]:predict
/versions/${VERSION}
āĻŦāĻž /labels/${LABEL}
āϏāĻš āĻāĻā§āĻāĻŋāĻāĨ¤ āĻŦāĻžāĻĻ āĻĻāĻŋāϞ⧠āϏāϰā§āĻŦāĻļā§āώ āϏāĻāϏā§āĻāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻŦāĻŋāύā§āϝāĻžāϏ āĻ āύā§āϰā§āϧ
predict
API-āĻāϰ āĻāύā§āϝ āĻ
āύā§āϰā§āϧā§āϰ āĻŦāĻĄāĻŋ āĻ
āĻŦāĻļā§āϝāĻ JSON āĻ
āĻŦāĻā§āĻā§āĻ āĻšāϤ⧠āĻšāĻŦā§ āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻŦāĻŋāύā§āϝāĻžāϏāĻŋāϤ:
{
// (Optional) Serving signature to use.
// If unspecifed default serving signature is used.
"signature_name": <string>,
// Input Tensors in row ("instances") or columnar ("inputs") format.
// A request can have either of them but NOT both.
"instances": <value>|<(nested)list>|<list-of-objects>
"inputs": <value>|<(nested)list>|<object>
}
āϏāĻžāϰāĻŋ āĻŦāĻŋāύā§āϝāĻžāϏ⧠āĻāύāĻĒā§āĻ āĻā§āύāϏāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻžāĨ¤
āĻāĻ āĻŦāĻŋāύā§āϝāĻžāϏāĻāĻŋ gRPC API āĻāϰ PredictRequest
āĻĒā§āϰā§āĻā§ āĻāĻŦāĻ CMLE āĻĒā§āϰā§āĻŦāĻžāĻāĻžāϏ API āĻāϰ āĻ
āύā§āϰā§āĻĒāĨ¤ āĻāĻ āĻŦāĻŋāύā§āϝāĻžāϏāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϝāĻĻāĻŋ āϏāĻŽāϏā§āϤ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻ āĻā§āύāϏāϰā§āϰ 0-āϤāĻŽ āĻŽāĻžāϤā§āϰāĻž āĻāĻāĻ āĻĨāĻžāĻā§āĨ¤ āϝāĻĻāĻŋ āϤāĻžāϰāĻž āύāĻž āĻāϰā§, āϤāĻžāĻšāϞ⧠āύā§āĻā§ āĻŦāϰā§āĻŖāĻŋāϤ āĻāϞāĻžāĻŽāĻžāϰ āĻŦāĻŋāύā§āϝāĻžāϏāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āϏāĻžāϰāĻŋ āĻŦāĻŋāύā§āϝāĻžāϏā§, āĻāύāĻĒā§āĻāĻā§āϞāĻŋ JSON āĻ āύā§āϰā§āϧ⧠āĻāύāϏā§āĻā§āϝāĻžāύā§āϏ āĻā§-āϤ⧠āĻā§ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āϝāĻāύ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻ āĻĨāĻžāĻā§, āĻāύāĻĒā§āĻāĻāĻŋāϰ āĻŽāĻžāύ āĻšāϤ⧠āĻāύāϏā§āĻā§āϝāĻžāύā§āϏ āĻā§-āĻāϰ āĻŽāĻžāύ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύ:
{
// List of 3 scalar tensors.
"instances": [ "foo", "bar", "baz" ]
}
{
// List of 2 tensors each of [1, 2] shape
"instances": [ [[1, 2]], [[3, 4]] ]
}
āĻā§āύāϏāϰāĻā§āϞāĻŋ āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻāĻāĻžāĻŦā§ āύā§āϏā§āĻā§āĻĄ āύā§āĻā§āĻļāύ⧠āĻĒā§āϰāĻāĻžāĻļ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻžāϰāĻŖ āϤāĻžāϞāĻŋāĻāĻžāĻāĻŋāĻā§ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āϏāĻŽāϤāϞ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤
āĻāĻāĻžāϧāĻŋāĻ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻā§āϰ āĻāύā§āϝ, āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻāĻā§āĻŽ āĻāύāĻĒā§āĻ āύāĻžāĻŽ/āĻā§āύāϏāϰ āĻŽāĻžāύ āĻā§āĻĄāĻŧāĻž āϏāĻŽā§āĻŦāϞāĻŋāϤ āĻāĻāĻāĻŋ āĻŦāϏā§āϤ⧠āĻšāϤ⧠āĻĒāĻžāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋāĨ¤ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāĻŋāϏāĻžāĻŦā§, āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĻā§āĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϏāĻš āĻāĻāĻāĻŋ āĻ āύā§āϰā§āϧ, āĻĒā§āϰāϤāĻŋāĻāĻŋāϤ⧠āϤāĻŋāύāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻ āĻā§āύāϏāϰā§āϰ āĻāĻāĻāĻŋ āϏā§āĻ āϰāϝāĻŧā§āĻā§:
{
"instances": [
{
"tag": "foo",
"signal": [1, 2, 3, 4, 5],
"sensor": [[1, 2], [3, 4]]
},
{
"tag": "bar",
"signal": [3, 4, 1, 2, 5]],
"sensor": [[4, 5], [6, 8]]
}
]
}
āĻĻā§āϰāώā§āĻāĻŦā§āϝ, āĻĒā§āϰāϤāĻŋāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻ ("āĻā§āϝāĻžāĻ", "āϏāĻŋāĻāύā§āϝāĻžāϞ", "āϏā§āύā§āϏāϰ") āĻāĻāĻ 0-āϤāĻŽ āĻŽāĻžāϤā§āϰāĻž (āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§ āĻĻā§āĻāĻŋ , āĻāĻĻāĻžāĻšāϰāĻŖ āϤāĻžāϞāĻŋāĻāĻžāϝāĻŧ āĻĻā§āĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻĨāĻžāĻāĻžāϝāĻŧ) āĻ āύā§āĻŽāĻžāύ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāύāĻĒā§āĻāĻā§āϞāĻŋāϰ āύāĻžāĻŽ āĻĻāĻŋāϝāĻŧā§ āĻĨāĻžāĻā§āύ āϝāĻžāϰ 0-āϤāĻŽ āĻŽāĻžāϤā§āϰāĻž āĻāĻŋāύā§āύ, āύā§āĻā§ āĻŦāϰā§āĻŖāĻŋāϤ āĻāϞāĻžāĻŽāĻžāϰ āĻŦāĻŋāύā§āϝāĻžāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āĻāϞāĻžāĻŽ āĻŦāĻŋāύā§āϝāĻžāϏ⧠āĻāύāĻĒā§āĻ āĻā§āύāϏāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻžāĨ¤
āĻāĻĒāύāĻžāϰ āĻāύāĻĒā§āĻ āĻā§āύāϏāϰāĻā§āϞāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāϤ⧠āĻāĻ āĻŦāĻŋāύā§āϝāĻžāϏāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āϝāĻĻāĻŋ āĻĒā§āĻĨāĻ āύāĻžāĻŽā§āϰ āĻāύāĻĒā§āĻāĻā§āϞāĻŋāϰ āĻāĻāĻ 0-āϤāĻŽ āĻŽāĻžāϤā§āϰāĻž āύāĻž āĻĨāĻžāĻā§ āĻŦāĻž āĻāĻĒāύāĻŋ āĻāϰāĻ āĻāĻŽāĻĒā§āϝāĻžāĻā§āĻ āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻž āĻāĻžāύāĨ¤ āĻāĻ āĻŦāĻŋāύā§āϝāĻžāϏāĻāĻŋ gRPC Predict
āĻ
āύā§āϰā§āϧā§āϰ inputs
āĻā§āώā§āϤā§āϰā§āϰ āĻ
āύā§āϰā§āĻĒāĨ¤
āĻāϞāĻžāĻŽāĻžāϰ āĻŦāĻŋāύā§āϝāĻžāϏā§, āĻāύāĻĒā§āĻāĻā§āϞāĻŋ JSON āĻ āύā§āϰā§āϧ⧠āĻāύāĻĒā§āĻ āĻā§-āĻāϰ āϏāĻžāĻĨā§ āĻā§ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻāύāĻĒā§āĻ āĻā§-āĻāϰ āĻŽāĻžāύ āĻšāϝāĻŧ āĻāĻāĻāĻŋ āĻāĻāĻ āĻāύāĻĒā§āĻ āĻā§āύāϏāϰ āĻŦāĻž āĻā§āύāϏāϰā§āϰ āĻāύāĻĒā§āĻ āύāĻžāĻŽā§āϰ āĻāĻāĻāĻŋ āĻŽāĻžāύāĻāĻŋāϤā§āϰ (āϤāĻžāĻĻā§āϰ āĻĒā§āϰāĻžāĻā§āϤāĻŋāĻ āύā§āϏā§āĻā§āĻĄ āĻāĻāĻžāϰ⧠āϤāĻžāϞāĻŋāĻāĻžāĻā§āĻā§āϤ)āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāύāĻĒā§āĻā§āϰ āĻāĻā§āĻāĻžāĻŽāϤ āĻāĻā§āϤāĻŋ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻāĻĒāϰ⧠āĻŦāϰā§āĻŖāĻŋāϤ āϏāĻžāϰāĻŋ āĻŦāĻŋāύā§āϝāĻžāϏā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻ āύā§āϏāĻžāϰā§/ āĻāĻāĻ 0-āϤāĻŽ āĻŽāĻžāϤā§āϰāĻž (āĻāϰāĻĢā§ āĻŦā§āϝāĻžāĻā§āϰ āĻāĻāĻžāϰ) āĻļā§āϝāĻŧāĻžāϰ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤
āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āĻāϞāĻžāĻŽāĻžāϰ āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻž āύāĻŋāĻŽā§āύāϰā§āĻĒ:
{
"inputs": {
"tag": ["foo", "bar"],
"signal": [[1, 2, 3, 4, 5], [3, 4, 1, 2, 5]],
"sensor": [[[1, 2], [3, 4]], [[4, 5], [6, 8]]]
}
}
āĻĻā§āϰāώā§āĻāĻŦā§āϝ, āĻāύāĻĒā§āĻāĻā§āϞāĻŋ āĻāĻāĻāĻŋ JSON āĻ āĻŦāĻā§āĻā§āĻ āĻāĻŦāĻ āĻāĻĻāĻžāĻšāϰāĻŖāĻā§āϞāĻŋāϰ āĻŽāϤ⧠āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻž āύāϝāĻŧ (āϏāĻžāϰāĻŋāϰ āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšā§āϤ)āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻĒā§āϰā§āĻŦā§ āĻŦāϰā§āĻŖāĻŋāϤ āϏāĻžāϰāĻŋ āĻŦāĻŋāύā§āϝāĻžāϏ⧠āĻāϰāĻž āĻĒā§āĻĨāĻ āϏāĻžāϰāĻŋāĻā§āϞāĻŋāϤ⧠āϤāĻžāĻĻā§āϰ āĻāύāϰā§āϞ āĻāϰāĻžāϰ āĻŦāĻŋāĻĒāϰā§āϤ⧠āϏāĻŽāϏā§āϤ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāύāĻĒā§āĻ āĻāĻāϏāĻžāĻĨā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāĻāĻŋ āĻāĻĒāϏā§āĻĨāĻžāĻĒāύāĻžāĻā§ āĻāĻŽā§āĻĒā§āϝāĻžāĻā§āĻ āĻāϰ⧠āϤā§āϞ⧠(āĻāĻŋāύā§āϤ⧠āĻāĻŽ āĻĒāĻ āύāϝā§āĻā§āϝ)āĨ¤
āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāύā§āϝāĻžāϏ
predict
āĻ
āύā§āϰā§āϧ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻĄāĻŋāϤ⧠āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
āϏāĻžāϰāĻŋ āĻŦāĻŋāύā§āϝāĻžāϏ⧠āĻāĻāĻāĻŋ āĻ āύā§āϰā§āϧ āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāύā§āϝāĻžāϏāĻŋāϤ āĻāĻā§:
{
"predictions": <value>|<(nested)list>|<list-of-objects>
}
āϝāĻĻāĻŋ āĻŽāĻĄā§āϞā§āϰ āĻāĻāĻāĻĒā§āĻā§ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻā§āύāϏāϰ āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāĻŽāϰāĻž āϏā§āĻā§āϞāĻžāϰ āĻŦāĻž āϤāĻžāϞāĻŋāĻāĻž āĻŽāĻžāύāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻžāϝāĻŧ āύāĻžāĻŽ āĻāĻŦāĻ predictions
āĻā§ āĻŽāĻžāύāĻāĻŋāϤā§āϰāĻā§āϞāĻŋ āĻŦāĻžāĻĻ āĻĻāĻŋāĻāĨ¤ āϝāĻĻāĻŋ āĻŽāĻĄā§āϞāĻāĻŋ āĻāĻāĻžāϧāĻŋāĻ āύāĻžāĻŽāϝā§āĻā§āϤ āĻā§āύāϏāϰ āĻāĻāĻāĻĒā§āĻ āĻāϰā§, āĻāĻŽāϰāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻŦāϏā§āϤā§āϰ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻž āĻāĻāĻāĻĒā§āĻ āĻāϰāĻŋ, āĻāĻĒāϰ⧠āĻāϞā§āϞāĻŋāĻāĻŋāϤ āϏāĻžāϰāĻŋ-āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻ
āύā§āϰā§āϧā§āϰ āĻ
āύā§āϰā§āĻĒāĨ¤
āĻāϞāĻžāĻŽāĻžāϰ āĻŦāĻŋāύā§āϝāĻžāϏ⧠āĻāĻāĻāĻŋ āĻ āύā§āϰā§āϧā§āϰ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻĢāϰā§āĻŽā§āϝāĻžāĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§:
{
"outputs": <value>|<(nested)list>|<object>
}
āϝāĻĻāĻŋ āĻŽāĻĄā§āϞā§āϰ āĻāĻāĻāĻĒā§āĻā§ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻā§āύāϏāϰ āĻĨāĻžāĻā§, āĻāĻŽāϰāĻž āύāĻžāĻŽāĻāĻŋ āĻŦāĻžāĻĻ āĻĻāĻŋāĻ āĻāĻŦāĻ āϏā§āĻā§āϞāĻžāϰ āĻŦāĻž āϤāĻžāϞāĻŋāĻāĻžāϰ āĻŽāĻžāύā§āϰ āϤāĻžāϞāĻŋāĻāĻžāϝāĻŧ āĻā§ āĻŽāĻžāύāĻāĻŋāϤā§āϰ outputs
āĨ¤ āϝāĻĻāĻŋ āĻŽāĻĄā§āϞāĻāĻŋ āĻāĻāĻžāϧāĻŋāĻ āύāĻžāĻŽāϝā§āĻā§āϤ āĻā§āύāϏāϰ āĻāĻāĻāĻĒā§āĻ āĻāϰā§, āĻāĻŽāϰāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāĻāĻāĻŋ āĻŦāϏā§āϤ⧠āĻāĻāĻāĻĒā§āĻ āĻāϰāĻŋāĨ¤ āĻāĻ āĻŦāϏā§āϤā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻā§ āĻāĻāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āĻāĻāĻāĻĒā§āĻ āĻā§āύāϏāϰā§āϰ āϏāĻžāĻĨā§ āĻŽāĻŋāϞ⧠āϝāĻžāϝāĻŧāĨ¤ āĻĢāϰāĻŽā§āϝāĻžāĻāĻāĻŋ āĻāĻĒāϰ⧠āĻāϞā§āϞāĻŋāĻāĻŋāϤ āĻāϞāĻžāĻŽ āĻŦāĻŋāύā§āϝāĻžāϏ⧠āĻ
āύā§āϰā§āϧā§āϰ āĻ
āύā§āϰā§āĻĒāĨ¤
āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŽāĻžāύā§āϰ āĻāĻāĻāĻĒā§āĻ
TensorFlow āύāύ-āĻŦāĻžāĻāύāĻžāϰ⧠āĻāĻŦāĻ āĻŦāĻžāĻāύāĻžāϰāĻŋ āϏā§āĻā§āϰāĻŋāĻāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻāϰ⧠āύāĻžāĨ¤ āϏāĻŦāĻā§āϞā§āĻ DT_STRING
āĻĒā§āϰāĻāĻžāϰāĨ¤ āύāĻžāĻŽāϝā§āĻā§āϤ āĻā§āύāϏāϰ āϝā§āĻā§āϞāĻŋāϰ āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĒā§āϰāϤā§āϝāϝāĻŧ āĻšāĻŋāϏāĻžāĻŦā§ _bytes
āĻāĻā§ āϤāĻžāĻĻā§āϰ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŽāĻžāύ āĻŦāϞ⧠āĻŽāύ⧠āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āύā§āĻā§āϰ āĻāύāĻā§āĻĄāĻŋāĻ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŽāĻžāύ āĻŦāĻŋāĻāĻžāĻā§ āĻŦāϰā§āĻŖāĻŋāϤ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻ āĻŽāĻžāύāĻā§āϞāĻŋ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāύāĻā§āĻĄ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤
JSON āĻŽā§āϝāĻžāĻĒāĻŋāĻ
RESTful APIāĻā§āϞāĻŋ JSON-āĻ āĻāĻāĻāĻŋ āĻā§āϝāĻžāύā§āύāĻŋāĻāĻžāϞ āĻāύāĻā§āĻĄāĻŋāĻ āϏāĻŽāϰā§āĻĨāύ āĻāϰā§, āϝāĻž āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻāĻžāĻ āĻāϰāĻž āϏāĻšāĻ āĻāϰ⧠āϤā§āϞā§āĨ¤ āϏāĻŽāϰā§āĻĨāĻŋāϤ āĻĒā§āϰāĻāĻžāϰā§āϰ āĻāύā§āϝ, āĻāύāĻā§āĻĄāĻŋāĻāĻā§āϞāĻŋ āύā§āĻā§āϰ āĻā§āĻŦāĻŋāϞ⧠āĻāĻžāĻāĻĒ-āĻŦāĻžāĻ-āĻāĻžāĻāĻĒ āĻāĻŋāϤā§āϤāĻŋāϤ⧠āĻŦāϰā§āĻŖāύāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āύā§āĻā§ āϤāĻžāϞāĻŋāĻāĻžāĻā§āĻā§āϤ āύāϝāĻŧ āĻĒā§āϰāĻāĻžāϰāĻā§āϞāĻŋ āĻ āϏāĻŽāϰā§āĻĨāĻŋāϤ āĻšāϤ⧠āĻŦā§āĻāĻžāϝāĻŧ⧎
TF āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ | JSON āĻŽāĻžāύ | JSON āĻāĻĻāĻžāĻšāϰāĻŖ | āύā§āĻ |
---|---|---|---|
DT_BOOL | āϏāϤā§āϝ, āĻŽāĻŋāĻĨā§āϝāĻž | āϏāϤā§āϝ, āĻŽāĻŋāĻĨā§āϝāĻž | |
DT_STRING | āϏā§āĻā§āϰāĻŋāĻ | "āĻšā§āϝāĻžāϞ⧠āĻāϝāĻŧāĻžāϰā§āϞā§āĻĄ!" | āϝāĻĻāĻŋ DT_STRING āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŦāĻžāĻāĻ (āϝā§āĻŽāύ āϏāĻŋāϰāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻāĻĄ āĻāĻŽā§āĻ āĻŦāĻžāĻāĻ āĻŦāĻž āĻĒā§āϰā§āĻā§āĻŦāĻžāĻĢ) āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϤā§āĻŦ āĻāϰā§, āϤāĻžāĻšāϞ⧠āĻŦā§āϏ64 āĻ āĻāύāĻā§āĻĄ āĻāϰā§āύāĨ¤ āĻāϰāĻ āϤāĻĨā§āϝā§āϰ āĻāύā§āϝ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŽāĻžāύ āĻāύāĻā§āĻĄāĻŋāĻ āĻĻā§āĻā§āύāĨ¤ |
DT_INT8, DT_UINT8, DT_INT16, DT_INT32, DT_UINT32, DT_INT64, DT_UINT64 | āϏāĻāĻā§āϝāĻž | 1, -10, 0 | JSON āĻŽāĻžāύ āĻāĻāĻāĻŋ āĻĻāĻļāĻŽāĻŋāĻ āϏāĻāĻā§āϝāĻž āĻšāĻŦā§āĨ¤ |
DT_FLOAT, DT_DOUBLE | āϏāĻāĻā§āϝāĻž | 1.1, -10.0, 0, NaN , Infinity | JSON āĻŽāĻžāύ āĻšāĻŦā§ āĻāĻāĻāĻŋ āϏāĻāĻā§āϝāĻž āĻŦāĻž āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āώ āĻā§āĻā§āύ āĻŽāĻžāύ - NaN , Infinity , āĻāĻŦāĻ -Infinity ⧎ āĻāϰāĻ āϤāĻĨā§āϝā§āϰ āĻāύā§āϝ JSON āϏāĻžāĻŽāĻā§āĻāϏā§āϝ āĻĻā§āĻā§āύāĨ¤ āĻāĻā§āϏāĻĒā§āύā§āύā§āĻ āύā§āĻā§āĻļāύāĻ āĻā§āĻšā§āϤ āĻšāϝāĻŧāĨ¤ |
āĻĢā§āϞā§āĻāĻŋāĻ āĻĒāϝāĻŧā§āύā§āĻ āϝāĻĨāĻžāϰā§āĻĨāϤāĻž
JSON āĻāϰ āĻāĻāĻāĻŋ āĻāĻāĻ āϏāĻāĻā§āϝāĻž āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻāĻā§āĨ¤ āĻāĻāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻāύāĻĒā§āĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŽāĻžāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āϝāĻžāϰ āĻĢāϞ⧠āύāĻŋāϰā§āĻā§āϞāϤāĻž āύāώā§āĻ āĻšāϝāĻŧāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϝāĻĻāĻŋ āĻāύāĻĒā§āĻ x
āĻāĻāĻāĻŋ float
āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻšāϝāĻŧ āĻāĻŦāĻ āĻāύāĻĒā§āĻ {"x": 1435774380}
IEEE 754 āĻĢā§āϞā§āĻāĻŋāĻ āĻĒāϝāĻŧā§āύā§āĻ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ (āϝā§āĻŽāύ āĻāύā§āĻā§āϞ āĻŦāĻž AMD) āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻšāĻžāϰā§āĻĄāĻāϝāĻŧā§āϝāĻžāϰ⧠āĻāϞāĻŽāĻžāύ āĻŽāĻĄā§āϞ⧠āĻĒāĻžāĻ āĻžāύ⧠āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻŽāĻžāύ āĻšāĻŦā§ āĻāύā§āĻĄāĻžāϰāϞāĻžāĻāĻ āĻšāĻžāϰā§āĻĄāĻāϝāĻŧā§āϝāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āύā§āϰāĻŦā§ 1435774336
āϤ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰāĻž āĻšāĻŦā§ āϝā§āĻšā§āϤ⧠1435774380
āĻāĻāĻāĻŋ 32-āĻŦāĻŋāĻ āĻĢā§āϞā§āĻāĻŋāĻ āĻĒāϝāĻŧā§āύā§āĻ āϏāĻāĻā§āϝāĻžāϤ⧠āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ, āĻĒāϰāĻŋāĻŦā§āĻļāύā§āϰ āĻāύā§āϝ āĻāύāĻĒā§āĻāĻā§āϞāĻŋ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āĻŽāϤā§āĻ āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž āĻāĻāĻŋāϤ, āϤāĻžāĻ āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŽāϏā§āϝāĻžāϝā§āĻā§āϤ āĻšāĻŦā§ āύāĻž āĻāĻžāϰāĻŖ āĻĒā§āϰāĻļāĻŋāĻā§āώāĻŖā§āϰ āϏāĻŽāϝāĻŧ āĻāĻāĻ āϰā§āĻĒāĻžāύā§āϤāϰāĻā§āϞāĻŋ āĻāĻā§āĻāĻŋāϞ⧎ āϝāĻžāĻāĻšā§āĻ, āϏāĻŽā§āĻĒā§āϰā§āĻŖ āύāĻŋāϰā§āĻā§āϞāϤāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϞā§, āĻāĻĒāύāĻžāϰ āĻŽāĻĄā§āϞ⧠āĻāĻāĻāĻŋ āĻ
āύā§āϤāϰā§āύāĻŋāĻšāĻŋāϤ āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻā§āϞāĻŦā§āύ āύāĻž āϝāĻž āĻĒāĻāύā§āĻĻāϏāĻ āύāĻŋāϰā§āĻā§āϞāϤāĻž āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ/āĻ
āĻĨāĻŦāĻž āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ-āϏāĻžāĻāĻĄ āĻā§āĻāĻŋāĻ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŽāĻžāύ āĻāύāĻā§āĻĄāĻŋāĻ
JSON UTF-8 āĻāύāĻā§āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻāύāĻĒā§āĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻŦāĻž āĻā§āύāϏāϰ āĻŽāĻžāύ āĻĨāĻžāĻā§ āϝāĻž āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻšāϤ⧠āĻšāĻŦā§ (āϝā§āĻŽāύ āĻāĻŽā§āĻ āĻŦāĻžāĻāĻ), āĻāĻĒāύāĻžāĻā§ āĻ
āĻŦāĻļā§āϝāĻ āĻŦā§āϏ 64 āĻĄā§āĻāĻž āĻāύāĻā§āĻĄ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ JSON āĻ
āĻŦāĻā§āĻā§āĻā§ āĻāύāĻā§āϝāĻžāĻĒāϏā§āϞā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§ āϝāĻž b64
āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻā§ āĻšāĻŋāϏāĻžāĻŦā§ āϰāϝāĻŧā§āĻā§:
{ "b64": <base64 encoded string> }
āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāύāĻĒā§āĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻŦāĻž āĻā§āύāϏāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŽāĻžāύ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻ āĻŦāϏā§āϤ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ. āĻāĻāĻ āĻĢāϰā§āĻŽā§āϝāĻžāĻ āĻāĻāĻāĻĒā§āĻ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻāύāĻā§āĻĄ āĻāϰāϤā§āĻ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
image
(āĻŦāĻžāĻāύāĻžāϰ⧠āĻĄā§āĻāĻž) āĻāĻŦāĻ caption
āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϏāĻš āĻāĻāĻāĻŋ āĻļā§āϰā§āĻŖāĻŋāĻŦāĻŋāύā§āϝāĻžāϏ āĻ
āύā§āϰā§āϧ āύā§āĻā§ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻā§:
{
"signature_name": "classify_objects",
"examples": [
{
"image": { "b64": "aW1hZ2UgYnl0ZXM=" },
"caption": "seaside"
},
{
"image": { "b64": "YXdlc29tZSBpbWFnZSBieXRlcw==" },
"caption": "mountains"
}
]
}
JSON āϏāĻžāĻŽāĻā§āĻāϏā§āϝ
āĻ
āύā§āĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻŦāĻž āĻā§āύāϏāϰ āĻŽāĻžāύ āĻĢā§āϞā§āĻāĻŋāĻ āĻĒāϝāĻŧā§āύā§āĻ āϏāĻāĻā§āϝāĻžāĨ¤ āϏāϏā§āĻŽ āĻŽāĻžāύ (āϝā§āĻŽāύ 3.14, 1.0 āĻāϤā§āϝāĻžāĻĻāĻŋ) āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻā§āϞāĻŋāϰ NaN
āĻāĻŦāĻ āĻ
-āϏāϏā§āĻŽ ( Infinity
āĻāĻŦāĻ -Infinity
) āĻŽāĻžāύ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻĻā§āϰā§āĻāĻžāĻā§āϝāĻŦāĻļāϤ JSON āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻā§āĻļāύ ( RFC 7159 ) āĻāĻ āĻŽāĻžāύāĻā§āϞāĻŋāĻā§ āĻāĻŋāύāϤ⧠āĻĒāĻžāϰ⧠āύāĻž (āϝāĻĻāĻŋāĻ JavaScript āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻā§āĻļāύ āĻāϰā§)āĨ¤
āĻāĻ āĻĒā§āώā§āĻ āĻžāϝāĻŧ āĻŦāϰā§āĻŖāĻŋāϤ REST API āĻ āύā§āϰā§āϧ/āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž JSON āĻ āĻŦāĻā§āĻā§āĻāĻā§ āĻāĻ āϧāϰāύā§āϰ āĻŽāĻžāύ āĻĨāĻžāĻāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻŋ āĻŦā§āĻāĻžāϝāĻŧ āϝ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤāĻā§āϞāĻŋāϰ āĻŽāϤ⧠āĻ āύā§āϰā§āϧāĻā§āϞāĻŋ āĻŦā§āϧ:
{
"example": [
{
"sensor_readings": [ 1.0, -3.14, Nan, Infinity ]
}
]
}
āĻāĻāĻāĻŋ (āĻāĻ ā§āϰ) āĻŽāĻžāύ āϏāĻŽā§āĻŽāϤ JSON āĻĒāĻžāϰā§āϏāĻžāϰ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻĒāĻžāϰā§āϏ āϤā§āϰā§āĻāĻŋāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāύ āĻāϰāĻŦā§ (āĻĒā§āϰāĻā§āϤ āϏāĻāĻā§āϝāĻžāϰ āϏāĻžāĻĨā§ NaN
āĻāĻŦāĻ Infinity
āĻā§āĻā§āύ āĻŽāĻŋāĻļā§āϰāĻŋāϤ āĻšāĻāϝāĻŧāĻžāϰ āĻāĻžāϰāĻŖā§)āĨ¤ āĻāĻĒāύāĻžāϰ āĻā§āĻĄā§ āĻ
āύā§āϰā§āϧ/āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤā§, āĻāĻ āĻā§āĻā§āύāĻā§āϞāĻŋāĻā§ āϏāĻŽāϰā§āĻĨāύ āĻāϰ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ JSON āĻĒāĻžāϰā§āϏāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ⧎
NaN
, Infinity
, -Infinity
āĻā§āĻā§āύāĻā§āϞāĻŋ proto3 , Python JSON āĻŽāĻĄāĻŋāĻāϞ āĻāĻŦāĻ JavaScript āĻāĻžāώāĻž āĻĻā§āĻŦāĻžāϰāĻž āϏā§āĻŦā§āĻā§āϤāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ
āĻāĻŽāϰāĻž REST API āĻā§āϞāĻŋāĻā§ āĻāĻžāϰā§āϝāĻāϰ āĻĻā§āĻāϤ⧠āĻā§āϞāύāĻž āĻšāĻžāĻĢ_āĻĒā§āϞāĻžāϏ_āĻĨā§āϰāĻŋ āĻŽāĻĄā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
REST API āĻļā§āώ āĻĒāϝāĻŧā§āύā§āĻ āĻĻāĻŋāϝāĻŧā§ āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰ āĻļā§āϰ⧠āĻāϰā§āύ
āĻāĻŋāĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āĻĨā§āĻā§ half_plus_three
āĻŽāĻĄā§āϞ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰā§āύ:
$ mkdir -p /tmp/tfserving
$ cd /tmp/tfserving
$ git clone --depth=1 https://github.com/tensorflow/serving
āĻāĻŽāϰāĻž āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻĄāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻŋāϏā§āĻā§āĻŽā§ āύā§āĻāĻŋāĻāĻāĻžāĻŦā§ āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰ āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻāĻžāύ āϤāĻŦā§ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻāύā§āϝ āϏā§āĻāĻāĻĒ āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āύ āĻāĻŦāĻ REST API āĻļā§āώ āĻĒāϝāĻŧā§āύā§āĻ āϰāĻĒā§āϤāĻžāύāĻŋ āĻāϰāϤ⧠āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰāĻāĻŋ --rest_api_port
āĻŦāĻŋāĻāϞā§āĻĒ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āύ (āĻĄāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻāĻŋāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻ)āĨ¤
$ cd /tmp/tfserving
$ docker pull tensorflow/serving:latest
$ docker run --rm -p 8501:8501 \
--mount type=bind,source=$(pwd),target=$(pwd) \
-e MODEL_BASE_PATH=$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata \
-e MODEL_NAME=saved_model_half_plus_three -t tensorflow/serving:latest
...
.... Exporting HTTP/REST API at:localhost:8501 ...
āĻŽāĻĄā§āϞ āϏāĻžāϰā§āĻāĻžāϰ⧠REST API āĻāϞ āĻāϰā§āύ
āĻāĻāĻāĻŋ āĻāĻŋāύā§āύ āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞā§, REST API āĻāϞ āĻāϰāϤ⧠curl
āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻŽāĻĄā§āϞā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻĒāĻžāύ:
$ curl http://localhost:8501/v1/models/saved_model_half_plus_three
{
"model_version_status": [
{
"version": "123",
"state": "AVAILABLE",
"status": {
"error_code": "OK",
"error_message": ""
}
}
]
}
āĻāĻāĻāĻŋ predict
āĻāϞ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻšāĻŋāϏāĻžāĻŦā§ āĻĻā§āĻāĻžāĻŦā§:
$ curl -d '{"instances": [1.0,2.0,5.0]}' -X POST http://localhost:8501/v1/models/saved_model_half_plus_three:predict
{
"predictions": [3.5, 4.0, 5.5]
}
āĻāĻŦāĻ āĻāĻāĻāĻŋ regress
āĻāϞ āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻĻā§āĻāĻžāϝāĻŧ:
$ curl -d '{"signature_name": "tensorflow/serving/regress", "examples": [{"x": 1.0}, {"x": 2.0}]}' \
-X POST http://localhost:8501/v1/models/saved_model_half_plus_three:regress
{
"results": [3.5, 4.0]
}
āĻĻā§āϰāώā§āĻāĻŦā§āϝ, regress
āĻāĻāĻāĻŋ āĻ
-āĻĄāĻŋāĻĢāϞā§āĻ āϏā§āĻŦāĻžāĻā§āώāϰ āύāĻžāĻŽā§āϰ āĻāĻĒāϰ āĻāĻĒāϞāĻŦā§āϧ āĻāĻŦāĻ āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻž āĻāĻŦāĻļā§āϝāĻāĨ¤ āĻāĻāĻāĻŋ āĻā§āϞ āĻ
āύā§āϰā§āϧ URL āĻŦāĻž āĻŦāĻĄāĻŋ āĻāĻāĻāĻŋ HTTP āϤā§āϰā§āĻāĻŋ āϏā§āĻĨāĻŋāϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
$ curl -i -d '{"instances": [1.0,5.0]}' -X POST http://localhost:8501/v1/models/half:predict
HTTP/1.1 404 Not Found
Content-Type: application/json
Date: Wed, 06 Jun 2018 23:20:12 GMT
Content-Length: 65
{ "error": "Servable not found for request: Latest(half)" }
$