TensorFlow-GPUをインストールしてみた
環境
windows 10 64bit
GeForce GTX 1050 Ti
CUDA 9.2
CUDNN 7.1
Python 3.6
TensorFlow 1.11
Visual Studio 2017
前提
anaconda入ってる
すでにTensorFlowでいろいろやってた
インストール手順(ざっくりと)
Visual Studio 2017をMicrosoft からダウンロード。exeを起動しインストール
CUDAとCUDNNをNVIDIAからダウンロード
CUDAはそのままexeを起動してインストール
CUDNNを解凍
解凍して出てきたbinフォルダたちをC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2 内に上書きコピー
anaconda promptを起動して以下コマンドを実行
activate 仮想環境名 pip uninstall tensorflow conda install tensorflow-gpu
以上で完了。
その後
tennsorflow自体はできているはずなのだが
# kの更新に利用するパラメータ GAMMA = 0.5 LR_K = 0.001 # 繰り返し数。100000〜1000000程度を指定 TOTAL_STEPS = 100 # モデルや確認用の生成画像を保存するディレクトリ MODEL_SAVE_DIR = 'began/models' IMG_SAVE_DIR = 'began/imgs' # 確認用に5x5個の画像を生成する IMG_SAMPLE_SHAPE = (5, 5) N_IMG_SAMPLES = np.prod(IMG_SAMPLE_SHAPE) # 保存先がなければ作成 os.makedirs(MODEL_SAVE_DIR, exist_ok=True) os.makedirs(IMG_SAVE_DIR, exist_ok=True) # サンプル画像用のランダムシード sample_seeds = np.random.uniform( -1, 1, (N_IMG_SAMPLES, z_size) ) history = [] logs = [] for step, batch in enumerate(train_data_generator): # サンプル数がBATCH_SIZEに満たない場合はスキップ # 全体の画像枚数がBATCH_SIZEの倍数出ない場合に発生 if len(batch) < BATCH_SIZE: continue # 学習終了 if step > TOTAL_STEPS: break # ランダムな値を生成 z_g = np.random.uniform( -1, 1, (BATCH_SIZE, z_size) ) z_d = np.random.uniform( -1, 1, (BATCH_SIZE, z_size) ) # 生成画像(discriminatorの学習に利用) g_pred = generator.predict(z_d) # generatorを1ステップ分学習させる generator.train_on_batch(z_g, batch) # discriminatorを1ステップ分学習させる _, real_loss, fake_loss = discriminator_trainer.train_on_batch( [batch, g_pred], [batch, g_pred] ) # k を更新 k_var += LR_K*(GAMMA*real_loss - fake_loss) K.set_value(k, k_var) # g_measure を計算するためにlossを保存 history.append({ 'real_loss': real_loss, 'fake_loss': fake_loss }) # 1000回に1度ログを表示 if step%1000 == 0: # 過去1000回分の measure を平均 measurement = np.mean([ measure( loss['real_loss'], loss['fake_loss'], GAMMA ) for loss in history[-1000:] ]) logs.append({ 'k': K.get_value(k), 'measure': measurement, 'real_loss': real_loss, 'fake_loss': fake_loss }) print(logs[-1]) # 画像を保存 img_path = '{}/generated_{}.png'.format( IMG_SAVE_DIR, step ) save_imgs( img_path, generator.predict(sample_seeds), rows=IMG_SAMPLE_SHAPE[0], cols=IMG_SAMPLE_SHAPE[1] ) # 最新のモデルを保存 generator.save('{}/generator_{}.hd5'.format(MODEL_SAVE_DIR, step)) discriminator.save('{}/discriminator_{}.hd5'.format(MODEL_SAVE_DIR, step))
このサンプルプログラムを実行すると
InternalError: Blas GEMM launch failed : a.shape=(16, 32), b.shape=(32, 4096), m=16, n=4096, k=32 [[{{node dense/MatMul}} = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_dense_input_0_0/_143, dense/MatMul/ReadVariableOp)]] [[{{node conv2d_8/BiasAdd/_145}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_158_conv2d_8/BiasAdd", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
エラーが起きてしまう。
ほかのプログラムを試してみても
Blas GEMM launch failed
というエラーが起きる。
今日は目が疲れたので明日続きをやろうと思う。
今日のまとめ
Tensorflow-GPUの使い方が分からねぇぇぇぇぇぇ (ゲームならGPU簡単に設定されるけど、プログラムにどうやって適応すればええの?)