我的机构中有一个带有2个GPU的共享服务器。假设有两个团队成员希望同时训练一个模型,那么他们如何让Keras在一个特定的GPU上训练模型,以避免资源冲突?
理想情况下,Keras应该确定哪个GPU当前正在忙于训练一个模型,然后使用另一个GPU来训练另一个模型。但是,事实并非如此。似乎默认情况下,Keras仅使用第一个GPU(因为第二个GPU的Volatile GPU-Util
始终为0%)。
答案 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