gpt4 book ai didi

python - 在 CloudML for GPU 上加速 TFRecords 馈入 Keras 模型

转载 作者:太空狗 更新时间:2023-10-30 00:18:28 25 4
gpt4 key购买 nike

我想以超快的速度将 TFRecords 馈送到我的模型中。但是,目前,我的 GPU(GCP 上的单个 K80)负载为 0%,这在 CloudML 上非常慢。

我在 GCS 中有 TFRecords:train_directory = gs://bucket/train/*.tfrecord,(大约 100 个大小为 30mb-800mb 的文件),但由于某种原因它难以提供GPU 可以足够快地将数据导入我的模型。

有趣的是,使用 fit_generator() 将数据加载到内存和使用 numpy 数组的速度提高了 7 倍。在那里我可以指定多进程和多进程。

我当前的设置解析 tf 记录并加载无限的 tf.Dataset。理想情况下,该解决方案会在内存中保存/保存一些批处理,供 GPU 按需使用。

def _parse_func(record):
""" Parses TF Record"""
keys_to_features = {}
for _ in feature_list: # 300 features ['height', 'weights', 'salary']
keys_to_features[_] = tf.FixedLenFeature([TIME_STEPS], tf.float32)
parsed = tf.parse_single_example(record, keys_to_features)
t = [tf.manip.reshape(parsed[_], [-1, 1]) for _ in feature_list]
numeric_tensor = tf.concat(values=t, axis=1)

x = dict()
x['numeric'] = numeric_tensor
y = ...
w = ...

return x, y, w

def input_fn(file_pattern, b=BATCH_SIZE):
"""
:param file_pattern: GCS bucket to read from
:param b: Batch size, defaults to BATCH_SIZE in hparams.py
:return: And infinitely iterable data set using tf records of tf.data.Dataset class
"""
files = tf.data.Dataset.list_files(file_pattern=file_pattern)
d = files.apply(
tf.data.experimental.parallel_interleave(
lambda filename: tf.data.TFRecordDataset(filename),
cycle_length=4,
block_length=16,
buffer_output_elements=16,
prefetch_input_elements=16,
sloppy=True))
d = d.apply(tf.contrib.data.map_and_batch(
map_func=_parse_func, batch_size=b,
num_parallel_batches=4))
d = d.cache()
d = d.repeat()
d = d.prefetch(1)
return d

获取火车数据

# get files from GCS bucket and load them into dataset
train_data = input_fn(train_directory, b=BATCH_SIZE)

拟合模型

model.fit(x=train_data.make_one_shot_iterator())

我在 CloudML 上运行它,因此 GCS 和 CloudML 应该非常快。


CloudML CPU 使用情况:

正如我们在下面看到的,CPU 占用率为 70%,而内存并未增加超过 10%。那么 dataset.cache() 做了什么?

enter image description here

CloudML 日志中的 GPU 指标

如下图,好像是GPU关了!内存也为 0mb。缓存存储在哪里?

没有进程在 GPU 上运行!

enter image description here

编辑:

看来确实没有在GPU上运行的进程。我试图明确说明:

tf.keras.backend.set_session(tf.Session(config=tf.ConfigProto(
allow_soft_placement=True,
log_device_placement=True)))

train_data = input_fn(file_pattern=train_directory, b=BATCH_SIZE)

model = create_model()

with tf.device('/gpu:0'):
model.fit(x=train_data.make_one_shot_iterator(),
epochs=EPOCHS,
steps_per_epoch=STEPS_PER_EPOCH,
validation_data=test_data.make_one_shot_iterator(),
validation_steps=VALIDATION_STEPS)

但一切仍然使​​用 CPU!

最佳答案

就我而言,我使用的是自定义 setup.py 文件,该文件使用了仅 CPU 的 Tensorflow 版本。

我在踢自己,请改为安装 tensorflow-gpu

关于python - 在 CloudML for GPU 上加速 TFRecords 馈入 Keras 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53231758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com