滴滴云笔记本实例(DAI)数据上传/下载最佳实践

滴滴云技术支持发表于:2020年09月15日 09:45:46

背景

很多新同学在尝试AI深度学习训练的过程中,遇到的第一个问题很可能就是要配置CUDA环境,安装tensorflow/pytorch/mxnet等框架。大家内心可能都有这样一个想法:我就是想跑个实验,为啥要先搞清楚GPU驱动,CUDA,CUDNN,conda,tensorflow,pytorch等这些知识呢?为啥不能给我一个开箱即用的环境呢?

为了帮忙用户解决AI训练过程中遇到的环境问题,滴滴云推出了一款基于jupyter lab的笔记本(Notebook)服务,内置了最新的GPU驱动,CUDA/CUDNN版本,常见的深度学习训练框架(tensorflow, pytorch, mxnet, keras),用户可以选择相应notebook kernel进行自己的训练;

即使所有的开发环境都准备好了,用户在真正训练的时候还是会遇到一些问题,最常见的就是训练数据怎么搬移到笔记本实例上去;如果数据已经在某个云盘上,那可以直接在笔记本实例中,通过terminal使用wget进行下载;如果数据在本地电脑,并且数据量小于10M,那么可以直接通过笔记本实例中的上传/下载按钮进行上传/下载。本文针对数据在本地,并且数据量较大的情况,提供一种基于滴滴云对象存储(S3)的最佳实践!

为什么要使用对象存储上传/下载数据

通常情况下,我们可能不需要一直占用着GPU资源进行训练,虽然Notebook也提供了关机不计费功能,但是这里只是GPU,CPU和内存资源不计费,还是会有云盘的费用,虽然很少,如120G的系统盘,每天费用差不多要2+元(120GB x 0.0008元/GB/小时);

0015f601c3a76489ce278c9a08e199d

相比之下,使用对象存储费用计算如下:

如果我们有10G的数据要保存,每个月存储费用为: 10G * 0.12元/GB/月 * 1月 = 1.2;流量费用因为我们使用内网地址,不会产生公网流量!

0015f601c6411a372c0691ebb5ec656

因此我们可以通过对象存储来存储数据集,甚至代码,然后释放Notebook实例;下次需要使用的时候,再把对象存储里的数据集,代码复制到Notebook实例中,使用内网域名,数据拷贝速度可以达到100MB/s


获取对象存储的AK/SK

1. 开通对象存储服务

目前滴滴云对象存储服务需要联系滴滴云客户进行开通,可以用过点击对象存储官网页面右下角的客服按钮,联系滴滴云客服进行开通;

0015f601c892162f823f55e82eaddc3

2. 创建/获取AK/SK

开通对象存储后,可以进入对象存储控制台,点击密钥管理,进入密钥管理页面;

在密钥管理页面,先点击对象存储密钥,然后再点击创建API密钥按钮,生成API密钥;

0015f601ca8d0f503ee2c5ef5c27961


查看生成的AK/SK,并记录,后面会用到!

0015f601cbc05e4e666b71eceddd907

3. 本地数据上传到滴滴云对象存储

3.1 本地是mac系统

3.1.1 安装mc客户端

brew install minio/stable/mc

3.1.2 配置客户端

// your_access_key和your_secret_key就是步骤2中创建并获取的AK和SK
mc config host add didiyun https://s3.didiyunapi.com your_access_key your_secret_key

3.1.3 操作对象存储

mc ls didiyun //查看自己账户下所有的bucket(存储桶)
mc mb didiyun/ml-test //创建一个名为ml-test的bucket(存储桶)
mc mb didiyun/ml-test/test/  //在ml-test 这个bucket下创建一个名为test的文件夹,主要test后面必须加'/'
mc cp a.txt didiyun/ml-test  //把本地单个文件a.txt复制到ml-test这个bucket下
mc cp --recursive app didiyun/ml-test //把本地文件夹上传到ml-test这个bucket下
mc cp didiyun/ml-test/2.png .  //把ml-test这个bucket下的2.png单个文件下载到本地
mc cp --recursive didiyun/ml-test/app . //把ml-test这个bucket下的app目录下载到本地
mc rm --force --recursive didiyun/test1/test1.jpg //删除ml-test这个bucket目录下的test1.jpg单文件
mc rm --force --recursive didiyun/ml-test/app  //删除ml-test这个bucket目录下的app目录

mc客户端有时候不太稳定,操作时会遇到一些问题,具体命令可以参考官方教程

3.2 本地是windows系统

3.2.1 安装mc客户端

在浏览器输入mc完全指南手册地址: https://docs.min.io/cn/minio-client-complete-guide ;找到 下载二进制文件(Microsoft Windows) ,下载mc.exe;默认下载位置为Downloads

3.2.2 配置客户端

新建一个terminal,进入到Downloads目录下,配置mc客户端

cd Downloads //mc.exe默认下载路径为Downloads,如果下载在其他地方,则进入对应的目录
.\mc.exe --help //查看mc.exe 命令是否可以正常运行
// your_access_key和your_secret_key就是步骤2中创建并获取的AK和SK
.\mc.exe config host add didiyun https://s3.didiyunapi.com your_access_key your_secret_key

3.2.3 操作对象存储

.\mc.exe ls didiyun //查看自己账户下所有的bucket(存储桶)
.\mc.exe mb didiyun/ml-test //创建一个名为ml-test的bucket(存储桶)
.\mc.exe mb didiyun/ml-test/test/  //在ml-test 这个bucket下创建一个名为test的文件夹,主要test后面必须加'/'
.\mc.exe cp a.txt didiyun/ml-test  //把本地单个文件a.txt复制到ml-test这个bucket下
.\mc.exe cp --recursive app didiyun/ml-test //把本地文件夹上传到ml-test这个bucket下
.\mc.exe cp didiyun/ml-test/2.png .  //把ml-test这个bucket下的2.png单个文件下载到本地
.\mc.exe cp --recursive didiyun/ml-test/app . //把ml-test这个bucket下的app目录下载到本地
.\mc.exe rm --force --recursive didiyun/test1/test1.jpg //删除ml-test这个bucket目录下的test1.jpg单文件
.\mc.exe rm --force --recursive didiyun/ml-test/app  //删除ml-test这个bucket目录下的app目录

3.3 本地是linux系统

如果本地是linux系统,可以参考下一节内容进行下载,配置mc客户端,上传/下载数据

4. 对象存储中数据上传/下载到笔记本实例

4.1 安装mc客户端

//进入notebook的terminal,下载mc客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
//官网下载速度有点慢,建议使用滴滴云对象存储里保存的
// wget https://zyk.s3-internal.didiyunapi.com/public_software/mc
//如果不是在滴滴云notebook中访问,可以使用公网地址进行下载
// wget https://zyk.s3.didiyunapi.com/public_software/mc
//增加执行权限
chmod +x mc
//mc移动到PATH指向的目录,这样就可以直接访问
mv mc /usr/bin/

4.2 配置mc客户端

// your_access_key和your_secret_key就是步骤2中创建并获取的AK和SK
// 注意这里使用对象存储内网地址: https://s3-internal.didiyunapi.com;如果您不是在notebook中使用
// 需要使用对象存储的公网地址: https://s3.didiyunapi.com
mc config host add didiyun https://s3-internal.didiyunapi.com your_access_key your_secret_key

4.3 数据上传/下载

mc ls didiyun //查看自己账户下所有的bucket(存储桶)
mc mb didiyun/ml-test //创建一个名为ml-test的bucket(存储桶)
mc mb didiyun/ml-test/test/  //在ml-test 这个bucket下创建一个名为test的文件夹,主要test后面必须加'/'
mc cp a.txt didiyun/ml-test  //把本地单个文件a.txt复制到ml-test这个bucket下
mc cp --recursive app didiyun/ml-test //把本地文件夹上传到ml-test这个bucket下
mc cp didiyun/ml-test/2.png .  //把ml-test这个bucket下的2.png单个文件下载到本地
mc cp --recursive didiyun/ml-test/app . //把ml-test这个bucket下的app目录下载到本地
mc rm --force --recursive didiyun/test1/test1.jpg //删除ml-test这个bucket目录下的test1.jpg单文件
mc rm --force --recursive didiyun/ml-test/app  //删除ml-test这个bucket目录下的app目录

5. 优惠购买滴滴云Notebook等GPU产品

目前滴滴云在搞AI大师码活动,用我的AI大师码6666在滴滴云上购买GPU/vGPU/机器学习产品可享受9折优惠,点击http://www.didiyun.com前往滴滴云官网