CUDA10.0とPyTorchをWindows10+Anaconda環境にインストールする

手間取ったので、インストールする流れを残しておく

 

 

CUDAのインストール

CUDAの公式サイトから、インストーラをダウンロードする

プラットフォームに合わせてダウンロード

CUDAインストールサイト

CUDAインストールサイト

自分はインストーラ(2GB)をlocalに落とすのに2~3時間かかった

 

インストーラに言われるがままにインストール...

失敗した

cuda install failed

cudaのインストール失敗

 

解決法

色々調べたところ、全てのNVIDIA製品をアンインストール、その後CUDAのインストールをすると治るという記事を複数見つけたが、自分はこの方法で解決した。(NVIDIAドライバとCUDAのバージョンの相性の問題っぽい)

グラボのドライバーを最新版にアップデート

グラフィックドライバーバージョン

グラフィックドライバーバージョン
Visual StudioWindows 10 SDKコンポーネントをインストールする
    1. Visual Studio Installer から現在インストールされている製品の下にある変更ボタンをクリック

      VS設定1

      VS設定1
    2. ワークロードのユニバーサルWindowsプラットフォーム開発をクリックすると右に出てくるWindows 10 SDK にチェックを入れる(自分は全部入れたが1つでも良いかもしれない)

      VS設定2

      VS設定2

 

CUDAがインストール出来たか確認

インストールが終わったら、コマンドプロンプトから nvcc コマンドを実行してバージョン情報が出るかを確かめる。

>nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Sat_Aug_25_21:08:04_Central_Daylight_Time_2018 Cuda compilation tools, release 10.0, V10.0.130

 

 

PyTorchのインストール

 PyTorchの公式サイトからインストールするために使うコマンドを調べる

自分が調べたとき(2018/12/14)は、

  • Your OS:Windows
  • Package:Conda
  • Language:Python 3.7
  • CUDA:10.0

の場合は以下のコマンドを使えと言われた。

conda install pytorch torchvision cuda100 -c pytorch

 自分は30分程度でインストールが終わった

PyTorchをダウンロード

PyTorchをダウンロード

 

PyTorchがインストール出来たか確認

PyTorch公式のtutorialsから適当なプログラムをコピペ、実行出来るか確認する。

自分はシンプルなNNのサンプルを動かしてみた。ソースは以下。

# -*- coding: utf-8 -*-
import torch

# N is batch size; D_in is input dimension;
# H is hidden dimension; D_out is output dimension.
N, D_in, H, D_out = 64, 1000, 100, 10

# Create random Tensors to hold inputs and outputs
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)

# Use the nn package to define our model as a sequence of layers. nn.Sequential
# is a Module which contains other Modules, and applies them in sequence to
# produce its output. Each Linear Module computes output from input using a
# linear function, and holds internal Tensors for its weight and bias.
model = torch.nn.Sequential(
torch.nn.Linear(D_in, H),
torch.nn.ReLU(),
torch.nn.Linear(H, D_out),
)

# The nn package also contains definitions of popular loss functions; in this
# case we will use Mean Squared Error (MSE) as our loss function.
loss_fn = torch.nn.MSELoss(reduction='sum')

learning_rate = 1e-4
for t in range(500):
# Forward pass: compute predicted y by passing x to the model. Module objects
# override the __call__ operator so you can call them like functions. When
# doing so you pass a Tensor of input data to the Module and it produces
# a Tensor of output data.
y_pred = model(x)

# Compute and print loss. We pass Tensors containing the predicted and true
# values of y, and the loss function returns a Tensor containing the
# loss.
loss = loss_fn(y_pred, y)
print(t, loss.item())

# Zero the gradients before running the backward pass.
model.zero_grad()

# Backward pass: compute gradient of the loss with respect to all the learnable
# parameters of the model. Internally, the parameters of each Module are stored
# in Tensors with requires_grad=True, so this call will compute gradients for
# all learnable parameters in the model.
loss.backward()

# Update the weights using gradient descent. Each parameter is a Tensor, so
# we can access its gradients like we did before.
with torch.no_grad():
for param in model.parameters():
param -= learning_rate * param.grad