前提・実現したいこと
autokerasによる学習時のGPUの使用率を上げたいです。
発生している問題
GPUが載っているPCでautokerasを使用時の思うようにGOUの使用率があがらず学習がかなり遅くなっています。
CPUの使用率は常時100%、GPUの使用率は20〜30%程度です。
使用率の内訳は、CPUはほぼ「Python」が占めていて、GPUはほぼ「デスクトップウィンドマネージャー」が占めています。
該当のソースコード
Python
1import shutil 2import autokeras as ak 3import keras as ks 4from keras.utils import np_utils 5from sklearn.datasets import fetch_openml 6import pandas as pd 7import numpy as np 8import matplotlib 9import matplotlib.pyplot as plt 10from PIL import Image 11import glob 12import os 13from keras.preprocessing.image import load_img, img_to_array 14import sys 15import pickle 16import requests 17from tqdm import tqdm 18from io import StringIO 19import time 20# 画像用 21from keras.preprocessing.image import array_to_img, img_to_array, load_img 22#自作モジュール 23from module import sep_dataset, line_send, pre_treatment, model_evaluation, set_datarange 24 25 26#教師データが入っているフォルダのパス 27train_folder_path = "D:/folder/subX" 28#モデルの最大試行回数 29max_model = 20 30 31#モデル構築(Auto-kerasのモデル設定) 32def make_model(): 33 input_node = ak.ImageInput() 34 output_node = ak.ImageBlock(normalize=False, augment=False, )(input_node) 35 output_node = ak.ClassificationHead()(output_node) 36 model = ak.AutoModel(inputs=input_node, outputs=output_node, overwrite=True, max_trials=max_model, directory=train_folder_path,) 37 return model 38 39#テスト・トレーニングデータに分離、検証データの入れ替え及び全パターンの組み合わせの作成 40t1, v1 = sep_dataset.main(train_folder_path, 0) 41t2, v2 = sep_dataset.main(train_folder_path, 1) 42t3, v3 = sep_dataset.main(train_folder_path, 2) 43train = [] 44val = [] 45for i in range(len(t1)): 46 train.append([t1[i]]+[t2[i]]+[t3[i]]) 47 val.append([v1[i]]+[v2[i]]+[v3[i]]) 48 49#前回学習中断箇所の取得(r=中断箇所のセルのrow、 c=中断箇所のセルのcolumn、 v=検証データの数字、 p=何個目の分割パターンかの数字) 50r, c, v, p = set_datarange.main(train_folder_path) 51 52#全パターンを回す 53for count in range(p, len(val)): 54 for i in range(v,3): 55 #データの前処理 56 X_train, Y_train = pre_treatment.main(train[count][i], len(train[count][i])) 57 X_test, Y_test = pre_treatment.main(val[count][i], len(val[count][i])) 58 59 #CNNモデルの構築(max_trials:モデルの試行回数) 60 model = make_model() 61 62 #モデルの訓練(学習) 63 model.fit(X_train, Y_train, validation_data=(X_test, Y_test)) 64 65 v = 0
試したこと
Tensorflowサポートページ記載の環境の組み合わせにしました(補足情報に使用している環境を記載しています)。
コード内に以下使用GPUが確認できるコードを入れ確認しました
from tensorflow.python.client import device_lib device_lib.list_local_devices()
Output
1[name: "/device:CPU:0" 2 device_type: "CPU" 3 memory_limit: 268435456 4 locality { 5 } 6 incarnation: 11117973514078919282, 7 name: "/device:XLA_CPU:0" 8 device_type: "XLA_CPU" 9 memory_limit: 17179869184 10 locality { 11 } 12 incarnation: 15348073617761923140 13 physical_device_desc: "device: XLA_CPU device", 14 name: "/device:XLA_GPU:0" 15 device_type: "XLA_GPU" 16 memory_limit: 17179869184 17 locality { 18 } 19 incarnation: 8427739235963277201 20 physical_device_desc: "device: XLA_GPU device"]
補足情報(FW/ツールのバージョンなど)
Windows10
CPU Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
GPU NVIDIA GeForce GTX 1660 SUPER
Python 3.7.3
autokeras 1.0.12
tensorflow-gpu 2.3.0
cuDNN 7.4
CUDA 10.1
あなたの回答
tips
プレビュー