mirror of
https://github.com/hanzo-ml/trainer.git
synced 2026-09-24 00:31:34 +00:00
379 lines
12 KiB
Markdown
379 lines
12 KiB
Markdown
# TFJobClient
|
|
|
|
> TFJobClient(config_file=None, context=None, client_configuration=None, persist_config=True)
|
|
|
|
User can loads authentication and cluster information from kube-config file and stores them in kubernetes.client.configuration. Parameters are as following:
|
|
|
|
parameter | Description
|
|
------------ | -------------
|
|
config_file | Name of the kube-config file. Defaults to `~/.kube/config`. Note that for the case that the SDK is running in cluster and you want to operate tfjob in another remote cluster, user must set `config_file` to load kube-config file explicitly, e.g. `TFJobClient(config_file="~/.kube/config")`. |
|
|
context |Set the active context. If is set to None, current_context from config file will be used.|
|
|
client_configuration | The kubernetes.client.Configuration to set configs to.|
|
|
persist_config | If True, config file will be updated when changed (e.g GCP token refresh).|
|
|
|
|
|
|
The APIs for TFJobClient are as following:
|
|
|
|
Class | Method | Description
|
|
------------ | ------------- | -------------
|
|
TFJobClient| [create](#create) | Create TFJob|
|
|
TFJobClient | [get](#get) | Get the specified TFJob or all TFJob in the namespace |
|
|
TFJobClient | [patch](#patch) | Patch the specified TFJob|
|
|
TFJobClient | [delete](#delete) | Delete the specified TFJob |
|
|
TFJobClient | [wait_for_job](#wait_for_job) | Wait for the specified job to finish |
|
|
TFJobClient | [wait_for_condition](#wait_for_condition) | Waits until any of the specified conditions occur |
|
|
TFJobClient | [get_job_status](#get_job_status) | Get the TFJob status|
|
|
TFJobClient | [is_job_running](#is_job_running) | Check if the TFJob status is running |
|
|
TFJobClient | [is_job_succeeded](#is_job_succeeded) | Check if the TFJob status is Succeeded |
|
|
TFJobClient | [get_pod_names](#get_pod_names) | Get pod names of TFJob |
|
|
TFJobClient | [get_logs](#get_logs) | Get training logs of the TFJob |
|
|
|
|
|
|
## create
|
|
> create(tfjob, namespace=None)
|
|
|
|
Create the provided tfjob in the specified namespace
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubernetes.client import V1PodTemplateSpec
|
|
from kubernetes.client import V1ObjectMeta
|
|
from kubernetes.client import V1PodSpec
|
|
from kubernetes.client import V1Container
|
|
|
|
from kubeflow.training import constants
|
|
from kubeflow.training import utils
|
|
from kubeflow.training import V1ReplicaSpec
|
|
from kubeflow.training import KubeflowOrgV1TFJob
|
|
from kubeflow.training import KubeflowOrgV1TFJobList
|
|
from kubeflow.training import KubeflowOrgV1TFJobSpec
|
|
from kubeflow.training import TFJobClient
|
|
|
|
|
|
container = V1Container(
|
|
name="tensorflow",
|
|
image="gcr.io/kubeflow-ci/tf-mnist-with-summaries:1.0",
|
|
command=[
|
|
"python",
|
|
"/var/tf_mnist/mnist_with_summaries.py",
|
|
"--log_dir=/train/logs", "--learning_rate=0.01",
|
|
"--batch_size=150"
|
|
]
|
|
)
|
|
|
|
worker = V1ReplicaSpec(
|
|
replicas=1,
|
|
restart_policy="Never",
|
|
template=V1PodTemplateSpec(
|
|
spec=V1PodSpec(
|
|
containers=[container]
|
|
)
|
|
)
|
|
)
|
|
|
|
tfjob = KubeflowOrgV1TFJob(
|
|
api_version="kubeflow.org/v1",
|
|
kind="TFJob",
|
|
metadata=V1ObjectMeta(name="mnist",namespace=namespace),
|
|
spec=KubeflowOrgV1TFJobSpec(
|
|
clean_pod_policy="None",
|
|
tf_replica_specs={"Worker": worker}
|
|
)
|
|
)
|
|
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.create(tfjob)
|
|
|
|
```
|
|
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
tfjob | [KubeflowOrgV1TFJob](KubeflowOrgV1TFJob.md) | tfjob defination| Required |
|
|
namespace | str | Namespace for tfjob deploying to. If the `namespace` is not defined, will align with tfjob definition, or use current or default namespace if namespace is not specified in tfjob definition. | Optional |
|
|
|
|
### Return type
|
|
object
|
|
|
|
## get
|
|
> get(name=None, namespace=None, watch=False, timeout_seconds=600)
|
|
|
|
Get the created tfjob in the specified namespace
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.get('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name. If the `name` is not specified, it will get all tfjobs in the namespace.| Optional. |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace.| Optional |
|
|
watch | bool | Watch the created TFJob if `True`, otherwise will return the created TFJob object. Stop watching if TFJob reaches the optional specified `timeout_seconds` or once the TFJob status `Succeeded` or `Failed`. | Optional |
|
|
timeout_seconds | int | Timeout seconds for watching. Defaults to 600. | Optional |
|
|
|
|
### Return type
|
|
object
|
|
|
|
|
|
## patch
|
|
> patch(name, tfjob, namespace=None)
|
|
|
|
Patch the created tfjob in the specified namespace.
|
|
|
|
Note that if you want to set the field from existing value to `None`, `patch` API may not work, you need to use [replace](#replace) API to remove the field value.
|
|
|
|
### Example
|
|
|
|
```python
|
|
|
|
tfjob = KubeflowOrgV1TFJob(
|
|
api_version="kubeflow.org/v1",
|
|
... #update something in TFJob spec
|
|
)
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.patch('mnist', isvc)
|
|
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
tfjob | [KubeflowOrgV1TFJob](KubeflowOrgV1TFJob.md) | tfjob defination| Required |
|
|
namespace | str | The tfjob's namespace for patching. If the `namespace` is not defined, will align with tfjob definition, or use current or default namespace if namespace is not specified in tfjob definition. | Optional|
|
|
|
|
### Return type
|
|
object
|
|
|
|
|
|
## delete
|
|
> delete(name, namespace=None)
|
|
|
|
Delete the created tfjob in the specified namespace
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.delete('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace. | Optional|
|
|
|
|
### Return type
|
|
object
|
|
|
|
|
|
## wait_for_job
|
|
> wait_for_job(name,
|
|
> namespace=None,
|
|
> timeout_seconds=600,
|
|
> polling_interval=30,
|
|
> watch=False,
|
|
> status_callback=None):
|
|
|
|
Wait for the specified job to finish.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.wait_for_job('mnist', namespace='kubeflow')
|
|
|
|
# The API also supports watching the TFJob status till it's Succeeded or Failed.
|
|
tfjob_client.wait_for_job('mnist', namespace=namespace, watch=True)
|
|
NAME STATE TIME
|
|
mnist Created 2019-12-31T09:20:07Z
|
|
mnist Running 2019-12-31T09:20:19Z
|
|
mnist Running 2019-12-31T09:20:19Z
|
|
mnist Succeeded 2019-12-31T09:22:04Z
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace. | Optional|
|
|
timeout_seconds | int | How long to wait for the job, default wait for 600 seconds. | Optional|
|
|
polling_interval | int | How often to poll for the status of the job.| Optional|
|
|
status_callback | str | Callable. If supplied this callable is invoked after we poll the job. Callable takes a single argument which is the tfjob.| Optional|
|
|
watch | bool | Watch the TFJob if `True`. Stop watching if TFJob reaches the optional specified `timeout_seconds` or once the TFJob status `Succeeded` or `Failed`. | Optional |
|
|
|
|
### Return type
|
|
object
|
|
|
|
|
|
## wait_for_condition
|
|
> wait_for_condition(name,
|
|
> expected_condition,
|
|
> namespace=None,
|
|
> timeout_seconds=600,
|
|
> polling_interval=30,
|
|
> status_callback=None):
|
|
|
|
|
|
Waits until any of the specified conditions occur.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.wait_for_condition('mnist', expected_condition=["Succeeded", "Failed"], namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
expected_condition |List |A list of conditions. Function waits until any of the supplied conditions is reached.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace. | Optional|
|
|
timeout_seconds | int | How long to wait for the job, default wait for 600 seconds. | Optional|
|
|
polling_interval | int | How often to poll for the status of the job.| Optional|
|
|
status_callback | str | Callable. If supplied this callable is invoked after we poll the job. Callable takes a single argument which is the tfjob.| Optional|
|
|
|
|
### Return type
|
|
object
|
|
|
|
## get_job_status
|
|
> get_job_status(name, namespace=None)
|
|
|
|
Returns TFJob status, such as Running, Failed or Succeeded.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.get_job_status('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name. | |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace.| Optional |
|
|
|
|
### Return type
|
|
Str
|
|
|
|
## is_job_running
|
|
> is_job_running(name, namespace=None)
|
|
|
|
Returns True if the TFJob running; false otherwise.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.is_job_running('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace.| Optional |
|
|
|
|
### Return type
|
|
Bool
|
|
|
|
## is_job_succeeded
|
|
> is_job_succeeded(name, namespace=None)
|
|
|
|
Returns True if the TFJob succeeded; false otherwise.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.is_job_succeeded('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace.| Optional |
|
|
|
|
### Return type
|
|
Bool
|
|
|
|
|
|
## get_pod_names
|
|
> get_pod_names(name, namespace=None, master=False, replica_type=None, replica_index=None)
|
|
|
|
Get pod names of the TFJob.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.get_pod_names('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace.| Optional |
|
|
master | bool | Only get pod with label 'job-role: master' pod if True. | |
|
|
replica_type | str | User can specify one of 'worker, ps, chief' to only get one type pods. By default get all type pods.| |
|
|
replica_index | str | User can specfy replica index to get one pod of the TFJob. | |
|
|
|
|
### Return type
|
|
Set
|
|
|
|
|
|
## get_logs
|
|
> get_logs(name, namespace=None, master=True, replica_type=None, replica_index=None, follow=False)
|
|
|
|
Get training logs of the TFJob. By default only get the logs of Pod that has labels 'job-role: master', to get all pods logs, specfy the `master=False`.
|
|
|
|
### Example
|
|
|
|
```python
|
|
from kubeflow.training import TFJobClient
|
|
|
|
tfjob_client = TFJobClient()
|
|
tfjob_client.get_logs('mnist', namespace='kubeflow')
|
|
```
|
|
|
|
### Parameters
|
|
Name | Type | Description | Notes
|
|
------------ | ------------- | ------------- | -------------
|
|
name | str | The TFJob name.| |
|
|
namespace | str | The tfjob's namespace. Defaults to current or default namespace.| Optional |
|
|
master | bool | Only get pod with label 'job-role: master' pod if True. | |
|
|
replica_type | str | User can specify one of 'worker, ps, chief' to only get one type pods. By default get all type pods.| |
|
|
replica_index | str | User can specfy replica index to get one pod of the TFJob. | |
|
|
follow | bool | Follow the log stream of the pod. Defaults to false. | |
|
|
|
|
### Return type
|
|
Str
|