Submitting Workloads via HTTP/REST¶
You can submit Workloads via HTTP calls, using the Kubernetes REST API.
Submit Workload Example¶
To submit a workload via HTTP, run the following:
curl -X POST \ #
'https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/trainingworkloads' \
--header 'Content-Type: application/yaml' \
--header 'Authorization: Bearer <BEARER>' \ #
--data-raw 'apiVersion: run.ai/v2alpha1
kind: TrainingWorkload #
metadata:
name: job-1
spec:
gpu:
value: "1"
image:
value: gcr.io/run-ai-demo/quickstart
name:
value: job-1
Run: runai list jobs
to see the new Workload.
Delete Workload Example¶
To delete a workload run:
curl -X DELETE \ #
'https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/trainingworkloads/<JOB-NAME>' \
--header 'Content-Type: application/yaml' \
--header 'Authorization: Bearer <BEARER>' #
Suspend/Stop workload example¶
To suspend or stop a workload run:
curl -X PATCH \ #
'https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/interactiveworkload/<JOB-NAME>' \
--header 'Content-Type: application/merge-patch+json' \
--header 'Authorization: Bearer <TOKEN>' \ #
--data '{"spec":{"active": {"value": false}}}'
Using other Programming Languages¶
You can use any Kubernetes client library together with the YAML documentation above to submit workloads via other programming languages. For more information see Kubernetes client libraries.
Python example¶
Create the following file and run it via python:
create-train.py
import json
import requests
#
url = "https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/trainingworkloads"
payload = json.dumps({
"apiVersion": "run.ai/v2alpha1",
"kind": "TrainingWorkload",
"metadata": {
"name": "train1",
"namespace": "runai-team-a"
},
"spec": {
"image": {
"value": "gcr.io/run-ai-demo/quickstart"
},
"name": {
"value": "train1"
},
"gpu": {
"value": "1"
}
}
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <TOKEN>' #
}
response = requests.request("POST", url, headers=headers, data=payload) #
print(json.dumps(json.loads(response.text), indent=4))