- 計算の高速化(GPUの利用)
- 適切なエピソード数
- 適切なメモリバッファ数
- ネットワークの入力値?パラメータ?の正規化。
- 保存したパラメータを読み出すのはactorとtarget_actorまたcriticとtarget_criticで共通で良いのだろうか。
Contents
計算の高速化:GPUを使ってみる。
今日は下準備をやっていきます。
GPUの準備ができているPCなら
1 2 |
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') print(device) |
で’cuda’が出力されます。
‘cpu’が出力されたならGPUの準備から始める必要があります。
GPUの準備
PCIスロットに入っているGPUを調べる
$ nvidia-smi –query-gpu=name –format=csv
出力:NVIDIA GeForce RTX 3070 Ti
cudaバージョンを調べる
$ nvidia-smi
出力:
NVIDIA-SMI 528.49 Driver Version: 528.49 CUDA Version: 12.0
CUDA Toolkit のバージョンを調べる
$ nvcc -V
出力:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_19:04:39_Pacific_Standard_Time_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0
NVIDIAのGPUドライバを最新にする
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
でNVIDIA GeForce RTX 3070 Tiのドライバをインストールします。Driver Version: 531.14 にアップデートしました。
再度 $ nvidia-smiで確認すると
CUDA Version: 12.1 にアップデートしていました。
CUDA ToolkitをGPUドライバに合わせてインストールする
https://developer.nvidia.com/cuda-toolkit-archive
GPUドライバをアップデートした結果CUDAバージョンは12.1になったので、それに合わせてCUDA Toolkit 12.1.0 (February 2023), Versioned Online Documentationを選択。
次にwindows10, exeファイルを選択して、ダウンロードしてインストール。
PytorchのGPU使用バージョンをインストールする
https://pytorch.org/get-started/locally/
Pytorchがインストールされているようであれば、アンインストールしておくのが良いです。
$ pip uninstall torch
下記のように自分に合ったOS, CUDAバージョンを指定すると、インストール用のコマンドが生成されるので、実行します。
1 |
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121 |
確認する
今一度下記でdeviceが’cuda’と出力されれば完了です。
1 2 |
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') print(device) |
Pythonからもいろいろ情報を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
print(torch.__version__) print(torch.cuda.is_available(), torch.cuda.device_count()) if torch.cuda.is_available(): print(torch.cuda.current_device()) print(torch.cuda.get_device_name()) print(torch.cuda.get_device_capability()) """ 出力 2.1.0.dev20230519+cu121 True 1 0 NVIDIA GeForce RTX 3070 Ti (8, 6) """ |
GPUでPytorchのテンソルを計算してみよう。
1 2 3 4 5 |
cpu_tensor = torch.rand(10) gpu_tensor = cpu_tensor.to(device=device) print('cpu_tensor : ', cpu_tensor) print('gpu_tensor : ', gpu_tensor) print('gpu culc : ', gpu_tensor * gpu_tensor) |
結果
GPU同士でないと計算できないので注意です。
1 2 3 4 5 6 |
cpu_tensor : tensor([0.6008, 0.6893, 0.2151, 0.6096, 0.3254, 0.5945, 0.1834, 0.3007, 0.3145, 0.7312]) gpu_tensor : tensor([0.6008, 0.6893, 0.2151, 0.6096, 0.3254, 0.5945, 0.1834, 0.3007, 0.3145, 0.7312], device='cuda:0') gpu culc : tensor([0.3609, 0.4752, 0.0463, 0.3716, 0.1059, 0.3535, 0.0337, 0.0904, 0.0989, 0.5346], device='cuda:0') |
演算後にCPU上の数値またはNumpy.arrayと演算するためにはGPU上からCPU上へ戻す必要があります。
1 2 |
# gpu上のテンソルをCPU上にコピーし、テンソルを計算グラフから切り離し、numpyのarrayに変換する一連の操作。 numpy_array = gpu_tensor.cpu().detach().numpy() |
また、GPU上にあるとmatplotlibでグラフが書けないので、GPU→CPUまたは、Numpy.arrayにしてからmatplotlibで描画します。
gpu上にある数値でグラフ描画を試みたときの警告
plt.plot(gpu_tensor)
#TypeError: can’t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
次回
次回はニューラルネットワークに
device = torch.device(‘cuda’ if torch.cuda.is_available() else ‘cpu’)
と
tensor.to(device)
と
numpy_array = gpu_tensor.cpu().detach().numpy()
を入れ込んでみます。
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日