0から始めるAlphaFold2(1)

経緯

kanehanabunko.hatenablog.com

Win11Pro環境にUbuntu22.04LTSをデュアルブートでいれる

さて、まずはLinuxをどう入れるかを考えなければいけません。仮想環境、完全に入れ替え、デュアルブート。この辺りが選択肢でしょう。

まず仮想環境ですが、比較的管理が楽で、構築も楽そう(やったことないのでわかりません)な反面、Win11の上でごちゃごちゃすることになる関係でせっかくのスペックを生かしきれません。そんな感じのことがどこかのQiitaエントリに書いてあった気がします。

次、入れ替え。何のためにOSインストール代行でWin11Pro入れてもらったと思ってるんですか。第一他に使いたいものにWinじゃなきゃ動かないとかいう舐めたソフトがあるのでWinを消す選択肢はありません。

というわけでデュアルブートにしていきます。

巷にあるデュアルブートの環境構築ですが、基本的に

  1. SSDやHDDを増設してそこにLinuxを入れる
  2. 外付けディスクにLinuxを入れる

の二択になっています。なので、DドライブをまるまるLinuxに置き換えるやり方なんてものはどこを探してもないわけです。

とりあえずLinuxをインストールする準備を粛々と勧めます。

でぃすとりびゅーしょんですが、大学のPCに入ってて使った経験のあるUbuntuにしました。だってCUIだけとかできないし。最新の安定版が22.04LTSだったので、そのisoイメージを公式からDL、星の数ほどあるUSBをブータブルメディアにするソフトの中からなんちゃらを使ってUbuntu22.04LTSのインストール用USBを作ります。

USBを刺した状態でBIOSに入ってわちゃわちゃすればLinux環境の出来上がりとなります。

Win11なので、回復からBIOSに簡単に入れるようになっているのはありがたいですね。別に再起動した時"To enter BIOS, press F2 or delete"とか出てきたのでそれでやってもいいんですが、気持ち的に。

  1. スタートボタンを右クリック
  2. 「設定」をクリック
  3. 「システム」の中の「回復」をクリック
  4. 「PCの起動をカスタマイズする」の右に出てる「今すぐ再起動」をクリック
  5. 「今すぐ再起動」

でまずマシンが再起動します。未保存の作業があるとここで消えるらしいですが、そういう時にこれをやるひとはいないでしょう。多分。

すると、普段はすぐにログイン画面にいくところ、「オプションの選択」という画面になりました。これは私の備忘録的側面が強いのと、ここに画像アップするのめんどくさいので画像はありません。

トラブルシューティング>詳細オプション>UEFIなんちゃらかんちゃら

と進むと再起動が選択できます。PCが壊れるタイミングは電源のオンオフの時と効いているのでこわいなぁと思いつつ容赦なく電源ユニットをコキ使います。

UEFI、これがBIOSらしいですが、名前変えるのやめてほしいですね。USBから起動してあとはUbuntuのインストールに行きます。

Winを消さないように「UbuntuWindowsとは別にインストール」で進めたのですが、ここで問題発生です。

そう、Ubuntu用にしたかったSSDは既にDドライブとして認識されています。そのため、Ubuntuをいれようとするとパーティションを分けるように指示され、せっかくの4 TBSSDがフルで使えなくなります。

ただでさえAlphaFold2のデータベースで半分以上が消し飛ぶのに、そんな勿体無いことはしたくありません。なんかパーティションわけだとあんまよくないってネットのみんなも言ってたし。

というわけで一度インストールを取りやめて、Win11環境に戻ってきました。

問題は4 TBSSDがDドライブとしてWinに認識されているところ。なので、スタートボタン右クリックからのディスクの管理に行き、今Dドライブとなっている4 TBSSDを選択して「ボリュームの削除」をします。警告は出ますが、まっさらな新品に重要なデータがあるわけもなく、思考停止で続行するとそれまで「D:」とラベル付されていたディスク1のSSDが見事「未割り当て」になりました。

そう、新規ディスクを増設してデュアルブートにする手順を解説する先達等のページで見たあれに。

そこからは消化試合、またBIOSに入って、Ubuntu22.04LTSを開いた4 TBSSD (今度はUbuntuWindowsとは別にインストールを選択すると問答無用で4 TBSSDの方に入れるような画面に行きました)に入れ、無事Ubuntu環境の完成です。

なんかCPU直結?っていうディスクを4 TBの方にしていたからか、勝手にUbuntuが優先で立ち上がるようになっていて起動のたびにUbuntuを開くのかWin11を開くのか選択できるようになりました。さっきのBIOS行けば優先順位を変えられるらしいですがひとまずしなくて良さそうです。

nvidia driverのインストール

こちら(公式ドライバー | NVIDIA)にアクセスして、自分のGPUに対応したドライバが何か調べます。Linuxのところに64bitとaarch64???とかいうやつがありましたが、どっち選んでもバージョン535.146.02だったので気にしないことにします。わからないものは後回し、後回し。

後で必要になるCUDAとの対応調べると、バージョン535は最新のCUDA12.3に対応しているらしく、そこは思考停止最新版でよさそうでした。らくちん。

$ lsmod | grep nouveau

と打っても何も出てこなかったので、巷で言われている「nouveauの無効化」は必要なさそうでした。なんでnouveauっていうんでしょう。新型なのかな。

続いて、よくわからないリポジトリの追加。試しにこれしないでapt-get installしてみたらそんなもんはないって言われたので、見に行くところを増やしたと理解しています。

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update

公式が535.146.02って言ってるからそれでいいと思うのですが、一応コマンドでも調べておきましょう。

$ ubuntu-drivers devices
$

はい。なにも表示されません。「ubuntu-drivers devices no output」とかで調べてpciバイス(?)の更新すればいいよみたいなのが書いてあったので試してみます。

$ sudo apt update && sudo apt upgrade -y
$ sudo update-pcidevices 
$ ubuntu-drivers devices

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002782sv0000196Esd000013D6bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-545 - third-party non-free
driver   : nvidia-driver-535 - distro non-free recommended
driver   : nvidia-driver-525 - distro non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-545-open - third-party non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

出てきました。バージョン535もちゃんと入ってますね。recommendedされているのが「open」てついてるのでもついてないやつを入れたほうがいいよみたいな注意を散見しますが、私の場合はdriver : nvidia-driver-535 - distro non-free recommendedだったのでそのまま続行。

さていよいよインストールですが、セキュアブートをオフにする必要があるといろいろなところで言われているのでオフにしてみます。

$ sudo mokutil --disable-validation

ここで8から16桁の一時パスワードを要求されます。後で聞かれるらしいです。実際にはもちろん違うやつを使いましたが、説明のため「abcdefgh」ということにします。

$ sudo reboot

Press any key to perform MOK managementといわれたので適当におっきいスペースキーでも押して続行。メニューが出てくるので「Change Secure Boot state」を選んでセキュアブートを切りにかかります。

Secureというくらいだから本当に本人がやってるのか確認したいんでしょう。「さっきのパスワードのN文字目を入力しろ」と何回か聞かれます。5文字目だったらeですね。

Yes/NoでSecure Bootを切るかどうか聞かれます。どうやら質問が環境によってちょっと変わるらしいので、強い意志を持って切る方を選びましょう。

そのまま「Continue boot」で入ると、Secure Bootが切れている、はず。

ターミナルを開いて

$ sudo apt install nvidia-driver-535

またMOK何ちゃらが必要とか出てパスワードの設定を要求されました。「Your system has UEFI Secure Boot enabled.」切れてないじゃん、Secure Boot。

ま、まぁ同じように設定して、再起動。MOK managementの画面で「Enroll MOK」を選択してパスワード認証すると

$ nvidia-smi

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03             Driver Version: 535.129.03   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 4070 Ti     Off | 00000000:01:00.0  On |                  N/A |
|  0%   32C    P8               8W / 285W |    322MiB / 12282MiB |      1%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

が無事通ってドライバのインストールができました。Secure Bootのままでも一応できるみたいですね。(これ結果は実はこのあとのCUDA入れたあとの実行画面です。コピペするの忘れてた)

  1. Secure Bootを切ってからインストール、再起動
  2. Secure Bootのままインストール、再起動時にMOK managementをいじる

のどっちかで行けそうです。

CUDA toolkit 12.3を入れよう

これ(1. CUDA 12.3 Update 1 Release Notes — Release Notes 12.3 documentation)のTable2を見ると、Linux x86_64 Driver Version >=525.60.13であればCUDA 12.3.xに対応しているみたいなので、最新版のCUDA Toolkit 12.3 Update 1 をインストールします。

コマンドライン操作でインストールできるらしいので、そのコマンドを公式(下のサイト)に教わりに行きます。

developer.nvidia.com

  • Operating System: Linux
  • Architecture: x86_64
  • Distribution: Ubuntu
  • Version: 22.04
  • Installer Type: deb(local)

と選択。最後のタイプはなんか違いあるみたいですけどこれでいいかぁと選びました。runfileは選ばない方がいいという噂。deb(local)とdeb(network)はダウンロードのタイミングが違うだけっぽいですね。

$ 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/12.3.1/local_installers/cuda-repo-ubuntu2204-12-3-local_12.3.1-545.23.08-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2204-12-3-local_12.3.1-545.23.08-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2204-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-3

wgetが地味に時間かかりましたが、20分足らずで終了。ここで

$ nvcc -V

をするとバージョン情報が出るはずなのですが、出ない。あれ?とおもってnvccがそもそもいるかを聞いてみると、

$ which nvcc
$ 

これはパスが通ってないっぽいですね。

バージョンによって場所が違うとかあり得るので適当に探すと、

export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

をbashrcに入れるという記述を発見。/usr/local/を確認すると、cuda、cuda-12、cuda-12.3がいました。中身は同じっぽかったのでバージョンごとになんかしたい時はバージョン付きの方参照するのかなと思いながら、/usr/local/cuda-11.8/を/usr/local/cuda-12.3/に変えて打ち込んでから

$ source ~/.bashrc

これrcでよかったんですかね。bash_profileとかとの区別あんまついてないんですが。

まぁともあれ

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Nov__3_17:16:49_PDT_2023
Cuda compilation tools, release 12.3, V12.3.103
Build cuda_12.3.r12.3/compiler.33492891_0

と無事使えそうなのでよしとしましょう。

次回は2.5 TBのデータベースを構築していきます。