Blog

はじめに

Optunaはブラックボックス最適化を行うためのOSSであり、近年最も世界で成功を収めつつあるフレームワークの一つです。月間ダウンロード数は200万以上、GitHubのStar数は1万を超え、1万5千以上のソフトウェアに利用されています。

Optunaチームは本日、Optunaの機能共有プラットフォームOptunaHubのベータ版をリリースしました。OptunaHubには世界中のあらゆるOptunaユーザが自由に利用可能な機能が登録されており、また全ての研究者・開発者が自由に機能を登録することができます。OptunaHubのベータ版では、多くの野心的な新機能とともに、世界中からコントリビューションを受け入れる体制が完全に整いました。そこで本記事では、OputunaHubについてご紹介し、OptunaHubに機能を導入する方法を説明します。

TL;DR

  • OptunaHubは世界中のコントリビュータが開発したOptuna向け機能を共有するためのプラットフォームで、誰でも簡単に利用・機能登録が可能です!
  • みなさんのOptunaHubへの機能登録を大募集中です、ぜひご登録ください!

OptunaHubの紹介

OptunaHubは、世界中のコントリビュータが開発したOptuna向け機能を共有するためのプラットフォームです。ブラックボックス最適化の研究者・開発者は自身が開発した機能をOptunaHubに登録でき、ユーザはそれらの機能をOptuna本体の機能と同様のインタフェースで簡単に利用することができます。2024年7月現在OptunaHubではSampler, Prunerといったアルゴリズムや可視化機能の登録・利用がサポートされています。

OptunaHubのトップページ (https://hub.optuna.org/) にアクセスすると登録されたパッケージのリストが表示されます(図1)。パッケージはOptuna向けに実装された機能のPythonモジュールです。ここでは、検索をしたり、タグを用いて所望の機能を提供するパッケージを見つけることができます。パッケージの名前をクリックすることで、詳細ページに移動し当該パッケージの使用方法や使用例を確認することができます(図2)。

図1: OptunaHubのトップページ

図1: OptunaHubのトップページ

図2: 詳細ページの例

図2: 詳細ページの例

OptunaHubにあるパッケージを使用するには、まずoptunahubライブラリをインストールします。

pip install optunahub

ライブラリが提供するoptunahub.load_module関数にパッケージ名を渡すことで、当該モジュールを読み込むことができます。パッケージ名はcategory/user_defined_nameの形式となっており、詳細ページのPackage欄にて確認することができます。後はOptuna本体にあるものと全く同様の方法で、モジュールに実装された所望の機能(この例ではSimulatedAnnealingSampler)を利用することができます。


import optuna
import optunahub


def objective(trial: optuna.Trial) -> float:
    x = trial.suggest_float("x", 0, 1)

    return x


if __name__ == "__main__":
    mod = optunahub.load_module("samplers/simulated_annealing")

    sampler = mod.SimulatedAnnealingSampler()
    study = optuna.create_study(sampler=sampler)
    study.optimize(objective, n_trials=20)

    print(study.best_trial.value, study.best_trial.params)

より詳しいoptunahubライブラリの情報は公式ドキュメントをご確認下さい。

OptunaHubへの機能の登録方法

OptunaHubの全てのパッケージはoptunahub-registryというリポジトリで管理されています。このリポジトリのpackageディレクトリ以下に、Sampler, Pruner, Visualizationの各カテゴリに対応するディレクトリがあり、それぞれの中に個別のパッケージが配置されています。例えば、先程の例で利用したSimulated Annealing Samplerパッケージの実体はoptunahub-registry/package/samplers/simulated_annealingです。

OptunaHubに新たに機能を登録するには、optunahub-registryをforkし、アルゴリズム、README、ライセンスを含む以下のような構造のパッケージ(optionalな要素は省略しています)を実装した上で、optunahub-registryにプルリクエストを作成します。

package
  └── category (e.g. samplers, pruners, and visualization)
    └── YOUR_PACKAGE_NAME (you need to create this directory and its contents)
    ├── README.md
    ├── LICENSE
    ├── __init__.py
    └── YOUR_ALGORITHM_NAME.py

プルリクエストを作成すると、Optunaチームによって簡単な確認が行われ、直ちにマージが実施されます。optunahub-registryにおけるコードレビューは、フォーマットの不備の確認やセキュリティ上の脅威がないかなど簡易的なものになります。プルリクエストのマージ後最大1時間程度で、当該パッケージはOptunaHubのWebサイトに表示されるようになります。公式チュートリアルでは、パッケージの登録方法についてより詳しく解説しています。

OptunaHubでは、これまでOptuna本体ではサポートすることが難しかった、近年公開されたばかりの最新手法や特定のアプリケーションに特化した手法の登録も積極的に受け付けています。例えば、Evolutionary LLM Merge Samplerパッケージ(図3)は、2024年に公開されたばかりの論文で提案された大規模言語モデルのマージ手法の実装を提供しています。

図3: Evolutionary LLM Merge Sampler

図3: Evolutionary LLM Merge Sampler

OptunaHubでは、皆様からのコントリビューションをお待ちしています。

おわりに

今回、OptunaHub βバージョンの公開に寄せて、OptunaHubの紹介とOptunaHubへの機能の登録方法について説明させていただきました。我々Optunaチームは、OSS開発を通じてブラックボックス最適化による問題解決と研究開発コミュニティの発展に広く貢献できるよう邁進していく所存ですので、今後ともよろしくお願いします。

Optunaチームでは一緒にOptunaやOptunaHubを開発するパートタイムエンジニアを随時募集しています。また、OptunaHubの機能開発をメインとした短期の募集も開始しました。本記事を通して、ご興味を持っていただけたという方はぜひ下記ページより詳細をご確認ください。

また、8月17日には約2年ぶりとなるOptuna開発スプリントを学生を対象に開催します。Optunaコミッタと一緒にOptunaHub向けの機能開発にチャレンジできるイベントなので、こちらも奮ってご参加ください!

  • Twitter
  • Facebook