【问题标题】:Cannot Run Keras Model On GPU With Plaidml无法使用 Plaidml 在 GPU 上运行 Keras 模型
【发布时间】:2022-01-10 20:01:04
【问题描述】:

我想在我的 GPU 上运行这个 Keras 模型,但它在我使用的 cpu 上运行 Plaidml 使用我的 AMD GPU,plaidml 已正确设置并运行 完美适用于其他型号 我想也许是因为我正在导入 tensorflow,但我不确定,我需要模型在 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 上运行 [它适用于其他源代码])

【问题讨论】:

    标签: python machine-learning keras plaidml


    【解决方案1】:

    尝试从 keras 导入 keras,而不是使用 tensorflow keras。

     import keras
     from keras import layers
    

    你应该仍然可以访问所有相同的层、模型等。你可能需要安装没有 tensorflow 的 keras

     pip install keras
    

    还要查看您的 GPU 内存使用情况。它应该跳起来,因为数据存储在上面。在 plaidml 中,大多数计算实际上并不是在 GPU 上运行,而是将权重和数据存储在其上。

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2019-11-30
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多