aiaccel icon indicating copy to clipboard operation
aiaccel copied to clipboard

Fix the handling of None values.

Open KanaiYuma-aist opened this issue 1 year ago • 0 comments

ユーザプログラムが None を返した際に、エラーが出る・想定外の挙動を取る現象を修正しました。

  • MOTPE 等の多目的最適化をtype: localで実行した場合、(1.0, None)のような片方の目的関数の結果がNoneだった時に、コード内では (1.0, "None") のように None が str として扱われます。(ファイル読み書きで目的関数の値を渡している都合)
    • aiaccel/storage/result.py 内の97行目のように np.array((1.0, "None")) を実行した際に、"None" が str である影響で 1.0 も str 扱いされて、その後の比較処理の部分でエラーになっていました。
    • type: pylocalの場合は、Noneは通常のNoneとして扱われるため、そちらに合わせる意図も込みで type:localの時も None を通常の None として扱うように aiaccel/cli/set_result.py を改修しました。
      • 文字列の"None" を通常の None に変換する処理を追加しています。
  • aiaccel/storage/result.py 内97行目の objectives に None が含まれている場合、そのまま np.max(もしくは np.min)を実行すると None との比較が発生しエラーになるため、objectivesからNoneを除外する処理を追加しました。
  • (1.0, None)のような片方の目的関数の結果がNoneのような結果が含まれるaiaccelの結果をtensor boardで表示した時、パラメータと結果の組のテーブル表示が乱れることがありました。
    • 例えば、下記のような結果をtensor boardで可視化しようとした際に、 Screenshot from 2023-05-09 16-08-35
    • テーブルは以下のようになり、2番目のresultの値が表示されなくなります。 Screenshot from 2023-05-09 16-11-03
    • このようになる原因の詳細は不明ですが、trial id の欄を 00000X のような0が連続する4~6桁の表記にすると発生する模様です。(tensor board単体のコードでも再現しました。tensor board 内部の何かと値が競合している可能性があります。)
    • trial id の欄を 000000X のような7桁の表記にすると、以下のように正常に表示される(Noneの箇所は空欄)ので、暫定処理としてデフォルト設定を7桁とし、6桁以下の設定の場合は7桁表示に変更するように修正しました。 Screenshot from 2023-05-09 16-27-04

KanaiYuma-aist avatar May 09 '23 07:05 KanaiYuma-aist