<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubeflow – Kubeflow on IBM Cloud</title>
    <link>/docs/ibm/</link>
    <description>Recent content in Kubeflow on IBM Cloud on Kubeflow</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/ibm/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/ibm/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the kfctl binary to
deploy Kubeflow on IBM Cloud.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id=&#34;installing-the-ibm-cloud-developer-tools&#34;&gt;Installing the IBM Cloud developer tools&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;If you already have &lt;code&gt;ibmcloud&lt;/code&gt; installed with the latest &lt;code&gt;ibmcloud ks&lt;/code&gt; (Kubernetes Service) plug-in, you
can skip these steps.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download and install the &lt;code&gt;ibmcloud&lt;/code&gt; command line tool:
&lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started#overview&#34;&gt;https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started#overview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=containers-cli-plugin-kubernetes-service-cli&#34;&gt;Kubernetes Service plug-in&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud plugin install container-service
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Authorize &lt;code&gt;ibmcloud&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud login
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;setting-environment-variables&#34;&gt;Setting environment variables&lt;/h3&gt;
&lt;p&gt;To simplify the command lines for this walkthrough, you need to define a few
environment variables.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set &lt;code&gt;CLUSTER_NAME&lt;/code&gt; and &lt;code&gt;CLUSTER_ZONE&lt;/code&gt; variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CLUSTER_NAME=kubeflow
export CLUSTER_ZONE=dal13
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CLUSTER_NAME&lt;/code&gt; must be lowercase and unique among any other Kubernetes
clusters in the specified CLUSTER_ZONE.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLUSTER_ZONE&lt;/code&gt; identifies the location where CLUSTER_NAME will be created. Run &lt;code&gt;ibmcloud ks locations&lt;/code&gt; to list supported IBM Cloud Kubernetes Service locations. For example, choose &lt;code&gt;dal13&lt;/code&gt; to create CLUSTER_NAME in the Dallas (US) data center.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;creating-a-ibm-cloud-kubernetes-cluster&#34;&gt;Creating a IBM Cloud Kubernetes cluster&lt;/h3&gt;
&lt;p&gt;To make sure the cluster is large enough to host all the Knative and Istio
components, the recommended configuration for a cluster is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes version 1.15&lt;/li&gt;
&lt;li&gt;4 vCPU nodes with 16GB memory (&lt;code&gt;b2c.4x16&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a Kubernetes cluster on IKS with the required specifications:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster create classic \
  --flavor b2c.4x16 \
  --name $CLUSTER_NAME \
  --zone=$CLUSTER_ZONE \
  --workers=3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you&amp;rsquo;re starting in a fresh account with no public and private VLANs, they
are created automatically for you. If you already have VLANs configured in
your account, get them via &lt;code&gt;ibmcloud ks vlans --zone $CLUSTER_ZONE&lt;/code&gt; and
include the public/private VLAN id in the &lt;code&gt;cluster create&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster create classic \
  --machine-type=b2c.4x16 \
  --name=$CLUSTER_NAME \
  --zone=$CLUSTER_ZONE \
  --workers=3 \
  --private-vlan $PRIVATE_VLAN_ID \
  --public-vlan $PUBLIC_VLAN_ID 
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until your Kubernetes cluster is deployed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks clusters | grep $CLUSTER_NAME
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It can take a while for your cluster to be deployed. Repeat the above
command until the state of your cluster is &amp;ldquo;normal&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Point &lt;code&gt;kubectl&lt;/code&gt; to the cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster config --cluster $CLUSTER_NAME
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure all nodes are up:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure all the nodes are in &lt;code&gt;Ready&lt;/code&gt; state. You are now ready to install
Istio into your cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ibm-cloud-block-storage-setup&#34;&gt;IBM Cloud Block Storage Setup&lt;/h2&gt;
&lt;p&gt;By default, IBM Cloud Kubernetes cluster uses &lt;a href=&#34;https://www.ibm.com/cloud/file-storage&#34;&gt;IBM Cloud File Storage&lt;/a&gt; based on NFS as the default storage class. File Storage is designed to run RWX (read-write multiple nodes) workloads with proper security built around it. Therefore, File Storage &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-security#container&#34;&gt;does not allow &lt;code&gt;fsGroup&lt;/code&gt; securityContext&lt;/a&gt; which is needed for DEX and Kubeflow Jupyter Server.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ibm.com/cloud/block-storage&#34;&gt;IBM Cloud Block Storage&lt;/a&gt; provides a fast way to store data and
satisfy many of the Kubeflow persistent volume requirements such as &lt;code&gt;fsGroup&lt;/code&gt; out of the box and optimized RWO (read-write single node) which is used on all Kubeflow&amp;rsquo;s persistent volume claim.&lt;/p&gt;
&lt;p&gt;Therefore, we strongly recommend to set up &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-block_storage#add_block&#34;&gt;IBM Cloud Block Storage&lt;/a&gt; as the default storage class so that you can
get the best experience from Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/docs/intro/install/&#34;&gt;Follow the instructions&lt;/a&gt; to install the Helm version 3 client on your local machine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the IBM Cloud Helm chart repository to the cluster where you want to use the IBM Cloud Block Storage plug-in.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;helm repo add iks-charts https://icr.io/helm/iks-charts
helm repo update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the IBM Cloud Block Storage plug-in. When you install the plug-in, pre-defined block storage classes are added to your cluster.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;helm install 1.6.0 iks-charts/ibmcloud-block-storage-plugin -n kube-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME: 1.6.0
LAST DEPLOYED: Thu Feb 27 11:41:35 2020
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing: ibmcloud-block-storage-plugin.   Your release is named: 1.6.0
...
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the installation was successful.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get pod -n kube-system &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep block
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the storage classes for Block Storage were added to your cluster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get storageclasses | grep block
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the Block Storage as the default storageclass.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl patch storageclass ibmc-block-gold -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;true&amp;#34;}}}&amp;#39;&lt;/span&gt;
kubectl patch storageclass ibmc-file-bronze -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;false&amp;#34;}}}&amp;#39;&lt;/span&gt;
   
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check the default storageclass is block storage&lt;/span&gt;
kubectl get storageclass &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep &lt;span style=&#34;color:#4e9a06&#34;&gt;\(&lt;/span&gt;default&lt;span style=&#34;color:#4e9a06&#34;&gt;\)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmc-block-gold (default)   ibm.io/ibmc-block   65s
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;understanding-the-kubeflow-deployment-process&#34;&gt;Understanding the Kubeflow deployment process&lt;/h2&gt;
&lt;p&gt;The deployment process is controlled by the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build&lt;/strong&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;apply&lt;/strong&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delete&lt;/strong&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;app-layout&#34;&gt;App layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow. For example, &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources (modify the manifests and run &lt;code&gt;kfctl apply&lt;/code&gt; again).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubeflow-installation&#34;&gt;Kubeflow installation&lt;/h2&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_v1.0.2_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow. The code below includes an optional command to add the binary kfctl to your path. If you don’t add the binary to your path, you must use the full path to the kfctl binary each time you run it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# The following command is optional, to make kfctl binary easier to use.
export PATH=$PATH:&amp;lt;path to where kfctl was unpacked&amp;gt;

# Set KF_NAME to the name of your Kubeflow deployment. This also becomes the
# name of the directory containing your configuration.
# For example, your deployment name can be &#39;my-kubeflow&#39; or &#39;kf-test&#39;.
export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;

# Set the path to the base directory where you want to store one or more 
# Kubeflow deployments. For example, /opt/.
# Then set the Kubeflow application directory for this deployment.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}

# Set the configuration file to use, such as the file specified below:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/master/kfdef/kfctl_ibm.yaml&amp;quot;

# Generate and deploy Kubeflow:
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
This value also becomes the name of the directory where your Kubeflow
configurations are stored, that is, the Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the resources deployed correctly in namespace &lt;code&gt;kubeflow&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get all -n kubeflow
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Kubeflow Dashboard. The default installation does not create an external endpoint but you can use port-forwarding to visit your cluster. Run the following command and visit http://localhost:8080.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In case you want to expose the Kubeflow Dashboard over an external IP, you can change the type of the ingress gateway. To do that, you can edit the service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl edit -n istio-system svc/istio-ingressgateway
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From that file, replace &lt;code&gt;type: NodePort&lt;/code&gt; with &lt;code&gt;type: LoadBalancer&lt;/code&gt; and save.&lt;/p&gt;
&lt;p&gt;While the change is being applied, you can watch the service until below command prints a value under the &lt;code&gt;EXTERNAL-IP&lt;/code&gt; column:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl get -w -n istio-system svc/istio-ingressgateway
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The external IP should be accessible by visiting http://&lt;EXTERNAL-IP&gt;. Note that above installation instructions do not create any protection for the external endpoint so it will be accessible to anyone without any authentication.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional information&lt;/h2&gt;
&lt;p&gt;You can find general information about Kubeflow configuration in the guide to &lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;configuring Kubeflow with kfctl and kustomize&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Initial cluster setup for existing cluster</title>
      <link>/docs/ibm/existing-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/existing-cluster/</guid>
      <description>
        
        
        &lt;h2 id=&#34;initial-setup-for-existing-cluster&#34;&gt;Initial Setup for Existing Cluster&lt;/h2&gt;
&lt;p&gt;Get the Kubeconfig file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster config --cluster $CLUSTER_NAME
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From here on, please see &lt;a href=&#34;/docs/ibm/install-kubeflow&#34;&gt;Install Kubeflow&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Uninstall Kubeflow</title>
      <link>/docs/ibm/uninstall-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/uninstall-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;Uninstall Kubeflow on your IBM Cloud IKS cluster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Go to your Kubeflow deployment directory
cd ${KF_DIR}

# Remove Kubeflow
kfctl delete -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: End-to-end Kubeflow on IBM Cloud</title>
      <link>/docs/ibm/iks-e2e/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/iks-e2e/</guid>
      <description>
        
        
        &lt;p&gt;This is a guide for an end-to-end example of Kubeflow on &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-getting-started&#34;&gt;IBM Cloud Kubernetes Service (IKS)&lt;/a&gt;. The core steps will be to take a base Tensorflow model, modify it for distributed training, serve the resulting model with TFServing, and deploy a web application that uses the trained model.&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;h3 id=&#34;overview-of-iks&#34;&gt;Overview of IKS&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-getting-started&#34;&gt;IBM Cloud Kubernetes Service (IKS)&lt;/a&gt; enables the deployment of containerized applications in Kubernetes clusters with specialized tools for management of the systems.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started&#34;&gt;IBM Cloud CLI&lt;/a&gt; can be used for creating, developing, and deploying cloud applications.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a list of IBM Cloud services you will use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ibm.com/cloud/container-service/&#34;&gt;IKS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ibm.com/cloud/object-storage&#34;&gt;IBM Cloud Object Storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-model-and-the-data&#34;&gt;The model and the data&lt;/h3&gt;
&lt;p&gt;This tutorial trains a &lt;a href=&#34;https://www.tensorflow.org/&#34;&gt;TensorFlow&lt;/a&gt; model on the
&lt;a href=&#34;http://yann.lecun.com/exdb/mnist/index.html&#34;&gt;MNIST dataset&lt;/a&gt;, which is the &lt;em&gt;hello world&lt;/em&gt; for machine learning.&lt;/p&gt;
&lt;p&gt;The MNIST dataset contains a large number of images of hand-written digits in
the range 0 to 9, as well as the labels identifying the digit in each image.&lt;/p&gt;
&lt;p&gt;After training, the model can classify incoming images into 10 categories
(0 to 9) based on what it&amp;rsquo;s learned about handwritten images. In other words,
you send an image to the model, and the model does its best to identify the
digit shown in the image.
&lt;img src=&#34;/docs/images/gcp-e2e-ui-prediction.png&#34;
alt=&#34;Prediction UI&#34;
class=&#34;mt-3 mb-3 p-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;In the above screenshot, the image shows a hand-written &lt;strong&gt;7&lt;/strong&gt;. This image was
the input to the model. The table below the image shows a bar graph for each
classification label from 0 to 9, as output by the model. Each bar
represents the probability that the image matches the respective label.
Judging by this screenshot, the model seems pretty confident that this image
is a 7.&lt;/p&gt;
&lt;h3 id=&#34;the-overall-workflow&#34;&gt;The overall workflow&lt;/h3&gt;
&lt;p&gt;The following diagram shows what you accomplish by following this guide:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/ibm-e2e-kubeflow.png&#34; 
alt=&#34;ML workflow for training and serving an MNIST model&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;In summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setting up &lt;a href=&#34;https://www.kubeflow.org/&#34;&gt;Kubeflow&lt;/a&gt; on &lt;a href=&#34;https://www.ibm.com/cloud/container-service/&#34;&gt;IKS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Training the model:
&lt;ul&gt;
&lt;li&gt;Packaging a Tensorflow program in a container.&lt;/li&gt;
&lt;li&gt;Submitting a Tensorflow training (&lt;a href=&#34;https://www.tensorflow.org/api_guides/python/train&#34;&gt;tf.train&lt;/a&gt;) job.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Using the model for prediction (inference):
&lt;ul&gt;
&lt;li&gt;Saving the trained model to [IBM Cloud Object Storage][ibm-cos)].&lt;/li&gt;
&lt;li&gt;Using &lt;a href=&#34;https://www.tensorflow.org/serving/&#34;&gt;Tensorflow Serving&lt;/a&gt; to serve the model.&lt;/li&gt;
&lt;li&gt;Running the simple web app to send prediction request to the model and display the result.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s time to get started!&lt;/p&gt;
&lt;h2 id=&#34;run-the-mnist-tutorial-on-iks&#34;&gt;Run the MNIST Tutorial on IKS&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Follow the &lt;a href=&#34;/docs/ibm/install-kubeflow&#34;&gt;IKS instructions&lt;/a&gt; to deploy Kubeflow.&lt;/li&gt;
&lt;li&gt;Launch a Jupyter notebook.
&lt;ul&gt;
&lt;li&gt;For IBM Cloud, the default NFS storage does not support some of the Python package installation. Therefore, you need to create the notebook with the setting &lt;code&gt;Don&#39;t use Persistent Storage for User&#39;s home&lt;/code&gt; enabled.&lt;/li&gt;
&lt;li&gt;Due to the Notebook user permission issue, you need to use custom images that were working in the previous version.
&lt;ul&gt;
&lt;li&gt;The tutorial has been tested on image: gcr.io/kubeflow-images-public/tensorflow-1.13.1-notebook-cpu:v0.5.0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Launch a terminal in Jupyter and clone the Kubeflow examples repo.
&lt;pre&gt;&lt;code&gt;git clone https://github.com/kubeflow/examples.git git_kubeflow-examples
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tip&lt;/strong&gt;: When you start a terminal in Jupyter, run the command &lt;code&gt;bash&lt;/code&gt; to start
a bash terminal which is much more friendly than the default shell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tip&lt;/strong&gt;: You can change the URL for your notebook from &amp;lsquo;/tree&amp;rsquo; to &amp;lsquo;/lab&amp;rsquo; to switch to using Jupyterlab.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Open the notebook &lt;code&gt;mnist/mnist_ibm.ipynb&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Follow the notebook to train and deploy MNIST on Kubeflow.&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
  </channel>
</rss>
