ホーム » AutoML » AutoML : NNI 1.5 : 自動調整 : 上級 : チューナーのカスタマイズ

AutoML : NNI 1.5 : 自動調整 : 上級 : チューナーのカスタマイズ

AutoML : NNI 1.5 : 自動調整 : 上級 : チューナーのカスタマイズ (翻訳/解説)

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

* 本ページは、NNI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

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

 

自動調整 : 上級 : チューナーのカスタマイズ

チューナーをカスタマイズする

NNI は組込みチューナーで先端技術の調整アルゴリズムを提供します。NNI は調整要件のために貴方自身でチューナーを構築することをサポートします。

貴方自身の調整アルゴリズムを実装することを望むのであれば、カスタマイズされたチューナーを実装できます、行なうべき 3 つのことがあります :

  1. 基底 Tuner クラスを継承する
  2. receive_trial_result と generate_parameter 関数を実装する
  3. 実験 YAML config ファイルで貴方のカスタマイズされたチューナーを configure する

 
ここにサンプルがあります :

1. 基底 Tuner クラスを継承する

from nni.tuner import Tuner

class CustomizedTuner(Tuner):
    def __init__(self, ...):

 
2. receive_trial_result と generate_parameter 関数を実装する

from nni.tuner import Tuner

class CustomizedTuner(Tuner):
    def __init__(self, ...):
        ...

    def receive_trial_result(self, parameter_id, parameters, value, **kwargs):
    '''
    Receive trial's final result.
    parameter_id: int
    parameters: object created by 'generate_parameters()'
    value: final metrics of the trial, including default metric
    '''
    # your code implements here.
    ...

    def generate_parameters(self, parameter_id, **kwargs):
    '''
    Returns a set of trial (hyper-)parameters, as a serializable object
    parameter_id: int
    '''
    # your code implements here.
    return your_parameters

receive_trial_result はパラメータ入力として parameter_id, parameters, value を受け取ります。また、Tuner はトライアルが送ったものと正確に同じ value オブジェクトを受け取ります。

generate_parameters 関数から返される your_parameters は NNI SDK により json オブジェクトとして pack されます。NNI SDK は json オブジェクトを unpack してトライアルは正確に同じ your_parameters を Tuner から受け取ります。

例えば : 貴方がこのように generate_parameters を実装する場合 :

def generate_parameters(self, parameter_id, **kwargs):
    '''
    Returns a set of trial (hyper-)parameters, as a serializable object
    parameter_id: int
    '''
    # your code implements here.
    return {"dropout": 0.3, "learning_rate": 0.4}

それは貴方のチューナーが常にパラメータ {“dropout”: 0.3, “learning_rate”: 0.4} を生成することを意味します。それからトライアルは API nni.get_next_parameter() を呼び出すことにより {“dropout”: 0.3, “learning_rate”: 0.4} を受け取ります。ひとたびトライアルが結果 (通常はある種のメトリクス) とともに終了すれば、それは API nni.report_final_result() を呼び出すことにより結果をチューナーに送ることができます、例えば nni.report_final_result(0.93) です。それから貴方のチューナーの receive_trial_result 関数は次のように結果を受け取ります :

parameter_id = 82347
parameters = {"dropout": 0.3, "learning_rate": 0.4}
value = 0.93

貴方のチューナーの作業ディレクトリは <home>/nni/experiments/<experiment_id>/log で、これは環境変数 NNI_LOG_DIRECTORY で受け取ることができて、従って、貴方自身のチューナーのディレクトリでファイル (e.g., data.txt) にアクセスすることを望む場合、open(‘data.txt’, ‘r’) は使用できないことに注意してください。代わりに、以下を使用するべきです :

_pwd = os.path.dirname(__file__)
_fd = open(os.path.join(_pwd, 'data.txt'), 'r')

これは貴方のチューナーが貴方のチューナーのディレクトリで実行されないからです (i.e., pwd は貴方自身のチューナーのディレクトリではありません)。

 
3. 実験 YAML config ファイルで貴方のカスタマイズされたチューナーを configure する

NNI は貴方のカスタマイズされたチューナークラスの位置を特定してクラスをインスタンス化する必要がありますので、カスタマイズされたチューナークラスの位置を指定してパラメータとしてリテラル値を __init__ コンストラクタに渡す必要があります。

tuner:
  codeDir: /home/abc/mytuner
  classFileName: my_customized_tuner.py
  className: CustomizedTuner
  # Any parameter need to pass to your tuner class __init__ constructor
  # can be specified in this optional classArgs field, for example
  classArgs:
    arg1: value1

より詳細なサンプルは以下を見ることができるでしょう :

 

より進んだ automl アルゴリズムを書く

上のメソッドは通常は一般的なチューナーを書くために十分です。けれども、よりパワフルな automl アルゴリズムを持つために、ユーザはより多くのメソッド、例えば、中間結果、トライアルの状態 (アセッサーのメソッド) も望むかも知れません。そのため、アドバイザーと呼ばれるもう一つの概念を持ちます、これは src/sdk/pynni/nni/msg_dispatcher_base.py の MsgDispatcherBase から直接に継承します。カスタマイズされたアドバイザーをどのように書くかについては ここ を参照してください。

 

以上






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