PytorchGPUとCPUでモデルを実行するについて
モデルの切り替え
device = torch.device("cuda:0"/"cpu") |
GPUの特徴
非同期
GPUは並列化処理ができるため、複数のタスクを同時に進めることが可能になります。
https://miro.medium.com/v2/resize:fit:1100/format:webp/0*T6wK4QDVadTLbIl-
It may makes:
- GPU実行はまだ終わってないのに、end=time.time()は実行された
Warm-upが必須
warm-up = dry-on空運転は一回必要
the main reason for a dry-run is to put your CPU and GPU on maximum performance state
ベストパフォーマンスに至るまでに計測するのは正確でない
- e.g. 計算が始まってから少し時間を空けて計測を始める
空運転の方法
CPU and GPU are very quick to switch to the maximum performance test so just doing a 3000x3000 matrix multiplication
大規模な行列の掛け算は十分
おすすめの計測方法
torch.cuda.Event
とtorch.cuda.synchronize()
を利用する
start = torch.cuda.Event(enable_timing=True) |
検証結果
間違った計測と正しい計測の結果は3倍差
https://github.com/shu65/pytorch-cuda-time-measurement/blob/main/Pytorch_GPU_Time_Measurement.ipynb
参考文献
https://www.mattari-benkyo-note.com/2021/03/21/pytorch-cuda-time-measurement/