CodeSample小助手 2019-12-30
RAPIDS,全称Real-time Acceleration Platform for Integrated Data Science,是NVIDIA针对数据科学和机器学习推出的GPU加速库。更多RAPIDS信息请参见官方网站。
NGC,全称NVIDIA GPU CLOUD,是NVIDIA推出的一套深度学习生态系统,供开发者免费访问深度学习和机器学习软件堆栈,快速搭建相应的开发环境。NGC网站提供了RAPIDS的Docker镜像,预装了相关的开发环境。
JupyterLab是一套交互式的开发环境,帮助您高效地浏览、编辑和执行服务器上的代码文件。
Dask是一款轻量级大数据框架,可以提升并行计算效率。
gn5优惠活动详情请参见异构计算GPU实例活动页。
如果您创建GPU实例时使用了RAPIDS预装镜像,只需运行RAPIDS Demo,从启动JupyterLab服务开始操作即可。
本文示例代码基于RAPIDS 0.8版本镜像编写,因此在运行本示例代码时,使用Tag为0.8版本的镜像。实际操作时,请选择您匹配的版本。
0.8-cuda10.0-runtime-ubuntu16.04-gcc5-py3.6
。cuda9.2-runtime-ubuntu16.04
替换为0.8-cuda10.0-runtime-ubuntu16.04-gcc5-py3.6
。 保存的docker pull命令用于在步骤二中下载RAPIDS镜像。
详细步骤请参见使用向导创建实例。
NVIDIA GPU Cloud VM Image
。 连接方式请参见连接Linux实例。
建议您了解GPU信息,预判规避潜在问题。例如,如果NGC的驱动版本太低,新Docker镜像版本可能会不支持。
docker pull nvcr.io/nvidia/rapidsai/rapidsai:0.8-cuda10.0-runtime-ubuntu16.04-gcc5-py3.6
建议您查看Docker镜像信息,确保下载了正确的镜像。
docker images
docker run --runtime=nvidia \
--rm -it \
-p 8888:8888 \
-p 8787:8787 \
-p 8786:8786 \
nvcr.io/nvidia/rapidsai/rapidsai:0.8-cuda10.0-runtime-ubuntu16.04-gcc5-py3.6
# Get apt source address and download demos.
source_address=$(curl http://100.100.100.200/latest/meta-data/source-address|head -n 1)
source_address="${source_address}/opsx/ecs/linux/binary/machine_learning/"
cd /rapids
wget $source_address/rapids_notebooks_v0.8.tar.gz
tar -xzvf rapids_notebooks_v0.8.tar.gz
cd /rapids/rapids_notebooks_v0.8/xgboost
wget $source_address/data/mortgage/mortgage_2000_1gb.tgz
推荐直接使用命令启动。
# Run the following command to start JupyterLab and set the password.
cd /rapids/rapids_notebooks_v0.8/xgboost
jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token='YOUR PASSWORD'
# Exit JupyterLab.
sh ../utils/stop-jupyter.sh
sh ../utils/start-jupyter.sh
启动jupyter-lab,此时无法设置登录密码。 Ctrl+C
退出JupyterLab服务。 http://您的GPU实例IP地址:8888
远程访问JupyterLab 。
该案例是一个抵押贷款回归的任务,详细信息请参见代码执行过程。登录成功后,可以看到NoteBook代码的代码包括以下内容:
该案例基于XGBoost演示了数据预处理到训练的端到端的过程,主要分为三个阶段:
NoteBook代码的执行过程如下:
本案例的Shell脚本会默认下载2000年的抵押贷款回归训练数据(mortgage_2000_1gb.tgz)。
如果您想获取更多数据用于XGBoost模型训练,可以设定参数download_url指定下载路径,具体下载地址请参见Mortgage Data。
参数名称 | 说明 |
---|---|
start_year | 指定选择训练数据的起始时间,ETL时会处理start_year到end_year之间的数据。 |
end_year | 指定选择训练数据的结束时间,ETL时会处理start_year到end_year之间的数据。 |
train_with_gpu | 是否使用GPU进行XGBoost模型训练,默认为True。 |
gpu_count | 指定启动worker的数量,默认为1。您可以按需要设定参数值,但不能超出GPU实例的GPU数量。 |
part_count | 指定用于模型训练的performance文件的数量,默认为 2 * gpu_count。如果参数值过大,在Data Conversion阶段会报错超出GPU内存限制,错误信息会在NoteBook后台输出。 |
代码会启动Dask Scheduler,并根据gpu_count参数启动worker用于ETL和模型训练。启动Dask服务后,您也可以通过Dask Dashboard直观地监控任务,打开方法请参见Dask Dashboard。
ETL阶段会进行到表关联、分组、聚合、切片等操作,数据格式采用cuDF库的DataFrame格式(类似于pandas的DataFrame格式)。
将DataFrame格式的数据转换为用于XGBoost训练的DMatrix格式,每个worker处理一个DMatrix对象。
使用dask-xgboost启动模型训练,dask-xgboost负责多个dask worker间的通信协同工作,底层仍然调用xgboost执行模型训练。
Dask Dashboard支持任务进度跟踪、任务性能问题识别和故障调试。
http://您的GPU实例IP地址:8787/status
即可进入Dashboard主界面。
函数功能 | 函数名称 |
---|---|
下载文件 | def download_file_from_url(url, filename): |
解压文件 | def decompress_file(filename, path): |
获取当前机器的GPU个数 | def get_gpu_nums(): |
管理GPU内存 |
|
提交DASK任务 |
|
使用cuDF从CSV中加载数据 |
|
处理和提取训练数据的特征 |
|
GPU实例和RAPIDS组合适用于加速更多类型的任务,请参见在GPU实例上使用RAPIDS加速图像搜索任务。