| | 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 | {{{ |
| | 25 | C:\>wsl --list --online |
| | 26 | インストールできる有効なディストリビューションの一覧を次に示します。 |
| | 27 | 'wsl --install -d <Distro>' を使用してインストールします。 |
| | 28 | |
| | 29 | NAME FRIENDLY NAME |
| | 30 | Ubuntu Ubuntu |
| | 31 | Debian Debian GNU/Linux |
| | 32 | kali-linux Kali Linux Rolling |
| | 33 | Ubuntu-18.04 Ubuntu 18.04 LTS |
| | 34 | Ubuntu-20.04 Ubuntu 20.04 LTS |
| | 35 | Ubuntu-22.04 Ubuntu 22.04 LTS |
| | 36 | OracleLinux_7_9 Oracle Linux 7.9 |
| | 37 | OracleLinux_8_7 Oracle Linux 8.7 |
| | 38 | OracleLinux_9_1 Oracle Linux 9.1 |
| | 39 | SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 |
| | 40 | openSUSE-Leap-15.4 openSUSE Leap 15.4 |
| | 41 | openSUSE-Tumbleweed openSUSE Tumbleweed |
| | 42 | }}} |
| | 43 | |
| | 44 | [[Image(wsl_install1.png, 40%)]] |
| | 45 | |
| | 46 | |
| | 47 | ここではUbuntu22.04をインストールすることにする。 |
| | 48 | {{{ |
| | 49 | C:\>wsl --install --d Ubuntu-22.04 |
| | 50 | インストール中: Ubuntu 22.04 LTS |
| | 51 | Ubuntu 22.04 LTS はインストールされました。 |
| | 52 | Ubuntu 22.04 LTS を起動しています... |
| | 53 | }}} |
| | 54 | |
| | 55 | 自動的にUbuntuのターミナルが起動して、ユーザー名を入れるプロンプトが出るので、ユーザー名とパスワードを設定する。 |
| | 56 | (最初は少し時間がかかるかもしれない) |
| | 57 | {{{ |
| | 58 | Installing, this may take a few minutes... |
| | 59 | Please create a default UNIX user account. The username does not need to match your Windows username. |
| | 60 | For more information visit: https://aka.ms/wslusers |
| | 61 | Enter new UNIX username: obina |
| | 62 | New password: |
| | 63 | Retype new password: |
| | 64 | passwd: password updated successfully |
| | 65 | Installation successful! |
| | 66 | To run a command as administrator (user "root"), use "sudo <command>". |
| | 67 | See "man sudo_root" for details. |
| | 68 | |
| | 69 | Welcome 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 | |
| | 75 | This message is shown once a day. To disable it please create the |
| | 76 | /home/obina/.hushlogin file. |
| | 77 | obina@notepc:~$ |
| | 78 | }}} |
| | 79 | [[Image(wsl_install2.png, 40%)]] |
| | 80 | |
| | 81 | [[Image(wsl_install3.png, 40%)]] |
| | 82 | |
| | 83 | |
| | 84 | |
| | 85 | いちおう確認 |
| | 86 | {{{ |
| | 87 | obina@notepc:~$ cat /etc/os-release |
| | 88 | PRETTY_NAME="Ubuntu 22.04.2 LTS" |
| | 89 | NAME="Ubuntu" |
| | 90 | VERSION_ID="22.04" |
| | 91 | VERSION="22.04.2 LTS (Jammy Jellyfish)" |
| | 92 | VERSION_CODENAME=jammy |
| | 93 | ID=ubuntu |
| | 94 | ID_LIKE=debian |
| | 95 | HOME_URL="https://www.ubuntu.com/" |
| | 96 | SUPPORT_URL="https://help.ubuntu.com/" |
| | 97 | BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" |
| | 98 | PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" |
| | 99 | UBUNTU_CODENAME=jammy |
| | 100 | obina@notepc:~$ uname -a |
| | 101 | Linux 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 | {{{ |
| | 106 | obina@notepc:~$ sudo apt update |
| | 107 | Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease |
| | 108 | Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB] |
| | 109 | ..... |
| | 110 | Fetched 26.5 MB in 6s (4327 kB/s) |
| | 111 | Reading package lists... Done |
| | 112 | Building dependency tree... Done |
| | 113 | Reading state information... Done |
| | 114 | 19 packages can be upgraded. Run 'apt list --upgradable' to see them. |
| | 115 | }}} |
| | 116 | |
| | 117 | {{{ |
| | 118 | obina@notepc:~$ sudo apt upgrade |
| | 119 | Reading package lists... Done |
| | 120 | Building dependency tree... Done |
| | 121 | Reading state information... Done |
| | 122 | Calculating upgrade... Done |
| | 123 | The 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 |
| | 126 | 19 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. |
| | 127 | 10 standard LTS security updates |
| | 128 | Need to get 21.9 MB of archives. |
| | 129 | After this operation, 348 kB of additional disk space will be used. |
| | 130 | Do you want to continue? [Y/n] Y |
| | 131 | .... |
| | 132 | obina@notepc:~$ |
| | 133 | }}} |
| | 134 | |
| | 135 | とりあえずここまでで十分。 |
| | 136 | |
| | 137 | |
| | 138 | == python3インストール == |
| | 139 | Ubuntu22.04にデフォルトでインストールされているpythonは/usr/bin/pythonに存在。バージョンは 3.10.6なので古くは無いが、システムで使われることも多いのでこれとは別にインストールする方針とする。 |
| | 140 | |
| | 141 | /usr/localに入れると他のプログラムと干渉する可能性もあるので、 /opt/python/... 以下にインストールしていく方針としている。ここはお好みで。(EPICSを入れるときに、 /opt/epics に入れているので似たような方針とした) |
| | 142 | |
| | 143 | Python.jpサイトでのガイドに従う |
| | 144 | [Ubuntu環境のPython: Python環境構築ガイド - python.jp](https://www.python.jp/install/ubuntu/index.html) |
| | 145 | |
| | 146 | 必要なパッケージをインストール |
| | 147 | {{{ |
| | 148 | sudo 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 を作成しておく。 |
| | 159 | ownerを自分に設定することで、後の作業は一般ユーザー権限で行う。 |
| | 160 | {{{ |
| | 161 | obina@notepc:~$ cd /opt |
| | 162 | obina@notepc:/opt$ ls |
| | 163 | obina@notepc:/opt$ sudo mkdir python |
| | 164 | obina@notepc:/opt$ sudo chown obina:obina python |
| | 165 | obina@notepc:/opt$ cd python |
| | 166 | obina@notepc:/opt/python$ mkdir 3.11.3 |
| | 167 | obina@notepc:/opt/python$ ls |
| | 168 | 3.11.3 |
| | 169 | }}} |
| | 170 | |
| | 171 | ホームディレクトリに戻って、作業用のディレクトリ作成。ソースをダウンロード。URLは上の公式サイトから最新のモノを探す。今回の場合は以下の通りとなった。 |
| | 172 | {{{ |
| | 173 | obina@notepc:~$ mkdir work |
| | 174 | obina@notepc:~$ cd work |
| | 175 | obina@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 |
| | 177 | Resolving www.python.org (www.python.org)... 151.101.108.223, 2a04:4e42:1a::223 |
| | 178 | Connecting to www.python.org (www.python.org)|151.101.108.223|:443... connected. |
| | 179 | HTTP request sent, awaiting response... 200 OK |
| | 180 | Length: 26455738 (25M) [application/octet-stream] |
| | 181 | Saving to: ‘Python-3.11.3.tgz’ |
| | 182 | |
| | 183 | Python-3.11.3.tgz 100%[=================================================>] 25.23M 19.5MB/s in 1.3s |
| | 184 | |
| | 185 | 2023-05-09 20:11:17 (19.5 MB/s) - ‘Python-3.11.3.tgz’ saved [26455738/26455738] |
| | 186 | }}} |
| | 187 | |
| | 188 | configureでインストール先として /opt/python/3.11.3 を指定する。 |
| | 189 | |
| | 190 | lto (Link time optimization) はリンク時間が長くなる替わりに実行速度が上がる...らしい。(自分では未検証) |
| | 191 | |
| | 192 | {{{ |
| | 193 | obina@notepc:~/work$ tar xvfz Python-3.11.3.tgz |
| | 194 | obina@notepc:~/work$ cd Python-3.11.3/ |
| | 195 | obina@notepc:~/work/Python-3.11.3$ ls |
| | 196 | Doc LICENSE Makefile.pre.in Objects Parser README.rst config.guess configure.ac setup.py |
| | 197 | Grammar Lib Misc PC Programs Tools config.sub install-sh |
| | 198 | Include Mac Modules PCbuild Python aclocal.m4 configure pyconfig.h.in |
| | 199 | |
| | 200 | obina@notepc:~/work/Python-3.11.3$ ./configure --prefix=/opt/python/3.11.3 --enable-optimizations --with-lto |
| | 201 | |
| | 202 | obina@notepc:~/work/Python-3.11.3$ make -j8 # 並列化の数はCPU数に応じて適当に |
| | 203 | .... |
| | 204 | obina@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 |
| | 211 | export PATH=/opt/python/3.11.3/bin:$PATH |
| | 212 | }}} |
| | 213 | |
| | 214 | 念のため確認. 上のスクリプトを source する前後で使うpythonをチェック。 |
| | 215 | {{{ |
| | 216 | obina@notepc:~$ which python3 |
| | 217 | /usr/bin/python3 |
| | 218 | obina@notepc:~$ source /opt/python/3.11.3/setup_py3.11.3.sh |
| | 219 | obina@notepc:~$ which python3 |
| | 220 | /opt/python/3.11.3/bin/python3 |
| | 221 | }}} |
| | 222 | |
| | 223 | 問題ない。 |
| | 224 | {{{ |
| | 225 | obina@notepc:~$ which pip3 |
| | 226 | /opt/python/3.11.3/bin/pip3 |
| | 227 | obina@notepc:~$ |
| | 228 | obina@notepc:~$ pip3 list |
| | 229 | Package Version |
| | 230 | ---------- ------- |
| | 231 | pip 22.3.1 |
| | 232 | setuptools 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 | |
| | 238 | pip3を確認して、アップデートする |
| | 239 | {{{ |
| | 240 | obina@notepc:~$ pip3 install --upgrade pip |
| | 241 | Requirement already satisfied: pip in /opt/python/3.11.3/lib/python3.11/site-packages (22.3.1) |
| | 242 | Collecting 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 |
| | 245 | Installing 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 |
| | 250 | Successfully 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の下に作る必要はなく、どのディレクトリでも良いし隠しディレクトリである必然性も無いが、慣例に従う。 |
| | 266 | python.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 | ファイル名を確認する |
| | 279 | https://pypi.org/project/tensorflow/#files |
| | 280 | をみると、 |
| | 281 | tensorflow-2.12.0-cp311-cp311-manylinux_2_17_x86_64....whl |
| | 282 | というファイルがあるのでCPython3.11に対応しているようだ。 |
| | 283 | |
| | 284 | |
| | 285 | 使用するpythonの場所が/opt以下であることを確認してから、venvを構築。このときに指定する名前がプロンプトの先頭に付くので、あまり長い名前を付けると面倒かもしれない(jupyter notebookを使うことが前提ならあまり気にならないが) |
| | 286 | {{{ |
| | 287 | obina@notepc:~$ which python3 |
| | 288 | /opt/python/3.11.3/bin/python3 |
| | 289 | obina@notepc:~$ python3 -m venv ~/.venv/tf2.12 |
| | 290 | }}} |
| | 291 | |
| | 292 | 念のためディレクトリを確認 |
| | 293 | {{{ |
| | 294 | obina@notepc:~$ ls ~/.venv/tf2.12/ |
| | 295 | bin include lib lib64 pyvenv.cfg |
| | 296 | obina@notepc:~$ ls ~/.venv/tf2.12/bin/ |
| | 297 | Activate.ps1 activate activate.csh activate.fish pip pip3 pip3.11 python python3 python3.11 |
| | 298 | }}} |
| | 299 | |
| | 300 | 仮想環境を起動; これ以降はプロンプトの先頭に (tf2.12)が付く |
| | 301 | {{{ |
| | 302 | obina@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 |
| | 313 | obina@notepc:~$ |
| | 314 | obina@notepc:~$ which python3 |
| | 315 | /opt/python/3.11.3/bin/python3 |
| | 316 | }}} |
| | 317 | |
| | 318 | == !TensorFlow インストール == |
| | 319 | 例によって(念のため)使うpip確認しておく |
| | 320 | {{{ |
| | 321 | obina@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 | ..... |
| | 327 | Successfully installed pip-23.1.2 |
| | 328 | (tf2.12) obina@notepc:~$ pip3 list |
| | 329 | Package Version |
| | 330 | ---------- ------- |
| | 331 | pip 23.1.2 |
| | 332 | setuptools 65.5.0 |
| | 333 | |
| | 334 | (tf2.12) obina@notepc:~$ pip3 install tensorflow |
| | 335 | ..... |
| | 336 | 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 |
| | 337 | (tf2.12) obina@notepc:~$ |
| | 338 | }}} |
| | 339 | |
| | 340 | これだけでOK.次に動作確認は公式サイトにあるコマンドで、 |
| | 341 | {{{ |
| | 342 | (tf2.12) obina@notepc:~$ python3 |
| | 343 | Python 3.11.3 (main, May 9 2023, 20:29:30) [GCC 11.3.0] on linux |
| | 344 | Type "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]))) |
| | 350 | tf.Tensor(-182.7671, shape=(), dtype=float32) |
| | 351 | >>> print(tf.reduce_sum(tf.random.normal([1000, 1000]))) |
| | 352 | tf.Tensor(-268.51474, shape=(), dtype=float32) |
| | 353 | }}} |
| | 354 | とりあえず動く。 |
| | 355 | |
| | 356 | もう1つ、kereasを使ったサンプル。 |
| | 357 | https://www.tensorflow.org/tutorials/quickstart/beginner |
| | 358 | をそのまま実行 |
| | 359 | {{{ |
| | 360 | import tensorflow as tf |
| | 361 | mnist = tf.keras.datasets.mnist |
| | 362 | |
| | 363 | (x_train, y_train),(x_test, y_test) = mnist.load_data() |
| | 364 | x_train, x_test = x_train / 255.0, x_test / 255.0 |
| | 365 | |
| | 366 | model = 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 | |
| | 373 | model.compile(optimizer='adam', |
| | 374 | loss='sparse_categorical_crossentropy', |
| | 375 | metrics=['accuracy']) |
| | 376 | |
| | 377 | model.fit(x_train, y_train, epochs=5) |
| | 378 | model.evaluate(x_test, y_test) |
| | 379 | }}} |
| | 380 | |
| | 381 | 評価結果をみる |
| | 382 | {{{ |
| | 383 | >>> model.evaluate(x_test, y_test) |
| | 384 | 313/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を入れるのが簡単。詳しくは |
| | 391 | https://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 |
| | 400 | Python 3.11.3 (main, May 9 2023, 20:29:30) [GCC 11.3.0] |
| | 401 | Type 'copyright', 'credits' or 'license' for more information |
| | 402 | IPython 8.13.2 -- An enhanced Interactive Python. Type '?' for help. |
| | 403 | In [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 | |
| | 418 | Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions. |
| | 419 | |
| | 420 | https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html |
| | 421 | |
| | 422 | Please 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 |
| | 452 | Package Version |
| | 453 | ---------------------------- -------- |
| | 454 | absl-py 1.4.0 |
| | 455 | anyio 3.6.2 |
| | 456 | argon2-cffi 21.3.0 |
| | 457 | argon2-cffi-bindings 21.2.0 |
| | 458 | arrow 1.2.3 |
| | 459 | asttokens 2.2.1 |
| | 460 | astunparse 1.6.3 |
| | 461 | attrs 23.1.0 |
| | 462 | backcall 0.2.0 |
| | 463 | beautifulsoup4 4.12.2 |
| | 464 | bleach 6.0.0 |
| | 465 | cachetools 5.3.0 |
| | 466 | certifi 2023.5.7 |
| | 467 | cffi 1.15.1 |
| | 468 | charset-normalizer 3.1.0 |
| | 469 | comm 0.1.3 |
| | 470 | contourpy 1.0.7 |
| | 471 | cycler 0.11.0 |
| | 472 | debugpy 1.6.7 |
| | 473 | decorator 5.1.1 |
| | 474 | defusedxml 0.7.1 |
| | 475 | executing 1.2.0 |
| | 476 | fastjsonschema 2.16.3 |
| | 477 | flatbuffers 23.3.3 |
| | 478 | fonttools 4.39.3 |
| | 479 | fqdn 1.5.1 |
| | 480 | gast 0.4.0 |
| | 481 | google-auth 2.17.3 |
| | 482 | google-auth-oauthlib 1.0.0 |
| | 483 | google-pasta 0.2.0 |
| | 484 | grpcio 1.54.0 |
| | 485 | h5py 3.8.0 |
| | 486 | idna 3.4 |
| | 487 | ipykernel 6.23.0 |
| | 488 | ipython 8.13.2 |
| | 489 | ipython-genutils 0.2.0 |
| | 490 | isoduration 20.11.0 |
| | 491 | jax 0.4.8 |
| | 492 | jedi 0.18.2 |
| | 493 | Jinja2 3.1.2 |
| | 494 | jsonpointer 2.3 |
| | 495 | jsonschema 4.17.3 |
| | 496 | jupyter_client 8.2.0 |
| | 497 | jupyter_core 5.3.0 |
| | 498 | jupyter-events 0.6.3 |
| | 499 | jupyter_server 2.5.0 |
| | 500 | jupyter_server_terminals 0.4.4 |
| | 501 | jupyterlab-pygments 0.2.2 |
| | 502 | keras 2.12.0 |
| | 503 | kiwisolver 1.4.4 |
| | 504 | libclang 16.0.0 |
| | 505 | Markdown 3.4.3 |
| | 506 | MarkupSafe 2.1.2 |
| | 507 | matplotlib 3.7.1 |
| | 508 | matplotlib-inline 0.1.6 |
| | 509 | mistune 2.0.5 |
| | 510 | ml-dtypes 0.1.0 |
| | 511 | nbclassic 1.0.0 |
| | 512 | nbclient 0.7.4 |
| | 513 | nbconvert 7.4.0 |
| | 514 | nbformat 5.8.0 |
| | 515 | nest-asyncio 1.5.6 |
| | 516 | notebook 6.5.4 |
| | 517 | notebook_shim 0.2.3 |
| | 518 | numpy 1.23.5 |
| | 519 | oauthlib 3.2.2 |
| | 520 | opt-einsum 3.3.0 |
| | 521 | packaging 23.1 |
| | 522 | pandocfilters 1.5.0 |
| | 523 | parso 0.8.3 |
| | 524 | pexpect 4.8.0 |
| | 525 | pickleshare 0.7.5 |
| | 526 | Pillow 9.5.0 |
| | 527 | pip 23.1.2 |
| | 528 | platformdirs 3.5.0 |
| | 529 | prometheus-client 0.16.0 |
| | 530 | prompt-toolkit 3.0.38 |
| | 531 | protobuf 4.23.0 |
| | 532 | psutil 5.9.5 |
| | 533 | ptyprocess 0.7.0 |
| | 534 | pure-eval 0.2.2 |
| | 535 | pyasn1 0.5.0 |
| | 536 | pyasn1-modules 0.3.0 |
| | 537 | pycparser 2.21 |
| | 538 | Pygments 2.15.1 |
| | 539 | pyparsing 3.0.9 |
| | 540 | pyrsistent 0.19.3 |
| | 541 | python-dateutil 2.8.2 |
| | 542 | python-json-logger 2.0.7 |
| | 543 | PyYAML 6.0 |
| | 544 | pyzmq 25.0.2 |
| | 545 | requests 2.30.0 |
| | 546 | requests-oauthlib 1.3.1 |
| | 547 | rfc3339-validator 0.1.4 |
| | 548 | rfc3986-validator 0.1.1 |
| | 549 | rsa 4.9 |
| | 550 | scipy 1.10.1 |
| | 551 | Send2Trash 1.8.2 |
| | 552 | setuptools 65.5.0 |
| | 553 | six 1.16.0 |
| | 554 | sniffio 1.3.0 |
| | 555 | soupsieve 2.4.1 |
| | 556 | stack-data 0.6.2 |
| | 557 | tensorboard 2.12.3 |
| | 558 | tensorboard-data-server 0.7.0 |
| | 559 | tensorflow 2.12.0 |
| | 560 | tensorflow-estimator 2.12.0 |
| | 561 | tensorflow-io-gcs-filesystem 0.32.0 |
| | 562 | termcolor 2.3.0 |
| | 563 | terminado 0.17.1 |
| | 564 | tinycss2 1.2.1 |
| | 565 | tornado 6.3.1 |
| | 566 | traitlets 5.9.0 |
| | 567 | typing_extensions 4.5.0 |
| | 568 | uri-template 1.2.0 |
| | 569 | urllib3 2.0.2 |
| | 570 | wcwidth 0.2.6 |
| | 571 | webcolors 1.13 |
| | 572 | webencodings 0.5.1 |
| | 573 | websocket-client 1.5.1 |
| | 574 | Werkzeug 2.3.4 |
| | 575 | wheel 0.40.0 |
| | 576 | wrapt 1.14.1 |
| | 577 | }}} |
| | 578 | |
| | 579 | 再掲:venv環境を抜けるのはdeactivate コマンドで終了するか、システムから抜ける。 |
| | 580 | |
| | 581 | |
| | 582 | == !PyTorch インストール == |
| | 583 | |
| | 584 | 次にPyTorchを入れていく。やはり公式サイトからスタート |
| | 585 | https://pytorch.org/get-started/locally/ |
| | 586 | PyTorchのOSやバージョン、GPUの有無などを選択。 |
| | 587 | |
| | 588 | [[Image(wsl_python_torch1.png, 40%)]] |
| | 589 | |
| | 590 | |
| | 591 | ここではGPUが無い環境なので |
| | 592 | {{{ |
| | 593 | PyTorch Build: Stable(2.0.1) |
| | 594 | Your OS: Linux |
| | 595 | Package: Pip |
| | 596 | Language: Python |
| | 597 | Compute Platform: CPU |
| | 598 | }}} |
| | 599 | を選択する。コマンドは |
| | 600 | {{{ |
| | 601 | pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu |
| | 602 | }}} |
| | 603 | となったので、これをいれる。 |
| | 604 | |
| | 605 | |
| | 606 | まずは venv として設定するときのバージョンは2.0.1とする。 |
| | 607 | 最初にどのpythonを使っているのかを確認してから。 |
| | 608 | {{{ |
| | 609 | obina@notepc:~$ which python3 |
| | 610 | /opt/python/3.11.3/bin/python3 |
| | 611 | obina@notepc:~$ python3 -m venv ~/.venv/torch2.0 |
| | 612 | obina@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 | .... |
| | 622 | Successfully installed pip-23.1.2 |
| | 623 | (torch2.0) obina@notepc:~$ |
| | 624 | (torch2.0) obina@notepc:~$ pip list |
| | 625 | Package Version |
| | 626 | ---------- ------- |
| | 627 | pip 23.1.2 |
| | 628 | setuptools 65.5.0 |
| | 629 | |
| | 630 | |
| | 631 | (torch2.0) obina@notepc:~$ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu |
| | 632 | .... |
| | 633 | Installing collected packages: mpmath, urllib3, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, idna, filelock, charset-normalizer, certifi, requests, jinja2, torch, torchvision, torchaudio |
| | 634 | 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 |
| | 635 | }}} |
| | 636 | |
| | 637 | 動作確認 |
| | 638 | {{{ |
| | 639 | (torch2.0) obina@notepc:~$ python |
| | 640 | Python 3.11.3 (main, May 9 2023, 20:29:30) [GCC 11.3.0] on linux |
| | 641 | Type "help", "copyright", "credits" or "license" for more information. |
| | 642 | >>> |
| | 643 | >>> |
| | 644 | >>> import torch |
| | 645 | >>> x = torch.rand(5,3) |
| | 646 | >>> print(x) |
| | 647 | tensor([[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 | |
| | 657 | https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html |
| | 658 | この段階でのパッケージ一覧 |
| | 659 | {{{ |
| | 660 | (torch2.0) obina@notepc:~$ pip3 list |
| | 661 | Package Version |
| | 662 | ------------------ ---------- |
| | 663 | certifi 2022.12.7 |
| | 664 | charset-normalizer 2.1.1 |
| | 665 | filelock 3.9.0 |
| | 666 | idna 3.4 |
| | 667 | Jinja2 3.1.2 |
| | 668 | MarkupSafe 2.1.2 |
| | 669 | mpmath 1.2.1 |
| | 670 | networkx 3.0 |
| | 671 | numpy 1.24.1 |
| | 672 | Pillow 9.3.0 |
| | 673 | pip 23.1.2 |
| | 674 | requests 2.28.1 |
| | 675 | setuptools 65.5.0 |
| | 676 | sympy 1.11.1 |
| | 677 | torch 2.0.1+cpu |
| | 678 | torchaudio 2.0.2+cpu |
| | 679 | torchvision 0.15.2+cpu |
| | 680 | typing_extensions 4.4.0 |
| | 681 | urllib3 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 | |
| | 694 | BoTorchのgetting startedを実行 |
| | 695 | https://botorch.org/docs/getting_started |
| | 696 | |
| | 697 | 乱数でデータを作成 |
| | 698 | {{{ |
| | 699 | import torch |
| | 700 | from botorch.models import SingleTaskGP |
| | 701 | from botorch.fit import fit_gpytorch_mll |
| | 702 | from gpytorch.mlls import ExactMarginalLogLikelihood |
| | 703 | |
| | 704 | train_X = torch.rand(10, 2) |
| | 705 | Y = 1 - (train_X - 0.5).norm(dim=-1, keepdim=True) # explicit output dimension |
| | 706 | Y += 0.1 * torch.rand_like(Y) |
| | 707 | train_Y = (Y - Y.mean()) / Y.std() |
| | 708 | }}} |
| | 709 | |
| | 710 | 続いてガウス過程モデル(SingleTaskGP)を定義し、周辺尤度最大化(ExactMarginalLongLikelihood) によってカーネルパラメータを推定します。 |
| | 711 | {{{ |
| | 712 | gp = SingleTaskGP(train_X, train_Y) |
| | 713 | mll = ExactMarginalLogLikelihood(gp.likelihood, gp) |
| | 714 | fit_gpytorch_mll(mll); |
| | 715 | }}} |
| | 716 | 獲得関数としてUCBを使う |
| | 717 | {{{ |
| | 718 | from botorch.acquisition import UpperConfidenceBound |
| | 719 | UCB = UpperConfidenceBound(gp, beta=0.1) |
| | 720 | }}} |
| | 721 | 最適化 |
| | 722 | {{{ |
| | 723 | from botorch.optim import optimize_acqf |
| | 724 | |
| | 725 | bounds = torch.stack([torch.zeros(2), torch.ones(2)]) |
| | 726 | candidate, acq_value = optimize_acqf( |
| | 727 | UCB, bounds=bounds, q=1, num_restarts=5, raw_samples=20, |
| | 728 | ) |
| | 729 | }}} |
| | 730 | 結果表示 |
| | 731 | {{{ |
| | 732 | print(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連携 |