全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
阿里云机器学习

深度学习

更新时间:2018-05-28 15:46:16

目录

深度学习框架说明

阿里云机器学习平台上支持深度学习框架,同时后端提供了功能强大的GPU(型号M40、P100)计算集群。用户可以使用这些框架及硬件资源来运行深度学习算法。

目前支持的框架包括 TensorFlow(支持1.0、1.1、1.2版本),MXNet 0.9.5, Caffe rc3。TensorFlow 和 MXNet 支持用户自己编写的 Python 代码, Caffe 支持用户自定义网络文件。

在使用深度学习框架训练数据之前,需要将训练的数据上传至阿里云对象存储OSS中,算法在运行时从指定的OSS目录中读取数据。需要注意的是阿里云机器学习目前只在华东2部署了GPU 集群,算法在执行时访问华东2 OSS 中数据时不产生流量费用,访问其它地域的OSS会产生流量费用。

深度学习开通

目前机器学习平台深度学习相关功能处于公测阶段,深度学习组件包含 TensorFlow、Caffe、MXNet 三个框架。开通方式如下图所示,进入机器学习控制台,在相应项目下勾选GPU资源即可使用。

开通GPU资源的项目会被分配到公共的资源池,可以动态地调用底层的GPU计算资源。

OSS上传数据说明

使用深度学习处理数据时,数据先存储到 OSS 的 Bucket 中。第一步要创建OSS Bucket。 由于深度学习的GPU集群在华东2,建议您创建 OSS Bucket 时选择华东2地区。这样在数据传输时就可以使用阿里云经典网络,算法运行时不需要收取流量费用。Bucket 创建好之后,可以在OSS管理控制台 创建文件夹、组织数据目录、上传数据。

OSS 支持多种方式上传数据, API 或 SDK 详细见:https://help.aliyun.com/document_detail/31848.html?spm=5176.doc31848.6.580.a6es2a

OSS 还提供了大量的常用工具用来帮助用户更加高效的使用 OSS。工具列表请参见: https://help.aliyun.com/document_detail/44075.html?spm=5176.doc32184.6.1012.XlMMUx

建议您使用 ossutil 或 osscmd 这两个命令行工具,通过命令的方式来上传、下载文件,还支持断点续传。

注意:在使用工具时需要配置 AccessID 和 AccessKey,登录后,可以在Access Key 管理控制台创建或查看。

读OSSBucket

用户在机器学习平台中使用“读OSS Bucket”组件时,需要授予一个名称为“AliyunODPSPAIDefaultRole” 的系统默认角色给数加的服务账号,当且仅当该角色被正确授权后,机器学习平台的算法才能正确地读、写OSS bucket。

注意:由于机器学习平台运行在MaxCompute框架之上,与MaxCompute共用服务账号。在授权时,默认的角色授予给MaxCompute服务账号。

RAM 授权可以使机器学习平台获得OSS的访问权限。在设置菜单完成对OSS读写权限的授权,详情见RAM授权。

RAM 授权

  1. 进入机器学习控制台,单击左侧菜单栏的设置,选择基本设置
  2. OSS访问授权中勾选授权机器学习读取我的OSS中的数据
  3. 进入如下界面,单击点击前往RAM进行授权,进入RAM入口,如下图所示。

  4. 进入如下界面,单击同意授权

    注意:如果您想查看“AliyunODPSPAIDefaultRole”的相关详细策略信息,可以登录RAM控制台来查看。 默认角色“AliyunODPSPAIDefaultRole”包含的权限信息如下。

    权限名称(Action)权限说明
    oss:PutObject上传文件或文件夹对象
    oss:GetObject获取文件或文件夹对象
    oss:ListObjects查询文件列表信息
    oss:DeleteObjects删除对象
  5. 返回机器学习界面,单击刷新。RAM信息会自动录入组件中,如下图所示。

  6. 使用深度学习框架。将读OSSBucket组件与相应的深度学习组件连接,用来获得OSS的读写权限。

TensorFlow

TensorFlow(以下简称TF)是Google开源的一套机器学习框架,算法开发者通过简单的学习就能快速上手。阿里云机器学习平台将TF框架集成到产品中。用户可以自由的利用TF进行代码编写,TF的计算引擎为GPU集群,用户可以灵活的对计算资源进行调整。

参数说明

  • 参数设置

    • Python代码文件:程序执行文件,多个文件可通过tar.gz打包上传。
    • Python主文件:指定代码文件压缩包中的主文件,可选。
    • 数据源目录:选择OSS上的数据源。
    • 配置文件超参及用户自定义参数:PAI Tensorflow支持用户通过命令传入相应的超参配置,这样用户在做模型试验的时候可以尝试不同的learning rate, batch size等。
    • 输出目录:输出的模型路径。
  • 执行调优

    用户可以根据自身任务的复杂程度指定GPU卡数。

PAI 命令

实际使用中,并不需要指定所有参数(不要直接复制下面的命令),各个参数的含义可以参考后面的表格。

  1. PAI -name tensorflow_ext
  2. -Dbuckets="oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_tensorflow/mnist/"
  3. -DgpuRequired="100" -Darn="acs:ram::166408185518****:role/aliyunodpspaidefaultrole"
  4. -Dscript="oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_tensorflow/mnist_ext.py";

各个参数的具体含义如下表:

参数名称 参数描述 参数值格式 默认值
script 必选,TF算法文件,可以是单个文件或者tar.gz压缩包 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_tensorflow/mnist_ext.py 不涉及
entryFile 可选,算法入口文件名,当script为tar.gz压缩包时,该参数必填 train.py
buckets 必选,输入OSS bucket,可指定多个,以逗号分割, 每个bucket须以”/“结尾 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_tensorflow/mnist/
arn 必选, OSS role_arn 不涉及
gpuRequired 必选,标识使用GPU资源量 200 100
checkpointDir 可选,TF checkpoint目录 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_tensorflow/mnist/
hyperParameters 可选,命令行超参数路径 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_tensorflow/mnist/hyper_parameters.txt
  • 参数scriptentryFile用于指定要执行的TF算法脚本,如果算法比较复杂,分成了多个文件,可以将多个算法文件打包成tar.gz格式,并利用entryFile参数指定该算法的入口文件。

  • 参数checkpointDir用于指定算法将要写入的OSS路径,在Tensorflow保存模型时需要指定

  • 参数buckets用于指定算法将要读取的OSS路径,使用OSS需要指定arn参数。

案例

Mnist手写字识别是TF官方的案例,通过训练手写体1~9的数字生成模型,通过模型进行预测。

  1. 在OSS端上传python执行文件以及训练数据集。本案例在OSS华东2 region创建bucket,bucket名为tfmnist,上传python脚本以及训练数据。

  2. 拖拽读OSS Bucket和TensorFlow组件,拼接成如下实验。需要设置好OSS Bucket的地区,并且完成RAM授权,如下图所示。

  3. 配置TensorFlow组件参数。参照下图配置python执行文件以及数据源文件路径,如下图所示。

  4. 单击运行,直到两个组件运行完成,如下图所示。

  5. 右键单击TensorFlow组件,查看运行日志。

TensorFlow读取数据方法说明

低效的IO方式

本地执行TensorFlow代码和分布式云端执行TensorFlow的区别:

  • 本地读取数据:Server端直接从Client端获得graph进行计算。
  • 云端服务:Server在获得graph之后还需要将计算下发到各个Worker处理(具体原理可以参考视频教程-Tensorflow高级篇)。

本文档通过读取一个简单的CSV文件为例,帮您快速了解如何使用TensorFlow高效地读取数据。CSV文件如下:

  1. 1,1,1,1,1
  2. 2,2,2,2,2
  3. 3,3,3,3,3

容易产生问题的几个地方:

  • 不建议使用python本地读取文件的方式

    机器学习平台支持python的自带IO方式,但是需要将数据源和代码打包上传。这种读取方式是将数据写入内存之后再计算,效率比较低,不建议使用。示例代码如下。

    1. import csv
    2. csv_reader=csv.reader(open('csvtest.csv'))
    3. for row in csv_reader:
    4. print(row)
  • 不建议使用第三方库读取文件的方式

    通过第三方库(比如TFLearn、Panda)的一些数据IO的方式读取数据,是通过封装python的读取方式实现的,所以在机器学习平台使用时也会造成效率低下的问题。

  • 不建议使用 preload 读取文件的方式

    很多用户在使用机器学习服务的时候,发现 GPU 并没有比本地的 CPU 速度快的明显,主要问题可能就出在数据IO这块。
    preload 方式是先把数据全部都读到内存中,然后再通过 session 计算,比如feed的读取方式。这样要先进行数据读取,再计算,不同步造成性能浪费。同时因为内存限制也无法支持大数据量的计算。
    例如:假设硬盘中有一个图片数据集 0001.jpg,0002.jpg,0003.jpg,…… ,我们只需要把它们读取到内存中,然后提供给 GPU 或 CPU 计算就可以了。但并没有那么简单。事实上,我们必须把数据先读入后才能进行计算,假设读入用时0.1s,计算用时0.9s,那么就意味着每过1s,GPU都会有0.1s无事可做,这就大大降低了运算的效率。

高效的IO方式

高效的 TensorFlow 读取方式是将数据读取转换成 OP,通过 session run 的方式拉去数据。读取线程源源不断地将文件系统中的图片读入到一个内存的队列中,而负责计算的是另一个线程,计算需要数据时,直接从内存队列中取就可以了。这样就可以解决GPU因为IO而空闲的问题。

如下代码解释了如何在机器学习平台通过OP的方式读取数据。

  1. import argparse
  2. import tensorflow as tf
  3. import os
  4. FLAGS=None
  5. def main(_):
  6. dirname = os.path.join(FLAGS.buckets, "csvtest.csv")
  7. reader=tf.TextLineReader()
  8. filename_queue=tf.train.string_input_producer([dirname])
  9. key,value=reader.read(filename_queue)
  10. record_defaults=[[''],[''],[''],[''],['']]
  11. d1, d2, d3, d4, d5= tf.decode_csv(value, record_defaults, ',')
  12. init=tf.initialize_all_variables()
  13. with tf.Session() as sess:
  14. sess.run(init)
  15. coord = tf.train.Coordinator()
  16. threads = tf.train.start_queue_runners(sess=sess,coord=coord)
  17. for i in range(4):
  18. print(sess.run(d2))
  19. coord.request_stop()
  20. coord.join(threads)
  21. if __name__ == '__main__':
  22. parser = argparse.ArgumentParser()
  23. parser.add_argument('--buckets', type=str, default='',
  24. help='input data path')
  25. parser.add_argument('--checkpointDir', type=str, default='',
  26. help='output model path')
  27. FLAGS, _ = parser.parse_known_args()
  28. tf.app.run(main=main)
  • dirname:OSS文件路径,可以是数组,方便下一阶段 shuffle。
  • reader:TF内置各种reader API,可以根据需求选用。
  • tf.train.string_input_producer:将文件生成队列。
  • tf.decode_csv:是一个splite功能的OP,可以得到每一行的特定参数。
  • 通过OP获取数据,在session中需要tf.train.Coordinator()和tf.train.start_queue_runners(sess=sess,coord=coord)。

在代码中,输入得是3行5个字段:

  1. 1,1,1,1,1
  2. 2,2,2,2,2
  3. 3,3,3,3,3

循环输出4次,打印出第2个字段。结果如下图所示。

输出结果也证明了数据结构是成队列。

其它

  • 机器学习平台 Notebook 功能上线,支持在线修改代码并且内置各种深度学习框架,欢迎使用
  • 强烈推荐教程:https://yq.aliyun.com/articles/177245
  • 本文参考了互联网上《十图详解TensorFlow数据读取机制(附代码)》一文,关于图片的读取方式也可以参考这篇文章,感谢原作者。

TensorFlow多机多卡使用说明

机器学习平台目前已经上线了支持多机、多卡、多PS Server的TensorFlow服务,目前只支持华北2 Region。华北2 Region因为支持多机多卡功能,适用于大规模数据的训练,相关服务需要收费,有需要的机构可以联系我们。

原理说明

  • Parameter Server 节点:用来存储 TensorFlow 计算过程中的参数。配置多个 PS节点,计算参数将会被自动切片并存储在不同的PS节点中,从而减小 Worker 和 PS 节点通信过程中的带宽限制的影响。
  • Worker 节点:“多机多卡”中的“机”,GPU卡的载体。
  • Task 节点:“多机多卡”中的“卡”,在机器学习中指的是 GPU卡,在 TensorFlow 训练过程中,通过数据切片将数据分布在不同的 Task 节点进行模型参数的训练。

使用说明

多机、多卡、多PS功能会以服务化的方式提供,用户无需关心底层计算资源的调度和运维,只需通过机器学习平台前端的简单配置,即可快速搭建整个分布式计算网络。具体的使用方式如下。

  1. 前端配置

    1. mnist_cluster.tar.gz文件下载并上传到 OSS。

    2. 配置深度学习的OSS读取权限。

    3. 拖拽任意版本TensorFlow组件并按照下图连接,并设置对应的代码数据源(Python代码文件设置 mnist_cluster.tar.gz 路径,Python 主文件填入 mnist_cluster.py)。

    4. 单击执行调优进行参数配置。

    5. 通过以上配置可以快速建立起如下图所示的多机多卡多PS计算网络结构,其中PS表示Parameter Server服务,WORKER 表示计算节点机器,TASK 表示具体执行计算的GPU卡。

  2. 代码端设置

    传统的TensorFlow多机多卡作业需要在代码端输入每个计算节点的对应端口信息,如下图所示。

    当计算节点数量增多时,这种端口信息的配置会非常复杂。机器学习平台优化了计算节点配置信息的功能,只需要以下两行代码即可自动在代码端获取计算节点信息。

    1. ps_hosts = FLAGS.ps_hosts.split(",")#框架层提供ps_hosts的端口
    2. worker_hosts = FLAGS.worker_hosts.split(",")#框架层提供worker_hosts的端口
  3. 运行日志查看

    1. 右键单击 TensorFlow 组件,查看日志。可以看到资源的分配情况,分配两个PS,两个WORKER

    2. 点击蓝色链接,可以在logview中查看对应每个worker的运行状态。

代码下载

https://help.aliyun.com/document_detail/64146.html

TensorFlow超参支持

Tensorflow 超参配置:在画布右侧的组件参数设置页面,配置文件超参及用户自定义参数中设置超参文件,文件为.txt格式,如下所示。

  1. batch_size=10
  2. learning_rate=0.01

在代码中可以通过如下方法引用超参。

  1. import tensorflow as tf
  2. tf.app.flags.DEFINE_string("learning_rate", "", "learning_rate")
  3. tf.app.flags.DEFINE_string("batch_size", "", "batch size")
  4. FAGS = tf.app.flags.FLAGS
  5. print("learning rate:" + FAGS.learning_rate)
  6. print("batch size:" + FAGS.batch_size)

TensorFlow支持的第三方库

TensorFlow1.0.0版本第三方库

  1. appdirs (1.4.3)
  2. backports-abc (0.5)
  3. backports.shutil-get-terminal-size (1.0.0)
  4. backports.ssl-match-hostname (3.5.0.1)
  5. bleach (2.0.0)
  6. boto (2.48.0)
  7. bz2file (0.98)
  8. certifi (2017.7.27.1)
  9. chardet (3.0.4)
  10. configparser (3.5.0)
  11. cycler (0.10.0)
  12. decorator (4.1.2)
  13. docutils (0.14)
  14. easygui (0.98.1)
  15. entrypoints (0.2.3)
  16. enum34 (1.1.6)
  17. funcsigs (1.0.2)
  18. functools32 (3.2.3.post2)
  19. gensim (2.3.0)
  20. h5py (2.7.0)
  21. html5lib (0.999999999)
  22. idna (2.6)
  23. iniparse (0.4)
  24. ipykernel (4.6.1)
  25. ipython (5.4.1)
  26. ipython-genutils (0.2.0)
  27. ipywidgets (7.0.0)
  28. Jinja2 (2.9.6)
  29. jsonschema (2.6.0)
  30. jupyter (1.0.0)
  31. jupyter-client (5.1.0)
  32. jupyter-console (5.1.0)
  33. jupyter-core (4.3.0)
  34. Keras (2.0.6)
  35. kitchen (1.1.1)
  36. langtable (0.0.31)
  37. MarkupSafe (1.0)
  38. matplotlib (2.0.2)
  39. mistune (0.7.4)
  40. mock (2.0.0)
  41. nbconvert (5.2.1)
  42. nbformat (4.4.0)
  43. networkx (1.11)
  44. nose (1.3.7)
  45. notebook (5.0.0)
  46. numpy (1.13.1)
  47. olefile (0.44)
  48. pandas (0.20.3)
  49. pandocfilters (1.4.2)
  50. pathlib2 (2.3.0)
  51. pbr (3.1.1)
  52. pexpect (4.2.1)
  53. pickleshare (0.7.4)
  54. Pillow (4.2.1)
  55. pip (9.0.1)
  56. prompt-toolkit (1.0.15)
  57. protobuf (3.1.0)
  58. ptyprocess (0.5.2)
  59. pycrypto (2.6.1)
  60. pycurl (7.19.0)
  61. Pygments (2.2.0)
  62. pygobject (3.14.0)
  63. pygpgme (0.3)
  64. pyliblzma (0.5.3)
  65. pyparsing (2.2.0)
  66. python-dateutil (2.6.1)
  67. pytz (2017.2)
  68. PyWavelets (0.5.2)
  69. pyxattr (0.5.1)
  70. PyYAML (3.12)
  71. pyzmq (16.0.2)
  72. qtconsole (4.3.1)
  73. requests (2.18.4)
  74. scandir (1.5)
  75. scikit-image (0.13.0)
  76. scikit-learn (0.19.0)
  77. scikit-sound (0.1.8)
  78. scikit-stack (3.0)
  79. scikit-surprise (1.0.3)
  80. scikit-tensor (0.1)
  81. scikit-video (0.1.2)
  82. scipy (0.19.1)
  83. setuptools (36.2.7)
  84. simplegeneric (0.8.1)
  85. singledispatch (3.4.0.3)
  86. six (1.10.0)
  87. slip (0.4.0)
  88. slip.dbus (0.4.0)
  89. smart-open (1.5.3)
  90. subprocess32 (3.2.7)
  91. tensorflow (1.0.0)
  92. terminado (0.6)
  93. testpath (0.3.1)
  94. tflearn (0.3.2)
  95. Theano (0.9.0)
  96. torch (0.1.12.post2)
  97. tornado (4.5.1)
  98. traitlets (4.3.2)
  99. urlgrabber (3.10)
  100. urllib3 (1.22)
  101. wcwidth (0.1.7)
  102. webencodings (0.5.1)
  103. wheel (0.29.0)
  104. widgetsnbextension (3.0.0)
  105. yum-langpacks (0.4.2)
  106. yum-metadata-parser (1.1.4)
  107. opencv-python (3.3.0.10)

TensorFlow1.1.0版本第三方库

  1. appdirs (1.4.3)
  2. backports-abc (0.5)
  3. backports.shutil-get-terminal-size (1.0.0)
  4. backports.ssl-match-hostname (3.5.0.1)
  5. bleach (2.0.0)
  6. boto (2.48.0)
  7. bz2file (0.98)
  8. certifi (2017.7.27.1)
  9. chardet (3.0.4)
  10. configparser (3.5.0)
  11. cycler (0.10.0)
  12. decorator (4.1.2)
  13. docutils (0.14)
  14. easygui (0.98.1)
  15. entrypoints (0.2.3)
  16. enum34 (1.1.6)
  17. funcsigs (1.0.2)
  18. functools32 (3.2.3.post2)
  19. gensim (2.3.0)
  20. h5py (2.7.1)
  21. html5lib (0.999999999)
  22. idna (2.6)
  23. iniparse (0.4)
  24. ipykernel (4.6.1)
  25. ipython (5.4.1)
  26. ipython-genutils (0.2.0)
  27. ipywidgets (7.0.0)
  28. Jinja2 (2.9.6)
  29. jsonschema (2.6.0)
  30. jupyter (1.0.0)
  31. jupyter-client (5.1.0)
  32. jupyter-console (5.2.0)
  33. jupyter-core (4.3.0)
  34. jupyter-tensorboard (0.1.1)
  35. Keras (2.0.8)
  36. kitchen (1.1.1)
  37. langtable (0.0.31)
  38. MarkupSafe (1.0)
  39. matplotlib (2.0.2)
  40. mistune (0.7.4)
  41. mock (2.0.0)
  42. nbconvert (5.3.0)
  43. nbformat (4.4.0)
  44. networkx (1.11)
  45. nose (1.3.7)
  46. notebook (4.4.1)
  47. numpy (1.13.1)
  48. olefile (0.44)
  49. pandas (0.20.3)
  50. pandocfilters (1.4.2)
  51. pathlib2 (2.3.0)
  52. pbr (3.1.1)
  53. pexpect (4.2.1)
  54. pickleshare (0.7.4)
  55. Pillow (4.2.1)
  56. pip (9.0.1)
  57. prompt-toolkit (1.0.15)
  58. protobuf (3.1.0)
  59. ptyprocess (0.5.2)
  60. pycrypto (2.6.1)
  61. pycurl (7.19.0)
  62. Pygments (2.2.0)
  63. pygobject (3.14.0)
  64. pygpgme (0.3)
  65. pyliblzma (0.5.3)
  66. pyparsing (2.2.0)
  67. python-dateutil (2.6.1)
  68. pytz (2017.2)
  69. PyWavelets (0.5.2)
  70. pyxattr (0.5.1)
  71. PyYAML (3.12)
  72. pyzmq (16.0.2)
  73. qtconsole (4.3.1)
  74. requests (2.18.4)
  75. scandir (1.5)
  76. scikit-image (0.13.0)
  77. scikit-learn (0.19.0)
  78. scikit-sound (0.1.8)
  79. scikit-stack (3.0)
  80. scikit-surprise (1.0.3)
  81. scikit-tensor (0.1)
  82. scikit-video (0.1.2)
  83. scipy (0.19.1)
  84. setuptools (36.4.0)
  85. simplegeneric (0.8.1)
  86. singledispatch (3.4.0.3)
  87. six (1.10.0)
  88. slip (0.4.0)
  89. slip.dbus (0.4.0)
  90. smart-open (1.5.3)
  91. subprocess32 (3.2.7)
  92. tensorflow (1.1.0)
  93. terminado (0.6)
  94. testpath (0.3.1)
  95. tflearn (0.3.2)
  96. Theano (0.9.0)
  97. torch (0.1.12.post2)
  98. tornado (4.5.2)
  99. traitlets (4.3.2)
  100. urlgrabber (3.10)
  101. urllib3 (1.22)
  102. wcwidth (0.1.7)
  103. webencodings (0.5.1)
  104. Werkzeug (0.12.2)
  105. wheel (0.29.0)
  106. widgetsnbextension (3.0.2)
  107. yum-langpacks (0.4.2)
  108. yum-metadata-parser (1.1.4)
  109. opencv-python (3.3.0.10)

TensorFlow1.2.1版本第三方库

  1. appdirs (1.4.3)
  2. backports-abc (0.5)
  3. backports.shutil-get-terminal-size (1.0.0)
  4. backports.ssl-match-hostname (3.5.0.1)
  5. backports.weakref (1.0rc1)
  6. bleach (1.5.0)
  7. boto (2.48.0)
  8. bz2file (0.98)
  9. certifi (2017.7.27.1)
  10. chardet (3.0.4)
  11. configparser (3.5.0)
  12. cycler (0.10.0)
  13. decorator (4.1.2)
  14. docutils (0.14)
  15. easygui (0.98.1)
  16. entrypoints (0.2.3)
  17. enum34 (1.1.6)
  18. funcsigs (1.0.2)
  19. functools32 (3.2.3.post2)
  20. gensim (2.3.0)
  21. h5py (2.7.1)
  22. html5lib (0.9999999)
  23. idna (2.6)
  24. iniparse (0.4)
  25. ipykernel (4.6.1)
  26. ipython (5.4.1)
  27. ipython-genutils (0.2.0)
  28. ipywidgets (7.0.0)
  29. Jinja2 (2.9.6)
  30. jsonschema (2.6.0)
  31. jupyter (1.0.0)
  32. jupyter-client (5.1.0)
  33. jupyter-console (5.2.0)
  34. jupyter-core (4.3.0)
  35. jupyter-tensorboard (0.1.1)
  36. Keras (2.0.8)
  37. kitchen (1.1.1)
  38. langtable (0.0.31)
  39. Markdown (2.6.9)
  40. MarkupSafe (1.0)
  41. matplotlib (2.0.2)
  42. mistune (0.7.4)
  43. mock (2.0.0)
  44. nbconvert (5.3.0)
  45. nbformat (4.4.0)
  46. networkx (1.11)
  47. nose (1.3.7)
  48. notebook (4.4.1)
  49. numpy (1.13.1)
  50. olefile (0.44)
  51. pandas (0.20.3)
  52. pandocfilters (1.4.2)
  53. pathlib2 (2.3.0)
  54. pbr (3.1.1)
  55. pexpect (4.2.1)
  56. pickleshare (0.7.4)
  57. Pillow (4.2.1)
  58. pip (9.0.1)
  59. prompt-toolkit (1.0.15)
  60. protobuf (3.1.0)
  61. ptyprocess (0.5.2)
  62. pycrypto (2.6.1)
  63. pycurl (7.19.0)
  64. Pygments (2.2.0)
  65. pygobject (3.14.0)
  66. pygpgme (0.3)
  67. pyliblzma (0.5.3)
  68. pyparsing (2.2.0)
  69. python-dateutil (2.6.1)
  70. pytz (2017.2)
  71. PyWavelets (0.5.2)
  72. pyxattr (0.5.1)
  73. PyYAML (3.12)
  74. pyzmq (16.0.2)
  75. qtconsole (4.3.1)
  76. requests (2.18.4)
  77. scandir (1.5)
  78. scikit-image (0.13.0)
  79. scikit-learn (0.19.0)
  80. scikit-sound (0.1.8)
  81. scikit-stack (3.0)
  82. scikit-surprise (1.0.3)
  83. scikit-tensor (0.1)
  84. scikit-video (0.1.2)
  85. scipy (0.19.1)
  86. setuptools (36.4.0)
  87. simplegeneric (0.8.1)
  88. singledispatch (3.4.0.3)
  89. six (1.10.0)
  90. slip (0.4.0)
  91. slip.dbus (0.4.0)
  92. smart-open (1.5.3)
  93. subprocess32 (3.2.7)
  94. tensorflow (1.2.1)
  95. terminado (0.6)
  96. testpath (0.3.1)
  97. tflearn (0.3.2)
  98. Theano (0.9.0)
  99. torch (0.1.12.post2)
  100. tornado (4.5.2)
  101. traitlets (4.3.2)
  102. urlgrabber (3.10)
  103. urllib3 (1.22)
  104. wcwidth (0.1.7)
  105. webencodings (0.5.1)
  106. Werkzeug (0.12.2)
  107. wheel (0.29.0)
  108. widgetsnbextension (3.0.2)
  109. yum-langpacks (0.4.2)
  110. yum-metadata-parser (1.1.4)
  111. opencv-python (3.3.0.10)

MXNet

MXNet是一个深度学习框架,支持命令和符号编程,可以运行在CPU和GPU集群上。MXNet是cxxnet的下一代,cxxnet借鉴了minerva的思想。

参数说明

  • 参数设置

    • Python代码文件:程序执行文件,多个文件可通过tar.gz打包上传。
    • Python主文件:指定代码文件压缩包中的主文件,可选。
    • 数据源目录:选择OSS上的数据源。
    • 配置文件超参及用户自定义参数:PAI MXNet支持用户通过命令传入相应的超参配置,这样用户在做模型试验的时候可以尝试不同的learning rate, batch size等。
    • 输出目录:输出的模型路径。
  • 执行调优

    用户可以根据自身任务的复杂程度指定GPU卡数。

PAI 命令

实际使用中,并不需要指定所有参数(不要直接复制下面的命令),各个参数的含义可以参考后面的表格。

  1. PAI -name mxnet_ext
  2. -Dscript="oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/mxnet-ext-code/mxnet_cifar10_demo.tar.gz"
  3. -DentryFile="train_cifar10.py"
  4. -Dbuckets="oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com"
  5. -DcheckpointDir="oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/mxnet-ext-model/"
  6. -DhyperParameters="oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/mxnet-ext-code/hyperparam.txt.single"
  7. -Darn="acs:ram::1664081855183111:role/role-for-pai";

各个参数的具体含义如下表:

参数名称 参数描述 参数值格式 默认值
script 必选,TF算法文件,可以是单个文件或者tar.gz压缩包 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_mxnet/mnist_ext.py oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/smoke_mxnet/mnist_ext.py -
entryFile 可选,算法入口文件名,当script为tar.gz压缩包时,该参数必填 train.py
buckets 必选,输入bucket,可多个,以逗号隔开, 每个bucket须以”/“结尾 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com
hyperParameters 可选,命令行超参数路径 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/mxnet-ext-code/
gpuRequired 可选,标识使用GPU资源量 200 100
checkpointDir 可选, checkpoint目录 oss://imagenet.oss-cn-shanghai-internal.aliyuncs.com/mxnet-ext-code/

案例

CIFAR-10是MXNet官方提供的基于图片的10分类场景的案例,通过对于6万张32*32的图片进行训练生成模型,可以对飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车进行自动分类。详细内容见:https://www.cs.toronto.edu/~kriz/cifar.html

  1. 在OSS端上传python执行文件以及训练数据集。本案例在OSS华东2 region创建bucket,bucket名为tfmnist,上传python脚本以及训练数据。

  2. 拖拽读OSS Bucket和MXNet组件,拼接成如下实验。需要设置好OSS Bucket的地区,并完成RAM授权,如下图所示。

  3. 配置MXNet组件参数。参照下图配置python执行文件以及数据源文件路径,如下图所示。

    • Python代码文件选择.tar.gz文件。
    • Python主文件选择tar包中的执行入口文件。
    • 超参自定义参数文件选择.txt.single文件。
    • checkpoint为模型输出目录。
  4. 单击运行,直到两个组件运行完成,如下图所示。

  5. 右键单击MXNet组件,查看运行日志。

  6. 在checkpoint地址下生成如下图所示的模型。

格式转换

目前PAI Caffe不支持自定义格式的训练数据,需要通过格式转换组件进行转换方可使用。

  • 输入桩连接读OSS Bucket组件。

  • 参数

    • 输入OSS路径。OSS的训练数据的file_list(如bucket.hz.aliyun.com/train_img/train_file_list.txt )格式如下:
      1. bucket/ilsvrc12_val/ILSVRC2012_val_00029021.JPEG 817
      2. bucket/ilsvrc12_val/ILSVRC2012_val_00021046.JPEG 913
      3. bucket/ilsvrc12_val/ILSVRC2012_val_00041166.JPEG 486
      4. bucket/ilsvrc12_val/ILSVRC2012_val_00029527.JPEG 327
      5. bucket/ilsvrc12_val/ILSVRC2012_val_00042825.JPEG 138
    • 输出oss目录。如 bucket_name.oss-cn-hangzhou-zmf.aliyuncs.com/ilsvrc12_val_convert ,会输出转换后的data_file_list.txt和对应的数据文件。data_file_list格式如下:

      1. bucket/ilsvrc12_val_convert/train_data_00_01
      2. bucket/ilsvrc12_val_convert/train_data_00_02
      • 编码类型:选项,可选jpg,png,raw等。
      • 是否shuffle:勾选。
      • 文件前缀:默认为data。
      • resize_height:默认为256。
      • resize_width:默认为256。
      • 是否灰度:默认为否。
      • 是否需要产生图片mean文件:默认为否。

PAI 命令

  1. PAI -name convert_image_oss2oss
  2. -Darn=acs:ram::1607128916545079:role/test-1
  3. -DossImageList=bucket_name.oss-cn-hangzhou-zmf.aliyuncs.com/image_list.txt
  4. -DossOutputDir=bucket_name.oss-cn-hangzhou-zmf.aliyuncs.com/your/dir
  5. -DencodeType=jpg
  6. -Dshuffle=true
  7. -DdataFilePrefix=train
  8. -DresizeHeight=256
  9. -DresizeWidth=256
  10. -DisGray=false
  11. -DimageMeanFile=false

参数说明

参数名称 参数描述 取值范围 是否必选,默认值/行为
ossHost 对应的oss host地址 形式如“oss-test.aliyun-inc.com” 可选,默认值为“oss-cn-hangzhou-zmf.aliyuncs.com”,即为对内oss使用的host
arn OSS Bucket默认Role对应的ARN 形式如“acs:ram::XXXXXXXXXXXXXXXX:role/ossaccessroleforodps”,中间xxx代表生成的rolearn的16位数字 必选
ossImageList 图片文件列表 形式如“bucket_name/image_list.txt” 必选
ossOutputDir 输出oss目录 形式如“bucket_name/your/dir” 必选
encodeType 编码类型 如jpg,png,raw 可选,默认值为jpg
shuffle 是否shuffle数据 bool值 可选,默认值为true
dataFilePrefix 数据文件前缀 string类型,如train或val 必选
resizeHeight 图像resize的height int类型,用户自定义 可选,默认值为256
resizeWidth 图像resize的width int类型,用户自定义 可选,默认值为256
isGray 图像是否为灰度图 bool值 可选,默认值为false
imageMeanFile 是否需要生成imagemean文件 bool值 可选,默认值为false

Caffe

Caffe 是一个清晰,可读性高,快速的深度学习框架。作者是贾扬清,加州大学伯克利的ph.D,现就职于Facebook。caffe的官网是 http://caffe.berkeleyvision.org/

参数说明

  • 首先配置OSS访问权限。

  • 唯一的参数就是solver.prototxt文件的oss路径。其中solver由于并行化的修改,同开源caffe略有不同,需要注意以下几点:

    • net:“bucket.hz.aliyun.com/alexnet/train_val.prototxt”,net的文件位置是oss路径。
    • type:“ParallelSGD”,type类型是ParallelSGD,为一个字符串。
    • model_average_iter_interval:1 多卡下表示同步的频率,1表示每轮都同步一次。
    • snapshot_prefix:“bucket/snapshot/alexnet_train”,模型输出到oss的目录。
  1. net: "bucket/alexnet/train_val.prototxt"
  2. test_iter: 1000
  3. test_interval: 1000
  4. base_lr: 0.01
  5. lr_policy: "step"
  6. gamma: 0.1
  7. stepsize: 100000
  8. display: 20
  9. max_iter: 450000
  10. momentum: 0.9
  11. weight_decay: 0.0005
  12. snapshot: 10000
  13. snapshot_prefix: "bucket/snapshot/alexnet_train"
  14. solver_mode: GPU
  15. type: "ParallelSGD"
  16. model_average_iter_interval: 1
  • train_val中的datalayer需使用BinaryDataLayer,请参考如下示例。

    1. layer {
    2. name: "data"
    3. type: "BinaryData"
    4. top: "data"
    5. top: "label"
    6. include {
    7. phase: TRAIN
    8. }
    9. transform_param {
    10. mirror: true
    11. crop_size: 227
    12. mean_file: "bucket/imagenet_mean.binaryproto"
    13. }
    14. binary_data_param {
    15. source: "bucket/ilsvrc12_train_binary/data_file_list.txt"
    16. batch_size: 256
    17. num_threads: 10
    18. }
    19. }
    20. layer {
    21. name: "data"
    22. type: "BinaryData"
    23. top: "data"
    24. top: "label"
    25. include {
    26. phase: TEST
    27. }
    28. transform_param {
    29. mirror: false
    30. crop_size: 227
    31. mean_file: "bucket/imagenet_mean.binaryproto"
    32. }
    33. binary_data_param {
    34. source: "bucket/ilsvrc12_val_binary/data_file_list.txt"
    35. batch_size: 50
    36. num_threads: 10
    37. }
    38. }

    新的data Layer的名称为BinaryData,其中也支持 transform param 对输入图像数据进行变换,参数和caffe原生参数保持一致。

    其中 binary_data_param 为数据层本身的参数配置,包括以下特殊的参数:

    • source:数据来源,其中路径为oss中filelist的路径,从bucket名称开始,不包含“oss://”。
    • num_threads:读取oss数据时并发的线程数目,默认值为10,用户可以根据自己的需求进行调整。

PAI 命令

  1. PAI -name pluto_train_oss
  2. -DossHost=oss-cn-hangzhou-zmf.aliyuncs.com
  3. -Darn=acs:ram::1607128916545079:role/test-1
  4. -DsolverPrototxtFile=bucket_name.oss-cn-hangzhou-zmf.aliyuncs.com/solver.prototxt
  5. -DgpuRequired=1

参数说明

参数名称 参数描述 取值范围 是否必选,默认值/行为
ossHost 对应的oss host地址 形式如“oss-test.aliyun-inc.com” 可选,默认值为“oss-cn-hangzhou-zmf.aliyuncs.com”,即为对内oss使用的host
arn OSS Bucket默认Role对应的ARN 形式如“acs:ram::XXXXXXXXXXXXXXXX:role/ossaccessroleforodps”,中间xxx代表生成的rolearn的16位数字 必选
solverPrototxtFile solver文件 solver文件在oss中的路径,从bucket name开始 必选
gpuRequired GPU卡个数 整型值 可选,默认值为1

案例

利用Caffe实现mnist的数据训练。

  1. 准备数据源

    在本文档的深度学习案例代码及数据下载章节中下载Caffe数据并解压。将数据导入OSS中,本案例路径如下图,请配合代码中的路径理解。

  2. 运行实验

    拖拉Caffe组件拼接成如下图所示的实验。

    solver oss路径指向mnist_solver_dnn_binary.prototxt文件,单击运行

  3. 查看日志

    右键单击Caffe组件,查看日志,如下图所示。

    单击 logview链接 -> ODPS Tasks -> VlinuxTask -> StdErr,查看训练过程产生的日志,如下图所示。

深度学习案例代码及数据下载

TensorFlow相关下载

MXNet相关下载

Caffe相关下载

本文导读目录