我正在尝试使用一个Tesla K80在GCloud ML Engine中训练模型。该程序可以运行,但比没有GPU的笔记本电脑还要慢。
有一条消息,表明GPU没有运行任何进程。我没有更改代码的任何部分以在GPU中运行,因为我认为Tensorflow会为您确定哪些进程在CPU中运行,哪些进程在GPU中运行。
第一次在云中运行代码后,我尝试将图操作和优化器包装在with tf.device('/device:GPU:0')
内,但一切都没有改变。
我收到此消息:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 00000000:00:04.0 Off | 0 |
| N/A 61C P8 29W / 149W | 1MiB / 11439MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
我不知道如何解决这个问题,欢迎任何想法。
谢谢!
答案 0 :(得分:3)
要使用GPU进行训练,您必须指定要使用的节点类型。这是在Yaml文件中完成的,您在开始工作时必须参考该文件。
config.yaml
的示例:
trainingInput:
pythonVersion: "3.5"
scaleTier: CUSTOM
# standard_gpu provides 1 GPU. Change to complex_model_m_gpu for 4 GPUs
masterType: standard_gpu
然后,当您提交作业时,请像这样引用它:
gcloud ml-engine jobs submit training $JOB_NAME \
--package-path $APP_PACKAGE_PATH \
--module-name $MAIN_APP_MODULE \
--job-dir $JOB_DIR \
--region us-central1 \
--config config.yaml \
-- \
此应该确保使用python 3.5在“ standard_gpu”节点上运行。有关更多信息,请参见here。
就像@ultraviolet在上面的评论中提到的那样,要使用GPU,您需要使用tensorflow-gpu
,不是 tensorflow
。这意味着,在您的setup.py
文件中,您必须不要指定tensorflow
作为要求。相反,要么根本不指定张量流(它总是由平台提供),要么指定tensorflow-gpu
。
有效的setup.py
如下所示:
from setuptools import setup, find_packages
setup(name='SOME_NAME',
version='0.1',
packages=find_packages(),
description='YOUR DESCRIPTION',
install_requires=[
'tensorflow-gpu'
],
include_package_data=True,
zip_safe=False)
如果要确保不在CPU上运行整个任务,并且花了很多钱在家里的笔记本电脑上可以做的事情,则还可以添加健全性检查。例如:
import tensorflow as tf
if tf.test.gpu_device_name():
print('Default GPU: {}'.format(tf.test.gpu_device_name()))
else:
print('Failed to find default GPU.')
sys.exit(1)