本文以使用RAPIDS加速图像搜索任务为例,介绍如何在预装镜像的GPU实例上使用RAPIDS加速库。
前提条件
使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册。
背景信息
- RAPIDS(全称Real-time Acceleration Platform for Integrated Data Science)是NVIDIA针对数据科学和机器学习推出的GPU加速库。更多信息,请参见RAPIDS网站。
- 图像搜索任务基于图像识别和搜索功能,可以实现以图搜图,在不同行业应用和业务场景中帮助您搜索相同或相似的图片。图像搜索任务背后的两项主要技术是特征提取及向量化、向量索引和检索。图像搜索任务背后的两项主要技术是特征提取及向量化、向量索引和检索。本文案例中,使用开源框架TensorFlow和Keras配置生产环境,然后使用ResNet50卷积神经网络完成图像的特征提取及向量化,最后使用RAPIDS cuML库的KNN算法实现BF方式的向量索引和检索。说明 BF(Brute Force)检索方法是一种百分百准确的方法,对距离衡量算法不敏感,适用于所有的距离算法。
本文案例为单机单卡的版本,即一台GPU实例搭载一块GPU卡,并且在阿里云gn6v(NVIDIA Tesla V100)实例上执行。执行案例后,对比了GPU加速的RAPIDS cuml KNN与CPU实现的scikit-learn KNN的性能,可以看到GPU加速的KNN向量检索速度为CPU的近600倍。
操作步骤
步骤一:创建GPU实例
具体步骤请参见使用向导创建实例。
- 实例:RAPIDS仅适用于特定的GPU型号(采用NVIDIA Pascal及以上架构),因此您需要选择GPU型号符合要求的实例规格,目前有gn6i、gn6v、gn5和gn5i。本文案例中,选用了ecs.gn6v-c8g1.2xlarge实例规格。
- 镜像:在镜像市场中使用关键字RAPIDS,搜索并使用预装了RAPIDS加速库的镜像。
- 安全组:选择的安全组需要开放TCP 8888端口,用于支持访问JupyterLab服务。
步骤二:启动和登录JupyterLab
- 连接GPU实例。具体步骤,请参见 连接方式概述 。
- 运行以下命令,启动JupyterLab服务。说明 在GPU实例上使用以下命令启动JupyterLab服务时,需要使用root权限进行操作。
# Go to the notebooks directory. cd /rapids # Run the following command to start JupyterLab and set the logon password: jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token='your logon password' # Exit jupyterlab: press Ctrl+C twice.
- 在本地机器上打开浏览器(推荐使用Chrome浏览器)。输入
http://(IP address of your GPU instance):8888
远程访问JupyterLab。 - 输入启动命令中设置的密码,然后单击Log in。
步骤三:执行图像搜索案例
- 进入案例所在目录rapids_notebooks_v0.7/cuml。
- 双击cuml_knn.ipynb文件。
- 单击
。
说明 单击一次执行一个cell,请单击至案例执行结束,详细说明请参见案例执行过程。
案例执行过程
图像搜索案例的执行过程分为三个步骤:处理数据集、提取图片特征和搜索相似图片。本文案例结果中对比了GPU加速的RAPIDS cuml KNN与CPU实现的scikit-learn KNN的性能。
- 处理数据集。
- 提取图片特征。使用开源框架Tensorflow和Keras提取图片特征,其中模型为基于ImageNet数据集的ResNet50(notop)预训练模型。
- 搜索相似图片。
图片搜索结果
本案例从1万张搜索图片中随机选择5张图片并搜索相似图片,最终展示出5行4列图片。
第一列为搜索图片,第二列至第四列为图片索引库中的相似图片,且相似性依次递减。每张相似图片的标题为计算的距离,数值越大相似性越低。
