WSL上でpython (jupyter notebook)を使ってMファイルの並列処理がしたーい

WSL上で、MATLABを使ったmファイルの並列処理を諦めた。

jupyter notebookからmファイルを呼び出し、並列処理を行いたい。python側で並列処理の実装はできないかなと考えてた。

pythonからMATLABを呼び出す方法はあるので、これ使えば行けるかなと考えていた。

でも、MATLABのアクティベーション回数は限られているため、WSLではlogin named userライセンスを使わないといけない。

結論、無理だった。MATLABエンジンを複数起動しなければ並列処理できないが、MATLABエンジンを実行するたびに、usernameとpasswordを入力しなければならない。かなり頑張ったけどできなかったので、これは現状無理だと考えて良いと思う。

WSL上で、Octaveを使ったmファイルの並列処理を諦めた。

Octaveを使って並列処理できないかな。

まずもって、並列処理云々の前に、Octaveそのものの処理が異常に遅い。これはWSL上の都合かもしれないが、とにかくMATLABと比べ遅いので、WSL上での使用は控えた方が良いと感じた。そのうえで、どうしてもmファイルの並列処理を行いたかったので、色々試した。

結論、無理だった。下記のissueにやり方が書いてある(ちなみに途中で言い合いになってる)が、かなり苦しい。そして、私も同様にやり、OpenCLは使用できたが、OctaveのOpenCLライブラリが機能してくれなかった。ちなみに、Nvidia Geforceを利用している。

一応、記録用として、以下にコマンドを残しておく。

意図としては、WindowsのCUDAドライバを入れると、自動的にWindowsでOpenCLが使えるようになり、WSLでCUDAが使えるようになる。しかし、WSL上でOpenCLは使えるようになっていない。そこで、以下のコマンドを実行し、WSLからOpenCLを認識するようにしたいということ、多分…


sudo apt-get update -y
sudo apt-get install -y clinfo

sudo apt-get install ocl-icd-opencl-dev -y
sudo apt-get install pocl-opencl-icd -y
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH


docker run nvidia/opencl clinfo

# 以下のリンク参考に、Cuda-Toolkit "WSL-Ubuntu" versionをインストールする。
# https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu

# PoCLをインストールする。
sudo apt install llvm clang -y

export LLVM_VERSION=14
sudo apt install -y python3-dev libpython3-dev build-essential ocl-icd-libopencl1 \
cmake git pkg-config libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} \
llvm-${LLVM_VERSION} make ninja-build ocl-icd-libopencl1 ocl-icd-dev \
ocl-icd-opencl-dev libhwloc-dev zlib1g zlib1g-dev clinfo dialog apt-utils \
libxml2-dev libclang-cpp${LLVM_VERSION}-dev libclang-cpp${LLVM_VERSION} \
llvm-${LLVM_VERSION}-dev

git clone git@github.com:pocl/pocl.git
cd /pocl/
mkdir build
cd build
sudo cmake ..\
-DCMAKE_C_FLAGS=-L/usr/lib/wsl/lib \
-DCMAKE_CXX_FLAGS=-L/usr/lib/wsl/lib \
-DENABLE_HOST_CPU_DEVICES=OFF \
-DENABLE_CUDA=ON

sudo make install

echo 'export POCL_BUILDING=1' >> ~/.bashrc
echo 'export OCL_ICD_VENDORS=/home/hiroki/mymy/pocl/build/ocl-vendors/' >> ~/.bashrc
source ~/.bashrc

export OCL_ICD_VENDORS=/pocl/build/ocl-vendors/

なんかもう、とにかく苦しいことがわかって貰えればいい。Microsoft的にはcudaを積極的に使ってほしいので、あまり対応する気はないのかも。

mファイルの並列処理を諦め、cとpythonで書き直した。

結局、mファイルでの並列処理は無理だと分かったので、同様のコードをcとpythonで書き直した。書き直したと言っても、同様の処理をしてくれる実装がcに合ったので、それに助けられた。

素直にMATLABの開発環境を使ってれば良かったのかもしれないけど、python大好き人間なので、結果オーライです!

いいなと思ったら応援しよう!