Keras 2.X版本后可以很方便的支持使用多GPU进行训练了,使用多GPU可以提高我们的训练过程,比如加速和解决内存不足问题。
我的tensorflow_gpu=1.15.0
; Keras==2.1.6
涉及的代码
- 设置可以使用的GPU编号
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2,3" # 仅让id=2,3的GPU可被使用
- 当你的电脑中有多块GPU时, keras.utils.multi_gpu_model 中提供有内置函数,该函数可以产生任意模型的数据并行版本,最高支持在8片GPU上并行。
from keras.utils import multi_gpu_model #加载头文件
model = VGG16_model(input_shape=(224, 224, 3)) # 实例化模型
parallel_model = multi_gpu_model(model, gpus=2) #使用多GPU训练
parallel_model.fit(x, y, .......) #训练模型
loss, accuracy = parallel_model.evaluate(x_test, y_test) # 测试模型
- 可能会出现的问题:①Tensorflow版本较低导致的; ②源于:
callbacks.ModelCheckpoint()
, 等等
参考文章:Keras多GPU训练; [Keras] 使用多 gpu 并行训练并使用 ModelCheckpoint() 可能遇到的问题 ;
案例:VGG16+Cifar10 (Keras中多GPU训练)
# -*- coding:utf-8 -*-
# @Content : 利用现有的VGG16模型预测cifar10数据集
import numpy as np
import cv2 # 加载opencv,为了后期的图像处理
from keras.datasets import cifar10
from keras.models import Model
from keras.applications.vgg16 import VGG16
from keras.layers import Dense, Flatten, Dropout
from keras