(Windows-NVIDIA編)仕事の都合でStanを使うことがあるんだけど、その環境を用意するのは結構面倒である。Stanの実装のひとつcmdstanは並列処理の方法をいくつか用意していて、そのひとつがOpenCLライブラリを経由したGPUの利用である。Windows上のRでcmdstanrパッケージを使う場合、その実行の遅さによってストレス死しないためにも、GPUをぜひ利用したい。説明を読む分には簡単そうである。ところが、実際に試してみると、これがなかなかうまくいかない。いうわけで、cmdstanrパッケージでOpenCLを経由してGPUを使う方法について、試行錯誤の記録をメモしておく。すいません、細かい話で。大局的にみれば実にどうでもいい話である。成功テスト用のStanコードテスト用のStanコードは以下のとおり。こちらから頂きました。std_normal_lpdf関数もbernoulli_logit_glm_lpmf関数もOpenCLに対応しているので、サンプリングが速くなることが期待できる。カレントディレクトリにstantest.stanとして置かれている。変数名の後ろにブラケットを置くことでarrayを宣言することができなくなった。7では以下のコードを使用した。5行目を変更しています。カレントディレクトリにstantest2.stanとして置かれている。成功まずは、2022年12月に試した際の成功例を載せておく。Rのバージョンが少し古い。4.2cmdstanrパッケージ(0.5.3安定版)のインストール。("repos")))cmdstan(2.30.1)のインストール。cpp_optionsの設定はこちらの解説を参考にさせて頂きました。赤字のnotesやwarningがたくさん出たと記憶している。cpp_options)モデルのコンパイル。ここでも、赤字のnotesやwarningがたくさん出た。TRUE))サンプリング。サンプリングの所要時間は163秒。このとき、OpenCLを設定せずにインストールしたcmdstanも試したのだが、所要時間はたしかこの3倍程度だったと記憶している。成功ここからは2023年7月。ハードウェアは同じだが、Rのバージョンが少し上がっている。ベンチマークとして、OpenCLを使わない場合の時間を計ってみる。4.3.5550cmdstanrパッケージ(0.5.3開発版)のインストール。開発版はRtools4.3を想定しているということに気が付いた。安定版も開発版もバージョン番号が同じなのって、わかりにくいっすね。install.packages("remotes")remotes::install_github("stan-dev/cmdstanr")Rtoolsをインストールした直後は、cmdstanをインストールする前に、一度以下を実行しておく必要がありそうだ。overwrite=TRUE)モデルのコンパイル。失敗では、いよいよOpenCLを使ってみる。11.4.4この時点での最新版は12.2であったが、試行錯誤のうえ、11.4.4にまで引き下げた。11.4.4で">=472.50"と書いてあるので、このへんがいいのかなと思った次第である。(2.32.2)のインストール。無事終了したけど、途中で赤字のnotesやwarningが山ほど出た。cpp_options)モデルのコンパイル。赤字はたくさん出るけど、とにかく終了した。