環境 CentOS Stream release 9 Apache/2.4.57 (CentOS Stream) Xserver VPS
mysql サーバーにログイン
mysql -uroot -p
Enter password:
optuna 用のデータベースを作成 (データベース名は任意の名前で構わないがここでは study_name と合致させる)
create database optuna;
quit;
Python 必要なライブラリをインストール
source my_env/bin/activate # 環境に応じて
pip install mysqlclient
pip install mysql-connector-python
Python ファイル
import os import mysql.connector as mysql import pymysql # Optuna で枝刈りしながら最適化 def OptunaFunc(study_name, trloader, teloader): # sqlite を使用する場合 """ dirpath = './sqldb' if not os.path.exists(dirpath): # ディレクトリが存在しない場合は作成する os.makedirs(dirpath) storage='sqlite:///sqldb/%s.db' % (study_name) """ # mysql データベースを使用する場合 storage = 'mysql+pymysql://root:パスワード@localhost/%s' % (study_name) pruner = optuna.pruners.HyperbandPruner(min_resource=1, max_resource=max_epoch, reduction_factor=3) study = optuna.create_study( study_name = study_name, pruner = pruner, storage = storage, load_if_exists = True ) study.optimize(objective_variable_degree(trloader, teloader), timeout=limit) return study.best_params, study.best_value
これだけで optuna を動かせば予め作成しておいたデータベース内にテーブル、テーブル内にカラムが自動作成される。
データベースを確認
mysql -uroot -p
Enter password:
データベース選択
use optuna;
テーブル参照
show tables;
+---------------------------+ | Tables_in_optuna | +---------------------------+ | alembic_version | | studies | | study_directions | | study_system_attributes | | study_user_attributes | | trial_heartbeats | | trial_intermediate_values | | trial_params | | trial_system_attributes | | trial_user_attributes | | trial_values | | trials | | version_info | +---------------------------+ 13 rows in set (0.001 sec)
trial_values テーブル内のカラム参照
show columns from trial_values;
+----------------+------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------------------------------+------+-----+---------+----------------+ | trial_value_id | int(11) | NO | PRI | NULL | auto_increment | | trial_id | int(11) | NO | MUL | NULL | | | objective | int(11) | NO | | NULL | | | value | double | YES | | NULL | | | value_type | enum('FINITE','INF_POS','INF_NEG') | NO | | NULL | | +----------------+------------------------------------+------+-----+---------+----------------+ 5 rows in set (0.002 sec)
最新レコード抽出、参照
select * from trial_values order by trial_value_id desc limit 1\G
trial_value_id: 18 trial_id: 18 objective: 0 value: 1.00652 value_type: FINITE 1 row in set (0.002 sec)
これで Optuna 分散並列処理の環境が整う。