Customizing Kubeflow on GKE

Tailoring a GKE deployment of Kubeflow

This guide describes how to customize your deployment of Kubeflow on GoogleKubernetes Engine (GKE) in Google Cloud Platform (GCP).

Customizing Kubeflow before deployment

The Kubeflow deployment process is divided into two steps, build andapply, so that you can modify your configuration before deploying yourKubeflow cluster.

Follow the guide to deploying Kubeflow on GCP.When you reach thesetup and deploy step,skip the kfctl apply command and run the kfctl build commandinstead, as described in that step. Now you can edit the configuration filesbefore deploying Kubeflow.

Customizing an existing deployment

You can also customize an existing Kubeflow deployment. In that case, thisguide assumes that you have already followed the guide todeploying Kubeflow on GCP and have deployedKubeflow to a GKE cluster.

Before you start

This guide assumes the following settings:

  • The ${KF_DIR} environment variable contains the path toyour Kubeflow application directory, which holds your Kubeflow configurationfiles. For example, /opt/my-kubeflow/.
  1. export KF_DIR=<path to your Kubeflow application directory>
  • The ${CONFIG_FILE} environment variable contains the path to yourKubeflow configuration file.
  1. export CONFIG_FILE=${KF_DIR}/kfctl_gcp_iap.0.7.1.yaml

Or:

  1. export CONFIG_FILE=${KF_DIR}/kfctl_gcp_basic_auth.0.7.1.yaml
  • The ${KF_NAME} environment variable contains the name of your Kubeflowdeployment. You can find the name in your${CONFIG_FILE} configuration file, as the value for the metadata.name key.
  1. export KF_NAME=<the name of your Kubeflow deployment>
  • The ${PROJECT} environment variable contains the ID of your GCP project.You can find the project ID in your${CONFIG_FILE} configuration file, as the value for the project key.
  1. export PROJECT=<your GCP project ID>

Customizing GCP resources

To customize GCP resources, such as your Kubernetes Engine cluster, you canmodify the Deployment Manager configuration settings in ${KF_DIR}/gcp_config.

After modifying your existing configuration, run the following command to applythe changes:

  1. cd ${KF_DIR}
  2. kfctl apply -V -f ${CONFIG_FILE}

Alternatively, you can use Deployment Manager directly:

  1. cd ${KF_DIR}/gcp_config
  2. gcloud deployment-manager --project=${PROJECT} deployments update ${KF_NAME} --config=cluster-kubeflow.yaml

Some changes (such as the VM service account for Kubernetes Engine) can only be set at creation time; in this case you needto tear down your deployment before recreating it:

  1. cd ${KF_DIR}
  2. kfctl delete -f ${CONFIG_FILE}
  3. kfctl apply -V -f ${CONFIG_FILE}

Customizing Kubernetes resources

You can use kustomize to customize Kubeflow.To customize the Kubernetes resources running within the cluster, you can modifythe kustomize manifests in ${KF_DIR}/kustomize.

For example, to modify settings for the Jupyter web app:

  • Open ${KF_DIR}/kustomize/jupyter-web-app.yaml in a text editor.
  • Find and replace the parameter values:
  1. apiVersion: v1
  2. data:
  3. ROK_SECRET_NAME: secret-rok-{username}
  4. UI: default
  5. clusterDomain: cluster.local
  6. policy: Always
  7. prefix: jupyter
  8. kind: ConfigMap
  9. metadata:
  10. labels:
  11. app: jupyter-web-app
  12. kustomize.component: jupyter-web-app
  13. name: jupyter-web-app-parameters
  14. namespace: kubeflow
  • Redeploy Kubeflow using kfctl:
  1. cd ${KF_DIR}
  2. kfctl apply -V -f ${CONFIG_FILE}

Or use kubectl directly:

  1. cd ${KF_DIR}/kustomize
  2. kubectl apply -f jupyter-web-app.yaml

Common customizations

Add GPU nodes to your cluster

To add GPU accelerators to your Kubeflow cluster, you have the followingoptions:

  • Pick a GCP zone that provides NVIDIA Tesla K80 Accelerators(nvidia-tesla-k80).
  • Or disable node-autoprovisioning in your Kubeflow cluster.
  • Or change your node-autoprovisioning configuration.

To see which accelerators are available in each zone, run the followingcommand:

  1. gcloud compute accelerator-types list

To disable node-autoprovisioning, run kfctl build as described above.Then edit ${KF_DIR}/gcp_config/cluster-kubeflow.yaml and setenabledto false:

  1. ...
  2. gpu-type: nvidia-tesla-k80
  3. autoprovisioning-config:
  4. enabled: false
  5. ...

You must also setgpu-pool-initialNodeCount.

Add GPU node pool to an existing kubeflow cluster

You can add a GPU node pool to your kubeflow cluster using the following command

  1. export GPU_POOL_NAME=<name of the new gpu pool>
  2. gcloud container node-pools create ${GPU_POOL_NAME} \
  3. --accelerator type=nvidia-tesla-k80,count=1 \
  4. --zone us-central1-a --cluster ${KF_NAME} \
  5. --num-nodes=1 --machine-type=n1-standard-4 --min-nodes=0 --max-nodes=5 --enable-autoscaling

After adding GPU nodes to your cluster, you need to install NVIDIA’s device drivers to the nodes. Google provides a DaemonSet that automatically installs the drivers for you.

To deploy the installation DaemonSet, run the following command:

  1. kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml

Add Cloud TPUs to your cluster

Set enable_tpu:truein ${KF_DIR}/gcp_config/cluster-kubeflow.yaml.

Specify a minimum CPU

Certain instruction sets or hardware features are only available on specific CPUs, so to ensure your cluster utilizes the appropriate hardware you need to set a minimum CPU value.

In brief, inside gcp_config/cluster.jinja change the minCpuPlatform property for the CPU node pool. For example, Intel Broadwell becomes Intel Skylake. Setting a minimum CPU needs to occur during cluster/node creation; it cannot be applied to an existing cluster/node.

More detailed instructions follow.

Add VMs with more CPUs or RAM

  • Change the machineType.
  • There are two node pools:
    • one for CPU only machines here.
    • one for GPU machines here.
  • When making changes to the node pools you also need to bump the pool-version here before you update the deployment.

Add users to Kubeflow

  • To grant users access to Kubeflow, add the “IAP-secured Web App User” role on the IAM page in the GCP console. Make sure you are in the same project as your Kubeflow deployment.

  • You can confirm the update by inspecting the IAM policy for your project:

  1. gcloud projects get-iam-policy ${PROJECT}
  • In the output from the above command, users able to access Kubeflow have the following role: roles/iap.httpsResourceAccessor.

More customizations

Refer to the navigation panel on the left of these docs for more customizations,including using your own domain,setting up Cloud Filestore, and more.