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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

11688閲覧

tensorflowの環境構築に関して

AnchorBlues

総合スコア18

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/03/04 03:05

現在、以下の環境でtensorflowを実行することを考えております。

  • Ubuntu16.04
  • GPU GeForce 1070Ti
  • cuda 9.0
  • cudnn v7.1.1 Library for Linux
  • Python3.5(Anaconda)
  • tensorflow 1.6.0

基本的な環境構築は、

を元に行いました。

ところが、いざtensorflowのサンプルコードを走らせてみると、InvalidArgumentErrorというエラーが出てしまいます。

以下、実際に走らせたコードとエラーの詳細です。

https://qiita.com/supersaiakujin/items/aa598c942c3ec82d0c8c

を参考に、

python

1import tensorflow as tf 2import numpy as np 3 4WW = np.array([[0.1, 0.6, -0.9], 5 [0.2, 0.5, -0.8], 6 [0.3, 0.4, -0.7], 7 [0.4, 0.3, -0.6], 8 [0.5, 0.2, -0.5]]).astype(np.float32) 9bb = np.array([0.3, 0.4, 0.5]).astype(np.float32) 10x_data = np.random.rand(100,5).astype(np.float32) 11y_data = np.dot(x_data, WW) + bb 12 13with tf.Session() as sess: 14 15 W = tf.Variable(tf.random_uniform([5,3], -1.0, 1.0)) 16 # The zeros set to zero with all elements. 17 b = tf.Variable(tf.zeros([3])) 18 #y = W * x_data + b 19 y = tf.matmul(x_data, W) + b 20 21 # Add summary ops to collect data 22 w_hist = tf.histogram_summary("weights", W) 23 b_hist = tf.histogram_summary("biases", b) 24 y_hist = tf.histogram_summary("y", y) 25 26 # Minimize the mean squared errors. 27 loss = tf.reduce_mean(tf.square(y - y_data)) 28 # Outputs a Summary protocol buffer with scalar values 29 loss_summary = tf.scalar_summary("loss", loss) 30 31 # Gradient descent algorithm 32 optimizer = tf.train.GradientDescentOptimizer(0.5) 33 train = optimizer.minimize(loss) 34 35 # Before starting, initialize the variables. We will 'run' this first. 36 init = tf.initialize_all_variables() 37 38 # Creates a SummaryWriter 39 # Merges all summaries collected in the default graph 40 merged = tf.merge_all_summaries() 41 writer = tf.train.SummaryWriter("/tmp/tensorflow_log", sess.graph_def) 42 sess.run(init) 43 44 # Fit the line 45 for step in xrange(501): 46 if step % 10 == 0: 47 result = sess.run([merged, loss]) 48 summary_str = result[0] 49 acc = result[1] 50 writer.add_summary(summary_str, step) 51 print"step = %s acc = %s W = %s b = %s" % (step, acc, sess.run(W), sess.run(b)) 52 else: 53 sess.run(train)

このコードを実行した際のエラーメッセージは以下です。

WARNING:tensorflow:From /home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/util/tf_should_use.py:118: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use `tf.global_variables_initializer` instead. WARNING:tensorflow:Passing a `GraphDef` to the SummaryWriter is deprecated. Pass a `Graph` object instead, such as `sess.graph`. Traceback (most recent call last): File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1361, in _do_call return fn(*args) File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1332, in _run_fn self._extend_graph() File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1392, in _extend_graph graph_def.SerializeToString(), status) File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 516, in __exit__ c_api.TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation 'MatMul_1': Operation was explicitly assigned to /device:GPU:2 but available devices are [ /job:localhost/replica:0/task:0/device:CPU:0, /job:localhost/replica:0/task:0/device:GPU:0 ]. Make sure the device specification refers to a valid device. [[Node: MatMul_1 = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/device:GPU:2"](a_1, b_1)]]

どうやら、インポートは上手くいっているのですが、実際にtensorflowを用いてコードを実行しようとなると、エラーを吐いてしまうようです。

また別のサンプルプログラム(https://www.tensorflow.org/programmers_guide/using_gpu)

python

1# Creates a graph. 2a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 3b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 4c = tf.matmul(a, b) 5# Creates a session with log_device_placement set to True. 6sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 7# Runs the op. 8print(sess.run(c))

を実行した際にも、同様のエラーを吐きました。

Traceback (most recent call last): File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1361, in _do_call return fn(*args) File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1332, in _run_fn self._extend_graph() File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1392, in _extend_graph graph_def.SerializeToString(), status) File "/home/username/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 516, in __exit__ c_api.TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation 'MatMul_1': Operation was explicitly assigned to /device:GPU:2 but available devices are [ /job:localhost/replica:0/task:0/device:CPU:0, /job:localhost/replica:0/task:0/device:GPU:0 ]. Make sure the device specification refers to a valid device. [[Node: MatMul_1 = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/device:GPU:2"](a_1, b_1)]]

何が問題で、どのようにすれば解決できるのか、どなたかご教授いただけないでしょうか。

よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

エラーの問題はGPU指定が"/device:GPU:0"にすべきところを"/device:GPU:2"になってしまっていることのようですが、パット見デバイス指定はしてなさそうですね・・・

念のためお聞きしたいのですが、下記のようなwithで囲まれたブロックはどこにも使ってませんよね?

Python

1with tf.device('/gpu:2'): 2 a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 3 b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')

投稿2018/03/04 03:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AnchorBlues

2018/03/04 04:34 編集

dkato0077さん ご返答ありがとうございます。 すみません、2つ目のサンプルプログラムに関しては、おっしゃるとおりでした。 同じコードの中で、 with tf.device('/gpu:2'): を使っている箇所がありまして、その部分を修正したら、2つ目のサンプルプログラムのエラーは解消されました。 一方で、1つ目のサンプルプログラムの実行した際のエラーは、未だに解決されておりません。 # 先ほどとは異なるエラーになりました。 InternalError Traceback (most recent call last) ~/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args) 1360 try: -> 1361 return fn(*args) 1362 except errors.OpError as e: ~/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py in _run_fn(session, feed_dict, fetch_list, target_list, options, run_metadata) 1339 return tf_session.TF_Run(session, options, feed_dict, fetch_list, -> 1340 target_list, status, run_metadata) 1341 ~/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg) 515 compat.as_text(c_api.TF_Message(self.status.status)), --> 516 c_api.TF_GetCode(self.status.status)) 517 # Delete the underlying status object from memory otherwise it stays alive InternalError: Blas GEMM launch failed : a.shape=(100, 5), b.shape=(5, 3), m=100, n=3, k=5 [[Node: MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](MatMul/a, Variable/read)]] 引き続きよろしくお願いいたします。
AnchorBlues

2018/03/04 05:34

mkgreiさん ご返答ありがとうございます。 最初にご返答いただいた環境変数の設定を行った結果、こちらのエラーも解消されました。 無事、tensorflowをGPUで実行することができました。 ありがとうございました。
guest

0

ベストアンサー

https://stackoverflow.com/questions/37893755/tensorflow-set-cuda-visible-devices-within-jupyter

dkato0077さんの意見に同意ですが、環境変数を疑ってみます。

投稿2018/03/04 04:34

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AnchorBlues

2018/03/04 05:33

mkgreiさん ご返答ありがとうございます。 こちらを参考に環境変数を指定したら、無事実行できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問