Changes between Version 3 and Version 4 of misc/setup_for_ML


Ignore:
Timestamp:
05/10/23 11:31:04 (22 months ago)
Author:
Takashi Obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • misc/setup_for_ML

    v3 v4  
    136136
    137137== python3インストール ==
     138今回はpython公式サイトから、現時点(2023/05)の最新版であるPython3.11.3を入れる。
     139機械学習環境を構築する目的からは必ずしも最新版が良いとは限らない(ときどき最新バージョンに対応できていないことがある)が、今回はこれで問題なさそう。
     140
     141
     142あらかじめインストール先として /opt/python/3.11.3 を作成しておく。
     143ownerを自分に設定することで、後の作業は一般ユーザー権限で行う。
     144{{{
     145obina@notepc:~$ cd /opt
     146obina@notepc:/opt$ ls
     147obina@notepc:/opt$ sudo mkdir python
     148obina@notepc:/opt$ sudo chown obina:obina python
     149obina@notepc:/opt$ cd python
     150obina@notepc:/opt/python$ mkdir 3.11.3
     151obina@notepc:/opt/python$ ls
     1523.11.3
     153}}}
     154
     155ホームディレクトリに戻って、作業用のディレクトリ作成。ソースをダウンロード。URLは上の公式サイトから最新のモノを探す。今回の場合は以下の通りとなった。
     156{{{
     157obina@notepc:~$ mkdir work
     158obina@notepc:~$ cd work
     159obina@notepc:~/work$ wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
     160--2023-05-09 20:11:15--  https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
     161Resolving www.python.org (www.python.org)... 151.101.108.223, 2a04:4e42:1a::223
     162Connecting to www.python.org (www.python.org)|151.101.108.223|:443... connected.
     163HTTP request sent, awaiting response... 200 OK
     164Length: 26455738 (25M) [application/octet-stream]
     165Saving to: ‘Python-3.11.3.tgz’
     166
     167Python-3.11.3.tgz             100%[=================================================>]  25.23M  19.5MB/s    in 1.3s
     168
     1692023-05-09 20:11:17 (19.5 MB/s) - ‘Python-3.11.3.tgz’ saved [26455738/26455738]
     170}}}
     171
     172configureでインストール先として /opt/python/3.11.3 を指定する。
     173{{{
     174obina@notepc:~/work$ tar xvfz Python-3.11.3.tgz
     175obina@notepc:~/work$ cd Python-3.11.3/
     176obina@notepc:~/work/Python-3.11.3$ ls
     177Doc      LICENSE  Makefile.pre.in  Objects  Parser    README.rst  config.guess  configure.ac   setup.py
     178Grammar  Lib      Misc             PC       Programs  Tools       config.sub    install-sh
     179Include  Mac      Modules          PCbuild  Python    aclocal.m4  configure     pyconfig.h.in
     180
     181obina@notepc:~/work/Python-3.11.3$ ./configure --prefix=/opt/python/3.11.3 --enable-optimizations --with-lto
     182
     183# lto (Link time optimization) はリンク時間が長くなる替わりに実行速度が上がる...らしい。(自分では未検証)
     184obina@notepc:~/work/Python-3.11.3$ make -j8 # 並列化の数はCPU数に応じて適当に
     185....
     186obina@notepc:~/work/Python-3.11.3$ make install
     187....
     188}}}
     189
     190環境設定用のスクリプトを作成。WSLの場合はユーザーが自分だけなので~/.bashrcに直接書いても良いのだが、今後pythonのバージョンによって切り分けたいこともあると思うので/opt/python以下につくっておく
     191{{{
     192$ vi /opt/python/setup_py3.11.3.sh
     193export PATH=/opt/python/3.11.3/bin:$PATH
     194}}}
     195
     196念のため確認. 上のスクリプトを source する前後で使うpythonをチェック。
     197{{{
     198obina@notepc:~$ which python3
     199/usr/bin/python3
     200obina@notepc:~$ source /opt/python/3.11.3/setup_py3.11.3.sh
     201obina@notepc:~$ which python3
     202/opt/python/3.11.3/bin/python3
     203}}}
     204
     205問題ない。
     206{{{
     207obina@notepc:~$ which pip3
     208/opt/python/3.11.3/bin/pip3
     209obina@notepc:~$
     210obina@notepc:~$ pip3 list
     211Package    Version
     212---------- -------
     213pip        22.3.1
     214setuptools 65.5.0
     215
     216[notice] A new release of pip available: 22.3.1 -> 23.1.2
     217[notice] To update, run: pip3 install --upgrade pip
     218}}}
     219
     220pip3を確認して、アップデートする
     221{{{
     222obina@notepc:~$ pip3 install --upgrade pip
     223Requirement already satisfied: pip in /opt/python/3.11.3/lib/python3.11/site-packages (22.3.1)
     224Collecting pip
     225  Downloading pip-23.1.2-py3-none-any.whl (2.1 MB)
     226     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 1.8 MB/s eta 0:00:00
     227Installing collected packages: pip
     228  Attempting uninstall: pip
     229    Found existing installation: pip 22.3.1
     230    Uninstalling pip-22.3.1:
     231      Successfully uninstalled pip-22.3.1
     232Successfully installed pip-23.1.2
     233}}}
     234これで基本環境はOK。次はvenvを使って個別のパッケージを入れていく。
     235
     236
    138237== venv 設定 ==
    139 == !TensorFlow インストール ==
     238次にTensorFlowやPyTorchを入れていく。それぞれでnumpyのバージョンなど、要求されるものが異なることが多いため別の仮想環境を作る方が良い。
     239
     240ここではvenvを使うのでその設定を行う
     241
     242基本方針: ホームディレクトリ直下に ".venv" というディレクトリを作成。 ~/.venv/以下に個別の仮想環境用のディレクトリを作成していく。
     243例えば
     244 - TensorFlow用は ~/.venv/tf2.12
     245 - PyTorch用は ~/.venv/torch2.0
     246のような感じでディレクトリを作っていく
     247仮にあとで仮想環境を消したいときにはディレクトリ(上の例ではtf2.12とかtorch2.0とか)を削除すれば良いだけ。実際には.venvの下に作る必要はなく、どのディレクトリでも良いし隠しディレクトリである必然性も無いが、慣例に従う。
     248python.jpサイトの仮想環境構築ガイド
     249 - [windows](https://www.python.jp/install/windows/venv.html)
     250 - [ubuntu](https://www.python.jp/install/ubuntu/virtualenv.html)
     251
     252
     253=== !TensorFlow 用のvenv環境準備 ===
     254
     255まずはTensorFlowのバージョンを確認
     256[tensorflow・PyPI](https://pypi.org/project/tensorflow/)
     257をみると、python3.11に対応したTF2.12.0があることがわかる → venv名称をtf2.12とする方針とする
     258
     259
     260ファイル名を確認する
     261https://pypi.org/project/tensorflow/#files
     262をみると、
     263tensorflow-2.12.0-cp311-cp311-manylinux_2_17_x86_64....whl
     264というファイルがあるのでCPython3.11に対応しているようだ。
     265
     266
     267使用するpythonの場所が/opt以下であることを確認してから、venvを構築。このときに指定する名前がプロンプトの先頭に付くので、あまり長い名前を付けると面倒かもしれない(jupyter notebookを使うことが前提ならあまり気にならないが)
     268{{{
     269obina@notepc:~$ which python3
     270/opt/python/3.11.3/bin/python3
     271obina@notepc:~$ python3 -m venv ~/.venv/tf2.12
     272}}}
     273
     274念のためディレクトリを確認
     275{{{
     276obina@notepc:~$ ls ~/.venv/tf2.12/
     277bin  include  lib  lib64  pyvenv.cfg
     278obina@notepc:~$ ls ~/.venv/tf2.12/bin/
     279Activate.ps1  activate  activate.csh  activate.fish  pip  pip3  pip3.11  python  python3  python3.11
     280}}}
     281
     282仮想環境を起動; これ以降はプロンプトの先頭に (tf2.12)が付く
     283{{{
     284obina@notepc:~$ source ~/.venv/tf2.12/bin/activate
     285(tf2.12) obina@notepc:~$
     286}}}
     287
     288終了するのは"deactivate"コマンドで良い
     289{{{
     290(tf2.12) obina@notepc:~$ which python3
     291/home/obina/.venv/tf2.12/bin/python3
     292(tf2.12) obina@notepc:~$ which pip
     293/home/obina/.venv/tf2.12/bin/pip
     294(tf2.12) obina@notepc:~$ deactivate
     295obina@notepc:~$
     296obina@notepc:~$ which python3
     297/opt/python/3.11.3/bin/python3
     298}}}
     299
     300== TensorFlow インストール ==
     301例によって確認しておく
     302{{{
     303(tf2.12) obina@notepc:~$ which pip3
     304/home/obina/.venv/tf2.12/bin/pip3
     305(tf2.12) obina@notepc:~$ pip3 install --upgrade pip
     306.....
     307Successfully installed pip-23.1.2
     308(tf2.12) obina@notepc:~$ pip3 list
     309Package    Version
     310---------- -------
     311pip        23.1.2
     312setuptools 65.5.0
     313
     314(tf2.12) obina@notepc:~$ pip3 install tensorflow
     315.....
     316Successfully 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
     317(tf2.12) obina@notepc:~$
     318}}}
     319
     320ここで動作確認。公式サイトにあるコマンドで。
     321{{{
     322(tf2.12) obina@notepc:~$ python3
     323Python 3.11.3 (main, May  9 2023, 20:29:30) [GCC 11.3.0] on linux
     324Type "help", "copyright", "credits" or "license" for more information.
     325>>>
     326>>> import tensorflow as tf
     327....(((いろいろとwarning)))....
     328>>>
     329>>> print(tf.reduce_sum(tf.random.normal([1000, 1000])))
     330tf.Tensor(-182.7671, shape=(), dtype=float32)
     331>>> print(tf.reduce_sum(tf.random.normal([1000, 1000])))
     332tf.Tensor(-268.51474, shape=(), dtype=float32)
     333}}}
     334とりあえず動く。
     335
     336もう1つ、kereasを使ったサンプル。
     337https://www.tensorflow.org/tutorials/quickstart/beginner
     338をそのまま実行
     339{{{
     340import tensorflow as tf
     341mnist = tf.keras.datasets.mnist
     342
     343(x_train, y_train),(x_test, y_test) = mnist.load_data()
     344x_train, x_test = x_train / 255.0, x_test / 255.0
     345
     346model = tf.keras.models.Sequential([
     347  tf.keras.layers.Flatten(input_shape=(28, 28)),
     348  tf.keras.layers.Dense(128, activation='relu'),
     349  tf.keras.layers.Dropout(0.2),
     350  tf.keras.layers.Dense(10, activation='softmax')
     351])
     352
     353model.compile(optimizer='adam',
     354              loss='sparse_categorical_crossentropy',
     355              metrics=['accuracy'])
     356
     357model.fit(x_train, y_train, epochs=5)
     358model.evaluate(x_test, y_test)
     359}}}
     360
     361評価結果をみる
     362{{{
     363>>> model.evaluate(x_test, y_test)
     364313/313 [==============================] - 0s 778us/step - loss: 0.0758 - accuracy: 0.9757
     365[0.07577536255121231, 0.9757000207901001]
     366}}}
     367ちゃんと学習出来ているので、インストール自体は問題なさそう。
     368
     369=== Jupyter Notebook, ipython のセットアップ ===
     370次に、利便性のためにipythonやjupyter notebookを入れておく; 依存関係もあるがまとめてnotebookを入れるのが簡単。詳しくは
     371https://jupyter.org/install
     372を参照。
     373{{{
     374(tf2.12) obina@notepc:~$ pip3 install notebook
     375....
     376(tf2.12) obina@notepc:~$ which ipython3
     377/home/obina/.venv/tf2.12/bin/ipython3
     378(tf2.12) obina@notepc:~$
     379(tf2.12) obina@notepc:~$ ipython3 --nosep
     380Python 3.11.3 (main, May  9 2023, 20:29:30) [GCC 11.3.0]
     381Type 'copyright', 'credits' or 'license' for more information
     382IPython 8.13.2 -- An enhanced Interactive Python. Type '?' for help.
     383In [1]:
     384}}}
     385問題なし。
     386
     387ノートブックの起動。デフォルトではOS内のブラウザを立ち上がようとしてしまうので、--no-browserオプションを付けて起動し、Windows側のブラウザで接続する。
     388```
     389(tf2.12) obina@notepc:~$ jupyter notebook --no-browser
     390[I 21:30:41.014 NotebookApp] Writing notebook server cookie secret to /home/obina/.local/share/jupyter/runtime/notebook_cookie_secret
     391
     392  _   _          _      _
     393 | | | |_ __  __| |__ _| |_ ___
     394 | |_| | '_ \/ _` / _` |  _/ -_)
     395  \___/| .__/\__,_\__,_|\__\___|
     396       |_|
     397
     398Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions.
     399
     400https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html
     401
     402Please note that updating to Notebook 7 might break some of your extensions.
     403
     404[I 21:30:41.133 NotebookApp] Serving notebooks from local directory: /home/obina
     405[I 21:30:41.133 NotebookApp] Jupyter Notebook 6.5.4 is running at:
     406[I 21:30:41.133 NotebookApp] http://localhost:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     407[I 21:30:41.133 NotebookApp]  or http://127.0.0.1:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     408[I 21:30:41.133 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
     409[C 21:30:41.135 NotebookApp]
     410
     411    To access the notebook, open this file in a browser:
     412        file:///home/obina/.local/share/jupyter/runtime/nbserver-19189-open.html
     413    Or copy and paste one of these URLs:
     414        http://localhost:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     415     or http://127.0.0.1:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     416```
     417
     418と出るので、ブラウザに上のURLを貼り付ける。ブラウザで動くことを確認。
     419
     420※ Notebook 7 なるものがあるとは知らなかった....
     421
     422上のコマンドではmatplotlibが入らなかったので、手動で入れた。plotlyやseabornはお好みで。
     423{{{
     424(tf2.12) obina@notepc:~$ pip install matplotlib
     425}}}
     426
     427参考のため、pip list 確認(pip freeze 結果ファイルはこちら)
     428{{{
     429(tf2.12) obina@notepc:~$ pip list
     430Package                      Version
     431---------------------------- --------
     432absl-py                      1.4.0
     433anyio                        3.6.2
     434argon2-cffi                  21.3.0
     435argon2-cffi-bindings         21.2.0
     436arrow                        1.2.3
     437asttokens                    2.2.1
     438astunparse                   1.6.3
     439attrs                        23.1.0
     440backcall                     0.2.0
     441beautifulsoup4               4.12.2
     442bleach                       6.0.0
     443cachetools                   5.3.0
     444certifi                      2023.5.7
     445cffi                         1.15.1
     446charset-normalizer           3.1.0
     447comm                         0.1.3
     448contourpy                    1.0.7
     449cycler                       0.11.0
     450debugpy                      1.6.7
     451decorator                    5.1.1
     452defusedxml                   0.7.1
     453executing                    1.2.0
     454fastjsonschema               2.16.3
     455flatbuffers                  23.3.3
     456fonttools                    4.39.3
     457fqdn                         1.5.1
     458gast                         0.4.0
     459google-auth                  2.17.3
     460google-auth-oauthlib         1.0.0
     461google-pasta                 0.2.0
     462grpcio                       1.54.0
     463h5py                         3.8.0
     464idna                         3.4
     465ipykernel                    6.23.0
     466ipython                      8.13.2
     467ipython-genutils             0.2.0
     468isoduration                  20.11.0
     469jax                          0.4.8
     470jedi                         0.18.2
     471Jinja2                       3.1.2
     472jsonpointer                  2.3
     473jsonschema                   4.17.3
     474jupyter_client               8.2.0
     475jupyter_core                 5.3.0
     476jupyter-events               0.6.3
     477jupyter_server               2.5.0
     478jupyter_server_terminals     0.4.4
     479jupyterlab-pygments          0.2.2
     480keras                        2.12.0
     481kiwisolver                   1.4.4
     482libclang                     16.0.0
     483Markdown                     3.4.3
     484MarkupSafe                   2.1.2
     485matplotlib                   3.7.1
     486matplotlib-inline            0.1.6
     487mistune                      2.0.5
     488ml-dtypes                    0.1.0
     489nbclassic                    1.0.0
     490nbclient                     0.7.4
     491nbconvert                    7.4.0
     492nbformat                     5.8.0
     493nest-asyncio                 1.5.6
     494notebook                     6.5.4
     495notebook_shim                0.2.3
     496numpy                        1.23.5
     497oauthlib                     3.2.2
     498opt-einsum                   3.3.0
     499packaging                    23.1
     500pandocfilters                1.5.0
     501parso                        0.8.3
     502pexpect                      4.8.0
     503pickleshare                  0.7.5
     504Pillow                       9.5.0
     505pip                          23.1.2
     506platformdirs                 3.5.0
     507prometheus-client            0.16.0
     508prompt-toolkit               3.0.38
     509protobuf                     4.23.0
     510psutil                       5.9.5
     511ptyprocess                   0.7.0
     512pure-eval                    0.2.2
     513pyasn1                       0.5.0
     514pyasn1-modules               0.3.0
     515pycparser                    2.21
     516Pygments                     2.15.1
     517pyparsing                    3.0.9
     518pyrsistent                   0.19.3
     519python-dateutil              2.8.2
     520python-json-logger           2.0.7
     521PyYAML                       6.0
     522pyzmq                        25.0.2
     523requests                     2.30.0
     524requests-oauthlib            1.3.1
     525rfc3339-validator            0.1.4
     526rfc3986-validator            0.1.1
     527rsa                          4.9
     528scipy                        1.10.1
     529Send2Trash                   1.8.2
     530setuptools                   65.5.0
     531six                          1.16.0
     532sniffio                      1.3.0
     533soupsieve                    2.4.1
     534stack-data                   0.6.2
     535tensorboard                  2.12.3
     536tensorboard-data-server      0.7.0
     537tensorflow                   2.12.0
     538tensorflow-estimator         2.12.0
     539tensorflow-io-gcs-filesystem 0.32.0
     540termcolor                    2.3.0
     541terminado                    0.17.1
     542tinycss2                     1.2.1
     543tornado                      6.3.1
     544traitlets                    5.9.0
     545typing_extensions            4.5.0
     546uri-template                 1.2.0
     547urllib3                      2.0.2
     548wcwidth                      0.2.6
     549webcolors                    1.13
     550webencodings                 0.5.1
     551websocket-client             1.5.1
     552Werkzeug                     2.3.4
     553wheel                        0.40.0
     554wrapt                        1.14.1
     555}}}
     556
     557再掲:venv環境を抜けるのはdeactivate コマンドで終了するか、システムから抜ける。
     558
     559
    140560== !PyTorch インストール ==
    141561
     562次にPyTorchを入れていく。やはり公式サイトからスタート
     563https://pytorch.org/get-started/locally/
     564PyTorchのOSやバージョン、GPUの有無などを選択。
     565ここではGPUが無い環境なので
     566{{{
     567PyTorch Build: Stable(2.0.1)
     568Your OS: Linux
     569Package: Pip
     570Language: Python
     571Compute Platform: CPU
     572}}}
     573を選択する。コマンドは
     574{{{
     575pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
     576}}}
     577となったので、これをいれる。
     578
     579まずは venv として設定するときのバージョンは2.0.1とする。
     580最初にどのpythonを使っているのかを確認してから。
     581{{{
     582obina@notepc:~$ which python3
     583/opt/python/3.11.3/bin/python3
     584obina@notepc:~$ python3 -m venv ~/.venv/torch2.0
     585obina@notepc:~$ source ~/.venv/torch2.0/bin/activate
     586(torch2.0) obina@notepc:~$
     587}}}
     588
     589ここからは先ほどと同様にpipの更新を行った後で、torch入れる。
     590{{{
     591(torch2.0) obina@notepc:~$ which pip
     592/home/obina/.venv/torch2.0/bin/pip
     593(torch2.0) obina@notepc:~$ pip install --upgrade pip
     594....
     595Successfully installed pip-23.1.2
     596(torch2.0) obina@notepc:~$
     597(torch2.0) obina@notepc:~$ pip list
     598Package    Version
     599---------- -------
     600pip        23.1.2
     601setuptools 65.5.0
     602
     603
     604(torch2.0) obina@notepc:~$ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
     605....
     606Installing collected packages: mpmath, urllib3, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, idna, filelock, charset-normalizer, certifi, requests, jinja2, torch, torchvision, torchaudio
     607Successfully 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
     608}}}
     609
     610動作確認
     611{{{
     612(torch2.0) obina@notepc:~$ python
     613Python 3.11.3 (main, May  9 2023, 20:29:30) [GCC 11.3.0] on linux
     614Type "help", "copyright", "credits" or "license" for more information.
     615>>>
     616>>>
     617>>> import torch
     618>>> x = torch.rand(5,3)
     619>>> print(x)
     620tensor([[0.1193, 0.9816, 0.3111],
     621        [0.8966, 0.0651, 0.5655],
     622        [0.5590, 0.1083, 0.6464],
     623        [0.7477, 0.3680, 0.5885],
     624        [0.8389, 0.1438, 0.8069]])
     625>>>
     626}}}
     627
     628問題無さそう。あとはチュートリアルから適当に選んで動作確認すれば良い。
     629
     630https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html
     631この段階でのパッケージ一覧
     632{{{
     633(torch2.0) obina@notepc:~$ pip3 list
     634Package            Version
     635------------------ ----------
     636certifi            2022.12.7
     637charset-normalizer 2.1.1
     638filelock           3.9.0
     639idna               3.4
     640Jinja2             3.1.2
     641MarkupSafe         2.1.2
     642mpmath             1.2.1
     643networkx           3.0
     644numpy              1.24.1
     645Pillow             9.3.0
     646pip                23.1.2
     647requests           2.28.1
     648setuptools         65.5.0
     649sympy              1.11.1
     650torch              2.0.1+cpu
     651torchaudio         2.0.2+cpu
     652torchvision        0.15.2+cpu
     653typing_extensions  4.4.0
     654urllib3            1.26.13
     655}}}
     656あとはjupyter notebook, matplotlib, plotly, seabornなど、お好みで。
     657お手軽に使うには ax-platformを入れるのも楽。
     658
     659※ PyTorchでは numpy  1.24.1, TensorFlowでは  1.23.5 を使用している
     660
     661ここでは、BoTorch, Ax を入れる。notebook, matplotlibも。
     662{{{
     663(torch2.0) obina@notepc:~$ pip install botorch ax-platform
     664(torch2.0) obina@notepc:~$ pip install notebook matplotlib
     665}}}
     666
     667BoTorchのgetting startedを実行
     668https://botorch.org/docs/getting_started
     669
     670乱数でデータを作成
     671{{{
     672import torch
     673from botorch.models import SingleTaskGP
     674from botorch.fit import fit_gpytorch_mll
     675from gpytorch.mlls import ExactMarginalLogLikelihood
     676
     677train_X = torch.rand(10, 2)
     678Y = 1 - (train_X - 0.5).norm(dim=-1, keepdim=True)  # explicit output dimension
     679Y += 0.1 * torch.rand_like(Y)
     680train_Y = (Y - Y.mean()) / Y.std()
     681}}}
     682
     683続いてガウス過程モデル(SingleTaskGP)を定義し、周辺尤度最大化(ExactMarginalLongLikelihood) によってカーネルパラメータを推定します。
     684{{{
     685gp = SingleTaskGP(train_X, train_Y)
     686mll = ExactMarginalLogLikelihood(gp.likelihood, gp)
     687fit_gpytorch_mll(mll);
     688}}}
     689獲得関数としてUCBを使う
     690{{{
     691from botorch.acquisition import UpperConfidenceBound
     692UCB = UpperConfidenceBound(gp, beta=0.1)
     693}}}
     694最適化
     695{{{
     696from botorch.optim import optimize_acqf
     697
     698bounds = torch.stack([torch.zeros(2), torch.ones(2)])
     699candidate, acq_value = optimize_acqf(
     700    UCB, bounds=bounds, q=1, num_restarts=5, raw_samples=20,
     701)
     702}}}
     703結果表示
     704{{{
     705print(candidate)
     706}}}
     707
     708そのほか、簡単に確認するにはAxのサンプルを実行するのも良いだろう
     709[Ax ・ Adaptive Experimentation Platform](https://ax.dev/)
     710