神経科学者と学ぶ深層学習超入門を羊土社から出版いたしました。
本書は、基生研で働く生命系研究者である渡辺の目線から執筆した深層学習の入門書です。
数式やプログラムに慣れない方に配慮しつつ、文章では伝えきれない部分には、手描きイラストを多数掲載し、理解しやすさを心がけました。
パソコンやソフトや人工知能(おもに深層学習)などの備忘録
神経科学者と学ぶ深層学習超入門を羊土社から出版いたしました。
本書は、基生研で働く生命系研究者である渡辺の目線から執筆した深層学習の入門書です。
数式やプログラムに慣れない方に配慮しつつ、文章では伝えきれない部分には、手描きイラストを多数掲載し、理解しやすさを心がけました。
Origin of the ease of association of color names: Comparison between humans and AI
https://doi.org/10.1177/20416695221131832
この実験にはひとつ大きな課題があり、対象をGPT-3にしていたので、日々変化をし続けるGPT-3のせいで再現性がとりにくい実験になっていました。しかし、Llamaというローカル環境でもきびきび動くLLMが出現したことで非常に実験がやりやすくなりました。
LlamaはWindowsでもMacでも動くようですが、ここではUbuntuで動かしてみました。
1)GPUが動くような環境を用意(以下のURL参照)。ここでは70Bという最も重いモデルを動かしますので、40Gb程度のGPUメモリーが必要になります。もっと軽いモデルもあります。
https://doraemonkokoro.blogspot.com/2021/09/ubuntu-20041lts-cuda-rtx-a6000.html
2)ollamaをインストール(llamaを動かす環境のようなもの)
$ curl -fsSL https://ollama.com/install.sh | sh
いろいろ検討した結果、
「WindowsのWSL2は深層学習に使える」
と、結論しましたので、ここに記録。
が、諸事情によりタイトルは??を付けました。
諸事情は最後に。
まず、
Windows及びNvidia driverはとことんアップデートする。
その後、
https://chigusa-web.com/blog/wsl2-win11/
のようなサイトを参考にWSL2をインストール。
Windowsは、10でも11でもいい。
proでもhomeでもOKだけど、proが無難。
Windows Terminalも導入(デフォルトよりも見やすいし拡張性もある)。
https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701
Windows Terminalの新規タブでUbuntuを選び、
$ nvidia-smi
を走らせてGPUを確認。
(ここは驚き。なにもしてないのにGPUがつかえる!)
つまり、どういうことかというと、
Windowsで導入されている、nvidia driverが、
そのままubuntuにも反映される。
Windowsでnvidia driverをupdateすると、
Ubuntuの再起動後、自動的にubuntuにも反映される。
このUbuntuはWindowsの支配下にあることを忘れてはいけない。
cudaのバージョンを上げてはいけないときは、要注意ポイント。
anacondaをubuntuに導入。
https://www.salesanalytics.co.jp/datascience/datascience141/
とても簡単。
新しいconda環境をつくり、
conda create -n ##
自分のアプリをセットアップ。
Ubuntuでは出なかったようなエラーがいくつかでるかもしれないが、
たいていpathだったり、ちょっと足りないライブラリーだったりなので、
エラーを検索しつつ、黙々と対処。
Windowsのファイルを送り込むときは、
エクスプローラのアドレスバーに「\\wsl$」と入力する。
WSL2がバーチャルマシンであることを目視できる。
ここからhomeにアクセスできる。
UbuntuのGUIアプリは、Windowsのアプリのように動きます。
(これも驚き!)下記の最後のほう。
https://chigusa-web.com/blog/wsl2-win11/
GPUを使った深層学習の計算処理スピードは、純UBUNTUの半分くらい(同じマシンでOSを入れ替えて比較)。この速度をどう考えるか。もう一点。当たり前と言えば当たり前だが、メモリー管理はWindowsがやっているので搭載メモリーの一部だけがUbuntuに割り当てられる。せいぜい半分くらいか。シングルユーザーで使っている分には問題はないとは思うが、これをどう考えるか。
Windowsだからといって、何から何までお世話をしてくれるわけではないし、速度やメモリーに制限はあるにしても、何かと便利なバーチャルubuntu。これからはWindowsが第一選択肢にしてもいいかもしれません。
"""
上記の方法では、まだ全然完全ではないです。WSL2のところはまあいいとして、Ubuntuではなく、Windowsで深層学習をしようとすると、やはりちゃんとcuda+cuDNNをwindowsに、ちゃんと導入しないといけないです。WSL2側にもちゃんとcuda+cuDNNを導入したほうがいいでしょう。「ちゃんと」の前に動いてしまっているのでややこしい。Ubuntuの場合、人がマシンを制御するのですが、Windowsの場合、Windowsがマシンを制御しているのです。そこに横入り的にドライバーをいれるわけですが、Windowsには向いていない作業となります。その意味において、WSL2に限定して深層学習をやるのがいいのかもしれません。その範囲で使う分には、何も問題は起こらないので安心です。要はOSの使い分けです。
"""
"""
なぜタイトルに??がついているかというと、WSL2をテストしたWindowsPCは結局のところすぐにUBUNTU22.04に書き換えてしまったからです。メモリをWindowsにとられるのは我慢するとしても、計算速度の遅さが致命的です。。。あとMSの都合でハードの制限がかかったりするのも気になります。やはりWSL2はあくまでも補助的な役割のように思えます。よくよく考えると何でわざわざWindowsからUbuntuを使う必要があるのか不思議です。
"""
LINUX MINTが人気です。
本家UBUNTUと比べてかなり軽く、しかもWINDOWSと似たUIが使いやすいです。
古いマシンでテストしたところ、ディスプレイ表示のために使われるメモリーが三分の一くらいになっていました(300メガ強が100メガ弱に!)。
特に、特定の目的に特化している旧型のGPUを積んだマシンには、適任かもしれません。
ただ、本家UBUNTUをGUIなしモード(CUI)で使えば、軽くなりますので、
sudo systemctl set-default multi-user.target(CUIモードへ)
sudo systemctl set-default graphical.target(GUIモードへ)
それでいいのでないか、と言えば、それまでです。
ただ、WINDOWSと似たUIで使いたい、UBUNTUの紫が嫌、などの特別な理由がある場合は、LINUX MINT、あるいは、その他のLINUXの選択はアリだとおもいます。
別になんでもいいや、と言う方は、本家UBUNTUの一択です。安心感が違いますし、周辺のサポート体制も圧倒的ですので、あえて他のLINUXを使う理由は見当たりません。
"""
よく受ける質問をまとめておきます。この記事は順次更新します。
"""
Q1:深層学習はGoogle Colabじゃダメですか?
A1:ダメじゃないです。他者との共有が簡単に出来るので、Google Colabですべてが出来れば、再現性という意味では理想的です。が、学習をガンガンやりだす、あるいは遺伝子データや動画データなどの巨大なデータを扱い出すと、無理筋になる状況が出てきますので、その時点が分岐点です。逆に、場合によってはGoogle Colabではローカルよりも大きなメモリー空間を確保できることがあります。これはGoogle Colabのメリットです。教育のプラットホームとしてもたいへん優れています。
"""
Q2:深層学習をローカルサーバーでやるか、クラウドサーバーでやるか?
A2:どちらでもいいです。が、クラウドでやるにしても一つくらいはローカルサーバーはあったほうがいいので、第一選択としてローカルサーバー、それ以上の処理はクラウドサーバーとなるでしょう。また最近ではGUI完備のAIツールもでてきているので、その場合、ローカルサーバーはあったほうが随分操作が楽になります。AWSやGoogleなどのクラウドサーバーは高額ですが、公立の研究者であれば、大学や研究所が共同利用のために用意しているスパコンは格安で使えることがあります。また逆に潤沢な研究資金があるならば、自分でニューラルネットワークをあれこれ触らなくてもノーコードのクラウドサービスもいっぱいあります。
"""
Q3:深層学習はWindowsじゃダメですか?
A3:ダメじゃないです。ただ、深層学習のコードの大半はLinux(多くの場合はUbuntu)で開発されていますので、Windowsで動かないコードが「かなり」あります(経験談)。例えば、DeepLabCutのようなメジャーコードですら一発起動とはいきません。とういわけで、Linuxが第一選択になります。あえてWindowsを第一選択にするとすれば、SONY Neural Network Consoleをメインで使いたいときです。
最近のWindowsはWSL2というバーチャル空間にUbuntuを内挿しており、これは「完全なUbuntu」を謳っておりまり、このWSL2を深層学習に利用する手があります。純粋なLinuxと比べれば、それなりのクセがありますが、Windows側からもファイルにアクセスできますし、Linux側からもWindowsのファイルにアクセスできますのでとても便利です。また、ハードウエアのセッティングはWindowsがやってくれますので超楽ちんです。ゲーミングPCを買ってきたらすぐに深層学習ができます。生粋のUbuntuよりは計算処理スピードの面で劣っておりますし(当社比で半分程度)メモリーもWindowsから恵んでいただく状態なのは大問題ですが、これもそのうち多少は改善されるでしょうし、今後、windowsは選択肢としてはありかもです。ただ私としては非推奨です。
"""
Q4:深層学習はMacじゃダメですか?
A4:ダメです。優れたコードエディターとしては使えますが、Macだけで深層学習をやることはできません。理由はNvidiaのGPUが使えないからです(いまのところ)。NvidiaのGPUで計算しても数十時間の学習はざらにありますので、それが使えない環境は、選択肢から外れます。ただ、どのみちローカルGPUも、SSH接続や、リモートデスクトップで使いますので、手元のマシンは慣れたOSがいいので、手元のインターフェースとしてMacはいい選択でしょう。
"""
Q5:GPUワークステーションは値段が高いのですが、必要でしょうか?
A5:市販のゲーミングPCで十分です。というか、速度だけで言えば、ゲーミングPCのほうが速いです(経験談)。GPUメモリーのエラーチェック機構は深層学習には必要ありません。選ぶ基準はGPUメモリーの大きさを優先させてください。次は電源の大きさ、メインメモリーの大きさ(GPUメモリーの倍くらい欲しい)、熱処理(とても大事。最悪扇風機の出番)、筐体の大きさ(できるだけ大きいほうがいい)、拡張性の高さなどです。
もうひとつ言うと、GPUワークステーションは拡張性は高く、しかも使われているパーツの耐久性は抜群なのですが、メモリーやファンなど、ワークステーション専用のパーツを使っていることが多く、これらのパーツは手に入りにくく、しかも高価なので要注意です。
ゲーミングPCのGPUで対応しきれなくなったらクラウドPCのレンタルという選択が良いと思います。現状のゲーミングPCのGPUメモリーが24Gbが最大(2023年3月現在)ですので、このメモリーを超えるような処理が必須になってきた時、クラウドPCの40Gb、80Gb(あるいはそれ以上のモンスター)の出番となります。
"""
Q6:コードエディターは何がいい?
A6:好きなものをお使いください。ちまたではVS Codeが大人気です。迷ったらこれです。みんなが使っているので安心感が違います。私は使っていません。
===
Q7:
A7:
DeepLabCutとDeepEthogramは、動物の行動解析に人気です。
http://www.mackenziemathislab.org/deeplabcut
https://elifesciences.org/articles/63377
DeepLabCutは、座標トラッキング、
DeepEthogramは、行動パターンの分類を定量化するのに役に立ちます。
いずれもpip install で一発導入できますが、互いに異なる環境に依存していますのでanacondaなどの仮想環境にインストールします。また現状(2023年2月)では、cuda12には対応しておりませんので、cuda11.xの環境にしておきます。既にcuda12環境にあるときは、
sudo apt-get -y install cuda-11-7
sudo unlink /usr/local/cuda
sudo ln -s /usr/local/cuda-11.7 /usr/local/cuda
のようにして、cuda11.xに切り替えます。
DeepLabCutは、
https://github.com/DeepLabCut/DeepLabCut
ここを参照し、
conda create --name dlc python=3.8
conda activate dlc
pip install 'deeplabcut[gui,tf]'
でインストール、
python3 -m deeplabcut
で起動です。
DeepEthogramは、
https://github.com/jbohnslav/deepethogram/blob/master/docs/installation.md
ここを参照し、
conda create --name deg python=3.7
conda activate deg
conda install -c conda-forge pyside2==5.13.2
Install pytorch
pip install deepethogram
でインストール、
python3 -m deepethogram
で起動です。
例えば、不用意にUBUNTUのアップデートをしてしまい、NVIDIAドライバーが認識されなくなることがあります。そんなときは、あきらめて、再インストールです。
sudo apt autoremove cuda
をしたあとに、通常のNVIDIAドライバーのインストールです。
現状、cudnn for cuda 11.xが最新なので、
cuda 11.8を入れることになります。
「cuda 11.8」で検索です。
Installation Instructions:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt -y install cuda
keyringsのところは、ターミナルで指定されます。
最後に
sudo rebootです。
import os, cv2, itertools, csv
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
このような環境中、pltを使ったところで(ubuntu 22.04)
QObject::moveToThread: Current thread (0x561c4d10a240) is not the object's thread (0x561c4d65a110).
Cannot move to target thread (0x561c4d10a240)
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/deeptitan/.local/lib/python3.10/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc.
Aborted (core dumped)
【「いま」の定義:2023年1月】
以下は、OMENのRTX3090(注:45Lではないやつ=45Lはすこし厄介です)をセットアップしていますが、どのような機種でも基本は同じです(RTX-A6000 やA100など)。UBUNTUは、20.041ltsか22.04ltsの2択ですが、安全をみれば練りに練られた20.041lts。Windowsとのリモートデスクトップ環境をとるなら22.04lts。私の場合はデスクトップのクラゲが好きなので22.04ltsの一択。
【BIOS設定】
BIOSで、セキュアブートはオフにしたほうが無難。インテルのソフトセキュリティも。これをしないとNvidia系のドライバーが認識されなかったり、ネットワークが勝手に切られたりする。されない場合もときにある。結論としては、どちらでもいいか。
【SSD】
OMEN RTX3090の場合、データディスクのHDDを抜いて替わりにSSDを刺し、このSSDにUBUNTUをインストール。WINがいらないという人はM.2にインストール。いままでの経験上、WINを残しても使ったことはなく、なくしてしまったほうがいいかも。
以下は、PredNet in PyTorchとPredNet in Chainerを動かすまでの手順。Prednet以外のAIを使う場合も途中まで同じ。
注)以前はsudo pip3 installでやっていましたが、今はpip3 installで実行しています。pipは階層的にはaptの下と考えれば、そのほうがよさそう。あと、22.04ltsでは、若干異なることろもあり。
CDもしくはUSB(USBでのインストールを強く推奨)でUBUNTUをインストールしたあと、以下のコマンドを順次入力していく。
(まずは)
$ sudo apt update
$ sudo apt upgrade
(ここは個人的な趣味)
$ sudo apt install geany
(ここから本番)
$ sudo apt install python3-pip
$ pip3 install -U setuptools
$ pip3 install -U cython
$ pip3 install -U filelock
https://developer.nvidia.com/cuda-toolkit
あるいはcuda 11.xを利用する場合は、cuda 11.xで検索(いま、cudnnは12がないので、11.xを推奨。また多くのAIコードは12に対応していないので、そういう意味でも11.xを推奨)。
LINUX、x86_64、UBUNTU、22.04、deb(local)と選ぶと下記のような指令。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda-repo-ubuntu2004-11-4-local_11.4.2-470.57.02-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2004-11-4-local_11.4.2-470.57.02-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-ubuntu2004-11-4-local/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get -y install cuda
https://developer.nvidia.com/rdp/form/cudnn-download-survey
ログインして以下をダウンロード
DL: cuDNN Library for Linux (x86_64)
展開してフォルダー名がcudaとし、
cd ###
カレントをフォルダーのあるところへ
$ sudo cp -P cuda/lib/* /usr/local/cuda/lib64/
$ sudo cp cuda/include/* /usr/local/cuda/include/
$ sudo chmod 644 /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
$ sudo vi ~/.bashrc
vi editor「o」で以下を一番下に付け加える。copy & paste。
====
export CUDA_ROOT=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:
export CPATH=$CPATH:/usr/local/cuda/include
export CUDA_INC_DIR=/usr/local/cuda/bin:$CUDA_INC_DIR
====
「esc」して「:wq」でeditorを抜ける。
$ sudo reboot
$ nvidia-smi
でGPUが認識されているかどうかを確認。
以上で、GPUのセットアップはおわり。
次にPredNet in PyTorch。
興味のない方はここで終わり。
$ sudo apt install git
$ pip3 install opencv-python
$ pip3 install opencv-contrib-python
$ pip3 install tensorflow
$ pip3 install librosa
$ pip3 install matplotlib
$ pip3 install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
いまは、以下。時期によっては適宜修正。
$ pip3 install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 -f https://download.pytorch.org/whl/torch_stable.html
$ pip3 show torch
Name: torch
Version: 1.8.0+cu111
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: /usr/local/lib/python3.8/dist-packages
Requires: numpy, typing-extensions
Required-by: torchvision, torchaudio
pip3 install torchviz
pip3 install janome
pip3 install tqdm
cd #
$ git clone https://github.com/NIBB-Neurophysiology-Lab/pytorch_prednet
OR
$ git clone https://github.com/eijwat/prednet_in_pytorch
cd #
$ git remote -v
origin https://github.com/NIBB-Neurophysiology-Lab/pytorch_prednet(fetch)
origin https://github.com/NIBB-Neurophysiology-Lab/pytorch_prednet(push)
cd #
$ git pull https://github.com/NIBB-Neurophysiology-Lab/pytorch_prednet
神経科学者と学ぶ深層学習超入門 を 羊土社 から出版いたしました。 本書は、基生研で働く生命系研究者である渡辺の目線から執筆した深層学習の入門書です。 数式やプログラムに慣れない方に配慮しつつ、文章では伝えきれない部分には、手描きイラストを多数掲載し、理解しやすさを心がけました。...