= 機械学習環境を個人用PCにセットアップする = [[PageOutline]] 加速器機械学習フォーラムでの話題がきっかけで書きました。 初心者向けの環境構築の一例として活用いただけますと幸いです。 一般的な機械学習を学ぶ目的には Google Colaboratory を使う方がお勧めですが、自分のPCで直接機器制御をやりたいときや、外部ネットワークにつながらない環境では役立つかもしれません。 このセットアップ手順は Windows11 PCで簡単に環境を構築する例となっていますが、WSL2を除けばUbuntu環境や多くのLinux環境でそのまま使えるはずです。その場合はpython3のところから読んでください。 概略 * WSL2+Ubuntuをインストール * python3をソースからインストール * venv 設定 * 環境設定:以下の3パターンを紹介する。すべて入れる必要は無く、どれか1つで十分です。良くわからない場合は最後のGPyOptだけ入れて試すのが簡単です。 - !TensorFlow インストール、動作確認 - !PyTorch インストール、動作確認 - GPyOpt インストール、動作確認 * 使い方まとめ * 次のステップ - [wiki:misc/setup_for_ML/example_beamsize ビームサイズ調整例] を書いた。Ocelot を使用。 - CUDAの話はまだ書いていない == WSL2のインストール == 最初に__管理者権限で__コマンドプロンプトを開く。wslコマンドで、インストール可能なディストリビューションを検索・確認する。 (wslコマンドが無い場合は、適当にGoogleで検索してください) {{{ C:\>wsl --list --online インストールできる有効なディストリビューションの一覧を次に示します。 'wsl --install -d ' を使用してインストールします。 NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_7 Oracle Linux 8.7 OracleLinux_9_1 Oracle Linux 9.1 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 openSUSE-Leap-15.4 openSUSE Leap 15.4 openSUSE-Tumbleweed openSUSE Tumbleweed }}} [[Image(wsl_install1.png, 40%)]] ここではUbuntu22.04をインストールすることにする。 * case1: 初めてWSLをインストールする場合 - PCに初めてWSLをインストールする際には「仮想マシンプラットフォーム」もインストールされるのでPCの再起動が必要です。再起動後に自動的にUbuntuのターミナルが開くはずですが、もし出ない場合はスタートメニューから手動でUbuntuのコマンドラインを立ち上げてください。 {{{ C:\Windows\System32>wsl --install --d Ubuntu-22.04 インストール中: 仮想マシン プラットフォーム 仮想マシン プラットフォーム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Ubuntu 22.04 LTS Ubuntu 22.04 LTS はインストールされました。 要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。 }}} * case2 - 2回目以降は自動的にUbuntuのターミナルが起動して、ユーザー名を入れるプロンプトが出るので、ユーザー名とパスワードを設定する。(最初は少し時間がかかるかもしれない) {{{ C:\>wsl --install --d Ubuntu-22.04 インストール中: Ubuntu 22.04 LTS Ubuntu 22.04 LTS はインストールされました。 Ubuntu 22.04 LTS を起動しています... }}} いずれのケースも、下のようなターミナルが出るはず。 {{{ Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: obina New password: Retype new password: passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.10.60.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage This message is shown once a day. To disable it please create the /home/obina/.hushlogin file. obina@notepc:~$ }}} [[Image(wsl_install2.png, 40%)]] [[Image(wsl_install3.png, 40%)]] いちおう確認 {{{ obina@notepc:~$ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.2 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.2 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy }}} パッケージのアップデート。先ほど入力したパスワードを入れる {{{ obina@notepc:~$ sudo apt update Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB] ..... Fetched 26.5 MB in 6s (4327 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 19 packages can be upgraded. Run 'apt list --upgradable' to see them. }}} {{{ obina@notepc:~$ sudo apt upgrade Reading package lists... Done Building dependency tree... Done Reading state information... Done Calculating upgrade... Done The following packages will be upgraded: apt apt-utils distro-info-data git git-man libapt-pkg6.0 libglib2.0-0 libglib2.0-bin libglib2.0-data libssl3 libxml2 openssl tzdata ubuntu-advantage-tools vim vim-common vim-runtime vim-tiny xxd 19 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 10 standard LTS security updates Need to get 21.9 MB of archives. After this operation, 348 kB of additional disk space will be used. Do you want to continue? [Y/n] Y .... obina@notepc:~$ }}} とりあえずWSL関係はここまでで十分。 == python3インストール == Ubuntu22.04にデフォルトでインストールされているpythonは/usr/bin/pythonに存在する。バージョンは 3.10.6なので古くは無いが、システムで使われることも多いのでこれとは別にインストールする方針とする。venvを使うだけならばシステム標準のpythonをそのまま使っても問題無いので、ここは好みの問題です。 /usr/localに入れると他のプログラムと干渉する可能性もあるので、 /opt/python/... 以下にインストールしていく方針としている。ここはお好みで。(EPICSを入れるときに、 /opt/epics に入れているので似たような方針とした) Python.jpサイトでのガイドに従う [Ubuntu環境のPython: Python環境構築ガイド - python.jp](https://www.python.jp/install/ubuntu/index.html) pythonをビルドするために必要なパッケージをインストール {{{ sudo apt install build-essential libbz2-dev libdb-dev \ libreadline-dev libffi-dev libgdbm-dev liblzma-dev \ libncursesw5-dev libsqlite3-dev libssl-dev \ zlib1g-dev uuid-dev tk-dev }}} 今回はpython公式サイトから、Python3.10.11を入れる。(現時点(2023/05)の最新版はPython3.11.3ですが、これだとGPyOptがインストールできないという問題があったので少し古いバージョンを選んでいます)。 あらかじめインストール先として /opt/python/3.10.11 を作成しておく。 ownerを自分に設定することで、後の作業は一般ユーザー権限で行う。 {{{ obina@notepc:~$ cd /opt obina@notepc:/opt$ ls obina@notepc:/opt$ sudo mkdir python obina@notepc:/opt$ sudo chown obina:obina python obina@notepc:/opt$ cd python obina@notepc:/opt/python$ mkdir 3.10.11 obina@notepc:/opt/python$ ls 3.10.11 }}} ホームディレクトリに戻って、作業用のディレクトリ作成。ソースをダウンロード。URLは上の公式サイトから最新のモノを探す。今回の場合は以下の通りとなった。 {{{ obina@notepc:~$ mkdir work obina@notepc:~$ cd work obina@notepc:~/work$ wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz .... }}} configureでインストール先として /opt/python/3.10.11 を指定する。 lto (Link time optimization) はリンク時間が長くなる替わりに実行速度が上がる...らしい。(自分では未検証) {{{ obina@notepc:~/work$ tar xzvf Python-3.10.11.tgz obina@notepc:~/work$ cd Python-3.10.11/ obina@notepc:~/work/Python-3.10.11$ ls Doc LICENSE Makefile.pre.in Objects Parser README.rst config.guess configure.ac setup.py Grammar Lib Misc PC Programs Tools config.sub install-sh Include Mac Modules PCbuild Python aclocal.m4 configure pyconfig.h.in obina@notepc:~/work/Python-3.10.11$ ./configure --prefix=/opt/python/3.10.11 --enable-optimizations --with-lto obina@notepc:~/work/Python-3.10.11$ make -j8 # 並列化の数はCPU数に応じて適当に .... obina@notepc:~/work/Python-3.10.11$ make install # 先に make test するのが正しい姿... .... }}} 環境設定用のスクリプトを作成。WSLの場合はユーザーが自分だけなので~/.bashrcに直接書いても良いのだが、今後pythonのバージョンによって切り分けたいこともあると思うので/opt/python以下につくっておく {{{ $ vi /opt/python/setup_py3.10.11.sh export PATH=/opt/python/3.10.11/bin:$PATH }}} 念のため確認. 上のスクリプトを source する前後で使うpythonをチェック。 {{{ obina@notepc:~$ which python3 /usr/bin/python3 obina@notepc:~$ source /opt/python/3.10.11/setup_py3.10.11.sh obina@notepc:~$ which python3 /opt/python/3.10.11/bin/python3 }}} 問題ない。 {{{ obina@notepc:~$ which pip3 /opt/python/3.10.11/bin/pip3 obina@notepc:~$ obina@notepc:~$ pip3 list Package Version ---------- ------- pip 23.0.1 setuptools 65.5.0 [notice] A new release of pip is available: 23.0.1 -> 23.1.2 [notice] To update, run: pip3 install --upgrade pip }}} pip3を確認して、アップデートする {{{ obina@notepc:~$ pip3 install --upgrade pip Requirement already satisfied: pip in /opt/python/3.10.11/lib/python3.10/site-packages (23.0.1) Collecting pip Downloading pip-23.1.2-py3-none-any.whl (2.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 24.4 MB/s eta 0:00:00 Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 23.0.1 Uninstalling pip-23.0.1: Successfully uninstalled pip-23.0.1 Successfully installed pip-23.1.222.3.1 Successfully installed pip-23.1.2 }}} これで基本環境はOK。次はvenvを使って個別のパッケージを入れていく。 == venv 設定 == 次にTensorFlowやPyTorchを入れていく。それぞれでnumpyのバージョンなど、要求されるものが異なることが多いため別の仮想環境を作る方が良い。 ここではvenvを使うのでその設定を行う 基本方針: ホームディレクトリ直下に ".venv" というディレクトリを作成。 ~/.venv/以下に個別の仮想環境用のディレクトリを作成していく。 例えば - TensorFlow用は ~/.venv/tf2.12 - PyTorch用は ~/.venv/torch2.0 - GPyOpt用は ~/.venv/gpyopt のような感じでディレクトリを作っていく方針とする。 仮にあとで仮想環境を消したいときにはディレクトリ(上の例ではtf2.12とかtorch2.0とか)を削除すれば良いだけ。本当は~/.venvの下に作る必要は無く、どのディレクトリでも良いし隠しディレクトリである必然性も無いが、慣例に従う。 python.jpサイトの仮想環境構築ガイド - [windows](https://www.python.jp/install/windows/venv.html) - [ubuntu](https://www.python.jp/install/ubuntu/virtualenv.html) 今回はvenv以下に入れているがそもそも /opt/python/xxxx 以下に入れている「本体」に直接パッケージを入れても構わない。 よく使うソフトやバージョンが決まっている場合はその方が単純。 === !TensorFlow 用のvenv環境準備 === まずはTensorFlowのバージョンを確認 [tensorflow・PyPI](https://pypi.org/project/tensorflow/) をみると、python3.11に対応したTF2.12.0があることがわかる → venv名称をtf2.12とする方針とする ファイル名を確認する https://pypi.org/project/tensorflow/#files をみると、 tensorflow-2.12.0-cp311-cp311-manylinux_2_17_x86_64....whl というファイルがあるのでCPython3.11に対応しているようだ。 使用するpythonの場所が/opt以下であることを確認してから、venvを構築。このときに指定する名前がプロンプトの先頭に付くので、あまり長い名前を付けると面倒かもしれない(jupyter notebookを使うことが前提ならあまり気にならないが) {{{ obina@notepc:~$ which python3 /opt/python/3.10.11/bin/python3 obina@notepc:~$ python3 -m venv ~/.venv/tf2.12 }}} 念のためディレクトリを確認 {{{ obina@notepc:~$ ls ~/.venv/tf2.12/ bin include lib lib64 pyvenv.cfg obina@notepc:~$ ls ~/.venv/tf2.12/bin/ Activate.ps1 activate activate.csh activate.fish pip pip3 pip3.10 python python3 python3.10 }}} 仮想環境を起動; これ以降はプロンプトの先頭に (tf2.12)が付く {{{ obina@notepc:~$ source ~/.venv/tf2.12/bin/activate (tf2.12) obina@notepc:~$ }}} 終了するのは"deactivate"コマンドで良い {{{ (tf2.12) obina@notepc:~$ which python3 /home/obina/.venv/tf2.12/bin/python3 (tf2.12) obina@notepc:~$ which pip /home/obina/.venv/tf2.12/bin/pip (tf2.12) obina@notepc:~$ deactivate obina@notepc:~$ obina@notepc:~$ which python3 /opt/python/3.10.11/bin/python3 }}} == !TensorFlow インストール == 例によって(念のため)使うpipの在処を確認しておく {{{ obina@notepc:~$ source ~/.venv/tf2.12/bin/activate # venv環境を開始 (tf2.12) obina@notepc:~$ which pip3 /home/obina/.venv/tf2.12/bin/pip3 (tf2.12) obina@notepc:~$ pip3 install --upgrade pip # pipの更新 ..... Successfully installed pip-23.1.2 (tf2.12) obina@notepc:~$ pip3 list Package Version ---------- ------- pip 23.1.2 setuptools 65.5.0 (tf2.12) obina@notepc:~$ pip3 install tensorflow ..... Successfully installed MarkupSafe-2.1.2 absl-py-1.4.0 astunparse-1.6.3 cachetools-5.3.0 certifi-2023.5.7 charset-normalizer-3.1.0 flatbuffers-23.3.3 gast-0.4.0 google-auth-2.17.3 google-auth-oauthlib-1.0.0 google-pasta-0.2.0 grpcio-1.54.0 h5py-3.8.0 idna-3.4 jax-0.4.8 keras-2.12.0 libclang-16.0.0 markdown-3.4.3 ml-dtypes-0.1.0 numpy-1.23.5 oauthlib-3.2.2 opt-einsum-3.3.0 packaging-23.1 protobuf-4.23.0 pyasn1-0.5.0 pyasn1-modules-0.3.0 requests-2.30.0 requests-oauthlib-1.3.1 rsa-4.9 scipy-1.10.1 six-1.16.0 tensorboard-2.12.3 tensorboard-data-server-0.7.0 tensorflow-2.12.0 tensorflow-estimator-2.12.0 tensorflow-io-gcs-filesystem-0.32.0 termcolor-2.3.0 typing-extensions-4.5.0 urllib3-2.0.2 werkzeug-2.3.4 wheel-0.40.0 wrapt-1.14.1 (tf2.12) obina@notepc:~$ }}} これだけでOK.次に動作確認は公式サイトにあるコマンドで、 {{{ (tf2.12) obina@notepc:~$ python3 >>> >>> import tensorflow as tf ....(((いろいろとwarning))).... >>> >>> print(tf.reduce_sum(tf.random.normal([1000, 1000]))) tf.Tensor(-182.7671, shape=(), dtype=float32) >>> print(tf.reduce_sum(tf.random.normal([1000, 1000]))) tf.Tensor(-268.51474, shape=(), dtype=float32) }}} とりあえず動く。 もう1つ、kereasを使ったサンプル。 https://www.tensorflow.org/tutorials/quickstart/beginner をそのまま実行 {{{ import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) }}} 評価結果をみる {{{ >>> model.evaluate(x_test, y_test) 313/313 [==============================] - 0s 778us/step - loss: 0.0758 - accuracy: 0.9757 [0.07577536255121231, 0.9757000207901001] }}} ちゃんと学習出来ているので、インストール自体は問題なさそう。 === Jupyter Notebook, ipython のセットアップ === 次に、利便性のためにipythonやjupyter notebookを入れておく; 依存関係もあるがまとめてnotebookを入れるのが簡単。詳しくは https://jupyter.org/install を参照。あわせて matplotlib も入れておく {{{ (tf2.12) obina@notepc:~$ pip3 install notebook matplotlib .... (tf2.12) obina@notepc:~$ which ipython3 /home/obina/.venv/tf2.12/bin/ipython3 (tf2.12) obina@notepc:~$ (tf2.12) obina@notepc:~$ ipython3 --nosep IPython 8.13.2 -- An enhanced Interactive Python. Type '?' for help. In [1]: }}} ipythonが起動するので問題なし。 Jupyterノートブックの起動。デフォルトではOS内のブラウザを立ち上がようとしてしまうので、--no-browserオプションを付けて起動し、Windows側のブラウザで接続する。 {{{ (tf2.12) obina@notepc:~$ jupyter notebook --no-browser [I 21:30:41.014 NotebookApp] Writing notebook server cookie secret to /home/obina/.local/share/jupyter/runtime/notebook_cookie_secret _ _ _ _ | | | |_ __ __| |__ _| |_ ___ | |_| | '_ \/ _` / _` | _/ -_) \___/| .__/\__,_\__,_|\__\___| |_| Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions. https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html Please note that updating to Notebook 7 might break some of your extensions. [I 21:30:41.133 NotebookApp] Serving notebooks from local directory: /home/obina [I 21:30:41.133 NotebookApp] Jupyter Notebook 6.5.4 is running at: [I 21:30:41.133 NotebookApp] http://localhost:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45 [I 21:30:41.133 NotebookApp] or http://127.0.0.1:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45 [I 21:30:41.133 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 21:30:41.135 NotebookApp] To access the notebook, open this file in a browser: file:///home/obina/.local/share/jupyter/runtime/nbserver-19189-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45 or http://127.0.0.1:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45 }}} と出るので、Windowsで起動したブラウザに上のURLを貼り付ける。ブラウザで動くことを確認。たとえばこんな感じで。 [[Image(wsl_python_notebook1.png, 30%)]] このとき入力したコマンドは {{{ import numpy as np import matplotlib.pyplot as plt x = np.linspace(-5,5) y = x**3 plt.plot(x, y, 'bo-') plt.grid(True) }}} ※ Notebook 7 なるものがあるとは知らなかった.... 再掲:venv環境を抜けるのはdeactivate コマンドで終了するか、システムから抜ける。 == !PyTorch インストール == 最初に venv 環境を設定する。上の作業と続けるには deactivate してからおこなうこと。 どのpythonを使っているのかを確認してから。ベースとなるpythonは /opt/python 以下のものであること確認してから venv を作成する。 {{{ obina@notepc:~$ which python3 /opt/python/3.10.11/bin/python3 obina@notepc:~$ python3 -m venv ~/.venv/torch2.0 obina@notepc:~$ source ~/.venv/torch2.0/bin/activate (torch2.0) obina@notepc:~$ }}} 次に、venv環境内にPyTorchをインストールする。やはり公式サイトからスタート https://pytorch.org/get-started/locally/ PyTorchのOSやバージョン、GPUの有無などを選択。 [[Image(wsl_python_torch1.png, 40%)]] ここではGPUが無い環境なので {{{ PyTorch Build: Stable(2.0.1) Your OS: Linux Package: Pip Language: Python Compute Platform: CPU }}} を選択する。コマンドは {{{ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu }}} となったので、これをいれる。 ここからは先ほどと同様にpipの更新を行った後で、torch入れる。 {{{ (torch2.0) obina@notepc:~$ which pip /home/obina/.venv/torch2.0/bin/pip (torch2.0) obina@notepc:~$ pip install --upgrade pip .... Successfully installed pip-23.1.2 (torch2.0) obina@notepc:~$ (torch2.0) obina@notepc:~$ pip list Package Version ---------- ------- pip 23.1.2 setuptools 65.5.0 (torch2.0) obina@notepc:~$ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu .... Installing collected packages: mpmath, urllib3, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, idna, filelock, charset-normalizer, certifi, requests, jinja2, torch, torchvision, torchaudio Successfully installed MarkupSafe-2.1.2 certifi-2022.12.7 charset-normalizer-2.1.1 filelock-3.9.0 idna-3.4 jinja2-3.1.2 mpmath-1.2.1 networkx-3.0 numpy-1.24.1 pillow-9.3.0 requests-2.28.1 sympy-1.11.1 torch-2.0.1+cpu torchaudio-2.0.2+cpu torchvision-0.15.2+cpu typing-extensions-4.4.0 urllib3-1.26.13 }}} 動作確認 {{{ (torch2.0) obina@notepc:~$ python >>> >>> import torch >>> x = torch.rand(5,3) >>> print(x) tensor([[0.1193, 0.9816, 0.3111], [0.8966, 0.0651, 0.5655], [0.5590, 0.1083, 0.6464], [0.7477, 0.3680, 0.5885], [0.8389, 0.1438, 0.8069]]) >>> }}} 問題無さそう。あとはチュートリアルから適当に選んで動作確認すれば良い。 https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html あとはjupyter notebook, matplotlib, plotly, seabornなど、お好みで。 お手軽に使うには ax-platformを入れるのも楽。 ※ PyTorchでは numpy 1.24.1, TensorFlowでは 1.23.5 を使用している ここではサンプルとして、!BoTorch, Ax を入れる。notebook, matplotlibもまとめて入れてしまう。 {{{ (torch2.0) obina@notepc:~$ pip install botorch ax-platform notebook matplotlib }}} BoTorchのgetting startedを実行 https://botorch.org/docs/getting_started 乱数でデータを作成 {{{ import torch from botorch.models import SingleTaskGP from botorch.fit import fit_gpytorch_mll from gpytorch.mlls import ExactMarginalLogLikelihood train_X = torch.rand(10, 2) Y = 1 - (train_X - 0.5).norm(dim=-1, keepdim=True) # explicit output dimension Y += 0.1 * torch.rand_like(Y) train_Y = (Y - Y.mean()) / Y.std() }}} 続いてガウス過程モデル(SingleTaskGP)を定義し、周辺尤度最大化(ExactMarginalLongLikelihood) によってカーネルパラメータを推定します。 {{{ gp = SingleTaskGP(train_X, train_Y) mll = ExactMarginalLogLikelihood(gp.likelihood, gp) fit_gpytorch_mll(mll); }}} 獲得関数としてUCBを使う {{{ from botorch.acquisition import UpperConfidenceBound UCB = UpperConfidenceBound(gp, beta=0.1) }}} 最適化 {{{ from botorch.optim import optimize_acqf bounds = torch.stack([torch.zeros(2), torch.ones(2)]) candidate, acq_value = optimize_acqf( UCB, bounds=bounds, q=1, num_restarts=5, raw_samples=20, ) }}} 結果表示 {{{ print(candidate) }}} そのほか、簡単に確認するにはAxのサンプルを実行するのも良いだろう [Ax ・ Adaptive Experimentation Platform](https://ax.dev/) == GPyOptインストール == 先にいくつかの注意点のみ記載しておく。 - python3.11ではコンパイルできないので python3.10を使用する(3.10->3.11でlongintrepr.hが無くなったことに起因) - numpy, matplotlibのバージョン指定が必要 - venv でGPyOpt用の環境を作成して !TensorFlow/PyTorchと分離するのが簡単 - venvのなかで {{{ $ pip install GPyOpt numpy==1.23.1 notebook matplotlib==3.1.3 }}} でOK 先ほどと同様に、~/.venv/gpyopt を作成してく方針とする。 {{{ obina@notepc:~$ which python3 /opt/python/3.10.11/bin/python3 obina@notepc:~$ python3 -m venv ~/.venv/gpyopt obina@notepc:~$ source ~/.venv/gpyopt/bin/activate (gpyopt) obina@noteppc:~$ }}} pipをupdateした後で、GPyOptを入れる {{{ (gpyopt) obina@notepc:~$ pip install --upgrade pip ... (gpyopt) obina@notepc:~$ pip install GPyOpt numpy==1.23.1 notebook matplotlib==3.1.3 ... }}} notebookのエンジンをブラウザ無しで起動する {{{ (gpyopt) obina@notepc:~$ jupyter notebook --no-browser .... Or copy and paste one of these URLs: http://localhost:8888/?token=91bde12e208d9c0fc57a9e23ee78264f5da132cee93f0d09 }}} 最後に出てくる{{{ http://... }}} URLをPCのブラウザで開く。 ここではサンプルとして、加速器学会の例 https://www.pasj.jp/web_publish/pasj2021/proceedings/PDF/WEOB/WEOB03_oral.pdf をそのまま実行する。 {{{ import numpy as np import GPy import GPyOpt def targ_func(x): val = np.cos(2.3*x) + 0.5*x return val #__main__ bounds = [{'name': 'x', 'type': 'continuous', 'domain': (0,10)}] # ベイズ推定用のオブジェクト作成 myBopt = GPyOpt.methods.BayesianOptimization(f=targ_func, domain=bounds, initial_design_numdata=5, acquisition_type='LCB') # 最適化実行 myBopt.run_optimization(max_iter=15) # 結果表示 print(myBopt.x_opt, myBopt.fx_opt) # プロット myBopt.plot_acquisition() myBopt.plot_convergence() }}} Notebookの様子はこんな感じ [[Image(GPyOpt_LCB3.png, 50%)]] LCBを使った場合の結果 [[Image(GPyOpt_LCB1.png, 30%)]] [[Image(GPyOpt_LCB2.png, 30%)]] EIを使った場合の結果 [[Image(GPyOpt_EI1.png, 30%)]] [[Image(GPyOpt_EI2.png, 30%)]] == 使い方まとめ == venvを使ってTensorFlow, PyTorch, GPyOpt を使い分ける環境を設定した。これは環境によって要求されるnumpy等のバージョンが異なることに対応することが目的である。 使うモノが決まっている場合には元々のpython環境にインストールするのが簡単。 使うときには、それぞれ - source ~/.venv/tf2.12/bin/activate - source ~/.venv/torch2.0/bin/activate - source ~/.venv/gpyopt/bin/activate を実行するだけで良い。終了時には "deactivate" コマンドで抜ける。 参考のため、それぞれの環境で pip freeze した結果を添付しておく - attachment:pip_tf_req.txt - attachment:pip_torch_req.txt - attachment:pip_gpyopt_req.txt == 次のステップ == 次に読むと良いもの * [wiki:misc/setup_for_ML/example_beamsize ビームサイズ調整例] を書いた。Ocelot を使用。 ここから先はまだ書いていない * GPU環境 (CUDA)でのセットアップ例 * EPICS連携