Nxバックエンド勉強会#7 EXLAでcudaが動作する環境の構築と実際にNxで動かしたデモ
EXLAでcudaが動作する環境の構築と実際にNxで動かしたデモ@GeekMasahiro
View Slide
自己紹介Twitter/Qiita @GeekMasahiro会社員 自社サービスのソフトウエア開発、運営(AWS, Python, vue.js等)趣味 Elixir、電子工作全般、ソーラー発電、3DPrinterElixirを2022年7月に出会って、趣味に追加。楽しいので本業にも活用したい。2
今回の目標目標● NxにEXLAを導入してGPUで演算を行えるようにする環境● nvidiaのGPU(RTX3060)を使用● Windows11のWSL環境で使用する3
GPU購入NxでGPUを使ってみたい!Ethereumのマイニングが終わって価格も戻ってきた買いしました。4
GPU取り付け大きさ的に、内蔵できなかったので、PCIeの延長ケーブルを購入して外置きGPU用の電源も購入PCの電源と連動する仕組みは電子工作。5
ドライバーインストール(Windows側)https://developer.nvidia.com/cuda/wsl6
WSL側の環境構築nvidia社のドキュメントにWSL環境についての記述がある。この通りで動作する。https://docs.nvidia.com/cuda/wsl-user-guide/index.html#getting-started-with-cuda-on-wslCUDA Toolkit 11.8 Downloads(内容は同じ)https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network7
EXLAで使う場合の注意sudo apt-key del 7fa2af80wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pinsudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600sudo apt-key adv --fetch-keyshttps://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/3bf863cc.pubsudo add-apt-repository 'debhttps://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /'sudo apt-get updatesudo apt-get -y install cuda=11.1.0-1 #バージョン指定する最新のバージョン(1.1.8だとうまく動作しない)ので、 11.1.0-1を指定xlaのissue報告中。https://github.com/elixir-nx/xla/issues/238
動作確認Mix.install([{:nx, "~> 0.3.0"},{:exla, "~> 0.3.0"},],config: [nx: [default_backend: EXLA.Backend,default_defn_options: [compiler: EXLA],]],system_env: [XLA_TARGET: "cuda111"],force: false,)Nx.add(Nx.tensor([1]), Nx.tensor([1]))iexのプロンプトで実行9
実行結果cudaで作成されている10
デモ● Config.exsの働き● cpu/cudaでの速度比較● GPUが動いている様子を観察11
EXLAを使用する設定import Configconfig :nx, :default_backend, EXLA.Backendconfig :nx, :default_defn_options, compiler: EXLA12
XLA_TARGETの指定export XLA_TARGET=cuda111mix deps.clean --allrm -Rf ~/.cache/xla/mix deps.getiex -S mixcpuを使う場合は、XLA_TARGET=cpu※変更した場合、deps.cleanが必要。~/.cache/xla/を削除しないとEXLAのコンパイルエラーになる。13
GPU動作状況の確認(nvidia-smi)14
速度比較200x200,2000x2000の単位行列の内積の演算時間を比較条件 200x200Exla使用しない 2.03seccpu 0.0752secrate 26倍条件 2000x2000cpu 12.4seccuda 0.911usrate 13.6倍15