赞
踩
(因为 conda 会将一系列的附带包全部安装适配版本,例如 cudatoolkit,tensorflow-gpu,所以直接用 conda 安装 keras-gpu 即可)
进行这一步,默认读者已经安装了 anaconda 并且创建了自己的虚拟环境;
conda install keras-gpu
查看你都 gpu 设备编号:nvidia-smi
根据上面显示,有 0 1 2 3 一共四个 gpu
在代码第一行添加下面一句话:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0" //使用的gpu的编号,使用第 0 个
model = .... //创建、定义自己使用的模型
model.compile(loss='categorical_crossentropy',
optimizer=opt,
metrics=['accuracy'])
什么叫数据并行呢?
数据集一共 10000 个数据,他们太多了,没办法一同放到内存里面,所以要进行 batch_size的拆分,如果 batch_size = 64, 那么我们把 64 个数据叫做一个 batch,这个batch 是我们根据经验人为设定的;而多个 gpu 的数据并行计算会把一个 batch 的数据拆分成几个部分放在并行的 gpu 设备上,这样可以节省时间提高效率。
具体操作:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1,2,3"
model = .... //创建、定义自己使用的模型
model = keras.utils.multi_gpu_model(model, gpus=3) //在 compile 之前加这句话,gpus=3指的是 gpu 的数量用 3 个
model.compile(loss='categorical_crossentropy',
optimizer=opt,
metrics=['accuracy'])
什么叫设备并行呢?
设备并行性包括在不同设备上运行同一模型的不同部分。对于具有并行体系结构的模型,例如有两个分支的模型,这种方式很合适。这种并行可以通过使用 tf.device来实现。一个简单的例子:
## 模型中共享的 LSTM 用于并行编码两个不同的序列 input_a = keras.Input(shape=(140, 256)) input_b = keras.Input(shape=(140, 256)) shared_lstm = keras.layers.LSTM(64) ## 在一个 GPU 上处理第一个序列 with tf.device('/device:GPU:0'): encoded_a = shared_lstm(input_a) # 在另一个 GPU上 处理下一个序列 with tf.device('/device:GPU:1'): encoded_b = shared_lstm(input_b) # 在 CPU 上连接结果 with tf.device('/cpu:0'): merged_vector = keras.layers.concatenate([encoded_a, encoded_b], axis=-1) # 整个全连接层 fc1 = keras.layers.Dense(50, activation='softmax')(merged_vector) # 新建模型 model = keras.Model(inputs=[input_a, input_b], outputs=fc1) # 其他代码 ...
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。