ホーム » Katib

Katib」カテゴリーアーカイブ

Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Katib Configuration 概要

Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Katib Configuration 概要 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/12/2020 (1.0)

* 本ページは、Kubeflow の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

コンポーネント : ハイパーパラメータ調整 : Katib Configuration 概要

このページは Katib config についての情報を説明します。

Katib config は以下についての情報を含む Kubernetes Config Map です :

  1. 現在の メトリクス・コレクタ (key = metrics-collector-sidecar)
  2. 現在の アルゴリズム (提案) (key = suggestion).

Katib Config Map は katib-config を持つ KATIB_CORE_NAMESPACE 名前空間に配備されなければなりません。Katib コントローラは実験を提出するとき Katib config をパースします。

Katib を配備した後でさえもこの Config Map を編集できます。

Katib を Kubeflow 名前空間で配備する場合、Katib config を編集するためにこれを実行します :

kubectl edit configMap katib-config -n kubeflow

 

メトリクスコレクタ Sidecar 設定

これらの設定は Katib メトリクスコレクタに関係します、そこでは :

  • key = metrics-collector-sidecar
  • value = 各メトリクスコレクタのための JSON を設定することに相当します。

総ての設定を持つファイル・メトリクスコレクタのためのサンプル :

metrics-collector-sidecar: |-
{
  "File": {
    "image": "gcr.io/kubeflow-images-public/katib/v1alpha3/file-metrics-collector",
    "imagePullPolicy": "Always",
    "resources": {
      "requests": {
        "memory": "200Mi",
        "cpu": "250m",
        "ephemeral-storage": "200Mi"
      },
      "limits": {
        "memory": "1Gi",
        "cpu": "500m",
        "ephemeral-storage": "2Gi"
      }
    }
  },
  ...
}

image を除くこれらの設定の総ては省略できます。任意の他の設定を指定しない場合、デフォルト値が設定されます。

  1. image – ファイル・メトリクスコレクタのための Docker イメージ名。

    指定されなければなりません

  2. imagePullPolicy – ファイル・メトリクスコレクタ・コンテナ イメージ pull ポリシー

    デフォルト値は IfNotPresent.

  3. resources – ファイル・メトリクスコレクタ コンテナリソース。上のサンプルで limits と requests をどのように指定するか見ることができます。現在、memory, cpu と ephemeral-storage リソースだけが指定できます。

    requests のためのデフォルト値は :

    • memory = 10Mi.
    • cpu = 50m.
    • ephemeral-storage = 500Mi.

    limits のためのデフォルト値は :

    • memory = 100Mi.
    • cpu = 500m.
    • ephemeral-storage = 5Gi.

 

提案 (= suggestiojn) 設定

これらの設定は Katib 提案に関係します、そこでは :

  • key = suggestion
  • value = 各アルゴリズムための JSON を設定することに相当します。

新しいアルゴリズムを使用することを望む場合、新しい提案で Katib config を更新しなければなりません。

総ての設定を持つランダム提案のためのサンプル :

suggestion: |-
{
  "random": {
    "image": "gcr.io/kubeflow-images-public/katib/v1alpha3/suggestion-hyperopt",
    "imagePullPolicy": "Always",
    "resources": {
      "requests": {
        "memory": "100Mi",
        "cpu": "100m",
        "ephemeral-storage": "100Mi"
      },
      "limits": {
        "memory": "500Mi",
        "cpu": "500m",
        "ephemeral-storage": "3Gi"
      }
    },
    "serviceAccountName": "suggestion-serviceaccount"
  },
  ...
}

image を除くこれらの設定の総ては省略できます。任意の他の設定を指定しない場合、デフォルト値が設定されます。

  1. image – ランダム提案のための Docker イメージ名。

    指定されなければなりません

  2. imagePullPolicy – ランダム提案・コンテナ イメージ pull ポリシー

    デフォルト値は IfNotPresent.

  3. resources – ランダム提案 コンテナリソース。上のサンプルで limits と requests をどのように指定するか見ることができます。現在、memory, cpu と ephemeral-storage リソースだけが指定できます。

    requests のためのデフォルト値は :

    • memory = 10Mi.
    • cpu = 50m.
    • ephemeral-storage = 500Mi.

    limits のためのデフォルト値は :

    • memory = 100Mi.
    • cpu = 500m.
    • ephemeral-storage = 5Gi.
  4. serviceAccountName – ランダム提案コンテナ サービスアカウント。上のサンプルでは、ランダムアルゴリズムを持つ各実験のために suggestion-serviceaccount サービスアカウントが使用されます、Katib config からこのサービスアカウントが変更または削除されない限りは。

    デフォルトでは提案ポッドは特定のサービスアカウントを持ちません。この場合、提案ポッドは デフォルト サービスアカウントを使用します。

 

以上






Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Getting started with Katib

Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Getting started with Katib (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/11/2020 (1.0)

* 本ページは、Kubeflow の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、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 にアクセスできます :

  1. Kubeflow UI をオープンします。セントラル・ダッシュボードにアクセスする へのガイドを見てください。
  2. 左手のメニューの 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 つの訓練ジョブを実行して結果をセーブします。

ランダムアルゴリズム・サンプルを使用して実験を起動するために以下のコマンドを実行します :

  1. サンプルをダウンロードします :
    curl https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1alpha3/random-example.yaml --output random-example.yaml
    
  2. 貴方の Kubeflow ユーザプロフィール名前空間を使用するために random-example.yaml を編集して次の行を変更します :
    Namespace: kubeflow
    
  3. サンプルを配備する :
    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 で実験の結果を見ます :

  1. 上で 説明されたように Katib UI をオープンする。
  2. Katib ホームページで ハイパーパラメータ調整 をクリックする。
  3. 左側の Katib メニューパネルをオープンしてから、HP セクションをオープンして モニタ をクリックします :

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

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

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

 

TensorFlow サンプル

Kebeflow の TensorFlow 訓練ジョブ演算子, TFJob を使用して実験を起動するために以下のコマンドを実行します :

  1. tfjob-example.yaml ファイルをダウンロードする。
    curl https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1alpha3/tfjob-example.yaml --output tfjob-example.yaml
    
  2. 貴方の Kubeflow ユーザプロフィール名前空間を使用するために tfjob-example.yaml を編集して次の行を変更します :
    Namespace: kubeflow
    
  3. サンプルを配備する :
    kubectl apply -f tfjob-example.yaml
    
  4. 実験のステータスを確認できます :
    kubectl -n <your user profile namespace> describe experiment tfjob-example
    

Katib UI で実験の結果を見るため、 のランダムアルゴリズム・サンプルのために説明されたステップに従います。

 

PyTorch サンプル

Kebeflow の PyTorch 訓練ジョブ演算子, PyTorchJob を使用して実験を起動するために以下のコマンドを実行します :

  1. pytorchjob-example.yaml ファイルをダウンロードする。
    curl https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1alpha3/pytorchjob-example.yaml --output pytorchjob-example.yaml
    
  2. 貴方の Kubeflow ユーザプロフィール名前空間を使用するために pytorchjob-example.yaml を編集して次の行を変更します :
    Namespace: kubeflow
    
  3. サンプルを配備する :
    kubectl apply -f pytorchjob-example.yaml
    
  4. 実験のステータスを確認できます :
    kubectl -n <your user profile namespace> describe experiment pytorchjob-example
    

Katib UI で実験の結果を見るため、 のランダムアルゴリズム・サンプルのために説明されたステップに従います。

 

クリーンアップ

インストールされたコンポーネントを削除します :

bash ./scripts/v1alpha3/undeploy.sh
 

以上






Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Katib へのイントロダクション

Kubeflow 1.0 : コンポーネント : ハイパーパラメータ調整 : Katib へのイントロダクション (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/11/2020 (1.0)

* 本ページは、Kubeflow の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

コンポーネント : ハイパーパラメータ調整 : Katib へのイントロダクション

貴方の機械学習 (ML) モデルのハイパーパラメータとアーキテクチャの自動調整のために Katib を利用します。

このページはハイパーパラメータ調整、ニューラルアーキテクチャ探索、そして Kubeflow のコンポーネントとしての Katib システムの概念を紹介します。

 

ハイパーパラメータとハイパーパラメータ調整

ハイパーパラメータはモデル訓練プロセスを制御する変数です。例えば :

  • 学習率
  • ニューラルネットワークの層の数。
  • 各層のノードの数。

ハイパーパラメータ値は学習されません。換言すれば、ノード重みと他の訓練パラメータとは対照的に、モデル訓練プロセスはハイパーパラメータ値を調整しません。

ハイパーパラメータ調整はモデルの予測精度を最大化するためにハイパーパラメータ値を最適化するプロセスです。Katib やハイパーパラメータ調整のための類似のシステムを利用しない場合、最適値を見つけるために手動でハイパーパラメータを調整して、多くの訓練ジョブを貴方自身で実行する必要があります。

自動ハイパーパラメータ調整はハイパーパラメータ調整ジョブのための configuration で指定する、目的メトリックとも呼ばれる、ターゲット変数を最適化することにより動作します。一般的なメトリックは訓練ジョブの検証パスにおけるモデルの精度です (検証精度)。ハイパーパラメータ調整ジョブにメトリックを最大化 or 最初化することを望むかを指定することもできます。

例えば、Katib からの次のグラフはハイパーパラメータ値 (学習率、層の数、そして optimizer) の様々な組み合わせのための精度のレベルを表示しています :

(このグラフを生成したサンプルを実行するには、getting-started ガイド に従ってください。)

Katib は各ハイパーパラメータ調整ジョブ (実験) 内で (トライアルとして知られる) 幾つかの訓練ジョブを実行します。各トライアルはハイパーパラメータ configuration の幾つかのセットをテストします。各トライアルはハイパーパラメータの configuration の異なるセットをテストします。実験の最後に、Katib はハイパーパラメータのための最適値を出力します。

 

ニューラル・アーキテクチャ探索

ハイパーパラメータ調整に加えて、Katib はニューラル・アーキテクチャ探索 (NAS) 特徴も提供します。モデルの予測精度とパフォーマンスを最大化する目標とともに、貴方の人工ニューラルネットワークを設計するために NAS を利用することができます。

NAS はハイパーパラメータ調整と密接に関係します。両者は自動機械学習 (AutoML) のサブセットです。ハイパーパラメータ調整がモデルのハイパーパラメータを最適化する一方で、NAS システムはモデルの構造、ノード重み、そしてハイパーパラメータを最適化します。

NAS テクノロジーは一般に最適なニューラルネットワーク・デザインを見つけるために様々なテクニックを使用します。Katib の NAS は強化学習テクニックを使用します。

コマンドラインか UI から Katib ジョブを提出することができます (Katib インターフェイスについてこのページで後で更に読んでください)。次のスクリーンショットは Katib UI から NAS ジョブを提出するためのフォームの一部を表示しています :

 

Katib プロジェクト

Katib はハイパーパラメータ調整とニューラル・アーキテクチャ探索のための Kubernetes ベースのシステムです。Katib は TensorFlow, MXNet, PyTorch, XGBoost その他を含む幾つかの ML フレームワークをサポートします。

Katib プロジェクト はオープンソースです。

 

Katib インターフェイス

Katib と相互作用するために以下のインターフェイスを使用できます :

  • 実験を提出して結果を監視するために web UI を利用できます。UI にどのようにアクセスするかについての情報は getting-started ガイド を見てください。Kubeflow 内の Katib ホームページはこのように見えます :

  • REST API。GitHub 上の API リファレンス を見てください。
  • コマンドライン・インターフェイス (CLI) :
    • Kfctl は Kubeflow をインストールして configure するために利用できる Kubeflow CLI です。kfctl について configuring Kubeflow へのガイドを読んでください。
    • Kubernetes CLI, kubectl, は Kubeflow クラスタに対してコマンドを実行するために有用です。kubectl について Kubernetes ドキュメント を読んでください。

 

Katib コンセプト

このセクションは Katib で使用される用語を説明します。

 

実験

実験は単一の調整実行で、最適化実行とも呼ばれます。

実験を定義するために configuration 設定を指定します。以下は主要な configuration です :

  • Objective (目的 (関数)) : 最適化することを望むもの。これは目的メトリックで、ターゲット変数とも呼ばれます。一般的なメトリックは訓練ジョブの検証パスにおけるモデル精度です (検証精度)。メトリックを最大化 or 最小化するためにハイパーパラメータ調整ジョブを望むかも指定できます。
  • Search space (探索空間) : ハイパーパラメータ調整ジョブが最適化のために考慮すべき総ての可能なハイパーパラメータ値のセットと各ハイパーパラメータのための制約です。探索空間のための他の名前は実行可能なセットと解法空間を含みます。例えば、最適化することを望むハイパーパラメータの名前を提供するかもしれません。各ハイパーパラメータについて、最小と最大値 or 許容される値のリストを提供するかもしれません。
  • Search algorithm (探索アルゴリズム) : 最適なハイパーパラメータ値を探索するときに使用するアルゴリズム。

実験をどのように定義するかの詳細については、running an experiment へのガイドを見てください。

 

提案

提案 (= suggestion) はハイパーパラメータ調整プロセスが提示したハイパーパラメータ値のセットです。Katlib は提案された値のセットを評価するためにトライアルを作成します。

 

トライアル

トライアルはハイパーパラメータ調整プロセスの 1 つの反復です。トライアルはパラメータ割り当てのリストを持つ一つのワーカージョブ・インスタンスに対応します。パラメータ割り当てのリストは提案に相当します。

各実験は幾つかのトライアルを実行します。実験はそれが目標か設定されたトライアルの最大数に達するまでトライアルを実行します。

 

ワーカージョブ

ワーカージョブはトライアルを評価してその目的 (関数) 値を計算するために実行されるプロセスです。

ワーカージョブは以下のタイプの一つであり得ます :

上のワーカージョブ・タイプを提供することにより、Katib はマルチ ML フレームワークをサポートします。

 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com