Changes between Initial Version and Version 1 of misc/setup_for_ML_build-python


Ignore:
Timestamp:
05/11/23 15:17:14 (22 months ago)
Author:
Takashi Obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • misc/setup_for_ML_build-python

    v1 v1  
     1= 機械学習環境を個人用PCにセットアップする =
     2[[PageOutline]]
     3
     4加速器機械学習フォーラムでの話題がきっかけで書きました。
     5初心者向けの環境構築の一例として活用いただけますと幸いです。
     6
     7
     8このセットアップ手順はWindowsPCで簡単に環境を構築する例となっていますが、WSL2を除けばUbuntu環境や多くのLinux環境でそのまま使えるはずです。その場合はpython3のところから読んでください。
     9
     10
     11概略
     12 * WSL2+Ubuntuをインストール
     13 * python3をソースからインストール
     14 * venv 設定
     15 * !TensorFlow インストール、動作確認
     16 * !PyTorch インストール、動作確認
     17
     18
     19※ 【注】以下の手順で!TensorFlow/PyTorchの共存は可能ですが、GPyOpt のコンパイル時に不具合が出ることが分かりました。もしGPyOptを使う予定があるのならば、以下の手順のうち Python 3.11 → 3.10 に変更してください。それだけで問題無く動作します。あとで本記事全体を書き直しますが取り急ぎ連絡まで(2023/05/11; T.Obina)
     20
     21== WSL2のインストール ==
     22最初に__管理者権限で__コマンドプロンプトを開く。wslコマンドで、インストール可能なディストリビューションを検索・確認する。
     23(wslコマンドが無い場合は、適当にGoogleで検索してください)
     24{{{
     25C:\>wsl --list --online
     26インストールできる有効なディストリビューションの一覧を次に示します。
     27'wsl --install -d <Distro>' を使用してインストールします。
     28
     29NAME                                   FRIENDLY NAME
     30Ubuntu                                 Ubuntu
     31Debian                                 Debian GNU/Linux
     32kali-linux                             Kali Linux Rolling
     33Ubuntu-18.04                           Ubuntu 18.04 LTS
     34Ubuntu-20.04                           Ubuntu 20.04 LTS
     35Ubuntu-22.04                           Ubuntu 22.04 LTS
     36OracleLinux_7_9                        Oracle Linux 7.9
     37OracleLinux_8_7                        Oracle Linux 8.7
     38OracleLinux_9_1                        Oracle Linux 9.1
     39SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
     40openSUSE-Leap-15.4                     openSUSE Leap 15.4
     41openSUSE-Tumbleweed                    openSUSE Tumbleweed
     42}}}
     43
     44[[Image(wsl_install1.png, 40%)]]
     45
     46
     47ここではUbuntu22.04をインストールすることにする。
     48{{{
     49C:\>wsl --install --d Ubuntu-22.04
     50インストール中: Ubuntu 22.04 LTS
     51Ubuntu 22.04 LTS はインストールされました。
     52Ubuntu 22.04 LTS を起動しています...
     53}}}
     54
     55自動的にUbuntuのターミナルが起動して、ユーザー名を入れるプロンプトが出るので、ユーザー名とパスワードを設定する。
     56(最初は少し時間がかかるかもしれない)
     57{{{
     58Installing, this may take a few minutes...
     59Please create a default UNIX user account. The username does not need to match your Windows username.
     60For more information visit: https://aka.ms/wslusers
     61Enter new UNIX username: obina
     62New password:
     63Retype new password:
     64passwd: password updated successfully
     65Installation successful!
     66To run a command as administrator (user "root"), use "sudo <command>".
     67See "man sudo_root" for details.
     68
     69Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.10.60.1-microsoft-standard-WSL2 x86_64)
     70
     71 * Documentation:  https://help.ubuntu.com
     72 * Management:     https://landscape.canonical.com
     73 * Support:        https://ubuntu.com/advantage
     74
     75This message is shown once a day. To disable it please create the
     76/home/obina/.hushlogin file.
     77obina@notepc:~$
     78}}}
     79[[Image(wsl_install2.png, 40%)]]
     80
     81[[Image(wsl_install3.png, 40%)]]
     82
     83
     84
     85いちおう確認
     86{{{
     87obina@notepc:~$ cat /etc/os-release
     88PRETTY_NAME="Ubuntu 22.04.2 LTS"
     89NAME="Ubuntu"
     90VERSION_ID="22.04"
     91VERSION="22.04.2 LTS (Jammy Jellyfish)"
     92VERSION_CODENAME=jammy
     93ID=ubuntu
     94ID_LIKE=debian
     95HOME_URL="https://www.ubuntu.com/"
     96SUPPORT_URL="https://help.ubuntu.com/"
     97BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
     98PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
     99UBUNTU_CODENAME=jammy
     100obina@notepc:~$ uname -a
     101Linux notepc 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
     102}}}
     103
     104パッケージのアップデート。先ほど入力したパスワードを入れる
     105{{{
     106obina@notepc:~$ sudo apt update
     107Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
     108Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
     109.....
     110Fetched 26.5 MB in 6s (4327 kB/s)
     111Reading package lists... Done
     112Building dependency tree... Done
     113Reading state information... Done
     11419 packages can be upgraded. Run 'apt list --upgradable' to see them.
     115}}}
     116
     117{{{
     118obina@notepc:~$ sudo apt upgrade
     119Reading package lists... Done
     120Building dependency tree... Done
     121Reading state information... Done
     122Calculating upgrade... Done
     123The following packages will be upgraded:
     124  apt apt-utils distro-info-data git git-man libapt-pkg6.0 libglib2.0-0 libglib2.0-bin libglib2.0-data libssl3 libxml2
     125  openssl tzdata ubuntu-advantage-tools vim vim-common vim-runtime vim-tiny xxd
     12619 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
     12710 standard LTS security updates
     128Need to get 21.9 MB of archives.
     129After this operation, 348 kB of additional disk space will be used.
     130Do you want to continue? [Y/n] Y
     131....
     132obina@notepc:~$
     133}}}
     134
     135とりあえずここまでで十分。
     136
     137
     138== python3インストール ==
     139Ubuntu22.04にデフォルトでインストールされているpythonは/usr/bin/pythonに存在。バージョンは 3.10.6なので古くは無いが、システムで使われることも多いのでこれとは別にインストールする方針とする。
     140
     141/usr/localに入れると他のプログラムと干渉する可能性もあるので、 /opt/python/... 以下にインストールしていく方針としている。ここはお好みで。(EPICSを入れるときに、 /opt/epics に入れているので似たような方針とした)
     142
     143Python.jpサイトでのガイドに従う
     144[Ubuntu環境のPython: Python環境構築ガイド - python.jp](https://www.python.jp/install/ubuntu/index.html)
     145
     146必要なパッケージをインストール
     147{{{
     148sudo apt install build-essential libbz2-dev libdb-dev \
     149  libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
     150  libncursesw5-dev libsqlite3-dev libssl-dev \
     151  zlib1g-dev uuid-dev tk-dev
     152}}}
     153
     154今回はpython公式サイトから、現時点(2023/05)の最新版であるPython3.11.3を入れる。
     155機械学習環境を構築する目的からは必ずしも最新版が良いとは限らない(ときどき最新バージョンに対応できていないことがある)が、今回はこれで問題なさそう。
     156
     157
     158あらかじめインストール先として /opt/python/3.11.3 を作成しておく。
     159ownerを自分に設定することで、後の作業は一般ユーザー権限で行う。
     160{{{
     161obina@notepc:~$ cd /opt
     162obina@notepc:/opt$ ls
     163obina@notepc:/opt$ sudo mkdir python
     164obina@notepc:/opt$ sudo chown obina:obina python
     165obina@notepc:/opt$ cd python
     166obina@notepc:/opt/python$ mkdir 3.11.3
     167obina@notepc:/opt/python$ ls
     1683.11.3
     169}}}
     170
     171ホームディレクトリに戻って、作業用のディレクトリ作成。ソースをダウンロード。URLは上の公式サイトから最新のモノを探す。今回の場合は以下の通りとなった。
     172{{{
     173obina@notepc:~$ mkdir work
     174obina@notepc:~$ cd work
     175obina@notepc:~/work$ wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
     176--2023-05-09 20:11:15--  https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
     177Resolving www.python.org (www.python.org)... 151.101.108.223, 2a04:4e42:1a::223
     178Connecting to www.python.org (www.python.org)|151.101.108.223|:443... connected.
     179HTTP request sent, awaiting response... 200 OK
     180Length: 26455738 (25M) [application/octet-stream]
     181Saving to: ‘Python-3.11.3.tgz’
     182
     183Python-3.11.3.tgz             100%[=================================================>]  25.23M  19.5MB/s    in 1.3s
     184
     1852023-05-09 20:11:17 (19.5 MB/s) - ‘Python-3.11.3.tgz’ saved [26455738/26455738]
     186}}}
     187
     188configureでインストール先として /opt/python/3.11.3 を指定する。
     189
     190lto (Link time optimization) はリンク時間が長くなる替わりに実行速度が上がる...らしい。(自分では未検証)
     191
     192{{{
     193obina@notepc:~/work$ tar xvfz Python-3.11.3.tgz
     194obina@notepc:~/work$ cd Python-3.11.3/
     195obina@notepc:~/work/Python-3.11.3$ ls
     196Doc      LICENSE  Makefile.pre.in  Objects  Parser    README.rst  config.guess  configure.ac   setup.py
     197Grammar  Lib      Misc             PC       Programs  Tools       config.sub    install-sh
     198Include  Mac      Modules          PCbuild  Python    aclocal.m4  configure     pyconfig.h.in
     199
     200obina@notepc:~/work/Python-3.11.3$ ./configure --prefix=/opt/python/3.11.3 --enable-optimizations --with-lto
     201
     202obina@notepc:~/work/Python-3.11.3$ make -j8 # 並列化の数はCPU数に応じて適当に
     203....
     204obina@notepc:~/work/Python-3.11.3$ make install
     205....
     206}}}
     207
     208環境設定用のスクリプトを作成。WSLの場合はユーザーが自分だけなので~/.bashrcに直接書いても良いのだが、今後pythonのバージョンによって切り分けたいこともあると思うので/opt/python以下につくっておく
     209{{{
     210$ vi /opt/python/setup_py3.11.3.sh
     211export PATH=/opt/python/3.11.3/bin:$PATH
     212}}}
     213
     214念のため確認. 上のスクリプトを source する前後で使うpythonをチェック。
     215{{{
     216obina@notepc:~$ which python3
     217/usr/bin/python3
     218obina@notepc:~$ source /opt/python/3.11.3/setup_py3.11.3.sh
     219obina@notepc:~$ which python3
     220/opt/python/3.11.3/bin/python3
     221}}}
     222
     223問題ない。
     224{{{
     225obina@notepc:~$ which pip3
     226/opt/python/3.11.3/bin/pip3
     227obina@notepc:~$
     228obina@notepc:~$ pip3 list
     229Package    Version
     230---------- -------
     231pip        22.3.1
     232setuptools 65.5.0
     233
     234[notice] A new release of pip available: 22.3.1 -> 23.1.2
     235[notice] To update, run: pip3 install --upgrade pip
     236}}}
     237
     238pip3を確認して、アップデートする
     239{{{
     240obina@notepc:~$ pip3 install --upgrade pip
     241Requirement already satisfied: pip in /opt/python/3.11.3/lib/python3.11/site-packages (22.3.1)
     242Collecting pip
     243  Downloading pip-23.1.2-py3-none-any.whl (2.1 MB)
     244     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 1.8 MB/s eta 0:00:00
     245Installing collected packages: pip
     246  Attempting uninstall: pip
     247    Found existing installation: pip 22.3.1
     248    Uninstalling pip-22.3.1:
     249      Successfully uninstalled pip-22.3.1
     250Successfully installed pip-23.1.2
     251}}}
     252これで基本環境はOK。次はvenvを使って個別のパッケージを入れていく。
     253
     254
     255== venv 設定 ==
     256次にTensorFlowやPyTorchを入れていく。それぞれでnumpyのバージョンなど、要求されるものが異なることが多いため別の仮想環境を作る方が良い。
     257
     258ここではvenvを使うのでその設定を行う
     259
     260基本方針: ホームディレクトリ直下に ".venv" というディレクトリを作成。 ~/.venv/以下に個別の仮想環境用のディレクトリを作成していく。
     261例えば
     262 - TensorFlow用は ~/.venv/tf2.12
     263 - PyTorch用は ~/.venv/torch2.0
     264のような感じでディレクトリを作っていく
     265仮にあとで仮想環境を消したいときにはディレクトリ(上の例ではtf2.12とかtorch2.0とか)を削除すれば良いだけ。実際には.venvの下に作る必要はなく、どのディレクトリでも良いし隠しディレクトリである必然性も無いが、慣例に従う。
     266python.jpサイトの仮想環境構築ガイド
     267 - [windows](https://www.python.jp/install/windows/venv.html)
     268 - [ubuntu](https://www.python.jp/install/ubuntu/virtualenv.html)
     269
     270
     271=== !TensorFlow 用のvenv環境準備 ===
     272
     273まずはTensorFlowのバージョンを確認
     274[tensorflow・PyPI](https://pypi.org/project/tensorflow/)
     275をみると、python3.11に対応したTF2.12.0があることがわかる → venv名称をtf2.12とする方針とする
     276
     277
     278ファイル名を確認する
     279https://pypi.org/project/tensorflow/#files
     280をみると、
     281tensorflow-2.12.0-cp311-cp311-manylinux_2_17_x86_64....whl
     282というファイルがあるのでCPython3.11に対応しているようだ。
     283
     284
     285使用するpythonの場所が/opt以下であることを確認してから、venvを構築。このときに指定する名前がプロンプトの先頭に付くので、あまり長い名前を付けると面倒かもしれない(jupyter notebookを使うことが前提ならあまり気にならないが)
     286{{{
     287obina@notepc:~$ which python3
     288/opt/python/3.11.3/bin/python3
     289obina@notepc:~$ python3 -m venv ~/.venv/tf2.12
     290}}}
     291
     292念のためディレクトリを確認
     293{{{
     294obina@notepc:~$ ls ~/.venv/tf2.12/
     295bin  include  lib  lib64  pyvenv.cfg
     296obina@notepc:~$ ls ~/.venv/tf2.12/bin/
     297Activate.ps1  activate  activate.csh  activate.fish  pip  pip3  pip3.11  python  python3  python3.11
     298}}}
     299
     300仮想環境を起動; これ以降はプロンプトの先頭に (tf2.12)が付く
     301{{{
     302obina@notepc:~$ source ~/.venv/tf2.12/bin/activate
     303(tf2.12) obina@notepc:~$
     304}}}
     305
     306終了するのは"deactivate"コマンドで良い
     307{{{
     308(tf2.12) obina@notepc:~$ which python3
     309/home/obina/.venv/tf2.12/bin/python3
     310(tf2.12) obina@notepc:~$ which pip
     311/home/obina/.venv/tf2.12/bin/pip
     312(tf2.12) obina@notepc:~$ deactivate
     313obina@notepc:~$
     314obina@notepc:~$ which python3
     315/opt/python/3.11.3/bin/python3
     316}}}
     317
     318== !TensorFlow インストール ==
     319例によって(念のため)使うpip確認しておく
     320{{{
     321obina@notepc:~$ source ~/.venv/tf2.12/bin/activate    # venv環境を開始
     322
     323(tf2.12) obina@notepc:~$ which pip3
     324/home/obina/.venv/tf2.12/bin/pip3
     325(tf2.12) obina@notepc:~$ pip3 install --upgrade pip  # pipの更新
     326.....
     327Successfully installed pip-23.1.2
     328(tf2.12) obina@notepc:~$ pip3 list
     329Package    Version
     330---------- -------
     331pip        23.1.2
     332setuptools 65.5.0
     333
     334(tf2.12) obina@notepc:~$ pip3 install tensorflow
     335.....
     336Successfully 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
     337(tf2.12) obina@notepc:~$
     338}}}
     339
     340これだけでOK.次に動作確認は公式サイトにあるコマンドで、
     341{{{
     342(tf2.12) obina@notepc:~$ python3
     343Python 3.11.3 (main, May  9 2023, 20:29:30) [GCC 11.3.0] on linux
     344Type "help", "copyright", "credits" or "license" for more information.
     345>>>
     346>>> import tensorflow as tf
     347....(((いろいろとwarning)))....
     348>>>
     349>>> print(tf.reduce_sum(tf.random.normal([1000, 1000])))
     350tf.Tensor(-182.7671, shape=(), dtype=float32)
     351>>> print(tf.reduce_sum(tf.random.normal([1000, 1000])))
     352tf.Tensor(-268.51474, shape=(), dtype=float32)
     353}}}
     354とりあえず動く。
     355
     356もう1つ、kereasを使ったサンプル。
     357https://www.tensorflow.org/tutorials/quickstart/beginner
     358をそのまま実行
     359{{{
     360import tensorflow as tf
     361mnist = tf.keras.datasets.mnist
     362
     363(x_train, y_train),(x_test, y_test) = mnist.load_data()
     364x_train, x_test = x_train / 255.0, x_test / 255.0
     365
     366model = tf.keras.models.Sequential([
     367  tf.keras.layers.Flatten(input_shape=(28, 28)),
     368  tf.keras.layers.Dense(128, activation='relu'),
     369  tf.keras.layers.Dropout(0.2),
     370  tf.keras.layers.Dense(10, activation='softmax')
     371])
     372
     373model.compile(optimizer='adam',
     374              loss='sparse_categorical_crossentropy',
     375              metrics=['accuracy'])
     376
     377model.fit(x_train, y_train, epochs=5)
     378model.evaluate(x_test, y_test)
     379}}}
     380
     381評価結果をみる
     382{{{
     383>>> model.evaluate(x_test, y_test)
     384313/313 [==============================] - 0s 778us/step - loss: 0.0758 - accuracy: 0.9757
     385[0.07577536255121231, 0.9757000207901001]
     386}}}
     387ちゃんと学習出来ているので、インストール自体は問題なさそう。
     388
     389=== Jupyter Notebook, ipython のセットアップ ===
     390次に、利便性のためにipythonやjupyter notebookを入れておく; 依存関係もあるがまとめてnotebookを入れるのが簡単。詳しくは
     391https://jupyter.org/install
     392を参照。
     393{{{
     394(tf2.12) obina@notepc:~$ pip3 install notebook
     395....
     396(tf2.12) obina@notepc:~$ which ipython3
     397/home/obina/.venv/tf2.12/bin/ipython3
     398(tf2.12) obina@notepc:~$
     399(tf2.12) obina@notepc:~$ ipython3 --nosep
     400Python 3.11.3 (main, May  9 2023, 20:29:30) [GCC 11.3.0]
     401Type 'copyright', 'credits' or 'license' for more information
     402IPython 8.13.2 -- An enhanced Interactive Python. Type '?' for help.
     403In [1]:
     404}}}
     405問題なし。
     406
     407ノートブックの起動。デフォルトではOS内のブラウザを立ち上がようとしてしまうので、--no-browserオプションを付けて起動し、Windows側のブラウザで接続する。
     408{{{
     409(tf2.12) obina@notepc:~$ jupyter notebook --no-browser
     410[I 21:30:41.014 NotebookApp] Writing notebook server cookie secret to /home/obina/.local/share/jupyter/runtime/notebook_cookie_secret
     411
     412  _   _          _      _
     413 | | | |_ __  __| |__ _| |_ ___
     414 | |_| | '_ \/ _` / _` |  _/ -_)
     415  \___/| .__/\__,_\__,_|\__\___|
     416       |_|
     417
     418Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions.
     419
     420https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html
     421
     422Please note that updating to Notebook 7 might break some of your extensions.
     423
     424[I 21:30:41.133 NotebookApp] Serving notebooks from local directory: /home/obina
     425[I 21:30:41.133 NotebookApp] Jupyter Notebook 6.5.4 is running at:
     426[I 21:30:41.133 NotebookApp] http://localhost:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     427[I 21:30:41.133 NotebookApp]  or http://127.0.0.1:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     428[I 21:30:41.133 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
     429[C 21:30:41.135 NotebookApp]
     430
     431    To access the notebook, open this file in a browser:
     432        file:///home/obina/.local/share/jupyter/runtime/nbserver-19189-open.html
     433    Or copy and paste one of these URLs:
     434        http://localhost:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     435     or http://127.0.0.1:8888/?token=50b97522fe665b6862193efe85be7fe5c703dcbe13116e45
     436}}}
     437
     438と出るので、Windowsで起動したブラウザに上のURLを貼り付ける。ブラウザで動くことを確認。たとえばこんな感じで。
     439
     440[[Image(wsl_python_notebook1.png, 30%)]]
     441
     442※ Notebook 7 なるものがあるとは知らなかった....
     443
     444上のコマンドではmatplotlibが入らなかったので、手動で入れた。
     445{{{
     446(tf2.12) obina@notepc:~$ pip install matplotlib
     447}}}
     448
     449参考のため、pip list 確認(pip freeze 結果ファイルはこちら)
     450{{{
     451(tf2.12) obina@notepc:~$ pip list
     452Package                      Version
     453---------------------------- --------
     454absl-py                      1.4.0
     455anyio                        3.6.2
     456argon2-cffi                  21.3.0
     457argon2-cffi-bindings         21.2.0
     458arrow                        1.2.3
     459asttokens                    2.2.1
     460astunparse                   1.6.3
     461attrs                        23.1.0
     462backcall                     0.2.0
     463beautifulsoup4               4.12.2
     464bleach                       6.0.0
     465cachetools                   5.3.0
     466certifi                      2023.5.7
     467cffi                         1.15.1
     468charset-normalizer           3.1.0
     469comm                         0.1.3
     470contourpy                    1.0.7
     471cycler                       0.11.0
     472debugpy                      1.6.7
     473decorator                    5.1.1
     474defusedxml                   0.7.1
     475executing                    1.2.0
     476fastjsonschema               2.16.3
     477flatbuffers                  23.3.3
     478fonttools                    4.39.3
     479fqdn                         1.5.1
     480gast                         0.4.0
     481google-auth                  2.17.3
     482google-auth-oauthlib         1.0.0
     483google-pasta                 0.2.0
     484grpcio                       1.54.0
     485h5py                         3.8.0
     486idna                         3.4
     487ipykernel                    6.23.0
     488ipython                      8.13.2
     489ipython-genutils             0.2.0
     490isoduration                  20.11.0
     491jax                          0.4.8
     492jedi                         0.18.2
     493Jinja2                       3.1.2
     494jsonpointer                  2.3
     495jsonschema                   4.17.3
     496jupyter_client               8.2.0
     497jupyter_core                 5.3.0
     498jupyter-events               0.6.3
     499jupyter_server               2.5.0
     500jupyter_server_terminals     0.4.4
     501jupyterlab-pygments          0.2.2
     502keras                        2.12.0
     503kiwisolver                   1.4.4
     504libclang                     16.0.0
     505Markdown                     3.4.3
     506MarkupSafe                   2.1.2
     507matplotlib                   3.7.1
     508matplotlib-inline            0.1.6
     509mistune                      2.0.5
     510ml-dtypes                    0.1.0
     511nbclassic                    1.0.0
     512nbclient                     0.7.4
     513nbconvert                    7.4.0
     514nbformat                     5.8.0
     515nest-asyncio                 1.5.6
     516notebook                     6.5.4
     517notebook_shim                0.2.3
     518numpy                        1.23.5
     519oauthlib                     3.2.2
     520opt-einsum                   3.3.0
     521packaging                    23.1
     522pandocfilters                1.5.0
     523parso                        0.8.3
     524pexpect                      4.8.0
     525pickleshare                  0.7.5
     526Pillow                       9.5.0
     527pip                          23.1.2
     528platformdirs                 3.5.0
     529prometheus-client            0.16.0
     530prompt-toolkit               3.0.38
     531protobuf                     4.23.0
     532psutil                       5.9.5
     533ptyprocess                   0.7.0
     534pure-eval                    0.2.2
     535pyasn1                       0.5.0
     536pyasn1-modules               0.3.0
     537pycparser                    2.21
     538Pygments                     2.15.1
     539pyparsing                    3.0.9
     540pyrsistent                   0.19.3
     541python-dateutil              2.8.2
     542python-json-logger           2.0.7
     543PyYAML                       6.0
     544pyzmq                        25.0.2
     545requests                     2.30.0
     546requests-oauthlib            1.3.1
     547rfc3339-validator            0.1.4
     548rfc3986-validator            0.1.1
     549rsa                          4.9
     550scipy                        1.10.1
     551Send2Trash                   1.8.2
     552setuptools                   65.5.0
     553six                          1.16.0
     554sniffio                      1.3.0
     555soupsieve                    2.4.1
     556stack-data                   0.6.2
     557tensorboard                  2.12.3
     558tensorboard-data-server      0.7.0
     559tensorflow                   2.12.0
     560tensorflow-estimator         2.12.0
     561tensorflow-io-gcs-filesystem 0.32.0
     562termcolor                    2.3.0
     563terminado                    0.17.1
     564tinycss2                     1.2.1
     565tornado                      6.3.1
     566traitlets                    5.9.0
     567typing_extensions            4.5.0
     568uri-template                 1.2.0
     569urllib3                      2.0.2
     570wcwidth                      0.2.6
     571webcolors                    1.13
     572webencodings                 0.5.1
     573websocket-client             1.5.1
     574Werkzeug                     2.3.4
     575wheel                        0.40.0
     576wrapt                        1.14.1
     577}}}
     578
     579再掲:venv環境を抜けるのはdeactivate コマンドで終了するか、システムから抜ける。
     580
     581
     582== !PyTorch インストール ==
     583
     584次にPyTorchを入れていく。やはり公式サイトからスタート
     585https://pytorch.org/get-started/locally/
     586PyTorchのOSやバージョン、GPUの有無などを選択。
     587
     588[[Image(wsl_python_torch1.png, 40%)]]
     589
     590
     591ここではGPUが無い環境なので
     592{{{
     593PyTorch Build: Stable(2.0.1)
     594Your OS: Linux
     595Package: Pip
     596Language: Python
     597Compute Platform: CPU
     598}}}
     599を選択する。コマンドは
     600{{{
     601pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
     602}}}
     603となったので、これをいれる。
     604
     605
     606まずは venv として設定するときのバージョンは2.0.1とする。
     607最初にどのpythonを使っているのかを確認してから。
     608{{{
     609obina@notepc:~$ which python3
     610/opt/python/3.11.3/bin/python3
     611obina@notepc:~$ python3 -m venv ~/.venv/torch2.0
     612obina@notepc:~$ source ~/.venv/torch2.0/bin/activate
     613(torch2.0) obina@notepc:~$
     614}}}
     615
     616ここからは先ほどと同様にpipの更新を行った後で、torch入れる。
     617{{{
     618(torch2.0) obina@notepc:~$ which pip
     619/home/obina/.venv/torch2.0/bin/pip
     620(torch2.0) obina@notepc:~$ pip install --upgrade pip
     621....
     622Successfully installed pip-23.1.2
     623(torch2.0) obina@notepc:~$
     624(torch2.0) obina@notepc:~$ pip list
     625Package    Version
     626---------- -------
     627pip        23.1.2
     628setuptools 65.5.0
     629
     630
     631(torch2.0) obina@notepc:~$ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
     632....
     633Installing collected packages: mpmath, urllib3, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, idna, filelock, charset-normalizer, certifi, requests, jinja2, torch, torchvision, torchaudio
     634Successfully 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
     635}}}
     636
     637動作確認
     638{{{
     639(torch2.0) obina@notepc:~$ python
     640Python 3.11.3 (main, May  9 2023, 20:29:30) [GCC 11.3.0] on linux
     641Type "help", "copyright", "credits" or "license" for more information.
     642>>>
     643>>>
     644>>> import torch
     645>>> x = torch.rand(5,3)
     646>>> print(x)
     647tensor([[0.1193, 0.9816, 0.3111],
     648        [0.8966, 0.0651, 0.5655],
     649        [0.5590, 0.1083, 0.6464],
     650        [0.7477, 0.3680, 0.5885],
     651        [0.8389, 0.1438, 0.8069]])
     652>>>
     653}}}
     654
     655問題無さそう。あとはチュートリアルから適当に選んで動作確認すれば良い。
     656
     657https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html
     658この段階でのパッケージ一覧
     659{{{
     660(torch2.0) obina@notepc:~$ pip3 list
     661Package            Version
     662------------------ ----------
     663certifi            2022.12.7
     664charset-normalizer 2.1.1
     665filelock           3.9.0
     666idna               3.4
     667Jinja2             3.1.2
     668MarkupSafe         2.1.2
     669mpmath             1.2.1
     670networkx           3.0
     671numpy              1.24.1
     672Pillow             9.3.0
     673pip                23.1.2
     674requests           2.28.1
     675setuptools         65.5.0
     676sympy              1.11.1
     677torch              2.0.1+cpu
     678torchaudio         2.0.2+cpu
     679torchvision        0.15.2+cpu
     680typing_extensions  4.4.0
     681urllib3            1.26.13
     682}}}
     683あとはjupyter notebook, matplotlib, plotly, seabornなど、お好みで。
     684お手軽に使うには ax-platformを入れるのも楽。
     685
     686※ PyTorchでは numpy  1.24.1, TensorFlowでは  1.23.5 を使用している
     687
     688ここでは、!BoTorch, Ax を入れる。notebook, matplotlibも。
     689{{{
     690(torch2.0) obina@notepc:~$ pip install botorch ax-platform
     691(torch2.0) obina@notepc:~$ pip install notebook matplotlib
     692}}}
     693
     694BoTorchのgetting startedを実行
     695https://botorch.org/docs/getting_started
     696
     697乱数でデータを作成
     698{{{
     699import torch
     700from botorch.models import SingleTaskGP
     701from botorch.fit import fit_gpytorch_mll
     702from gpytorch.mlls import ExactMarginalLogLikelihood
     703
     704train_X = torch.rand(10, 2)
     705Y = 1 - (train_X - 0.5).norm(dim=-1, keepdim=True)  # explicit output dimension
     706Y += 0.1 * torch.rand_like(Y)
     707train_Y = (Y - Y.mean()) / Y.std()
     708}}}
     709
     710続いてガウス過程モデル(SingleTaskGP)を定義し、周辺尤度最大化(ExactMarginalLongLikelihood) によってカーネルパラメータを推定します。
     711{{{
     712gp = SingleTaskGP(train_X, train_Y)
     713mll = ExactMarginalLogLikelihood(gp.likelihood, gp)
     714fit_gpytorch_mll(mll);
     715}}}
     716獲得関数としてUCBを使う
     717{{{
     718from botorch.acquisition import UpperConfidenceBound
     719UCB = UpperConfidenceBound(gp, beta=0.1)
     720}}}
     721最適化
     722{{{
     723from botorch.optim import optimize_acqf
     724
     725bounds = torch.stack([torch.zeros(2), torch.ones(2)])
     726candidate, acq_value = optimize_acqf(
     727    UCB, bounds=bounds, q=1, num_restarts=5, raw_samples=20,
     728)
     729}}}
     730結果表示
     731{{{
     732print(candidate)
     733}}}
     734
     735そのほか、簡単に確認するにはAxのサンプルを実行するのも良いだろう
     736[Ax ・ Adaptive Experimentation Platform](https://ax.dev/)
     737
     738== GPyOpt ==
     739いくつかの注意点のみ
     740 - python3.11ではコンパイルできないので python3.10を使用する
     741 - numpy, matplotlibのバージョン指定が必要
     742 - venv でGPyOpt用の環境を作成して !TensorFlow/PyTorchと分離するのが簡単
     743 - venvのなかで {{{ $ pip install GPyOpt numpy==1.23.1 notebook matplotlib==3.1.3 }}} でOK
     744
     745
     746== 今後 ==
     747ここから先はまだ書いていない
     748 * GPU環境 (CUDA)でのセットアップ例
     749 * GPyOptの使用例
     750 * BOTorch, Axの使用例
     751 * EPICS連携