Keras/Tensorflow在SageMaker管理的AWS ml.p2.xlarge实例上未检测到GPU
我在Keras/Tensorflow在SageMaker管理的AWS ml.p2.xlarge实例上未检测到GPU,keras,gpu,amazon-sagemaker,Keras,Gpu,Amazon Sagemaker,我在ml.p2.xlarge实例上使用一个定制Docker容器与SageMaker一起使用 基本映像是,它通常随所需的CUDA工具包一起提供。python包是通过conda使用以下最低限度的环境安装的。yaml: dependencies: - boto3 - joblib - keras - numpy - pandas - scikit-learn - scipy - tensorflow=2.0 但是,当我为一个小型的lenet5CNN运行培训作业时,我在
ml.p2.xlarge
实例上使用一个定制Docker容器与SageMaker一起使用
基本映像是,它通常随所需的CUDA工具包一起提供。python包是通过conda使用以下最低限度的环境安装的。yaml
:
dependencies:
- boto3
- joblib
- keras
- numpy
- pandas
- scikit-learn
- scipy
- tensorflow=2.0
但是,当我为一个小型的lenet5
CNN运行培训作业时,我在日志中看不到任何GPU活动(培训的持续时间与在非GPU实例上一样长)
更令人担忧的是,len(tf.config.experiative.list_physical_devices('GPU')
返回0
,以及K.tensorflow_backend.\u get_available_GPU()
为空。最后,如果我检查设备放置(使用tf.debug.set_log_device_placement(True)
)的基本操作,例如:
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)
print(c)
我明白了
Executing op _MklMatMul in device /job:localhost/replica:0/task:0/device:CPU:0
确认操作已在CPU上进行
起初,我认为我的用例太轻,无法触发GPU的使用,但似乎GPU根本没有被检测到!我是否错过了工作所需的任何步骤或组件?我建议从SageMaker提供的环境开始,以确保您有一个经过测试的、最新的和生产就绪的设置。特别是对于Tensorflow和d Keras,即:
- 在SageMaker笔记本电脑上,
jupyter内核conda\u tensorflow\u p*
- 对于SageMaker培训和推理任务,TensorFlow框架 容器(,)
- 我们需要安装所有必要的cuda和其他图形驱动程序,以使其正常工作。
考虑下面的步骤,从SaGeMaCer-TySoFrSoad,如:
RUN apt-get update \
&& apt-get install -y --no-install-recommends --allow-unauthenticated \
python3-dev \
python3-pip \
python3-setuptools \
python3-dev \
ca-certificates \
cuda-command-line-tools-10-0 \
cuda-cublas-dev-10-0 \
cuda-cudart-dev-10-0 \
cuda-cufft-dev-10-0 \
cuda-curand-dev-10-0 \
cuda-cusolver-dev-10-0 \
cuda-cusparse-dev-10-0 \
curl \
libcudnn7=7.5.1.10-1+cuda10.0 \
# TensorFlow doesn't require libnccl anymore but Open MPI still depends on it
libnccl2=2.4.7-1+cuda10.0 \
libgomp1 \
libnccl-dev=2.4.7-1+cuda10.0 \
libfreetype6-dev \
libhdf5-serial-dev \
libpng-dev \
libzmq3-dev \
git \
wget \
vim \
build-essential \
openssh-client \
openssh-server \
zlib1g-dev \
# The 'apt-get install' of nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0
# adds a new list which contains libnvinfer library, so it needs another
# 'apt-get update' to retrieve that list before it can actually install the
# library.
# We don't install libnvinfer-dev since we don't need to build against TensorRT,
# and libnvinfer4 doesn't contain libnvinfer.a static library.
&& apt-get update && apt-get install -y --no-install-recommends --allow-unauthenticated \
nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0 \
&& apt-get update && apt-get install -y --no-install-recommends --allow-unauthenticated \
libnvinfer5=5.0.2-1+cuda10.0 \
&& rm /usr/lib/x86_64-linux-gnu/libnvinfer_plugin* \
&& rm /usr/lib/x86_64-linux-gnu/libnvcaffe_parser* \
&& rm /usr/lib/x86_64-linux-gnu/libnvparsers* \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /var/run/sshd
运行以上所有命令,如果可以找到GPU,请重试。谢谢。在SageMaker笔记本实例中,GPU显然被检测到。但是,就独立培训作业而言,我从链接到的
SageMaker TensorFlow容器
创建了一个容器,指定GPU版本并提供TensorFlow GPU 2.1.0
wheel,所有GPU都是这样,但是没有用!你能尝试使用sagemaker SDK吗?它会自动在引擎盖下使用正确的docker映像我会尝试一下,但最初的目标是在没有编程干预的情况下从仪表板运行培训作业,这需要我自己设计正确的映像:)您指的是哪个仪表板?亚马逊sagemaker控制台?是的,很抱歉不够清晰