簡體   English   中英

無法使用 Plaidml 在 GPU 上運行 Keras Model

[英]Cannot Run Keras Model On GPU With Plaidml

I Want to Run this Keras Model on My GPU but it runs on my cpu I used Plaidml to use my AMD GPU, plaidml is properly set and it runs perfectly on other models I think Maybe Becaouse I'm importing tensoflow but I'm Not確定這一點,我需要 model 在 GPU 上運行,我還有其他不導入 tensorflow 的模型與 Plaidml 完美配合

源代碼

import numpy as np

from os import environ
environ["KERAS_BACKEND"] = "plaidml.keras.backend"
import keras
from keras.layers import Dense


import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers


master_url_root = "https://raw.githubusercontent.com/numenta/NAB/master/data/"

df_small_noise_url_suffix = "artificialNoAnomaly/art_daily_small_noise.csv"
df_small_noise_url = master_url_root + df_small_noise_url_suffix
df_small_noise = pd.read_csv(
    df_small_noise_url, parse_dates=True, index_col="timestamp"
)

df_daily_jumpsup_url_suffix = "artificialWithAnomaly/art_daily_jumpsup.csv"
df_daily_jumpsup_url = master_url_root + df_daily_jumpsup_url_suffix
df_daily_jumpsup = pd.read_csv(
    df_daily_jumpsup_url, parse_dates=True, index_col="timestamp"
)



fig, ax = plt.subplots()
df_small_noise.plot(legend=False, ax=ax)
plt.show()



training_mean = df_small_noise.mean()
training_std = df_small_noise.std()
df_training_value = (df_small_noise - training_mean) / training_std
print("Number of training samples:", len(df_training_value))




TIME_STEPS = 288

# Generated training sequences for use in the model.
def create_sequences(values, time_steps=TIME_STEPS):
    output = []
    for i in range(len(values) - time_steps + 1):
        output.append(values[i : (i + time_steps)])
    return np.stack(output)


x_train = create_sequences(df_training_value.values)
print("Training input shape: ", x_train.shape)



model = keras.Sequential(
    [
        layers.Input(shape=(x_train.shape[1], x_train.shape[2])),
        layers.Conv1D(
            filters=32, kernel_size=7, padding="same", strides=2, activation="relu"
        ),
        layers.Dropout(rate=0.2),
        layers.Conv1D(
            filters=16, kernel_size=7, padding="same", strides=2, activation="relu"
        ),
        layers.Conv1DTranspose(
            filters=16, kernel_size=7, padding="same", strides=2, activation="relu"
        ),
        layers.Dropout(rate=0.2),
        layers.Conv1DTranspose(
            filters=32, kernel_size=7, padding="same", strides=2, activation="relu"
        ),
        layers.Conv1DTranspose(filters=1, kernel_size=7, padding="same"),
    ]
)
model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001), loss="mse")
model.summary()


history = model.fit(
    x_train,
    x_train,
    epochs=50,
    batch_size=128,
    validation_split=0.1,
    callbacks=[
        keras.callbacks.EarlyStopping(monitor="val_loss", patience=5, mode="min")
    ],
)

plt.plot(history.history["loss"], label="Training Loss")
plt.plot(history.history["val_loss"], label="Validation Loss")
plt.legend()
plt.show()

這是我的任務管理器的圖像(Plaidml 設置為在 GPU 0 [它適用於其他源代碼]上運行)

GPU 未使用,模型在 cpu 上運行

您同時使用keras and tensorflow.keras 僅使用一個版本的 Keras。

嘗試從 keras 導入 keras,而不是使用 tensorflow keras。

 import keras
 from keras import layers

您仍然應該可以訪問所有相同的層、模型等。您可能需要安裝 keras 而不使用 tensorflow

 pip install keras

另請查看您的 GPU memory 用法。 它應該跳起來,因為數據存儲在上面。 在 plaidml 中,大多數計算實際上並不是在 GPU 上運行,而是將權重和數據存儲在其上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM