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


Ignore:
Timestamp:
05/11/23 15:17:14 (12 months ago)
Author:
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連携