Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Getting started with Katib (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/11/2020 (1.0)
* 本ページは、Kubeflow の以下のページを翻訳した上で適宜、補足説明したものです:
- Components of Kubeflow : Hyperparameter Tuning : Getting started with Katib
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
コンポーネント : ハイパーパラメータ調整 : Getting started with Katib
このページは貴方に Katib で始めさせます。貴方の環境に依拠して、必要かもしれない任意の追加のセットアップを遂行し、そしてコマンドラインと Katib ユーザインターフェイス (UI) を使用して 2,3 のサンプルを実行するためにこのガイドに従ってください。
Katib とハイパーパラメータ調整まわりのコンセプトの概要については、Katib へのイントロダクション を読んでください。
Katib セットアップ
(訳注 : 省略します。必要な場合には原文参照)
Katib UI にアクセスする
実験を提出して結果を監視するために Katib ユーザインターフェイス (UI) を利用できます。Kubeflow 内の Katib ホームページはこのように見えます :

Kubeflow の一部として Katib をインストールした場合、Kubeflow UI から Katib UI にアクセスできます :
- Kubeflow UI をオープンします。セントラル・ダッシュボードにアクセスする へのガイドを見てください。
- 左手のメニューの Katib をクリックします。
代わりに、Katib UI サービスのためにポートフォワーディングを設定できます :
kubectl port-forward svc/katib-ui -n kubeflow 8080:80
それからこの URL で Katib UI にアクセスできます :
http://localhost:8080/katib/
サンプル
このセクションは Katib を試すために実行できる幾つかのサンプルを紹介します。
ランダムアルゴリズムを使用するサンプル
YAML configuration ファイルで実験を定義することにより Katib のための実験を作成できます。YAML ファイルはハイパーパラメータ実行可能空間、最適化パラメータ、最適化ゴール、提案アルゴリズム、等々を含む、実験のための configuration を定義します。
このサンプルは ランダムアルゴリズム・サンプルのための YAML ファイル を使用します。
ランダムアルゴリズム・サンプルは MNIST データセットを使用して画像分類モデルを訓練するために MXNet ニューラルネットワークを使用します。訓練コンテナ・ソースコードを ここ で確認できます。実験は様々なハイパーパラメータで 3 つの訓練ジョブを実行して結果をセーブします。
ランダムアルゴリズム・サンプルを使用して実験を起動するために以下のコマンドを実行します :
- サンプルをダウンロードします :
curl https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1alpha3/random-example.yaml --output random-example.yaml
- 貴方の Kubeflow ユーザプロフィール名前空間を使用するために random-example.yaml を編集して次の行を変更します :
Namespace: kubeflow
- サンプルを配備する :
kubectl apply -f random-example.yaml
このサンプルはハイパーパラメータを引数として埋め込みます。YAML ファイルの TrialTemplate.GoTemplate.RawTemplate セクションで定義されたテンプレートを使用して他の方法 (例えば、環境変数を使用して) でハイパーパラメータを埋め込むことができます。テンプレートは Go テンプレート・フォーマット を使用します。
このサンプルは以下のハイパーパラメータをランダムに生成します :
- –lr: 学習率。型: double.
- –num-layers: ニューラルネットワークの層の数。型: integer.
- –optimizer: Optimizer. 型: categorical.
実験ステータスを確認します :
kubectl -n <your user profile namespace> describe experiment random-example
上のコマンドの出力はこれと同様に見えます :
Name: random-example
Namespace: <your user namespace>
Labels: controller-tools.k8s.io=1.0
Annotations: <none>
API Version: kubeflow.org/v1alpha3
Kind: Experiment
Metadata:
Creation Timestamp: 2019-12-22T22:53:25Z
Finalizers:
update-prometheus-metrics
Generation: 2
Resource Version: 720692
Self Link: /apis/kubeflow.org/v1alpha3/namespaces/kubeflow/experiments/random-example
UID: dc6bc15a-250d-11ea-8cae-42010a80010f
Spec:
Algorithm:
Algorithm Name: random
Algorithm Settings: <nil>
Max Failed Trial Count: 3
Max Trial Count: 12
Metrics Collector Spec:
Collector:
Kind: StdOut
Objective:
Additional Metric Names:
accuracy
Goal: 0.99
Objective Metric Name: Validation-accuracy
Type: maximize
Parallel Trial Count: 3
Parameters:
Feasible Space:
Max: 0.03
Min: 0.01
Name: --lr
Parameter Type: double
Feasible Space:
Max: 5
Min: 2
Name: --num-layers
Parameter Type: int
Feasible Space:
List:
sgd
adam
ftrl
Name: --optimizer
Parameter Type: categorical
Trial Template:
Go Template:
Raw Template: apiVersion: batch/v1
kind: Job
metadata:
name: {{.Trial}}
namespace: {{.NameSpace}}
spec:
template:
spec:
containers:
- name: {{.Trial}}
image: docker.io/kubeflowkatib/mxnet-mnist-example
command:
- "python"
- "/mxnet/example/image-classification/train_mnist.py"
- "--batch-size=64"
{{- with .HyperParameters}}
{{- range .}}
- "{{.Name}}={{.Value}}"
{{- end}}
{{- end}}
restartPolicy: Never
Status:
Conditions:
Last Transition Time: 2019-12-22T22:53:25Z
Last Update Time: 2019-12-22T22:53:25Z
Message: Experiment is created
Reason: ExperimentCreated
Status: True
Type: Created
Last Transition Time: 2019-12-22T22:55:10Z
Last Update Time: 2019-12-22T22:55:10Z
Message: Experiment is running
Reason: ExperimentRunning
Status: True
Type: Running
Current Optimal Trial:
Observation:
Metrics:
Name: Validation-accuracy
Value: 0.981091
Parameter Assignments:
Name: --lr
Value: 0.025139701133432946
Name: --num-layers
Value: 4
Name: --optimizer
Value: sgd
Start Time: 2019-12-22T22:53:25Z
Trials: 12
Trials Running: 2
Trials Succeeded: 10
Events: <none>
Status.Conditions.Type の最後の値が Succeeded であるとき、実験は完了しています。
Katib UI で実験の結果を見ます :
- 上で 説明されたように Katib UI をオープンする。
- Katib ホームページで ハイパーパラメータ調整 をクリックする。
- 左側の Katib メニューパネルをオープンしてから、HP セクションをオープンして モニタ をクリックします :

- メニューパネルをクローズするために右側のパネル上をクリックします。実験のリストを見るはずです :

- 実験の名前、random-example をクリックします。
- ハイパーパラメータ値 (学習率、層数と optimizer) の様々な組み合わせのための精度のレベルを示すグラフを見るはずです :

- 下でグラフは実験内で実行されたトライアルのリストです :

TensorFlow サンプル
Kebeflow の TensorFlow 訓練ジョブ演算子, TFJob を使用して実験を起動するために以下のコマンドを実行します :
- tfjob-example.yaml ファイルをダウンロードする。
curl https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1alpha3/tfjob-example.yaml --output tfjob-example.yaml
- 貴方の Kubeflow ユーザプロフィール名前空間を使用するために tfjob-example.yaml を編集して次の行を変更します :
Namespace: kubeflow
- サンプルを配備する :
kubectl apply -f tfjob-example.yaml
- 実験のステータスを確認できます :
kubectl -n <your user profile namespace> describe experiment tfjob-example
Katib UI で実験の結果を見るため、上 のランダムアルゴリズム・サンプルのために説明されたステップに従います。
PyTorch サンプル
Kebeflow の PyTorch 訓練ジョブ演算子, PyTorchJob を使用して実験を起動するために以下のコマンドを実行します :
- pytorchjob-example.yaml ファイルをダウンロードする。
curl https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1alpha3/pytorchjob-example.yaml --output pytorchjob-example.yaml
- 貴方の Kubeflow ユーザプロフィール名前空間を使用するために pytorchjob-example.yaml を編集して次の行を変更します :
Namespace: kubeflow
- サンプルを配備する :
kubectl apply -f pytorchjob-example.yaml
- 実験のステータスを確認できます :
kubectl -n <your user profile namespace> describe experiment pytorchjob-example
Katib UI で実験の結果を見るため、上 のランダムアルゴリズム・サンプルのために説明されたステップに従います。
クリーンアップ
インストールされたコンポーネントを削除します :
bash ./scripts/v1alpha3/undeploy.sh
以上