这有点复杂。Keras会在两个GPU中使用内存,尽管默认情况下只使用一个GPU。通过检查keras.utils.multi_gpu_model
可使用多个GPU。
我通过使用环境变量CUDA_VISIBLE_DEVICES选择GPU来找到解决方案。
你可以在导入keras或tensorflow之前手动添加此选项来选择您的GPU。
os.environ["CUDA_VISIBLE_DEVICES"]="0" # first gpu
os.environ["CUDA_VISIBLE_DEVICES"]="1" # second gpu
os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # runs in cpu
为了使其自动化,我创建了一个函数来解析nvidia-smi
并自动检测已经在使用的GPU,并将适当的值设置为变量。CUDA_VISIBLE_DEVICES=1 python train.py
如果你想在云GPU上训练模型(例如来自AWS的GPU实例),可以尝试这个库:
!pip install aibro==0.0.45 --extra-index-url https://test.pypi.org/simple
from aibro.train import fit
machine_id = 'g4dn.4xlarge' #instance name on AWS
job_id, trained_model, history = fit(
model=model,
train_X=train_X,
train_Y=train_Y,
validation_data=(validation_X, validation_Y),
machine_id=machine_id
)