UCloud
UCloud是基础云计算服务提供商,与全球AI挑战赛合作,给参赛者提供免费使用GPU的时间。本以为和阿里云类似,新建个主机,搭建环境,然后跑代码。没想到平台限制不能创建主机,只能使用AI训练服务。很麻烦的样子,花点时间研究下。
环境准备
- 阿里云centos7.2
- python2.7.5(默认安装版本)
- ucloud实名认证通过
Uhub
1、登录ucloud,左侧导航栏点击公共镜像库,进入uhub产品页面。
2、创建镜像库(Docker Registry),郝同学这里命名为vk_ucloud。
3、docker登录uhubdocker login uhub.ucloud.cn
UAI Train工具包
UAI-Train为用户提供了镜像打包工具,用户只需将所需代码文件放在某一路径下,执行打包命令即可以生成UAI-Train所需的镜像。
该打包工具将在本地docker中生成两个镜像以及运行镜像的指令说明文件uaitrain_cmd.txt。生成的镜像包括cpu和gpu两个版本,其中gpu版本的镜像会自动上传至用户的Uhub镜像仓库。两个版本的镜像均可以用于本地测试,测试命令可在uaitrain_cmd.txt中查询。
UIA Train基础镜像
UCloud 提供了两个UAI Train系统使用的基础镜像(范例基于tensorflow-1.1.0版本,如果想要使用 tensorflow-1.2.0,可以直接将 1.1.0 替换成1.2.0)
1、下载gpu版本docker pull uhub.ucloud.cn/uaishare/gpu_uaitrain_ubuntu-14.04_python-2.7.6_tensorflow-1.1.0:v1.0
2、下载cpu版本docker pull uhub.ucloud.cn/uaishare/cpu_uaitrain_ubuntu-14.04_python-2.7.6_tensorflow-1.1.0:v1.0
UAI SDK
安装最新版本的UAI SDK和docker支持,安装UAI SDK的方法如下:
1 | git clone https://github.com/ucloud/uai-sdk |
安装Docker的方法请参见:Docker使用指南
工具目录
找到UAI-Train TensorFlow操作工具所在目录
1 | $ls ~/uai-sdk/uaitrain_tool/tf |
统一路径
将AI训练任务所需的代码放在统一路径下,打包时将其相对路径作为参数code_path上传
例如,我们要将~/uai-sdk/examples/tensorflow/train/mnist_summary_1.1
下面的训练代码进行打包,该文件路径结构如下:
1 | $ cd ~/uai-sdk/examples/tensorflow/train/mnist_summary_1.1 |
我们需要做如下准备工作:
1、准备好训练的代码,案例中训练代码在mnist_summary_1.1/code
下,名为mnist_summary.py
2、将tf_tool.py 工具放入和训练代码目录同级的目录下,即mnist_summary_1.1/
目录下
1 | cd uai-sdk |
3、Ready To Pack
打包
1、进入mnist_summary_1.1目录
1 | cd ~/uai-sdk/examples/tensorflow/train/mnist_summary_1.1/ |
2、打包命令
1 | sudo python tf_tool.py pack [-h] --public_key PUBLIC_KEY |
每个参数的具体解释,访问TensorFlow训练镜像打包查看。
3、打包样例
使用mnist_summary_1.1中的训练程序为案例。
test_data_path和test_data_path不要求一定在训练代码路径下,如我们可以在/data/test目录下创建了两个子目录:
/data/test/data
用于存放训练数据,此时test_data_path值为/data/test/data
/data/test/output
用于存放训练输出数据,此时test_output_path为/data/test/output
train_params为训练代码中使用到的任意训练参数,本例中为”–max_step=2000”
使用命令时,需要使用sudo,保证docker镜像打包命令有足够权限。
注:我们可以将~/uai-sdk/examples/tensorflow/train/mnist_summary_1.1/data/
下的测试数据放入/data/test/data/
目录下。
1 | sudo python tf_tool.py pack \ |
- UCloud API的公钥和私钥,可以在左上角“产品与服务”,“API密钥 UAPI”中找到。
- uhub_username和uhub_password是UCloud的账号和密码。
- uhub_registry填入vk_ucloud。
- ubub_imagename填入mnist_test。
具体命令为:
1 | mkdir -p /data/test/data |
1 | sudo python tf_tool.py pack --public_key=****** --private_key=****** --code_path=./code/ --mainfile_path=mnist_summary.py --uhub_username=voidking@qq.com --uhub_password=****** --uhub_registry=vk_ucloud --uhub_imagename=mnist_test --internal_uhub=True --ai_arch_v=tensorflow-1.1.0 --test_data_path=/data/test/data --test_output_path=/data/test/output --train_params="--max_step=2000" |
如果执行上诉命令时报错:
1 | Docker login on uhub.service.ucloud.cn |
那么请删除掉--internal_uhub=True
这一句,因为我们没有使用UCloud内网,而是使用的阿里云。切记,是删除,而不是改成--internal_uhub=False
。这是解决错误失败,请教UCloud客服才得到的结论。在此感谢下客服小哥,很耐心帮忙排查问题。
输出说明
成功执行后,界面显示样例如下,会给出部署时所需的CMD命令以及本地测试的cmd命令:
1 | CMD Used for deploying: /data/mnist_summary.py --max_step=2000 |
- CMD Used for deploying: 该输出的内容为创建训练任务时,训练启动命令框中需要填写的内容(参见创建训练任务)。可以直接复制黏贴到命令框中。
- CMD for CPU local test: 该输出的内容为本地通过CPU来测试训练能否正常执行。在本地没有GPU的情况下可以使用该命令测试训练代码能否正常执行。
- CMD for GPU local test:该输出的内容为本地通过GPU来测试训练能否正常执行。在本地有GPU的情况下可以使用该命令测试训练代码能否正常执行。(注:在使用前请确认GPU驱动已经安装,并已经安装了nvidia-docker,详细安装方法请参见Docker使用指南)
本地文件夹下生成了uaitrain_cmd.txt、uaiservice.log、uaitrain-cpu.Dockerfile和uaitrain.Dockerfile,其中uaitrain_cmd.txt内容和标准输出的内容一致,防止用户丢失屏幕输出内容。
docker images
,在本地镜像仓库可以看到生成了两个docker镜像,分别为cpu版本和gpu版本。如下:
1 | uhub.ucloud.cn/vk_ucloud/mnist_test |
其中gpu版本,会自动上传的到ucloud的uhub。
自定义软件包安装
如果训练代码依赖特殊的软件包,例如nltk 等,可以通过Docker 打包的形式将软件包和相关数据打包入训练的Docker镜像,详细方法参见TensorFlow 训练镜像自定义包安装。
UFile
创建存储空间
1、登录ucloud,左侧导航栏点击对象存储,进入ufile产品页面。
2、创建存储空间,郝同学这里存储空间域名为vk-ucloud,空间类型为公有空间。
创建成功会提示:
我们为您同步创建了CDN加速域名,稍后您可在列表查看域名信息并进行文件访问操作。接下来您可通过以下三种方式进行空间内容管理,包括文件上传下载等。API/SDK,详细使用说明;客户端管理工具,详细使用说明。
3、之后的文件上传等操作,可以直接在网页完成,也可以使用ucloud提供的空间管理器和文件管理器。
准备管理器
1、下载空间管理器和文件管理器
1 | mkdir -p /opt/ufile |
2、配置vim config.cfg
1 | { |
其中,public_key和private_key可以在“API密钥”中获得。
不同地域的proxy_host是不一样的,具体如下:
1 | 北京 |
空间管理命令
创建存储空间
创建存储空间建议使用控制台。./bucketmgr --action CreateBucket --bucket bucketname --type public
参数说明:
–bucket: 需要创建的存储空间域名
–type: 需要创建的空间类型,公开空间(public)或私有空间(private)
删除存储空间
删除存储空间建议使用控制台。
./bucketmgr --action DeleteBucket --bucket bucketname
参数说明:
–bucket: 需要删除的存储空间域名
获取空间信息
./bucketmgr --action DescribeBucket
参数说明:
–bucket: 需要查询的存储空间域名
获取文件列表
./bucketmgr --action GetFileList --bucket bucketname
参数说明:
–bucket: 需要拉取列表的存储空间域名
–offset: 查询起始的文件编号(默认为0)
–limit : 需要查询的记录数(默认为100)
文件管理器
文件管理工具可帮助用户进行存储空间内文件的管理操作,包括:
上传单个文件:普通上传(PUT),秒传(UPLOAD-HIT),分片上传(MPUT),表单方式上传。
上传文件夹:普通上传(PUT),分片上传(MPUT),增量上传(SYNC)。
下载文件/文件夹
删除文件/文件夹
上传文件(单个文件)
./filemgr --action put --bucket bucketname --key key --file filename
参数说明:
–bucket: 需要上传至的存储空间
–key : 上传至存储空间中的文件名
–file : 需要上传的本地文件路径
示例:
把一个本地文件 ucloud.jpg 上传至 bucket 名称为 pics 的存储空间中,并命名为 logo.jpg
./filemgr --action put --bucket pics --key logo.jpg --file /home/yours/pictures/ucloud.jpg
上传文件夹
./filemgr --action put --bucket bucketname --dir dirname
参数说明:
–bucket: 需要上传至的存储空间域名
–dir : 需要上传的本地文件夹
–prefix: 生成文件的Key时使用的前缀,指定该参数时生成的Key是 prefix+base(filename)
用文件夹方式上传的文件默认会使用文件夹内文件所在的绝对路径来命名Key,如果想指定特殊的前缀请使用–prefix参数。
示例1:
将 ~/files
这个文件夹下的所有文件上传至名为 demobucket 的存储空间中,并且 key 的名称使用 demo/ 作为前缀,如果该文件夹下有一个名为1.jpg 的文件并且空间属性为public,则上传完成后可以通过 http://demobucket.ufile.ucloud.com.cn/demo/1.jpg 访问该文件
./filemgr --action put --dir ~/files --bucket demobucket --prefix demo/
如果您不希望使用绝对路径来作为Key,可以使用–trimpath截掉部分路径名。
例如:./filemgr --action put --dir ~/files --bucket demobucket --prefix demo/ --trimpath /root/test
示例2:
假设有个目录名为 /some/dir/cutoff/files/,下面有 a.jpg、b.txt两个文件,则以下的处理会使得保存在 UFILE 的文件名为 files/a.jpg、files/b.txt。./filemgr --action put --dir ~/files --bucket demobucket --trimpath /some/dir/cutoff/
分片上传
分片上传允许在某个分片失败情况下进行续传,适合较大文件的场景。
./filemgr --action mput --bucket demobucket --key key --file filename
参数说明:
–bucket : 需要上传至的 bucket 名称
–key : 上传至 bucket 中的文件名称–file : 需要上传的本地文件路径
–part : 需要进行重传的分片索引(注意重传的分片必须是之前上传失败的分片,已经成功的分片不能重传,否则最终 finish 会失败)
–uploadid: 分片上传初始化返回的上传 ID
–etags : 续传时需要把之前已经成功上传的分片的 ETag 以”,”分隔传递给服务端
示例:
以分片上传方式上传一个本地文件 hello.avi 至名为 demobucket 的存储空间中并且命名为 world.avi
./filemgr --action mput --bucket demobucket --key world.avi --file /opt/video/hello.avi
上传失败的话,重新执行命令即可继续上传。
下载文件
./filemgr --action download --bucket demobucket --key key --file filename
参数说明:
–bucket : 需要下载的文件所在的 bucket 名称
–key : 需要下载的文件 key 名称
–file : 需要保存在本地的文件路径
–showurl: 仅获取下载 URL,不下载实际数据
–expires: 获取下载 URL 时指定过期时间
–queryauth: 在 URL 的 query 中携带签名信息
示例:
获取一个名为 demobucket 的存储空间中一个名为 QQ.pkg 的文件在5分钟内的有效下载URL。
./filemgr --action download --showurl --queryauth --expires 300 --bucket demobucket --key QQ.pkg
获取一个名为 demobucket 的存储空间中一个名为 QQ.pkg 的文件并且保存为/opt/data/QQ.pkg./filemgr --action download --bucket demobucket --key QQ.pkg --file /opt/data/QQ.pkg
删除文件
./filemgr --action delete --bucket demobucket --key key
参数说明:
–bucket: 需要删除的文件所在的 bucket 名称
–key : 需要删除的文件在 bucket 中的名称
示例:
删除一个名为 demobucket 的存储空间中名为 20140201.blog 的文件
./filemgr --action delete --bucket demobucket --key 20140201.blog
秒传文件
./filemgr --action upload-hit --bucket demobucket --key key --file filename
参数说明:
–bucket: 需要上传至的 bucket 名称
–key : 上传至 bucket 中的文件名称
–file : 需要上传的本地文件路径
示例:
尝试秒传本地文件 falcon.avi 至存储空间 nfl2014 命名为 2014-superbow.avi
./filemgr --action upload-hit --bucket demobucket --key 2014-superbow.avi --file falcon.avi
计算文件ETag
该选项用于计算使用ufile特殊算法得到的文件哈希值
./filemgr --action etag --file filename
参数说明:
–file: 需要计算哈希的本地文件路径
示例:
计算本地文件 sniff-the-rose.pdf 的 ETag./filemgr --action etag --file /opt/tiger/sniff-the-rose.pdf
增量上传
增量上传仅上传新增或有发生修改的整个文件。
./filemgr --action sync --bucket demobucket --dir syncdir [--speedlimit speedlimit] [--prefix prefix] [--excludeptn]
参数说明:
–bucket : 需要同步至远端的 bucket 名称
–dir : 需要同步的本地文件夹
–speedlimit : 上传限速(byte/s)
–prefix : 生成文件的 key 时使用的前缀
–excludeptn: 需要排除上传的文件模式,支持 POSIX 正则表达式
示例:
把本地文件夹~/go
同步到名为 demobucket 的存储空间中
./filemgr --action sync --bucket demobucket --dir ~/go
继续检查是否还有文件需要更新./filemgr --action sync --bucket demobucket --dir ~/go
上传mnist数据集
1、上传mnist数据集./filemgr --action mput --dir /data/test/data --bucket vk-ucloud --prefix mnist/data --trimpath /data/test/data
2、查看上传的文件
./bucketmgr --action GetFileList --bucket vk-ucloud
例如,看到的文件为:
1 | { |
那么,CDN加速地址为:http://vk-ucloud.ufile.ucloud.com.cn/mnist/data/t10k-images-idx3-ubyte.gz ,源站地址为: http://vk-ucloud.cn-bj.ufileos.com/mnist/data/t10k-images-idx3-ubyte.gz
AI训练服务配置
1、访问UCloud控制台,在左侧导航栏中找到AI训练服务,然后点击“创建AI训练任务”。
2、按照提示,填入需要的信息。
UCloud API的公钥和私钥,可以在左上角“产品与服务”,“API密钥 UAPI”中找到。
代码镜像库选择用户镜像库,镜像选择我们自己创建的mnist_test:uaitrain。
数据输入路径为:http://vk-ucloud.cn-bj.ufileos.com/mnist/data/
数据输出路径为:http://vk-ucloud.cn-bj.ufileos.com/mnist/output/
训练时长为:6
3、点击右侧确定,创建任务完成。
4、选中任务,点击开始,即可开始训练。点击详情,可以查看到训练过程中的日志。点击tenserboard,看到训练过程中的精度变化等。
5、在tensorboard看到精度到达1后,即可停止训练。这时,http://vk-ucloud.cn-bj.ufileos.com/mnist/output/ 文件夹下,会出现训练结果。
可以使用命令行查看,也可以在web面板查看。