PyTorchの実行速度 CUDA on Windows10 vs WSL2
Windows10 Insider Program ではWSL2からCUDAが使えるとのことで、下記を参考にインストールしました。qiita.com
その上で、WindowsからCUDAを叩くのと、WSL2から叩くのとでどれぐらい実行時間に差があるのか試しました。
環境
- Windows10 Pro Insider Preview
- Dev Channel: Build 21343.rs_prerelease.210320-1757
- 32GB RAM
- Intel Core i9-10900K
- NVIDIA GeForce RTX 3070
- PyTorch 1.7.1+cu110
コード
torch_test.py
#!python3 import torch import torchvision.models as models import argparse import time def run(use_gpu: bool, dtype: torch.dtype): # Prepare model and data model = models.resnet18() tensor = torch.rand((40, 3, 480, 640), dtype = dtype) # To GPU start_time_total = time.time() if use_gpu: start_time_gpu = time.time() model = model.cuda() tensor = tensor.cuda() elapsed_time_gpu = time.time() - start_time_gpu print('toGPU time = {:3f}[s] ({})'.format( elapsed_time_gpu, dtype ) ) # Process start_time_proc = time.time() _ = model(tensor) finish_time = time.time() elapsed_time_proc = finish_time - start_time_proc elapsed_time_total = finish_time - start_time_total print('{} proc time = {:3f}[s] ({}), total time = {:3f}[s]'.format( 'GPU' if use_gpu else 'CPU', elapsed_time_proc, dtype, elapsed_time_total ) ) if __name__ == '__main__': print('PyTorch %s' % torch.__version__) device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') print('device: %s' % device) run(False, torch.float32) run(True, torch.float32)
実行結果
それぞれ3回実行しました。
Windows
>python torch_test.py PyTorch 1.7.1+cu110 device: cuda:0 CPU proc time = 2.412968[s] (torch.float32), total time = 2.412968[s] toGPU time = 1.028965[s] (torch.float32) GPU proc time = 1.586547[s] (torch.float32), total time = 2.615512[s] >python torch_test.py PyTorch 1.7.1+cu110 device: cuda:0 CPU proc time = 2.465967[s] (torch.float32), total time = 2.465967[s] toGPU time = 1.031965[s] (torch.float32) GPU proc time = 1.586000[s] (torch.float32), total time = 2.617966[s] >python torch_test.py PyTorch 1.7.1+cu110 device: cuda:0 CPU proc time = 2.976967[s] (torch.float32), total time = 2.976967[s] toGPU time = 1.005968[s] (torch.float32) GPU proc time = 1.590999[s] (torch.float32), total time = 2.596968[s]
WSL2
$ python torch_test.py PyTorch 1.7.1+cu110 device: cuda:0 CPU proc time = 2.276961[s] (torch.float32), total time = 2.276962[s] toGPU time = 2.526399[s] (torch.float32) GPU proc time = 0.220261[s] (torch.float32), total time = 2.746719[s] $ python torch_test.py PyTorch 1.7.1+cu110 device: cuda:0 CPU proc time = 2.329590[s] (torch.float32), total time = 2.329591[s] toGPU time = 2.428853[s] (torch.float32) GPU proc time = 0.219387[s] (torch.float32), total time = 2.648300[s] $ python torch_test.py PyTorch 1.7.1+cu110 device: cuda:0 CPU proc time = 2.325431[s] (torch.float32), total time = 2.325431[s] toGPU time = 2.907129[s] (torch.float32) GPU proc time = 0.219199[s] (torch.float32), total time = 3.126382[s]
結論
おおむね所要時間は同じでした。
ただ細かいことを言うと、CUDA使用時は
- cuda()を呼ぶとき
- 推論するとき
の所要時間が異なっていました(2つを合計すればほぼ一緒のようです)
WinとWSL2(またはLinux全般?)で書き方の違いで時間がかかるタイミングが異なるかもしれないことに注意しないといけないのですね…
マウスカーソルを見失ったときに所定の場所に強制移動させる
マルチディスプレイしているとマウスカーソルを見失うことも多いが、そのたびにマウスをバタバタと左右に動かして画面のどこにあるか探す時間が勿体ない。
そこで、マウスカーソルが画面上の所定の位置に来るようなbatを作成した。これをpathが通るところにおいて、Winキー→bat名入力で即座にマウスカーソルを取り戻す。
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof add-type -AssemblyName System.Windows.Forms [System.Windows.Forms.Cursor]::Position = new-object System.Drawing.Point(960, 540)
C, V, H キーが打てない問題の解消法 (When C, V, H keys don't work...)
TL;DR (English)
- It might depend on each environment, but in my case, "Right Windows" key is regarded as pressed down.
- Of course my keyboard doesn't have such a key... So I can't press it.
- To solve this problem, simulate "R Win" key (VK_RWIN) with some tool.
- You can create it by yourself using Win32API keybd_event()
- My guess is that this problem might occur due to the malfunction of keyboards.
TL;DR (Japanese)
- この問題の発生原因は人それぞれかもしれないが、私の場合は「右Windowsキー」が押しっぱなし状態と判定されていることが原因だった。
- キーボード入力をシミュレートするツールで「右Windowsキー」を話したことにして対処。
- 例えば、キーボードシミュレータでVK_RWIN (0x5C)をWM_KEYUPさせる
- PowerShell
- (恐らくだが)原因はキーボードの誤動作。無線キーボードを使っているのだが、伝送する信号を間違えたのかな…あくまで想像。
詳細
結構長い間、下記の問題に悩んでいた:
- テキスト入力欄にC, V, Hキーが打てない
- C, V, H, Aキーを押すと変な動作をする
- etc
ネットで調べても同様の症状の人は世界中でいるようである。
検索欄に「c v h」と入力したら他の人も検索しているみたい。
実際いくつかの質問サイトでQ&Aがあるが、人それぞれ原因は違うようでいろんな対策が載っている。
- PCのキーボードの「H」「C」「V」が打てません -PCのキーボード- マウス・キーボード | 教えて!goo
- Windows7でC、V、Hキーが効かない現象が発生します。Windows7でソフトを使っ... - Yahoo!知恵袋
- Keys C, V and H not working? | NotebookReview
- Help!!!! c, h and v keys don’t work, page 1
- Some Keyboard Keys not working | Tom's Hardware Forum
- [Fixed] Keyboard Not Working on Windows 10 - Driver Easy
ちなみに私は検索して出てくるやつでは一向に改善しなかった。
これまでは、しばらく我慢してたらどういうわけか直ったりしていた。
(いつか直るまでどうにも我慢できないときは、一度ログオフしたり再起動したりしていた)
ちょっと真面目に原因を探ろうと思い、何か特殊キーが押された状態になっているのではないかと仮説を立ててキー入力状態を見てみたら、当たりだった。
Structure Sensor を Windows へ接続
はじめに
"Structure Sensor" というiOS向けの超小型デプスセンサーについて、いろいろな方が既にレビューをされています。(ちなみにデプスセンサーとは距離情報を取得できるセンサーで、MicrosoftのKinectを契機にかなり有名になりました。)
ただ、書かれている記事のほとんどが「iOSに繋げてみた」「デモアプリを使ってみた」ばかりのようなので、私は「iOS以外にUSB接続して、自力でデータを取り出す方法」を書きたいと思います。具体的には、今回はまず「Windowsから Structure Sensor を触る方法」を書いて、後に「Windowsで深度画像とポイントクラウドを取り出す方法」を書く予定です。
- (2014/07/02追記) 次記事:
環境の準備
Structure Sensor は iOS からは Structure SDK というものを使えば触ることができます。そしてiOS以外の場合は OpenNI2 (OpenNI1ではダメ) を使えばよいそうです。
というわけで、まずOpenNI2を用意。
OpenNI2は今はStructure Sensorの下記のサイトからバイナリやドキュメントがダウンロードできます。
インストール後はOpenNI2のフォルダ内のどこかにあるPS1080.ini内の
;UsbInterface=2
になっているところを
UsbInterface=0
に修正します。これでStructure Sensorからデータを読み出すことができるようになりました。