如何让Keras在特定GPU上训练模型?

时间:2018-11-29 07:37:21

标签: python tensorflow keras deep-learning

我的机构中有一个带有2个GPU的共享服务器。假设有两个团队成员希望同时训练一个模型,那么他们如何让Keras在一个特定的GPU上训练模型,以避免资源冲突?

理想情况下,Keras应该确定哪个GPU当前正在忙于训练一个模型,然后使用另一个GPU来训练另一个模型。但是,事实并非如此。似乎默认情况下,Keras仅使用第一个GPU(因为第二个GPU的Volatile GPU-Util始终为0%)。

enter image description here

3 个答案:

答案 0 :(得分:1)

Possibly duplicate with my previous question

有点复杂。 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

要使其自动生成,我创建了一个函数,该函数可以解析nvidia-smi并自动检测已经使用了哪个GPU,并为该变量设置适当的值。

答案 1 :(得分:1)

如果您使用的是培训脚本,则只需在调用脚本之前在命令行中对其进行设置

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

答案 2 :(得分:0)

如果您想在云 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
)

教程:https://colab.research.google.com/drive/19sXZ4kbic681zqEsrl_CZfB5cegUwuIB#scrollTo=ERqoHEaamR1Y

相关问题