質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

chainerのサンプルプログラムをGPUを使って動かしたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,494
退会済みユーザー

退会済みユーザー

前提・実現したいこと

ここに質問したいことを詳細に書いてください
chainerのmnistのサンプルプログラム(train_mnist.py)をGPUを用いて動かしたい。

発生している問題・エラーメッセージ

GPUを使って動かそうとすると、PATHが通ってない?的なエラーが出る。
PATHは.bashrcに
「export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda」
を書き加えてる。

エラーメッセージ

/usr/local/lib/python2.7/dist-packages/chainer/cuda.py:90: UserWarning: cuDNN is not enabled.
Please reinstall chainer after you install cudnn
(see https://github.com/pfnet/chainer#installation).
'cuDNN is not enabled.\n'
Traceback (most recent call last):
File "train_mnist.py", line 107, in <module>
main()
File "train_mnist.py", line 104, in main
trainer.run()
File "/usr/local/lib/python2.7/dist-packages/chainer/training/trainer.py", line 266, in run
update()
File "/usr/local/lib/python2.7/dist-packages/chainer/training/updater.py", line 170, in update
self.update_core()
File "/usr/local/lib/python2.7/dist-packages/chainer/training/updater.py", line 182, in update_core
optimizer.update(loss_func, *in_vars)
File "/usr/local/lib/python2.7/dist-packages/chainer/optimizer.py", line 392, in update
loss = lossfun(*args, **kwds)
File "/usr/local/lib/python2.7/dist-packages/chainer/links/model/classifier.py", line 67, in call
self.y = self.predictor(*x)
File "train_mnist.py", line 24, in call
h1 = F.relu(self.l1(x))
File "/usr/local/lib/python2.7/dist-packages/chainer/links/connection/linear.py", line 91, in call
self._initialize_params(x.size // len(x.data))
File "/usr/local/lib/python2.7/dist-packages/chainer/links/connection/linear.py", line 77, in _initialize_params
initializer=self._W_initializer)
File "/usr/local/lib/python2.7/dist-packages/chainer/link.py", line 175, in add_param
data = initializers.generate_array(initializer, shape, self.xp)
File "/usr/local/lib/python2.7/dist-packages/chainer/initializers/init.py", line 45, in generate_array
initializer(array)
File "/usr/local/lib/python2.7/dist-packages/chainer/initializers/normal.py", line 94, in call
Normal(s)(array)
File "/usr/local/lib/python2.7/dist-packages/chainer/initializers/normal.py", line 31, in call
loc=0.0, scale=self.scale, size=array.shape)
File "cupy/core/core.pyx", line 1066, in cupy.core.core.ndarray.setitem (cupy/core/core.cpp:21649)
File "cupy/core/core.pyx", line 1295, in cupy.core.core.elementwise_copy (cupy/core/core.cpp:48975)
File "cupy/core/elementwise.pxi", line 768, in cupy.core.core.ufunc.call (cupy/core/core.cpp:39912)
File "cupy/util.pyx", line 35, in cupy.util.memoize.decorator.ret (cupy/util.cpp:1259)
File "cupy/core/elementwise.pxi", line 576, in cupy.core.core._get_ufunc_kernel (cupy/core/core.cpp:36526)
File "cupy/core/elementwise.pxi", line 32, in cupy.core.core._get_simple_elementwise_kernel (cupy/core/core.cpp:27126)
File "cupy/core/carray.pxi", line 87, in cupy.core.core.compile_with_cache (cupy/core/core.cpp:26813)
File "/usr/local/lib/python2.7/dist-packages/cupy/cuda/compiler.py", line 125, in compile_with_cache
env = (arch, options, _get_nvcc_version())
File "/usr/local/lib/python2.7/dist-packages/cupy/cuda/compiler.py", line 22, in _get_nvcc_version
_nvcc_version = _run_nvcc(cmd, '.')
File "/usr/local/lib/python2.7/dist-packages/cupy/cuda/compiler.py", line 61, in _run_nvcc
raise OSError(msg)
OSError: Failed to run nvcc command. Check PATH environment variable: [Errno 2] No such file or directory

該当のソースコード

#!/usr/bin/env python
from __future__ import print_function
import argparse

import chainer
import chainer.functions as F
import chainer.links as L
from chainer import training
from chainer.training import extensions


# Network definition
class MLP(chainer.Chain):

    def __init__(self, n_units, n_out):
        super(MLP, self).__init__(
            # the size of the inputs to each layer will be inferred
            l1=L.Linear(None, n_units),  # n_in -> n_units
            l2=L.Linear(None, n_units),  # n_units -> n_units
            l3=L.Linear(None, n_out),  # n_units -> n_out
        )

    def __call__(self, x):
        h1 = F.relu(self.l1(x))
        h2 = F.relu(self.l2(h1))
        return self.l3(h2)


def main():
    parser = argparse.ArgumentParser(description='Chainer example: MNIST')
    parser.add_argument('--batchsize', '-b', type=int, default=100,
                        help='Number of images in each mini-batch')
    parser.add_argument('--epoch', '-e', type=int, default=20,
                        help='Number of sweeps over the dataset to train')
    parser.add_argument('--gpu', '-g', type=int, default=-1,
                        help='GPU ID (negative value indicates CPU)')
    parser.add_argument('--out', '-o', default='result',
                        help='Directory to output the result')
    parser.add_argument('--resume', '-r', default='',
                        help='Resume the training from snapshot')
    parser.add_argument('--unit', '-u', type=int, default=1000,
                        help='Number of units')
    args = parser.parse_args()

    print('GPU: {}'.format(args.gpu))
    print('# unit: {}'.format(args.unit))
    print('# Minibatch-size: {}'.format(args.batchsize))
    print('# epoch: {}'.format(args.epoch))
    print('')

    # Set up a neural network to train
    # Classifier reports softmax cross entropy loss and accuracy at every
    # iteration, which will be used by the PrintReport extension below.
    model = L.Classifier(MLP(args.unit, 10))
    if args.gpu >= 0:
        chainer.cuda.get_device(args.gpu).use()  # Make a specified GPU current
        model.to_gpu()  # Copy the model to the GPU

    # Setup an optimizer
    optimizer = chainer.optimizers.Adam()
    optimizer.setup(model)

    # Load the MNIST dataset
    train, test = chainer.datasets.get_mnist()

    train_iter = chainer.iterators.SerialIterator(train, args.batchsize)
    test_iter = chainer.iterators.SerialIterator(test, args.batchsize,
                                                 repeat=False, shuffle=False)

    # Set up a trainer
    updater = training.StandardUpdater(train_iter, optimizer, device=args.gpu)
    trainer = training.Trainer(updater, (args.epoch, 'epoch'), out=args.out)

    # Evaluate the model with the test dataset for each epoch
    trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu))

    # Dump a computational graph from 'loss' variable at the first iteration
    # The "main" refers to the target link of the "main" optimizer.
    trainer.extend(extensions.dump_graph('main/loss'))

    # Take a snapshot at each epoch
    trainer.extend(extensions.snapshot(), trigger=(args.epoch, 'epoch'))

    # Write a log of evaluation statistics for each epoch
    trainer.extend(extensions.LogReport())

    # Print selected entries of the log to stdout
    # Here "main" refers to the target link of the "main" optimizer again, and
    # "validation" refers to the default name of the Evaluator extension.
    # Entries other than 'epoch' are reported by the Classifier link, called by
    # either the updater or the evaluator.
    trainer.extend(extensions.PrintReport(
        ['epoch', 'main/loss', 'validation/main/loss',
         'main/accuracy', 'validation/main/accuracy']))

    # Print a progress bar to stdout
    trainer.extend(extensions.ProgressBar())

    if args.resume:
        # Resume from a snapshot
        chainer.serializers.load_npz(args.resume, trainer)

    # Run the training
    trainer.run()

if __name__ == '__main__':
    main()

試したこと

cuda8.0RCを消してcuda8.0を入れた

補足情報(言語/FW/ツール等のバージョンなど)

使用しているGPUはGIGABYTE1070。
使用しているOSはUbuntu16.04です。
cudaのサンプルプログラムは動きました。
chainerのバージョンは1.16.0です。
cudaのバージョンは8.0です。
GPUを用いならければ動きます。

大変見にくいとは思いますがどうかよろしくい願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

ユーザーが指定したパスではなく別のとこのnvcc を使おうとしてたのが原因らしかったです。シェルスクリプトを書いて解決しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

  • 示されたメッセージによりますと "cuDNN インストールのに chainerインストールしてくれ" いうてますが、OKですか?
  • "cudaのサンプルプログラムは動きました"とは、サンプル・コードのコンパイルと実行ができたってことですか? メッセージの末尾に"nvcc(CUDAコンパイラ)に着火できんかった"とかいうてますけども。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/01 15:56 編集

    cuDNNインストールの後にchainerはインストールしました。
    cudaのサンプルプログラムはコンパイルと実行出来ました。
    書き忘れてしまい申し訳無いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る